g_strfreev(params);
}
+static int __mc_client_create(media_controller_client_s **mc_client)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ media_controller_client_s *_client = NULL;
+
+ mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+
+ _client = (media_controller_client_s *)calloc(1, sizeof(media_controller_client_s));
+ mc_retvm_if(_client == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "Error allocation memory");
+
+ ret = mc_util_get_own_name(&(_client->client_name));
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("Filed to get client name %d", ret);
+ goto Error;
+ }
+
+ ret = mc_ipc_get_dbus_connection(&(_client->dconn), &(_client->dref_count));
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("error in client init %d", ret);
+ goto Error;
+ }
+
+ ret = mc_db_connect(&_client->db_handle);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("error in connecting to DB %d", ret);
+ 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;
+Error:
+ if (_client->dconn)
+ mc_ipc_unref_dbus_connection(_client->dconn, &_client->dref_count);
+
+ 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);
+
+ return ret;
+}
+
static int __mc_client_destroy(media_controller_client_s *mc_client)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
mc_error("fail to mc_db_disconnect");
}
+ if (mc_client->listeners != NULL) {
+ g_list_free(mc_client->listeners);
+ }
+
MC_SAFE_FREE(mc_client->client_name);
MC_SAFE_FREE(mc_client);
mc_retvm_if(client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
- mc_client = (media_controller_client_s *)calloc(1, sizeof(media_controller_client_s));
- mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "Error allocation memory");
-
- mc_client->listeners = g_list_alloc();
- if (mc_client->listeners == NULL) {
- ret = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
- mc_error("Error allocation list %d", ret);
- __mc_client_destroy(mc_client);
- return ret;
- }
-
/*Try Socket Activation by systemd*/
ret = mc_ipc_service_connect();
if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
mc_error("Failed to get mc_ipc_service_connect [%d]", ret);
- }
-
- /*Send Connection Msg to Server*/
- ret = mc_ipc_send_message_to_server(MC_MSG_SERVER_CONNECTION, MC_SERVER_CONNECTION_MSG);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("Failed to mc_ipc_send_message_to_server [%d]", ret);
- return ret;
- }
-
- ret = mc_util_get_own_name(&(mc_client->client_name));
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("Filed to get client name %d", ret);
- __mc_client_destroy(mc_client);
- return ret;
- }
-
- ret = mc_ipc_get_dbus_connection(&(mc_client->dconn), &(mc_client->dref_count));
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("error in client init %d", ret);
- __mc_client_destroy(mc_client);
return ret;
}
- ret = mc_db_connect(&mc_client->db_handle);
+ ret = __mc_client_create(&mc_client);
if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("error in connecting to DB %d", ret);
- __mc_client_destroy(mc_client);
+ mc_error("Failed __mc_server_create [%d]", ret);
return ret;
}
mc_error("Error mc_ipc_unregister_all_listener [%d]", ret);
}
- if (mc_client->listeners != NULL) {
- g_list_free(mc_client->listeners);
- }
-
/*Send Disconnection Msg to Server*/
ret = mc_ipc_send_message_to_server(MC_MSG_SERVER_DISCONNECTION, MC_SERVER_DISCONNECTION_MSG);
if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
#include "media_controller_private.h"
#define MAX_RETRY_COUNT 3
-#define MAX_WAIT_COUNT 3
+#define MAX_WAIT_COUNT 100
#define MC_SVC_NAME "mediacontroller"
-GMainLoop *g_wait_mainloop = NULL;
-
-static gboolean __timeout_func(gpointer data)
-{
- mc_debug("Timeout!");
- g_main_loop_quit((GMainLoop *) data);
- return FALSE;
-}
-
-static void __wait_for_activate()
-{
- int timeout_id = 0;
- g_wait_mainloop = g_main_loop_new(NULL, FALSE);
-
- timeout_id = g_timeout_add(500, __timeout_func, g_wait_mainloop);
- g_main_loop_run(g_wait_mainloop);
- g_source_remove(timeout_id);
- g_main_loop_unref(g_wait_mainloop);
- g_wait_mainloop = NULL;
-}
-
/* This checks if service daemon is running */
static gboolean __is_service_activated()
{
gboolean ret = FALSE;
- DIR *pdir;
- struct dirent pinfo;
- struct dirent *result = NULL;
-
- pdir = opendir("/proc");
- if (pdir == NULL) {
- mc_error("err: NO_DIR");
+ ret = mc_ipc_send_message_to_server(MC_MSG_SERVER_CONNECTION, MC_SERVER_CONNECTION_MSG);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("Failed to mc_ipc_send_message_to_server [%d]", ret);
return FALSE;
}
- while (!readdir_r(pdir, &pinfo, &result)) {
- if (result == NULL)
- break;
-
- if (pinfo.d_type != 4 || pinfo.d_name[0] == '.'
- || pinfo.d_name[0] > 57)
- continue;
-
- FILE *fp;
- char buff[128];
- char path[128];
-
- snprintf(path, sizeof(path), "/proc/%s/status", pinfo.d_name);
- fp = fopen(path, "rt");
- if (fp) {
- if (fgets(buff, 128, fp) == NULL)
- mc_error("fgets failed");
- fclose(fp);
-
- if (strstr(buff, MC_SVC_NAME)) {
- mc_error("%s proc is already running", buff);
- ret = TRUE;
- break;
- }
- } else {
- mc_error("Can't read file [%s]", path);
- }
- }
-
- closedir(pdir);
-
- return ret;
+ return TRUE;
}
static char *__make_key_for_map(const char *main_key, const char *sub_key)
mc_ipc_delete_client_socket(&sock_info);
while((__is_service_activated() == FALSE) && (retrycount++ < MAX_WAIT_COUNT)) {
- __wait_for_activate();
+ usleep(200000);
+ mc_error("retry count: %d", retrycount);
}
mc_debug("CONNECT OK");
#include "media_controller_private.h"
#include "media_controller_db.h"
-static int __mc_server_create(media_controller_server_s **mc_server, const char *server_name)
+static int __mc_server_create(media_controller_server_s **mc_server)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
media_controller_server_s *_server = NULL;
mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
- mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "service_name is NULL");
_server = (media_controller_server_s *)calloc(1, sizeof(media_controller_server_s));
mc_retvm_if(_server == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "Error allocation memory");
- _server->server_name = strdup(server_name);
- if (_server->server_name == NULL) {
- mc_error("Error allocation memory");
- ret = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
+ ret = mc_util_get_own_name(&(_server->server_name));
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("Failed to get server_name [%d]", ret);
goto ERROR;
}
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_error("fail to mc_db_disconnect");
}
+ if (mc_server->listeners != NULL) {
+ g_list_free(mc_server->listeners);
+ }
+
MC_SAFE_FREE(mc_server->server_name);
if (mc_server->metadata) {
int mc_server_create(mc_server_h *server)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
- char *server_name = NULL;
media_controller_server_s *mc_server = NULL;
bool table_exist = FALSE;
mc_retvm_if(server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is null");
- mc_server = (media_controller_server_s *)calloc(1, sizeof(media_controller_server_s));
- mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "Error allocation memory");
-
/*Try Socket Activation by systemd*/
ret = mc_ipc_service_connect();
if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
mc_error("Failed to get mc_ipc_service_connect [%d]", ret);
- }
-
- /*Send Connection Msg to Server*/
- ret = mc_ipc_send_message_to_server(MC_MSG_SERVER_CONNECTION, MC_SERVER_CONNECTION_MSG);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("Failed to mc_ipc_send_message_to_server [%d]", ret);
return ret;
}
- ret = mc_util_get_own_name(&server_name);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("Failed to get server_name [%d]", ret);
- return ret;
- }
-
- ret = __mc_server_create(&mc_server, server_name);
+ ret = __mc_server_create(&mc_server);
if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
mc_error("fail __mc_server_create [%d]", ret);
- MC_SAFE_FREE(server_name);
- __mc_server_destoy(mc_server);
- return ret;
- }
-
- MC_SAFE_FREE(server_name);
-
- mc_server->listeners = g_list_alloc();
- if (mc_server->listeners == NULL) {
- ret = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
- mc_error("Error allocation list %d", ret);
__mc_server_destoy(mc_server);
return ret;
}
mc_error("fail mc_ipc_unregister_all_listener [%d]", ret);
}
- if (mc_server->listeners != NULL) {
- g_list_free(mc_server->listeners);
- }
-
ret = mc_db_delete_server_address_from_table(mc_server->db_handle, MC_DB_TABLE_SERVER_LIST, mc_server->server_name);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("fail mc_db_delete_server_address_from_table [%d]", ret);