public void SubscribeToEvent(string subscribeUri) { var client = new ExtendedWebClient(); //SUBSCRIBE /MediaServer/ContentDirectory/Event HTTP/1.1 //HOST: 192.168.1.152:1400 //USER-AGENT: Linux UPnP/1.0 Sonos/19.3-53220 (WDCR:Microsoft Windows NT 6.1.7601 Service Pack 1) //CALLBACK: <http://192.168.1.128:3400/notify> //NT: upnp:event //TIMEOUT: Second-3600 // find local IP var uri = listener.Prefixes.FirstOrDefault(); if (uri == null) return; var localUri = uri.Replace("*", LocalEndpoint.Address.ToString()); //client.Headers.Add("USER-AGENT", "Linux UPnP/1.0 Sonos/19.3-53220 (Custom:Jishi.SonosUPnP)"); if (subscriptions.ContainsKey(subscribeUri)) { // Resubscription client.Headers.Add("SID", subscriptions[subscribeUri]); log.DebugFormat("Resubscribing to {0} with SID {1}", subscribeUri, subscriptions[subscribeUri]); } else { client.Headers.Add("CALLBACK", string.Format("<{0}>", localUri)); client.Headers.Add("NT", "upnp:event"); log.DebugFormat("New subscribe to {0}", subscribeUri); } client.Headers.Add("TIMEOUT", "Second-600"); try { client.UploadString(subscribeUri, "SUBSCRIBE", string.Empty); var sid = client.ResponseHeaders["SID"]; subscriptions[subscribeUri] = sid; timers[subscribeUri] = new Timer(Resubscribe, subscribeUri, TimeSpan.FromSeconds(500), TimeSpan.FromMilliseconds(-1)); } catch (WebException ex) { log.ErrorFormat("Error subscribing to {0}. {1}", subscribeUri, ex.Message); if (subscriptions.ContainsKey(subscribeUri)) { subscriptions.Remove(subscribeUri); timers[subscribeUri] = new Timer(Resubscribe, subscribeUri, TimeSpan.FromSeconds(10), TimeSpan.FromMilliseconds(-1)); } } }