added logic for sevices 41/139541/7 submit/tizen/20170725.113919
authorIckhee Woo <ickhee.woo@samsung.com>
Wed, 19 Jul 2017 08:58:38 +0000 (17:58 +0900)
committerIckhee Woo <ickhee.woo@samsung.com>
Tue, 25 Jul 2017 11:32:23 +0000 (20:32 +0900)
- modified sync request logic
- added attribute for distinguish the kind of process
- added logic to judge app or service
- fixed GDBus interface logic

Change-Id: I3173d7e7200123b36d2eb450572c4f4311bea986
Signed-off-by: Ickhee Woo <ickhee.woo@samsung.com>
13 files changed:
packaging/sync-manager.spec
src/sync-client/sync_adapter.c
src/sync-client/sync_manager.c
src/sync-service/SyncManager_DataChangeSyncScheduler.cpp
src/sync-service/SyncManager_NetworkChangeListener.cpp
src/sync-service/SyncManager_RepositoryEngine.cpp
src/sync-service/SyncManager_RepositoryEngine.h
src/sync-service/SyncManager_StorageChangeListener.cpp
src/sync-service/SyncManager_SyncManager.cpp
src/sync-service/SyncManager_SyncManager.h
src/sync-service/SyncManager_SyncService.cpp
src/sync-service/SyncManager_SyncService.h
src/sync-service/main.cpp

index a7378358bcc58ffb24061f5c41ca24b0f43d3706..4ebd6b87aec43451078910d079f224d236677607 100644 (file)
@@ -2,7 +2,7 @@
 %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
index d829ad34bae5215913f02e302a7d20cf48f0b9d5..aaaa4a6f8f6d57ef6a564649cf668fb6b5118f56 100644 (file)
@@ -44,7 +44,7 @@ typedef enum {
 
 #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 {
@@ -166,8 +166,8 @@ int __register_sync_adapter(bool flag)
                                                                                                                                        &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) {
@@ -198,13 +198,13 @@ int sync_adapter_set_callbacks(sync_adapter_start_sync_cb on_start_cb, sync_adap
                        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);
index 5124a6254819dbeb461d6f2f8cd0453e578dde14..4343d120a1ebe406b8deb084a5c0493896542895 100644 (file)
@@ -32,6 +32,7 @@
 #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"
@@ -187,11 +188,11 @@ static int initialize_connection()
        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);
@@ -304,8 +305,8 @@ int sync_manager_on_demand_sync_job(account_h account, const char *sync_job_name
                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);
@@ -351,8 +352,8 @@ int sync_manager_add_periodic_sync_job(account_h account, const char *sync_job_n
 
        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);
@@ -408,8 +409,8 @@ int sync_manager_add_data_change_sync_job(account_h account, const char *sync_ca
                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);
@@ -437,8 +438,8 @@ int sync_manager_remove_sync_job(int sync_job_id)
 
        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;
 
@@ -466,8 +467,8 @@ int sync_manager_foreach_sync_job(sync_manager_sync_job_cb sync_job_cb, void *us
 
        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;
index 50c08bf59cb1cd41ae257fcdbc9da52d4d08dd12..daf5cdc5daa336839e8c1a1f991bc06cc8028684 100644 (file)
@@ -317,7 +317,7 @@ DataChangeSyncScheduler::DeRegisterDataChangeListeners(void) {
                return SYNC_ERROR_INVALID_OPERATION;
        }
 
-       LOG_LOGD("DeRegistration of DataChangeListener Successfully Ends");
+       LOG_LOGD("DeRegisterDataChangeListener");
 
        return SYNC_ERROR_NONE;
 }
