1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.fourthline.cling.protocol.sync;
17
18 import org.fourthline.cling.UpnpService;
19 import org.fourthline.cling.model.gena.CancelReason;
20 import org.fourthline.cling.model.gena.RemoteGENASubscription;
21 import org.fourthline.cling.model.message.StreamResponseMessage;
22 import org.fourthline.cling.model.message.gena.OutgoingUnsubscribeRequestMessage;
23 import org.fourthline.cling.protocol.SendingSync;
24 import org.fourthline.cling.transport.RouterException;
25
26 import java.util.logging.Logger;
27
28
29
30
31
32
33
34
35
36
37
38
39 public class SendingUnsubscribe extends SendingSync<OutgoingUnsubscribeRequestMessage, StreamResponseMessage> {
40
41 final private static Logger log = Logger.getLogger(SendingUnsubscribe.class.getName());
42
43 final protected RemoteGENASubscription subscription;
44
45 public SendingUnsubscribe(UpnpService upnpService, RemoteGENASubscription subscription) {
46 super(
47 upnpService,
48 new OutgoingUnsubscribeRequestMessage(
49 subscription,
50 upnpService.getConfiguration().getEventSubscriptionHeaders(subscription.getService())
51 )
52 );
53 this.subscription = subscription;
54 }
55
56 protected StreamResponseMessage executeSync() throws RouterException {
57
58 log.fine("Sending unsubscribe request: " + getInputMessage());
59
60 StreamResponseMessage response = null;
61 try {
62 response = getUpnpService().getRouter().send(getInputMessage());
63 return response;
64 } finally {
65 onUnsubscribe(response);
66 }
67 }
68
69 protected void onUnsubscribe(final StreamResponseMessage response) {
70
71 getUpnpService().getRegistry().removeRemoteSubscription(subscription);
72
73 getUpnpService().getConfiguration().getRegistryListenerExecutor().execute(
74 new Runnable() {
75 public void run() {
76 if (response == null) {
77 log.fine("Unsubscribe failed, no response received");
78 subscription.end(CancelReason.UNSUBSCRIBE_FAILED, null);
79 } else if (response.getOperation().isFailed()) {
80 log.fine("Unsubscribe failed, response was: " + response);
81 subscription.end(CancelReason.UNSUBSCRIBE_FAILED, response.getOperation());
82 } else {
83 log.fine("Unsubscribe successful, response was: " + response);
84 subscription.end(null, response.getOperation());
85 }
86 }
87 }
88 );
89 }
90 }