예제 #1
0
        /// <summary>
        /// Sends the very first segment in the request
        /// </summary>
        private void _sendInitialRequestSegment()
        {
            if (_request.Length > _device.MaxAppgramLength)
            {
                throw new Exception("Segmentation not supported... yet");
            }

            _sequenceNumber = 0;
            _windowStart    = 0;
            _windowSize     = MaxWindowSize;

            ConfirmedRequestMessage message = new ConfirmedRequestMessage();

            message.Segmented   = false;
            message.MoreFollows = false;
            message.SegmentedResponseAccepted = true;
            message.MaxSegmentsAccepted       = int.MaxValue;
            message.MaxAppgramLengthAccepted  = (int)_device.MaxAppgramLength; // TODO: retrieve from local device?
            message.InvokeId           = _invokeId;
            message.SequenceNumber     = (byte)_windowStart;
            message.ProposedWindowSize = (byte)_windowSize;
            message.ServiceChoice      = _serviceChoice;

            _host.SendRaw(_device.Address, true, message,
                          new BufferSegment(_request, 0, _request.Length));

            _transitionTo(ClientState.AwaitConfirmation);
        }
예제 #2
0
 /// <summary>
 /// Processes a received confirmed request
 /// </summary>
 /// <param name="source">The address of the device that sent the request</param>
 /// <param name="message">The confirmed request header</param>
 /// <param name="segment">The buffer segment containing the request content</param>
 public void ProcessConfirmedRequest(Address source, ConfirmedRequestMessage message, BufferSegment segment)
 {
 }