Exemple #1
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 #2
0
        /// <summary>
        /// Retrieves the registration instance for a specific unconfirmed request type
        /// </summary>
        /// <param name="serviceChoice">The service choice of the unconfirmed request type</param>
        /// <returns>The registration instance</returns>
        public IRegistration GetRegistration(UnconfirmedServiceChoice serviceChoice)
        {
            for (int i = 0; i < _registrations.Count; i++)
            {
                if (_registrations[i].ServiceChoice == serviceChoice)
                {
                    return(_registrations[i]);
                }
            }

            throw new Exception("Could not retrieve registration for unregistered service: " + serviceChoice);
        }
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>
        /// Registers an unconfirmed request type with the registrar
        /// </summary>
        /// <param name="serviceChoice">The service choice of the request type</param>
        public void Register <T>(UnconfirmedServiceChoice serviceChoice) where T : IUnconfirmedRequest
        {
            for (int i = 0; i < _registrations.Count; i++)
            {
                if (_registrations[i].ServiceChoice == serviceChoice)
                {
                    throw new Exception("Service choice is already registered");
                }
            }

            Registration <T> registration = new Registration <T>(serviceChoice);

            this._registrations.Add(registration);
        }
Exemple #5
0
 /// <summary>
 /// Constructs a new registration instance
 /// </summary>
 /// <param name="serviceChoice">The service choice of the registration</param>
 public Registration(UnconfirmedServiceChoice serviceChoice)
 {
     this.ServiceChoice = serviceChoice;
 }