private void StartReadFragment(bool isFirstFragment) { if (_fragmentHeader != null) { throw new Exception("Logic error"); } var dataReader = new BinaryDataReader(_connection.Input, ByteOrder.BigEndian); var fragmentHeader = FragmentHeader.ReadFrom(dataReader); if (_connection.TraceWriter != null) { NetUtils.TraceOutput(_connection.TraceWriter, $"PC {fragmentHeader.PresentationContextID} received ", fragmentHeader); _connection.TraceWriter.Flush(); } if (!isFirstFragment && (fragmentHeader.PresentationContextID != PresentationContextID)) { throw new IOException($"Expected presentation context ID {PresentationContextID} but got {_fragmentHeader.PresentationContextID}"); } if (fragmentHeader.FragmentType != _fragmentType) { throw new IOException($"Expected {_fragmentType} but got {fragmentHeader.FragmentType}"); } _fragmentHeader = fragmentHeader; _fragmentEndPosition = _connection.Input.Position + (fragmentHeader.Length - 2); }
private void EndReadFragment(out bool wasLastFragment) { if (_fragmentHeader == null) { throw new Exception("Logic error"); } if (_connection.Input.Position != _fragmentEndPosition) { throw new Exception("Logic error"); } wasLastFragment = _fragmentHeader.IsLastFragment; _fragmentHeader = null; _fragmentEndPosition = 0; }