Fix issues for Group cluster
authorJiwan Kim <ji-wan.kim@samsung.com>
Mon, 13 Feb 2017 04:34:54 +0000 (13:34 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Thu, 11 May 2017 09:10:26 +0000 (18:10 +0900)
- There are some bugs on view_group / get_group_membership method

Change-Id: I48e05e32ef9954fd2196ad5733c33315a2bbecfe
Signed-off-by: Jiwan Kim <ji-wan.kim@samsung.com>
zigbee-daemon/zigbee-interface/src/zigbee_service_dbus_interface_zcl_group.c
zigbee-daemon/zigbee-lib/src/zblib_request.c

index 833162d..7ade053 100644 (file)
@@ -173,9 +173,9 @@ static void on_zcl_group_view_group_resp(ZigBeeServiceInterface *service_interfa
 
 static gboolean on_zcl_group_view_group(ZigbeeZcl_group *zcl_group_object,
        GDBusMethodInvocation *invocation,
-       gshort node_id,
-       gchar dest_ep,
-       gshort group_id,
+       gushort node_id,
+       guchar dest_ep,
+       gushort group_id,
        gpointer user_data)
 {
        ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
@@ -270,6 +270,7 @@ static gboolean on_zcl_group_get_group_membership(ZigbeeZcl_group *zcl_group_obj
 
        GVariantIter *iter = NULL;
        gint i = 0;
+       gushort value = 0;
 
        gboolean ret;
 
@@ -279,12 +280,12 @@ static gboolean on_zcl_group_get_group_membership(ZigbeeZcl_group *zcl_group_obj
        req.node_id = node_id;
        req.dest_ep = dest_ep;
        req.group_count = group_count;
-       req.group_list = g_malloc0(sizeof(gshort) * group_count);
+       req.group_list = g_malloc0(sizeof(gushort) * group_count);
        g_variant_get(group_list, "aq", &iter);
-       while (g_variant_iter_loop(iter, "q", req.group_list[i])) {
+       while (i < group_count && g_variant_iter_loop(iter, "q", &value)) {
+               Z_LOGD("  cluster: [%d]", value);
+               req.group_list[i] = value;
                i++;
-               if (i >= group_count)
-                       break;
        }
 
        /* Allocate response callback data */
@@ -294,6 +295,8 @@ static gboolean on_zcl_group_get_group_membership(ZigbeeZcl_group *zcl_group_obj
        if (NULL == resp_cb_data) {
                Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");
 
+               g_free(req.group_list);
+
                /* Send failure response */
                ZIGBEE_DBUS_FAIL_RESPONSE(invocation, ZIGBEE_DBUS_DEFAULT_REQ_FAILED_MSG);
 
index 5410353..14c05da 100644 (file)
@@ -2168,6 +2168,7 @@ static gpointer __zblib_request_create_zcl_group_request_data(guint request_type
                        /* Copy data */
                        req->node_id = in_req->node_id;
                        req->dest_ep = in_req->dest_ep;
+                       req->group_id = in_req->group_id;
                }
 
                zcl_group_request_data = (gpointer)req;
@@ -2189,7 +2190,7 @@ static gpointer __zblib_request_create_zcl_group_request_data(guint request_type
                        req->dest_ep = in_req->dest_ep;
                        req->group_count = in_req->group_count;
                        req->group_list = (gushort *)g_memdup(in_req->group_list,
-                               in_req->group_count);
+                               sizeof(gushort) * in_req->group_count);
                }
 
                zcl_group_request_data = (gpointer)req;