}
-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;
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");
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;
}
#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()
{
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);