Change Dbus method as sync.
authorsaerome kim <saerome.kim@samsung.com>
Tue, 7 Feb 2017 07:30:23 +0000 (16:30 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Thu, 11 May 2017 09:07:20 +0000 (18:07 +0900)
Change-Id: Idcac0e482bbccc6e1413b0725aedb46226e8043e
Signed-off-by: saerome kim <saerome.kim@samsung.com>
lib/zbl-dbus.c
lib/zbl-dbus.h

index 232537a55166555faed45168aee751d9cb79f848..b3c3adbc610abcba32ca2db9deb8d14dcb771740 100644 (file)
@@ -2917,16 +2917,17 @@ int zbl_enable(zigbee_h handle, zb_event_cb event_handler)
 
        variant = g_dbus_proxy_call_sync(service_gproxy, "enable", NULL,
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(ib)", &result, &enabled);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get enable [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'enable' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(ib)", &result, &enabled);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -2953,15 +2954,16 @@ int zbl_disable(void)
                if (service_gproxy) {
                        variant = g_dbus_proxy_call_sync(service_gproxy, "disable", NULL,
                                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-                       if (variant) {
-                               g_variant_get(variant, "(i)", &result);
-                               DBG("ret = [0x%x]", result);
-                               g_variant_unref(variant);
-                       } else {
-                               ERR("Failed to get disable [%s]", dbus_err->message);
+
+                       if (!variant) {
+                               ERR("Failed to get 'disable' [%s]", dbus_err->message);
                                g_error_free(dbus_err);
                        }
 
+                       g_variant_get(variant, "(i)", &result);
+                       DBG("ret = [0x%x]", result);
+                       g_variant_unref(variant);
+
                        g_object_unref(service_gproxy);
                        service_gproxy = NULL;
                        g_object_unref(on_off_gproxy);
@@ -3005,17 +3007,18 @@ int zbl_hw_reset(void)
 
        variant = g_dbus_proxy_call_sync(service_gproxy, "zb_hw_reset", NULL,
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get zb_hw_reset [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'zb_hw_reset' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       return ZIGBEE_ERROR_NONE;
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_get_network_info(ieee_addr addr64, nwk_addr *nodeid, nwk_addr *panid,
@@ -3040,44 +3043,43 @@ int zbl_get_network_info(ieee_addr addr64, nwk_addr *nodeid, nwk_addr *panid,
        variant = g_dbus_proxy_call_sync(service_gproxy, "get_network_info",
                                NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
 
-       if (variant) {
-               g_variant_get(variant, "(ia(y)qqyy)", &result, &iter,
-                               &_nodeid, &_panid, &_radio_channel, &_radio_tx_power);
-
-               /* Get EUI */
-               i = 0;
-               while (g_variant_iter_loop(iter, "(y)", &value)) {
-                       addr64[i] = value;
-                       i++;
-               }
-
-               DBG("  Result: [%X]", result);
-               DBG("  EUI(%d) : %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", i,
-                               addr64[0], addr64[1], addr64[2], addr64[3],
-                               addr64[4], addr64[5], addr64[6], addr64[7]);
-               DBG("  nodeID [0x%04X]", _nodeid);
-               DBG("  PanID [0x%04X]", _panid);
-               DBG("  Channel [%d] Tx Power [%d]", _radio_channel, _radio_tx_power);
-
-               if (nodeid)
-                       *nodeid = _nodeid;
-               if (panid)
-                       *panid = _panid;
-               if (channel)
-                       *channel = _radio_channel;
-               if (tx_power)
-                       *tx_power = _radio_tx_power;
-
-               if (iter)
-                       g_variant_iter_free(iter);
-               g_variant_unref(variant);
-
-       } else {
-               ERR("Failed to get_network_info [%s]", dbus_err->message);
+       if (!variant) {
+               ERR("Failed to 'get_network_info' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(ia(y)qqyy)", &result, &iter,
+                               &_nodeid, &_panid, &_radio_channel, &_radio_tx_power);
+
+       /* Get EUI */
+       i = 0;
+       while (g_variant_iter_loop(iter, "(y)", &value)) {
+               addr64[i] = value;
+               i++;
+       }
+
+       DBG("  Result: [%X]", result);
+       DBG("  EUI(%d) : %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", i,
+                       addr64[0], addr64[1], addr64[2], addr64[3],
+                       addr64[4], addr64[5], addr64[6], addr64[7]);
+       DBG("  nodeID [0x%04X]", _nodeid);
+       DBG("  PanID [0x%04X]", _panid);
+       DBG("  Channel [%d] Tx Power [%d]", _radio_channel, _radio_tx_power);
+
+       if (nodeid)
+               *nodeid = _nodeid;
+       if (panid)
+               *panid = _panid;
+       if (channel)
+               *channel = _radio_channel;
+       if (tx_power)
+               *tx_power = _radio_tx_power;
+
+       if (iter)
+               g_variant_iter_free(iter);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -3098,29 +3100,27 @@ int zbl_get_controller_mac_address(ieee_addr addr64)
        variant = g_dbus_proxy_call_sync(service_gproxy, "get_mac",
                        NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
 
-       if (variant) {
-               g_variant_get(variant, "(ia(y))", &result, &iter);
+       if (!variant) {
+               ERR("Failed to get_mac [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+       g_variant_get(variant, "(ia(y))", &result, &iter);
 
-               while (g_variant_iter_loop(iter, "(y)", &value)) {
-                       addr64[j] = value;
-                       j++;
-               }
+       while (g_variant_iter_loop(iter, "(y)", &value)) {
+               addr64[j] = value;
+               j++;
+       }
 
-               DBG("IEEE ADDR 0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X, Ret=%d ",
-                       addr64[0], addr64[1], addr64[2], addr64[3], addr64[4], addr64[5],
-                       addr64[6], addr64[7], result);
+       DBG("IEEE ADDR 0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X, Ret=%d ",
+               addr64[0], addr64[1], addr64[2], addr64[3], addr64[4], addr64[5],
+               addr64[6], addr64[7], result);
 
-               if (iter)
-                       g_variant_iter_free(iter);
-               g_variant_unref(variant);
+       if (iter)
+               g_variant_iter_free(iter);
+       g_variant_unref(variant);
 
-               return result;
-       }
-       else {
-               ERR("Failed to get_mac [%s]", dbus_err->message);
-               g_error_free(dbus_err);
-       }
-       return ZIGBEE_ERROR_IO_ERROR;
+       return result;
 }
 
 int zbl_get_cluster_list(ieee_addr eui64, unsigned char endpoint, unsigned short list[],
@@ -3242,9 +3242,9 @@ int zbl_api_get_node_type(ieee_addr eui64, unsigned char *node_type)
 {
        GVariant *variant = NULL;
        GVariantBuilder *mac_builder = NULL;
+       int result = ZIGBEE_ERROR_NONE;
        GVariant *mac_variant = NULL;
        GError *dbus_err = NULL;
-       unsigned char n_type = 0;
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR);
@@ -3265,19 +3265,17 @@ int zbl_api_get_node_type(ieee_addr eui64, unsigned char *node_type)
                g_variant_new("(@a(y))", mac_variant),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
 
-       if (variant) {
-               g_variant_get(variant, "(y)", &n_type);
-               *node_type = n_type;
-               DBG("Node Type 0x%x", n_type);
-               g_variant_unref(variant);
-       } else {
-               ERR("NULL Variant [%s]", dbus_err->message);
+       if (!variant) {
+               ERR("Failed to get 'get_node_type' [%s]", dbus_err->message);
                g_error_free(dbus_err);
-               *node_type = 0;
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       return ZIGBEE_ERROR_NONE;
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_get_all_device_info(zb_end_device_info_h **dev_list, unsigned char* num)
@@ -3386,17 +3384,19 @@ int zbl_coex_start(unsigned char channel)
 
        variant = g_dbus_proxy_call_sync(service_gproxy, "coex_start", g_variant_new("(y)", channel),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get coex_start [%s]", dbus_err->message);
+
+       if (!variant) {
+
+               ERR("Failed to get 'coex_start' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       return ZIGBEE_ERROR_NONE;
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_coex_stop(void)
@@ -3412,17 +3412,18 @@ int zbl_coex_stop(void)
 
        variant = g_dbus_proxy_call_sync(service_gproxy, "coex_stop", NULL,
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get coex_stop [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'coex_stop' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       return ZIGBEE_ERROR_NONE;
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_form_network(zigbee_h handle, zb_form_network_cb cb, void *user_data)
@@ -3430,6 +3431,10 @@ int zbl_form_network(zigbee_h handle, zb_form_network_cb cb, void *user_data)
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -3453,10 +3458,26 @@ int zbl_form_network(zigbee_h handle, zb_form_network_cb cb, void *user_data)
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(service_gproxy, "form_network", NULL, G_DBUS_CALL_FLAGS_NONE, to,
-               NULL, NULL, container);
+       variant = g_dbus_proxy_call_sync(service_gproxy, "form_network", NULL,
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'form_network' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_disable_network(zigbee_h handle, zb_disable_network_cb cb, void *user_data)
@@ -3464,6 +3485,10 @@ int zbl_disable_network(zigbee_h handle, zb_disable_network_cb cb, void *user_da
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -3489,10 +3514,26 @@ int zbl_disable_network(zigbee_h handle, zb_disable_network_cb cb, void *user_da
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(service_gproxy, "leave_network", NULL, G_DBUS_CALL_FLAGS_NONE, to,
-               NULL, NULL, container);
+       variant = g_dbus_proxy_call_sync(service_gproxy, "leave_network", NULL,
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'leave_network' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_leave_device(ieee_addr addr64, bool remove_children, bool rejoin)
@@ -3528,16 +3569,18 @@ int zbl_leave_device(ieee_addr addr64, bool remove_children, bool rejoin)
        variant = g_dbus_proxy_call_sync(service_gproxy, "leave_request",
                g_variant_new("(@a(y)yy)", mac_variant, _remove_children, _rejoin),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get leave_request [%s]", dbus_err->message);
+
+       if (!variant) {
+
+               ERR("Failed to get 'leave_request' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -3552,16 +3595,17 @@ int zbl_permit_join(unsigned char duration, bool broadcast)
 
        variant = g_dbus_proxy_call_sync(service_gproxy, "permit_join",
                g_variant_new("(ib)", duration, broadcast),     G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get permit_join [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'permit_join' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -3573,6 +3617,10 @@ int zbl_nwk_addr_req(zigbee_h handle, ieee_addr addr64, unsigned char request_ty
        GVariantBuilder *mac_builder = NULL;
        GVariant* mac_variant = NULL;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zdo_dev_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -3611,11 +3659,27 @@ int zbl_nwk_addr_req(zigbee_h handle, ieee_addr addr64, unsigned char request_ty
        mac_variant = g_variant_builder_end(mac_builder);
        g_variant_builder_unref(mac_builder);
 
-       g_dbus_proxy_call(zdo_dev_proxy, "nwk_addr_req",
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "nwk_addr_req",
                g_variant_new("(@a(y)yy)", mac_variant, request_type, start_idx),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'nwk_addr_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_ieee_addr_req(zigbee_h handle, nwk_addr addr16, zb_zdo_addr_rsp cb,
@@ -3624,6 +3688,10 @@ int zbl_ieee_addr_req(zigbee_h handle, nwk_addr addr16, zb_zdo_addr_rsp cb,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zdo_dev_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -3650,10 +3718,26 @@ int zbl_ieee_addr_req(zigbee_h handle, nwk_addr addr16, zb_zdo_addr_rsp cb,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-        g_dbus_proxy_call(zdo_dev_proxy, "ieee_addr_req", g_variant_new("(q)", addr16),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "ieee_addr_req", g_variant_new("(q)", addr16),
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
+
+       if (!variant) {
 
-       return ZIGBEE_ERROR_NONE;
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'ieee_addr_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_active_ep(zigbee_h handle, nwk_addr addr16, zb_zdo_active_ep_rsp cb,
@@ -3662,6 +3746,10 @@ int zbl_active_ep(zigbee_h handle, nwk_addr addr16, zb_zdo_active_ep_rsp cb,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zdo_dev_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -3688,10 +3776,26 @@ int zbl_active_ep(zigbee_h handle, nwk_addr addr16, zb_zdo_active_ep_rsp cb,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zdo_dev_proxy, "active_ep_req",
-               g_variant_new("(q)", addr16), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "active_ep_req",
+               g_variant_new("(q)", addr16), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'active_ep_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_simple_desc_req(zigbee_h handle, nwk_addr addr16, unsigned char ep,
@@ -3700,6 +3804,10 @@ int zbl_simple_desc_req(zigbee_h handle, nwk_addr addr16, unsigned char ep,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zdo_dev_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -3726,10 +3834,26 @@ int zbl_simple_desc_req(zigbee_h handle, nwk_addr addr16, unsigned char ep,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zdo_dev_proxy, "simple_desc_req",
-               g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "simple_desc_req",
+               g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'simple_desc_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 #ifdef ZB_SUPPORT_PRIORITY_5
@@ -3748,6 +3872,10 @@ int zbl_match_desc_req(zigbee_h handle, nwk_addr addr16,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        int i;
        GVariantBuilder *incl_builder = NULL;
        GVariant* incl_variant = NULL;
@@ -3793,12 +3921,28 @@ int zbl_match_desc_req(zigbee_h handle, nwk_addr addr16,
        g_variant_builder_unref(incl_builder);
        g_variant_builder_unref(outcl_builder);
 
-       g_dbus_proxy_call(zdo_dev_proxy, "matched_descriptor_req",
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "matched_descriptor_req",
                g_variant_new("(qqy@aqy@aq)", addr16, profile_id, num_in_clusters,
                incl_variant, num_out_clusters, outcl_variant),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'matched_descriptor_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_node_desc_req(nwk_addr addr16, zb_zdo_node_desc_rsp cb, void *user_data)
@@ -3806,6 +3950,10 @@ int zbl_node_desc_req(nwk_addr addr16, zb_zdo_node_desc_rsp cb, void *user_data)
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zdo_dev_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -3832,10 +3980,26 @@ int zbl_node_desc_req(nwk_addr addr16, zb_zdo_node_desc_rsp cb, void *user_data)
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zdo_dev_proxy, "node_desc_req",
-               g_variant_new("(q)", addr16), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "node_desc_req",
+               g_variant_new("(q)", addr16), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'node_desc_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_power_desc_req(nwk_addr addr16, zb_zdo_power_desc_rsp cb,      void *user_data)
@@ -3843,6 +4007,10 @@ int zbl_power_desc_req(nwk_addr addr16, zb_zdo_power_desc_rsp cb,        void *user_dat
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zdo_dev_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -3867,10 +4035,26 @@ int zbl_power_desc_req(nwk_addr addr16, zb_zdo_power_desc_rsp cb,       void *user_dat
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zdo_dev_proxy, "power_desc_req",
-               g_variant_new("(q)", addr16), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "power_desc_req",
+               g_variant_new("(q)", addr16), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'power_desc_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_complex_desc_req(nwk_addr addr16, zb_zdo_complex_desc_rsp cb, void *user_data)
@@ -3878,6 +4062,10 @@ int zbl_complex_desc_req(nwk_addr addr16, zb_zdo_complex_desc_rsp cb, void *user
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zdo_dev_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -3902,17 +4090,37 @@ int zbl_complex_desc_req(nwk_addr addr16, zb_zdo_complex_desc_rsp cb, void *user
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zdo_dev_proxy, "complex_desc_req",
-               g_variant_new("(q)", addr16), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "complex_desc_req",
+               g_variant_new("(q)", addr16), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
-}
+       if (!variant) {
 
-int zbl_user_desc_req(nwk_addr addr16, zb_zdo_user_desc_rsp cb, void *user_data)
-{
-       int sub_id, to;
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'complex_desc_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
+}
+
+int zbl_user_desc_req(nwk_addr addr16, zb_zdo_user_desc_rsp cb, void *user_data)
+{
+       int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zdo_dev_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -3937,10 +4145,26 @@ int zbl_user_desc_req(nwk_addr addr16, zb_zdo_user_desc_rsp cb, void *user_data)
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zdo_dev_proxy, "user_desc_req",
-               g_variant_new("(q)", addr16), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "user_desc_req",
+               g_variant_new("(q)", addr16), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'user_desc_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 #define MAX_USER_DESC_SIZE 0x10
@@ -3951,6 +4175,11 @@ int zbl_user_desc_set(zigbee_h handle, nwk_addr addr16, unsigned char len,
 {
        int sub_id, to;
        zbl_req_cb_s *container;
+
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        unsigned char j = 0x00;
        GVariantBuilder *user_desc_builder = NULL;
        GVariant *user_desc_variant = NULL;
@@ -3989,11 +4218,27 @@ int zbl_user_desc_set(zigbee_h handle, nwk_addr addr16, unsigned char len,
        user_desc_variant = g_variant_builder_end(user_desc_builder);
        g_variant_builder_unref(user_desc_builder);
 
-       g_dbus_proxy_call(zdo_dev_proxy, "user_desc_set_req",
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "user_desc_set_req",
                g_variant_new("(qy@a(y))", addr16, len, user_desc_variant),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'user_desc_set_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_device_annce(zigbee_h handle, nwk_addr addr16, ieee_addr addr64,
@@ -4024,16 +4269,18 @@ int zbl_device_annce(zigbee_h handle, nwk_addr addr16, ieee_addr addr64,
        variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "device_announce",
                g_variant_new("(q@a(y)y)", addr16, mac_variant, capability),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get device_annce [%s]", dbus_err->message);
+
+       if (!variant) {
+
+               ERR("Failed to get 'device_announce' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -4101,16 +4348,22 @@ int zbl_bind_req(nwk_addr dst_addr16, ieee_addr src_addr64,
                                                cluster_id, dst_addr64_variant, type, group_addr, dst_ep),
                G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get device_annce [%s]", dbus_err->message);
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'bind_req' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -4176,16 +4429,23 @@ int zbl_unbind_req(nwk_addr dst_addr16,
                g_variant_new("(q@a(y)yq@a(y)yqy)", dst_addr16, src_addr64_variant, src_ep,
                                                cluster_id, dst_addr64_variant, type, group_addr, dst_ep),
                G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get device_annce [%s]", dbus_err->message);
+
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'unbind_req' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -4193,10 +4453,13 @@ int zbl_mgmt_nwk_disc_req(nwk_addr addr16, unsigned int scan_channels,
        unsigned char scan_duration, unsigned char scan_count, unsigned char start_idx,
        zb_zdo_mgmt_nwk_disc_rsp cb, void *user_data)
 {
-
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zdo_dev_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -4223,11 +4486,27 @@ int zbl_mgmt_nwk_disc_req(nwk_addr addr16, unsigned int scan_channels,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zdo_dev_proxy, "nwk_disc_req",
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "nwk_disc_req",
                g_variant_new("(quyqy)", addr16, scan_channels, scan_duration, scan_count, start_idx),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'nwk_disc_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_mgmt_nwk_update_req(unsigned int scan_channels, unsigned char scan_duration,
@@ -4245,16 +4524,17 @@ int zbl_mgmt_nwk_update_req(unsigned int scan_channels, unsigned char scan_durat
        variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "nwk_update_req",
                g_variant_new("(quyyy)", nwk_manager_addr, scan_channels, scan_duration,
                scan_count, nwk_update_id), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get nwk_update_req [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'nwk_update_req' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -4264,6 +4544,10 @@ int zbl_mgmt_lqi_req(nwk_addr addr16, unsigned char start_idx,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zdo_dev_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -4290,11 +4574,27 @@ int zbl_mgmt_lqi_req(nwk_addr addr16, unsigned char start_idx,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zdo_dev_proxy, "mgmt_lqi_req",
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "mgmt_lqi_req",
                g_variant_new("(qy)", addr16, start_idx),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'mgmt_lqi_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_mgmt_rtg_req(nwk_addr addr16, unsigned char start_idx,
@@ -4303,6 +4603,10 @@ int zbl_mgmt_rtg_req(nwk_addr addr16, unsigned char start_idx,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zdo_dev_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -4329,11 +4633,27 @@ int zbl_mgmt_rtg_req(nwk_addr addr16, unsigned char start_idx,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zdo_dev_proxy, "mgmt_rtg_req",
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "mgmt_rtg_req",
                g_variant_new("(qy)", addr16, start_idx),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'mgmt_rtg_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_mgmt_bind_req(nwk_addr addr16, unsigned char start_idx,
@@ -4342,6 +4662,10 @@ int zbl_mgmt_bind_req(nwk_addr addr16, unsigned char start_idx,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zdo_dev_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -4368,11 +4692,27 @@ int zbl_mgmt_bind_req(nwk_addr addr16, unsigned char start_idx,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zdo_dev_proxy, "mgmt_bind_req",
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "mgmt_bind_req",
                g_variant_new("(qy)", addr16, start_idx),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'mgmt_bind_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_mgmt_leave_device(ieee_addr addr64, unsigned char remove_children,
@@ -4381,6 +4721,10 @@ int zbl_mgmt_leave_device(ieee_addr addr64, unsigned char remove_children,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        GVariantBuilder *mac_builder = NULL;
        GVariant* mac_variant = NULL;
 
@@ -4420,11 +4764,27 @@ int zbl_mgmt_leave_device(ieee_addr addr64, unsigned char remove_children,
        mac_variant = g_variant_builder_end(mac_builder);
        g_variant_builder_unref(mac_builder);
 
-       g_dbus_proxy_call(service_gproxy, "leave_request",
+       variant = g_dbus_proxy_call_sync(service_gproxy, "leave_request",
                g_variant_new("(@a(y)yy)", mac_variant, remove_children, rejoin),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'leave_request' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_mgmt_permit_joining_req(nwk_addr addr16, unsigned char duration,
@@ -4433,6 +4793,10 @@ int zbl_mgmt_permit_joining_req(nwk_addr addr16, unsigned char duration,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == service_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -4457,11 +4821,27 @@ int zbl_mgmt_permit_joining_req(nwk_addr addr16, unsigned char duration,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zdo_dev_proxy, "mgmt_permit_join_req",
+       variant = g_dbus_proxy_call_sync(zdo_dev_proxy, "mgmt_permit_join_req",
                g_variant_new("(qyy)", addr16, duration, tc_significance),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'mgmt_permit_join_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_aps_send(nwk_addr addr16, unsigned char aps_frame_ctl, unsigned char src_ep,
@@ -4516,16 +4896,22 @@ int zbl_aps_send(nwk_addr addr16, unsigned char aps_frame_ctl, unsigned char src
                profile_id, zcl_frame_ctl, mfg_code, cmd_id, payload_len, payload_variant),
                G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to run 'aps_send' [%s]", dbus_err->message);
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'aps_send' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -4580,16 +4966,22 @@ int zbl_zcl_send(nwk_addr addr16, unsigned char src_ep, unsigned char dst_ep,
                g_variant_new("(qyyqyyq@a(y))", addr16, src_ep, dst_ep, cluster_id, zcl_frame_ctl,
                cmd, payload_len, payload_variant), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to run 'zcl_send' [%s]", dbus_err->message);
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'zcl_send' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -4642,16 +5034,22 @@ int zbl_send_to_local(unsigned short length, unsigned char *data,
                g_variant_new("(q@a(y))", length, payload_variant),
                G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to run 'send_to_local' [%s]", dbus_err->message);
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'send_to_local' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -4661,6 +5059,11 @@ int zbl_read_attr_req(zigbee_h handle, unsigned short addr16, unsigned char dest
 {
        int sub_id, to;
        zbl_req_cb_s *container;
+
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        zb_event_global_default_rsp_s *global_req = NULL;
 #endif
@@ -4723,12 +5126,31 @@ int zbl_read_attr_req(zigbee_h handle, unsigned short addr16, unsigned char dest
        attr_variant = g_variant_builder_end(attr_builder);
        g_variant_builder_unref(attr_builder);
 
-       g_dbus_proxy_call(zcl_global_proxy, "read_attributes_req",
+       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "read_attributes_req",
                g_variant_new("(@ayiqqyy)", attr_variant, attribute_ids_len, addr16, cluster_id,
                                                zcl_frame_ctl, dest_ep),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+#ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
+               free(global_req);
+#endif
+               free(container);
+
+               ERR("Failed to get 'read_attributes_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_write_attr_req(zigbee_h handle, nwk_addr addr16, unsigned char src_ep, unsigned char dst_ep,
@@ -4737,11 +5159,16 @@ int zbl_write_attr_req(zigbee_h handle, nwk_addr addr16, unsigned char src_ep, u
 {
        int sub_id, to;
        zbl_req_cb_s *container;
-#ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
-       zb_event_global_default_rsp_s *global_req = NULL;
-#endif
 
-       RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
+#ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
+       zb_event_global_default_rsp_s *global_req = NULL;
+#endif
+
+       RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_global_proxy, ZIGBEE_ERROR_IO_ERROR);
 
        DBG("zbl_write_attr_req()");
@@ -4883,16 +5310,35 @@ int zbl_write_attr_req(zigbee_h handle, nwk_addr addr16, unsigned char src_ep, u
        _zbl_register_global_req(handle, container);
 #endif
 
-       g_dbus_proxy_call(zcl_global_proxy, "write_attributes_req",
+       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "write_attributes_req",
                g_variant_new("(@ayiqqyyy)", rec_variant, writeAttributeIndex, addr16,
                cluster_id, zcl_frame_ctl, src_ep, dst_ep), G_DBUS_CALL_FLAGS_NONE,
-               to, NULL, NULL, container);
+               to, NULL, &dbus_err);
 
        free(isString);
        free(dataSize);
        free(writeAttribute);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+#ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
+               free(global_req);
+#endif
+               free(container);
+
+               ERR("Failed to get 'write_attributes_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_wattr_undivided_req(zigbee_h handle, nwk_addr addr16, unsigned char src_ep,
@@ -4902,6 +5348,11 @@ int zbl_wattr_undivided_req(zigbee_h handle, nwk_addr addr16, unsigned char src_
 {
        int sub_id, to;
        zbl_req_cb_s *container;
+
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        zb_event_global_default_rsp_s *global_req = NULL;
 #endif
@@ -5048,16 +5499,35 @@ int zbl_wattr_undivided_req(zigbee_h handle, nwk_addr addr16, unsigned char src_
        _zbl_register_global_req(handle, container);
 #endif
 
-       g_dbus_proxy_call(zcl_global_proxy, "write_attributes_undivided_req",
+       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "write_attributes_undivided_req",
                g_variant_new("(@ayiqqyyy)", rec_variant, writeAttributeIndex, addr16,
                cluster_id, zcl_frame_ctl, src_ep, dst_ep), G_DBUS_CALL_FLAGS_NONE,
-               to, NULL, NULL, container);
+               to, NULL, &dbus_err);
 
        free(isString);
        free(dataSize);
        free(writeAttribute);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+#ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
+               free(global_req);
+#endif
+               free(container);
+
+               ERR("Failed to get 'write_attributes_undivided_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_wattr_req_no_rsp(zigbee_h handle, nwk_addr addr16, unsigned char src_ep,
@@ -5161,24 +5631,21 @@ int zbl_wattr_req_no_rsp(zigbee_h handle, nwk_addr addr16, unsigned char src_ep,
                g_variant_new("(@ayiqqyyy)", rec_variant, writeAttributeIndex, addr16,
                cluster_id, zcl_frame_ctl, src_ep, dst_ep), G_DBUS_CALL_FLAGS_NONE,
                -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get write_attributes_no_rep [%s]", dbus_err->message);
-               g_error_free(dbus_err);
 
-               free(isString);
-               free(dataSize);
-               free(writeAttribute);
+       free(isString);
+       free(dataSize);
+       free(writeAttribute);
+
+       if (!variant) {
 
+               ERR("Failed to get 'write_attributes_no_rep' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       free(isString);
-       free(dataSize);
-       free(writeAttribute);
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
 
        return result;
 }
@@ -5190,6 +5657,11 @@ int zbl_configure_reporting(zigbee_h handle, nwk_addr addr16, unsigned char src_
 {
        int sub_id, to;
        zbl_req_cb_s *container;
+
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        zb_event_global_default_rsp_s *global_req = NULL;
 #endif
@@ -5283,11 +5755,29 @@ int zbl_configure_reporting(zigbee_h handle, nwk_addr addr16, unsigned char src_
        rec_variant = g_variant_builder_end(rec_builder);
        g_variant_builder_unref(rec_builder);
 
-       g_dbus_proxy_call(zcl_global_proxy, "configure_reporting_req",
+       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "configure_reporting_req",
                g_variant_new("(@ayqqqyyy)", rec_variant, count, addr16, cluster_id,
-               zcl_frame_ctl, src_ep, dst_ep), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               zcl_frame_ctl, src_ep, dst_ep), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+#ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
+               free(global_req);
+#endif
+
+               ERR("Failed to get 'configure_reporting_req' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_read_configure_reporting(zigbee_h handle, nwk_addr addr16, unsigned char src_ep,
@@ -5297,6 +5787,11 @@ int zbl_read_configure_reporting(zigbee_h handle, nwk_addr addr16, unsigned char
 {
        int sub_id, to;
        zbl_req_cb_s *container;
+
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        zb_event_global_default_rsp_s *global_req = NULL;
 #endif
@@ -5396,13 +5891,32 @@ int zbl_read_configure_reporting(zigbee_h handle, nwk_addr addr16, unsigned char
        rec_variant = g_variant_builder_end(rec_builder);
        g_variant_builder_unref(rec_builder);
 
-       g_dbus_proxy_call(zcl_global_proxy, "read_configure_reporting",
+       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "read_configure_reporting",
                g_variant_new("(@ayqqqyyy)", rec_variant, idx, addr16, cluster_id, zcl_frame_ctl,
-               src_ep, dst_ep), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               src_ep, dst_ep), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
        free(read_attributes);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+#ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
+               free(global_req);
+#endif
+               free(container);
+
+               ERR("Failed to get 'read_configure_reporting' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_discover_attr_req(zigbee_h handle, unsigned short addr16, unsigned char src_ep,
@@ -5413,6 +5927,10 @@ int zbl_discover_attr_req(zigbee_h handle, unsigned short addr16, unsigned char
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        zb_event_global_default_rsp_s *global_req = NULL;
 #endif
@@ -5463,11 +5981,30 @@ int zbl_discover_attr_req(zigbee_h handle, unsigned short addr16, unsigned char
        _zbl_register_global_req(handle, container);
 #endif
 
-       g_dbus_proxy_call(zcl_global_proxy, "discover_attributes", g_variant_new("(qyyqqy)",
+       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "discover_attributes", g_variant_new("(qyyqqy)",
                addr16, dest_ep, zcl_frame_ctl, cluster_id, start_id, max_attribute_ids),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+#ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
+               free(global_req);
+#endif
+               free(container);
+
+               ERR("Failed to get 'discover_attributes' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_discover_cmds_gen(zigbee_h handle, nwk_addr addr16, unsigned char src_ep, unsigned char dst_ep,
@@ -5476,6 +6013,11 @@ int zbl_discover_cmds_gen(zigbee_h handle, nwk_addr addr16, unsigned char src_ep
 {
        int sub_id, to;
        zbl_req_cb_s *container;
+
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        zb_event_global_default_rsp_s *global_req = NULL;
 #endif
@@ -5526,24 +6068,43 @@ int zbl_discover_cmds_gen(zigbee_h handle, nwk_addr addr16, unsigned char src_ep
        _zbl_register_global_req(handle, container);
 #endif
 
-       g_dbus_proxy_call(zcl_global_proxy, "discover_commands_received",
+       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "discover_commands_received",
                g_variant_new("(qyyqqy)", addr16, dst_ep, zcl_frame_ctl, cluster_id,
-               start_command_id, max_command_ids), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               start_command_id, max_command_ids), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+#ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
+               free(global_req);
+#endif
+               free(container);
+
+               ERR("Failed to get 'discover_commands_received' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_discover_cmds_recv(zigbee_h handle, nwk_addr addr16, unsigned char src_ep, unsigned char dst_ep,
                unsigned char zcl_frame_ctl, unsigned short cluster_id, unsigned char start_command_id,
                unsigned char max_command_ids, zb_zcl_global_discover_cmds_rsp cb, void *user_data)
 {
+       int sub_id, to;
+       zbl_req_cb_s *container;
+
        int result = ZIGBEE_ERROR_NONE;
        GVariant *variant = NULL;
        GError *dbus_err = NULL;
 
-       int sub_id, to;
-       zbl_req_cb_s *container;
-
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        zb_event_global_default_rsp_s *global_req = NULL;
 #endif
@@ -5597,16 +6158,26 @@ int zbl_discover_cmds_recv(zigbee_h handle, nwk_addr addr16, unsigned char src_e
        variant = g_dbus_proxy_call_sync(zcl_global_proxy, "discover_commands_received",
                g_variant_new("(qyyqqy)", addr16, dst_ep, zcl_frame_ctl, cluster_id,
                start_command_id, max_command_ids), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get discover_commands_received [%s]", dbus_err->message);
+
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+#ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
+               free(global_req);
+#endif
+               free(container);
+
+               ERR("Failed to get 'discover_commands_received' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -5618,6 +6189,10 @@ int zbl_discover_attr_ext(zigbee_h handle, nwk_addr addr16, unsigned char src_ep
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
        zb_event_global_default_rsp_s *global_req = NULL;
 #endif
@@ -5668,11 +6243,30 @@ int zbl_discover_attr_ext(zigbee_h handle, nwk_addr addr16, unsigned char src_ep
        _zbl_register_global_req(handle, container);
 #endif
 
-       g_dbus_proxy_call(zcl_global_proxy, "discover_attributes_extended",
+       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "discover_attributes_extended",
                g_variant_new("(qyyqqy)", addr16, dst_ep, zcl_frame_ctl, cluster_id, start_id,
-               max_attribute_ids), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               max_attribute_ids), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+#ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
+               free(global_req);
+#endif
+               free(container);
+
+               ERR("Failed to get 'discover_attributes_extended' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_reset_alarm(nwk_addr addr16, unsigned char ep, unsigned char alarm_code,
@@ -5688,16 +6282,17 @@ int zbl_reset_alarm(nwk_addr addr16, unsigned char ep, unsigned char alarm_code,
        variant = g_dbus_proxy_call_sync(alarm_gproxy, "reset_alarm",
                g_variant_new("(qyyq)", addr16, ep, alarm_code, cluster_id),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get reset_alarm [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'reset_alarm' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -5712,16 +6307,17 @@ int zbl_reset_all_alarm(nwk_addr addr16, unsigned char ep)
 
        variant = g_dbus_proxy_call_sync(alarm_gproxy, "reset_all_alarm",
                g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get reset_all_alarm [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'reset_all_alarm' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -5731,6 +6327,10 @@ int zbl_get_alarm(nwk_addr addr16, unsigned char ep, zb_zcl_alarm_get_alarm_rsp
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == alarm_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -5756,10 +6356,20 @@ int zbl_get_alarm(nwk_addr addr16, unsigned char ep, zb_zcl_alarm_get_alarm_rsp
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(alarm_gproxy, "get_alarm",
-               g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+       variant = g_dbus_proxy_call_sync(alarm_gproxy, "get_alarm",
+               g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+               ERR("Failed to get 'get_alarm' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_reset_all_alarm_log(nwk_addr addr16, unsigned char ep)
@@ -5771,18 +6381,19 @@ int zbl_reset_all_alarm_log(nwk_addr addr16, unsigned char ep)
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == alarm_gproxy, ZIGBEE_ERROR_IO_ERROR);
 
-       variant = g_dbus_proxy_call_sync(alarm_gproxy, "reset_all_alarm_log",
+       variant = g_dbus_proxy_call_sync(alarm_gproxy, "reset_alarm_log",
                g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get reset_all_alarm_log [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'reset_alarm_log' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -5800,16 +6411,17 @@ int zbl_ccontrol_move_to_hue(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_color_control_proxy, "move_to_hue",
                        g_variant_new("(qyyyq)", addr16, ep, hue, direction, transition_time),
                        G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get move_to_hue [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'move_to_hue' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -5827,16 +6439,17 @@ int zbl_ccontrol_move_hue(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_color_control_proxy, "move_hue",
                        g_variant_new("(qyyy)", addr16, ep, move_mode, rate),
                        G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get move_hue [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'move_hue' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -5854,16 +6467,17 @@ int zbl_ccontrol_step_hue(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_color_control_proxy, "step_hue",
                        g_variant_new("(qyyyy)", addr16, ep, step_mode, step_size, transition_time),
                        G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get step_hue [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'step_hue' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -5880,16 +6494,17 @@ int zbl_ccontrol_move_to_saturation(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_color_control_proxy, "move_to_saturation",
                        g_variant_new("(qyyq)", addr16, ep, saturation, transition_time),
                        G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get move_to_saturation [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'move_to_saturation' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -5906,16 +6521,17 @@ int zbl_ccontrol_move_saturation(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_color_control_proxy, "move_saturation",
                        g_variant_new("(qyyy)", addr16, ep, move_mode, rate),
                        G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get move_saturation [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'move_saturation' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -5933,16 +6549,17 @@ int zbl_ccontrol_step_saturation(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_color_control_proxy, "step_saturation",
                        g_variant_new("(qyyyy)", addr16, ep, step_mode, step_size, transition_time),
                        G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get step_saturation [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'step_saturation' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -5960,16 +6577,17 @@ int zbl_ccontrol_move_to_hue_and_saturation(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_color_control_proxy, "move_to_hue_and_saturation",
                        g_variant_new("(qyyyq)", addr16, ep, hue, saturation, transition_time),
                        G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get move_to_hue_and_saturation [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'move_to_hue_and_saturation' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -5987,16 +6605,17 @@ int zbl_ccontrol_move_to_color(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_color_control_proxy, "move_to_color",
                        g_variant_new("(qyqqq)", addr16, ep, color_x, color_y, transition_time),
                        G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get move_to_color [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'move_to_color' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6013,16 +6632,17 @@ int zbl_ccontrol_move_color(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_color_control_proxy, "move_color",
                        g_variant_new("(qyqq)", addr16, ep, rate_x, rate_y),
                        G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get move_color [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'move_color' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6040,16 +6660,17 @@ int zbl_ccontrol_step_color(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_color_control_proxy, "step_color",
                        g_variant_new("(qyqqq)", addr16, ep, step_x, step_y, transition_time),
                        G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get step_color [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'step_color' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6067,16 +6688,17 @@ int zbl_ccontrol_move_to_color_temperature(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_color_control_proxy, "move_color_temperature",
                        g_variant_new("(qyqq)", addr16, ep, color_temperature, transition_time),
                        G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get move_color_temperature [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'move_color_temperature' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6091,16 +6713,17 @@ int zbl_reset_factory_default(nwk_addr addr16, unsigned char ep)
 
        variant = g_dbus_proxy_call_sync(zcl_basic_proxy, "reset_factory_default",
                g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get reset_factory_default [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'reset_factory_default' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6116,16 +6739,17 @@ int zbl_identify(nwk_addr addr16, unsigned char dst_ep, unsigned short identify_
        variant = g_dbus_proxy_call_sync(zcl_identify_proxy, "identify",
                g_variant_new("(qyq)", addr16, dst_ep, identify_time),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get identify [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'identify' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6166,21 +6790,22 @@ int zbl_identify_query(nwk_addr addr16, unsigned char dst_ep,
 
        variant = g_dbus_proxy_call_sync(zcl_identify_proxy, "query",
                g_variant_new("(qy)", addr16, dst_ep), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get identify [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'query' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
 int zbl_add_group(nwk_addr addr16, unsigned char ep, unsigned short group_id,
-               const char *group_name, zb_zcl_group_add_group_rsp cb, void *user_data)
+               char *group_name, zb_zcl_group_add_group_rsp cb, void *user_data)
 {
        int result = ZIGBEE_ERROR_NONE;
        GVariant *variant = NULL;
@@ -6229,16 +6854,17 @@ int zbl_add_group(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        variant = g_dbus_proxy_call_sync(zcl_group_proxy, "add_group",
                g_variant_new("(qyq@a(y))", addr16, ep, group_id, groupname_variant),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get identify [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'add_group' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6280,18 +6906,23 @@ int zbl_view_group(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        variant = g_dbus_proxy_call_sync(zcl_group_proxy, "view_group",
                g_variant_new("(qyq)", addr16, ep, group_id),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get identify [%s]", dbus_err->message);
+
+       if (!variant) {
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'view_group' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
-       return result;
-}
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;}
 
 int zbl_group_get_group_membership(nwk_addr addr16, unsigned char ep,
                unsigned char group_count, unsigned short *group_list,
@@ -6336,7 +6967,7 @@ int zbl_group_get_group_membership(nwk_addr addr16, unsigned char ep,
 
        grouplist_builder = g_variant_builder_new(G_VARIANT_TYPE("aq"));
        while (j < group_count) {
-               g_variant_builder_add(grouplist_builder, "y", group_list[j]);
+               g_variant_builder_add(grouplist_builder, "q", group_list[j]);
                j++;
        }
        grouplist_variant = g_variant_builder_end(grouplist_builder);
@@ -6345,16 +6976,22 @@ int zbl_group_get_group_membership(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_group_proxy, "get_group_membership",
                g_variant_new("(qyy@aq)", addr16, ep, group_count,      grouplist_variant),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get identify [%s]", dbus_err->message);
+
+       if (!variant) {
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'get_group_membership' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6395,16 +7032,22 @@ int zbl_remove_group(nwk_addr addr16, unsigned char ep, unsigned short group_id,
 
        variant = g_dbus_proxy_call_sync(zcl_group_proxy, "remove_group", g_variant_new("(qyq)",
                addr16, ep, group_id), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get add_group_if_identifying [%s]", dbus_err->message);
+
+       if (!variant) {
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'remove_group' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6421,16 +7064,17 @@ int zbl_remove_all_group(nwk_addr addr16, unsigned char ep)
 
        variant = g_dbus_proxy_call_sync(zcl_group_proxy, "remove_all_group",
                g_variant_new("(qy)", addr16, ep),G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get remove_all_group [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'remove_all_group' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6459,16 +7103,17 @@ int zbl_add_group_if_identifying(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_group_proxy, "add_group_if_identifying",
                g_variant_new("(qyq@a(y))", addr16, ep, group_id, groupname_variant),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get add_group_if_identifying [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'add_group_if_identifying' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6487,16 +7132,17 @@ int zbl_level_control_move_to_level(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(level_control_gproxy, "move_to_level",
                g_variant_new("(qyyq)", addr16, ep, level, transition_time),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get move_to_level [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'move_to_level' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6515,16 +7161,17 @@ int zbl_level_control_move(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(level_control_gproxy, "move",
                g_variant_new("(qyyy)", addr16, ep, move_mode, rate),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get move [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'move' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6544,16 +7191,17 @@ int zbl_level_control_step(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(level_control_gproxy, "step",
                g_variant_new("(qyyyq)", addr16, ep, step_mode, step_size, transition_time),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get step [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'step' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6570,16 +7218,17 @@ int zbl_level_control_stop(nwk_addr addr16, unsigned char ep)
 
        variant = g_dbus_proxy_call_sync(level_control_gproxy, "stop",
                g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get stop [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'stop' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6598,16 +7247,17 @@ int zbl_level_control_move_to_level_with_on_off(nwk_addr addr16,
        variant = g_dbus_proxy_call_sync(level_control_gproxy, "move_to_level_with_on_off",
                g_variant_new("(qyyq)", addr16, ep, level, transition_time),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get move_to_level_with_on_off [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'move_to_level_with_on_off' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6626,16 +7276,17 @@ int zbl_level_control_move_with_on_off(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(level_control_gproxy, "move_with_on_off",
                g_variant_new("(qyyy)", addr16, ep, move_mode, rate),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get move_with_on_off [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'move_with_on_off' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6655,16 +7306,17 @@ int zbl_level_control_step_with_on_off(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(level_control_gproxy, "step_with_on_off",
                g_variant_new("(qyyyq)", addr16, ep, step_mode, step_size, transition_time),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get step_with_on_off [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'step_with_on_off' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6680,16 +7332,17 @@ int zbl_onoff_set(nwk_addr addr16, unsigned char ep, unsigned char on_off_type)
        variant = g_dbus_proxy_call_sync(on_off_gproxy, "set_on_off",
                g_variant_new("(qyy)", addr16, ep, on_off_type), G_DBUS_CALL_FLAGS_NONE,
                -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get set_on_off [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'set_on_off' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6706,16 +7359,17 @@ int zbl_zone_enroll_response(nwk_addr addr16, unsigned char dst_ep,
        variant = g_dbus_proxy_call_sync(zcl_ias_zone_proxy, "enroll_response",
                g_variant_new("(qyyy)", addr16, dst_ep, enroll_response_code, zone_id),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get enroll_response [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'enroll_response' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6732,16 +7386,17 @@ int zbl_pollcontrol_check_in_response(nwk_addr addr16, unsigned char ep,
        variant = g_dbus_proxy_call_sync(zcl_poll_control_proxy, "check_in_response",
                g_variant_new("(qyyq)", addr16, ep, start_fast_polling, fast_poll_timeout),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get check_in_response [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'check_in_response' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6756,16 +7411,17 @@ int zbl_pollcontrol_fast_poll_stop(nwk_addr addr16, unsigned char ep)
 
        variant = g_dbus_proxy_call_sync(zcl_poll_control_proxy, "fast_poll_stop",
                g_variant_new("(qy)", addr16, ep), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get fast_poll_stop [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'fast_poll_stop' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -6775,6 +7431,10 @@ int zbl_pollcontrol_set_long_poll_interval(nwk_addr addr16, unsigned char ep,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_poll_control_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -6801,11 +7461,26 @@ int zbl_pollcontrol_set_long_poll_interval(nwk_addr addr16, unsigned char ep,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zcl_poll_control_proxy, "set_long_poll_interval",
+       variant = g_dbus_proxy_call_sync(zcl_poll_control_proxy, "set_long_poll_interval",
                        g_variant_new("(qyu)", addr16, ep, new_long_poll_interval),
-                       G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+                       G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'set_long_poll_interval' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_pollcontrol_set_short_poll_interval(nwk_addr addr16, unsigned char ep,
@@ -6814,6 +7489,10 @@ int zbl_pollcontrol_set_short_poll_interval(nwk_addr addr16, unsigned char ep,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
        RETV_IF(NULL == zcl_poll_control_proxy, ZIGBEE_ERROR_IO_ERROR);
 
@@ -6840,11 +7519,26 @@ int zbl_pollcontrol_set_short_poll_interval(nwk_addr addr16, unsigned char ep,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zcl_poll_control_proxy, "set_short_poll_interval",
+       variant = g_dbus_proxy_call_sync(zcl_poll_control_proxy, "set_short_poll_interval",
                        g_variant_new("(qyu)", addr16, ep, new_short_poll_interval),
-                       G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+                       G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'set_short_poll_interval' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_add_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
@@ -6855,6 +7549,10 @@ int zbl_add_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        int j = 0;
        int index = 0;
        GVariant *scenename_variant = NULL;
@@ -6905,12 +7603,27 @@ int zbl_add_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        extensionfieldSet_variant = g_variant_builder_end(extensionfieldSet_builder);
        g_variant_builder_unref(extensionfieldSet_builder);
 
-       g_dbus_proxy_call(zcl_scene_proxy, "add_scene",
+       variant = g_dbus_proxy_call_sync(zcl_scene_proxy, "add_scene",
                g_variant_new("(qyqyqq@a(y)@a(y))", addr16, ep, group_id, scene_id, transition_time,
                ext_field_len, scenename_variant, extensionfieldSet_variant), G_DBUS_CALL_FLAGS_NONE,
-               to, NULL, NULL, container);
+               to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'add_scene' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_view_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
@@ -6919,6 +7632,10 @@ int zbl_view_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        DBG("zbl_scene_view_scene()");
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
@@ -6944,11 +7661,26 @@ int zbl_view_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zcl_scene_proxy, "view_scene",
+       variant = g_dbus_proxy_call_sync(zcl_scene_proxy, "view_scene",
                g_variant_new("(qyqy)", addr16, ep, group_id, scene_id), G_DBUS_CALL_FLAGS_NONE,
-               to, NULL, NULL, container);
+               to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'view_scene' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_remove_scene(nwk_addr addr16, unsigned char ep,
@@ -6958,6 +7690,10 @@ int zbl_remove_scene(nwk_addr addr16, unsigned char ep,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        DBG("zbl_scene_remove_scene()");
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
@@ -6983,11 +7719,26 @@ int zbl_remove_scene(nwk_addr addr16, unsigned char ep,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zcl_scene_proxy, "remove_scene",
+       variant = g_dbus_proxy_call_sync(zcl_scene_proxy, "remove_scene",
                g_variant_new("(qyqy)", addr16, ep, group_id, scene_id),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'remove_scene' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_remove_all_scene(nwk_addr addr16, unsigned char ep,
@@ -6996,6 +7747,10 @@ int zbl_remove_all_scene(nwk_addr addr16, unsigned char ep,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        DBG("zbl_scene_remove_all_scene()");
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
@@ -7022,22 +7777,38 @@ int zbl_remove_all_scene(nwk_addr addr16, unsigned char ep,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zcl_scene_proxy, "remove_all_scene",
+       variant = g_dbus_proxy_call_sync(zcl_scene_proxy, "remove_all_scene",
                g_variant_new("(qyq)", addr16, ep, group_id),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'remove_all_scene' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_store_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        unsigned char scene_id, zb_zcl_scene_store_scene_rsp cb, void *user_data)
 {
-       int result = ZIGBEE_ERROR_NONE;
-       GVariant *variant = NULL;
-
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        DBG("zbl_scene_store_scene()");
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
@@ -7063,11 +7834,26 @@ int zbl_store_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zcl_scene_proxy, "store_scene",
+       variant = g_dbus_proxy_call_sync(zcl_scene_proxy, "store_scene",
                g_variant_new("(qyqy)", addr16, ep, group_id, scene_id),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get 'store_scene' [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_recall_scene(nwk_addr addr16, unsigned char ep,        unsigned short group_id,
@@ -7083,16 +7869,17 @@ int zbl_recall_scene(nwk_addr addr16, unsigned char ep, unsigned short group_id,
        variant = g_dbus_proxy_call_sync(zcl_scene_proxy, "recall_scene",
                g_variant_new("(qyqy)", addr16, ep, group_id, scene_id), G_DBUS_CALL_FLAGS_NONE,
                -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get recall_scene [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'recall_scene' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
@@ -7102,6 +7889,10 @@ int zbl_get_scene_membership(nwk_addr addr16, unsigned char ep,
        int sub_id, to;
        zbl_req_cb_s *container;
 
+       int result = ZIGBEE_ERROR_NONE;
+       GVariant *variant = NULL;
+       GError *dbus_err = NULL;
+
        DBG("zbl_scene_get_scene_membership()");
 
        RETV_IF(NULL == gdbus_conn, ZIGBEE_ERROR_IO_ERROR);
@@ -7128,11 +7919,26 @@ int zbl_get_scene_membership(nwk_addr addr16, unsigned char ep,
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 
-       g_dbus_proxy_call(zcl_scene_proxy, "get_scene_membership",
+       variant = g_dbus_proxy_call_sync(zcl_scene_proxy, "get_scene_membership",
                g_variant_new("(qyq)", addr16, ep, group_id),
-               G_DBUS_CALL_FLAGS_NONE, to, NULL, NULL, container);
+               G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
-       return ZIGBEE_ERROR_NONE;
+       if (!variant) {
+               g_dbus_connection_signal_unsubscribe(gdbus_conn, sub_id);
+               g_source_remove(container->tid);
+               container->tid = 0;
+               free(container);
+
+               ERR("Failed to get get_scene_membership [%s]", dbus_err->message);
+               g_error_free(dbus_err);
+               return ZIGBEE_ERROR_IO_ERROR;
+       }
+
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
+       return result;
 }
 
 int zbl_thermostat_adjust_setpoint(nwk_addr addr16, unsigned char ep, unsigned char mode,
@@ -7148,16 +7954,17 @@ int zbl_thermostat_adjust_setpoint(nwk_addr addr16, unsigned char ep, unsigned c
        variant = g_dbus_proxy_call_sync(thermostat_gproxy, "setpoint_raise_lower",
                g_variant_new("(qyyy)", addr16, ep, mode, amount),
                G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               DBG("ret = [0x%x]", result);
-               g_variant_unref(variant);
-       } else {
-               ERR("Failed to get setpoint_raise_lower [%s]", dbus_err->message);
+
+       if (!variant) {
+               ERR("Failed to get 'setpoint_raise_lower' [%s]", dbus_err->message);
                g_error_free(dbus_err);
                return ZIGBEE_ERROR_IO_ERROR;
        }
 
+       g_variant_get(variant, "(i)", &result);
+       DBG("ret = [0x%x]", result);
+       g_variant_unref(variant);
+
        return result;
 }
 
index 0b8176c8d4d8a6576d654592ead5b53a3a582b05..6e8c28dd8b092ee59a4de16e79ff9e7e989573df 100644 (file)
@@ -179,7 +179,7 @@ int zbl_identify_query(nwk_addr addr16, unsigned char dst_ep,
 
 /* ZCL Group Cluster */
 int zbl_add_group(nwk_addr addr16, unsigned char ep, unsigned short group_id,
-               const char *group_name, zb_zcl_group_add_group_rsp cb, void *user_data);
+               char *group_name, zb_zcl_group_add_group_rsp cb, void *user_data);
 int zbl_view_group(nwk_addr addr16, unsigned char ep, unsigned short group_id,
                zb_zcl_group_view_group_rsp cb, void *user_data);
 int zbl_group_get_group_membership(nwk_addr addr16, unsigned char ep,