private void ServersManager_BeforeSend(ServersManager <Connection> s, Connection c, ServerAsyncEventArgs e) { if (c != null && c.Mode == Connection.Modes.WebSocket) { //c.BeforeSend(e); var header = new WebSocketHeader() { Fin = true, Opcode = websocketOpcode.HasValue ? websocketOpcode.Value : c.WebSocketHeader.Opcode, PayloadLength = e.Count, }; int headerLength = header.GetHeaderLength(); if (e.OffsetOffset < headerLength) { throw new InvalidProgramException(@"TransportLayer.ServersManager_BeforeSend no reserved space for WebSocket header"); } e.OffsetOffset -= headerLength; e.Count += headerLength; header.GenerateHeader(e.OutgoingData); } }
private static byte[] PrepareForWebsocket(byte[] message, Opcodes opcode) { var wsHeader = new WebSocketHeader() { Fin = true, Opcode = opcode, PayloadLength = message.Length, Mask = true, MaskingKey0 = 0x12, MaskingKey1 = 0x34, MaskingKey2 = 0x56, MaskingKey3 = 0x78, }; var extra = new byte[wsHeader.GetHeaderLength()]; wsHeader.GenerateHeader(new ArraySegment <byte>(extra)); if (wsHeader.Mask) { wsHeader.MaskData(message, 0, message.Length); } return(extra); }
private void SendWebsocket(WebSocketHeader header, ArraySegment <byte> content) { int headerLength = header.GetHeaderLength(); var r = EventArgsManager.Get(); r.CopyAddressesFrom(connection); r.Count = headerLength + content.Count; r.AllocateBuffer(); header.GenerateHeader(r.OutgoingData); Buffer.BlockCopy(content.Array, content.Offset, r.Buffer, r.Offset + headerLength, content.Count); SendAsyncSip(r); }