public EventSubscription(string sid, ServiceDescriptor serviceDescriptor, CpService service, DateTime expiration)
 {
   _sid = sid;
   _serviceDescriptor = serviceDescriptor;
   _service = service;
   _expiration = expiration;
 }
 protected HttpWebRequest CreateActionCallRequest(ServiceDescriptor sd, CpAction action)
 {
   LinkData preferredLink = sd.RootDescriptor.SSDPRootEntry.PreferredLink;
   HttpWebRequest request = (HttpWebRequest) WebRequest.Create(new Uri(
       new Uri(preferredLink.DescriptionLocation), sd.ControlURL));
   NetworkUtils.SetLocalEndpoint(request, preferredLink.Endpoint.EndPointIPAddress);
   request.Method = "POST";
   request.KeepAlive = _useHttpKeepAlive;
   request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
   request.ServicePoint.Expect100Continue = false;
   request.AllowAutoRedirect = true;
   request.UserAgent = UPnPConfiguration.UPnPMachineInfoHeader;
   request.ContentType = "text/xml; charset=\"utf-8\"";
   request.Headers.Add("SOAPACTION", '"' + action.Action_URN + '"');
   request.Headers.Add("Accept-Encoding", CompressionHelper.GetAcceptedEncodings());
   return request;
 }
 public ChangeEventSubscriptionState(ServiceDescriptor serviceDescriptor, CpService service, HttpWebRequest request) :
     base(request)
 {
   _serviceDescriptor = serviceDescriptor;
   _service = service;
 }
 protected HttpWebRequest CreateEventSubscribeRequest(ServiceDescriptor sd)
 {
   LinkData preferredLink = sd.RootDescriptor.SSDPRootEntry.PreferredLink;
   HttpWebRequest request = (HttpWebRequest) WebRequest.Create(new Uri(
       new Uri(preferredLink.DescriptionLocation), sd.EventSubURL));
   NetworkUtils.SetLocalEndpoint(request, preferredLink.Endpoint.EndPointIPAddress);
   request.Method = "SUBSCRIBE";
   request.UserAgent = UPnPConfiguration.UPnPMachineInfoHeader;
   request.Headers.Add("CALLBACK", "<http://" + NetworkHelper.IPEndPointToString(_eventNotificationEndpoint) + _eventNotificationPath + ">");
   request.Headers.Add("NT", "upnp:event");
   request.Headers.Add("TIMEOUT", "Second-" + EVENT_SUBSCRIPTION_TIME);
   return request;
 }
 internal void SubscribeEvents(CpService service, ServiceDescriptor serviceDescriptor)
 {
   lock (_cpData.SyncObj)
   {
     HttpWebRequest request = CreateEventSubscribeRequest(serviceDescriptor);
     ChangeEventSubscriptionState state = new ChangeEventSubscriptionState(serviceDescriptor, service, request);
     _pendingCalls.Add(state);
     IAsyncResult result = state.Request.BeginGetResponse(OnSubscribeOrRenewSubscriptionResponseReceived, state);
     NetworkHelper.AddTimeout(request, result, EVENT_SUBSCRIPTION_CALL_TIMEOUT * 1000);
   }
 }
Example #6
0
 internal static CpService ConnectService(DeviceConnection connection, CpDevice parentDevice,
     ServiceDescriptor serviceDescriptor, DataTypeResolverDlgt dataTypeResolver)
 {
   lock (connection.CPData.SyncObj)
   {
     CpService result = new CpService(connection, parentDevice, serviceDescriptor.ServiceType, serviceDescriptor.ServiceTypeVersion,
         serviceDescriptor.ServiceId);
     XPathNavigator serviceNav = serviceDescriptor.ServiceDescription.CreateNavigator();
     serviceNav.MoveToChild(XPathNodeType.Element);
     XmlNamespaceManager nsmgr = new XmlNamespaceManager(serviceNav.NameTable);
     nsmgr.AddNamespace("s", UPnPConsts.NS_SERVICE_DESCRIPTION);
     XPathNodeIterator svIt = serviceNav.Select("s:serviceStateTable/s:stateVariable", nsmgr);
     // State variables must be connected first because they are needed from the action's arguments
     while (svIt.MoveNext())
       result.AddStateVariable(CpStateVariable.ConnectStateVariable(connection, result, svIt.Current, nsmgr, dataTypeResolver));
     XPathNodeIterator acIt = serviceNav.Select("s:actionList/s:action", nsmgr);
     while (acIt.MoveNext())
       result.AddAction(CpAction.ConnectAction(connection, result, acIt.Current, nsmgr));
     return result;
   }
 }
 protected static HttpWebRequest CreateActionCallRequest(ServiceDescriptor sd, CpAction action)
 {
   LinkData preferredLink = sd.RootDescriptor.SSDPRootEntry.PreferredLink;
   HttpWebRequest request = (HttpWebRequest) WebRequest.Create(new Uri(
       new Uri(preferredLink.DescriptionLocation), sd.ControlURL));
   NetworkUtils.SetLocalEndpoint(request, preferredLink.Endpoint.EndPointIPAddress);
   request.Method = "POST";
   request.KeepAlive = true;
   request.AllowAutoRedirect = true;
   request.UserAgent = UPnPConfiguration.UPnPMachineInfoHeader;
   request.ContentType = "text/xml; charset=\"utf-8\"";
   request.Headers.Add("SOAPACTION", action.Action_URN);
   return request;
 }