X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem%2FSystem.Net.WebSockets%2FClientWebSocket.cs;h=dba02f2761718c56c9a46d28a8a3a395d5fe8be0;hb=f9596050629ebf0d8d24fb256cc08f98d6d2c7e7;hp=ff011d2f93044da4f6f28a9a7966e2800004572d;hpb=c0216739390c37ea05a99a4cbc15e2222aac3f11;p=mono.git diff --git a/mcs/class/System/System.Net.WebSockets/ClientWebSocket.cs b/mcs/class/System/System.Net.WebSockets/ClientWebSocket.cs index ff011d2f930..dba02f27617 100644 --- a/mcs/class/System/System.Net.WebSockets/ClientWebSocket.cs +++ b/mcs/class/System/System.Net.WebSockets/ClientWebSocket.cs @@ -26,7 +26,6 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#if NET_4_5 using System; using System.Net; @@ -62,6 +61,7 @@ namespace System.Net.WebSockets byte[] headerBuffer; byte[] sendBuffer; long remaining; + WebSocketMessageType currentMessageType; public ClientWebSocket () { @@ -198,13 +198,16 @@ namespace System.Net.WebSockets }); } + const int messageTypeContinuation = 0; const int messageTypeText = 1; const int messageTypeBinary = 2; const int messageTypeClose = 8; - static WebSocketMessageType WireToMessageType (byte msgType) + WebSocketMessageType WireToMessageType (byte msgType) { + if (msgType == messageTypeContinuation) + return currentMessageType; if (msgType == messageTypeText) return WebSocketMessageType.Text; if (msgType == messageTypeBinary) @@ -229,7 +232,6 @@ namespace System.Net.WebSockets EnsureWebSocketState (WebSocketState.Open, WebSocketState.CloseSent); bool isLast; - WebSocketMessageType type; long length; if (remaining == 0) { @@ -238,7 +240,7 @@ namespace System.Net.WebSockets isLast = (headerBuffer[0] >> 7) > 0; var isMasked = (headerBuffer[1] >> 7) > 0; int mask = 0; - type = WireToMessageType ((byte)(headerBuffer[0] & 0xF)); + currentMessageType = WireToMessageType ((byte)(headerBuffer[0] & 0xF)); length = headerBuffer[1] & 0x7F; int offset = 0; if (length == 126) { @@ -262,23 +264,23 @@ namespace System.Net.WebSockets } } else { isLast = (headerBuffer[0] >> 7) > 0; - type = WireToMessageType ((byte)(headerBuffer[0] & 0xF)); + currentMessageType = WireToMessageType ((byte)(headerBuffer[0] & 0xF)); length = remaining; } - if (type == WebSocketMessageType.Close) { + if (currentMessageType == WebSocketMessageType.Close) { state = WebSocketState.Closed; var tmpBuffer = new byte[length]; connection.Read (req, tmpBuffer, 0, tmpBuffer.Length); var closeStatus = (WebSocketCloseStatus)(tmpBuffer[0] << 8 | tmpBuffer[1]); var closeDesc = tmpBuffer.Length > 2 ? Encoding.UTF8.GetString (tmpBuffer, 2, tmpBuffer.Length - 2) : string.Empty; - return new WebSocketReceiveResult ((int)length, type, isLast, closeStatus, closeDesc); + return new WebSocketReceiveResult ((int)length, currentMessageType, isLast, closeStatus, closeDesc); } else { var readLength = (int)(buffer.Count < length ? buffer.Count : length); connection.Read (req, buffer.Array, buffer.Offset, readLength); remaining = length - readLength; - return new WebSocketReceiveResult ((int)readLength, type, isLast && remaining == 0); + return new WebSocketReceiveResult ((int)readLength, currentMessageType, isLast && remaining == 0); } }); } @@ -388,4 +390,3 @@ namespace System.Net.WebSockets } } -#endif