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)); }
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); } }
protected void SendDARequest() { ServiceRequestPacket request = new ServiceRequestPacket(); FillHeader(request.Header, NewTransactionId()); request.ServiceType = "service:directory-agent"; request.ScopeList = Scope; socket.Send(request); }
/// <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); }
/// <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); }