Change request_id from int to char 60/180860/3
authorhj kim <backto.kim@samsung.com>
Tue, 5 Jun 2018 04:26:17 +0000 (13:26 +0900)
committerhj kim <backto.kim@samsung.com>
Tue, 5 Jun 2018 07:37:17 +0000 (16:37 +0900)
Change-Id: Idd19cc1cf10c14d4c2c0ca2ddae95f92a35ff1d9

CMakeLists.txt
include/media_controller_private.h
packaging/capi-media-controller.spec
src/media_controller_client.c
src/media_controller_ipc.c
src/media_controller_server.c
src/media_controller_util.c

index 78c61d220ac9d5b76c24705126999e3b4c96b794..9723bd00fcf429a9c65949713cbd7640fe3049cf 100644 (file)
@@ -24,7 +24,7 @@ SET(service "media")
 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})
index 34ff2fff08d43f855ddc15a87038cb5aa1c4c802..41e99289243507e6d3e2bf75837c303af0a89091 100755 (executable)
@@ -275,7 +275,7 @@ typedef struct {
 } 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;
@@ -293,7 +293,7 @@ char* mc_util_get_interface_name(const char *type, const char *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);
@@ -304,7 +304,7 @@ int mc_ipc_unref_dbus_connection(GDBusConnection *conn, int *dref_count);
 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);
 
index 638199cc5d6baf076e1127d340c8b38220c55766..1d6fca29e6416d9e3f7bf593ff2928d08f6d140f 100755 (executable)
@@ -1,6 +1,6 @@
 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
@@ -21,6 +21,7 @@ BuildRequires:  pkgconfig(libsystemd-login)
 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
index f92b6ee3a6a807ce98f1c87dd1d2a7934864e215..e259632669f274d2c18db0a75476e72bec634b9a 100755 (executable)
@@ -19,7 +19,7 @@
 #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;
@@ -29,7 +29,7 @@ static void __client_server_cb(const char *interface_name, const char *signal_na
        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");
@@ -39,7 +39,7 @@ static void __client_server_cb(const char *interface_name, const char *signal_na
        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;
@@ -50,7 +50,7 @@ static void __client_playback_cb(const char *interface_name, const char *signal_
        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");
@@ -73,7 +73,7 @@ static void __client_playback_cb(const char *interface_name, const char *signal_
        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;
@@ -84,7 +84,7 @@ static void __client_metadata_cb(const char *interface_name, const char *signal_
        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)
@@ -95,7 +95,7 @@ static void __client_metadata_cb(const char *interface_name, const char *signal_
        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;
@@ -104,7 +104,7 @@ static void __client_shuffle_cb(const char *interface_name, const char *signal_n
 
        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");
@@ -114,7 +114,7 @@ static void __client_shuffle_cb(const char *interface_name, const char *signal_n
        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;
@@ -123,7 +123,7 @@ static void __client_repeat_cb(const char *interface_name, const char *signal_na
 
        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");
@@ -133,7 +133,7 @@ static void __client_repeat_cb(const char *interface_name, const char *signal_na
        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;
@@ -145,7 +145,7 @@ static void __client_reply_cb(const char *interface_name, const char *signal_nam
        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");
@@ -333,7 +333,7 @@ static int __mc_parse_server_name(const char *interface_name, char **server_name
        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;
index ca008d324621780c8d7e2dbac30f2cb764a6552a..1a97e6a5771f005dc0d46f614417894a31c752ca 100755 (executable)
@@ -22,7 +22,7 @@
 
 #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)
@@ -53,14 +53,18 @@ static void __mc_ipc_signal_cb(GDBusConnection *connection,
        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");
@@ -71,7 +75,7 @@ static void __mc_ipc_signal_cb(GDBusConnection *connection,
        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;
                }
@@ -277,10 +281,10 @@ int mc_ipc_unregister_all_listener(GList **listener_list, GDBusConnection *conne
        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");
@@ -288,8 +292,12 @@ int mc_ipc_send_message(GDBusConnection *connection, const char *dbus_name, cons
 
        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,
@@ -297,7 +305,7 @@ int mc_ipc_send_message(GDBusConnection *connection, const char *dbus_name, cons
                                                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");
index 516ea160290cca0c84fd195262b7c3ac3331c104..e7d26d5a2e49b94a25e0f572217395658e1afdc3 100755 (executable)
@@ -103,7 +103,7 @@ static int __mc_server_destoy(media_controller_server_s *mc_server)
        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;
@@ -115,7 +115,7 @@ static void __server_playback_state_command_cb(const char *interface_name, const
        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");
@@ -137,7 +137,7 @@ static void __server_playback_state_command_cb(const char *interface_name, const
        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;
@@ -151,7 +151,7 @@ static void __server_custom_command_cb(const char *interface_name, const char *s
        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");
index 0a147e7a3bd71094553813c893144413699422ce..4e674e33816a3110f92ac6f7657631753af7c2b6 100755 (executable)
 #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, };
@@ -176,24 +175,21 @@ int mc_util_get_command_available(mc_priv_type_e priv_type, const char *name, co
        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)