fixed observe exception, when channel is disconnected
authorJung Seungho <shonest.jung@samsung.com>
Wed, 21 Sep 2016 06:42:58 +0000 (15:42 +0900)
committerJee Hyeok Kim <jihyeok13.kim@samsung.com>
Thu, 22 Sep 2016 00:16:08 +0000 (00:16 +0000)
Change-Id: I51383ad7d18611b8cc986af875e5e30574fc1749
Signed-off-by: Jung Seungho <shonest.jung@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/12027
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Jaehong Jo <jaehong.jo@samsung.com>
Reviewed-by: Jee Hyeok Kim <jihyeok13.kim@samsung.com>
cloud/stack/src/main/java/org/iotivity/cloud/base/connector/CoapClient.java
cloud/stack/src/main/java/org/iotivity/cloud/base/device/CoapDevice.java

index 369e268..d98b531 100644 (file)
@@ -131,16 +131,17 @@ public class CoapClient implements IRequestChannel, IResponseEventHandler {
         }
 
         // Subscription response should stored
-        if (reqInfo.observe != Observe.SUBSCRIBE) {
+        if (reqInfo.observe != Observe.SUBSCRIBE
+                || coapResponse.getSequenceNumber() == -1) {
             mTokenExchanger.remove(Bytes.bytesToLong(coapResponse.getToken()));
-            if (reqInfo.observe == Observe.UNSUBSCRIBE && mSubscription
+            if (mSubscription
                     .containsKey(Bytes.bytesToLong(reqInfo.originToken))) {
                 mSubscription.remove(Bytes.bytesToLong(reqInfo.originToken));
             }
         }
 
         coapResponse.setToken(reqInfo.originToken);
-        reqInfo.responseHandler.onResponseReceived(response);
+        reqInfo.responseHandler.onResponseReceived(coapResponse);
     }
 
     private void addObserve(long token, long newtoken) {
index 196ecca..7ab584e 100644 (file)
@@ -142,14 +142,14 @@ public class CoapDevice extends Device {
     @Override
     public void sendResponse(IResponse response) {
         // This message must converted to CoapResponse
-        CoapResponse coapResp = (CoapResponse) response;
+        CoapResponse coapResponse = (CoapResponse) response;
 
         Iterator<Long> iterator = mObserveRequestList.keySet().iterator();
         while (iterator.hasNext()) {
             Long token = iterator.next();
-            Long respToken = Bytes.bytesToLong(coapResp.getToken());
+            Long respToken = Bytes.bytesToLong(coapResponse.getToken());
             if (respToken.equals(token)
-                    && coapResp.getObserve().equals(Observe.UNSUBSCRIBE)) {
+                    && coapResponse.getSequenceNumber() == -1) {
                 iterator.remove();
             }
         }