in src/Proton.TestPeer/Matchers/Types/Messaging/PartialDataSectionMatcher.cs [75:130]
protected override bool MatchesSafely(Stream receivedBinary)
{
if (expectDataSectionPreamble)
{
object descriptor = ReadDescribedTypeEncoding(receivedBinary);
if (!(DescriptorCode.Equals(descriptor) || DescriptorSymbol.Equals(descriptor)))
{
return false;
}
// Should be a Binary AMQP type with a length value and possibly some bytes
EncodingCodes encodingCode = receivedBinary.ReadEncodingCode();
int binaryEncodedSize;
if (encodingCode == EncodingCodes.VBin8)
{
binaryEncodedSize = receivedBinary.ReadUnsignedByte();
}
else if (encodingCode == EncodingCodes.VBin32)
{
binaryEncodedSize = receivedBinary.ReadInt();
}
else
{
decodingErrorDescription = "Expected to read a Binary Type but read encoding code: " + encodingCode;
return false;
}
if (binaryEncodedSize != expectedEncodedSize)
{
decodingErrorDescription = "Expected encoded Binary to indicate size of: " + expectedEncodedSize + ", " +
"but read an encoded size of: " + binaryEncodedSize;
return false;
}
}
if (expectedValue != null)
{
byte[] payload = receivedBinary.ReadBytes(expectedValue.Length);
if (!expectedValue.SequenceEqual(payload))
{
return false;
}
}
if (receivedBinary.IsReadable() && !TrailingBytesExpected)
{
unexpectedTrailingBytes = true;
return false;
}
else
{
return true;
}
}