%global __provides_exclude_from ^.*\\.extension-calendar
Name: sync-service
-Version: 0.2.27
+Version: 0.2.28
Release: 1
License: Apache-2.0
Summary: Sync manager daemon
#define SYNC_MANAGER_DBUS_SERVICE "org.tizen.sync"
#define SYNC_MANAGER_DBUS_PATH "/org/tizen/sync/manager"
-#define SYNC_ADAPTER_COMMON_DBUS_PATH "/org/tizen/sync/adapter"
+#define SYNC_ADAPTER_DBUS_PATH "/org/tizen/sync/adapter"
typedef struct sync_adapter_s {
&error);
SYNC_LOGE_RET_RES(error == NULL && ipcObj != NULL, SYNC_ERROR_IO_ERROR, "tizen_sync_manager_proxy_new_sync failed %s", error->message);
- char buf[8] = {0, };
- snprintf(buf, 8, "%d", (int)getuid());
+ char buf[16] = { 0, };
+ snprintf(buf, sizeof(buf) - 1, "%d", (int)getuid());
char *command_line = proc_get_cmdline_self();
if (flag) {
GDBusConnection *connection = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error);
SYNC_LOGE_RET_RES(connection != NULL, SYNC_ERROR_SYSTEM, "System error occured %s", error->message);
- char obj_path[50];
- snprintf(obj_path, 50, "%s/%d", SYNC_ADAPTER_COMMON_DBUS_PATH, pid);
+ char object_path[64] = { 0, };
+ snprintf(object_path, sizeof(object_path) - 1, "%s/%d", SYNC_ADAPTER_DBUS_PATH, pid);
TizenSyncAdapter *pSyncAdapter = tizen_sync_adapter_proxy_new_sync(connection,
G_DBUS_PROXY_FLAGS_NONE,
SYNC_MANAGER_DBUS_SERVICE,
- obj_path,
+ object_path,
NULL,
&error);
SYNC_LOGE_RET_RES(error == NULL && pSyncAdapter != NULL, SYNC_ERROR_IO_ERROR, "tizen_sync_manager_proxy_new_sync failed %s", error->message);
#include "sync-error.h"
+#define SYNC_MANAGER_DBUS_SERVICE "org.tizen.sync"
#define SYNC_MANAGER_DBUS_PATH "/org/tizen/sync/manager"
#define SYNC_ADAPTER_DBUS_PATH "/org/tizen/sync/adapter"
#define SYNC_ERROR_PREFIX "org.tizen.sync.Error"
connection = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error);
TizenSyncManager *ipcObj = tizen_sync_manager_proxy_new_sync(connection,
- G_DBUS_PROXY_FLAGS_NONE,
- "org.tizen.sync",
- "/org/tizen/sync/manager",
- NULL,
- &error);
+ G_DBUS_PROXY_FLAGS_NONE,
+ SYNC_MANAGER_DBUS_SERVICE,
+ SYNC_MANAGER_DBUS_PATH,
+ NULL,
+ &error);
if (error != NULL) {
LOG_LOGC("sync client: gdbus error [%s]", error->message);
LOG_LOGC("appid [%s] sync_job_name [%s]", g_sync_manager->appid, sync_job_name);
}
- char buf[8] = {0, };
- snprintf(buf, 8, "%d", (int)getuid());
+ char buf[16] = { 0, };
+ snprintf(buf, sizeof(buf) - 1, "%d", (int)getuid());
GError *error = NULL;
GVariant *user_data = marshal_bundle(sync_job_user_data);
int sync_interval = get_interval(sync_period);
- char buf[8] = {0, };
- snprintf(buf, 8, "%d", (int)getuid());
+ char buf[16] = { 0, };
+ snprintf(buf, sizeof(buf) - 1, "%d", (int)getuid());
GError *error = NULL;
GVariant *user_data = marshal_bundle(sync_job_user_data);
LOG_LOGC("appid [%s] capability [%s]", g_sync_manager->appid, sync_capability);
}
- char buf[8] = {0, };
- snprintf(buf, 8, "%d", (int)getuid());
+ char buf[16] = { 0, };
+ snprintf(buf, sizeof(buf) - 1, "%d", (int)getuid());
GError *error = NULL;
GVariant *user_data = marshal_bundle(sync_job_user_data);
LOG_LOGC("sync client: [%s] removing sync job with sync_job_id [%d]", g_sync_manager->appid, sync_job_id);
- char buf[8] = {0, };
- snprintf(buf, 8, "%d", (int)getuid());
+ char buf[16] = { 0, };
+ snprintf(buf, sizeof(buf) - 1, "%d", (int)getuid());
GError *error = NULL;
g_sync_manager->sync_job_cb = sync_job_cb;
- char buf[8] = {0, };
- snprintf(buf, 8, "%d", (int)getuid());
+ char buf[16] = { 0, };
+ snprintf(buf, sizeof(buf) - 1, "%d", (int)getuid());
GError *error = NULL;
GVariant *sync_job_list_variant = NULL;
return SYNC_ERROR_INVALID_OPERATION;
}
- LOG_LOGD("DeRegistration of DataChangeListener Successfully Ends");
+ LOG_LOGD("DeRegisterDataChangeListener");
return SYNC_ERROR_NONE;
}
/* LCOV_EXCL_START */
int
NetworkChangeListener::DeRegisterNetworkChangeListener(void) {
- LOG_LOGD("Removing network change listener");
+ LOG_LOGD("DeRegisterNetworkChangeListener");
int ret = connection_unset_type_changed_cb(connection);
if (ret != CONNECTION_ERROR_NONE)
#define PATH_SYNCJOBS tzplatform_mkpath(TZ_USER_DATA, "/sync-manager/syncjobs.xml")
#define PATH_SYNCADAPTERS tzplatform_mkpath(TZ_USER_DATA, "/sync-manager/syncadapters.xml")
-static const char *CREATE_SYNC_ADAPTER_TABLE = "CREATE TABLE if not exists syncadapter (SvcAppId TEXT, PkgName TEXT, UserId TEXT, AppStatus TEXT);";
+static const char *CREATE_SYNC_ADAPTER_TABLE = "CREATE TABLE if not exists syncadapter (SvcAppId TEXT, PkgName TEXT, UserId TEXT, DoA TEXT, AppStatus TEXT, ProcId TEXT);";
static const char *CREATE_SYNC_JOB_TABLE = "CREATE TABLE if not exists syncjob (SvcAppId TEXT, PkgName TEXT, UserId TEXT, AppStatus TEXT, SyncJobId TEXT, SyncType TEXT, AccountId TEXT, JobName TEXT, Interval TEXT, Expedit TEXT, NoRetry TEXT, UserDataKey TEXT, UserDataValue TEXT);";
#ifndef MAX
}
-void
-RepositoryEngine::OnBooting() {
- if (!ReadSyncAdaptersFromDB())
- ReadSyncAdapters();
- if (!ReadSyncJobsDataFromDB())
- ReadSyncJobsData();
-}
-
-
//Test method
/*
static void
pAggregator->SetAppStatus((char*)pServiceAppId, (char*)pAppStatus);
pAggregator->AddSyncAdapter((char*)pPackageId, (char*)pServiceAppId);
- InsertSyncAdapterToDB((char*)pServiceAppId, (char*)pPackageId, 5001, (char*)pAppStatus);
+ InsertSyncAdapterToDB((char*)pServiceAppId, (char*)pPackageId, 5001, "app", (char*)pAppStatus, 0);
pkgmgrinfo_appinfo_destroy_appinfo(handle_appinfo);
} else {
pAggregator->HandlePackageUninstalled((char*)pPackageId);
}
+
if (pServiceAppId)
xmlFree(pServiceAppId);
if (pPackageId)
void
-RepositoryEngine::RecordSyncAdapter(const char *SvcAppId, const char *PkgName, int UserId, const char *AppStatus) {
- InsertSyncAdapterToDB(SvcAppId, PkgName, UserId, AppStatus);
+RepositoryEngine::RecordSyncAdapter(const char *SvcAppId, const char *PkgName, int UserId, const char *DoA, const char *AppStatus, int ProcId) {
+ InsertSyncAdapterToDB(SvcAppId, PkgName, UserId, DoA, AppStatus, ProcId);
+}
+
+
+void
+RepositoryEngine::RecordSyncAdapter(const char *SvcAppId, int UserId, const char *AppStatus, int ProcId) {
+ /* for services */
+ UpdateSyncAdapterToDB(SvcAppId, UserId, AppStatus, ProcId);
}
if (fd < 0) {
/* LCOV_EXCL_START */
LOG_LOGD("DB file [%s] doesn't exist : [%d]", SYNC_DB_FILE, fd);
+ create_db_file();
return 0;
/* LCOV_EXCL_STOP */
} else {
void
-RepositoryEngine::CheckDBFile(void) {
- if (!check_db_file())
- create_db_file();
+RepositoryEngine::OnBooting() {
+ int db = check_db_file();
+
+ if (!ReadSyncAdaptersFromDB() && !db)
+ ReadSyncAdapters();
+ if (!ReadSyncJobsDataFromDB() && !db)
+ ReadSyncJobsData();
+
+ /* check registered sync jobs */
+ CheckSyncJobsDataOnDB();
+}
+
+
+int
+RepositoryEngine::WhetherApplication(const char *PkgName) {
+ /*
+ * if the package is an application, return 0
+ * or return its pid
+ */
+ int isApp = 0;
+ sqlite3 *db = NULL;
+ db = db_open();
+ if (!db) {
+ LOG_LOGD("DB open error : couldn't get information for DoA");
+ return isApp;
+ }
+
+ char *search_query = NULL;
+ search_query = sqlite3_mprintf("SELECT * FROM %Q WHERE PkgName=%Q", SYNC_ADAPTER_TABLE, PkgName);
+ sqlite3_stmt *stmt = NULL;
+
+ int ret = sqlite3_prepare_v2(db, search_query, strlen(search_query), &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ LOG_LOGD("prepare : search query[%s] ret[%d] err_msg[%s]", search_query, ret, sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ sqlite3_free(search_query);
+ db_close(db);
+ LOG_LOGD("sync-manager DB close : couldn't get information for DoA");
+ return isApp;
+ }
+
+ ret = sqlite3_step(stmt);
+ if (ret == SQLITE_ROW) {
+ char **SqlResult;
+ int RecordCount;
+ int ColumnCount;
+ char *error_msg = NULL;
+
+ sqlite3_get_table(db, search_query, &SqlResult, &RecordCount, &ColumnCount, &error_msg);
+
+ for (int idx = ADAPTER_COLUMN_NUM; idx < (RecordCount + 1) * (ColumnCount); idx += ADAPTER_COLUMN_NUM) {
+ if (idx % ADAPTER_COLUMN_NUM == 0) {
+ if (strcmp(SqlResult[idx + 3], "app"))
+ isApp = atoi(SqlResult[idx + 5]); /* if it is not an application */
+ }
+ }
+
+ if (!isApp)
+ LOG_LOGD("This process is an application");
+ else
+ LOG_LOGD("This process is a service");
+ } else {
+ if (ret == SQLITE_DONE) {
+ LOG_LOGD("There is no sync adapter in the DB");
+ LOG_LOGD("sync-manager DB close");
+ } else {
+ LOG_LOGD("DB error [%d : %s] for [%s]", ret, sqlite3_errmsg(db), search_query);
+ LOG_LOGD("sync-manager DB close : couldn't get information for DoA");
+ }
+
+ sqlite3_reset(stmt);
+ sqlite3_finalize(stmt);
+ db_close(db);
+ return isApp;
+ }
+
+ sqlite3_reset(stmt);
+ sqlite3_finalize(stmt);
+ db_close(db);
+ LOG_LOGD("sync-manager DB close");
+
+ return isApp;
+}
+
+
+bool
+RepositoryEngine::WhetherPrivilegeNeeded(guint pid, const gchar *pCommandLine) {
+ char* pAppId = NULL;
+ string pkgIdStr;
+ int ret = app_manager_get_app_id(pid, &pAppId);
+ if (ret == APP_MANAGER_ERROR_NONE) {
+ pkgIdStr = SyncManager::GetInstance()->GetPkgIdByAppId(pAppId);
+ free(pAppId);
+ } else {
+ /* LCOV_EXCL_START */
+ pkgIdStr = SyncManager::GetInstance()->GetPkgIdByCommandline(pCommandLine);
+ /* LCOV_EXCL_STOP */
+ }
+
+ /* if it is an application, below func returns 0 */
+ if (WhetherApplication((const char *)pkgIdStr.c_str()) == 0)
+ return true;
+ else
+ return false;
}
LOG_LOGD("sync-manager DB open");
char *search_query = NULL;
- int ret = SQLITE_OK;
-
search_query = sqlite3_mprintf("SELECT * FROM %Q", SYNC_ADAPTER_TABLE);
sqlite3_stmt *stmt = NULL;
- ret = sqlite3_prepare_v2(db, search_query, strlen(search_query), &stmt, NULL);
+ int ret = sqlite3_prepare_v2(db, search_query, strlen(search_query), &stmt, NULL);
if (ret != SQLITE_OK) {
LOG_LOGD("prepare : search query[%s] ret[%d] err_msg[%s]", search_query, ret, sqlite3_errmsg(db));
sqlite3_finalize(stmt);
sqlite3_get_table(db, search_query, &SqlResult, &RecordCount, &ColumnCount, &error_msg);
- /* exclude column title (0 ~ 3) */
- LOG_LOGD("[idx] : [SvcAppId][PkgName][UserId][AppStatus]");
+ /* exclude column title (0 ~ 5) */
+ LOG_LOGD("[idx] : [SvcAppId][PkgName][UserId][DoA][AppStatus][ProcId]");
for (int idx = ADAPTER_COLUMN_NUM; idx < (RecordCount + 1) * (ColumnCount); idx += ADAPTER_COLUMN_NUM) {
if (idx % ADAPTER_COLUMN_NUM == 0) {
- LOG_LOGD("[%d] : [%s] [%s] [%s] [%s]", idx / ADAPTER_COLUMN_NUM,
- SqlResult[idx], SqlResult[idx + 1], SqlResult[idx + 2], SqlResult[idx + 3]);
-
- pkgmgrinfo_appinfo_h handle_appinfo;
- if (pkgmgrinfo_appinfo_get_appinfo(SqlResult[idx], &handle_appinfo) == PMINFO_R_OK) {
- /*
- * pAggregator->SetAppStatus(app_id, app_status);
- * pAggregator->AddSyncAdapter(pkg_name, app_id);
- */
- pAggregator->SetAppStatus(SqlResult[idx], SqlResult[idx + 3]);
- pAggregator->AddSyncAdapter(SqlResult[idx + 1], SqlResult[idx]);
-
- pkgmgrinfo_appinfo_destroy_appinfo(handle_appinfo);
+ LOG_LOGD("[%d] : [%s] [%s] [%s] [%s] [%s] [%s]", idx / ADAPTER_COLUMN_NUM, SqlResult[idx],
+ SqlResult[idx + 1], SqlResult[idx + 2], SqlResult[idx + 3], SqlResult[idx + 4], SqlResult[idx + 5]);
+ if (!strcmp(SqlResult[idx + 3], "app")) {
+ pkgmgrinfo_appinfo_h handle_appinfo;
+ if (pkgmgrinfo_appinfo_get_appinfo(SqlResult[idx], &handle_appinfo) == PMINFO_R_OK) {
+ /*
+ * pAggregator->SetAppStatus(app_id, app_status);
+ * pAggregator->AddSyncAdapter(pkg_name, app_id);
+ */
+ pAggregator->SetAppStatus(SqlResult[idx], SqlResult[idx + 4]);
+ pAggregator->AddSyncAdapter(SqlResult[idx + 1], SqlResult[idx]);
+
+ pkgmgrinfo_appinfo_destroy_appinfo(handle_appinfo);
+ } else {
+ pAggregator->HandlePackageUninstalled(SqlResult[idx + 1]);
+ }
} else {
- pAggregator->HandlePackageUninstalled(SqlResult[idx + 1]);
+ /* logic for services */
+ pAggregator->SetAppStatus(SqlResult[idx], SqlResult[idx + 4]);
+ pAggregator->AddSyncAdapter(SqlResult[idx + 1], SqlResult[idx]);
}
}
}
pAggregator->dumpSyncAdapters();
LOG_LOGD("result : Read sync adapters from DB complete [%s]", search_query);
- } else if (ret == SQLITE_DONE) {
- LOG_LOGD("There is no sync adapter in the DB");
- sqlite3_reset(stmt);
- sqlite3_finalize(stmt);
- db_close(db);
- LOG_LOGD("sync-manager DB close");
- return 0;
} else {
- LOG_LOGD("DB error [%d : %s] for [%s]", ret, sqlite3_errmsg(db), search_query);
+ if (ret == SQLITE_DONE)
+ LOG_LOGD("There is no sync adapter in the DB");
+ else
+ LOG_LOGD("DB error [%d : %s] for [%s]", ret, sqlite3_errmsg(db), search_query);
+
sqlite3_reset(stmt);
sqlite3_finalize(stmt);
db_close(db);
int
-RepositoryEngine::InsertSyncAdapterToDB(const char *SvcAppId, const char *PkgName, int UserId, const char *AppStatus) {
+RepositoryEngine::InsertSyncAdapterToDB(const char *SvcAppId, const char *PkgName, int UserId, const char *DoA, const char *AppStatus, int ProcId) {
sqlite3 *db = NULL;
db = db_open();
if (!db) {
LOG_LOGD("sync-manager DB open");
if (SvcAppId && strlen(SvcAppId) > 0) {
- char uid[10] = { 0, };
- snprintf(uid, 10, "%d", UserId);
+ char uid[16] = { 0, };
+ snprintf(uid, sizeof(uid) - 1, "%d", UserId);
+ char pid[16] = { 0, };
+ if (ProcId == 0)
+ snprintf(pid, sizeof(pid) - 1, "%s", "none");
+ else
+ snprintf(pid, sizeof(pid) - 1, "%d", ProcId);
char *search_query = NULL;
char *insert_query = NULL;
if (ret == SQLITE_DONE) {
sqlite3_reset(stmt);
if (!PkgName || strlen(PkgName) <= 0) {
- insert_query = sqlite3_mprintf("INSERT INTO %Q (SvcAppId, PkgName, UserId, AppStatus) VALUES (%Q, %Q, %Q, %Q)",
+ insert_query = sqlite3_mprintf("INSERT INTO %Q (SvcAppId, PkgName, UserId, DoA, AppStatus, ProcId) VALUES (%Q, %Q, %Q, %Q, %Q, %Q)",
SYNC_ADAPTER_TABLE, SvcAppId, SyncManager::GetInstance()->GetPkgIdByAppId(SvcAppId).c_str(),
- uid, AppStatus ? AppStatus : "enabled");
+ uid, DoA, AppStatus ? AppStatus : "enabled", pid);
} else {
- insert_query = sqlite3_mprintf("INSERT INTO %Q (SvcAppId, PkgName, UserId, AppStatus) VALUES (%Q, %Q, %Q, %Q)",
- SYNC_ADAPTER_TABLE, SvcAppId, PkgName, uid, AppStatus ? AppStatus : "enabled");
+ insert_query = sqlite3_mprintf("INSERT INTO %Q (SvcAppId, PkgName, UserId, DoA, AppStatus, ProcId) VALUES (%Q, %Q, %Q, %Q, %Q, %Q)",
+ SYNC_ADAPTER_TABLE, SvcAppId, PkgName, uid, DoA, AppStatus ? AppStatus : "enabled", pid);
}
ret = sqlite3_prepare_v2(db, insert_query, strlen(insert_query), &stmt, NULL);
}
+int
+RepositoryEngine::UpdateSyncAdapterToDB(const char *SvcAppId, int UserId, const char *AppStatus, int ProcId) {
+ sqlite3 *db = NULL;
+ db = db_open();
+ if (!db) {
+ LOG_LOGD("DB open error");
+ return -1;
+ }
+ LOG_LOGD("sync-manager DB open");
+
+ if (SvcAppId && strlen(SvcAppId) > 0) {
+ char uid[16] = { 0, };
+ snprintf(uid, sizeof(uid) - 1, "%d", UserId);
+ char pid[16] = { 0, };
+ snprintf(pid, sizeof(pid) - 1, "%d", ProcId);
+
+ char *update_query = NULL;
+
+ update_query = sqlite3_mprintf("UPDATE %Q SET AppStatus=%Q, ProcId=%Q WHERE SvcAppId=%Q AND UserId=%Q",
+ SYNC_ADAPTER_TABLE, AppStatus, pid, SvcAppId, uid);
+
+ int ret = SQLITE_OK;
+ sqlite3_stmt *stmt = NULL;
+ ret = sqlite3_prepare_v2(db, update_query, strlen(update_query), &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ LOG_LOGD("prepare : update query[%s] ret[%d] err_msg[%s]", update_query, ret, sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ sqlite3_free(update_query);
+ db_close(db);
+ LOG_LOGD("sync-manager DB close");
+ return -1;
+ }
+
+ ret = sqlite3_step(stmt);
+ if (ret == SQLITE_OK || ret == SQLITE_DONE) {
+ LOG_LOGD("result : Update to DB complete [%s]", update_query);
+ } else {
+ LOG_LOGD("DB error [%d : %s] for [%s]", ret, sqlite3_errmsg(db), update_query);
+ sqlite3_reset(stmt);
+ sqlite3_finalize(stmt);
+ sqlite3_free(update_query);
+ db_close(db);
+ LOG_LOGD("sync-manager DB close");
+ return -1;
+ }
+
+ sqlite3_reset(stmt);
+ sqlite3_finalize(stmt);
+ sqlite3_free(update_query);
+ } else {
+ LOG_LOGD("Update sync-adapter fail : invalid service-app-id");
+ }
+
+ db_close(db);
+
+ LOG_LOGD("sync-manager DB close");
+
+ return 0;
+}
+
+
int
RepositoryEngine::UpdateSyncAdapterToDB(const char *SvcAppId, int UserId, const char *AppStatus) {
sqlite3 *db = NULL;
LOG_LOGD("sync-manager DB open");
if (SvcAppId && strlen(SvcAppId) > 0) {
- char uid[10] = { 0, };
- snprintf(uid, 10, "%d", UserId);
+ char uid[16] = { 0, };
+ snprintf(uid, sizeof(uid) - 1, "%d", UserId);
char *update_query = NULL;
}
LOG_LOGD("sync-manager DB open");
- char uid[10] = { 0, };
- snprintf(uid, 10, "%d", UserId);
+ char uid[16] = { 0, };
+ snprintf(uid, sizeof(uid) - 1, "%d", UserId);
char *delete_query = NULL;
int ret = SQLITE_OK;
char *search_query = NULL;
int ret = SQLITE_OK;
- char UserId[10] = { 0, };
- snprintf(UserId, 10, "%d", uid);
+ char UserId[16] = { 0, };
+ snprintf(UserId, sizeof(UserId) - 1, "%d", uid);
search_query = sqlite3_mprintf("SELECT * FROM %Q WHERE PkgName=%Q AND UserId=%Q", SYNC_JOB_TABLE, PackageName, UserId);
sqlite3_stmt *stmt = NULL;
char *search_query = NULL;
int ret = SQLITE_OK;
- char UserId[10] = { 0, };
- snprintf(UserId, 10, "%d", uid);
+ char UserId[16] = { 0, };
+ snprintf(UserId, sizeof(UserId) - 1, "%d", uid);
search_query = sqlite3_mprintf("SELECT * FROM %Q WHERE PkgName=%Q AND UserId=%Q", SYNC_JOB_TABLE, PackageName, UserId);
sqlite3_stmt *stmt = NULL;
LOG_LOGD("sync-manager DB open");
char *search_query = NULL;
- int ret = SQLITE_OK;
-
search_query = sqlite3_mprintf("SELECT * FROM %Q WHERE AppStatus=%Q", SYNC_JOB_TABLE, "enabled");
sqlite3_stmt *stmt = NULL;
- ret = sqlite3_prepare_v2(db, search_query, strlen(search_query), &stmt, NULL);
+ int ret = sqlite3_prepare_v2(db, search_query, strlen(search_query), &stmt, NULL);
if (ret != SQLITE_OK) {
LOG_LOGD("prepare : search query[%s] ret[%d] err_msg[%s]", search_query, ret, sqlite3_errmsg(db));
sqlite3_finalize(stmt);
}
LOG_LOGD("result : Read sync jobs from DB complete [%s]", search_query);
- } else if (ret == SQLITE_DONE) {
- LOG_LOGD("There is no sync-adapter");
- sqlite3_reset(stmt);
- sqlite3_finalize(stmt);
- sqlite3_free(search_query);
- db_close(db);
- LOG_LOGD("sync-manager DB close");
- return 0;
} else {
- LOG_LOGD("DB error [%d : %s] for [%s]", ret, sqlite3_errmsg(db), search_query);
+ if (ret == SQLITE_DONE)
+ LOG_LOGD("There is no sync jobs");
+ else
+ LOG_LOGD("DB error [%d : %s] for [%s]", ret, sqlite3_errmsg(db), search_query);
+
sqlite3_reset(stmt);
sqlite3_finalize(stmt);
sqlite3_free(search_query);
static char *UserValue = NULL;
-static void
-bundIterCb(const char *key, const char *value, void *user_data) {
+static void bundIterCb(const char *key, const char *value, void *user_data) {
UserKey = const_cast<char *>(key);
UserValue = const_cast<char *>(value);
}
-static std::string
-setEmpty(void) {
+static std::string setEmpty(void) {
return "";
}
LOG_LOGD("sync-manager DB open");
if (SvcAppId && strlen(SvcAppId) > 0) {
- char uid[10] = { 0, };
- snprintf(uid, 10, "%d", UserId);
- char jobId[10] = { 0, };
- snprintf(jobId, 10, "%d", JobId);
- char accId[10] = { 0, };
- snprintf(accId, 10, "%d", AccountId);
- char interval[10] = { 0, };
- snprintf(interval, 10, "%d", Interval);
+ char uid[16] = { 0, };
+ snprintf(uid, sizeof(uid) - 1, "%d", UserId);
+ char jobId[16] = { 0, };
+ snprintf(jobId, sizeof(jobId) - 1, "%d", JobId);
+ char accId[16] = { 0, };
+ snprintf(accId, sizeof(accId) - 1, "%d", AccountId);
+ char interval[16] = { 0, };
+ snprintf(interval, sizeof(interval) - 1, "%d", Interval);
char expedit[2] = { 0, };
- snprintf(expedit, 2, "%d", Option & SYNC_OPTION_EXPEDITED);
+ snprintf(expedit, sizeof(expedit) - 1, "%d", Option & SYNC_OPTION_EXPEDITED);
char noRetry[2] = { 0, };
- snprintf(noRetry, 2, "%d", Option & SYNC_OPTION_NO_RETRY);
+ snprintf(noRetry, sizeof(noRetry) - 1, "%d", Option & SYNC_OPTION_NO_RETRY);
UserKey = const_cast<char *>(setEmpty().c_str());
UserValue = const_cast<char *>(setEmpty().c_str());
LOG_LOGD("sync-manager DB open");
if (SvcAppId && strlen(SvcAppId) > 0) {
- char uid[10] = { 0, };
- snprintf(uid, 10, "%d", UserId);
+ char uid[16] = { 0, };
+ snprintf(uid, sizeof(uid) - 1, "%d", UserId);
char *update_query = NULL;
update_query = sqlite3_mprintf("UPDATE %Q SET AppStatus=%Q WHERE SvcAppId=%Q AND PkgName=%Q AND UserId=%Q",
LOG_LOGD("sync-manager DB open");
if (SvcAppId && strlen(SvcAppId) > 0) {
- char uid[10] = { 0, };
- snprintf(uid, 10, "%d", UserId);
- char jobId[10] = { 0, };
- snprintf(jobId, 10, "%d", JobId);
- char accId[10] = { 0, };
- snprintf(accId, 10, "%d", AccountId);
- char interval[10] = { 0, };
- snprintf(interval, 10, "%d", Interval);
+ char uid[16] = { 0, };
+ snprintf(uid, sizeof(uid) - 1, "%d", UserId);
+ char jobId[16] = { 0, };
+ snprintf(jobId, sizeof(jobId) - 1, "%d", JobId);
+ char accId[16] = { 0, };
+ snprintf(accId, sizeof(accId) - 1, "%d", AccountId);
+ char interval[16] = { 0, };
+ snprintf(interval, sizeof(interval) - 1, "%d", Interval);
char expedit[2] = { 0, };
- snprintf(expedit, 2, "%d", Option & SYNC_OPTION_EXPEDITED);
+ snprintf(expedit, sizeof(expedit) - 1, "%d", Option & SYNC_OPTION_EXPEDITED);
char noRetry[2] = { 0, };
- snprintf(noRetry, 2, "%d", Option & SYNC_OPTION_NO_RETRY);
+ snprintf(noRetry, sizeof(noRetry) - 1, "%d", Option & SYNC_OPTION_NO_RETRY);
UserKey = const_cast<char *>(setEmpty().c_str());
UserValue = const_cast<char *>(setEmpty().c_str());
}
LOG_LOGD("sync-manager DB open");
- char uid[10] = { 0, };
- snprintf(uid, 10, "%d", UserId);
- char jobId[10] = { 0, };
- snprintf(jobId, 10, "%d", JobId);
+ char uid[16] = { 0, };
+ snprintf(uid, sizeof(uid) - 1, "%d", UserId);
+ char jobId[16] = { 0, };
+ snprintf(jobId, sizeof(jobId) - 1, "%d", JobId);
char *delete_query = NULL;
int ret = SQLITE_OK;
}
LOG_LOGD("sync-manager DB open");
- char uid[10] = { 0, };
- snprintf(uid, 10, "%d", UserId);
+ char uid[16] = { 0, };
+ snprintf(uid, sizeof(uid) - 1, "%d", UserId);
char *delete_query = NULL;
int ret = SQLITE_OK;
#define SYNC_DB_JOURNAL_FILE tzplatform_mkpath(TZ_USER_DB, ".sync-manager.db-journal")
#define SYNC_ADAPTER_TABLE "syncadapter"
#define SYNC_JOB_TABLE "syncjob"
-#define ADAPTER_COLUMN_NUM 4
+#define ADAPTER_COLUMN_NUM 6
#define JOB_COLUMN_NUM 13
/*namespace _SyncManager
~RepositoryEngine(void);
- void OnBooting();
+ void OnBooting(void);
- void CheckDBFile(void);
+ int WhetherApplication(const char *PkgName);
+
+ bool WhetherPrivilegeNeeded(guint pid, const gchar *pCommandLine);
void CheckSyncJobsData(void);
bool CheckAdapterStatus(const char *PackageName);
- void RecordSyncAdapter(const char *SvcAppId, const char *PkgName, int UserId, const char *AppStatus);
+ void RecordSyncAdapter(const char *SvcAppId, const char *PkgName, int UserId, const char *DoA, const char *AppStatus, int ProcId);
+
+ void RecordSyncAdapter(const char *SvcAppId, int UserId, const char *AppStatus, int ProcId);
void RecordSyncAdapter(const char *SvcAppId, int UserId, const char *AppStatus);
int ReadSyncAdaptersFromDB(void);
- int InsertSyncAdapterToDB(const char *SvcAppId, const char *PkgName, int UserId, const char *AppStatus);
+ int InsertSyncAdapterToDB(const char *SvcAppId, const char *PkgName, int UserId, const char *DoA, const char *AppStatus, int ProcId);
+
+ int UpdateSyncAdapterToDB(const char *SvcAppId, int UserId, const char *AppStatus, int ProcId);
int UpdateSyncAdapterToDB(const char *SvcAppId, int UserId, const char *AppStatus);
/* LCOV_EXCL_START */
int
StorageChangeListener::DeRegisterStorageChangeListener(void) {
- LOG_LOGD("Remove storage listener");
+ LOG_LOGD("DeRegisterStorageChangeListener");
return(vconf_ignore_key_changed(VCONFKEY_SYSMAN_LOW_MEMORY, OnMemoryStatusChanged));
}
SyncManager::GetPkgIdByCommandline(const char* pCommandLine) {
string pkgId;
if (pCommandLine != NULL) {
- char cmd[100];
+ char cmd[128];
memset(cmd, 0x00, sizeof(cmd));
- snprintf(cmd, sizeof(cmd), "rpm -qf %s --queryformat '%%{name}'", pCommandLine);
+ snprintf(cmd, sizeof(cmd) - 1, "rpm -q %s", pCommandLine);
+ LOG_LOGD("cmd : [%s]", cmd);
char white_list[67] = "_-./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
char *temp = strdup(pCommandLine);
free(buffer);
}
+ /* remove escape at the end of the package name */
+ if (!pkgId.empty()) {
+ pkgId.erase(pkgId.find_last_not_of(" \n\r\t")+1);
+ LOG_LOGD("pkgId : [%s]", pkgId.c_str());
+ }
+
return pkgId;
}
/* LCOV_EXCL_STOP */
/* LCOV_EXCL_START */
int
SyncManager::DeRegisterForUPSModeChange(void) {
- LOG_LOGD("De Registering UPS mode listener");
+ LOG_LOGD("DeRegisterUPSModeChangeListener");
return vconf_ignore_key_changed(VCONFKEY_SETAPPL_PSMODE, OnUPSModeChangedCb);
}
void
-SyncManager::RegisterForBatteryStatus(void) {
+SyncManager::RegisterForBatteryStatusChange(void) {
if (__pBatteryStatusListener) {
if(__pBatteryStatusListener->RegisterBatteryStatusListener() == 0) {
LOG_LOGD("Battery listener : Success");
/* LCOV_EXCL_START */
int
-SyncManager::DeRegisterForBatteryStatus(void) {
+SyncManager::DeRegisterForBatteryStatusChange(void) {
if (__pBatteryStatusListener) {
return(__pBatteryStatusListener->DeRegisterBatteryStatusListener());
}
LOG_LOGD("Register event listeners");
RegisterForNetworkChange();
RegisterForStorageChange();
- RegisterForBatteryStatus();
+ RegisterForBatteryStatusChange();
RegisterForUPSModeChange();
RegisterForDataChange();
#endif
*/
- __pSyncRepositoryEngine->CheckDBFile();
-
Initialize();
//__pSyncRepositoryEngine->OnBooting();
DeRegisterForNetworkChange();
DeRegisterForStorageChange();
- DeRegisterForBatteryStatus();
+ DeRegisterForBatteryStatusChange();
DeRegisterForDataChange();
DeRegisterForUPSModeChange();
__pPkgmgrClientEnDisable = NULL;
- //TODO: uncomment below lines for running accounts logic
/*if (account_unsubscribe_notification(__accountSubscriptionHandle) < 0)
{
LOG_LOGD("SyncManager::SyncManager failed to deregister callback for account updation");
/* LCOV_EXCL_START */
void
-SyncManager::RecordSyncAdapter(const char *SvcAppId, const char *PkgName, int UserId, const char *AppStatus) {
+SyncManager::RecordSyncAdapter(const char *SvcAppId, const char *PkgName, int UserId, const char *DoA, const char *AppStatus, int ProcId) {
+ pthread_mutex_lock(&__syncJobQueueMutex);
+ __pSyncRepositoryEngine->RecordSyncAdapter(SvcAppId, PkgName, UserId, DoA, AppStatus, ProcId);
+ pthread_mutex_unlock(&__syncJobQueueMutex);
+}
+
+
+void
+SyncManager::RecordSyncAdapter(const char *PkgName, int UserId, const char *AppStatus, int ProcId) {
pthread_mutex_lock(&__syncJobQueueMutex);
- __pSyncRepositoryEngine->RecordSyncAdapter(SvcAppId, PkgName, UserId, AppStatus);
+ __pSyncRepositoryEngine->RecordSyncAdapter(PkgName, UserId, AppStatus, ProcId);
pthread_mutex_unlock(&__syncJobQueueMutex);
}
void HandleShutdown(void);
- void RecordSyncAdapter(const char *SvcAppId, const char *PkgName, int UserId, const char *AppStatus);
+ void RecordSyncAdapter(const char *SvcAppId, const char *PkgName, int UserId, const char *DoA, const char *AppStatus, int ProcId);
+
+ void RecordSyncAdapter(const char *PkgName, int UserId, const char *AppStatus, int ProcId);
void RecordSyncAdapter(const char *PkgName, int UserId, const char *AppStatus);
int DeRegisterForStorageChange(void);
- void RegisterForBatteryStatus(void);
+ void RegisterForBatteryStatusChange(void);
- int DeRegisterForBatteryStatus(void);
+ int DeRegisterForBatteryStatusChange(void);
void RegisterForDataChange(void);
#include <assert.h>
#include <glib.h>
#include <app.h>
-#include <app_manager.h>
#include <pkgmgr-info.h>
#include <Elementary.h>
#include <cynara-client.h>
{*/
#define SYNC_MANAGER_DBUS_PATH "/org/tizen/sync/manager"
-#define SYNC_ADAPTER_DBUS_PATH "/org/tizen/sync/adapter/"
+#define SYNC_ADAPTER_DBUS_PATH "/org/tizen/sync/adapter"
#define SYNC_ERROR_DOMAIN "sync-manager"
#define SYNC_ERROR_PREFIX "org.tizen.sync.Error"
#define PRIV_ALARM_SET "http://tizen.org/privilege/alarm.set"
}
+static void
+iterate_g_hash_table(gpointer key, gpointer val, gpointer data) {
+ LOG_LOGD("##### key=[%s](%p) val=[%d](%p) hash=[%u] #####", (char*)key, key, *(int*)val, val, g_str_hash((char*)key));
+}
+
+
+static void
+print_g_hash_table(void) {
+ g_hash_table_foreach(g_hash_table, iterate_g_hash_table, NULL);
+}
+
+
static guint
get_caller_pid(GDBusMethodInvocation* pMethodInvocation) {
guint pid = -1;
SyncService::TriggerStartSync(const char* appId, int uid, int accountId, const char* syncJobName, bool isDataSync, bundle* pExtras) {
LOG_LOGD("Trigger start sync [%s], uid [%d], syncJobName [%s]", appId, uid, syncJobName);
+ int isSvc = SyncManager::GetInstance()->GetSyncRepositoryEngine()->WhetherApplication(appId);
int ret = SYNC_ERROR_NONE;
ret = aul_app_get_status_for_uid(appId, uid);
- if (ret == -1) {
+ if (!isSvc && ret == -1) {
/* Send launch request to wake application */
LOG_LOGD("[%s] is not running, launch the app and wait for signal", appId);
return SYNC_ERROR_SYSTEM;
} else {
- LOG_LOGD("[%s] app is already running", appId);
- TizenSyncAdapter* pSyncAdapter = (TizenSyncAdapter*)g_hash_table_lookup(g_hash_table, appId);
+ LOG_LOGD("[%s] is already running", appId);
+ TizenSyncAdapter* pSyncAdapter = (TizenSyncAdapter*)g_hash_table_lookup(g_hash_table, (gpointer)appId);
+
+ /* verifying items of g_hash_table */
+ print_g_hash_table();
if (!pSyncAdapter) {
LOG_LOGD("Sync adapter entry not found. Preparing sync adapter object");
- app_context_h app_context = NULL;
- pid_t pid;
+ char object_path[64] = { 0, };
- int ret = app_manager_get_app_context(appId, &app_context);
- SYNC_LOGE_RET_RES(ret == APP_MANAGER_ERROR_NONE, SYNC_ERROR_SYSTEM, "getting app_context is failed");
+ if (isSvc) {
+ snprintf(object_path, sizeof(object_path) - 1, "%s/%d", SYNC_ADAPTER_DBUS_PATH, isSvc);
+ } else {
+ pid_t pid;
+ app_context_h app_context = NULL;
- ret = app_context_get_pid(app_context, &pid);
- SYNC_LOGE_RET_RES(ret == APP_MANAGER_ERROR_NONE, SYNC_ERROR_SYSTEM, "getting pid from app_context is failed");
+ int ret = app_manager_get_app_context(appId, &app_context);
+ SYNC_LOGE_RET_RES(ret == APP_MANAGER_ERROR_NONE, SYNC_ERROR_SYSTEM, "getting app_context is failed");
- GError* error = NULL;
- char obj_path[50];
- snprintf(obj_path, 50, "%s%d", SYNC_ADAPTER_DBUS_PATH, pid);
+ ret = app_context_get_pid(app_context, &pid);
+ SYNC_LOGE_RET_RES(ret == APP_MANAGER_ERROR_NONE, SYNC_ERROR_SYSTEM, "getting pid from app_context is failed");
+ snprintf(object_path, sizeof(object_path) - 1, "%s/%d", SYNC_ADAPTER_DBUS_PATH, pid);
+ }
+
+ GError* error = NULL;
GDBusInterfaceSkeleton* interface = NULL;
pSyncAdapter = tizen_sync_adapter_skeleton_new();
if (pSyncAdapter != NULL) {
interface = G_DBUS_INTERFACE_SKELETON(pSyncAdapter);
- if (g_dbus_interface_skeleton_export(interface, gdbusConnection, obj_path, &error)) {
+ if (g_dbus_interface_skeleton_export(interface, gdbusConnection, object_path, &error)) {
g_signal_connect(pSyncAdapter, "handle-send-result", G_CALLBACK(sync_adapter_handle_send_result), NULL);
-
- LOG_LOGD("inserting sync adapter ipc %s %x", appId, pSyncAdapter);
- g_hash_table_insert(g_hash_table, (gchar*)appId, pSyncAdapter);
+ LOG_LOGD("inserting sync adapter ipc [%s][%x]", appId, pSyncAdapter);
+ g_hash_table_insert(g_hash_table, (gpointer)g_strdup(appId), (gpointer)pSyncAdapter);
} else {
SYNC_LOGE_RET_RES(!(error->message), SYNC_ERROR_SYSTEM, "export failed [%s]", error->message);
return SYNC_ERROR_SYSTEM;
SyncService::TriggerStopSync(const char* appId, int uid, int accountId, const char* syncJobName, bool isDataSync, bundle* pExtras) {
LOG_LOGD("Trigger stop sync [%s], uid [%d], syncJobName [%s]", appId, uid, syncJobName);
- TizenSyncAdapter* pSyncAdapter = (TizenSyncAdapter*)g_hash_table_lookup(g_hash_table, appId);
+ TizenSyncAdapter* pSyncAdapter = (TizenSyncAdapter*)g_hash_table_lookup(g_hash_table, (gpointer)appId);
if (!pSyncAdapter) {
LOG_LOGD("Failed to lookup syncadapter");
return;
g_variant_get(unit, "(o)", &unitNode);
GVariant *service = NULL;
- service = g_dbus_connection_call_sync(gdbusConnection, "org.freedesktop.systemd1",
- unitNode,
- "org.freedesktop.DBus.Properties",
- "Get",
- g_variant_new("(ss)", "org.freedesktop.systemd1.Service", "BusName"),
- G_VARIANT_TYPE("(v)"),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- NULL,
- &error);
+ service = g_dbus_connection_call_sync(gdbusConnection, "org.freedesktop.systemd1",
+ unitNode,
+ "org.freedesktop.DBus.Properties",
+ "Get",
+ g_variant_new("(ss)", "org.freedesktop.systemd1.Service", "BusName"),
+ G_VARIANT_TYPE("(v)"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ &error);
if (!service) {
if (error) {
gint sync_result,
const gchar* sync_job_name) {
LOG_LOGD("Received sync job result");
+
guint pid = get_caller_pid(pInvocation);
- string pkgIdStr;
char* pAppId = NULL;
+ string pkgIdStr;
int ret = app_manager_get_app_id(pid, &pAppId);
if (ret == APP_MANAGER_ERROR_NONE) {
pkgIdStr = SyncManager::GetInstance()->GetPkgIdByAppId(pAppId);
} else {
- ret = get_service_name_by_pid(pid, &pAppId);
LOG_LOGD("Request seems to be from app-id less/command line based request");
pkgIdStr = SyncManager::GetInstance()->GetPkgIdByCommandline(pCommandLine);
}
if (!pkgIdStr.empty()) {
- LOG_LOGD("Sync result received from [%s]: sync_job_name [%s] result [%d]", pAppId, sync_job_name, sync_result);
- SyncManager::GetInstance()->OnResultReceived((SyncStatus)sync_result, pAppId, pkgIdStr, sync_job_name);
+ if (pAppId) {
+ LOG_LOGD("Sync result received from [%s]: sync_job_name [%s] result [%d]", pAppId, sync_job_name, sync_result);
+ SyncManager::GetInstance()->OnResultReceived((SyncStatus)sync_result, pAppId, pkgIdStr, sync_job_name);
+ } else {
+ LOG_LOGD("Sync result received from [%s]: sync_job_name [%s] result [%d]", pkgIdStr.c_str(), sync_job_name, sync_result);
+ SyncManager::GetInstance()->OnResultReceived((SyncStatus)sync_result, pkgIdStr.c_str(), pkgIdStr, sync_job_name);
+ }
} else {
LOG_LOGD("sync service: Get package Id fail %d", ret);
}
gboolean
sync_adapter_handle_init_complete(TizenSyncAdapter* pObject, GDBusMethodInvocation* pInvocation) {
guint pid = get_caller_pid(pInvocation);
- char* pAppId = NULL;
+ char* pAppId = NULL;
int ret = app_manager_get_app_id(pid, &pAppId);
- if (ret != APP_MANAGER_ERROR_NONE)
+ if (ret != APP_MANAGER_ERROR_NONE) {
LOG_LOGD("app_manager_get_app_id fail");
+ } else {
+ sa_app_id.append(pAppId);
+ LOG_LOGD("sync adapter client initialisation completed %s", pAppId);
+ free(pAppId);
+ }
- sa_app_id.append(pAppId);
-
- LOG_LOGD("sync adapter client initialisation completed %s", pAppId);
-
- free(pAppId);
//tizen_sync_adapter_complete_init_complete(pObject, pInvocation);
return true;
LOG_LOGD("Caller UID : %s", (const char*)uid);
guint pid = get_caller_pid(pInvocation);
- string pkgIdStr;
+
char* pAppId = NULL;
+ string pkgIdStr;
int ret = app_manager_get_app_id(pid, &pAppId);
if (ret == APP_MANAGER_ERROR_NONE) {
pkgIdStr = SyncManager::GetInstance()->GetPkgIdByAppId(pAppId);
LOG_LOGD("Caller UID : %s", (const char*)uid);
guint pid = get_caller_pid(pInvocation);
- string pkgIdStr;
- char* pAppId;
- int ret = APP_MANAGER_ERROR_NONE;
- ret = app_manager_get_app_id(pid, &pAppId);
+ char* pAppId = NULL;
+ string pkgIdStr;
+ int ret = app_manager_get_app_id(pid, &pAppId);
if (ret == APP_MANAGER_ERROR_NONE) {
pkgIdStr = SyncManager::GetInstance()->GetPkgIdByAppId(pAppId);
free(pAppId);
LOG_LOGD("Received Period Sync request");
LOG_LOGD("Caller UID : %s", (const char*)uid);
- int ret = SYNC_ERROR_NONE;
+ guint pid = get_caller_pid(pInvocation);
- ret = _check_privilege_alarm_set(pInvocation);
- if (ret != SYNC_ERROR_NONE) {
- /* LCOV_EXCL_START */
- GError *error = g_error_new(_sync_error_quark(), ret, "sync service: alarm.set permission denied");
- g_dbus_method_invocation_return_gerror(pInvocation, error);
- g_clear_error(&error);
- /* LCOV_EXCL_STOP */
- return true;
+ int ret = SYNC_ERROR_NONE;
+ if (SyncManager::GetInstance()->GetSyncRepositoryEngine()->WhetherPrivilegeNeeded(pid, pCommandLine)) {
+ ret = _check_privilege_alarm_set(pInvocation);
+ if (ret != SYNC_ERROR_NONE) {
+ /* LCOV_EXCL_START */
+ GError *error = g_error_new(_sync_error_quark(), ret, "sync service: alarm.set permission denied");
+ g_dbus_method_invocation_return_gerror(pInvocation, error);
+ g_clear_error(&error);
+ /* LCOV_EXCL_STOP */
+ return true;
+ }
}
- guint pid = get_caller_pid(pInvocation);
+ char* pAppId = NULL;
string pkgIdStr;
- int sync_job_id = 0;
- char* pAppId;
-
ret = app_manager_get_app_id(pid, &pAppId);
if (ret == APP_MANAGER_ERROR_NONE) {
pkgIdStr = SyncManager::GetInstance()->GetPkgIdByAppId(pAppId);
}
bundle *pBundle = NULL;
+ int sync_job_id = 0;
if (!pkgIdStr.empty()) {
LOG_LOGD("Params acc[%d] name[%s] option[%d] period[%d] package[%s]", accountId, pSyncJobName, sync_option, sync_interval, pkgIdStr.c_str());
pBundle = umarshal_bundle(pSyncJobUserData);
LOG_LOGD("Received data change Sync request");
LOG_LOGD("Caller UID : %s", (const char*)uid);
- int ret = SYNC_ERROR_NONE;
-
- const char *capability = (char *)pCapabilityArg;
- if (!strcmp(capability, "http://tizen.org/sync/capability/calendar") ||
- !strcmp(capability, "http://tizen.org/sync/capability/contact")) {
- if (!strcmp(capability, "http://tizen.org/sync/capability/calendar"))
- ret = _check_privilege_calendar_read(pInvocation);
- else
- ret = _check_privilege_contact_read(pInvocation);
+ guint pid = get_caller_pid(pInvocation);
- if (ret != SYNC_ERROR_NONE) {
- /* LCOV_EXCL_START */
- GError* error = NULL;
+ int ret = SYNC_ERROR_NONE;
+ if (SyncManager::GetInstance()->GetSyncRepositoryEngine()->WhetherPrivilegeNeeded(pid, pCommandLine)) {
+ const char *capability = (char *)pCapabilityArg;
+ if (!strcmp(capability, "http://tizen.org/sync/capability/calendar") ||
+ !strcmp(capability, "http://tizen.org/sync/capability/contact")) {
if (!strcmp(capability, "http://tizen.org/sync/capability/calendar"))
- error = g_error_new(_sync_error_quark(), ret, "sync service: calendar.read permission denied");
+ ret = _check_privilege_calendar_read(pInvocation);
else
- error = g_error_new(_sync_error_quark(), ret, "sync service: contact.read permission denied");
+ ret = _check_privilege_contact_read(pInvocation);
- g_dbus_method_invocation_return_gerror(pInvocation, error);
- g_clear_error(&error);
- /* LCOV_EXCL_STOP */
- return true;
+ if (ret != SYNC_ERROR_NONE) {
+ /* LCOV_EXCL_START */
+ GError* error = NULL;
+ if (!strcmp(capability, "http://tizen.org/sync/capability/calendar"))
+ error = g_error_new(_sync_error_quark(), ret, "sync service: calendar.read permission denied");
+ else
+ error = g_error_new(_sync_error_quark(), ret, "sync service: contact.read permission denied");
+
+ g_dbus_method_invocation_return_gerror(pInvocation, error);
+ g_clear_error(&error);
+ /* LCOV_EXCL_STOP */
+ return true;
+ }
}
}
- guint pid = get_caller_pid(pInvocation);
+ char* pAppId = NULL;
string pkgIdStr;
- int sync_job_id = 0;
- char* pAppId;
-
ret = app_manager_get_app_id(pid, &pAppId);
if (ret == APP_MANAGER_ERROR_NONE) {
pkgIdStr = SyncManager::GetInstance()->GetPkgIdByAppId(pAppId);
}
bundle *pBundle = NULL;
+ int sync_job_id = 0;
if (!pkgIdStr.empty()) {
LOG_LOGD("Params account [%d] job_name [%s] sync_option[%d] sync_job_id[%d] package [%s] ", accountId, pCapabilityArg, sync_option, sync_job_id, pkgIdStr.c_str());
pBundle = umarshal_bundle(pSyncJobUserData);
guint pid = get_caller_pid(pInvocation);
- if (!is_service_app(pid)) {
- /* LCOV_EXCL_START */
- GError* error = g_error_new(_sync_error_quark(), SYNC_ERROR_INVALID_OPERATION, "App not supported");
- g_dbus_method_invocation_return_gerror(pInvocation, error);
- g_clear_error(&error);
- /* LCOV_EXCL_STOP */
- return false;
- }
-
- int ret = SYNC_ERROR_SYSTEM;
- string pkgIdStr;
+ bool isApp = true;
char* pAppId = NULL;
- ret = app_manager_get_app_id(pid, &pAppId);
+ string pkgIdStr;
+ int ret = app_manager_get_app_id(pid, &pAppId);
if (ret == APP_MANAGER_ERROR_NONE) {
+ if (!is_service_app(pid)) {
+ /* LCOV_EXCL_START */
+ GError* error = g_error_new(_sync_error_quark(), SYNC_ERROR_INVALID_OPERATION, "App is not a service application");
+ g_dbus_method_invocation_return_gerror(pInvocation, error);
+ g_clear_error(&error);
+ /* LCOV_EXCL_STOP */
+ return false;
+ }
pkgIdStr = SyncManager::GetInstance()->GetPkgIdByAppId(pAppId);
} else {
/* LCOV_EXCL_START */
- ret = get_service_name_by_pid(pid, &pAppId);
LOG_LOGD("Request seems to be from app-id less/command line based request");
pkgIdStr = SyncManager::GetInstance()->GetPkgIdByCommandline(pCommandLine);
+ isApp = false;
/* LCOV_EXCL_STOP */
}
/* LCOV_EXCL_START */
const char *registered_app_id = pAggregator->GetSyncAdapter(pkgIdStr.c_str());
LOG_LOGD("registered appId is [%s]", registered_app_id);
- LOG_LOGD("caller appId is [%s]", pAppId);
- if (strncmp(pAppId, registered_app_id, strlen(pAppId))) {
- GError* error = g_error_new(_sync_error_quark(), SYNC_ERROR_QUOTA_EXCEEDED, "Sync adapter already registered");
- g_dbus_method_invocation_return_gerror(pInvocation, error);
- g_clear_error(&error);
- return false;
+ if (isApp) {
+ LOG_LOGD("caller appId is [%s]", pAppId);
+ if (!strncmp(pAppId, registered_app_id, strlen(pAppId))) {
+ GError* error = g_error_new(_sync_error_quark(), SYNC_ERROR_QUOTA_EXCEEDED, "Sync adapter already registered");
+ g_dbus_method_invocation_return_gerror(pInvocation, error);
+ g_clear_error(&error);
+ return false;
+ } else {
+ check_jobs = true; /* Probably sync service may have started this service. Alert sync manager for scheduling pending jobs */
+ }
} else {
+ /* renew the pid information for services */
+ SyncManager::GetInstance()->RecordSyncAdapter((const char *)pkgIdStr.c_str(), atoi((char*)uid), "enabled", pid);
check_jobs = true; /* Probably sync service may have started this service. Alert sync manager for scheduling pending jobs */
}
/* LCOV_EXCL_STOP */
}
- char object_path[50];
- snprintf(object_path, 50, "%s%d", SYNC_ADAPTER_DBUS_PATH, pid);
+ char object_path[64];
+ snprintf(object_path, sizeof(object_path) - 1, "%s/%d", SYNC_ADAPTER_DBUS_PATH, pid);
GError *error = NULL;
GDBusInterfaceSkeleton* interface = NULL;
interface = G_DBUS_INTERFACE_SKELETON(syncAdapterObj);
if (g_dbus_interface_skeleton_export(interface, gdbusConnection, object_path, &error)) {
g_signal_connect(syncAdapterObj, "handle-send-result", G_CALLBACK(sync_adapter_handle_send_result), NULL);
- pAggregator->AddSyncAdapter(pkgIdStr.c_str(), pAppId);
-
- LOG_LOGD("inserting sync adapter ipc %s", pAppId);
- g_hash_table_insert(g_hash_table, (gchar*)pAppId, syncAdapterObj);
-
+ if (isApp) {
+ pAggregator->AddSyncAdapter((const char*)pkgIdStr.c_str(), pAppId);
+ LOG_LOGD("inserting sync adapter ipc [%s][%x]", pAppId, syncAdapterObj);
+ g_hash_table_insert(g_hash_table, (gpointer)g_strdup(pAppId), (gpointer)syncAdapterObj);
+ } else {
+ pAggregator->AddSyncAdapter((const char*)pkgIdStr.c_str(), (const char*)pkgIdStr.c_str());
+ LOG_LOGD("inserting sync adapter ipc [%s][%x]", pkgIdStr.c_str(), syncAdapterObj);
+ g_hash_table_insert(g_hash_table, (gpointer)g_strdup(pkgIdStr.c_str()), (gpointer)syncAdapterObj);
+ }
ret = SYNC_ERROR_NONE;
} else {
LOG_LOGD("export failed %s", error->message); /* LCOV_EXCL_LINE */
}
LOG_LOGD("sync service: recoding the change of registered sync adapter");
- SyncManager::GetInstance()->RecordSyncAdapter((const char*)pAppId, pkgIdStr.c_str(), atoi(uid), "enabled");
+ if (isApp)
+ SyncManager::GetInstance()->RecordSyncAdapter((const char*)pAppId, pkgIdStr.c_str(), atoi(uid), "app", "enabled", 0);
+ else
+ SyncManager::GetInstance()->RecordSyncAdapter((const char*)pkgIdStr.c_str(), pkgIdStr.c_str(), atoi(uid), "daemon", "enabled", (int)pid);
LOG_LOGD("sync service: adding sync adapter ends");
sync_manager_remove_sync_adapter(TizenSyncManager* pObject, GDBusMethodInvocation* pInvocation, const gchar* uid, const gchar* pCommandLine) {
LOG_LOGD("Request to remove sync adapter");
LOG_LOGD("Caller UID : %s", (const char*)uid);
- string pkgIdStr;
guint pid = get_caller_pid(pInvocation);
- if (!is_service_app(pid)) {
- /* LCOV_EXCL_START */
- GError* error = g_error_new(_sync_error_quark(), SYNC_ERROR_INVALID_OPERATION, "App not supported");
- g_dbus_method_invocation_return_gerror(pInvocation, error);
- g_clear_error(&error);
- /* LCOV_EXCL_STOP */
- return false;
- }
- char* pAppId;
+ bool isApp = true;
+ char* pAppId = NULL;
+ string pkgIdStr;
int ret = app_manager_get_app_id(pid, &pAppId);
if (ret == APP_MANAGER_ERROR_NONE) {
+ if (!is_service_app(pid)) {
+ /* LCOV_EXCL_START */
+ GError* error = g_error_new(_sync_error_quark(), SYNC_ERROR_INVALID_OPERATION, "App not supported");
+ g_dbus_method_invocation_return_gerror(pInvocation, error);
+ g_clear_error(&error);
+ /* LCOV_EXCL_STOP */
+ return false;
+ }
pkgIdStr = SyncManager::GetInstance()->GetPkgIdByAppId(pAppId);
} else {
/* LCOV_EXCL_START */
LOG_LOGD("Request seems to be from app-id less/command line based request");
pkgIdStr = SyncManager::GetInstance()->GetPkgIdByCommandline(pCommandLine);
+ isApp = false;
/* LCOV_EXCL_STOP */
}
LOG_LOGD("sync service: Get package Id fail [%d]", ret); /* LCOV_EXCL_LINE */
}
- TizenSyncAdapter* pSyncAdapter = (TizenSyncAdapter*) g_hash_table_lookup(g_hash_table, pAppId);
+ TizenSyncAdapter* pSyncAdapter;
+ if (isApp)
+ pSyncAdapter = (TizenSyncAdapter*) g_hash_table_lookup(g_hash_table, (gpointer)pAppId);
+ else
+ pSyncAdapter = (TizenSyncAdapter*) g_hash_table_lookup(g_hash_table, (gpointer)(pkgIdStr.c_str()));
if (pSyncAdapter == NULL) {
/* LCOV_EXCL_START */
- LOG_LOGD("Failed to lookup syncadapter gdbus object for [%s]", pAppId);
- char object_path[50];
- snprintf(object_path, 50, "%s%d", SYNC_ADAPTER_DBUS_PATH, pid);
+ if (isApp)
+ LOG_LOGD("Failed to lookup syncadapter gdbus object for [%s]", pAppId);
+ else
+ LOG_LOGD("Failed to lookup syncadapter gdbus object for [%s]", pkgIdStr.c_str());
+
+ char object_path[64];
+ snprintf(object_path, sizeof(object_path) - 1, "%s/%d", SYNC_ADAPTER_DBUS_PATH, pid);
GError *error = NULL;
GDBusInterfaceSkeleton* interface = NULL;
interface = G_DBUS_INTERFACE_SKELETON(syncAdapterObj);
if (g_dbus_interface_skeleton_export(interface, gdbusConnection, object_path, &error)) {
g_signal_connect(syncAdapterObj, "handle-send-result", G_CALLBACK(sync_adapter_handle_send_result), NULL);
+ g_hash_table_insert(g_hash_table, (gpointer)g_strdup(pkgIdStr.c_str()), (gpointer)syncAdapterObj);
pAggregator->RemoveSyncAdapter(pkgIdStr.c_str());
- LOG_LOGD("deleting sync adapter ipc [%s]", pAppId);
+ if (isApp)
+ LOG_LOGD("deleting sync adapter ipc [%s]", pAppId);
+ else
+ LOG_LOGD("deleting sync adapter ipc [%s]", pkgIdStr.c_str());
+ g_dbus_interface_skeleton_unexport(interface);
ret = SYNC_ERROR_NONE;
} else {
LOG_LOGD("export failed %s", error->message); /* LCOV_EXCL_LINE */
}
}
- free(pAppId);
+ if (pAppId)
+ free(pAppId);
/* LCOV_EXCL_STOP */
} else {
GDBusInterfaceSkeleton* interface = NULL;
else
g_variant_builder_add(&builder, "{sv}", KEY_SYNC_JOB_NAME, g_variant_new_string(pSyncJob->__syncJobName.c_str()));
- //LOG_LOGD("job name and id [%s] [%d]", pSyncJob->__syncJobName.c_str(), pSyncJob->GetSyncJobId());
+ /*
+ * LOG_LOGD("job name and id [%s] [%d]", pSyncJob->__syncJobName.c_str(), pSyncJob->GetSyncJobId());
+ */
g_variant_builder_add(&builder, "{sv}", KEY_SYNC_JOB_USER_DATA, marshal_bundle(pSyncJob->__pExtras));
}
LOG_LOGD("Caller UID : %s", (const char*)uid);
guint pid = get_caller_pid(pInvocation);
- string pkgId;
- char* pAppId;
- int ret = APP_MANAGER_ERROR_NONE;
- ret = app_manager_get_app_id(pid, &pAppId);
+ char* pAppId = NULL;
+ string pkgIdStr;
+ int ret = app_manager_get_app_id(pid, &pAppId);
if (ret == APP_MANAGER_ERROR_NONE) {
- pkgId = SyncManager::GetInstance()->GetPkgIdByAppId(pAppId);
+ pkgIdStr = SyncManager::GetInstance()->GetPkgIdByAppId(pAppId);
free(pAppId);
} else {
/* LCOV_EXCL_START */
LOG_LOGD("Request seems to be from app-id less/command line based request");
- pkgId = SyncManager::GetInstance()->GetPkgIdByCommandline(pCommandLine);
+ pkgIdStr = SyncManager::GetInstance()->GetPkgIdByCommandline(pCommandLine);
/* LCOV_EXCL_STOP */
}
GVariant* outSyncJobList = NULL;
GVariantBuilder builder;
- if (!pkgId.empty()) {
+ if (!pkgIdStr.empty()) {
SyncJobsAggregator* pSyncJobsAggregator = SyncManager::GetInstance()->GetSyncJobsAggregator();
- SyncJobsInfo* pPackageSyncJobs = pSyncJobsAggregator->GetSyncJobsInfo(pkgId.c_str());
+ SyncJobsInfo* pPackageSyncJobs = pSyncJobsAggregator->GetSyncJobsInfo(pkgIdStr.c_str());
/*
- SyncJobsInfo* pPackageSyncJobs = pSyncJobsAggregator->GetSyncJobsInfo(pkgId.c_str(), atoi((char*)uid));
- */
+ * SyncJobsInfo* pPackageSyncJobs = pSyncJobsAggregator->GetSyncJobsInfo(pkgIdStr.c_str(), atoi((char*)uid));
+ */
if (pPackageSyncJobs != NULL) {
- LOG_LOGD("Package ID [%s]", pkgId.c_str());
+ LOG_LOGD("Package ID [%s]", pkgIdStr.c_str());
map<int, ISyncJob*>& allSyncJobs = pPackageSyncJobs->GetAllSyncJobs();
if (!allSyncJobs.empty()) {
LOG_LOGD("sync service: registered sync jobs are not found"); /* LCOV_EXCL_LINE */
}
} else {
- LOG_LOGD("Sync jobs information not found for package [%s], pkgId.str()"); /* LCOV_EXCL_LINE */
+ LOG_LOGD("Sync jobs information not found for package [pkgIdStr.empty()]"); /* LCOV_EXCL_LINE */
}
if (outSyncJobList == NULL) {
}
+static void
+free_hash_table_items(gpointer key, gpointer value, gpointer user_data) {
+ LOG_LOGD("free g_hash_table - key : [%s], value : [%x]", (char *)key, value);
+ g_free(key);
+}
+
+
void
SyncService::FinalizeDbus(void) {
+ g_hash_table_foreach(g_hash_table, free_hash_table_items, NULL);
+ g_hash_table_destroy(g_hash_table);
+
LOG_LOGD("Dbus finalization starts");
g_bus_unown_name(g_bus_owner_id);
}
/* LCOV_EXCL_STOP */
//}//_SyncManager
+
#define SYNC_SERVICE_SYNC_SERVICE_H
#include <iostream>
+#include <app_manager.h>
#include <bundle.h>
#include "SyncManager_Singleton.h"
#include "sync-adapter-stub.h"
void
terminate_service(void) {
- LOG_LOGD("Sync Manager termination completed");
+ LOG_LOGD("Sync Manager termination complete");
if (ShutdownInitiated == false) {
ShutdownInitiated = true;