index 72da6699aa77feaa7a032b38c5943020cb615719..b8eb4de99f431fb924e667fe909cc4dba1846436 100644 (file)
@@ -141,7 +141,7 @@ NetworkChangeListener::RegisterNetworkChangeListener(void) {
 /* 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)
index 0ef2a5f2186da02f6866213b812df0d215221fb1..f0575772a5c102d114f1452f1a3844dd9b4a5642 100644 (file)
@@ -49,7 +49,7 @@
 #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
@@ -151,15 +151,6 @@ RepositoryEngine::RepositoryEngine(void) {
 }
 
 
-void
-RepositoryEngine::OnBooting() {
-       if (!ReadSyncAdaptersFromDB())
-               ReadSyncAdapters();
-       if (!ReadSyncJobsDataFromDB())
-               ReadSyncJobsData();
-}
-
-
 //Test method
 /*
 static void
@@ -424,11 +415,12 @@ RepositoryEngine::ReadSyncAdapters(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)
@@ -698,8 +690,15 @@ RepositoryEngine::ParseSyncJobsN(xmlNodePtr cur, xmlChar* pPackage) {
 
 
 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);
 }
 
 
@@ -836,6 +835,7 @@ static int check_db_file(void) {
        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 {
@@ -848,9 +848,110 @@ static int check_db_file(void) {
 
 
 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;
 }
 
 
@@ -865,12 +966,10 @@ RepositoryEngine::ReadSyncAdaptersFromDB(void) {
        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);
@@ -891,25 +990,30 @@ RepositoryEngine::ReadSyncAdaptersFromDB(void) {
 
                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]);
                                }
                        }
                }
@@ -917,15 +1021,12 @@ RepositoryEngine::ReadSyncAdaptersFromDB(void) {
                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);
@@ -943,7 +1044,7 @@ RepositoryEngine::ReadSyncAdaptersFromDB(void) {
 
 
 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) {
@@ -953,8 +1054,13 @@ RepositoryEngine::InsertSyncAdapterToDB(const char *SvcAppId, const char *PkgNam
        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;
@@ -977,12 +1083,12 @@ RepositoryEngine::InsertSyncAdapterToDB(const char *SvcAppId, const char *PkgNam
                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);
@@ -1029,6 +1135,67 @@ RepositoryEngine::InsertSyncAdapterToDB(const char *SvcAppId, const char *PkgNam
 }
 
 
+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;
@@ -1040,8 +1207,8 @@ RepositoryEngine::UpdateSyncAdapterToDB(const char *SvcAppId, int UserId, const
        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;
 
@@ -1098,8 +1265,8 @@ RepositoryEngine::DeleteSyncAdapterFromDB(const char *PkgName, int UserId) {
        }
        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;
@@ -1159,8 +1326,8 @@ RepositoryEngine::StartPackageSyncJobs(const char *PackageName, int uid) {
        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;
@@ -1264,8 +1431,8 @@ RepositoryEngine::CancelPackageSyncJobs(const char *PackageName, int uid) {
        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;
@@ -1386,12 +1553,10 @@ RepositoryEngine::ReadSyncJobsDataFromDB(void) {
        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);
@@ -1458,16 +1623,12 @@ RepositoryEngine::ReadSyncJobsDataFromDB(void) {
                }
 
                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);
@@ -1491,15 +1652,13 @@ static char *UserKey = NULL;
 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 "";
 }
 
@@ -1516,18 +1675,18 @@ RepositoryEngine::InsertSyncJobToDB(const char *SvcAppId, const char *PkgName, i
        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());
@@ -1630,8 +1789,8 @@ RepositoryEngine::UpdateAppStatusToDB(const char *SvcAppId, const char *PkgName,
        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",
@@ -1690,18 +1849,18 @@ RepositoryEngine::UpdateSyncJobToDB(const char *SvcAppId, int UserId, const char
        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());
@@ -1767,10 +1926,10 @@ RepositoryEngine::DeleteSyncJobFromDB(const char *PkgName, int UserId, int JobId
        }
        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;
@@ -1824,8 +1983,8 @@ RepositoryEngine::DeleteAllSyncJobsFromDB(const char *PkgName, int UserId) {
        }
        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;
index 1668f38e86059eda7f08e61496b6d14d416ddb5f..8d83dd5b8321f32f1ce29d3a399e4e5f9322fa37 100644 (file)
@@ -42,7 +42,7 @@
 #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
@@ -63,9 +63,11 @@ public:
 
        ~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);
 
@@ -77,7 +79,9 @@ public:
 
        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);
 
@@ -122,7 +126,9 @@ private:
 
        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);
 
index f1abd700ae2e6051a0d47d642725541166faae20..17d52565e2896b5f5945096ea5229364b84b58ff 100644 (file)
@@ -58,7 +58,7 @@ StorageChangeListener::RegisterStorageChangeListener(void) {
 /* 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));
 }
index 0de6309ac10bfd7a3acb4cff4b06f2692e886654..66f214412a9dbd2f3b8a5e463320226c7c69a42c 100644 (file)
@@ -440,9 +440,10 @@ string
 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);
@@ -473,6 +474,12 @@ SyncManager::GetPkgIdByCommandline(const char* 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 */
@@ -523,7 +530,7 @@ SyncManager::RegisterForUPSModeChange(void) {
 /* 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);
 }
@@ -554,7 +561,7 @@ SyncManager::DeRegisterForStorageChange(void) {
 
 
 void
-SyncManager::RegisterForBatteryStatus(void) {
+SyncManager::RegisterForBatteryStatusChange(void) {
        if (__pBatteryStatusListener) {
                if(__pBatteryStatusListener->RegisterBatteryStatusListener() == 0) {
                        LOG_LOGD("Battery listener : Success");
@@ -567,7 +574,7 @@ SyncManager::RegisterForBatteryStatus(void) {
 
 /* LCOV_EXCL_START */
 int
-SyncManager::DeRegisterForBatteryStatus(void) {
+SyncManager::DeRegisterForBatteryStatusChange(void) {
        if (__pBatteryStatusListener) {
                return(__pBatteryStatusListener->DeRegisterBatteryStatusListener());
        }
@@ -772,7 +779,7 @@ SyncManager::Construct(void) {
        LOG_LOGD("Register event listeners");
        RegisterForNetworkChange();
        RegisterForStorageChange();
-       RegisterForBatteryStatus();
+       RegisterForBatteryStatusChange();
        RegisterForUPSModeChange();
        RegisterForDataChange();
 
@@ -800,8 +807,6 @@ SyncManager::Construct(void) {
 #endif
 */
 
-       __pSyncRepositoryEngine->CheckDBFile();
-
        Initialize();
        //__pSyncRepositoryEngine->OnBooting();
 
@@ -823,7 +828,7 @@ SyncManager::Destruct(void) {
 
        DeRegisterForNetworkChange();
        DeRegisterForStorageChange();
-       DeRegisterForBatteryStatus();
+       DeRegisterForBatteryStatusChange();
        DeRegisterForDataChange();
        DeRegisterForUPSModeChange();
 
@@ -848,7 +853,6 @@ SyncManager::Destruct(void) {
 
        __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");
@@ -932,9 +936,17 @@ SyncManager::HandleShutdown(void) {
 
 /* 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);
 }
 
index 4da9bf5939c8ceea5d232cce16df7d96cb0c9ff0..b28966bed4a163c7c08f938c92e50ffe20c635bd 100644 (file)
@@ -133,7 +133,9 @@ public:
 
        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);
 
@@ -172,9 +174,9 @@ private:
 
        int DeRegisterForStorageChange(void);
 
-       void RegisterForBatteryStatus(void);
+       void RegisterForBatteryStatusChange(void);
 
-       int DeRegisterForBatteryStatus(void);
+       int DeRegisterForBatteryStatusChange(void);
 
        void RegisterForDataChange(void);
 
index 0d1867b81a3f2089d19929b6ac337dc8b0fa9876..a9515fcda7b9100959b2f24324c0fcd03451e5ef 100644 (file)
@@ -28,7 +28,6 @@
 #include <assert.h>
 #include <glib.h>
 #include <app.h>
-#include <app_manager.h>
 #include <pkgmgr-info.h>
 #include <Elementary.h>
 #include <cynara-client.h>
@@ -55,7 +54,7 @@ static bool check_jobs = false;
 {*/
 
 #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"
@@ -171,6 +170,18 @@ _sync_error_quark(void) {
 }
 
 
+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;
@@ -342,9 +353,10 @@ int
 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);
 
@@ -359,35 +371,42 @@ SyncService::TriggerStartSync(const char* appId, int uid, int accountId, const c
 
                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;
@@ -409,7 +428,7 @@ void
 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;
@@ -572,16 +591,16 @@ get_service_name_by_pid(guint pid, char** pAppId) {
                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) {
@@ -642,22 +661,27 @@ sync_adapter_handle_send_result(TizenSyncAdapter* pObject, GDBusMethodInvocation
                                                                                                                                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);
        }
@@ -674,17 +698,17 @@ sync_adapter_handle_send_result(TizenSyncAdapter* pObject, GDBusMethodInvocation
 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;
@@ -707,8 +731,9 @@ sync_manager_add_on_demand_job(TizenSyncManager* pObject, GDBusMethodInvocation*
        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);
@@ -757,11 +782,10 @@ sync_manager_remove_job(TizenSyncManager* pObject, GDBusMethodInvocation* pInvoc
        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);
@@ -812,23 +836,23 @@ sync_manager_add_periodic_job(TizenSyncManager* pObject, GDBusMethodInvocation*
        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);
@@ -841,6 +865,7 @@ sync_manager_add_periodic_job(TizenSyncManager* pObject, GDBusMethodInvocation*
        }
 
        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);
@@ -888,36 +913,36 @@ sync_manager_add_data_change_job(TizenSyncManager* pObject, GDBusMethodInvocatio
        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);
@@ -930,6 +955,7 @@ sync_manager_add_data_change_job(TizenSyncManager* pObject, GDBusMethodInvocatio
        }
 
        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);
@@ -1049,26 +1075,25 @@ sync_manager_add_sync_adapter(TizenSyncManager* pObject, GDBusMethodInvocation*
 
        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 */
        }
 
@@ -1086,20 +1111,26 @@ sync_manager_add_sync_adapter(TizenSyncManager* pObject, GDBusMethodInvocation*
                        /* 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;
@@ -1108,11 +1139,15 @@ sync_manager_add_sync_adapter(TizenSyncManager* pObject, GDBusMethodInvocation*
                        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 */
@@ -1139,7 +1174,10 @@ sync_manager_add_sync_adapter(TizenSyncManager* pObject, GDBusMethodInvocation*
        }
 
        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");
 
@@ -1151,26 +1189,28 @@ gboolean
 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 */
        }
 
@@ -1183,12 +1223,20 @@ sync_manager_remove_sync_adapter(TizenSyncManager* pObject, GDBusMethodInvocatio
                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;
@@ -1197,17 +1245,23 @@ sync_manager_remove_sync_adapter(TizenSyncManager* pObject, GDBusMethodInvocatio
                        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;
@@ -1242,7 +1296,9 @@ marshal_sync_job(ISyncJob* syncJob) {
                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));
        }
@@ -1257,34 +1313,33 @@ sync_manager_get_all_sync_jobs(TizenSyncManager* pObject, GDBusMethodInvocation*
        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()) {
@@ -1302,7 +1357,7 @@ sync_manager_get_all_sync_jobs(TizenSyncManager* pObject, GDBusMethodInvocation*
                        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) {
@@ -1474,8 +1529,18 @@ SyncService::SyncService(void)
 }
 
 
+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);
 }
@@ -1487,3 +1552,4 @@ SyncService::~SyncService(void) {
 /* LCOV_EXCL_STOP */
 
 //}//_SyncManager
+
index 2def69ac36363df00091cc3965330d60ca1355b3..a18b93dc3ab2c65b6fdc4e699df0453ce2dad3c5 100644 (file)
@@ -25,6 +25,7 @@
 #define SYNC_SERVICE_SYNC_SERVICE_H
 
 #include <iostream>
+#include <app_manager.h>
 #include <bundle.h>
 #include "SyncManager_Singleton.h"
 #include "sync-adapter-stub.h"
index 9c8f25f1e97720fe65f815e792983aa893d44df7..05db6602fed7d55682cafcc76161f2497d4186b6 100644 (file)
@@ -37,7 +37,7 @@ OnIdle(void* pUserData) {
 
 void
 terminate_service(void) {
-       LOG_LOGD("Sync Manager termination completed");
+       LOG_LOGD("Sync Manager termination complete");
 
        if (ShutdownInitiated == false) {
                ShutdownInitiated = true;