예제 #1
0
        public bool Read(PipeStream stream, Cookies cookies)
        {
            IndexOfResult index = stream.IndexOf(HeaderType.LINE_BYTES);

            while (index.End != null)
            {
                if (index.Length == 2)
                {
                    stream.ReadFree(2);
                    return(true);
                }
                else
                {
                    ReadOnlySpan <Char> line = HttpParse.ReadCharLine(index);
                    stream.ReadFree(index.Length);
                    if (line[0] == 'C' && line[5] == 'e' && line[1] == 'o' && line[2] == 'o' && line[3] == 'k' && line[4] == 'i')
                    {
                        HttpParse.AnalyzeCookie(line.Slice(8, line.Length - 8), cookies);
                    }
                    else
                    {
                        Tuple <string, string> result = HttpParse.AnalyzeHeader(line);
                        Add(result.Item1, result.Item2);
                    }
                }
                index = stream.IndexOf(HeaderType.LINE_BYTES);
            }
            return(false);
        }
예제 #2
0
 private void LoadMethod(PipeStream stream)
 {
     if (mState == LoadedState.None)
     {
         IndexOfResult index = stream.IndexOf(HeaderType.LINE_BYTES);
         if (index.End != null)
         {
             ReadOnlySpan <Char> line = HttpParse.ReadCharLine(index);
             stream.ReadFree(index.Length);
             Tuple <string, string, string> result = HttpParse.AnalyzeRequestLine(line);
             Method      = result.Item1;
             Url         = result.Item2;
             BaseUrl     = HttpParse.GetBaseUrlToLower(Url);
             Ext         = HttpParse.GetBaseUrlExt(BaseUrl);
             HttpVersion = result.Item3;
             HttpParse.AnalyzeQueryString(Url, mQueryString);
             mState = LoadedState.Method;
         }
     }
 }