public override byte[] ToBytes() => ByteHelpers.Combine( new byte[] { Ver.ToByte(), Cmd.ToByte(), Rsv.ToByte(), Atyp.ToByte() }, DstAddr.ToBytes(), DstPort.ToBytes());
private static WsFrame readHeader(byte[] header) { // FIN Fin fin = (header[0] & 0x80) == 0x80 ? Fin.FINAL : Fin.MORE; // RSV1 Rsv rsv1 = (header[0] & 0x40) == 0x40 ? Rsv.ON : Rsv.OFF; // RSV2 Rsv rsv2 = (header[0] & 0x20) == 0x20 ? Rsv.ON : Rsv.OFF; // RSV3 Rsv rsv3 = (header[0] & 0x10) == 0x10 ? Rsv.ON : Rsv.OFF; // Opcode Opcode opcode = (Opcode)(header[0] & 0x0f); // MASK Mask masked = (header[1] & 0x80) == 0x80 ? Mask.MASK : Mask.UNMASK; // Payload len byte payloadLen = (byte)(header[1] & 0x7f); return(new WsFrame { Fin = fin, Rsv1 = rsv1, Rsv2 = rsv2, Rsv3 = rsv3, Opcode = opcode, Masked = masked, PayloadLen = payloadLen }); }
private static WebSocketFrame processHeader(byte[] header) { string str; if ((int)header.Length != 2) { throw new WebSocketException("The header of a frame cannot be read from the stream."); } WebSocketSharp.Fin fin = ((header[0] & 128) == 128 ? WebSocketSharp.Fin.Final : WebSocketSharp.Fin.More); Rsv rsv = ((header[0] & 64) == 64 ? Rsv.On : Rsv.Off); Rsv rsv1 = ((header[0] & 32) == 32 ? Rsv.On : Rsv.Off); Rsv rsv2 = ((header[0] & 16) == 16 ? Rsv.On : Rsv.Off); byte num = (byte)(header[0] & 15); WebSocketSharp.Mask mask = ((header[1] & 128) == 128 ? WebSocketSharp.Mask.On : WebSocketSharp.Mask.Off); byte num1 = (byte)(header[1] & 127); if (!num.IsSupported()) { str = "An unsupported opcode."; } else if (!num.IsData() && rsv == Rsv.On) { str = "A non data frame is compressed."; } else if (num.IsControl() && fin == WebSocketSharp.Fin.More) { str = "A control frame is fragmented."; } else if (!num.IsControl() || num1 <= 125) { str = null; } else { str = "A control frame has a long payload length."; } string str1 = str; if (str1 != null) { throw new WebSocketException(CloseStatusCode.ProtocolError, str1); } WebSocketFrame webSocketFrames = new WebSocketFrame() { _fin = fin, _rsv1 = rsv, _rsv2 = rsv1, _rsv3 = rsv2, _opcode = (WebSocketSharp.Opcode)num, _mask = mask, _payloadLength = num1 }; return(webSocketFrames); }
public WebSocketFrameHeader(Fin fin, Mask mask, Opcode opcode, ulong payloadLength) { myFin = fin; myMask = mask; Opcode = opcode; myPayloadLength = PayloadLengthByte(payloadLength); ExtPayloadLength = payloadLength; myRsv1 = Rsv.Off; myRsv2 = Rsv.Off; myRsv3 = Rsv.Off; }
internal WebSocketFrame( Fin fin, Opcode opcode, PayloadData payloadData, bool compressed, bool mask ) { _fin = fin; _opcode = opcode; _rsv1 = opcode.IsData() && compressed ? Rsv.On : Rsv.Off; _rsv2 = Rsv.Off; _rsv3 = Rsv.Off; var len = payloadData.Length; if (len < 126) { _payloadLength = (byte)len; _extPayloadLength = WebSocket.EmptyBytes; } else if (len < 0x010000) { _payloadLength = (byte)126; _extPayloadLength = ((ushort)len).InternalToByteArray(ByteOrder.Big); } else { _payloadLength = (byte)127; _extPayloadLength = len.InternalToByteArray(ByteOrder.Big); } if (mask) { _mask = Mask.On; _maskingKey = createMaskingKey(); payloadData.Mask(_maskingKey); } else { _mask = Mask.Off; _maskingKey = WebSocket.EmptyBytes; } _payloadData = payloadData; }
private WebSocketFrame(Fin fin, Opcode opcode, PayloadData payloadData, bool compressed, bool mask) { _fin = fin; _rsv1 = IsData(opcode) && compressed ? Rsv.On : Rsv.Off; _rsv2 = Rsv.Off; _rsv3 = Rsv.Off; _opcode = opcode; var len = payloadData.Length; if (len < 126) { _payloadLength = (byte)len; _extPayloadLength = new byte[0]; } else if (len < 0x010000) { _payloadLength = 126; _extPayloadLength = ((ushort)len).InternalToByteArray(ByteOrder.Big); } else { _payloadLength = 127; _extPayloadLength = len.InternalToByteArray(ByteOrder.Big); } if (mask) { _mask = Mask.Mask; _maskingKey = CreateMaskingKey(); payloadData.Mask(_maskingKey); } else { _mask = Mask.Unmask; _maskingKey = new byte[0]; } _payloadData = payloadData; }
internal WebSocketFrame( Fin fin, Opcode opcode, Mask mask, PayloadData payload, bool compressed) { _fin = fin; _rsv1 = isData(opcode) && compressed ? Rsv.On : Rsv.Off; _rsv2 = Rsv.Off; _rsv3 = Rsv.Off; _opcode = opcode; _mask = mask; var len = payload.Length; if (len < 126) { _payloadLength = (byte)len; _extPayloadLength = new byte[0]; } else if (len < 0x010000) { _payloadLength = (byte)126; _extPayloadLength = ((ushort)len).ToByteArrayInternally(ByteOrder.Big); } else { _payloadLength = (byte)127; _extPayloadLength = len.ToByteArrayInternally(ByteOrder.Big); } if (mask == Mask.Mask) { _maskingKey = createMaskingKey(); payload.Mask(_maskingKey); } else { _maskingKey = new byte[0]; } _payloadData = payload; }
private void readHeader(Stream stream, bool unmask, Action <WebSocketFrame> completed, Action <Exception> error) { stream.ReadBytesAsync( 2, header => { if (header.Length != 2) { error(new WebSocketException("The header part of a frame cannot be read from the data source.")); return; } _fin = (header[0] & 0x80) == 0x80 ? Fin.Final : Fin.More; _rsv1 = (header[0] & 0x40) == 0x40 ? Rsv.On : Rsv.Off; _rsv2 = (header[0] & 0x20) == 0x20 ? Rsv.On : Rsv.Off; _rsv3 = (header[0] & 0x10) == 0x10 ? Rsv.On : Rsv.Off; _opcode = (Opcode)(header[0] & 0x0f); _mask = (header[1] & 0x80) == 0x80 ? Mask.Mask : Mask.Unmask; _payloadLength = (byte)(header[1] & 0x7f); // Check if valid header. var err = isControl(_opcode) && _payloadLength > 125 ? "A control frame has payload data which is greater than the allowable max length." : isControl(_opcode) && _fin == Fin.More ? "A control frame is fragmented." : !isData(_opcode) && _rsv1 == Rsv.On ? "A non data frame is compressed." : null; if (err != null) { error(new WebSocketException(CloseStatusCode.ProtocolError, err)); return; } readExtPayload(stream, unmask, completed, error); }, error); }
//internal WebSocketFrame(string textMessage) // :this() public WebSocketFrame(Fin fin, Opcode opcode, PayLoadData payLoadData, bool mask = false) { Fin = fin; Rsv2 = Rsv.Off; Rsv3 = Rsv.Off; Rsv4 = Rsv.Off; Opcode = opcode; var len = payLoadData.Length; if (len < 126) { PayloadLength = (byte)len; ExtendedPayloadLength = new byte[0]; } else if (len < 65536) { PayloadLength = 126; ExtendedPayloadLength = ((ushort)len).InternalToByteArray(ByteOrder.Big); } else { PayloadLength = 127; ExtendedPayloadLength = len.InternalToByteArray(ByteOrder.Big); } if (mask) { Mask = Mask.On; } else { Mask = Mask.Off; MaskingKey = new byte[0]; } PayloadData = payLoadData; }
internal WebSocketFrame(WebSocketSharp.Fin fin, WebSocketSharp.Opcode opcode, WebSocketSharp.PayloadData payloadData, bool compressed, bool mask) { this._fin = fin; this._rsv1 = (!opcode.IsData() || !compressed) ? Rsv.Off : Rsv.On; this._rsv2 = Rsv.Off; this._rsv3 = Rsv.Off; this._opcode = opcode; ulong length = payloadData.Length; if (length < 0x7e) { this._payloadLength = (byte)length; this._extPayloadLength = WebSocket.EmptyBytes; } else if (length < 0x10000L) { this._payloadLength = 0x7e; this._extPayloadLength = ((ushort)length).InternalToByteArray(ByteOrder.Big); } else { this._payloadLength = 0x7f; this._extPayloadLength = length.InternalToByteArray(ByteOrder.Big); } if (!mask) { this._mask = WebSocketSharp.Mask.Off; this._maskingKey = WebSocket.EmptyBytes; } else { this._mask = WebSocketSharp.Mask.On; this._maskingKey = createMaskingKey(); payloadData.Mask(this._maskingKey); } this._payloadData = payloadData; }
internal WebSocketFrame(Fin fin, Opcode opcode, PayloadData payloadData, bool compressed, bool mask) { _fin = fin; _rsv1 = ((isData(opcode) && compressed) ? Rsv.On : Rsv.Off); _rsv2 = Rsv.Off; _rsv3 = Rsv.Off; _opcode = opcode; ulong length = payloadData.Length; if (length < 126) { _payloadLength = (byte)length; _extPayloadLength = new byte[0]; } else if (length < 65536) { _payloadLength = 126; _extPayloadLength = ((ushort)length).InternalToByteArray(ByteOrder.Big); } else { _payloadLength = 127; _extPayloadLength = length.InternalToByteArray(ByteOrder.Big); } if (mask) { _mask = Mask.Mask; _maskingKey = createMaskingKey(); payloadData.Mask(_maskingKey); } else { _mask = Mask.Unmask; _maskingKey = new byte[0]; } _payloadData = payloadData; }
internal WebSocketFrame(WebSocketSharp.Fin fin, WebSocketSharp.Opcode opcode, WebSocketSharp.PayloadData payloadData, bool compressed, bool mask) { this._fin = fin; this._rsv1 = (opcode.IsData() & compressed ? Rsv.On : Rsv.Off); this._rsv2 = Rsv.Off; this._rsv3 = Rsv.Off; this._opcode = opcode; ulong length = payloadData.Length; if (length < (long)126) { this._payloadLength = (byte)length; this._extPayloadLength = WebSocket.EmptyBytes; } else if (length >= (long)65536) { this._payloadLength = 127; this._extPayloadLength = length.InternalToByteArray(ByteOrder.Big); } else { this._payloadLength = 126; this._extPayloadLength = ((ushort)length).InternalToByteArray(ByteOrder.Big); } if (!mask) { this._mask = WebSocketSharp.Mask.Off; this._maskingKey = WebSocket.EmptyBytes; } else { this._mask = WebSocketSharp.Mask.On; this._maskingKey = WebSocketFrame.createMaskingKey(); payloadData.Mask(this._maskingKey); } this._payloadData = payloadData; }
public override byte[] ToBytes() => ByteHelpers.Combine(new byte[] { Ver.ToByte(), Rep.ToByte(), Rsv.ToByte(), Atyp.ToByte() }, BndAddr.ToBytes(), BndPort.ToBytes());
public static extern bool HP_HttpServer_SendWSMessage(IntPtr pServer, IntPtr dwConnId, bool bFinal, Rsv iRsv, OpCode iOperationCode, IntPtr pdata, int iLength, ulong ullBodyLen);
private static WsFrame parse(byte[] header, Stream stream, bool unmask) { Fin fin = ((header[0] & 128) != 128) ? Fin.More : Fin.Final; Rsv rsv = ((header[0] & 64) != 64) ? Rsv.Off : Rsv.On; Rsv rsv2 = ((header[0] & 32) != 32) ? Rsv.Off : Rsv.On; Rsv rsv3 = ((header[0] & 16) != 16) ? Rsv.Off : Rsv.On; Opcode opcode = (Opcode)(header[0] & 15); Mask mask = ((header[1] & 128) != 128) ? Mask.Unmask : Mask.Mask; byte b = header[1] & 127; string text = (!WsFrame.isControl(opcode) || fin != Fin.More) ? ((WsFrame.isData(opcode) || rsv != Rsv.On) ? null : "A non data frame is compressed.") : "A control frame is fragmented."; if (text != null) { throw new WebSocketException(CloseStatusCode.IncorrectData, text); } if (WsFrame.isControl(opcode) && b > 125) { throw new WebSocketException(CloseStatusCode.InconsistentData, "The payload data length of a control frame is greater than 125 bytes."); } WsFrame wsFrame = new WsFrame { Fin = fin, Rsv1 = rsv, Rsv2 = rsv2, Rsv3 = rsv3, Opcode = opcode, Mask = mask, PayloadLen = b }; int num = (b >= 126) ? ((b != 126) ? 8 : 2) : 0; byte[] array = (num <= 0) ? new byte[0] : stream.ReadBytes(num); if (num > 0 && array.Length != num) { throw new WebSocketException("The 'Extended Payload Length' of a frame cannot be read from the data source."); } wsFrame.ExtPayloadLen = array; bool flag = mask == Mask.Mask; byte[] array2 = (!flag) ? new byte[0] : stream.ReadBytes(4); if (flag && array2.Length != 4) { throw new WebSocketException("The 'Masking Key' of a frame cannot be read from the data source."); } wsFrame.MaskingKey = array2; ulong num2 = (b >= 126) ? ((b != 126) ? array.ToUInt64(ByteOrder.Big) : ((ulong)array.ToUInt16(ByteOrder.Big))) : ((ulong)b); byte[] array3; if (num2 > 0UL) { if (b > 126 && num2 > 9223372036854775807UL) { throw new WebSocketException(CloseStatusCode.TooBig, "The 'Payload Data' length is greater than the allowable length."); } array3 = ((b <= 126) ? stream.ReadBytes((int)num2) : stream.ReadBytes((long)num2, 1024)); if (array3.LongLength != (long)num2) { throw new WebSocketException("The 'Payload Data' of a frame cannot be read from the data source."); } } else { array3 = new byte[0]; } PayloadData payloadData = new PayloadData(array3, flag); if (flag && unmask) { payloadData.Mask(array2); wsFrame.Mask = Mask.Unmask; wsFrame.MaskingKey = new byte[0]; } wsFrame.PayloadData = payloadData; return(wsFrame); }
public static extern bool HP_HttpAgent_SendWSMessage(IntPtr pAgent, IntPtr dwConnId, bool bFinal, Rsv iRsv, OpCode iOperationCode, IntPtr lpszMask, IntPtr pData, int iLength, ulong ullBodyLen);
public static extern bool HP_HttpClient_GetWSMessageState(IntPtr pClient, ref bool lpbFinal, ref Rsv lpiRsv, ref OpCode lpiOperationCode, ref IntPtr lpszMask, ref ulong bodyLen, ref ulong bodyRemain);
public static extern bool HP_HttpClient_SendWSMessage(IntPtr pClient, bool bFinal, Rsv iRsv, OpCode iOperationCode, IntPtr lpszMask, IntPtr pData, int iLength, ulong bodyLen);
protected new HandleResult SdkOnWsMessageHeader(IntPtr sender, IntPtr connId, bool final, Rsv rsv, OpCode opCode, byte[] mask, ulong bodyLength) { if (OnEasyWebSocketMessageData == null) { return(HandleResult.Ignore); } var extra = _easyWsMessageData.Get(connId) ?? new WebSocketSession(); extra.Final = final; extra.Rsv = rsv; extra.OpCode = opCode; extra.Mask = mask; extra.Data = null; extra.Data = new List <byte>((int)bodyLength); return(_easyWsMessageData.Set(connId, extra) ? HandleResult.Ok : HandleResult.Error); }
bool ReadHeader() { if (!_myBufferStream.Ensure(2)) { return(false); } //---------------------------------------------------------- //when we read header we start a new websocket request _currentReq = new WebSocketRequest(this.OwnerWebSocketConnBase); #if DEBUG //byte[] peek = new byte[8]; //_myBufferStream.dbugPeekBytes(peek, 8); //System.Text.StringBuilder stbuilder = new System.Text.StringBuilder(); //for (int i = 0; i < peek.Length; ++i) //{ // stbuilder.Append((char)peek[i]); //} #endif byte b1 = _myBufferStream.ReadByte(); // FIN Fin fin = (b1 & (1 << 7)) == (1 << 7) ? Fin.Final : Fin.More; // RSV1 Rsv rsv1 = (b1 & (1 << 6)) == (1 << 6) ? Rsv.On : Rsv.Off; // RSV2 Rsv rsv2 = (b1 & (1 << 5)) == (1 << 5) ? Rsv.On : Rsv.Off; // RSV3 Rsv rsv3 = (b1 & (1 << 4)) == (1 << 4) ? Rsv.On : Rsv.Off; //---------------------------------------------------------- // Opcode _currentOpCode = (Opcode)(b1 & 0x0f);//4 bits //---------------------------------------------------------- if (rsv1 == Rsv.On) { _currentReq.Compression = OwnerWebSocketConnBase.Compression; } byte b2 = _myBufferStream.ReadByte(); //mask //---------------------------------------------------------- //finish first 2 bytes // MASK Mask currentMask = (b2 & (1 << 7)) == (1 << 7) ? Mask.On : Mask.Off; //we should check receive frame here ... if (_asClientContext) { //as client context (we are in client context) if (currentMask != Mask.Off) { throw new NotSupportedException(); } _useMask = false; } else { //as server context (we are in server context) //data from client must useMask if (currentMask != Mask.On) { throw new NotSupportedException(); } _useMask = true; } //---------------------------------------------------------- // Payload Length byte payloadLen = (byte)(b2 & 0x7f); //is 7 bits of the b2 bool allowMoreFrame = false; if (fin == Fin.More || _currentOpCode == Opcode.Cont) { throw new NotSupportedException(); } else { } //---------------------------------------------------------- //translate opcode .... string errCode = null; switch (_currentOpCode) { case Opcode.Cont: { //continue } break; case Opcode.Text: //this is data { if (rsv1 == Rsv.On && _currentReq.Compression == WebSocketContentCompression.NoCompression) { errCode = "A non data frame is compressed."; } } break; case Opcode.Binary: //this is data { if (rsv1 == Rsv.On && _currentReq.Compression == WebSocketContentCompression.NoCompression) { errCode = "A non data frame is compressed."; } } break; case Opcode.Close: //control { if (fin == Fin.More) { errCode = "A control frame is fragmented."; } else if (payloadLen > 125) { errCode = "A control frame has a long payload length."; } } break; case Opcode.Ping: //control case Opcode.Pong: //control { if (fin == Fin.More) { errCode = "A control frame is fragmented."; } else if (payloadLen > 125) { errCode = "A control frame has a long payload length."; } } break; default: { if (fin != Fin.More) { errCode = "An unsupported opcode."; } } break; } //---------------------------------------------------------- if (errCode != null) { //report error throw new NotSupportedException(); } //---------------------------------------------------------- _currentPacketLen = payloadLen; _currentReq.OpCode = _currentOpCode; _currentMaskLen = (currentMask == Mask.On) ? 4 : 0; //---------------------------------------------------------- if (payloadLen >= 126) { _parseState = ParseState.ReadExtendedPayloadLen; return(true); } //---------------------------------------------------------- _parseState = _currentMaskLen > 0 ? ParseState.ReadMask : ParseState.ExpectBody; return(true); }
private static WebSocketFrame read(byte[] header, Stream stream, bool unmask) { Fin fin = (((header[0] & 0x80) == 128) ? Fin.Final : Fin.More); Rsv rsv = (((header[0] & 0x40) == 64) ? Rsv.On : Rsv.Off); Rsv rsv2 = (((header[0] & 0x20) == 32) ? Rsv.On : Rsv.Off); Rsv rsv3 = (((header[0] & 0x10) == 16) ? Rsv.On : Rsv.Off); Opcode opcode = (Opcode)(header[0] & 0xFu); Mask mask = (((header[1] & 0x80) == 128) ? Mask.Mask : Mask.Unmask); byte b = (byte)(header[1] & 0x7Fu); string text = ((isControl(opcode) && b > 125) ? "A control frame has a payload data which is greater than the allowable max size." : ((isControl(opcode) && fin == Fin.More) ? "A control frame is fragmented." : ((isData(opcode) || rsv != Rsv.On) ? null : "A non data frame is compressed."))); if (text != null) { throw new WebSocketException(CloseStatusCode.ProtocolError, text); } WebSocketFrame webSocketFrame = new WebSocketFrame(); webSocketFrame._fin = fin; webSocketFrame._rsv1 = rsv; webSocketFrame._rsv2 = rsv2; webSocketFrame._rsv3 = rsv3; webSocketFrame._opcode = opcode; webSocketFrame._mask = mask; webSocketFrame._payloadLength = b; int num = ((b >= 126) ? ((b != 126) ? 8 : 2) : 0); byte[] array = ((num <= 0) ? new byte[0] : stream.ReadBytes(num)); if (num > 0 && array.Length != num) { throw new WebSocketException("The 'Extended Payload Length' of a frame cannot be read from the data source."); } webSocketFrame._extPayloadLength = array; bool flag = mask == Mask.Mask; byte[] array2 = ((!flag) ? new byte[0] : stream.ReadBytes(4)); if (flag && array2.Length != 4) { throw new WebSocketException("The 'Masking Key' of a frame cannot be read from the data source."); } webSocketFrame._maskingKey = array2; ulong num2 = ((b < 126) ? b : ((b != 126) ? array.ToUInt64(ByteOrder.Big) : array.ToUInt16(ByteOrder.Big))); byte[] array3 = null; if (num2 != 0) { if (b > 126 && num2 > long.MaxValue) { throw new WebSocketException(CloseStatusCode.TooBig, "The length of 'Payload Data' of a frame is greater than the allowable max length."); } array3 = ((b <= 126) ? stream.ReadBytes((int)num2) : stream.ReadBytes((long)num2, 1024)); if (array3.LongLength != (long)num2) { throw new WebSocketException("The 'Payload Data' of a frame cannot be read from the data source."); } } else { array3 = new byte[0]; } webSocketFrame._payloadData = new PayloadData(array3, flag); if (unmask && flag) { webSocketFrame.Unmask(); } return(webSocketFrame); }
bool ReadHeader() { if (!myBufferStream.Ensure(2)) { myBufferStream.BackupRecvIO(); return(false); } //---------------------------------------------------------- //when we read header we start a new websocket request currentReq = new WebSocketRequest(this._ownerContext); incommingReqs.Enqueue(currentReq); byte b1 = myBufferStream.ReadByte(); // FIN Fin fin = (b1 & (1 << 7)) == (1 << 7) ? Fin.Final : Fin.More; // RSV1 Rsv rsv1 = (b1 & (1 << 6)) == (1 << 6) ? Rsv.On : Rsv.Off; // RSV2 Rsv rsv2 = (b1 & (1 << 5)) == (1 << 5) ? Rsv.On : Rsv.Off; // RSV3 Rsv rsv3 = (b1 & (1 << 4)) == (1 << 4) ? Rsv.On : Rsv.Off; //---------------------------------------------------------- // Opcode currentOpCode = (Opcode)(b1 & 0x0f); //4 bits //---------------------------------------------------------- byte b2 = myBufferStream.ReadByte(); //mask //---------------------------------------------------------- //finish first 2 bytes // MASK Mask currentMask = (b2 & (1 << 7)) == (1 << 7) ? Mask.On : Mask.Off; //we should check receive frame here ... this.useMask = currentMask == Mask.On; if (currentMask == Mask.Off) { //if this act as WebSocketServer //erro packet ? throw new NotSupportedException(); } else { } //---------------------------------------------------------- // Payload Length byte payloadLen = (byte)(b2 & 0x7f); //is 7 bits of the b2 if (fin == Fin.More || currentOpCode == Opcode.Cont) { //process fragment frame *** throw new NotSupportedException(); } else { } //---------------------------------------------------------- //translate opcode .... string errCode = null; switch (currentOpCode) { case Opcode.Cont: { //continue } break; case Opcode.Text: //this is data { if (rsv1 == Rsv.On) { errCode = "A non data frame is compressed."; } } break; case Opcode.Binary: //this is data { if (rsv1 == Rsv.On) { errCode = "A non data frame is compressed."; } } break; case Opcode.Close: //control { if (fin == Fin.More) { errCode = "A control frame is fragmented."; } else if (payloadLen > 125) { errCode = "A control frame has a long payload length."; } } break; case Opcode.Ping: //control case Opcode.Pong: //control { if (fin == Fin.More) { errCode = "A control frame is fragmented."; } else if (payloadLen > 125) { errCode = "A control frame has a long payload length."; } } break; default: { if (fin != Fin.More) { errCode = "An unsupported opcode."; } } break; } //---------------------------------------------------------- if (errCode != null) { //report error throw new NotSupportedException(); } //---------------------------------------------------------- this._currentPacketLen = payloadLen; currentReq.OpCode = currentOpCode; this._currentMaskLen = (currentMask == Mask.On) ? 4 : 0; //---------------------------------------------------------- if (payloadLen >= 126) { this.parseState = ParseState.ReadExtendedPayloadLen; return(true); } //---------------------------------------------------------- this.parseState = this._currentMaskLen > 0 ? ParseState.ReadMask : ParseState.ExpectBody; return(true); }
public static extern bool HP_HttpServer_GetWSMessageState(IntPtr pServer, IntPtr dwConnId, ref bool lpbFinal, ref Rsv lpiRsv, ref OpCode lpiOperationCode, ref IntPtr lpszMask, ref ulong bodyLen, ref ulong bodyRemain);