// Copyright 2020-2025 The NATS Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // Adapted from server/websocket.go in the NATS server Go source. namespace ZB.MOM.NatsNet.Server.WebSocket; /// /// WebSocket opcode values as defined in RFC 6455 §5.2. /// Mirrors Go wsOpCode type in server/websocket.go. /// internal enum WsOpCode : int { Continuation = 0, Text = 1, Binary = 2, Close = 8, Ping = 9, Pong = 10, } /// /// WebSocket protocol constants. /// Mirrors the constant block at the top of server/websocket.go. /// internal static class WsConstants { // Frame header bits public const int FinalBit = 1 << 7; public const int Rsv1Bit = 1 << 6; // Used for per-message compression (RFC 7692) public const int Rsv2Bit = 1 << 5; public const int Rsv3Bit = 1 << 4; public const int MaskBit = 1 << 7; // Frame size limits public const int MaxFrameHeaderSize = 14; // LeafNode may behave as a client public const int MaxControlPayloadSize = 125; public const int FrameSizeForBrowsers = 4096; // From experiment, browsers behave better with limited frame size public const int CompressThreshold = 64; // Don't compress for small buffer(s) public const int CloseStatusSize = 2; // Close status codes (RFC 6455 §11.7) public const int CloseNormalClosure = 1000; public const int CloseGoingAway = 1001; public const int CloseProtocolError = 1002; public const int CloseUnsupportedData = 1003; public const int CloseNoStatusReceived = 1005; public const int CloseInvalidPayloadData = 1007; public const int ClosePolicyViolation = 1008; public const int CloseMessageTooBig = 1009; public const int CloseInternalError = 1011; public const int CloseTlsHandshake = 1015; // Header strings public const string NoMaskingHeader = "Nats-No-Masking"; public const string NoMaskingValue = "true"; public const string XForwardedForHeader = "X-Forwarded-For"; public const string PMCExtension = "permessage-deflate"; // per-message compression public const string PMCSrvNoCtx = "server_no_context_takeover"; public const string PMCCliNoCtx = "client_no_context_takeover"; public const string SecProtoHeader = "Sec-Websocket-Protocol"; public const string MQTTSecProtoVal = "mqtt"; public const string SchemePrefix = "ws"; public const string SchemePrefixTls = "wss"; }