You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -61,6 +61,7 @@ namespace System.Net.WebSockets
|
||||
byte[] headerBuffer;
|
||||
byte[] sendBuffer;
|
||||
long remaining;
|
||||
WebSocketMessageType currentMessageType;
|
||||
|
||||
public ClientWebSocket ()
|
||||
{
|
||||
@ -197,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)
|
||||
@ -228,7 +232,6 @@ namespace System.Net.WebSockets
|
||||
EnsureWebSocketState (WebSocketState.Open, WebSocketState.CloseSent);
|
||||
|
||||
bool isLast;
|
||||
WebSocketMessageType type;
|
||||
long length;
|
||||
|
||||
if (remaining == 0) {
|
||||
@ -237,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) {
|
||||
@ -261,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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user