SET(submodule "controller")
# for package file
-SET(dependents "capi-base-common glib-2.0 gio-2.0 dlog sqlite3 db-util aul bundle libtzplatform-config cynara-client cynara-session cynara-creds-socket")
+SET(dependents "capi-base-common glib-2.0 gio-2.0 dlog sqlite3 db-util aul bundle libtzplatform-config cynara-client cynara-session cynara-creds-socket uuid")
SET(fw_name "${project_prefix}-${service}-${submodule}")
PROJECT(${fw_name})
} media_controller_client_s;
/* formal callback to receive signal */
-typedef void(*mc_signal_received_cb)(const char *interface_name, const char *signal_name, const char *message, const unsigned int request_id, void *user_data);
+typedef void(*mc_signal_received_cb)(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
typedef struct {
GDBusConnection *dbus_conn;
char *interface_name;
int mc_util_make_filter_interface_name(const char *prefix, const char *filter, char **interface_name);
int mc_util_set_command_available(mc_priv_type_e priv_type, const char *name, const char *command_type, const char *command);
int mc_util_get_command_available(mc_priv_type_e priv_type, const char *name, const char *command_type, const char *command);
-int mc_util_get_request_id(unsigned int *req_id);
+char *mc_util_generate_uuid(void);
int mc_util_bundle_to_string(bundle *bundle_data, char **str_data);
int mc_safe_strtoi(const char *buffer, int *value);
int mc_safe_strtoull(const char *buffer, unsigned long long *value);
int mc_ipc_register_listener(GList **manage_list, GDBusConnection *connection, const char *interface_name, const char *signal_name, mc_signal_received_cb callback, void *user_data);
int mc_ipc_unregister_listener(GList **manage_list, GDBusConnection *connection, const char *interface_name, const char *signal_name);
int mc_ipc_unregister_all_listener(GList **manage_list, GDBusConnection *connection);
-int mc_ipc_send_message(GDBusConnection *connection, const char *dbus_name, const char *interface_name, const char* signal_name, const char* message, unsigned int *request_id);
+int mc_ipc_send_message(GDBusConnection *connection, const char *dbus_name, const char *interface_name, const char* signal_name, const char* message, char **request_id);
int mc_ipc_send_message_to_server(mc_msg_type_e msg_type, mc_priv_type_e priv_type, const char *request_msg);
int mc_ipc_service_connect(mc_priv_type_e type);
Name: capi-media-controller
Summary: A media controller library in Tizen Native API
-Version: 0.1.53
+Version: 0.1.54
Release: 1
Group: Multimedia/API
License: Apache-2.0
BuildRequires: pkgconfig(libtzplatform-config)
BuildRequires: pkgconfig(cynara-client)
BuildRequires: pkgconfig(cynara-session)
+BuildRequires: pkgconfig(uuid)
%description
This package provides a media controller library in Tizen Native API
#include "media_controller_db.h"
#include <bundle_internal.h>
-static void __client_server_cb(const char *interface_name, const char *signal_name, const char *message, const unsigned int request_id, void *user_data)
+static void __client_server_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
{
gchar **params = NULL;
media_controller_receiver_s *reciever = (media_controller_receiver_s *)user_data;
mc_retm_if(reciever->callback == NULL, "server_state_cb is NULL");
mc_retm_if(message == NULL, "message is NULL");
- mc_debug("__client_server_cb(%s, %s, %s, %ld, %p)", interface_name, signal_name, message, request_id, user_data);
+ mc_debug("__client_server_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
params = g_strsplit(message, MC_STRING_DELIMITER, 0);
mc_retm_if(params == NULL, "invalid server data");
g_strfreev(params);
}
-static void __client_playback_cb(const char *interface_name, const char *signal_name, const char *message, const unsigned int request_id, void *user_data)
+static void __client_playback_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
{
gchar **params = NULL;
media_controller_receiver_s *reciever = (media_controller_receiver_s *)user_data;
mc_retm_if(reciever->callback == NULL, "playback_cb is NULL");
mc_retm_if(message == NULL, "message is NULL");
- mc_debug("__client_playback_cb(%s, %s, %s, %ld, %p)", interface_name, signal_name, message, request_id, user_data);
+ mc_debug("__client_playback_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
playback = (media_controller_playback_s *)calloc(1, sizeof(media_controller_playback_s));
mc_retm_if(playback == NULL, "Error allocation memory");
g_strfreev(params);
}
-static void __client_metadata_cb(const char *interface_name, const char *signal_name, const char *message, const unsigned int request_id, void *user_data)
+static void __client_metadata_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
mc_metadata_h metadata = NULL;
mc_retm_if(mc_client->metadata_cb.callback == NULL, "metadata_cb is NULL");
mc_retm_if(message == NULL, "message is NULL");
- mc_debug("__client_metadata_cb(%s, %s, %s, %ld, %p)", interface_name, signal_name, message, request_id, user_data);
+ mc_debug("__client_metadata_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
ret = mc_db_get_metadata_info(mc_client->db_handle, message, &metadata);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_client_destroy_metadata(metadata);
}
-static void __client_shuffle_cb(const char *interface_name, const char *signal_name, const char *message, const unsigned int request_id, void *user_data)
+static void __client_shuffle_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
{
gchar **params = NULL;
media_controller_receiver_s *reciever = (media_controller_receiver_s *)user_data;
mc_retm_if(reciever->callback == NULL, "shuffle_cb is NULL");
- mc_debug("__client_shuffle_cb(%s, %s, %s, %ld, %p)", interface_name, signal_name, message, request_id, user_data);
+ mc_debug("__client_shuffle_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
params = g_strsplit(message, MC_STRING_DELIMITER, 0);
mc_retm_if(params == NULL, "invalid shuffle mode data");
g_strfreev(params);
}
-static void __client_repeat_cb(const char *interface_name, const char *signal_name, const char *message, const unsigned int request_id, void *user_data)
+static void __client_repeat_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
{
gchar **params = NULL;
media_controller_receiver_s *reciever = (media_controller_receiver_s *)user_data;
mc_retm_if(reciever->callback == NULL, "repeat_cb is NULL");
- mc_debug("__client_repeat_cb(%s, %s, %s, %ld, %p)", interface_name, signal_name, message, request_id, user_data);
+ mc_debug("__client_repeat_cb(%s, %s, %s, %s %p)", interface_name, signal_name, message, request_id, user_data);
params = g_strsplit(message, MC_STRING_DELIMITER, 0);
mc_retm_if(params == NULL, "invalid repeat mode data");
g_strfreev(params);
}
-static void __client_reply_cb(const char *interface_name, const char *signal_name, const char *message, const unsigned int request_id, void *user_data)
+static void __client_reply_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
{
gchar **params = NULL;
int enc_size = 0;
mc_command_reply_received_cb callback = (mc_command_reply_received_cb)reciever->callback;
mc_retm_if(reciever->callback == NULL, "reply_cb is NULL");
- mc_debug("__client_reply_cb(%s, %s, %s, %ld, %p)", interface_name, signal_name, message, request_id, user_data);
+ mc_debug("__client_reply_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
params = g_strsplit(message, MC_STRING_DELIMITER, 0);
mc_retm_if(params == NULL, "invalid custom data");
return MEDIA_CONTROLLER_ERROR_NONE;
}
-static int __mc_client_send_command(mc_client_h client, const char *server_name, const char *command_type, const char *command, const char *signal_name, const char *message, unsigned int *request_id)
+static int __mc_client_send_command(mc_client_h client, const char *server_name, const char *command_type, const char *command, const char *signal_name, const char *message, char **request_id)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
media_controller_client_s *mc_client = (media_controller_client_s *)client;
#define MAX_RETRY_COUNT 3
#define MAX_WAIT_COUNT 100
-#define MC_SVC_NAME "mediacontroller"
+#define DEFAULT_REQ_ID "DEF_REQ_ID"
/* This checks if service daemon is running */
static int __is_service_activated(mc_priv_type_e priv_type)
mc_debug("__mc_ipc_signal_cb Received :");
gchar *message = NULL;
- unsigned int request_id = 0;
+ gchar * request_id = NULL;
- g_variant_get(parameters, "(u&s)", &request_id, &message);
+ g_variant_get(parameters, "(s&s)", &request_id, &message);
if (!message) {
mc_error("g_variant_get() fail");
return;
}
+ if ((request_id != NULL) && (!g_strcmp0(request_id, DEFAULT_REQ_ID))) {
+ request_id = NULL;
+ }
+
char *key = __make_key_for_map(interface_name, signal_name);
if (key == NULL) {
mc_error("fail to get key");
for (i = 0; i < listener_cnt; i++) {
listener = (mc_ipc_listener_s *)g_list_nth_data(*listener_list, i);
if (listener && !g_strcmp0(listener->key, key)) {
- mc_debug("Received : [%s] (req_id = %ld) from %s.%s", message, request_id, listener->interface_name, listener->signal_name);
+ mc_debug("Received : [%s] (req_id = %s) from %s.%s", message, request_id, listener->interface_name, listener->signal_name);
listener->callback(listener->interface_name, listener->signal_name, message, request_id, listener->user_data);
break;
}
return MEDIA_CONTROLLER_ERROR_NONE;
}
-int mc_ipc_send_message(GDBusConnection *connection, const char *dbus_name, const char *interface_name, const char *signal_name, const char *message, unsigned int *request_id)
+int mc_ipc_send_message(GDBusConnection *connection, const char *dbus_name, const char *interface_name, const char *signal_name, const char *message, char **request_id)
{
GError *error = NULL;
- unsigned int req_id = 0;
+ char *req_id = (char*)"DEF_REQ_ID";
mc_retvm_if(connection == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "connection is NULL");
mc_retvm_if(!MC_STRING_VALID(signal_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid signal_name");
mc_debug("emit signal - interface_name [%s], signal_name [%s]", interface_name, signal_name);
- if (request_id != NULL)
- mc_util_get_request_id(&req_id);
+ if (request_id != NULL) {
+ req_id = mc_util_generate_uuid();
+ *request_id = g_strdup(req_id);
+
+ mc_secure_debug("req_id[%s]", req_id);
+ }
gboolean emmiting = g_dbus_connection_emit_signal(
connection,
MC_DBUS_PATH,
interface_name,
signal_name,
- g_variant_new("(us)", req_id, message),
+ g_variant_new("(ss)", req_id, message),
&error);
if (!emmiting) {
mc_error("g_dbus_connection_emit_signal failed : %s", error ? error->message : "none");
return ret;
}
-static void __server_playback_state_command_cb(const char *interface_name, const char *signal_name, const char *message, const unsigned int request_id, void *user_data)
+static void __server_playback_state_command_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
{
gchar **params = NULL;
media_controller_receiver_s *receiver = (media_controller_receiver_s *)user_data;
mc_server_playback_state_command_received_cb callback = receiver->callback;
mc_retm_if(receiver->callback == NULL, "playback_state_command_received_cb is NULL");
- mc_debug("__server_playback_state_command_cb(%s, %s, %s, %ld, %p)", interface_name, signal_name, message, request_id, user_data);
+ mc_debug("__server_playback_state_command_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
params = g_strsplit(message, MC_STRING_DELIMITER, 0);
mc_retm_if(params == NULL, "invalid playback state command");
g_strfreev(params);
}
-static void __server_custom_command_cb(const char *interface_name, const char *signal_name, const char *message, const unsigned int request_id, void *user_data)
+static void __server_custom_command_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
{
gchar **params = NULL;
int enc_size = 0;
mc_server_custom_command_received_cb callback = receiver->callback;
mc_retm_if(receiver->callback == NULL, "custom_command_received_cb is NULL");
- mc_debug("__server_custom_cb(%s, %s, %s, %ld, %p)", interface_name, signal_name, message, request_id, user_data);
+ mc_debug("__server_custom_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
params = g_strsplit(message, MC_STRING_DELIMITER, 0);
mc_retm_if(params == NULL, "invalid custom data");
#include <errno.h>
#include <limits.h>
#include <stdlib.h>
+#include <uuid/uuid.h>
#include "media_controller_private.h"
//#define UNIT_TEST /* for testsuite */
#define MAX_NAME_LENGTH 255
-static GMutex mutex_req_id;
-
static void _mc_util_check_valid_name(const char *name, char **valid_name)
{
char old_word[MAX_NAME_LENGTH] = {0, };
return ret;
}
-int mc_util_get_request_id(unsigned int *req_id)
+char *mc_util_generate_uuid(void)
{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
- static unsigned int request_id = 0;
-
- mc_retvm_if(req_id == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid parameter");
+ uuid_t uuid_value;
+ static char uuid_unparsed[37];
- g_mutex_lock(&mutex_req_id);
+RETRY_GEN:
+ uuid_generate(uuid_value);
+ uuid_unparse(uuid_value, uuid_unparsed);
- if (request_id + 1 == UINT_MAX) {
- request_id = 0;
+ if (strlen(uuid_unparsed) < 36) {
+ mc_debug("INVALID UUID : %s. RETRY GENERATE.", uuid_unparsed);
+ goto RETRY_GEN;
}
- request_id++;
- *req_id = request_id;
- g_mutex_unlock(&mutex_req_id);
-
- return ret;
+ return uuid_unparsed;
}
int mc_util_bundle_to_string(bundle *bundle_data, char **str_data)