コード例 #1
0
 public void ReadHeadersAndInspectHandshake()
 {
     try
     {
         _response            = Read11Headers();
         _wasResponseReceived = true;
     }
     catch (Exception ex)
     {
         Http2Logger.LogError(ex.Message);
         throw;
     }
 }
コード例 #2
0
 public void ReadHeadersAndInspectHandshake()
 {
     try
     {
         _response = Read11Headers();
         _wasResponseReceived = true;
     }
     catch (Exception ex)
     {
         Http2Logger.LogError(ex.Message);
         throw;
     }
 }
コード例 #3
0
        // We've found a CRLFCRLF sequence.  Confirm the status code is 101 for upgrade.
        private HandshakeResponse InspectHanshake(byte[] buffer, int split, int limit)
        {
            var handshake = new HandshakeResponse
            {
                ResponseBytes = new ArraySegment <byte>(buffer, 0, split),
                ExtraData     = new ArraySegment <byte>(buffer, split, limit),
            };

            // Must be at least "HTTP/1.1 101\r\nConnection: Upgrade\r\nUpgrade: HTTP/2.0\r\n\r\n"
            Contract.Assert(split >= 0 && split - 1 < buffer.Length);
            var response = Encoding.ASCII.GetString(buffer, 0, split);

            if (_end == ConnectionEnd.Client)
            {
                int    status       = StatusCode.Code101SwitchingProtocols;
                string reasonPhrase = StatusCode.GetReasonPhrase(status);

                if (response.StartsWith(String.Format("{0} {1} {2}", Protocols.Http1, status.ToString(), reasonPhrase),
                                        StringComparison.OrdinalIgnoreCase) &&
                    response.IndexOf(String.Format("\r\n{0}: {1}\r\n", CommonHeaders.Connection, CommonHeaders.Upgrade),
                                     StringComparison.OrdinalIgnoreCase) >= 0 &&
                    response.IndexOf(String.Format("\r\n{0}: {1}\r\n", CommonHeaders.Upgrade, Protocols.Http2NoTls),
                                     StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    handshake.Result = HandshakeResult.Upgrade;
                }
                else
                {
                    handshake.Result = HandshakeResult.NonUpgrade;
                }
            }
            else
            {
                if (
                    response.IndexOf(String.Format("\r\n{0}: {1}, {2}\r\n", CommonHeaders.Connection, CommonHeaders.Upgrade, CommonHeaders.Http2Settings),
                                     StringComparison.OrdinalIgnoreCase) >= 0 &&
                    response.IndexOf(String.Format("\r\n{0}: {1}\r\n", CommonHeaders.Upgrade, Protocols.Http2NoTls),
                                     StringComparison.OrdinalIgnoreCase) >= 0 &&
                    response.IndexOf(String.Format("\r\n{0}:", CommonHeaders.Http2Settings), StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    GetHeaders(response);
                    handshake.Result = HandshakeResult.Upgrade;
                }
                else
                {
                    handshake.Result = HandshakeResult.NonUpgrade;
                }
            }

            return(handshake);
        }
コード例 #4
0
        // We've found a CRLFCRLF sequence.  Confirm the status code is 101 for upgrade.
        private HandshakeResponse InspectHanshake(byte[] buffer, int split, int limit)
        {
            var handshake = new HandshakeResponse
                {
                    ResponseBytes = new ArraySegment<byte>(buffer, 0, split),
                    ExtraData = new ArraySegment<byte>(buffer, split, limit),
                };
            // Must be at least "HTTP/1.1 101\r\nConnection: Upgrade\r\nUpgrade: HTTP/2.0\r\n\r\n"
            Contract.Assert(split >= 0 && split - 1 < buffer.Length);
            var response = Encoding.ASCII.GetString(buffer, 0, split);
            if (_end == ConnectionEnd.Client)
            {
                int status = StatusCode.Code101SwitchingProtocols;
                string reasonPhrase = StatusCode.GetReasonPhrase(status);

                if (response.StartsWith(String.Format("{0} {1} {2}", Protocols.Http1, status.ToString(), reasonPhrase),
                                            StringComparison.OrdinalIgnoreCase)
                    && response.IndexOf(String.Format("\r\n{0}: {1}\r\n", CommonHeaders.Connection, CommonHeaders.Upgrade),
                                            StringComparison.OrdinalIgnoreCase) >= 0
                    &&  response.IndexOf(String.Format("\r\n{0}: {1}\r\n", CommonHeaders.Upgrade, Protocols.Http2),
                                            StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    handshake.Result = HandshakeResult.Upgrade;
                }
                else
                {
                    handshake.Result = HandshakeResult.NonUpgrade;
                }
            }
            else
            {
                if (
                    response.IndexOf(String.Format("\r\n{0}: {1}, {2}\r\n", CommonHeaders.Connection, CommonHeaders.Upgrade, CommonHeaders.Http2Settings),
                                    StringComparison.OrdinalIgnoreCase) >= 0
                    && response.IndexOf(String.Format("\r\n{0}: {1}\r\n", CommonHeaders.Upgrade, Protocols.Http2),
                                    StringComparison.OrdinalIgnoreCase) >= 0
                    && response.IndexOf(String.Format("\r\n{0}:", CommonHeaders.Http2Settings), StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    GetHeaders(response);
                    handshake.Result = HandshakeResult.Upgrade;
                }
                else
                {
                    handshake.Result = HandshakeResult.NonUpgrade;
                }
            }

            return handshake;
        }