#define DB_SELECT_METADATA_FROM_DB "SELECT * FROM '%q';"
#define DB_SELECT_VALUE_OF_KEY "SELECT %s FROM '%q';"
-#define DB_UPDATE_SHUFFLE_MODE_INTO_SERVER_TABLE "UPDATE '%q' SET shuffle_mode=%d;"
-#define DB_UPDATE_REPEAT_MODE_INTO_SERVER_TABLE "UPDATE '%q' SET repeat_mode=%d;"
-#define DB_UPDATE_METADATA_INFO_INFO_SERVER_TABLE "UPDATE '%q' SET title=%Q, artist=%Q, album=%Q, author=%Q, genre=%Q, duration=%Q, date=%Q, copyright=%Q, description=%Q, track_num=%Q, picture=%Q"
-
-#define DB_INSERT_INTO_SERVER_TABLE "INSERT INTO '%q' (server_name) VALUES ('%q');"
-#define DB_DELETE_FROM_SERVER_TABLE "DELETE FROM %q WHERE server_name = '%q';"
-
#define DB_SELECT_LATEST_SERVER_NAME "SELECT server_name FROM "MC_DB_TABLE_LATEST_SERVER";"
#define DB_SELECT_ALL_SERVER_LIST "SELECT server_name FROM "MC_DB_TABLE_SERVER_LIST";"
int mc_db_get_repeat_mode(void *handle, const char *server_name, mc_repeat_mode_e *mode);
int mc_db_get_playlist(void *handle, const char *server_name, char **playlist_name, bundle **playlist);
-int mc_db_insert_server_address_into_table(void *db_handle, const char *table_name, char *address);
-int mc_db_delete_server_address_from_table(void *db_handle, const char *table_name, char *address);
+int mc_db_insert_server_address_into_server_list(void *db_handle, const char *address);
+int mc_db_delete_server_address_from_table(void *db_handle, const char *address);
int mc_db_foreach_server_list(void *handle, mc_activated_server_cb callback, void *user_data);
-int mc_db_update_server_state(void *handle, const char *server_name, mc_server_state_e server_state);
int mc_db_update_server_and_playback_state(void *handle, const char *server_name, mc_server_state_e server_state, mc_playback_states_e playback_state);
int mc_db_update_latest_server_table(void *handle, const char *server_name);
int mc_db_remove_playlist(void *handle, const char *server_name);
#define MC_COMMAND_PLAY_PLAYLIST "_playlist_cmd_"
+#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_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_SHUFFLE "DB_CMD_UPDATE_SHUFFLE" /* Update Server Shuffle mode*/
+#define MC_DB_CMD_UPDATE_REPEAT "DB_CMD_UPDATE_REPEAT" /* Update Server Repeat mode*/
+#define MC_DB_CMD_UPDATE_LATEST "DB_CMD_UPDATE_LATEST" /* Update Latest Server info*/
+#define MC_DB_CMD_UPDATE_PLAYLIST "DB_CMD_UPDATE_PLAYLIST" /* Update Server Playlist*/
+#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 DEFAULT_USER_UID 5001 /* owner */
#define MC_MILLISEC_SLEEP(msec) \
Name: capi-media-controller
Summary: A media controller library in Tizen Native API
-Version: 0.1.56
+Version: 0.1.57
Release: 1
Group: Multimedia/API
License: Apache-2.0
mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
- sql_str = sqlite3_mprintf("UPDATE '%q' SET playback_state=%d, playback_position=%llu, playlist_index=%Q;", server_name, playback_state, playback_position, index);
+ sql_str = g_strdup_printf("%s%s%s%s%d%s%llu%s%s", MC_DB_CMD_UPDATE_PLAYBACK, MC_STRING_DELIMITER,
+ server_name, MC_STRING_DELIMITER,
+ playback_state, MC_STRING_DELIMITER,
+ playback_position, MC_STRING_DELIMITER,
+ index);
+ mc_retvm_if(sql_str == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail making sql_str");
ret = __mc_db_update_db(handle, sql_str);
- SQLITE3_SAFE_FREE(sql_str);
+ MC_SAFE_FREE(sql_str);
return ret;
}
mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
- sql_str = sqlite3_mprintf(DB_UPDATE_METADATA_INFO_INFO_SERVER_TABLE, server_name,
- title, artist, album, author, genre, duration, date, copyright, description, track_num, picture);
+ sql_str = g_strdup_printf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", MC_DB_CMD_UPDATE_META, MC_STRING_DELIMITER, server_name, MC_STRING_DELIMITER,
+ title, MC_STRING_DELIMITER,
+ artist, MC_STRING_DELIMITER,
+ album, MC_STRING_DELIMITER,
+ author, MC_STRING_DELIMITER,
+ genre, MC_STRING_DELIMITER,
+ duration, MC_STRING_DELIMITER,
+ date, MC_STRING_DELIMITER,
+ copyright, MC_STRING_DELIMITER,
+ description, MC_STRING_DELIMITER,
+ track_num, MC_STRING_DELIMITER,
+ picture);
+
ret = __mc_db_update_db(handle, sql_str);
- SQLITE3_SAFE_FREE(sql_str);
+ MC_SAFE_FREE(sql_str);
return ret;
}
mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
- sql_str = sqlite3_mprintf(DB_UPDATE_SHUFFLE_MODE_INTO_SERVER_TABLE, server_name, shuffle_mode);
+ sql_str = g_strdup_printf("%s%s%s%s%d", MC_DB_CMD_UPDATE_SHUFFLE, MC_STRING_DELIMITER, server_name, MC_STRING_DELIMITER, shuffle_mode);
ret = __mc_db_update_db(handle, sql_str);
- SQLITE3_SAFE_FREE(sql_str);
+ MC_SAFE_FREE(sql_str);
return ret;
}
mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
- sql_str = sqlite3_mprintf(DB_UPDATE_REPEAT_MODE_INTO_SERVER_TABLE, server_name, repeat_mode);
+ sql_str = g_strdup_printf("%s%s%s%s%d", MC_DB_CMD_UPDATE_REPEAT, MC_STRING_DELIMITER, server_name, MC_STRING_DELIMITER, repeat_mode);
ret = __mc_db_update_db(handle, sql_str);
- SQLITE3_SAFE_FREE(sql_str);
+ MC_SAFE_FREE(sql_str);
return ret;
}
return __db_get_playlist(handle, server_name, playlist_name, playlist);
}
-int mc_db_insert_server_address_into_table(void *handle, const char *table_name, char *address)
+int mc_db_insert_server_address_into_server_list(void *handle, const char *address)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
char *sql_str = NULL;
mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+ mc_retvm_if(!MC_STRING_VALID(address), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid address");
- sql_str = sqlite3_mprintf(DB_INSERT_INTO_SERVER_TABLE, table_name, address);
+ sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_UPDATE_SERVER_LIST, MC_STRING_DELIMITER, address);
ret = __mc_db_update_db(handle, sql_str);
- SQLITE3_SAFE_FREE(sql_str);
+ MC_SAFE_FREE(sql_str);
return ret;
}
-int mc_db_delete_server_address_from_table(void *handle, const char *table_name, char *address)
+int mc_db_delete_server_address_from_table(void *handle, const char *address)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
char *sql_str = NULL;
mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+ mc_retvm_if(!MC_STRING_VALID(address), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid address");
- sql_str = sqlite3_mprintf(DB_DELETE_FROM_SERVER_TABLE, table_name, address);
+ sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_REMOVE_SERVER_LIST, MC_STRING_DELIMITER, address);
ret = __mc_db_update_db(handle, sql_str);
- SQLITE3_SAFE_FREE(sql_str);
+ MC_SAFE_FREE(sql_str);
return ret;
}
mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
- 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_index TEXT, \
- 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, \
- shuffle_mode INTEGER DEFAULT 1, \
- repeat_mode INTEGER DEFAULT 1 \
- );",
- 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(handle, sql_str);
- SQLITE3_SAFE_FREE(sql_str);
+ MC_SAFE_FREE(sql_str);
return ret;
}
mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
- sql_str = sqlite3_mprintf("DROP TABLE IF EXISTS '%q'", 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(handle, sql_str);
- SQLITE3_SAFE_FREE(sql_str);
+ MC_SAFE_FREE(sql_str);
return ret;
}
return MEDIA_CONTROLLER_ERROR_NONE;
}
-int mc_db_update_server_state(void *handle, const char *server_name, mc_server_state_e server_state)
-{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
- char *sql_str = NULL;
-
- mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
- mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
-
- sql_str = sqlite3_mprintf("UPDATE '%q' SET server_state=%d;", server_name, server_state);
-
- ret = __mc_db_update_db(handle, sql_str);
-
- SQLITE3_SAFE_FREE(sql_str);
-
- return ret;
-}
-
int mc_db_update_server_and_playback_state(void *handle, const char *server_name, mc_server_state_e server_state, mc_playback_states_e playback_state)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
- sql_str = sqlite3_mprintf("UPDATE '%q' SET server_state=%d, playback_state=%d;", server_name, server_state, playback_state);
+ sql_str = g_strdup_printf("%s%s%s%s%d%s%d", MC_DB_CMD_UPDATE_STATE_PLAYBACK, MC_STRING_DELIMITER, server_name, MC_STRING_DELIMITER, server_state, MC_STRING_DELIMITER, playback_state);
ret = __mc_db_update_db(handle, sql_str);
- SQLITE3_SAFE_FREE(sql_str);
+ MC_SAFE_FREE(sql_str);
return ret;
}
mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
- sql_str = sqlite3_mprintf("DELETE FROM '%q'; INSERT INTO '%q' (server_name) VALUES ('%q');", MC_DB_TABLE_LATEST_SERVER, MC_DB_TABLE_LATEST_SERVER, server_name);
+ sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_UPDATE_LATEST, MC_STRING_DELIMITER, server_name);
ret = __mc_db_update_db(handle, sql_str);
- SQLITE3_SAFE_FREE(sql_str);
+ MC_SAFE_FREE(sql_str);
return ret;
}
mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
- sql_str = sqlite3_mprintf("DELETE FROM '%q' WHERE server_name='%q';", MC_DB_TABLE_PLAYLIST, server_name);
+ sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_REMOVE_PLAYLIST, MC_STRING_DELIMITER, server_name);
ret = __mc_db_update_db(handle, sql_str);
- SQLITE3_SAFE_FREE(sql_str);
+ MC_SAFE_FREE(sql_str);
return ret;
}
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
char *sql_str = NULL;
- const char *db_fields = "server_name, playlist_name, data, data_size";
bundle_raw *raw_data = NULL;
int size_r = 0;
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail while encoding bundle [%d]", ret);
}
- sql_str = sqlite3_mprintf("INSERT INTO '%q' (%q) VALUES (%Q, %Q, %Q, %d);", MC_DB_TABLE_PLAYLIST, db_fields, server_name, playlist_name, raw_data, size_r);
+ sql_str = g_strdup_printf("%s%s%s%s%s%s%s%s%d", MC_DB_CMD_UPDATE_PLAYLIST, MC_STRING_DELIMITER, server_name,
+ MC_STRING_DELIMITER, playlist_name, MC_STRING_DELIMITER, raw_data, MC_STRING_DELIMITER, size_r);
ret = __mc_db_update_db(handle, sql_str);
- SQLITE3_SAFE_FREE(sql_str);
MC_SAFE_FREE(raw_data);
+ MC_SAFE_FREE(sql_str);
return ret;
}
if (table_exist && is_latest) {
//To keep latest server's metadata
- ret = mc_db_delete_server_address_from_table(mc_server->db_handle, MC_DB_TABLE_SERVER_LIST, mc_server->server_name);
+ ret = mc_db_delete_server_address_from_table(mc_server->db_handle, mc_server->server_name);
if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
mc_error("mc_db_delete_server_address_from_table failed [%d]", ret);
__mc_server_destoy(mc_server);
__mc_server_destoy(mc_server);
return ret;
}
- ret = mc_db_delete_server_address_from_table(mc_server->db_handle, MC_DB_TABLE_SERVER_LIST, mc_server->server_name);
+ ret = mc_db_delete_server_address_from_table(mc_server->db_handle, mc_server->server_name);
if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
mc_error("mc_db_delete_server_address_from_table failed [%d]", ret);
__mc_server_destoy(mc_server);
__mc_server_destoy(mc_server);
return ret;
}
-
- ret = mc_db_insert_server_address_into_table(mc_server->db_handle, mc_server->server_name, 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_db_insert_server_address_into_table(mc_server->db_handle, MC_DB_TABLE_SERVER_LIST, mc_server->server_name);
+ ret = mc_db_insert_server_address_into_server_list(mc_server->db_handle, 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);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("fail mc_ipc_unregister_all_listener [%d]", ret);
- ret = mc_db_delete_server_address_from_table(mc_server->db_handle, MC_DB_TABLE_SERVER_LIST, mc_server->server_name);
+ ret = mc_db_delete_server_address_from_table(mc_server->db_handle, mc_server->server_name);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("fail mc_db_delete_server_address_from_table [%d]", ret);
int mc_db_util_update_db(void *handle, const char *sql_str);
int mc_db_util_delete_whole_server_tables(void *handle);
int mc_db_util_init_latest_server_table(void *handle);
+int mc_db_parse_and_update_db(const char *data, int data_size, char **result_query);
+
#endif /*__TIZEN_MEDIA_CONTROLLER_DB_UTIL_H__*/
return result_psswd_rtn;
}
+int mc_safe_strtoi(const char *buffer, int *value)
+{
+ char *end = NULL;
+ errno = 0;
+ mc_retvm_if(buffer == NULL || value == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid parameter");
+
+ const long sl = strtol(buffer, &end, 10);
+
+ mc_retvm_if(end == buffer, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "not a decimal number");
+ mc_retvm_if('\0' != *end, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "extra characters at end of input: %s", end);
+ mc_retvm_if((LONG_MIN == sl || LONG_MAX == sl) && (ERANGE == errno), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "out of range of type long");
+ mc_retvm_if(sl > INT_MAX, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "greater than INT_MAX");
+ mc_retvm_if(sl < INT_MIN, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "smaller than INT_MIN");
+
+ *value = (int)sl;
+
+ return MEDIA_CONTROLLER_ERROR_NONE;
+}
+
+int mc_safe_strtoull(const char *buffer, unsigned long long *value)
+{
+ char *end = NULL;
+ errno = 0;
+ mc_retvm_if(buffer == NULL || value == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid parameter");
+
+ const unsigned long long ull = strtoull(buffer, &end, 10);
+
+ mc_retvm_if(end == buffer, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "not a decimal number");
+ mc_retvm_if('\0' != *end, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "extra characters at end of input: %s", end);
+ mc_retvm_if((ULLONG_MAX == ull) && (ERANGE == errno), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "out of range of type long");
+
+ *value = (unsigned long long)ull;
+
+ return MEDIA_CONTROLLER_ERROR_NONE;
+}
+
int mc_db_util_connect(void **handle, uid_t uid)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
return ret;
}
+
+int mc_db_parse_and_update_db(const char *data, int data_size, char **result_query)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+ gchar **params = NULL;
+ int i_value = 0;
+ int i_value_1 = 0;
+ unsigned long long llu_value = 0;
+
+ mc_retvm_if(data == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "data is NULL");
+ mc_retvm_if(data_size <= 0 , MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid data_size");
+
+ params = g_strsplit(data, MC_STRING_DELIMITER, 0);
+ mc_retvm_if(params == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail to parsing query");
+
+ if (params[0] == NULL || params[1] == NULL) {
+ mc_error("wrong query");
+ ret = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
+ 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_index TEXT, \
+ 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, \
+ shuffle_mode INTEGER DEFAULT 1, \
+ repeat_mode INTEGER DEFAULT 1 \
+ );INSERT INTO '%q' (server_name) VALUES ('%q');",
+ params[1], 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_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;
+ goto ERROR;
+ }
+
+ mc_safe_strtoi(params[2], &i_value);
+ mc_safe_strtoi(params[3], &i_value_1);
+
+ sql_str = sqlite3_mprintf("UPDATE '%q' SET server_state=%d, playback_state=%d;", params[1], i_value, i_value_1);
+
+ } else if (strncmp(MC_DB_CMD_UPDATE_PLAYBACK, params[0], strlen(MC_DB_CMD_UPDATE_PLAYBACK)) == 0) {
+ if (params[2] == NULL || params[3] == NULL || params[4] == NULL) {
+ mc_error("wrong query");
+ ret = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
+ goto ERROR;
+ }
+
+ mc_safe_strtoi(params[2], &i_value);
+ mc_safe_strtoull(params[3], &llu_value);
+ sql_str = sqlite3_mprintf("UPDATE '%q' SET playback_state=%d, playback_position=%llu, playlist_index=%Q;", params[1], i_value, llu_value, params[4]);
+
+ } else if (strncmp(MC_DB_CMD_UPDATE_META, params[0], strlen(MC_DB_CMD_UPDATE_META)) == 0) {
+ sql_str = sqlite3_mprintf("UPDATE '%q' SET title=%Q, artist=%Q, album=%Q, author=%Q, genre=%Q, duration=%Q, date=%Q, copyright=%Q, description=%Q, track_num=%Q, picture=%Q",
+ params[1], params[2], params[3], params[4], params[5], params[6], params[7], params[8], params[9], params[10], params[11], params[12]);
+
+ } else if (strncmp(MC_DB_CMD_UPDATE_SHUFFLE, params[0], strlen(MC_DB_CMD_UPDATE_SHUFFLE)) == 0) {
+ if (params[2] == NULL) {
+ mc_error("wrong query");
+ ret = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
+ goto ERROR;
+ }
+
+ mc_safe_strtoi(params[2], &i_value);
+ sql_str = sqlite3_mprintf("UPDATE '%q' SET shuffle_mode=%d;", params[1], i_value);
+
+ } else if (strncmp(MC_DB_CMD_UPDATE_REPEAT, params[0], strlen(MC_DB_CMD_UPDATE_REPEAT)) == 0) {
+ if (params[2] == NULL) {
+ mc_error("wrong query");
+ ret = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
+ goto ERROR;
+ }
+
+ mc_safe_strtoi(params[2], &i_value);
+ sql_str = sqlite3_mprintf("UPDATE '%q' SET repeat_mode=%d;", params[1], i_value);
+
+ } else if (strncmp(MC_DB_CMD_UPDATE_LATEST, params[0], strlen(MC_DB_CMD_UPDATE_LATEST)) == 0) {
+ sql_str = sqlite3_mprintf("DELETE FROM '%q'; INSERT INTO '%q' (server_name) VALUES ('%q');", MC_DB_TABLE_LATEST_SERVER, MC_DB_TABLE_LATEST_SERVER, params[1]);
+
+ } else if (strncmp(MC_DB_CMD_UPDATE_PLAYLIST, params[0], strlen(MC_DB_CMD_UPDATE_PLAYLIST)) == 0) {
+ if (params[2] == NULL || params[3] == NULL || params[4] == NULL) {
+ mc_error("wrong query");
+ ret = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
+ goto ERROR;
+ }
+
+ mc_safe_strtoi(params[4], &i_value);
+
+ sql_str = sqlite3_mprintf("INSERT INTO '%q' (server_name, playlist_name, data, data_size) VALUES (%Q, %Q, %Q, %d);", MC_DB_TABLE_PLAYLIST,
+ params[1], params[2], params[3], i_value);
+
+ } else if (strncmp(MC_DB_CMD_REMOVE_SERVER_LIST, params[0], strlen(MC_DB_CMD_REMOVE_SERVER_LIST)) == 0) {
+ sql_str = sqlite3_mprintf("DELETE FROM %q WHERE server_name = '%q';", MC_DB_TABLE_SERVER_LIST, params[1]);
+
+ } else if (strncmp(MC_DB_CMD_REMOVE_SERVER, params[0], strlen(MC_DB_CMD_REMOVE_SERVER)) == 0) {
+ sql_str = sqlite3_mprintf("DROP TABLE IF EXISTS '%q'", params[1]);
+
+ } else if (strncmp(MC_DB_CMD_REMOVE_PLAYLIST, params[0], strlen(MC_DB_CMD_REMOVE_PLAYLIST)) == 0) {
+ sql_str = sqlite3_mprintf("DELETE FROM '%q' WHERE server_name='%q';", MC_DB_TABLE_PLAYLIST, params[1]);
+
+ } else {
+ mc_error("wrong request");
+ ret = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
+ goto ERROR;
+ }
+
+ if (sql_str == NULL) {
+ mc_error("sql_str is NULL");
+ ret = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
+ goto ERROR;
+ }
+
+ERROR:
+ g_strfreev(params);
+
+ if (sql_str != NULL) {
+ *result_query = g_strdup(sql_str);
+ SQLITE3_SAFE_FREE(sql_str);
+ }
+
+ return ret;
+}
}
if (request_msg->msg_type == MC_MSG_DB_UPDATE) {
- char *sql_query = NULL;
- sql_query = strndup(request_msg->msg, request_msg->msg_size);
- if (sql_query != NULL) {
- void* _db_handle;
- res = mc_db_util_connect(&_db_handle, request_msg->uid);
- if (res != MEDIA_CONTROLLER_ERROR_NONE)
- mc_error("mc_db_util_connect error : %d", res);
-
- res = mc_db_util_update_db(_db_handle, sql_query);
- if (res != MEDIA_CONTROLLER_ERROR_NONE)
- mc_error("media_db_update_db error : %d", res);
-
- mc_db_util_disconnect(_db_handle);
-
- send_msg = res;
- MC_SAFE_FREE(sql_query);
+ char *query_data = NULL;
+ char *result_query = NULL;
+ void* _db_handle;
+
+ if (!MC_STRING_VALID(request_msg->msg) || request_msg->msg_size == 0) {
+ mc_error("wrong msg [%d]", request_msg->msg_size);
+ send_msg = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
} else {
- send_msg = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
+ query_data = strndup(request_msg->msg, request_msg->msg_size);
+ if (query_data != NULL) {
+ res = mc_db_parse_and_update_db(query_data, request_msg->msg_size, &result_query);
+ if ((res == MEDIA_CONTROLLER_ERROR_NONE) && (result_query != NULL)) {
+
+ res = mc_db_util_connect(&_db_handle, request_msg->uid);
+ if (res != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("mc_db_util_connect error : %d", res);
+
+ res = mc_db_util_update_db(_db_handle, result_query);
+ if (res != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("media_db_update_db error : %d", res);
+
+ mc_db_util_disconnect(_db_handle);
+ } else {
+ mc_error("mc_db_parse_and_update_db error : %d", res);
+ }
+
+ send_msg = res;
+ MC_SAFE_FREE(query_data);
+ MC_SAFE_FREE(result_query);
+ } else {
+ send_msg = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
+ }
}
} else if (request_msg->msg_type == MC_MSG_CLIENT_SET) {
send_msg = _mc_service_set_data(&(_service_data->connected), request_msg);