}
// 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) {
@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();
}
}