Inheritance: WebSocket, IWebSocketLatencyMeasure
 public override WebSocket CreateWebSocket(Stream stream, WebSocketListenerOptions options, IPEndPoint localEndpoint, IPEndPoint remoteEndpoint, WebSocketHttpRequest httpRequest, WebSocketHttpResponse httpResponse, List<IWebSocketMessageExtensionContext> negotiatedExtensions)
 {
     var webSocket = new WebSocketRfc6455(stream, options, localEndpoint, remoteEndpoint, httpRequest, httpResponse, negotiatedExtensions);
     if (OnPingReceived != null)
         webSocket.OnPingReceived = OnPingReceived;
     return webSocket;
 }
 public WebSocketMessageWriteRfc6455Stream(WebSocketRfc6455 client, WebSocketMessageType messageType, WebSocketExtensionFlags extensionFlags)
     : this(client, messageType)
 {
     ExtensionFlags.Rsv1 = extensionFlags.Rsv1;
     ExtensionFlags.Rsv2 = extensionFlags.Rsv2;
     ExtensionFlags.Rsv3 = extensionFlags.Rsv3;
 }
 public WebSocketMessageWriteRfc6455Stream(WebSocketRfc6455 webSocket, WebSocketMessageType messageType, WebSocketExtensionFlags extensionFlags)
     : this(webSocket, messageType)
 {
     this.ExtensionFlags.Rsv1 = extensionFlags.Rsv1;
     this.ExtensionFlags.Rsv2 = extensionFlags.Rsv2;
     this.ExtensionFlags.Rsv3 = extensionFlags.Rsv3;
 }
        public void With_WebSocket_CanReadTwoBufferedSmallFrames()
        {
            var handshake = GenerateSimpleHandshake();
            using (var ms = new MemoryStream())
            using (WebSocket ws = new WebSocketRfc6455(ms, new WebSocketListenerOptions() { PingTimeout = Timeout.InfiniteTimeSpan }, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1), new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2), handshake.Request, handshake.Response, handshake.NegotiatedMessageExtensions))
            {
                ms.Write(new Byte[] { 129, 130, 75, 91, 80, 26, 3, 50 }, 0, 8);
                ms.Write(new Byte[] { 129, 130, 75, 91, 80, 26, 3, 50 }, 0, 8);
                ms.Flush();
                ms.Seek(0, SeekOrigin.Begin);

                var reader = ws.ReadMessageAsync(CancellationToken.None).Result;
                Assert.IsNotNull(reader);
                using (var sr = new StreamReader(reader, Encoding.UTF8, true, 1024, true))
                {
                    String s = sr.ReadToEnd();
                    Assert.AreEqual("Hi", s);
                }

                reader = ws.ReadMessageAsync(CancellationToken.None).Result;
                Assert.IsNotNull(reader);
                using (var sr = new StreamReader(reader, Encoding.UTF8, true, 1024, true))
                {
                    String s = sr.ReadToEndAsync().Result;
                    Assert.AreEqual("Hi", s);
                }

                reader = ws.ReadMessageAsync(CancellationToken.None).Result;
                Assert.IsNull(reader);
            }
        }
