Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
        }