From 0992c8535055938e309ece45b31ecf0d2bb4ed41 Mon Sep 17 00:00:00 2001 From: sta Date: Mon, 23 Mar 2015 16:47:20 +0900 Subject: [PATCH] Added the validateSecWebSocketExtensionsHeader2 method --- websocket-sharp/WebSocket.cs | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/websocket-sharp/WebSocket.cs b/websocket-sharp/WebSocket.cs index c307121f..2b8fc2ce 100644 --- a/websocket-sharp/WebSocket.cs +++ b/websocket-sharp/WebSocket.cs @@ -1521,6 +1521,50 @@ namespace WebSocketSharp return true; } + private bool validateSecWebSocketExtensionsHeader2 (string value) + { + var comp = _compression != CompressionMethod.None; + if (value == null || value.Length == 0) { + if (comp) + _compression = CompressionMethod.None; + + return true; + } + + if (!comp) + return false; + + foreach (var e in value.SplitHeaderValue (',')) { + var ext = e.Trim (); + if (ext.IsCompressionExtension (_compression)) { + if (!ext.Contains ("server_no_context_takeover")) { + _logger.Error ("The server hasn't sent back 'server_no_context_takeover'."); + return false; + } + + if (!ext.Contains ("client_no_context_takeover")) + _logger.Warn ("The server hasn't sent back 'client_no_context_takeover'."); + + var invalid = ext.SplitHeaderValue (';').Contains ( + t => { + var token = t.Trim (); + return token != _compression.ToExtensionString () && + token != "server_no_context_takeover" && + token != "client_no_context_takeover"; + }); + + if (invalid) + return false; + } + else { + return false; + } + } + + _extensions = value; + return true; + } + // As server private bool validateSecWebSocketKeyHeader (string value) {