internal void UnsubscribeEvents(EventSubscription subscription)
 {
   lock (_cpData.SyncObj)
   {
     HttpWebRequest request = CreateEventUnsubscribeRequest(subscription);
     ChangeEventSubscriptionState state = new ChangeEventSubscriptionState(subscription.ServiceDescriptor, subscription.Service, request);
     _pendingCalls.Add(state);
     IAsyncResult result = state.Request.BeginGetResponse(OnUnsubscribeResponseReceived, state);
     NetworkHelper.AddTimeout(request, result, EVENT_UNSUBSCRIPTION_CALL_TIMEOUT * 1000);
   }
 }
 protected HttpWebRequest CreateEventUnsubscribeRequest(EventSubscription subscription)
 {
   ServiceDescriptor sd = subscription.ServiceDescriptor;
   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 = "UNSUBSCRIBE";
   request.Headers.Add("SID", subscription.Sid);
   return request;
 }
    protected void RenewEventSubscription(EventSubscription subscription)
    {
      if (!subscription.Service.IsConnected)
        throw new IllegalCallException("Service '{0}' is not connected to a UPnP network service", subscription.Service.FullQualifiedName);

      lock (_cpData.SyncObj)
      {
        HttpWebRequest request = CreateRenewEventSubscribeRequest(subscription);
        ChangeEventSubscriptionState state = new ChangeEventSubscriptionState(subscription.ServiceDescriptor, subscription.Service, request);
        _pendingCalls.Add(state);
        IAsyncResult result = state.Request.BeginGetResponse(OnSubscribeOrRenewSubscriptionResponseReceived, state);
        NetworkHelper.AddTimeout(request, result, EVENT_SUBSCRIPTION_CALL_TIMEOUT * 1000);
      }
    }