Exemple #1
0
 /// <summary>
 /// Sends an unconfirmed request
 /// </summary>
 /// <param name="address">The address of the destination device</param>
 /// <param name="expectingReply">True if a reply is expected to the request, false otherwise</param>
 /// <param name="request">The request to send</param>
 public void SendUnconfirmedRequest(Address address, bool expectingReply, IUnconfirmedRequest request)
 {
     lock (_lock)
     {
         _sendUnconfirmedRequest(address, expectingReply, request);
     }
 }
Exemple #2
0
        /// <summary>
        /// Processes a received unconfirmed request
        /// </summary>
        /// <param name="appgram">The inbound appgram</param>
        /// <param name="message">The unconfirmed request message</param>
        /// <param name="buffer">The buffer containing the request content</param>
        /// <param name="offset">The offset of the request content in the buffer</param>
        /// <param name="end">The end of the request content</param>
        private InboundUnconfirmedRequest _processUnconfirmedRequest(InboundAppgram appgram, UnconfirmedRequestMessage message, byte[] buffer, int offset, int end)
        {
            UnconfirmedServiceChoice choice  = (UnconfirmedServiceChoice)message.ServiceChoice;
            IUnconfirmedRequest      request = _loadUnconfirmedRequest(choice, buffer, offset, end);
            DeviceTableEntry         source  = null;

            if (request.ServiceChoice == UnconfirmedServiceChoice.IAm)
            {
                // the only request that we handle at the host level is an IAm request,
                // which is necessary for TSM operations, since information about the remote
                // host is needed
                source = _processIAmRequest(appgram, (IAmRequest)request);
            }
            else
            {
                source = _devices.GetByAddress(appgram.Source);
            }

            InboundUnconfirmedRequest inbound = new InboundUnconfirmedRequest(
                appgram.Source,
                source,
                request);

            return(inbound);
        }
Exemple #3
0
        /// <summary>
        /// Loads an unconfirmed request from its tagged form
        /// </summary>
        /// <param name="serviceChoice">The service choice of the unconfirmed request</param>
        /// <param name="buffer">The buffer containing the tagged form</param>
        /// <param name="offset">The offset of the tagged form</param>
        /// <param name="end">The end of the tagged form</param>
        /// <returns>The loaded unconfirmed request</returns>
        private IUnconfirmedRequest _loadUnconfirmedRequest(UnconfirmedServiceChoice serviceChoice, byte[] buffer, int offset, int end)
        {
            IUnconfirmedRequest request = null;

            switch (serviceChoice)
            {
            case UnconfirmedServiceChoice.IAm:
                request = Tags.Decode <IAmRequest>(buffer, offset, end);
                break;

            case UnconfirmedServiceChoice.IHave:
                request = Tags.Decode <IHaveRequest>(buffer, offset, end);
                break;

            case UnconfirmedServiceChoice.TimeSynchronization:
                request = Tags.Decode <TimeSynchronizationRequest>(buffer, offset, end);
                break;

            case UnconfirmedServiceChoice.UnconfirmedCOVNotification:
                request = Tags.Decode <UnconfirmedCOVNotificationRequest>(buffer, offset, end);
                break;

            case UnconfirmedServiceChoice.UnconfirmedEventNotification:
                request = Tags.Decode <UnconfirmedEventNotificationRequest>(buffer, offset, end);
                break;

            case UnconfirmedServiceChoice.UnconfirmedPrivateTransfer:
                request = Tags.Decode <UnconfirmedPrivateTransferRequest>(buffer, offset, end);
                break;

            case UnconfirmedServiceChoice.UnconfirmedTextMessage:
                request = Tags.Decode <UnconfirmedTextMessageRequest>(buffer, offset, end);
                break;

            case UnconfirmedServiceChoice.UtcTimeSynchronization:
                request = Tags.Decode <UtcTimeSynchronizationRequest>(buffer, offset, end);
                break;

            case UnconfirmedServiceChoice.WhoHas:
                request = Tags.Decode <WhoHasRequest>(buffer, offset, end);
                break;

            case UnconfirmedServiceChoice.WhoIs:
                request = Tags.Decode <WhoIsRequest>(buffer, offset, end);
                break;

            default:
                throw new RejectException(RejectReason.UnrecognizedService);
            }

            return(request);
        }
