[Dnsmail-cvs] dnsmail MIME.cs,1.1,1.1.8.1
Brought to you by:
ethem
From: Ethem E. <et...@us...> - 2006-08-03 16:34:07
|
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 |