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); } }
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()); }
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}."); } }
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); } }); }