[Csmail-patches] CVS: csmail/src/CSMail ChangeLog,1.58,1.59 EMailAddress.cs,1.7,1.8 EMailAddressList
Status: Pre-Alpha
Brought to you by:
mastergaurav
From: Gaurav V. <mas...@us...> - 2002-10-25 17:07:10
|
Update of /cvsroot/csmail/csmail/src/CSMail In directory usw-pr-cvs1:/tmp/cvs-serv4727 Modified Files: ChangeLog EMailAddress.cs EMailAddressList.cs Log Message: 2002-10-25 * EMailAddress.cs : Validate() - Implemented. : Unquote(string) - Implemented. * EMailAddressList.cs : Contains() - Implemented. : Parse(string, bool, bool) - Can now unquote. Index: ChangeLog =================================================================== RCS file: /cvsroot/csmail/csmail/src/CSMail/ChangeLog,v retrieving revision 1.58 retrieving revision 1.59 diff -u -r1.58 -r1.59 --- ChangeLog 25 Oct 2002 08:52:12 -0000 1.58 +++ ChangeLog 25 Oct 2002 09:22:18 -0000 1.59 @@ -1,6 +1,13 @@ 2002-10-25 Gaurav Vaish <mastergaurav AT users DOT sf DOT net> + * EMailAddress.cs : Validate() - Implemented. + : Unquote(string) - Implemented. + * EMailAddressList.cs : Contains() - Implemented. + : Parse(string, bool, bool) - Can now unquote. + +2002-10-25 Gaurav Vaish <mastergaurav AT users DOT sf DOT net> + * Constants.cs : RFC822Phrase, : RFC822PhraseNoDot, : RFC822PhraseNoDotAt - New constants. Index: EMailAddress.cs =================================================================== RCS file: /cvsroot/csmail/csmail/src/CSMail/EMailAddress.cs,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- EMailAddress.cs 25 Oct 2002 08:52:13 -0000 1.7 +++ EMailAddress.cs 25 Oct 2002 09:22:18 -0000 1.8 @@ -9,6 +9,7 @@ */ using System; +using System.Text; namespace CSMail { @@ -26,6 +27,13 @@ private string host; private string name; + public EMailAddress() + { + user = null; + host = null; + name = null; + } + public EMailAddress(string email) { Parse(email); @@ -66,6 +74,32 @@ host = parts[1]; } + protected internal static string Unquote(string source) + { + if(source[0] == '"' && source[source.Length - 1] == '"') + { + source = source.Substring(1, source.Length - 2); + if(source.IndexOf('\\') >= 0) + { + StringBuilder sb = new StringBuilder(source.Length); + char c; + int len = source.Length; + for(int index = 0; index < len; index++) + { + c = source[index]; + if(c == '\\' && index < len - 1) + { + index++; + c = source[index]; + } + sb.Append(c); + } + source = sb.ToString(); + } + } + return source; + } + protected internal static void ValidateAddress(string address, bool isEmail) { @@ -138,7 +172,13 @@ { get { - return user; + if(user != null) + return user; + return String.Empty; + } + set + { + user = value; } } @@ -149,7 +189,13 @@ { get { - return host; + if(host != null) + return host; + return String.Empty; + } + set + { + host = value; } } @@ -160,7 +206,13 @@ { get { - return name; + if(name != null) + return name; + return String.Empty; + } + set + { + name = value; } } @@ -176,10 +228,9 @@ } } - [MailTODO] public void Validate() { - throw new NotImplementedException(); + ValidateAddress(user + '@' + host, true); } /// <summary> @@ -292,7 +343,7 @@ /// </returns> public override int GetHashCode() { - string em = user.ToLower() + "@" + host.ToLower(); + string em = User.ToLower() + "@" + Host.ToLower(); return em.GetHashCode(); } Index: EMailAddressList.cs =================================================================== RCS file: /cvsroot/csmail/csmail/src/CSMail/EMailAddressList.cs,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- EMailAddressList.cs 25 Oct 2002 08:52:13 -0000 1.6 +++ EMailAddressList.cs 25 Oct 2002 09:22:18 -0000 1.7 @@ -9,6 +9,7 @@ */ using System; +using System.Text; using System.Collections; namespace CSMail @@ -20,14 +21,13 @@ /// <seealso cref="IAddressList"/> public class EMailAddressList: IAddressList, IEnumerable { - private ArrayList emails; + private ArrayList emails = new ArrayList(); /// <summary> /// Creates an empty instance. /// </summary> public EMailAddressList() { - emails = new ArrayList(); } /// <summary> @@ -37,7 +37,6 @@ /// filled in the initial list.</param> public EMailAddressList(EMailAddress[] addresses) { - emails = new ArrayList(); foreach(EMailAddress current in addresses) { if(current != null) @@ -54,7 +53,6 @@ /// filled in the initial list.</param> public EMailAddressList(EMailAddressList addresses) { - emails = new ArrayList(); foreach(EMailAddress current in addresses) { if(current != null) @@ -64,10 +62,16 @@ } } - [MailTODO] public EMailAddressList(string headerValue) { - throw new NotImplementedException(); + EMailAddress[] values = Parse(headerValue); + if(values != null && values.Length > 0) + { + foreach(EMailAddress current in values) + { + emails.Add(current); + } + } } public static EMailAddress[] Parse(string headerValue) @@ -87,7 +91,6 @@ return Parse(headerValue, strict, true); } - [MailTODO] private static EMailAddress[] Parse(string headerValue, bool strict, bool validate) { @@ -286,9 +289,12 @@ toAdd = new EMailAddress(actVal); if(nameStartIndex >= 0) { - throw new NotImplementedException("[EMailAddressList]" + - " Don't know yet, how to unquote"); - // reset nameStartIndex and addressStartIndex + toAdd.Name = EMailAddress.Unquote( + headerValue.Substring( + nameStartIndex, + addressStartIndex - nameStartIndex).Trim()); + nameStartIndex = -1; + addressStartIndex = -1; } addressList.Add(toAdd); toAdd = null; @@ -327,9 +333,12 @@ toAdd = new EMailAddress(actVal); if(nameStartIndex >= 0) { - throw new NotImplementedException("[EMailAddressList]" + - " Don't know yet, how to unquote"); - // reset nameStartIndex and addressStartIndex + toAdd.Name = EMailAddress.Unquote( + headerValue.Substring( + nameStartIndex, + addressStartIndex - nameStartIndex).Trim()); + nameStartIndex = -1; + addressStartIndex = -1; } addressList.Add(toAdd); toAdd = null; @@ -419,10 +428,9 @@ } } - [MailTODO] public bool Contains(EMailAddress address) { - throw new NotImplementedException(); + return emails.Contains(address); } /// <summary> |