Beispiel #5
0
 public WebSocketMessageWriteRfc6455Stream(WebSocketRfc6455 client, WebSocketMessageType messageType, WebSocketExtensionFlags extensionFlags)
     : this(client, messageType)
 {
     ExtensionFlags.Rsv1 = extensionFlags.Rsv1;
     ExtensionFlags.Rsv2 = extensionFlags.Rsv2;
     ExtensionFlags.Rsv3 = extensionFlags.Rsv3;
 }
 public WebSocketMessageWriteRfc6455Stream(WebSocketRfc6455 webSocket, WebSocketMessageType messageType, WebSocketExtensionFlags extensionFlags)
     : this(webSocket, messageType)
 {
     this.ExtensionFlags.Rsv1 = extensionFlags.Rsv1;
     this.ExtensionFlags.Rsv2 = extensionFlags.Rsv2;
     this.ExtensionFlags.Rsv3 = extensionFlags.Rsv3;
     this.sendBuffer          = this.webSocket.Connection.SendBuffer;
 }
        public WebSocketMessageWriteRfc6455Stream(WebSocketRfc6455 webSocket, WebSocketMessageType messageType)
        {
            Guard.ParameterCannotBeNull(webSocket, "webSocket");

            _internalUsedBufferLength = 0;
            _messageType = messageType;
            _webSocket = webSocket;
        }
        public WebSocketMessageWriteRfc6455Stream(WebSocketRfc6455 webSocket, WebSocketMessageType messageType)
        {
            Guard.ParameterCannotBeNull(webSocket, "webSocket");

            _internalUsedBufferLength = 0;
            _messageType = messageType;
            _webSocket   = webSocket;
        }
        public WebSocketMessageWriteRfc6455Stream(WebSocketRfc6455 webSocket, WebSocketMessageType messageType)
        {
            if (webSocket == null)
                throw new ArgumentNullException("webSocket");

            _internalUsedBufferLength = 0;
            _messageType = messageType;
            _webSocket = webSocket;
        }
        public WebSocketMessageReadRfc6455Stream(WebSocketRfc6455 webSocket)
        {
            Guard.ParameterCannotBeNull(webSocket, "webSocket");

            _webSocket = webSocket;
            _messageType = (WebSocketMessageType)_webSocket.Connection.CurrentHeader.Flags.Option;
            _flags = GetExtensionFlags(_webSocket.Connection.CurrentHeader.Flags);
            _hasPendingFrames = !_webSocket.Connection.CurrentHeader.Flags.FIN;
            if (_webSocket.Connection.CurrentHeader.Flags.Option != WebSocketFrameOption.Binary && _webSocket.Connection.CurrentHeader.Flags.Option != WebSocketFrameOption.Text)
                throw new WebSocketException("WebSocketMessageReadNetworkStream can only start with a Text or Binary frame, not " + _webSocket.Connection.CurrentHeader.Flags.Option.ToString());
        }
Beispiel #11
0
        public WebSocketMessageWriteRfc6455Stream(WebSocketRfc6455 webSocket, WebSocketMessageType messageType)
        {
            if (webSocket == null)
            {
                throw new ArgumentNullException("webSocket");
            }

            _internalUsedBufferLength = 0;
            _messageType = messageType;
            _webSocket   = webSocket;
        }
 public void With_WebSocket_CanDetectHalfOpenConnection()
 {
     var handshake = GenerateSimpleHandshake();
     using (var ms = new MemoryStream())
     using (WebSocket ws = new WebSocketRfc6455(ms, new WebSocketListenerOptions() { PingTimeout = TimeSpan.FromMilliseconds(100) }, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1), new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2), handshake.Request, handshake.NegotiatedMessageExtensions))
     {
         ws.ReadMessageAsync(CancellationToken.None);
         // DateTime has no millisecond precission.
         Thread.Sleep(500);
         Assert.IsFalse(ws.IsConnected);
     }
 }
        public WebSocketMessageWriteRfc6455Stream(WebSocketRfc6455 webSocket, WebSocketMessageType messageType)
        {
            if (webSocket == null)
            {
                throw new ArgumentNullException(nameof(webSocket));
            }

            this.sendBufferUsedLength = 0;
            this.messageType          = messageType;
            this.webSocket            = webSocket;
            this.sendBuffer           = this.webSocket.Connection.SendBuffer;
        }
        public WebSocketMessageReadRfc6455Stream(WebSocketRfc6455 webSocket)
        {
            Guard.ParameterCannotBeNull(webSocket, "webSocket");

            _webSocket        = webSocket;
            _messageType      = (WebSocketMessageType)_webSocket.Connection.CurrentHeader.Flags.Option;
            _flags            = GetExtensionFlags(_webSocket.Connection.CurrentHeader.Flags);
            _hasPendingFrames = !_webSocket.Connection.CurrentHeader.Flags.FIN;
            if (_webSocket.Connection.CurrentHeader.Flags.Option != WebSocketFrameOption.Binary && _webSocket.Connection.CurrentHeader.Flags.Option != WebSocketFrameOption.Text)
            {
                throw new WebSocketException("WebSocketMessageReadNetworkStream can only start with a Text or Binary frame, not " + _webSocket.Connection.CurrentHeader.Flags.Option.ToString());
            }
        }
        public WebSocketMessageReadRfc6455Stream(WebSocketRfc6455 webSocket)
        {
            if (webSocket == null)
            {
                throw new ArgumentNullException(nameof(webSocket));
            }

            _webSocket        = webSocket;
            this.MessageType  = (WebSocketMessageType)_webSocket.Connection.CurrentHeader.Flags.Option;
            this.Flags        = GetExtensionFlags(_webSocket.Connection.CurrentHeader.Flags);
            _hasPendingFrames = !_webSocket.Connection.CurrentHeader.Flags.FIN;
            if (_webSocket.Connection.CurrentHeader.Flags.Option != WebSocketFrameOption.Binary && _webSocket.Connection.CurrentHeader.Flags.Option != WebSocketFrameOption.Text)
            {
                throw new WebSocketException($"WebSocketMessageReadNetworkStream can only start with a Text or Binary frame, not {_webSocket.Connection.CurrentHeader.Flags.Option}.");
            }
        }
