Z_LOGW("'%s' - [Name Lost]", name);
+ zblib_check_null_ret("custom_data", custom_data);
+
NOT_USED(connection);
/* Bus name is 'lost' */
NOT_USED(connection);
+ zblib_check_null_ret("custom_data", custom_data);
+
/* Bus name is 'acquired' */
custom_data->name_acquired = TRUE;
}
/* HASH table for maintaining 'objects' list */
- interface_data->objects = g_hash_table_new(g_str_hash, g_str_equal);
+ interface_data->objects = g_hash_table_new_full(g_str_hash, g_str_equal,
+ g_free, NULL);
/*
* Acquire "org.tizen.zigbee" named bus on D-BUS SYSTEM bus.
}
interface_data = (ZigbeeCustomData_t *)zblib_service_interface_ref_user_data(service_interface);
- if (NULL == service_interface) {
- Z_LOGE("D-BUS service interface not found!");
+ if (NULL == interface_data) {
+ Z_LOGE("D-BUS interface data not found!");
goto EXIT;
}
}
v_index = g_variant_builder_end (index_builder);
g_variant_builder_unref(index_builder);
- if (NULL == index_builder) {
- Z_LOGE("Failed to create variant!");
- g_variant_unref(v_status);
- g_variant_unref(v_attrs);
- g_variant_unref(v_indicator);
- break;
- }
Z_LOGD("Write attribute structured resp");
zigbee_zcl_global_control_emit_write_attribute_structured_rsp(
}
v_values = g_variant_builder_end (values_builder);
g_variant_builder_unref(values_builder);
- if (NULL == values_builder) {
- Z_LOGE("Failed to create variant!");
- g_variant_unref(v_data_type);
- g_variant_unref(v_attrs);
- break;
- }
Z_LOGD("Report attributes handler resp");
zigbee_zcl_global_control_emit_report_attr_handler_rsp(
GVariantIter *iter = NULL;
gint i = 0;
+ guchar value = 0;
gboolean ret;
/* Update request structure */
req.node_id = node_id;
g_variant_get(src_addr, "a(y)", &iter);
- while (g_variant_iter_loop(iter, "(y)", req.src_addr[i])) {
+ while (i < ZIGBEE_EUI64_SIZE && g_variant_iter_loop(iter, "(y)", &value)) {
+ req.src_addr[i] = value;
i++;
- if (i >= ZIGBEE_ZDO_BIND_ADDRESS_MAX_LEN + 1)
- break;
}
req.src_ep = src_ep;
req.cluster_id = cluster_id;
+
+ i = 0;
g_variant_get(dst_addr, "a(y)", &iter);
- while (g_variant_iter_loop(iter, "(y)", req.dst_addr[i])) {
+ while (i < ZIGBEE_EUI64_SIZE && g_variant_iter_loop(iter, "(y)", &value)) {
+ req.dst_addr[i] = value;
i++;
- if (i >= ZIGBEE_ZDO_BIND_ADDRESS_MAX_LEN + 1)
- break;
}
req.bind_type = bind_type;
req.group_addr = group_addr;
GVariantIter *iter = NULL;
gint i = 0;
+ guchar value = 0;
gboolean ret;
/* Update request structure */
req.node_id = node_id;
g_variant_get(src_addr, "a(y)", &iter);
- while (g_variant_iter_loop(iter, "(y)", req.src_addr[i])) {
+ while (i < ZIGBEE_EUI64_SIZE && g_variant_iter_loop(iter, "(y)", &value)) {
+ req.src_addr[i] = value;
i++;
- if (i >= ZIGBEE_ZDO_BIND_ADDRESS_MAX_LEN + 1)
- break;
}
req.src_ep = src_ep;
req.cluster_id = cluster_id;
+
+ i = 0;
g_variant_get(dst_addr, "a(y)", &iter);
- while (g_variant_iter_loop(iter, "(y)", req.dst_addr[i])) {
+ while (i < ZIGBEE_EUI64_SIZE && g_variant_iter_loop(iter, "(y)", &value)) {
+ req.dst_addr[i] = value;
i++;
- if (i >= ZIGBEE_ZDO_BIND_ADDRESS_MAX_LEN + 1)
- break;
}
req.bind_type = bind_type;
req.group_addr = group_addr;
static gboolean on_zdodev_control_matched_descriptor_req(ZigbeeZdo_dev_control *zdodev_control_object,
GDBusMethodInvocation *invocation,
- gshort node_id,
- gshort profile_id,
- gchar num_in_cl,
+ gushort node_id,
+ gushort profile_id,
+ guchar num_in_cl,
GVariant *in_cl,
- gchar num_out_cl,
+ guchar num_out_cl,
GVariant *out_cl,
gpointer user_data)
{
/* Look-up requets_id in request hash table */
request = (ZigBeeRequest *)g_hash_table_lookup(request_table, (gconstpointer)request_id);
- if (NULL == request_table) {
+ if (NULL == request) {
Z_LOGE("No request available for request_id: [%d]", request_id);
return NULL;
}
static gboolean __zblib_service_unload_plugin(ZigBeePlugin *plugin)
{
const ZblibPluginDescriptor_t *descriptor = zblib_plugin_get_descriptor(plugin);
- char *plugin_name = zblib_plugin_get_plugin_name(plugin);
+ char *plugin_name = NULL;
zblib_check_null_ret_error("descriptor", descriptor, FALSE);
zblib_check_null_ret_error("descriptor->unload", descriptor->unload, FALSE);
+ plugin_name = zblib_plugin_get_plugin_name(plugin);
+
descriptor->unload(plugin);
Z_LOGI("plugin(%s) unloaded!", plugin_name);
+ g_free(plugin_name);
+
return TRUE;
}
+static void __zblib_service_remove_request_table_iter(gpointer key,
+ gpointer value, gpointer user_data)
+{
+ ZigBeeServiceInterface *service_interface = (ZigBeeServiceInterface *)user_data;
+ gint request_id = (gint)key;
+
+ NOT_USED(value);
+
+ zblib_check_null_ret("service_interface", service_interface);
+
+ Z_LOGD("Removing request id [%d]", request_id);
+ zblib_request_free(service_interface, request_id);
+}
+
ZigBeeService *zblib_service_new()
{
ZigBeeService *service;
{
zblib_check_null_ret("service", service);
+ if (service->request_table) {
+ GSList *interface_objs = NULL;
+ ZigBeeServiceInterface *service_interface = NULL;
+
+ interface_objs = service->interface_objs;
+ if (NULL == interface_objs) {
+ Z_LOGE("interface_objs is NULL");
+ } else {
+ while (interface_objs) {
+ service_interface = (ZigBeeServiceInterface *)interface_objs->data;
+
+ /* Remove left request */
+ g_hash_table_foreach(service->request_table,
+ __zblib_service_remove_request_table_iter,
+ service_interface);
+
+ /* Move to next service interface */
+ interface_objs = g_slist_next(interface_objs);
+ }
+ g_hash_table_remove_all(service->request_table);
+ g_hash_table_destroy(service->request_table);
+ service->request_table = NULL;
+ }
+ }
+
/* Free plug-ins */
if (service->plugins) {
g_slist_free(service->plugins);
/* Specific vendor plug-in would be removed */
service->plugins = g_slist_remove(service->plugins, plugin);
+ /* Deinitialize plugin */
+ zblib_plugin_free(plugin);
+
return TRUE;
}
service_interface = tmp_service_interface;
break;
}
+ g_free(object_name);
list = g_slist_next(list);
}