- Reduce the socket IPC, it will be sent just 1 time for create/destroy APIs.
Change-Id: I10d2f7d2a0601e32588299bdf99c84508d570cd3
#include <bundle.h>
#include <media_controller_db_util.h>
-int mc_db_create_server_table(const char *server_name);
-int mc_db_delete_server_table(const char *server_name);
gboolean mc_db_is_server_table_exist(void *handle, const char *server_name);
gboolean _mc_db_is_activated_client(void *handle, const char *client_name);
gboolean _mc_db_is_activated_server(void *handle, const char *server_name);
int mc_db_get_playlist_by_name(void *handle, mc_priv_type_e type, const char *controller_name, const char *playlist_name, mc_playlist_h *playlist);
int _mc_db_get_playlist_item_count(void *handle, const char *server_name, char *playlist_name);
int mc_db_get_playlist_item(void *handle, const char *server_name, char *playlist_name, mc_playlist_item_cb callback, void *user_data);
-int mc_db_insert_server_address_into_server_list(const char *address);
-int mc_db_delete_server_address_from_server_list(const char *address);
-int mc_db_insert_client_address_into_client_list(const char *address);
-int mc_db_delete_client_address_from_client_list(const char *address);
int mc_db_foreach_server_list(void *handle, mc_activated_server_cb callback, void *user_data);
int mc_db_foreach_client_list(void *handle, mc_activated_client_cb callback, void *user_data);
#define MC_EVENT_REPLY "_event_reply_"
-#define MC_DB_CMD_CREATE_SERVER "DB_CMD_CREATE_SERVER" /* Create New Server Table*/
-#define MC_DB_CMD_UPDATE_SERVER_LIST "DB_CMD_UPDATE_SERVER_LIST" /* Update Server Name*/
-#define MC_DB_CMD_UPDATE_CLIENT_LIST "DB_CMD_UPDATE_CLIENT_LIST" /* Update Client Name*/
#define MC_DB_CMD_UPDATE_PLAYBACK "DB_CMD_UPDATE_PLAYBACK" /* Update Server Playback info*/
#define MC_DB_CMD_UPDATE_STATE_PLAYBACK "DB_CMD_UPDATE_STATE_PLAYBACK" /* Update Server State and Playback state*/
#define MC_DB_CMD_UPDATE_META "DB_CMD_UPDATE_META" /* Update Server Meta info*/
#define MC_DB_CMD_UPDATE_ICON "DB_CMD_UPDATE_ICON" /* Update Server Icon*/
#define MC_DB_CMD_UPDATE_ABILITY "DB_CMD_UPDATE_ABILITY" /* Update Server abilities*/
-#define MC_DB_CMD_REMOVE_SERVER "DB_CMD_REMOVE_SERVER" /* Remove Server info*/
#define MC_DB_CMD_REMOVE_PLAYLIST "DB_CMD_REMOVE_PLAYLIST" /* Remove Server State*/
-#define MC_DB_CMD_REMOVE_SERVER_LIST "DB_CMD_REMOVE_SERVER_LIST" /* Remove Server from Server List*/
-#define MC_DB_CMD_REMOVE_CLIENT_LIST "DB_CMD_REMOVE_CLIENT_LIST" /* Remove Client from Client List*/
#define DEFAULT_USER_UID 5001 /* owner */
mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
/*Send Disconnection Msg to Server*/
- ret = mc_ipc_send_message_to_server(MC_MSG_SERVER_DISCONNECTION, MC_PRIV_TYPE_CLIENT, MC_SERVER_DISCONNECTION_MSG);
+ ret = mc_ipc_send_message_to_server(MC_MSG_SERVER_DISCONNECTION, MC_PRIV_TYPE_CLIENT, mc_client->client_name);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("Failed to mc_ipc_send_message_to_server [%d]", ret);
return ret;
}
- ret = mc_db_delete_client_address_from_client_list(mc_client->client_name);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE)
- mc_error("mc_db_delete_client_address_from_client_list failed [%d]", ret);
-
- ret = mc_db_insert_client_address_into_client_list(mc_client->client_name);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("fail mc_db_insert_server_address_into_table [%d]", ret);
- __mc_client_destroy(mc_client);
- return ret;
- }
-
*client = (mc_client_h)mc_client;
mc_debug_fleave();
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("Error mc_ipc_unregister_all_listener [%d]", ret);
- ret = mc_db_delete_client_address_from_client_list(mc_client->client_name);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE)
- mc_error("fail mc_db_delete_client_address_from_client_list [%d]", ret);
-
ret = __mc_client_destroy(mc_client);
mc_debug_fleave();
return MEDIA_CONTROLLER_ERROR_NONE;
}
-int mc_db_insert_server_address_into_server_list(const char *address)
-{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
- char *sql_str = NULL;
-
- mc_retvm_if(!MC_STRING_VALID(address), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid address");
-
- sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_UPDATE_SERVER_LIST, MC_STRING_DELIMITER, address);
-
- ret = __mc_db_update_db(MC_PRIV_TYPE_SERVER, sql_str);
-
- MC_SAFE_FREE(sql_str);
-
- return ret;
-}
-
-int mc_db_delete_server_address_from_server_list(const char *address)
-{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
- char *sql_str = NULL;
-
- mc_retvm_if(!MC_STRING_VALID(address), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid address");
-
- sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_REMOVE_SERVER_LIST, MC_STRING_DELIMITER, address);
-
- ret = __mc_db_update_db(MC_PRIV_TYPE_SERVER, sql_str);
-
- MC_SAFE_FREE(sql_str);
-
- return ret;
-}
-
-int mc_db_insert_client_address_into_client_list(const char *address)
-{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
- char *sql_str = NULL;
-
- mc_retvm_if(!MC_STRING_VALID(address), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid address");
-
- sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_UPDATE_CLIENT_LIST, MC_STRING_DELIMITER, address);
-
- ret = __mc_db_update_db(MC_PRIV_TYPE_CLIENT, sql_str);
-
- MC_SAFE_FREE(sql_str);
-
- return ret;
-}
-
-int mc_db_delete_client_address_from_client_list(const char *address)
-{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
- char *sql_str = NULL;
-
- mc_retvm_if(!MC_STRING_VALID(address), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid address");
-
- sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_REMOVE_CLIENT_LIST, MC_STRING_DELIMITER, address);
-
- ret = __mc_db_update_db(MC_PRIV_TYPE_CLIENT, sql_str);
-
- MC_SAFE_FREE(sql_str);
-
- return ret;
-}
-
-int mc_db_create_server_table(const char *server_name)
-{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
- char *sql_str = NULL;
-
- mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
-
- sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_CREATE_SERVER, MC_STRING_DELIMITER, server_name);
-
- ret = __mc_db_update_db(MC_PRIV_TYPE_SERVER, sql_str);
-
- MC_SAFE_FREE(sql_str);
-
- return ret;
-}
-
-int mc_db_delete_server_table(const char *server_name)
-{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
- char *sql_str = NULL;
-
- mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
-
- sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_REMOVE_SERVER, MC_STRING_DELIMITER, server_name);
-
- ret = __mc_db_update_db(MC_PRIV_TYPE_SERVER, sql_str);
-
- MC_SAFE_FREE(sql_str);
-
- return ret;
-}
-
gboolean mc_db_is_server_table_exist(void *handle, const char *server_name)
{
char *sql_str = NULL;
mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
/*Send Disconnection Msg to Server*/
- ret = mc_ipc_send_message_to_server(MC_MSG_SERVER_DISCONNECTION, MC_PRIV_TYPE_SERVER, MC_SERVER_DISCONNECTION_MSG);
+ ret = mc_ipc_send_message_to_server(MC_MSG_SERVER_DISCONNECTION, MC_PRIV_TYPE_SERVER, mc_server->server_name);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("Failed to mc_ipc_send_message_to_server [%d]", ret);
mc_search_destroy((mc_search_h)mc_search);
}
-static int __mc_server_current_is_latest(media_controller_server_s *mc_server, bool *is_latest)
-{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
- char *latest_server_name = NULL;
-
- *is_latest = FALSE;
-
- ret = mc_db_get_latest_server_name(mc_server->db_handle, &latest_server_name);
- mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail mc_db_get_latest_server_name");
-
- if ((latest_server_name != NULL) && (mc_server->server_name != NULL)) {
- if (!g_strcmp0(latest_server_name, mc_server->server_name))
- *is_latest = TRUE;
- }
-
- MC_SAFE_FREE(latest_server_name);
- return MEDIA_CONTROLLER_ERROR_NONE;
-}
-
static int __mc_server_send_message(media_controller_server_s *mc_server, const char *interface_name, const char *signal_name, const int param1, const unsigned long long param2, const char* param3)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
media_controller_server_s *mc_server = NULL;
- bool table_exist = FALSE;
- bool is_latest = FALSE;
mc_debug_fenter();
return ret;
}
- table_exist = mc_db_is_server_table_exist(mc_server->db_handle, mc_server->server_name);
-
- ret = __mc_server_current_is_latest(mc_server, &is_latest);
-
- if (table_exist && is_latest) {
- //To keep latest server's metadata
- ret = mc_db_delete_server_address_from_server_list(mc_server->server_name);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("mc_db_delete_server_address_from_server_list failed [%d]", ret);
- __mc_server_destoy(mc_server);
- return ret;
- }
-
- ret = mc_db_update_server_and_playback_state(mc_server->server_name, MC_SERVER_STATE_ACTIVATE, MC_PLAYBACK_STATE_STOPPED);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("mc_db_update_server_and_playback_state failed [%d]", ret);
- __mc_server_destoy(mc_server);
- return ret;
- }
-
- } else if (table_exist) {
- ret = mc_db_delete_server_table(mc_server->server_name);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("mc_db_delete_server_table failed [%d]", ret);
- __mc_server_destoy(mc_server);
- return ret;
- }
- ret = mc_db_delete_server_address_from_server_list(mc_server->server_name);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("mc_db_delete_server_address_from_server_list failed [%d]", ret);
- __mc_server_destoy(mc_server);
- return ret;
- }
- }
-
- if (!(table_exist && is_latest)) {
- ret = mc_db_create_server_table(mc_server->server_name);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("fail mc_db_clear_table [%d]", ret);
- __mc_server_destoy(mc_server);
- return ret;
- }
- }
-
- ret = mc_db_insert_server_address_into_server_list(mc_server->server_name);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
- mc_error("fail mc_db_insert_server_address_into_table [%d]", ret);
- __mc_server_destoy(mc_server);
- return ret;
- }
-
ret = __mc_server_send_message(mc_server, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_SERVER_STATE, MC_SERVER_STATE_ACTIVATE, 0, NULL);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("Error __mc_server_send_message [%d]", ret);
int mc_server_destroy(mc_server_h server)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
- bool is_latest = FALSE;
media_controller_server_s *mc_server = (media_controller_server_s *)server;
mc_debug_fenter();
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("fail mc_ipc_unregister_all_listener [%d]", ret);
- ret = mc_db_delete_server_address_from_server_list(mc_server->server_name);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE)
- mc_error("fail mc_db_delete_server_address_from_server_list [%d]", ret);
-
- ret = __mc_server_current_is_latest(mc_server, &is_latest);
- if (is_latest) {
- ret = mc_db_update_server_and_playback_state(mc_server->server_name, MC_SERVER_STATE_DEACTIVATE, MC_PLAYBACK_STATE_STOPPED);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE)
- mc_error("mc_db_update_server_and_playback_state failed [%d]", ret);
- } else {
- ret = mc_db_delete_server_table(mc_server->server_name);
- if (ret != MEDIA_CONTROLLER_ERROR_NONE)
- mc_error("fail mc_db_delete_server_table [%d]", ret);
- }
-
ret = __mc_server_send_message(mc_server, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_SERVER_STATE, MC_SERVER_STATE_DEACTIVATE, 0, NULL);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("Error __mc_server_send_message [%d]", ret);
int mc_db_util_init_latest_server_table(void *handle);
int mc_db_parse_and_update_db(uid_t uid, const char *data, int data_size);
int mc_db_util_remove_dead_application(uid_t uid, const char *app_id, mc_priv_type_e priv_type);
+int mc_db_util_activate_server_table(uid_t uid, const char *app_id);
+int mc_db_util_deactivate_server_table(uid_t uid, const char *app_id);
+int mc_db_util_insert_to_list(uid_t uid, const char *app_id, mc_priv_type_e priv_type);
+int mc_db_util_delete_from_list(uid_t uid, const char *app_id, mc_priv_type_e priv_type);
#endif /*__TIZEN_MULTIMEDIA_MEDIA_CONTROLLER_DB_UTIL_H__*/
#define MC_DB_TRIGGER_PLAYLIST "cleanup_playlist"
#define DB_SELECT_ALL_SERVER_LIST_EXCEPT_LATEST "SELECT name FROM SQLITE_MASTER WHERE type='table' AND (name != '%q') AND (name NOT IN (SELECT server_name FROM "MC_DB_TABLE_LATEST_SERVER"));"
+#define DB_INSERT_TO_SERVER_LIST "INSERT OR IGNORE INTO "MC_DB_TABLE_SERVER_LIST" (server_name) VALUES ('%q');"
+#define DB_INSERT_TO_CLIENT_LIST "INSERT OR IGNORE INTO "MC_DB_TABLE_CLIENT_LIST" (client_name) VALUES ('%q');"
#define DB_DELETE_FROM_SERVER_LIST "DELETE FROM "MC_DB_TABLE_SERVER_LIST" WHERE (server_name = '%q');"
#define DB_DELETE_FROM_CLIENT_LIST "DELETE FROM "MC_DB_TABLE_CLIENT_LIST" WHERE (client_name = '%q');"
#define DB_UPDATE_STATE_PLAYBACK "UPDATE '%q' SET server_state=%d, playback_state=%d;"
#define DB_DROP_TABLE "DROP TABLE IF EXISTS '%q';"
#define DB_META_FIELD "title TEXT, artist TEXT, album TEXT, author TEXT, genre TEXT, duration INTEGER DEFAULT 0, date TEXT, copyright TEXT, description TEXT, track_num TEXT, picture TEXT, season TEXT, episode TEXT, resolution TEXT, "
+#define DB_CREATE_SERVER_TABLE "DROP TABLE IF EXISTS '%q'; CREATE TABLE IF NOT EXISTS '%q' (\
+ server_name TEXT PRIMARY KEY, \
+ server_state INTEGER DEFAULT 1, \
+ playback_state INTEGER DEFAULT 0, \
+ playback_position INTEGER DEFAULT 0, \
+ playlist_name TEXT, \
+ playlist_index TEXT, \
+ playback_content_type INTEGER DEFAULT 4, \
+ age_rating INTEGER DEFAULT 0, \
+ %s \
+ shuffle_mode INTEGER DEFAULT 1, \
+ repeat_mode INTEGER DEFAULT 1, \
+ icon_uri TEXT, \
+ ability_decided INTEGER DEFAULT 0, \
+ ability_supported INTEGER DEFAULT 0 \
+ );INSERT INTO '%q' (server_name) VALUES ('%q');"
#define MC_DB_NAME ".media_controller.db"
#define REGULAR_USER 5000
return server_name;
}
+static gboolean __mc_db_is_latest(void *handle, const char *server_name)
+{
+ gboolean is_latest = FALSE;
+ char *latest_server_name = NULL;
+
+ latest_server_name = __mc_db_get_latest_server_name(handle);
+ if (g_strcmp0(server_name, latest_server_name) == 0)
+ is_latest = TRUE;
+
+ MC_SAFE_G_FREE(latest_server_name);
+
+ return is_latest;
+}
+
static int __mc_update_dead_server(void *handle, const char *server_name)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
char *sql_str = NULL;
- char *latest_server_name = NULL;
mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
mc_retvm_if(!MC_STRING_VALID(server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is invalid");
- latest_server_name = __mc_db_get_latest_server_name(handle);
-
/* Update server_state to deactivated, if the server is latest.
* Drop the table of server_name, if it is not latest.
*/
- if (g_strcmp0(server_name, latest_server_name) == 0)
+ if (__mc_db_is_latest(handle, server_name))
sql_str = sqlite3_mprintf(DB_UPDATE_STATE_PLAYBACK, server_name, MC_SERVER_STATE_DEACTIVATE, MC_PLAYBACK_STATE_STOPPED);
else
sql_str = sqlite3_mprintf(DB_DROP_TABLE, server_name);
- MC_SAFE_FREE(latest_server_name);
mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null");
ret = mc_db_util_update_db(handle, sql_str);
goto ERROR;
}
- if (strncmp(MC_DB_CMD_CREATE_SERVER, params[0], strlen(MC_DB_CMD_CREATE_SERVER)) == 0) {
- sql_str = sqlite3_mprintf("CREATE TABLE IF NOT EXISTS '%q' (\
- server_name TEXT PRIMARY KEY, \
- server_state INTEGER DEFAULT 1, \
- playback_state INTEGER DEFAULT 0, \
- playback_position INTEGER DEFAULT 0, \
- playlist_name TEXT, \
- playlist_index TEXT, \
- playback_content_type INTEGER DEFAULT 4, \
- age_rating INTEGER DEFAULT 0, \
- %s \
- shuffle_mode INTEGER DEFAULT 1, \
- repeat_mode INTEGER DEFAULT 1, \
- icon_uri TEXT, \
- ability_decided INTEGER DEFAULT 0, \
- ability_supported INTEGER DEFAULT 0 \
- );INSERT INTO '%q' (server_name) VALUES ('%q');",
- params[1], DB_META_FIELD, params[1], params[1]);
-
- } else if (strncmp(MC_DB_CMD_UPDATE_SERVER_LIST, params[0], strlen(MC_DB_CMD_UPDATE_SERVER_LIST)) == 0) {
- sql_str = sqlite3_mprintf("INSERT INTO '%q' (server_name) VALUES ('%q');", MC_DB_TABLE_SERVER_LIST, params[1]);
-
- } else if (strncmp(MC_DB_CMD_UPDATE_CLIENT_LIST, params[0], strlen(MC_DB_CMD_UPDATE_CLIENT_LIST)) == 0) {
- sql_str = sqlite3_mprintf("INSERT INTO '%q' (client_name) VALUES ('%q');", MC_DB_TABLE_CLIENT_LIST, params[1]);
-
- } else if (strncmp(MC_DB_CMD_UPDATE_STATE_PLAYBACK, params[0], strlen(MC_DB_CMD_UPDATE_STATE_PLAYBACK)) == 0) {
+ if (strncmp(MC_DB_CMD_UPDATE_STATE_PLAYBACK, params[0], strlen(MC_DB_CMD_UPDATE_STATE_PLAYBACK)) == 0) {
if (params[2] == NULL || params[3] == NULL) {
mc_error("wrong query");
ret = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
sql_str = sqlite3_mprintf("UPDATE '%q' SET ability_decided=%llu, ability_supported=%llu;", params[1], llu_value, llu_value2);
- } else if (strncmp(MC_DB_CMD_REMOVE_SERVER_LIST, params[0], strlen(MC_DB_CMD_REMOVE_SERVER_LIST)) == 0) {
- sql_str = sqlite3_mprintf(DB_DELETE_FROM_SERVER_LIST, params[1]);
-
- } else if (strncmp(MC_DB_CMD_REMOVE_CLIENT_LIST, params[0], strlen(MC_DB_CMD_REMOVE_CLIENT_LIST)) == 0) {
- sql_str = sqlite3_mprintf(DB_DELETE_FROM_CLIENT_LIST, params[1]);
-
- } else if (strncmp(MC_DB_CMD_REMOVE_SERVER, params[0], strlen(MC_DB_CMD_REMOVE_SERVER)) == 0) {
- sql_str = sqlite3_mprintf(DB_DROP_TABLE, params[1]);
-
} else if (strncmp(MC_DB_CMD_REMOVE_PLAYLIST, params[0], strlen(MC_DB_CMD_REMOVE_PLAYLIST)) == 0) {
if (params[2] == NULL) {
mc_error("wrong query");
return ret;
}
+int mc_db_util_activate_server_table(uid_t uid, const char *app_id)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+ void* _db_handle = NULL;
+
+ mc_debug_fenter();
+
+ mc_retvm_if(app_id == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "message is NULL");
+
+ ret = mc_db_connect(&_db_handle, uid, TRUE);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("mc_db_connect error : %d", ret);
+ goto ERROR;
+ }
+
+ if (__mc_db_is_latest(_db_handle, app_id))
+ sql_str = sqlite3_mprintf(DB_UPDATE_STATE_PLAYBACK, app_id, MC_SERVER_STATE_ACTIVATE, MC_PLAYBACK_STATE_STOPPED);
+ else
+ sql_str = sqlite3_mprintf(DB_CREATE_SERVER_TABLE, app_id, app_id, DB_META_FIELD, app_id, app_id);
+
+ if (sql_str == NULL) {
+ mc_error("sql_str is NULL");
+ ret = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
+ goto ERROR;
+ }
+
+ ret = mc_db_util_update_db(_db_handle, sql_str);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("media_db_update_db error : %d", ret);
+
+ERROR:
+ SQLITE3_SAFE_FREE(sql_str);
+ mc_db_disconnect(_db_handle);
+
+ mc_debug_fleave();
+
+ return ret;
+}
+
+int mc_db_util_deactivate_server_table(uid_t uid, const char *app_id)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+ void* _db_handle = NULL;
+
+ mc_debug_fenter();
+
+ mc_retvm_if(app_id == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "message is NULL");
+
+ ret = mc_db_connect(&_db_handle, uid, TRUE);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("mc_db_connect error : %d", ret);
+ goto ERROR;
+ }
+
+ if (__mc_db_is_latest(_db_handle, app_id))
+ sql_str = sqlite3_mprintf(DB_UPDATE_STATE_PLAYBACK, app_id, MC_SERVER_STATE_DEACTIVATE, MC_PLAYBACK_STATE_STOPPED);
+ else
+ sql_str = sqlite3_mprintf(DB_DROP_TABLE, app_id);
+
+ if (sql_str == NULL) {
+ mc_error("sql_str is NULL");
+ ret = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
+ goto ERROR;
+ }
+
+ ret = mc_db_util_update_db(_db_handle, sql_str);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("media_db_update_db error : %d", ret);
+
+ERROR:
+ SQLITE3_SAFE_FREE(sql_str);
+ mc_db_disconnect(_db_handle);
+
+ mc_debug_fleave();
+
+ return ret;
+}
+
+int mc_db_util_insert_to_list(uid_t uid, const char *app_id, mc_priv_type_e priv_type)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+ void* _db_handle = NULL;
+
+ mc_debug_fenter();
+
+ mc_retvm_if(app_id == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "message is NULL");
+
+ mc_secure_debug("[uid: %d] app_id: %s, priv_type: %d", uid, app_id, priv_type);
+
+ if (priv_type == MC_PRIV_TYPE_SERVER) {
+ sql_str = sqlite3_mprintf(DB_INSERT_TO_SERVER_LIST, app_id, app_id);
+ } else if (priv_type == MC_PRIV_TYPE_CLIENT) {
+ sql_str = sqlite3_mprintf(DB_INSERT_TO_CLIENT_LIST, app_id, app_id);
+ } else {
+ mc_error("invalid priv_type (%d)", priv_type);
+ mc_debug_fleave();
+ return MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER;
+ }
+ mc_retvm_if(sql_str == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "sql_str is NULL");
+
+ ret = mc_db_connect(&_db_handle, uid, TRUE);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("mc_db_connect error : %d", ret);
+ goto ERROR;
+ }
+
+ ret = mc_db_util_update_db(_db_handle, sql_str);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("media_db_update_db error : %d", ret);
+
+ERROR:
+ SQLITE3_SAFE_FREE(sql_str);
+ mc_db_disconnect(_db_handle);
+
+ mc_debug_fleave();
+
+ return ret;
+}
+
+int mc_db_util_delete_from_list(uid_t uid, const char *app_id, mc_priv_type_e priv_type)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+ void* _db_handle = NULL;
+
+ mc_debug_fenter();
+
+ mc_retvm_if(app_id == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "message is NULL");
+
+ mc_secure_debug("[uid: %d] app_id: %s, priv_type: %d", uid, app_id, priv_type);
+
+ if (priv_type == MC_PRIV_TYPE_SERVER) {
+ sql_str = sqlite3_mprintf(DB_DELETE_FROM_SERVER_LIST, app_id);
+ } else if (priv_type == MC_PRIV_TYPE_CLIENT) {
+ sql_str = sqlite3_mprintf(DB_DELETE_FROM_CLIENT_LIST, app_id);
+ } else {
+ mc_error("invalid priv_type (%d)", priv_type);
+ mc_debug_fleave();
+ return MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER;
+ }
+ mc_retvm_if(sql_str == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "sql_str is NULL");
+
+ ret = mc_db_connect(&_db_handle, uid, TRUE);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("mc_db_connect error : %d", ret);
+ goto ERROR;
+ }
+
+ ret = mc_db_util_update_db(_db_handle, sql_str);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("media_db_update_db error : %d", ret);
+
+ERROR:
+ SQLITE3_SAFE_FREE(sql_str);
+ mc_db_disconnect(_db_handle);
+
+ mc_debug_fleave();
+
+ return ret;
+}
+
int mc_db_util_remove_dead_application(uid_t uid, const char *app_id, const mc_priv_type_e priv_type)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
}
}
+static int __mc_service_add_to_db(mc_comm_msg_s *request_msg)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ mc_debug_fenter();
+
+ mc_retvm_if(!request_msg, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid request message");
+ mc_retvm_if(!request_msg->msg, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid message");
+ mc_retvm_if(((request_msg->priv_type != MC_PRIV_TYPE_SERVER) && (request_msg->priv_type != MC_PRIV_TYPE_CLIENT)), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid priv_type[%d]", request_msg->priv_type);
+
+ ret = mc_db_util_insert_to_list(request_msg->uid, request_msg->msg, request_msg->priv_type);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "mc_db_util_insert_to_list failed (%d)", ret);
+
+ if (request_msg->priv_type == MC_PRIV_TYPE_SERVER) {
+ ret = mc_db_util_activate_server_table(request_msg->uid, request_msg->msg);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_secure_error("mc_db_util_activate_server_table failed (%d)", ret);
+ mc_db_util_delete_from_list(request_msg->uid, request_msg->msg, request_msg->priv_type);
+ }
+ }
+
+ mc_debug_fleave();
+
+ return ret;
+}
+
+static int __mc_service_remove_from_db(mc_comm_msg_s *request_msg)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ mc_debug_fenter();
+
+ mc_retvm_if(!request_msg, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid request message");
+ mc_retvm_if(!request_msg->msg, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid message");
+ mc_retvm_if(((request_msg->priv_type != MC_PRIV_TYPE_SERVER) && (request_msg->priv_type != MC_PRIV_TYPE_CLIENT)), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid priv_type[%d]", request_msg->priv_type);
+
+ ret = mc_db_util_delete_from_list(request_msg->uid, request_msg->msg, request_msg->priv_type);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "mc_db_util_insert_to_list failed (%d)", ret);
+
+ if (request_msg->priv_type == MC_PRIV_TYPE_SERVER) {
+ ret = mc_db_util_deactivate_server_table(request_msg->uid, request_msg->msg);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_secure_error("mc_db_util_deactivate_server_table failed (%d)", ret);
+ }
+
+ mc_debug_fleave();
+
+ return ret;
+}
+
static int __mc_notify_server_updated(const char *server_name, mc_server_state_e state)
{
char *message = NULL;
} else if (request_msg->msg_type == MC_MSG_SERVER_CONNECTION) {
if (MC_STRING_VALID(request_msg->msg)) {
send_msg = _mc_service_add_connection(&(_service_data->connected), request_msg);
+ if (send_msg == MEDIA_CONTROLLER_ERROR_NONE)
+ send_msg = __mc_service_add_to_db(request_msg);
} else {
mc_error("Wrong message!");
send_msg = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
}
} else if (request_msg->msg_type == MC_MSG_SERVER_DISCONNECTION) {
- if (request_msg->msg_size < strlen(MC_SERVER_DISCONNECTION_MSG)) {
- mc_error("Wrong message!");
- send_msg = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
- goto ERROR;
- }
- if (strncmp(request_msg->msg, MC_SERVER_DISCONNECTION_MSG, request_msg->msg_size) == 0) {
+ if (MC_STRING_VALID(request_msg->msg)) {
send_msg = _mc_service_remove_connection(&(_service_data->connected), request_msg);
+ if (send_msg == MEDIA_CONTROLLER_ERROR_NONE)
+ send_msg = __mc_service_remove_from_db(request_msg);
} else {
mc_error("Wrong message!");
send_msg = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;