Beispiel #16
0
        public WebSocketMessageReadRfc6455Stream([NotNull] WebSocketRfc6455 webSocket)
        {
            if (webSocket == null)
            {
                throw new ArgumentNullException(nameof(webSocket));
            }

            _webSocket = webSocket;

            var headerOptions = this._webSocket.Connection.CurrentHeader.Flags.Option;

            this.MessageType  = (WebSocketMessageType)headerOptions;
            this.Flags        = GetExtensionFlags(_webSocket.Connection.CurrentHeader.Flags);
            _hasPendingFrames = !_webSocket.Connection.CurrentHeader.Flags.FIN;

            if (headerOptions != WebSocketFrameOption.Binary &&
                headerOptions != WebSocketFrameOption.Text)
            {
                var headerIntValue = (int)headerOptions;

                throw new WebSocketException(
                          $"WebSocketMessageReadNetworkStream can only start with a Text or Binary frame, not {headerOptions} ({headerIntValue}).");
            }
        }
 public void With_WebSocket_CanWriteTwoSequentialMessages()
 {
     var handshake = GenerateSimpleHandshake();
     using (var ms = new MemoryStream())
     using (WebSocket ws = new WebSocketRfc6455(ms, new WebSocketListenerOptions() { PingTimeout = Timeout.InfiniteTimeSpan }, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1), new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2), handshake.Request, handshake.Response, handshake.NegotiatedMessageExtensions))
     {
         using (var writer = ws.CreateMessageWriter(WebSocketMessageType.Text)) { }
         using (var writer = ws.CreateMessageWriter(WebSocketMessageType.Text)) { }
     }
 }
        public void With_WebSocket_FailsWithDoubleMessageRead()
        {
            var handshake = GenerateSimpleHandshake();
            using (var ms = new MemoryStream())
            using (WebSocket ws = new WebSocketRfc6455(ms, new WebSocketListenerOptions() { PingTimeout = Timeout.InfiniteTimeSpan }, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1), new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2), handshake.Request, handshake.Response, handshake.NegotiatedMessageExtensions))
            {
                ms.Write(new Byte[] { 129, 130, 75, 91, 80, 26, 3, 50 }, 0, 8);
                ms.Write(new Byte[] { 129, 130, 75, 91, 80, 26, 3, 50 }, 0, 8);
                ms.Flush();
                ms.Seek(0, SeekOrigin.Begin);

                var reader = ws.ReadMessage();
                reader = ws.ReadMessage();
            }
        }
        public void With_WebSocket_CanWriteString()
        {
            string msg = "01";
            var handshake = GenerateSimpleHandshake();
            var ms = new MemoryStream();
            using (WebSocket ws = new WebSocketRfc6455(ms, new WebSocketListenerOptions { PingTimeout = Timeout.InfiniteTimeSpan }, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1), new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2), handshake.Request, handshake.Response, handshake.NegotiatedMessageExtensions))
            {
                ws.WriteString(msg);
            }

            Assert.AreEqual(new byte[] { 129, 2, 48, 49, 136, 2, 3, 232 }, ms.ToArray());
        }
 public void With_WebSocket_FailsWithDoubleMessageWrite()
 {
     Assert.Throws<WebSocketException>(() =>
     {
         var handshake = GenerateSimpleHandshake();
         using (var ms = new MemoryStream())
         using (
             WebSocket ws = new WebSocketRfc6455(ms,
                 new WebSocketListenerOptions() { PingTimeout = Timeout.InfiniteTimeSpan },
                 new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1), new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2),
                 handshake.Request, handshake.Response, handshake.NegotiatedMessageExtensions))
         {
             var writer = ws.CreateMessageWriter(WebSocketMessageType.Text);
             writer = ws.CreateMessageWriter(WebSocketMessageType.Text);
         }
     });
 }