public void FrameHelperSuccessful() { const byte input = 1; byte result = FrameHelpers.SetBit(input, true, 3); Assert.Equal(result, 9); result = FrameHelpers.SetBit(result, false, 3); Assert.Equal(result, 1); result = FrameHelpers.SetBit(result, false, 0); Assert.Equal(result, 0); result = FrameHelpers.SetBit(result, true, 7); Assert.Equal(result, 128); result = FrameHelpers.SetBit(result, true, 6); Assert.Equal(result, 192); result = FrameHelpers.SetBit(result, true, 5); Assert.Equal(result, 224); result = FrameHelpers.SetBit(result, false, 7); Assert.Equal(result, 96); result = FrameHelpers.SetBit(result, false, 6); Assert.Equal(result, 32); result = FrameHelpers.SetBit(result, false, 5); Assert.Equal(result, 0); result = FrameHelpers.SetBit(result, true, 0); Assert.Equal(result, input); }
// 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" string response = FrameHelpers.GetAsciiAt(buffer, 0, split); if (_end == ConnectionEnd.Client) { if (response.StartsWith("HTTP/1.1 101 SWITCHING PROTOCOLS", StringComparison.OrdinalIgnoreCase) && response.IndexOf("\r\nCONNECTION: UPGRADE\r\n", StringComparison.OrdinalIgnoreCase) >= 0 && response.IndexOf(string.Format("\r\nUPGRADE: {0}\r\n", Protocols.Http2), StringComparison.OrdinalIgnoreCase) >= 0) { handshake.Result = HandshakeResult.Upgrade; } else { handshake.Result = HandshakeResult.NonUpgrade; } } else { if (response.IndexOf("\r\nCONNECTION: UPGRADE, HTTP2-SETTINGS\r\n", StringComparison.OrdinalIgnoreCase) >= 0 && response.IndexOf(string.Format("\r\nUPGRADE: {0}\r\n", Protocols.Http2), StringComparison.OrdinalIgnoreCase) >= 0 && response.IndexOf("\r\nHTTP2-SETTINGS:", StringComparison.OrdinalIgnoreCase) >= 0) { GetHeaders(response); handshake.Result = HandshakeResult.Upgrade; } else { handshake.Result = HandshakeResult.NonUpgrade; } } return(handshake); }