Call OCInit() when iotcon_connect() is called 82/61682/2
authoryoungman <yman.jung@samsung.com>
Wed, 9 Mar 2016 22:59:55 +0000 (07:59 +0900)
committeryoungman <yman.jung@samsung.com>
Wed, 9 Mar 2016 23:25:11 +0000 (08:25 +0900)
Change-Id: I1d413a4a862f9c6d35788f9c0c9c564087666e79
Signed-off-by: youngman <yman.jung@samsung.com>
daemon/icd-dbus.c
daemon/icd-ioty.c
daemon/icd-ioty.h
daemon/icd.c
daemon/icd.h

index b7868ee6994670857a5d5e264ca72cc1f11a35a6..0654c303b2e462fdb7faa5c29a5dfd298629e3f7 100644 (file)
@@ -651,6 +651,13 @@ static gboolean _dbus_handle_initialize(icDbus *object,
        const gchar *sender;
        icd_dbus_client_s *client = NULL;
 
+       ret = icd_initialize();
+       if (IOTCON_ERROR_NONE != ret) {
+               ERR("icd_initialize() Fail(%d)", ret);
+               ic_dbus_complete_initialize(object, invocation, ret);
+               return TRUE;
+       }
+
        sender = g_dbus_method_invocation_get_sender(invocation);
 
        g_mutex_lock(&icd_dbus_client_list_mutex);
index c74003d3fc5620a401e276db9fdff0ffc76b9821..7d94c8488c8557464857c4e61849d538a45bc068 100644 (file)
@@ -64,7 +64,7 @@ void icd_ioty_csdk_unlock()
 }
 
 
-GThread* icd_ioty_init(const char *addr, unsigned short port)
+int icd_ioty_init(const char *addr, unsigned short port, GThread **out_thread)
 {
        FN_CALL;
        GError *error;
@@ -73,7 +73,7 @@ GThread* icd_ioty_init(const char *addr, unsigned short port)
        OCStackResult result = OCInit(addr, port, OC_CLIENT_SERVER);
        if (OC_STACK_OK != result) {
                ERR("OCInit() Fail(%d)", result);
-               return NULL;
+               return icd_ioty_convert_error(result);
        }
 
        DBG("OCInit() Success");
@@ -83,10 +83,12 @@ GThread* icd_ioty_init(const char *addr, unsigned short port)
        if (NULL == thread) {
                ERR("g_thread_try_new() Fail(%s)", error->message);
                g_error_free(error);
-               return NULL;
+               return IOTCON_ERROR_SYSTEM;
        }
 
-       return thread;
+       *out_thread = thread;
+
+       return IOTCON_ERROR_NONE;
 }
 
 
index 983f4ed561f881ebe34e8336c61eb02a239e2ef3..7315e2378ab5af3d86376b03eaf04ca132a4958f 100644 (file)
@@ -81,7 +81,7 @@ void icd_ioty_csdk_lock();
 
 void icd_ioty_csdk_unlock();
 
-GThread* icd_ioty_init(const char *addr, unsigned short port);
+int icd_ioty_init(const char *addr, unsigned short port, GThread **out_thread);
 
 void icd_ioty_deinit(GThread *thread);
 
index 87c1702da1179056cbd8c44e18604befe43d918b..ac484eeeac0ed97ebb3b9a0def9e3f3bbfbec3db 100644 (file)
 #define ICD_RANDOM_PORT 0
 #define ICD_KILL_TIMEOUT_DURATION 10
 
+static GThread *icd_thread;
 static GMainLoop *icd_loop;
 static int icd_kill_timeout;
+static int icd_connection;
 
 void icd_unset_kill_timeout()
 {
@@ -55,54 +57,69 @@ void icd_set_kill_timeout()
        icd_kill_timeout = g_timeout_add_seconds(ICD_KILL_TIMEOUT_DURATION, _icd_kill_cb, NULL);
 }
 
-int main(int argc, char **argv)
+
+int icd_initialize()
 {
        int ret;
-       guint id;
-       GThread *thread;
-
-#if !GLIB_CHECK_VERSION(2, 35, 0)
-       g_type_init();
-#endif
 
-       icd_loop = g_main_loop_new(NULL, FALSE);
+       if (true == icd_connection)
+               return IOTCON_ERROR_NONE;
 
-       id = icd_dbus_init();
-       thread = icd_ioty_init(ICD_ALL_INTERFACES, ICD_RANDOM_PORT);
-       if (NULL == thread) {
-               ERR("icd_ioty_init() Fail");
-               icd_dbus_deinit(id);
-               return -1;
+       ret = icd_ioty_init(ICD_ALL_INTERFACES, ICD_RANDOM_PORT, &icd_thread);
+       if (IOTCON_ERROR_NONE != ret) {
+               ERR("icd_ioty_init() Fail(%d)", ret);
+               return ret;
        }
 
        ret = icd_ioty_set_device_info();
        if (IOTCON_ERROR_NONE != ret) {
                ERR("icd_ioty_set_device_info() Fail(%d)", ret);
-               icd_ioty_deinit(thread);
-               icd_dbus_deinit(id);
-               return -1;
+               icd_ioty_deinit(icd_thread);
+               return ret;
        }
 
        ret = icd_ioty_set_platform_info();
        if (IOTCON_ERROR_NONE != ret) {
                ERR("icd_ioty_set_platform_info() Fail(%d)", ret);
-               icd_ioty_deinit(thread);
-               icd_dbus_deinit(id);
-               return -1;
+               icd_ioty_deinit(icd_thread);
+               return ret;
        }
 
+       icd_connection = true;
+
+       return IOTCON_ERROR_NONE;
+}
+
+
+int main(int argc, char **argv)
+{
+       int ret;
+       guint id;
+
+#if !GLIB_CHECK_VERSION(2, 35, 0)
+       g_type_init();
+#endif
+
+       icd_loop = g_main_loop_new(NULL, FALSE);
+
+       id = icd_dbus_init();
+
        ret = icd_cynara_init();
        if (IOTCON_ERROR_NONE != ret) {
                ERR("icd_cynara_init() Fail(%d)", ret);
-               icd_ioty_deinit(thread);
                icd_dbus_deinit(id);
+               return ret;
        }
 
        icd_set_kill_timeout();
        g_main_loop_run(icd_loop);
 
+       if (true == icd_connection) {
+               icd_ioty_deinit(icd_thread);
+               icd_connection = false;
+       }
+
        icd_cynara_deinit();
-       icd_ioty_deinit(thread);
        icd_dbus_deinit(id);
        g_main_loop_unref(icd_loop);
 
index f524813453589e1d130cb550a9eb1b3e1c43dfd4..9d6a24df133e35c14632c129e762cb3320e2d5a1 100644 (file)
@@ -24,4 +24,6 @@
 void icd_unset_kill_timeout();
 void icd_set_kill_timeout();
 
+int icd_initialize();
+
 #endif /*__IOT_CONNECTIVITY_MANAGER_DAEMON_H__*/