예제 #1
0
        public static bool FindEntityBodyOffsetFromArray(byte[] arrData, out int iHeadersLen, out int iEntityBodyOffset, out HTTPHeaderParseWarnings outWarnings)
        {
            if ((arrData != null) && (arrData.Length >= 2))
            {
                int iBodySeekProgress = 0;
                long length = arrData.Length;
                if (FindEndOfHeaders(arrData, ref iBodySeekProgress, length, out outWarnings))
                {
                    iEntityBodyOffset = iBodySeekProgress + 1;
                    switch (outWarnings)
                    {
                        case HTTPHeaderParseWarnings.None:
                            iHeadersLen = iBodySeekProgress - 3;
                            return true;

                        case HTTPHeaderParseWarnings.EndedWithLFLF:
                            iHeadersLen = iBodySeekProgress - 1;
                            return true;

                        case HTTPHeaderParseWarnings.EndedWithLFCRLF:
                            iHeadersLen = iBodySeekProgress - 2;
                            return true;
                    }
                }
            }
            iHeadersLen = iEntityBodyOffset = -1;
            outWarnings = HTTPHeaderParseWarnings.Malformed;
            return false;
        }
예제 #2
0
 internal static bool FindEndOfHeaders(byte[] arrData, ref int iBodySeekProgress, long lngDataLen, out HTTPHeaderParseWarnings oWarnings)
 {
     bool flag;
     oWarnings = HTTPHeaderParseWarnings.None;
     Label_0003:
     flag = false;
     while (((long) iBodySeekProgress) < (lngDataLen - 1L))
     {
         iBodySeekProgress++;
         if (10 == arrData[iBodySeekProgress - 1])
         {
             flag = true;
             break;
         }
     }
     if (flag)
     {
         if ((13 != arrData[iBodySeekProgress]) && (10 != arrData[iBodySeekProgress]))
         {
             iBodySeekProgress++;
             goto Label_0003;
         }
         if (10 == arrData[iBodySeekProgress])
         {
             oWarnings = HTTPHeaderParseWarnings.EndedWithLFLF;
             return true;
         }
         iBodySeekProgress++;
         if ((((long) iBodySeekProgress) < lngDataLen) && (10 == arrData[iBodySeekProgress]))
         {
             if (13 != arrData[iBodySeekProgress - 3])
             {
                 oWarnings = HTTPHeaderParseWarnings.EndedWithLFCRLF;
             }
             return true;
         }
         if (iBodySeekProgress > 3)
         {
             iBodySeekProgress -= 4;
         }
         else
         {
             iBodySeekProgress = 0;
         }
     }
     return false;
 }
예제 #3
0
        internal static bool FindEndOfHeaders(byte[] arrData, ref int iBodySeekProgress, long lngDataLen, out HTTPHeaderParseWarnings oWarnings)
        {
            bool flag;

            oWarnings = HTTPHeaderParseWarnings.None;
Label_0003:
            flag = false;
            while (((long)iBodySeekProgress) < (lngDataLen - 1L))
            {
                iBodySeekProgress++;
                if (10 == arrData[iBodySeekProgress - 1])
                {
                    flag = true;
                    break;
                }
            }
            if (flag)
            {
                if ((13 != arrData[iBodySeekProgress]) && (10 != arrData[iBodySeekProgress]))
                {
                    iBodySeekProgress++;
                    goto Label_0003;
                }
                if (10 == arrData[iBodySeekProgress])
                {
                    oWarnings = HTTPHeaderParseWarnings.EndedWithLFLF;
                    return(true);
                }
                iBodySeekProgress++;
                if ((((long)iBodySeekProgress) < lngDataLen) && (10 == arrData[iBodySeekProgress]))
                {
                    if (13 != arrData[iBodySeekProgress - 3])
                    {
                        oWarnings = HTTPHeaderParseWarnings.EndedWithLFCRLF;
                    }
                    return(true);
                }
                if (iBodySeekProgress > 3)
                {
                    iBodySeekProgress -= 4;
                }
                else
                {
                    iBodySeekProgress = 0;
                }
            }
            return(false);
        }
예제 #4
0
        public static bool FindEntityBodyOffsetFromArray(byte[] arrData, out int iHeadersLen, out int iEntityBodyOffset, out HTTPHeaderParseWarnings outWarnings)
        {
            if ((arrData != null) && (arrData.Length >= 2))
            {
                int  iBodySeekProgress = 0;
                long length            = arrData.Length;
                if (FindEndOfHeaders(arrData, ref iBodySeekProgress, length, out outWarnings))
                {
                    iEntityBodyOffset = iBodySeekProgress + 1;
                    switch (outWarnings)
                    {
                    case HTTPHeaderParseWarnings.None:
                        iHeadersLen = iBodySeekProgress - 3;
                        return(true);

                    case HTTPHeaderParseWarnings.EndedWithLFLF:
                        iHeadersLen = iBodySeekProgress - 1;
                        return(true);

                    case HTTPHeaderParseWarnings.EndedWithLFCRLF:
                        iHeadersLen = iBodySeekProgress - 2;
                        return(true);
                    }
                }
            }
            iHeadersLen = iEntityBodyOffset = -1;
            outWarnings = HTTPHeaderParseWarnings.Malformed;
            return(false);
        }
예제 #5
0
        public static bool FindEntityBodyOffsetFromArray(byte[] arrData, out int iHeadersLen, out int iEntityBodyOffset, out HTTPHeaderParseWarnings outWarnings)
        {
            if (arrData != null && arrData.Length >= 2)
            {
                int  num        = 0;
                long lngDataLen = (long)arrData.Length;
                if (Parser.FindEndOfHeaders(arrData, ref num, lngDataLen, out outWarnings))
                {
                    iEntityBodyOffset = num + 1;
                    switch (outWarnings)
                    {
                    case HTTPHeaderParseWarnings.None:
                        iHeadersLen = num - 3;
                        return(true);

                    case HTTPHeaderParseWarnings.EndedWithLFLF:
                        iHeadersLen = num - 1;
                        return(true);

                    case HTTPHeaderParseWarnings.EndedWithLFCRLF:
                        iHeadersLen = num - 2;
                        return(true);
                    }
                }
            }
            iEntityBodyOffset = -1;
            iHeadersLen       = -1;
            outWarnings       = HTTPHeaderParseWarnings.Malformed;
            return(false);
        }