Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ TryParseMessageHeaderFromReceiveBuffer()

string System.Net.WebSockets.ManagedWebSocket.TryParseMessageHeaderFromReceiveBuffer ( out MessageHeader resultHeader)
inlineprivate

Definition at line 1169 of file ManagedWebSocket.cs.

1170 {
1171 MessageHeader messageHeader = default(MessageHeader);
1172 Span<byte> span = _receiveBuffer.Span;
1173 messageHeader.Fin = (span[_receiveBufferOffset] & 0x80) != 0;
1174 bool flag = (span[_receiveBufferOffset] & 0x30) != 0;
1175 messageHeader.Opcode = (MessageOpcode)(span[_receiveBufferOffset] & 0xFu);
1176 messageHeader.Compressed = (span[_receiveBufferOffset] & 0x40) != 0;
1177 bool flag2 = (span[_receiveBufferOffset + 1] & 0x80) != 0;
1178 messageHeader.PayloadLength = span[_receiveBufferOffset + 1] & 0x7F;
1180 if (messageHeader.PayloadLength == 126)
1181 {
1182 messageHeader.PayloadLength = (span[_receiveBufferOffset] << 8) | span[_receiveBufferOffset + 1];
1184 }
1185 else if (messageHeader.PayloadLength == 127)
1186 {
1187 messageHeader.PayloadLength = 0L;
1188 for (int i = 0; i < 8; i++)
1189 {
1190 messageHeader.PayloadLength = (messageHeader.PayloadLength << 8) | span[_receiveBufferOffset + i];
1191 }
1193 }
1194 if (flag)
1195 {
1196 resultHeader = default(MessageHeader);
1198 }
1199 if (messageHeader.PayloadLength < 0)
1200 {
1201 resultHeader = default(MessageHeader);
1203 }
1204 if (messageHeader.Compressed && _inflater == null)
1205 {
1206 resultHeader = default(MessageHeader);
1208 }
1209 if (flag2)
1210 {
1211 if (!_isServer)
1212 {
1213 resultHeader = default(MessageHeader);
1215 }
1216 messageHeader.Mask = CombineMaskBytes(span, _receiveBufferOffset);
1218 }
1219 switch (messageHeader.Opcode)
1220 {
1221 case MessageOpcode.Continuation:
1223 {
1224 resultHeader = default(MessageHeader);
1226 }
1227 if (messageHeader.Compressed)
1228 {
1229 resultHeader = default(MessageHeader);
1231 }
1232 messageHeader.Compressed = _lastReceiveHeader.Compressed;
1233 break;
1234 case MessageOpcode.Text:
1235 case MessageOpcode.Binary:
1237 {
1238 resultHeader = default(MessageHeader);
1240 }
1241 break;
1242 case MessageOpcode.Close:
1243 case MessageOpcode.Ping:
1244 case MessageOpcode.Pong:
1245 if (messageHeader.PayloadLength > 125 || !messageHeader.Fin)
1246 {
1247 resultHeader = default(MessageHeader);
1249 }
1250 break;
1251 default:
1252 resultHeader = default(MessageHeader);
1253 return System.SR.Format(System.SR.net_Websockets_UnknownOpcode, messageHeader.Opcode);
1254 }
1255 messageHeader.Processed = messageHeader.PayloadLength == 0L && !messageHeader.Compressed;
1256 resultHeader = messageHeader;
1257 return null;
1258 }
static int CombineMaskBytes(Span< byte > buffer, int maskOffset)
static string net_Websockets_ContinuationFromFinalFrame
Definition SR.cs:52
static string net_Websockets_InvalidControlMessage
Definition SR.cs:56
static string net_Websockets_PerMessageCompressedFlagWhenNotEnabled
Definition SR.cs:68
static string net_Websockets_InvalidPayloadLength
Definition SR.cs:82
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string net_Websockets_NonContinuationAfterNonFinalFrame
Definition SR.cs:54
static string net_Websockets_UnknownOpcode
Definition SR.cs:58
static string net_Websockets_ClientReceivedMaskedFrame
Definition SR.cs:50
static string net_Websockets_PerMessageCompressedFlagInContinuation
Definition SR.cs:66
static string net_Websockets_ReservedBitsSet
Definition SR.cs:48
Definition SR.cs:7
unsafe Span< T > Span
Definition Memory.cs:28

References System.Net.WebSockets.ManagedWebSocket._inflater, System.Net.WebSockets.ManagedWebSocket._isServer, System.Net.WebSockets.ManagedWebSocket._lastReceiveHeader, System.Net.WebSockets.ManagedWebSocket._receiveBuffer, System.Net.WebSockets.ManagedWebSocket._receiveBufferOffset, System.Net.WebSockets.ManagedWebSocket.CombineMaskBytes(), System.Net.WebSockets.ManagedWebSocket.MessageHeader.Compressed, System.Net.WebSockets.ManagedWebSocket.ConsumeFromBuffer(), System.Net.WebSockets.ManagedWebSocket.MessageHeader.Fin, System.SR.Format(), System.L, System.SR.net_Websockets_ClientReceivedMaskedFrame, System.SR.net_Websockets_ContinuationFromFinalFrame, System.SR.net_Websockets_InvalidControlMessage, System.SR.net_Websockets_InvalidPayloadLength, System.SR.net_Websockets_NonContinuationAfterNonFinalFrame, System.SR.net_Websockets_PerMessageCompressedFlagInContinuation, System.SR.net_Websockets_PerMessageCompressedFlagWhenNotEnabled, System.SR.net_Websockets_ReservedBitsSet, System.SR.net_Websockets_UnknownOpcode, System.Net.WebSockets.ManagedWebSocket.MessageHeader.Opcode, System.Net.WebSockets.ManagedWebSocket.MessageHeader.PayloadLength, and System.Memory< T >.Span.

Referenced by System.Net.WebSockets.ManagedWebSocket._003CReceiveAsyncPrivate_003Ed__63< TResult >.MoveNext().