protected override int ProcessHeadersAndUpgrade(NetContext context, Connection connection, Stream input, Stream additionalData, int additionalOffset) { string requestLine; var headers = ParseHeaders(input, out requestLine); if (!string.Equals(headers["Upgrade"], "WebSocket", StringComparison.InvariantCultureIgnoreCase) || !string.Equals(headers["Connection"], "Upgrade", StringComparison.InvariantCultureIgnoreCase) || headers["Sec-WebSocket-Accept"] != expected) { throw new InvalidOperationException(); } lock (this) { AddMatchingExtensions(headers, connection, context.Extensions); var protocol = new WebSocketsProcessor_RFC6455_13(true); connection.SetProtocol(protocol); if (pending != null) { while (pending.Count != 0) { connection.Send(context, pending.Dequeue()); } } } return 0; }
protected override int ProcessHeadersAndUpgrade(NetContext context, Connection connection, Stream input, Stream additionalData, int additionalOffset) { string requestLine; var headers = ParseHeaders(input, out requestLine); if (!string.Equals(headers["Upgrade"], "WebSocket", StringComparison.InvariantCultureIgnoreCase) || !string.Equals(headers["Connection"], "Upgrade", StringComparison.InvariantCultureIgnoreCase)) { throw new InvalidOperationException(); } lock (this) { var protocol = new WebSocketsProcessor_Hixie76_00.Client(expectedSecurityResponse); expectedSecurityResponse = null; // use once only connection.SetProtocol(protocol); if (pending != null) { while (pending.Count != 0) { connection.Send(context, pending.Dequeue()); } } } return 0; }