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); } }
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; }