Exemple #4
0
        /// <summary>
        /// Saves an unconfirmed request to its tagged form
        /// </summary>
        /// <param name="request">The request to save</param>
        /// <returns>The unconfirmed request content</returns>
        private byte[] _saveUnconfirmedRequest(IUnconfirmedRequest request)
        {
            switch (request.ServiceChoice)
            {
            case UnconfirmedServiceChoice.IAm:
                return(Tags.EncodeBytes((IAmRequest)request));

            case UnconfirmedServiceChoice.IHave:
                return(Tags.EncodeBytes((IHaveRequest)request));

            case UnconfirmedServiceChoice.TimeSynchronization:
                return(Tags.EncodeBytes((TimeSynchronizationRequest)request));

            case UnconfirmedServiceChoice.UnconfirmedCOVNotification:
                return(Tags.EncodeBytes((UnconfirmedCOVNotificationRequest)request));

            case UnconfirmedServiceChoice.UnconfirmedEventNotification:
                return(Tags.EncodeBytes((UnconfirmedEventNotificationRequest)request));

            case UnconfirmedServiceChoice.UnconfirmedPrivateTransfer:
                return(Tags.EncodeBytes((UnconfirmedPrivateTransferRequest)request));

            case UnconfirmedServiceChoice.UnconfirmedTextMessage:
                return(Tags.EncodeBytes((UnconfirmedTextMessageRequest)request));

            case UnconfirmedServiceChoice.UtcTimeSynchronization:
                return(Tags.EncodeBytes((UtcTimeSynchronizationRequest)request));

            case UnconfirmedServiceChoice.WhoHas:
                return(Tags.EncodeBytes((WhoHasRequest)request));

            case UnconfirmedServiceChoice.WhoIs:
                return(Tags.EncodeBytes((WhoIsRequest)request));

            default:
                throw new RejectException(RejectReason.UnrecognizedService);
            }
        }
Exemple #5
0
 /// <summary>
 /// Saves an unconfirmed request
 /// </summary>
 /// <param name="sink">The sink to save to</param>
 /// <param name="request">The request to save</param>
 public void Save(IValueSink sink, IUnconfirmedRequest request)
 {
     Value <T> .Save(sink, (T)request);
 }
 /// <summary>
 /// Constructs a new inbound unconfirmed request
 /// </summary>
 /// <param name="sourceAddress">The device that sent the request</param>
 /// <param name="source">The device table entry of the device that sent the request</param>
 /// <param name="request">The request instance</param>
 public InboundUnconfirmedRequest(Address sourceAddress, DeviceTableEntry source, IUnconfirmedRequest request)
 {
     this.SourceAddress = sourceAddress;
     this.Source = source;
     this.Request = request;
 }
 /// <summary>
 /// Constructs a new inbound unconfirmed request
 /// </summary>
 /// <param name="sourceAddress">The device that sent the request</param>
 /// <param name="source">The device table entry of the device that sent the request</param>
 /// <param name="request">The request instance</param>
 public InboundUnconfirmedRequest(Address sourceAddress, DeviceTableEntry source, IUnconfirmedRequest request)
 {
     this.SourceAddress = sourceAddress;
     this.Source        = source;
     this.Request       = request;
 }
Exemple #8
0
 /// <summary>
 /// Sends an unconfirmed request
 /// </summary>
 /// <param name="instance">The instance of the destination device</param>
 /// <param name="expectingReply">True if a reply is expected to the request, false otherwise</param>
 /// <param name="request">The request to send</param>
 public void SendUnconfirmedRequest(uint instance, bool expectingReply, IUnconfirmedRequest request)
 {
     lock (_lock)
     {
     }
 }
Exemple #9
0
        /// <summary>
        /// Sends an unconfirmed request
        /// </summary>
        /// <param name="destination">The destination address</param>
        /// <param name="expectingReply">Whether or not a response is expected</param>
        /// <param name="request">The unconfirmed request</param>
        private void _sendUnconfirmedRequest(Address destination, bool expectingReply, IUnconfirmedRequest request)
        {
            UnconfirmedRequestMessage message = new UnconfirmedRequestMessage();

            message.ServiceChoice = (byte)request.ServiceChoice;
            byte[] raw = _saveUnconfirmedRequest(request);

            OutboundAppgram appgram = new OutboundAppgram();

            appgram.Content        = new AppgramContent(message, new BufferSegment(raw, 0, raw.Length));
            appgram.Destination    = destination;
            appgram.ExpectingReply = expectingReply;
            appgram.Priority       = NetgramPriority.Normal;

            if (_router != null)
            {
                _router.SendAppgram(appgram);
            }
        }