goto Error;
}
- _client->listeners = g_list_alloc();
- if (_client->listeners == NULL) {
- ret = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
- mc_error("Error allocation list %d", ret);
- goto Error;
- }
-
*mc_client = _client;
return MEDIA_CONTROLLER_ERROR_NONE;
if (_client->db_handle)
mc_db_disconnect(_client->db_handle);
- if (_client->listeners)
- g_list_free(_client->listeners);
-
MC_SAFE_FREE(_client->client_name);
MC_SAFE_FREE(_client);
ret = mc_util_make_filter_interface_name(MC_DBUS_UPDATE_INTERFACE, server_name, &filter_interface_name);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Fail mc_util_make_filter_interface_name");
- ret = mc_ipc_register_listener(mc_client->listeners, mc_client->dconn, filter_interface_name, signal_name, callback, user_data);
+ ret = mc_ipc_register_listener(&mc_client->listeners, mc_client->dconn, filter_interface_name, signal_name, callback, user_data);
if (ret == MEDIA_CONTROLLER_ERROR_NONE)
*filter_list = g_list_append(*filter_list, strdup(filter_interface_name));
}
/*Unregister listener*/
- ret = mc_ipc_unregister_listener(mc_client->listeners, mc_client->dconn, filter_interface_name, signal_name);
+ ret = mc_ipc_unregister_listener(&mc_client->listeners, mc_client->dconn, filter_interface_name, signal_name);
if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
MC_SAFE_FREE(filter_interface_name);
return ret;
mc_debug("[%d][%s]", idx, interface_name);
/*Unregister listener*/
- ret = mc_ipc_unregister_listener(mc_client->listeners, mc_client->dconn, interface_name, signal_name);
+ ret = mc_ipc_unregister_listener(&mc_client->listeners, mc_client->dconn, interface_name, signal_name);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("Fail mc_ipc_unregister_listener");
mc_client->server_state_cb.callback = callback;
mc_client->server_state_cb.user_data = user_data;
- ret = mc_ipc_register_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_SERVER_STATE,
+ ret = mc_ipc_register_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_SERVER_STATE,
__client_server_cb, (void *)&(mc_client->server_state_cb));
return ret;
mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
- ret = mc_ipc_unregister_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_SERVER_STATE);
+ ret = mc_ipc_unregister_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_SERVER_STATE);
ret = __mc_client_unregister_filter_listener(mc_client, &mc_client->server_state_cb.filter_list, NULL, MC_DBUS_SIGNAL_NAME_SERVER_STATE);
mc_client->playback_cb.callback = callback;
mc_client->playback_cb.user_data = user_data;
- ret = mc_ipc_register_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAY_BACK,
+ ret = mc_ipc_register_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAY_BACK,
__client_playback_cb, (void *)&(mc_client->playback_cb));
return ret;
mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
- ret = mc_ipc_unregister_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAY_BACK);
+ ret = mc_ipc_unregister_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAY_BACK);
ret = __mc_client_unregister_filter_listener(mc_client, &mc_client->playback_cb.filter_list, NULL, MC_DBUS_SIGNAL_NAME_PLAY_BACK);
mc_client->metadata_cb.callback = callback;
mc_client->metadata_cb.user_data = user_data;
- ret = mc_ipc_register_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_METADATA,
+ ret = mc_ipc_register_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_METADATA,
__client_metadata_cb, (void *)(mc_client));
return ret;
mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
- ret = mc_ipc_unregister_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_METADATA);
+ ret = mc_ipc_unregister_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_METADATA);
ret = __mc_client_unregister_filter_listener(mc_client, &mc_client->metadata_cb.filter_list, NULL, MC_DBUS_SIGNAL_NAME_METADATA);
mc_client->shuffle_cb.callback = callback;
mc_client->shuffle_cb.user_data = user_data;
- ret = mc_ipc_register_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_SHUFFLE,
+ ret = mc_ipc_register_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_SHUFFLE,
__client_shuffle_cb, (void *)&(mc_client->shuffle_cb));
return ret;
mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
- ret = mc_ipc_unregister_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_SHUFFLE);
+ ret = mc_ipc_unregister_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_SHUFFLE);
ret = __mc_client_unregister_filter_listener(mc_client, &mc_client->shuffle_cb.filter_list, NULL, MC_DBUS_SIGNAL_NAME_PLAYBACK_SHUFFLE);
mc_client->repeat_cb.callback = callback;
mc_client->repeat_cb.user_data = user_data;
- ret = mc_ipc_register_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_REPEAT,
+ ret = mc_ipc_register_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_REPEAT,
__client_repeat_cb, (void *)&(mc_client->repeat_cb));
return ret;
mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
- ret = mc_ipc_unregister_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_REPEAT);
+ ret = mc_ipc_unregister_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_REPEAT);
ret = __mc_client_unregister_filter_listener(mc_client, &mc_client->repeat_cb.filter_list, NULL, MC_DBUS_SIGNAL_NAME_PLAYBACK_REPEAT);
case MC_SUBSCRIPTION_TYPE_SERVER_STATE:
mc_retvm_if(mc_client->server_state_cb.callback == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid callback");
- ret = mc_ipc_unregister_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_SERVER_STATE);
+ ret = mc_ipc_unregister_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_SERVER_STATE);
ret = __mc_client_register_filter_listener(mc_client, &mc_client->server_state_cb.filter_list, server_name, MC_DBUS_SIGNAL_NAME_SERVER_STATE,
__client_server_cb, (void *)&(mc_client->server_state_cb));
break;
case MC_SUBSCRIPTION_TYPE_PLAYBACK:
mc_retvm_if(mc_client->playback_cb.callback == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid callback");
- ret = mc_ipc_unregister_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAY_BACK);
+ ret = mc_ipc_unregister_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAY_BACK);
ret = __mc_client_register_filter_listener(mc_client, &mc_client->playback_cb.filter_list, server_name, MC_DBUS_SIGNAL_NAME_PLAY_BACK,
__client_playback_cb, (void *)&(mc_client->playback_cb));
break;
case MC_SUBSCRIPTION_TYPE_METADATA:
mc_retvm_if(mc_client->metadata_cb.callback == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid callback");
- ret = mc_ipc_unregister_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_METADATA);
+ ret = mc_ipc_unregister_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_METADATA);
ret = __mc_client_register_filter_listener(mc_client, &mc_client->metadata_cb.filter_list, server_name, MC_DBUS_SIGNAL_NAME_METADATA,
__client_metadata_cb, (void *)(mc_client));
break;
case MC_SUBSCRIPTION_TYPE_SHUFFLE_MODE:
mc_retvm_if(mc_client->shuffle_cb.callback == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid callback");
- ret = mc_ipc_unregister_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_SHUFFLE);
+ ret = mc_ipc_unregister_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_SHUFFLE);
ret = __mc_client_register_filter_listener(mc_client, &mc_client->shuffle_cb.filter_list, server_name, MC_DBUS_SIGNAL_NAME_PLAYBACK_SHUFFLE,
__client_shuffle_cb, (void *)&(mc_client->shuffle_cb));
break;
case MC_SUBSCRIPTION_TYPE_REPEAT_MODE:
mc_retvm_if(mc_client->repeat_cb.callback == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid callback");
- ret = mc_ipc_unregister_listener(mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_REPEAT);
+ ret = mc_ipc_unregister_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_REPEAT);
ret = __mc_client_register_filter_listener(mc_client, &mc_client->repeat_cb.filter_list, server_name, MC_DBUS_SIGNAL_NAME_PLAYBACK_REPEAT,
__client_repeat_cb, (void *)&(mc_client->repeat_cb));
break;
char *interface_name_for_reply = mc_util_get_interface_name(MC_CLIENT, mc_client->client_name);
mc_client->reply_cb.callback = callback;
mc_client->reply_cb.user_data = user_data;
- mc_ipc_register_listener(mc_client->listeners, mc_client->dconn, interface_name_for_reply, MC_DBUS_SIGNAL_NAME_CMD_REPLY, __client_reply_cb, (void *)&(mc_client->reply_cb));
+ mc_ipc_register_listener(&mc_client->listeners, mc_client->dconn, interface_name_for_reply, MC_DBUS_SIGNAL_NAME_CMD_REPLY, __client_reply_cb, (void *)&(mc_client->reply_cb));
MC_SAFE_FREE(interface_name_for_reply);
}
ret = __mc_client_unregister_filter_listener(mc_client, &mc_client->repeat_cb.filter_list, NULL, MC_DBUS_SIGNAL_NAME_PLAYBACK_REPEAT);
/*Unregister all listener*/
- ret = mc_ipc_unregister_all_listener(mc_client->listeners, mc_client->dconn);
+ ret = mc_ipc_unregister_all_listener(&mc_client->listeners, mc_client->dconn);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("Error mc_ipc_unregister_all_listener [%d]", ret);
return MEDIA_CONTROLLER_ERROR_NONE;
}
-int mc_ipc_register_listener(GList *listener_list, GDBusConnection *connection, const char *interface_name, const char *signal_name, mc_signal_received_cb callback, void *user_data)
+int mc_ipc_register_listener(GList **listener_list, GDBusConnection *connection, const char *interface_name, const char *signal_name, mc_signal_received_cb callback, void *user_data)
{
char *key = NULL;
guint handler = 0;
return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
}
- if (_mc_ipc_is_listener_duplicated(listener_list, key)) {
+ if (_mc_ipc_is_listener_duplicated(*listener_list, key)) {
mc_error("listener is duplicated");
MC_SAFE_G_FREE(key);
return MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
}
- handler = _mc_ipc_signal_subscribe(connection, interface_name, signal_name, listener_list);
+ handler = _mc_ipc_signal_subscribe(connection, interface_name, signal_name, *listener_list);
listener->dbus_conn = connection;
listener->interface_name = strdup(interface_name);
listener->handler = handler;
listener->key = key;
- (listener_list) = g_list_append((listener_list), listener);
+ (*listener_list) = g_list_append(*listener_list, listener);
- mc_debug("listener[%s] is registered. listener_cnt[%d]", key, g_list_length(listener_list));
+ mc_debug("listener[%s] is registered. listener_cnt[%d]", key, g_list_length(*listener_list));
return MEDIA_CONTROLLER_ERROR_NONE;
}
-int mc_ipc_unregister_listener(GList *listener_list, GDBusConnection *connection, const char *interface_name, const char *signal_name)
+int mc_ipc_unregister_listener(GList **listener_list, GDBusConnection *connection, const char *interface_name, const char *signal_name)
{
int i = 0;
+ int list_len = 0;
char *key = NULL;
mc_retvm_if(listener_list == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "listener_list is NULL");
return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
}
- for (i = g_list_length(listener_list) - 1; i >= 0; i--) {
- mc_ipc_listener_s *listener = (mc_ipc_listener_s *)g_list_nth_data(listener_list, i);
+ list_len = g_list_length(*listener_list) - 1;
+ for (i = list_len; i >= 0; i--) {
+ mc_ipc_listener_s *listener = (mc_ipc_listener_s *)g_list_nth_data(*listener_list, i);
if (listener && !g_strcmp0(listener->key, key)) {
_mc_ipc_signal_unsubscribe(connection, listener->handler);
MC_SAFE_FREE(listener->interface_name);
MC_SAFE_FREE(listener->signal_name);
MC_SAFE_G_FREE(listener->key);
- (listener_list) = g_list_remove(listener_list, listener);
+ (*listener_list) = g_list_remove(*listener_list, listener);
MC_SAFE_FREE(listener);
- mc_debug("listener[%s.%s] is unregistered. listener_cnt[%d]", interface_name, signal_name, g_list_length(listener_list));
+ mc_debug("listener[%s.%s] is unregistered. listener_cnt[%d]", interface_name, signal_name, g_list_length(*listener_list));
break;
}
}
return MEDIA_CONTROLLER_ERROR_NONE;
}
-int mc_ipc_unregister_all_listener(GList *listener_list, GDBusConnection *connection)
+int mc_ipc_unregister_all_listener(GList **listener_list, GDBusConnection *connection)
{
int i = 0;
+ int list_len = 0;
mc_retvm_if(connection == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "connection is NULL");
mc_retvm_if(listener_list == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "listener_list is NULL");
- for (i = g_list_length(listener_list) - 1; i >= 0; i--) {
- mc_ipc_listener_s *listener = (mc_ipc_listener_s *)g_list_nth_data(listener_list, i);
+ list_len = g_list_length(*listener_list) - 1;
+
+ for (i = list_len; i >= 0; i--) {
+ mc_ipc_listener_s *listener = (mc_ipc_listener_s *)g_list_nth_data(*listener_list, i);
if (listener) {
- mc_debug("listener[%s] is unregistered. listener_cnt[%d]", listener->key, g_list_length(listener_list));
+ mc_debug("listener[%s] is unregistered. listener_cnt[%d]", listener->key, g_list_length(*listener_list));
_mc_ipc_signal_unsubscribe(connection, listener->handler);
MC_SAFE_FREE(listener->interface_name);
MC_SAFE_FREE(listener->signal_name);
MC_SAFE_G_FREE(listener->key);
- (listener_list) = g_list_remove(listener_list, listener);
+ (*listener_list) = g_list_remove(*listener_list, listener);
MC_SAFE_FREE(listener);
}
}
goto ERROR;
}
- _server->listeners = g_list_alloc();
- if (_server->listeners == NULL) {
- ret = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
- mc_error("Error allocation list %d", ret);
- goto ERROR;
- }
-
*mc_server = _server;
return MEDIA_CONTROLLER_ERROR_NONE;
if (_server->db_handle)
mc_db_disconnect(_server->db_handle);
- if (_server->listeners)
- g_list_free(_server->listeners);
-
MC_SAFE_FREE(_server->server_name);
MC_SAFE_FREE(_server->metadata);
MC_SAFE_FREE(_server);
mc_server->playback_state_reciever.user_data = user_data;
char *interface_name = mc_util_get_interface_name(MC_SERVER, mc_server->server_name);
- ret = mc_ipc_register_listener(mc_server->listeners, mc_server->dconn, interface_name, MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD, __server_playback_state_command_cb, (void *)&(mc_server->playback_state_reciever));
+ ret = mc_ipc_register_listener(&mc_server->listeners, mc_server->dconn, interface_name, MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD, __server_playback_state_command_cb, (void *)&(mc_server->playback_state_reciever));
MC_SAFE_FREE(interface_name);
mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
char *interface_name = mc_util_get_interface_name(MC_SERVER, mc_server->server_name);
- ret = mc_ipc_unregister_listener(mc_server->listeners, mc_server->dconn, interface_name, MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD);
+ ret = mc_ipc_unregister_listener(&mc_server->listeners, mc_server->dconn, interface_name, MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD);
mc_server->playback_state_reciever.callback = NULL;
mc_server->playback_state_reciever.user_data = NULL;
mc_server->custom_cmd_reciever.user_data = user_data;
char *interface_name = mc_util_get_interface_name(MC_SERVER, mc_server->server_name);
- ret = mc_ipc_register_listener(mc_server->listeners, mc_server->dconn, interface_name, MC_DBUS_SIGNAL_NAME_CUSTOM_CMD, __server_custom_command_cb, (void *)&(mc_server->custom_cmd_reciever));
+ ret = mc_ipc_register_listener(&mc_server->listeners, mc_server->dconn, interface_name, MC_DBUS_SIGNAL_NAME_CUSTOM_CMD, __server_custom_command_cb, (void *)&(mc_server->custom_cmd_reciever));
MC_SAFE_FREE(interface_name);
mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
char *interface_name = mc_util_get_interface_name(MC_SERVER, mc_server->server_name);
- ret = mc_ipc_unregister_listener(mc_server->listeners, mc_server->dconn, interface_name, MC_DBUS_SIGNAL_NAME_CUSTOM_CMD);
+ ret = mc_ipc_unregister_listener(&mc_server->listeners, mc_server->dconn, interface_name, MC_DBUS_SIGNAL_NAME_CUSTOM_CMD);
mc_server->custom_cmd_reciever.callback = NULL;
mc_server->custom_cmd_reciever.user_data = NULL;
mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
- ret = mc_ipc_unregister_all_listener(mc_server->listeners, mc_server->dconn);
+ ret = mc_ipc_unregister_all_listener(&mc_server->listeners, mc_server->dconn);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("fail mc_ipc_unregister_all_listener [%d]", ret);