GVariantBuilder *options;
struct icd_observe_context *observe_ctx;
icd_sig_ctx_s *sig_context = ctx;
+ OCStackApplicationResult cb_result;
RETV_IF(NULL == ctx, OC_STACK_KEEP_TRANSACTION);
+ RETV_IF(NULL == resp, OC_STACK_KEEP_TRANSACTION);
+
+ cb_result = (OC_OBSERVE_DEREGISTER == resp->sequenceNumber)?
+ OC_STACK_DELETE_TRANSACTION:OC_STACK_KEEP_TRANSACTION;
if (NULL == resp->payload) {
ERR("payload is empty");
_observe_cb_response_error(sig_context->bus_name, sig_context->signal_number,
IOTCON_ERROR_IOTIVITY);
- return OC_STACK_KEEP_TRANSACTION;
+ return cb_result;
}
observe_ctx = calloc(1, sizeof(struct icd_observe_context));
ERR("calloc() Fail(%d)", errno);
_observe_cb_response_error(sig_context->bus_name, sig_context->signal_number,
IOTCON_ERROR_OUT_OF_MEMORY);
- return OC_STACK_KEEP_TRANSACTION;
+ return cb_result;
}
res = _ocprocess_parse_oic_result(resp->result);
g_variant_unref(observe_ctx->payload);
g_variant_builder_unref(observe_ctx->options);
free(observe_ctx);
- return OC_STACK_KEEP_TRANSACTION;
+ return cb_result;
}
/* DO NOT FREE sig_context. It MUST be freed in the ocstack */
/* DO NOT FREE observe_ctx. It MUST be freed in the _worker_observe_cb func */
- return OC_STACK_KEEP_TRANSACTION;
+ return cb_result;
}
cb_container->cb(&info, IOTCON_ERROR_TIMEOUT, cb_container->user_data);
icl_dbus_unsubscribe_signal(cb_container->id);
+ cb_container->id = 0;
return G_SOURCE_REMOVE;
}
cb_container->cb(&info, IOTCON_ERROR_TIMEOUT, cb_container->user_data);
icl_dbus_unsubscribe_signal(cb_container->id);
+ cb_container->id = 0;
return G_SOURCE_REMOVE;
}
ERR("iotcon-daemon Fail(%d)", ret);
return icl_dbus_convert_daemon_error(ret);
}
+ resource->observe_handle = 0;
icl_dbus_unsubscribe_signal(resource->observe_sub_id);
+ resource->observe_sub_id = 0;
+
return IOTCON_ERROR_NONE;
}