Exemple #1
0
        public void IsReplyRequiredTest()
        {
            SlpServiceAgent_Accessor target = new SlpServiceAgent_Accessor()
            {
                ServiceUrl = "service:e133.esta://2.4.3.127/0xaabb11223344"
            };
            ServiceRequestPacket request = new ServiceRequestPacket()
            {
                ServiceType = "service:e133.esta", ScopeList = target.Scope
            };

            Assert.IsTrue(target.IsReplyRequired(request));
            request.ServiceType = "service:directory-agent";
            Assert.IsFalse(target.IsReplyRequired(request));

            request.ServiceType = "service:e133.esta";
            target.ServiceUrl   = "service:printer:lpr://igore.wco.ftp.com:515/draft";
            Assert.IsFalse(target.IsReplyRequired(request));
            request.ServiceType = "service:printer";
            Assert.IsTrue(target.IsReplyRequired(request));
            request.ServiceType = "service:lpr";
            Assert.IsTrue(target.IsReplyRequired(request));
            request.ServiceType = "service:printer:lpr";
            Assert.IsTrue(target.IsReplyRequired(request));

            request.ServiceType = "service:print6er";
            Assert.IsFalse(target.IsReplyRequired(request));
            request.ServiceType = "service:lp2r";
            Assert.IsFalse(target.IsReplyRequired(request));
            request.ServiceType = "service:prin4ter:lpr";
            Assert.IsFalse(target.IsReplyRequired(request));
            request.ServiceType = "service:printer:lp9r";
            Assert.IsFalse(target.IsReplyRequired(request));
        }
Exemple #2
0
        protected override void ProcessPacket(NewPacketEventArgs packetInfo)
        {
            DirectoryAgentAdvertPacket advert = packetInfo.Packet as DirectoryAgentAdvertPacket;

            if (advert != null)
            {
                ProcessDAAdvert(advert, packetInfo.SourceEndPoint);
            }

            ServiceRequestPacket request = packetInfo.Packet as ServiceRequestPacket;

            if (IsReplyRequired(request))
            {
                SendServiceReply(packetInfo.SourceEndPoint, packetInfo.Packet.Header.XId);
            }

            ServiceAcknowledgePacket acknowledge = packetInfo.Packet as ServiceAcknowledgePacket;

            if (acknowledge != null)
            {
                RaiseServiceRegistered();
            }

            AttributeRequestPacket attributeRequest = packetInfo.Packet as AttributeRequestPacket;

            if (IsReplyRequired(attributeRequest))
            {
                SendAttributeReply(packetInfo.SourceEndPoint, packetInfo.Packet.Header.XId);
            }
        }
Exemple #3
0
        protected void SendDARequest()
        {
            ServiceRequestPacket request = new ServiceRequestPacket();

            FillHeader(request.Header, NewTransactionId());
            request.ServiceType = "service:directory-agent";
            request.ScopeList   = Scope;

            socket.Send(request);
        }
Exemple #4
0
        /// <summary>
        /// Determines whether a reply is required for the specified request.
        /// We should only respond to requests within the scope of the service
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>
        ///   <c>true</c> if reply is required; otherwise, <c>false</c>.
        /// </returns>
        private bool IsReplyRequired(ServiceRequestPacket request)
        {
            if (!IsReplyRequired((SlpRequestPacket)request))
            {
                return(false);
            }

            //Does the requested service match this service?
            if (request.ServiceType != ServiceType &&
                ((string.IsNullOrEmpty(ServiceAbstractType) || request.ServiceType != string.Format("service:{0}", ServiceAbstractType))) &&
                ((string.IsNullOrEmpty(ServiceConcreteType) || request.ServiceType != string.Format("service:{0}", ServiceConcreteType))))
            {
                return(false);
            }

            return(true);
        }
Exemple #5
0
        /// <summary>
        /// Sends a service request.
        /// </summary>
        /// <param name="serviceType">Type of the service.</param>
        /// <param name="scope">The scope.</param>
        /// <returns>The Id of the request</returns>
        private int SendRequest(string serviceType, string scope)
        {
            ServiceRequestPacket request = new ServiceRequestPacket();

            FillHeader(request.Header, NewTransactionId());
            request.ServiceType = serviceType;
            request.ScopeList   = scope;

            if (DirectoryAgent == null)
            {
                //Multicast the service request.
                socket.Send(request);
            }
            else
            {
                //Request the services directly from the DA.
                socket.Send(DirectoryAgent.EndPoint, request);
            }

            return(request.Header.XId);
        }