summaryrefslogtreecommitdiff
path: root/src/download-provider-db.c
diff options
context:
space:
mode:
authorBang Kwang min <justine.bang@samsung.com>2012-08-24 11:07:28 +0900
committerBang Kwang min <justine.bang@samsung.com>2012-08-24 11:07:28 +0900
commitb1669907025392712c82b95fb42ff4fa3d932464 (patch)
treefaef93340074763c5002c5f3b2e18a20fde33535 /src/download-provider-db.c
parent2557ee9eb550edc5b3053f46a8ee61d53a5236f7 (diff)
downloaddownload-provider-b1669907025392712c82b95fb42ff4fa3d932464.tar.gz
download-provider-b1669907025392712c82b95fb42ff4fa3d932464.tar.bz2
download-provider-b1669907025392712c82b95fb42ff4fa3d932464.zip
Code Sync with Private GIT
changes) fix the defects found by prevent tool remove mutex lock/unlock in case of invalid id support the status of download in case of getting new connection with requestid clear db, register notification when stopped the download Update notification function Enable to set the defined file name by user event thread does not deal in some state fix the lockup by mutex and the crash by invaild socket event Resolve a bug of return type modified: CMakeLists.txt modified: include/download-provider-db.h modified: include/download-provider-notification.h modified: include/download-provider.h modified: packaging/download-provider.spec modified: src/download-provider-db.c modified: src/download-provider-ipc.c modified: src/download-provider-notification.c modified: src/download-provider-receiver.c modified: src/download-provider-utils.c
Diffstat (limited to 'src/download-provider-db.c')
-rw-r--r--src/download-provider-db.c346
1 files changed, 298 insertions, 48 deletions
diff --git a/src/download-provider-db.c b/src/download-provider-db.c
index edf02cc..06726b3 100644
--- a/src/download-provider-db.c
+++ b/src/download-provider-db.c
@@ -49,7 +49,7 @@ int _download_provider_sql_open()
int download_provider_db_requestinfo_remove(int uniqueid)
{
int errorcode;
- sqlite3_stmt *stmt;
+ sqlite3_stmt *stmt = NULL;
if (uniqueid <= 0) {
TRACE_DEBUG_MSG("[NULL-CHECK]");
@@ -92,7 +92,7 @@ int download_provider_db_requestinfo_remove(int uniqueid)
int download_provider_db_requestinfo_new(download_clientinfo *clientinfo)
{
int errorcode;
- sqlite3_stmt *stmt;
+ sqlite3_stmt *stmt = NULL;
if (!clientinfo || !clientinfo->requestinfo
|| clientinfo->requestinfo->requestid <= 0) {
@@ -123,7 +123,7 @@ int download_provider_db_requestinfo_new(download_clientinfo *clientinfo)
_download_provider_sql_close(stmt);
return -1;
}
- if (clientinfo->requestinfo->client_packagename.length > 0) {
+ if (clientinfo->requestinfo->client_packagename.length > 1) {
if (sqlite3_bind_text
(stmt, 2, clientinfo->requestinfo->client_packagename.str,
-1, NULL) != SQLITE_OK) {
@@ -141,7 +141,7 @@ int download_provider_db_requestinfo_new(download_clientinfo *clientinfo)
_download_provider_sql_close(stmt);
return -1;
}
- if (clientinfo->downloadinfo && clientinfo->downloadinfo->content_name) {
+ if (clientinfo->downloadinfo && sizeof(clientinfo->downloadinfo->content_name) > 1) {
if (sqlite3_bind_text
(stmt, 5, clientinfo->downloadinfo->content_name, -1,
NULL) != SQLITE_OK) {
@@ -157,7 +157,7 @@ int download_provider_db_requestinfo_new(download_clientinfo *clientinfo)
_download_provider_sql_close(stmt);
return -1;
}
- if (clientinfo->requestinfo->url.length > 0) {
+ if (clientinfo->requestinfo->url.length > 1) {
if (sqlite3_bind_text
(stmt, 7, clientinfo->requestinfo->url.str, -1,
NULL) != SQLITE_OK) {
@@ -167,7 +167,7 @@ int download_provider_db_requestinfo_new(download_clientinfo *clientinfo)
return -1;
}
}
- if (clientinfo->downloadinfo && clientinfo->downloadinfo->mime_type) {
+ if (clientinfo->downloadinfo && sizeof(clientinfo->downloadinfo->mime_type) > 1) {
if (sqlite3_bind_text
(stmt, 8, clientinfo->downloadinfo->mime_type, -1,
NULL) != SQLITE_OK) {
@@ -202,7 +202,7 @@ int download_provider_db_requestinfo_update_column(download_clientinfo *clientin
download_db_column_type type)
{
int errorcode;
- sqlite3_stmt *stmt;
+ sqlite3_stmt *stmt = NULL;
if (!clientinfo || !clientinfo->requestinfo
|| clientinfo->requestinfo->requestid <= 0) {
@@ -218,7 +218,7 @@ int download_provider_db_requestinfo_update_column(download_clientinfo *clientin
switch (type) {
case DOWNLOAD_DB_PACKAGENAME:
- if (clientinfo->requestinfo->client_packagename.length <= 0
+ if (clientinfo->requestinfo->client_packagename.length <= 1
|| !clientinfo->requestinfo->client_packagename.str) {
TRACE_DEBUG_MSG("[NULL-CHECK] type [%d]", type);
_download_provider_sql_close(stmt);
@@ -308,7 +308,7 @@ int download_provider_db_requestinfo_update_column(download_clientinfo *clientin
break;
case DOWNLOAD_DB_FILENAME:
if (!clientinfo->downloadinfo
- || !clientinfo->downloadinfo->content_name) {
+ || sizeof(clientinfo->downloadinfo->content_name) < 1) {
TRACE_DEBUG_MSG("[NULL-CHECK] type [%d]", type);
_download_provider_sql_close(stmt);
return -1;
@@ -387,7 +387,7 @@ download_dbinfo_list *download_provider_db_get_list(int state)
int listcount;
int i = 0;
int buffer_length = 0;
- sqlite3_stmt *stmt;
+ sqlite3_stmt *stmt = NULL;
char *buffer;
download_dbinfo_list *m_list = NULL;
@@ -529,7 +529,7 @@ int download_provider_db_list_count(int state)
{
int errorcode;
int count = 0;
- sqlite3_stmt *stmt;
+ sqlite3_stmt *stmt = NULL;
if (_download_provider_sql_open() < 0) {
TRACE_DEBUG_MSG("db_util_open is failed [%s]",
@@ -578,6 +578,40 @@ int download_provider_db_list_count(int state)
return 0;
}
+void download_provider_db_info_free(download_dbinfo *info)
+{
+ if (!info)
+ return;
+
+ info->requestid = 0;
+ if (info->packagename)
+ free(info->packagename);
+ info->packagename = NULL;
+ if (info->installpath)
+ free(info->installpath);
+ info->installpath = NULL;
+ if (info->filename)
+ free(info->filename);
+ info->filename = NULL;
+ if (info->createdate)
+ free(info->createdate);
+ info->createdate = NULL;
+ if (info->url)
+ free(info->url);
+ info->url = NULL;
+ if (info->mimetype)
+ free(info->mimetype);
+ info->mimetype = NULL;
+ if (info->etag)
+ free(info->etag);
+ info->etag = NULL;
+ if (info->saved_path)
+ free(info->saved_path);
+ info->saved_path = NULL;
+ free(info);
+ info = NULL;
+}
+
void download_provider_db_list_free(download_dbinfo_list *list)
{
TRACE_DEBUG_MSG("");
@@ -587,33 +621,9 @@ void download_provider_db_list_free(download_dbinfo_list *list)
return;
if (list->count > 0 && list->item) {
- for (i = 0; i < list->count; i++) {
- list->item[i].requestid = 0;
- if (list->item[i].packagename)
- free(list->item[i].packagename);
- list->item[i].packagename = NULL;
- if (list->item[i].installpath)
- free(list->item[i].installpath);
- list->item[i].installpath = NULL;
- if (list->item[i].filename)
- free(list->item[i].filename);
- list->item[i].filename = NULL;
- if (list->item[i].createdate)
- free(list->item[i].createdate);
- list->item[i].createdate = NULL;
- if (list->item[i].url)
- free(list->item[i].url);
- list->item[i].url = NULL;
- if (list->item[i].mimetype)
- free(list->item[i].mimetype);
- list->item[i].mimetype = NULL;
- if (list->item[i].etag)
- free(list->item[i].etag);
- list->item[i].etag = NULL;
- if (list->item[i].saved_path)
- free(list->item[i].saved_path);
- list->item[i].saved_path = NULL;
- }
+ for (i = 0; i < list->count; i++)
+ download_provider_db_info_free(&list->item[i]);
+ list->count = 0;
free(list->item);
list->item = NULL;
}
@@ -621,6 +631,126 @@ void download_provider_db_list_free(download_dbinfo_list *list)
list = NULL;
}
+download_dbinfo *download_provider_db_get_info(int requestid)
+{
+ if (requestid <= 0)
+ return NULL;
+
+ int errorcode;
+ int buffer_length = 0;
+ sqlite3_stmt *stmt = NULL;
+ char *buffer = NULL;
+ download_dbinfo *dbinfo = NULL;
+
+ if (_download_provider_sql_open() < 0) {
+ TRACE_DEBUG_MSG("db_util_open is failed [%s]",
+ sqlite3_errmsg(g_download_provider_db));
+ return NULL;
+ }
+
+ errorcode =
+ sqlite3_prepare_v2(g_download_provider_db,
+ "SELECT uniqueid, packagename, notification, installpath, filename, creationdate, state, url, mimetype, savedpath FROM downloading WHERE uniqueid = ?",
+ -1, &stmt, NULL);
+ if (errorcode != SQLITE_OK) {
+ TRACE_DEBUG_MSG("sqlite3_prepare_v2 is failed. [%s]",
+ sqlite3_errmsg(g_download_provider_db));
+ _download_provider_sql_close(stmt);
+ return NULL;
+ }
+ if (sqlite3_bind_int(stmt, 1, requestid) != SQLITE_OK) {
+ TRACE_DEBUG_MSG("sqlite3_bind_int is failed. [%s]",
+ sqlite3_errmsg(g_download_provider_db));
+ _download_provider_sql_close(stmt);
+ return NULL;
+ }
+
+ if ((errorcode = sqlite3_step(stmt)) == SQLITE_ROW) {
+ dbinfo = (download_dbinfo *) calloc(1, sizeof(download_dbinfo));
+ dbinfo->requestid = sqlite3_column_int(stmt, 0);
+ buffer = (char *)(sqlite3_column_text(stmt, 1));
+ dbinfo->packagename = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->packagename
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->packagename, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->packagename[buffer_length] = '\0';
+ }
+ dbinfo->notification = sqlite3_column_int(stmt, 2);
+ buffer = (char *)(sqlite3_column_text(stmt, 3));
+ dbinfo->installpath = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->installpath
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->installpath, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->installpath[buffer_length] = '\0';
+ }
+ buffer = (char *)(sqlite3_column_text(stmt, 4));
+ dbinfo->filename = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->filename
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->filename, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->filename[buffer_length] = '\0';
+ }
+ buffer = (char *)(sqlite3_column_text(stmt, 5));
+ dbinfo->createdate = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->createdate
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->createdate, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->createdate[buffer_length] = '\0';
+ }
+ dbinfo->state = sqlite3_column_int(stmt, 6);
+ buffer = (char *)(sqlite3_column_text(stmt, 7));
+ dbinfo->url = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->url
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->url, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->url[buffer_length] = '\0';
+ }
+ buffer = (char *)(sqlite3_column_text(stmt, 8));
+ dbinfo->mimetype = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->mimetype
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->mimetype, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->mimetype[buffer_length] = '\0';
+ }
+ buffer = (char *)(sqlite3_column_text(stmt, 9));
+ dbinfo->saved_path = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->saved_path
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->saved_path, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->saved_path[buffer_length] = '\0';
+ }
+ } else {
+ TRACE_DEBUG_MSG("sqlite3_step is failed. [%s] errorcode[%d]",
+ sqlite3_errmsg(g_download_provider_db), errorcode);
+ __download_provider_db_close();
+ download_provider_db_info_free(dbinfo);
+ return NULL;
+ }
+ _download_provider_sql_close(stmt);
+ return dbinfo;
+}
+
download_request_info *download_provider_db_get_requestinfo(download_dbinfo *dbinfo)
{
if (!dbinfo || dbinfo->requestid <= 0)
@@ -632,7 +762,7 @@ download_request_info *download_provider_db_get_requestinfo(download_dbinfo *dbi
if (dbinfo->packagename) {
requestinfo->client_packagename.length =
strlen(dbinfo->packagename);
- if (requestinfo->client_packagename.length > 0) {
+ if (requestinfo->client_packagename.length > 1) {
requestinfo->client_packagename.str
=
(char *)
@@ -649,7 +779,7 @@ download_request_info *download_provider_db_get_requestinfo(download_dbinfo *dbi
}
if (dbinfo->url) {
requestinfo->url.length = strlen(dbinfo->url);
- if (requestinfo->url.length > 0) {
+ if (requestinfo->url.length > 1) {
requestinfo->url.str
=
(char *)calloc((requestinfo->url.length + 1),
@@ -661,7 +791,7 @@ download_request_info *download_provider_db_get_requestinfo(download_dbinfo *dbi
}
if (dbinfo->installpath) {
requestinfo->install_path.length = strlen(dbinfo->installpath);
- if (requestinfo->install_path.length > 0) {
+ if (requestinfo->install_path.length > 1) {
requestinfo->install_path.str
=
(char *)
@@ -676,7 +806,7 @@ download_request_info *download_provider_db_get_requestinfo(download_dbinfo *dbi
}
if (dbinfo->filename) {
requestinfo->filename.length = strlen(dbinfo->filename);
- if (requestinfo->filename.length > 0) {
+ if (requestinfo->filename.length > 1) {
requestinfo->filename.str
=
(char *)calloc((requestinfo->filename.length + 1),
@@ -696,7 +826,7 @@ download_request_info *download_provider_db_get_requestinfo(download_dbinfo *dbi
int download_provider_db_history_new(download_clientinfo *clientinfo)
{
int errorcode;
- sqlite3_stmt *stmt;
+ sqlite3_stmt *stmt = NULL;
if (!clientinfo || !clientinfo->requestinfo
|| clientinfo->requestinfo->requestid <= 0) {
@@ -727,7 +857,7 @@ int download_provider_db_history_new(download_clientinfo *clientinfo)
_download_provider_sql_close(stmt);
return -1;
}
- if (clientinfo->requestinfo->client_packagename.length > 0) {
+ if (clientinfo->requestinfo->client_packagename.length > 1) {
if (sqlite3_bind_text
(stmt, 2, clientinfo->requestinfo->client_packagename.str,
-1, NULL) != SQLITE_OK) {
@@ -737,7 +867,7 @@ int download_provider_db_history_new(download_clientinfo *clientinfo)
return -1;
}
}
- if (clientinfo->downloadinfo && clientinfo->downloadinfo->content_name) {
+ if (clientinfo->downloadinfo && sizeof(clientinfo->downloadinfo->content_name) > 1) {
if (sqlite3_bind_text
(stmt, 3, clientinfo->downloadinfo->content_name, -1,
NULL) != SQLITE_OK) {
@@ -753,7 +883,7 @@ int download_provider_db_history_new(download_clientinfo *clientinfo)
_download_provider_sql_close(stmt);
return -1;
}
- if (clientinfo->downloadinfo && clientinfo->downloadinfo->mime_type) {
+ if (clientinfo->downloadinfo && sizeof(clientinfo->downloadinfo->mime_type) > 1) {
if (sqlite3_bind_text
(stmt, 5, clientinfo->downloadinfo->mime_type, -1,
NULL) != SQLITE_OK) {
@@ -788,7 +918,7 @@ int download_provider_db_history_new(download_clientinfo *clientinfo)
int download_provider_db_history_remove(int uniqueid)
{
int errorcode;
- sqlite3_stmt *stmt;
+ sqlite3_stmt *stmt = NULL;
if (uniqueid <= 0) {
TRACE_DEBUG_MSG("[NULL-CHECK]");
@@ -831,7 +961,7 @@ int download_provider_db_history_remove(int uniqueid)
int download_provider_db_history_limit_rows()
{
int errorcode;
- sqlite3_stmt *stmt;
+ sqlite3_stmt *stmt = NULL;
if (_download_provider_sql_open() < 0) {
TRACE_DEBUG_MSG("db_util_open is failed [%s]",
@@ -866,3 +996,123 @@ int download_provider_db_history_limit_rows()
__download_provider_db_close();
return -1;
}
+
+download_dbinfo *download_provider_db_history_get_info(int requestid)
+{
+ if (requestid <= 0)
+ return NULL;
+
+ int errorcode;
+ int buffer_length = 0;
+ sqlite3_stmt *stmt = NULL;
+ char *buffer = NULL;
+ download_dbinfo *dbinfo = NULL;
+
+ if (_download_provider_sql_open() < 0) {
+ TRACE_DEBUG_MSG("db_util_open is failed [%s]",
+ sqlite3_errmsg(g_download_provider_db));
+ return NULL;
+ }
+
+ errorcode =
+ sqlite3_prepare_v2(g_download_provider_db,
+ "SELECT uniqueid, packagename, notification, installpath, filename, creationdate, state, url, mimetype, savedpath FROM history WHERE uniqueid = ?",
+ -1, &stmt, NULL);
+ if (errorcode != SQLITE_OK) {
+ TRACE_DEBUG_MSG("sqlite3_prepare_v2 is failed. [%s]",
+ sqlite3_errmsg(g_download_provider_db));
+ _download_provider_sql_close(stmt);
+ return NULL;
+ }
+ if (sqlite3_bind_int(stmt, 1, requestid) != SQLITE_OK) {
+ TRACE_DEBUG_MSG("sqlite3_bind_int is failed. [%s]",
+ sqlite3_errmsg(g_download_provider_db));
+ _download_provider_sql_close(stmt);
+ return NULL;
+ }
+
+ if ((errorcode = sqlite3_step(stmt)) == SQLITE_ROW) {
+ dbinfo = (download_dbinfo *) calloc(1, sizeof(download_dbinfo));
+ dbinfo->requestid = sqlite3_column_int(stmt, 0);
+ buffer = (char *)(sqlite3_column_text(stmt, 1));
+ dbinfo->packagename = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->packagename
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->packagename, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->packagename[buffer_length] = '\0';
+ }
+ dbinfo->notification = sqlite3_column_int(stmt, 2);
+ buffer = (char *)(sqlite3_column_text(stmt, 3));
+ dbinfo->installpath = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->installpath
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->installpath, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->installpath[buffer_length] = '\0';
+ }
+ buffer = (char *)(sqlite3_column_text(stmt, 4));
+ dbinfo->filename = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->filename
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->filename, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->filename[buffer_length] = '\0';
+ }
+ buffer = (char *)(sqlite3_column_text(stmt, 5));
+ dbinfo->createdate = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->createdate
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->createdate, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->createdate[buffer_length] = '\0';
+ }
+ dbinfo->state = sqlite3_column_int(stmt, 6);
+ buffer = (char *)(sqlite3_column_text(stmt, 7));
+ dbinfo->url = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->url
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->url, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->url[buffer_length] = '\0';
+ }
+ buffer = (char *)(sqlite3_column_text(stmt, 8));
+ dbinfo->mimetype = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->mimetype
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->mimetype, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->mimetype[buffer_length] = '\0';
+ }
+ buffer = (char *)(sqlite3_column_text(stmt, 9));
+ dbinfo->saved_path = NULL;
+ if (buffer) {
+ buffer_length = strlen(buffer);
+ dbinfo->saved_path
+ = (char *)calloc(buffer_length + 1, sizeof(char));
+ memcpy(dbinfo->saved_path, buffer,
+ buffer_length * sizeof(char));
+ dbinfo->saved_path[buffer_length] = '\0';
+ }
+ } else {
+ TRACE_DEBUG_MSG("sqlite3_step is failed. [%s] errorcode[%d]",
+ sqlite3_errmsg(g_download_provider_db), errorcode);
+ __download_provider_db_close();
+ download_provider_db_info_free(dbinfo);
+ return NULL;
+ }
+ _download_provider_sql_close(stmt);
+ return dbinfo;
+}