[Csmail-patches] CVS: csmail/src/CSMail Constants.cs,1.4,1.5 Header.cs,1.3,1.4 HeaderList.cs,1.7,1.8
Status: Pre-Alpha
Brought to you by:
mastergaurav
From: Gaurav V. <mas...@us...> - 2002-10-03 08:58:51
|
Update of /cvsroot/csmail/csmail/src/CSMail In directory usw-pr-cvs1:/tmp/cvs-serv4813 Modified Files: Constants.cs Header.cs HeaderList.cs ChangeLog Log Message: 2002-10-01 * Constants.cs : CR, LF - Added new constants. * HeaderList.cs : GetAsHeader(string) - Implemented. : this[string] - Implemented. : ctor(StreamReader) - Implemented. : ConvertDuplicatesToValues() - Implemented. : Add(HeaderList) - Implemented. * Header.cs : ToString() - Uses Constants.CRLF : Value, Values - Made writable. : ctor(StreamReader) - Stubbed. Index: Constants.cs =================================================================== RCS file: /cvsroot/csmail/csmail/src/CSMail/Constants.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- Constants.cs 1 Oct 2002 10:33:20 -0000 1.4 +++ Constants.cs 3 Oct 2002 08:58:48 -0000 1.5 @@ -55,7 +55,10 @@ /// <summary> /// The standard CRLF (0x13,0x10) value. /// </summary> - public const string CRLF = "\r\f"; + public const string CRLF = "\r\n"; + + public const char CR = '\r'; + public const char LF = '\n'; /// <summary> /// Key that holds class-name for store service provider. Index: Header.cs =================================================================== RCS file: /cvsroot/csmail/csmail/src/CSMail/Header.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Header.cs 6 Sep 2002 09:30:27 -0000 1.3 +++ Header.cs 3 Oct 2002 08:58:48 -0000 1.4 @@ -8,6 +8,9 @@ * (C) Gaurav Vaish (2002) */ +using System; +using System.IO; + namespace CSMail { /// <summary> @@ -57,6 +60,50 @@ } } + public Header(StreamReader reader) + { + if(reader == null) + { + throw new ArgumentNullException("[HeaderList] Null value for reader"); + } + + if((char)reader.Peek() == Constants.CR) + { + throw new ArgumentException("[Header] Empty line"); + } + + string valuePart = String.Empty; + string namePart = null; + char c; + int colon; + string lastLine; + while(true) + { + c = (char)reader.Peek(); + if(c != ' ' || c != '\t' && namePart != null) + { + break; + } + + lastLine = reader.ReadLine(); + colon = lastLine.IndexOf(':'); + if(namePart == null && colon < 0) + { + throw new FormatException("[Header] Illegal data format"); + } + + if(namePart == null) + { + namePart = lastLine.Substring(0, colon).Trim(); + valuePart += lastLine.Substring(colon + 1).TrimStart( + new char[] { ' ', '\t'}); + } else + { + valuePart += (Constants.CRLF + lastLine); + } + } + } + /// <summary> /// Returns the header name. /// </summary> @@ -83,6 +130,11 @@ return values[0]; return null; } + set + { + values = new string[1]; + values[0] = value; + } } /// <summary> @@ -94,6 +146,10 @@ { return values; } + set + { + values = value; + } } /// <summary> @@ -113,7 +169,7 @@ string retVal = ""; foreach(string current in Values) { - retVal += (name + ": " + current + "\r\n"); + retVal += (name + ": " + current + Constants.CRLF); } return retVal; } Index: HeaderList.cs =================================================================== RCS file: /cvsroot/csmail/csmail/src/CSMail/HeaderList.cs,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- HeaderList.cs 30 Sep 2002 04:01:37 -0000 1.7 +++ HeaderList.cs 3 Oct 2002 08:58:48 -0000 1.8 @@ -22,6 +22,9 @@ { private ArrayList headers = new ArrayList(); + private readonly object lockObj = new object(); + private bool hasConverted = true; + /// <summary> /// Creates an empty list. /// </summary> @@ -39,12 +42,88 @@ headers.Add(header); } - [MailTODO] public HeaderList(StreamReader reader) { + if(reader == null) + { + throw new ArgumentNullException("[HeaderList] Null value for reader"); + } + + int c; + while((char)(c = reader.Peek()) == Constants.CR) + { + c = reader.Read(); + c = reader.Read(); + if((char)c != Constants.LF) + throw new FormatException("[HeaderList] Illegal data in stream"); + } + + while(true) + { + try + { + Add(new Header(reader)); + } catch(ArgumentException) + { + break; + } + } + hasConverted = false; + ConvertDuplicatesToValues(); + } + + private void ConvertDuplicatesToValues() + { + if(!hasConverted) + { + HeaderList temp = new HeaderList(); + string[] keys = GetNames(); + foreach(string cKey in keys) + { + Header[] toAdd = GetHeadersByName(cKey); + if(toAdd != null) + { + temp.Add(ConvertToSingle(toAdd)); + } + } + Clear(); + Add(temp); + hasConverted = true; + } + } + + private Header ConvertToSingle(Header[] headers) + { throw new NotImplementedException(); } + private string[] GetNames() + { + String names = ""; + String lower = ""; + //foreach(Header current in this) + //{ + //if(!lower.IndexOf(':' + + //} + throw new NotImplementedException(); + } + + private Header[] GetHeadersByName(string name) + { + int count = Count; + for(int i = 0; i < count; i++) + { + if(String.Compare(name, this[i].Name, false) == 0) + throw new NotImplementedException(); + } + return null; + } + + private bool IsSpace(char c) + { + return (c == ' ' || c == '\t'); + } + /// <summary> /// Creates a list with a given set of headers. /// </summary> @@ -105,11 +184,17 @@ { get { - return (Header)(headers[index]); + lock(lockObj) + { + return (Header)(headers[index]); + } } set { - headers[index] = value; + lock(lockObj) + { + headers[index] = value; + } } } @@ -126,23 +211,44 @@ /// only one with the provided name and value will be /// created. /// </remarks> - [MailTODO] public string this[string name] { get { - throw new NotImplementedException(); + Header toSearch = GetHeaderByName(name, false); + if(toSearch != null) + { + return toSearch.Values[0]; + } + return null; } set { - throw new NotImplementedException(); + Header toReplace = GetHeaderByName(name, false); + if(toReplace != null) + { + toReplace.Value = value; + } else + { + Add(new Header(name, value)); + } } } - [MailTODO] public Header[] GetAsHeader(string name) { - throw new NotImplementedException(); + Header toSearch = GetHeaderByName(name, false); + if(toSearch != null && toSearch.Values != null && + toSearch.Values.Length > 0) + { + Header[] retVal = new Header[toSearch.Values.Length]; + for(int i = 0; i < toSearch.Values.Length; i++) + { + retVal[i] = new Header(toSearch.Name, toSearch.Values[i]); + } + return retVal; + } + return null; } /// <summary> @@ -161,7 +267,19 @@ /// after adding the header.</returns> public int Add(Header header) { - return headers.Add(header); + lock(lockObj) + { + return headers.Add(header); + } + } + + public int Add(HeaderList headers) + { + foreach(Header current in headers) + { + Add(current); + } + return Count; } /// <summary> @@ -179,7 +297,7 @@ this.headers.Add(current); } } - return this.headers.Count; + return Count; } /// <summary> Index: ChangeLog =================================================================== RCS file: /cvsroot/csmail/csmail/src/CSMail/ChangeLog,v retrieving revision 1.52 retrieving revision 1.53 diff -u -r1.52 -r1.53 --- ChangeLog 1 Oct 2002 11:47:41 -0000 1.52 +++ ChangeLog 3 Oct 2002 08:58:48 -0000 1.53 @@ -1,6 +1,19 @@ 2002-10-01 Gaurav Vaish <mastergaurav AT users DOT sf DOT net> + * Constants.cs : CR, LF - Added new constants. + * HeaderList.cs : GetAsHeader(string) - Implemented. + : this[string] - Implemented. + : ctor(StreamReader) - Implemented. + : ConvertDuplicatesToValues() + - Implemented. + : Add(HeaderList) - Implemented. + * Header.cs : ToString() - Uses Constants.CRLF + : Value, Values - Made writable. + : ctor(StreamReader) - Stubbed. + +2002-10-01 Gaurav Vaish <mastergaurav AT users DOT sf DOT net> + * MimeMessage.cs : SaveChanges() - Implemented. : UpdateHeaders() - Initial Implementation. |