Allow zero length sends and receives.
This commit is contained in:
parent
1853c71114
commit
704239bca8
|
|
@ -533,11 +533,11 @@ namespace Microsoft.Net.WebSockets
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("buffer");
|
throw new ArgumentNullException("buffer");
|
||||||
}
|
}
|
||||||
if (buffer.Offset < 0 || buffer.Offset >= buffer.Array.Length)
|
if (buffer.Offset < 0 || buffer.Offset > buffer.Array.Length)
|
||||||
{
|
{
|
||||||
throw new ArgumentOutOfRangeException("buffer.Offset", buffer.Offset, string.Empty);
|
throw new ArgumentOutOfRangeException("buffer.Offset", buffer.Offset, string.Empty);
|
||||||
}
|
}
|
||||||
if (buffer.Count <= 0 || buffer.Count > buffer.Array.Length - buffer.Offset)
|
if (buffer.Count < 0 || buffer.Count > buffer.Array.Length - buffer.Offset)
|
||||||
{
|
{
|
||||||
throw new ArgumentOutOfRangeException("buffer.Count", buffer.Count, string.Empty);
|
throw new ArgumentOutOfRangeException("buffer.Count", buffer.Count, string.Empty);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,38 @@ namespace Microsoft.Net.WebSockets.Test
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task SendEmptyData_Success()
|
||||||
|
{
|
||||||
|
using (HttpListener listener = new HttpListener())
|
||||||
|
{
|
||||||
|
listener.Prefixes.Add(ServerAddress);
|
||||||
|
listener.Start();
|
||||||
|
Task<HttpListenerContext> serverAccept = listener.GetContextAsync();
|
||||||
|
|
||||||
|
WebSocketClient client = new WebSocketClient();
|
||||||
|
Task<WebSocket> clientConnect = client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None);
|
||||||
|
|
||||||
|
HttpListenerContext serverContext = await serverAccept;
|
||||||
|
Assert.True(serverContext.Request.IsWebSocketRequest);
|
||||||
|
HttpListenerWebSocketContext serverWebSocketContext = await serverContext.AcceptWebSocketAsync(null);
|
||||||
|
|
||||||
|
WebSocket clientSocket = await clientConnect;
|
||||||
|
|
||||||
|
byte[] orriginalData = new byte[0];
|
||||||
|
await clientSocket.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None);
|
||||||
|
|
||||||
|
byte[] serverBuffer = new byte[orriginalData.Length];
|
||||||
|
WebSocketReceiveResult result = await serverWebSocketContext.WebSocket.ReceiveAsync(new ArraySegment<byte>(serverBuffer), CancellationToken.None);
|
||||||
|
Assert.True(result.EndOfMessage);
|
||||||
|
Assert.Equal(orriginalData.Length, result.Count);
|
||||||
|
Assert.Equal(WebSocketMessageType.Binary, result.MessageType);
|
||||||
|
Assert.Equal(orriginalData, serverBuffer);
|
||||||
|
|
||||||
|
clientSocket.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task SendShortData_Success()
|
public async Task SendShortData_Success()
|
||||||
{
|
{
|
||||||
|
|
@ -220,6 +252,37 @@ namespace Microsoft.Net.WebSockets.Test
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task ReceiveEmptyData_Success()
|
||||||
|
{
|
||||||
|
using (HttpListener listener = new HttpListener())
|
||||||
|
{
|
||||||
|
listener.Prefixes.Add(ServerAddress);
|
||||||
|
listener.Start();
|
||||||
|
Task<HttpListenerContext> serverAccept = listener.GetContextAsync();
|
||||||
|
|
||||||
|
WebSocketClient client = new WebSocketClient();
|
||||||
|
Task<WebSocket> clientConnect = client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None);
|
||||||
|
|
||||||
|
HttpListenerContext serverContext = await serverAccept;
|
||||||
|
Assert.True(serverContext.Request.IsWebSocketRequest);
|
||||||
|
HttpListenerWebSocketContext serverWebSocketContext = await serverContext.AcceptWebSocketAsync(null);
|
||||||
|
|
||||||
|
WebSocket clientSocket = await clientConnect;
|
||||||
|
|
||||||
|
byte[] orriginalData = Encoding.UTF8.GetBytes("Hello World");
|
||||||
|
await serverWebSocketContext.WebSocket.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None);
|
||||||
|
|
||||||
|
byte[] clientBuffer = new byte[0];
|
||||||
|
WebSocketReceiveResult result = await clientSocket.ReceiveAsync(new ArraySegment<byte>(clientBuffer), CancellationToken.None);
|
||||||
|
Assert.False(result.EndOfMessage);
|
||||||
|
Assert.Equal(0, result.Count);
|
||||||
|
Assert.Equal(WebSocketMessageType.Binary, result.MessageType);
|
||||||
|
|
||||||
|
clientSocket.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task ReceiveShortData_Success()
|
public async Task ReceiveShortData_Success()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue