Fix handling of closed streams

This commit is contained in:
Christian Kratky
2017-10-31 14:10:39 +01:00
parent d5dc3a1361
commit 9c46b8fd75
2 changed files with 16 additions and 6 deletions
@@ -151,7 +151,7 @@ namespace MQTTnet.Core.Adapter
receivedMqttPacket = await ReceiveAsync(_channel.ReceiveStream, cancellationToken).ConfigureAwait(false); receivedMqttPacket = await ReceiveAsync(_channel.ReceiveStream, cancellationToken).ConfigureAwait(false);
} }
if (cancellationToken.IsCancellationRequested) if (receivedMqttPacket == null || cancellationToken.IsCancellationRequested)
{ {
throw new TaskCanceledException(); throw new TaskCanceledException();
} }
@@ -190,6 +190,10 @@ namespace MQTTnet.Core.Adapter
private static async Task<ReceivedMqttPacket> ReceiveAsync(Stream stream, CancellationToken cancellationToken) private static async Task<ReceivedMqttPacket> ReceiveAsync(Stream stream, CancellationToken cancellationToken)
{ {
var header = MqttPacketReader.ReadHeaderFromSource(stream, cancellationToken); var header = MqttPacketReader.ReadHeaderFromSource(stream, cancellationToken);
if (header == null)
{
return null;
}
if (header.BodyLength == 0) if (header.BodyLength == 0)
{ {
+11 -5
View File
@@ -25,7 +25,13 @@ namespace MQTTnet.Core.Serializer
public static MqttPacketHeader ReadHeaderFromSource(Stream stream, CancellationToken cancellationToken) public static MqttPacketHeader ReadHeaderFromSource(Stream stream, CancellationToken cancellationToken)
{ {
var fixedHeader = (byte)stream.ReadByte(); var buffer = stream.ReadByte();
if (buffer == -1)
{
return null;
}
var fixedHeader = (byte)buffer;
var controlPacketType = (MqttControlPacketType)(fixedHeader >> 4); var controlPacketType = (MqttControlPacketType)(fixedHeader >> 4);
var bodyLength = ReadBodyLengthFromSource(stream, cancellationToken); var bodyLength = ReadBodyLengthFromSource(stream, cancellationToken);
@@ -83,10 +89,10 @@ namespace MQTTnet.Core.Serializer
var buffer = stream.ReadByte(); var buffer = stream.ReadByte();
readBytes.Add(buffer); readBytes.Add(buffer);
////if (buffer == -1) if (buffer == -1)
////{ {
//// break; break;
////} }
encodedByte = (byte)buffer; encodedByte = (byte)buffer;
value += (byte)(encodedByte & 127) * multiplier; value += (byte)(encodedByte & 127) * multiplier;