static void HandleCloseMessage(Config config, byte[] buffer, int msgOffset, int payloadLength) { (Connection conn, int _, bool expectMask, ConcurrentQueue <Message> _, BufferPool _) = config; if (expectMask) { int maskOffset = msgOffset - Constants.MaskSize; MessageProcessor.ToggleMask(buffer, msgOffset, payloadLength, buffer, maskOffset); } // dump after mask off Log.DumpBuffer($"Message", buffer, msgOffset, payloadLength); Log.Info($"Close: {GetCloseCode(buffer, msgOffset)} message:{GetCloseMessage(buffer, msgOffset, payloadLength)}"); conn.Dispose(); }
static ArrayBuffer CopyMessageToBuffer(BufferPool bufferPool, bool expectMask, byte[] buffer, int msgOffset, int payloadLength) { ArrayBuffer arrayBuffer = bufferPool.Take(payloadLength); if (expectMask) { int maskOffset = msgOffset - Constants.MaskSize; // write the result of toggle directly into arrayBuffer to avoid 2nd copy call MessageProcessor.ToggleMask(buffer, msgOffset, arrayBuffer, payloadLength, buffer, maskOffset); } else { arrayBuffer.CopyFrom(buffer, msgOffset, payloadLength); } return(arrayBuffer); }
static void HandleArrayMessage(Config config, byte[] buffer, int msgOffset, int payloadLength) { (Connection conn, int _, bool expectMask, ConcurrentQueue <Message> queue, BufferPool bufferPool) = config; ArrayBuffer arrayBuffer = bufferPool.Take(payloadLength); if (expectMask) { int maskOffset = msgOffset - Constants.MaskSize; // write the result of toggle directly into arrayBuffer to avoid 2nd copy call MessageProcessor.ToggleMask(buffer, msgOffset, arrayBuffer, payloadLength, buffer, maskOffset); } else { arrayBuffer.CopyFrom(buffer, msgOffset, payloadLength); } // dump after mask off Log.DumpBuffer($"Message", arrayBuffer); queue.Enqueue(new Message(conn.connId, arrayBuffer)); }
/// <returns>new offset in buffer</returns> static int SendMessage(byte[] buffer, int startOffset, ArrayBuffer msg, bool setMask, MaskHelper maskHelper) { int msgLength = msg.count; int offset = WriteHeader(buffer, startOffset, msgLength, setMask); if (setMask) { offset = maskHelper.WriteMask(buffer, offset); } msg.CopyTo(buffer, offset); offset += msgLength; // dump before mask on Log.DumpBuffer("Send", buffer, startOffset, offset); if (setMask) { int messageOffset = offset - msgLength; MessageProcessor.ToggleMask(buffer, messageOffset, msgLength, buffer, messageOffset - Constants.MaskSize); } return(offset); }
static void SendMessage(Stream stream, byte[] buffer, ArrayBuffer msg, bool setMask, MaskHelper maskHelper) { int msgLength = msg.count; int sendLength = WriteHeader(buffer, msgLength, setMask); if (setMask) { sendLength = maskHelper.WriteMask(buffer, sendLength); } msg.CopyTo(buffer, sendLength); sendLength += msgLength; // dump before mask on Log.DumpBuffer("Send", buffer, 0, sendLength); if (setMask) { int messageOffset = sendLength - msgLength; MessageProcessor.ToggleMask(buffer, messageOffset, msgLength, buffer, messageOffset - Constants.MaskSize); } stream.Write(buffer, 0, sendLength); }