protected override bool MatchesSafely()

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;
         }
      }