Gallatin.Core.Web.ReadHeaderState.ParseHeader C# (CSharp) Méthode

ParseHeader() private méthode

private ParseHeader ( ) : void
Résultat void
        private void ParseHeader()
        {
            _headerData.Position = 0;

            string header = Encoding.UTF8.GetString( _headerData.ToArray() );

            WebLog.Logger.Verbose( "Original HTTP header\r\n " + header );

            string[] headerLines = header.Split( new[]
                                                 {
                                                     "\r\n"
                                                 },
                                                 StringSplitOptions.RemoveEmptyEntries );

            var headers = CreateHeaders( headerLines );

            bool parseOk = false;
            string httpVersion = null;

            const int TokensInHttpVersionString = 2;

            // Response?
            if (headerLines[0].StartsWith("HTTP"))
            {
                // Typical line will look like "HTTP/1.1 200 OK somthing else"
                string[] tokens = headerLines[0].Split( ' ' );

                const int MinTokensInResponse = 2;
                if (tokens.Length >= MinTokensInResponse)
                {
                    int statusCode;
                    if (int.TryParse(tokens[1], out statusCode))
                    {
                        string[] versionTokens = tokens[0].Split('/');
                        if (versionTokens.Length == TokensInHttpVersionString)
                        {
                            parseOk = true;

                            string statusString = "";
                            if(tokens.Length > MinTokensInResponse )
                            {
                                for(int i = MinTokensInResponse; i< tokens.Length; i++)
                                {
                                    statusString += tokens[i] + " ";
                                }
                            }

                            httpVersion = versionTokens[1];

                            _context.OnReadResponseHeaderComplete(
                                httpVersion,
                                headers,
                                statusCode,
                                statusString.Trim() );
                        }

                    }

                }
            }
            else
            {
                // Typcial line will look like "GET / HTTP/1.1"
                string[] tokens = headerLines[0].Split( ' ' );
                const int TokensInValidHttpRequestLine = 3;
                if (tokens.Length == TokensInValidHttpRequestLine)
                {
                    string[] versionTokens = tokens[2].Split( '/' );

                    if(versionTokens.Length == TokensInHttpVersionString)
                    {
                        parseOk = true;

                        httpVersion = versionTokens[1];

                        _context.OnReadRequestHeaderComplete(
                            httpVersion,
                            headers,
                            tokens[0],
                            tokens[1]);
                    }
                }
            }

            if(!parseOk)
            {
                    throw new ArgumentException(
                        "The HTTP data could not be identified as a request or response.");

            }

            InterpretHttpHeaders( headers, httpVersion );
        }