Update of /cvsroot/dnsmail/dnsmail
In directory sc8-pr-cvs12.sourceforge.net:/tmp/cvs-serv3858/dnsmail
Modified Files:
Tag: DNSMAIL_02
MIME.cs
Log Message:
Some optimisation.
Index: MIME.cs
===================================================================
RCS file: /cvsroot/dnsmail/dnsmail/MIME.cs,v
retrieving revision 1.1
retrieving revision 1.1.8.1
diff -C2 -d -r1.1 -r1.1.8.1
*** MIME.cs 2 Mar 2006 16:26:54 -0000 1.1
--- MIME.cs 3 Aug 2006 16:34:00 -0000 1.1.8.1
***************
*** 123,127 ****
#endregion
-
#region QPEncode
public static byte[] QPEncode(byte[] originalBuffer)
--- 123,126 ----
***************
*** 221,290 ****
public static byte[] QPDecode(byte[] decodedBuffer)
{
! if (decodedBuffer == null)
! return null;
!
! int buflen = decodedBuffer.Length;
! MemoryStream ms = new MemoryStream();
! byte[] token = new byte[3];
! int tokenLength = 0, i = 0, j;
! try
{
! for(byte b,c,n1,n2; i < buflen; )
{
! if (tokenLength == 0)
{
! j = i;
! while(i<buflen && decodemap[decodedBuffer[i]]!=DESC)i++;
! if (i!=j)ms.Write(decodedBuffer,j,i-j);
! if (i>=buflen)break;
! }
! b = decodedBuffer[i++];
! c = decodemap[b];
!
! token[tokenLength++] = b;
!
! if (tokenLength != 3)
! continue;
!
! tokenLength ^= tokenLength; // set 0
!
! // assert (decodemap[token[0]] == DESC)
! n1 = decodemap[token[1]];
! n2 = decodemap[token[2]];
! if (n1 == DCR || n1 == DLF)
! { // "=\r", "=\n", or "=\r\n"
! if (n1 == DLF || n2 != DLF)
{
! if (n2 == DESC)
! {
! token[0] = token[2];
! tokenLength = 1;
! }
else
! ms.WriteByte(token[2]);
}
! }
! else if (n1 <= 15 || n2 <= 15)
! ms.WriteByte((byte)((n1 << 4) | n2));
! else
! ms.Write(token, 0, token.Length);
}
- byte[] ret = ms.ToArray();
- return ret;
- }
- catch
- {
- return null;
- }
- finally
- {
- ms.SetLength(0L);
- ms.Capacity=0;
- ms.Close();
- ms=null;
}
}
#endregion
--- 220,298 ----
public static byte[] QPDecode(byte[] decodedBuffer)
{
! byte[] ret = null;
! if (decodedBuffer != null)
{
! int buflen = decodedBuffer.Length;
! MemoryStream ms = new MemoryStream();
! byte[] token = new byte[3];
! int tokenLength = 0, i = 0;
! try
{
! while (i < buflen)
{
! if (tokenLength == 0)
! {
! int j = i;
! while (i < buflen && decodemap[decodedBuffer[i]] != DESC)
! i++;
! if (i != j)
! ms.Write(decodedBuffer, j, i - j);
! if (i >= buflen)
! break;
! }
! byte b = decodedBuffer[i++];
! byte c = decodemap[b];
! token[tokenLength++] = b;
! if (tokenLength == 3)
{
! tokenLength ^= tokenLength;
! // assert (decodemap[token[0]] == DESC)
! byte n1 = decodemap[token[1]];
! byte n2 = decodemap[token[2]];
! if (n1 == DCR || n1 == DLF)
! { // "=\r", "=\n", or "=\r\n"
! if (n1 == DLF || n2 != DLF)
! {
! if (n2 == DESC)
! {
! token[0] = token[2];
! tokenLength = 1;
! }
! else
! {
! ms.WriteByte(token[2]);
! }
! }
! }
else
! {
! if (n1 <= 15 || n2 <= 15)
! {
! ms.WriteByte((byte)((n1 << 4) | n2));
! continue;
! }
! ms.Write(token, 0, token.Length);
! }
}
! }
! ret = ms.ToArray();
! }
! catch
! {
! ret = null;
! }
! finally
! {
! ms.SetLength(0L);
! ms.Capacity=0;
! ms.Close();
! ms=null;
}
}
+ return ret;
+
}
#endregion
|