change the mdg framework
authorJihoon Jung <jh8801.jung@samsung.com>
Tue, 26 Jun 2018 11:05:13 +0000 (20:05 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Tue, 3 Jul 2018 01:44:55 +0000 (10:44 +0900)
Signed-off-by: Jihoon Jung <jh8801.jung@samsung.com>
26 files changed:
src/mdg-manager/include/mdgd_context.h [changed mode: 0644->0755]
src/mdg-manager/include/mdgd_db.h [changed mode: 0644->0755]
src/mdg-manager/include/mdgd_gdbus.h [changed mode: 0644->0755]
src/mdg-manager/include/mdgd_gdbus_group.h [deleted file]
src/mdg-manager/include/mdgd_group.h [changed mode: 0644->0755]
src/mdg-manager/include/mdgd_iot.h [changed mode: 0644->0755]
src/mdg-manager/include/mdgd_log.h [changed mode: 0644->0755]
src/mdg-manager/include/mdgd_manager.h [deleted file]
src/mdg-manager/include/mdgd_mot_agent.h [changed mode: 0644->0755]
src/mdg-manager/include/mdgd_resource.h [changed mode: 0644->0755]
src/mdg-manager/include/mdgd_typedef.h [moved from src/mdg-manager/include/mdgd_enum.h with 50% similarity, mode: 0755]
src/mdg-manager/include/mdgd_util.h [changed mode: 0644->0755]
src/mdg-manager/src/mdg_gdbus.xml [changed mode: 0644->0755]
src/mdg-manager/src/mdgd_context.c [changed mode: 0644->0755]
src/mdg-manager/src/mdgd_db.c [changed mode: 0644->0755]
src/mdg-manager/src/mdgd_gdbus.c [changed mode: 0644->0755]
src/mdg-manager/src/mdgd_gdbus_group.c [deleted file]
src/mdg-manager/src/mdgd_group.c [changed mode: 0644->0755]
src/mdg-manager/src/mdgd_iot.cpp [changed mode: 0644->0755]
src/mdg-manager/src/mdgd_iot_client.cpp [new file with mode: 0755]
src/mdg-manager/src/mdgd_iot_server.cpp [new file with mode: 0755]
src/mdg-manager/src/mdgd_log.c [changed mode: 0644->0755]
src/mdg-manager/src/mdgd_manager.c [changed mode: 0644->0755]
src/mdg-manager/src/mdgd_mot_agent.c [changed mode: 0644->0755]
src/mdg-manager/src/mdgd_resource.c [changed mode: 0644->0755]
src/mdg-manager/src/mdgd_util.c [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 6a699b3..cce1581
 #ifndef __MDGD_CONTEXT_H__
 #define __MDGD_CONTEXT_H__
 
-#include <glib.h>
-#include <mdgd_log.h>
-#include <unistd.h>
-#include <gio/gio.h>
-#include <mdg_gdbus.h>
-#include <sys/types.h>
-#include <sqlite3.h>
+#include <mdgd_util.h>
 
 #ifdef __cplusplus
 extern "C"
 {
 #endif
 
-typedef struct {
-       GMainLoop *main_loop;
-       //GDBusConnection *connection;
-       int ref_count;
-
-       // resource list
-       GList *resource_list[MDGD_RESOURCE_TYPE_MAX];
-
-       char *device_uuid;
-       bool mot_me; /**< Indicator whether mot local comp-manager */
-       GList *grp_list;
-       GList *pairwise_list;
-
-       bool monitor_started;
-       bool first_search;
-
-       //sqlite3 db
-       sqlite3 *db;
-} mdgd_context_t;
-
-typedef struct {
-       char *conn_name;
-       int conn_id;
-       GDBusConnection *connection;
-} mdgd_conn_destroy_data;
-
 int mdgd_context_create();
 int mdgd_context_destroy();
 void mdgd_context_mutex_lock();
old mode 100644 (file)
new mode 100755 (executable)
index b9d7e74..c70247a
@@ -32,11 +32,16 @@ extern "C"
 int mdgd_db_init();
 int mdgd_db_deinit();
 int mdgd_db_group_insert(const char *group_name);
-int mdgd_db_device_insert(const char *device_id, const char *group_name);
+int mdgd_db_device_insert(const char *group_name, const char *device_id);
 int mdgd_db_group_delete(char *group_name);
-int mdgd_db_device_delete(char *device_id, char *group_name);
-bool mdgd_check_device_exist(char *device_id);
-bool mdgd_check_group_exist(const char *group_name);
+int mdgd_db_device_delete(char *group_name, char *device_id);
+bool mdgd_db_check_device_exist(char *device_id);
+bool mdgd_db_check_device_exist_in_group(char *group_name, char *device_id);
+bool mdgd_db_check_group_exist(const char *group_name);
+void mdgd_db_get_groups(char **groups, int *group_count);
+void mdgd_db_get_devices_in_group(char *group_name, char **devices, int *device_count);
+int mdgd_db_group_print();
+int mdgd_db_device_print();
 
 #ifdef __cplusplus
 }
old mode 100644 (file)
new mode 100755 (executable)
index bc22f0d..05160ed
@@ -18,7 +18,7 @@
 #ifndef __MDGD_GDBUS_H__
 #define __MDGD_GDBUS_H__
 
-#include <mdgd_gdbus_group.h>
+#include <mdgd_context.h>
 
 #ifdef __cplusplus
 extern "C"
@@ -28,7 +28,10 @@ extern "C"
 #define MDGD_DBUS_SERVICE "org.tizen.mdg" /**< For mdg dbus */
 #define MDGD_DBUS_GROUP_PATH "/org/tizen/mdg/group" /**< For group commands */
 #define MDGD_DBUS_ENABLER_PATH "/org/tizen/mdg/enabler" /**< For d-bus activation */
+#define DBUS_SERVICE_DBUS              "org.freedesktop.DBus"
+#define DBUS_INTERFACE_DBUS            "org.freedesktop.DBus"
 
+void mdgd_gdbus_emit_event(mdgd_event_type_e type, int ret, GVariant *data);
 int mdgd_gdbus_init();
 
 #ifdef __cplusplus
diff --git a/src/mdg-manager/include/mdgd_gdbus_group.h b/src/mdg-manager/include/mdgd_gdbus_group.h
deleted file mode 100644 (file)
index d5f26b1..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef __MDGD_GDBUS_GROUP_H__
-#define __MDGD_GDBUS_GROUP_H__
-
-#include <mdgd_group.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-Group *group_dbus_get_object();
-
-gboolean group_create(Group *group, GDBusMethodInvocation *invocation, gchar *group_name,
-       gpointer user_data);
-
-gboolean group_find(Group *group, GDBusMethodInvocation *invocation, gint timeout,
-       gpointer user_data);
-
-gboolean group_get_found_groups(Group *group, GDBusMethodInvocation *invocation,
-       gpointer user_data);
-
-gboolean group_join(Group *group, GDBusMethodInvocation *invocation,
-       gpointer user_data);
-
-gboolean group_leave(Group *group, GDBusMethodInvocation *invocation,
-       gpointer user_data);
-
-gboolean group_delete(Group *group, GDBusMethodInvocation *invocation,
-       gchar *group_name, gpointer user_data);
-
-gboolean group_device_find(Group *group, GDBusMethodInvocation *invocation,
-       gint timeout, gpointer user_data);
-
-gboolean group_device_invite(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid_dev1, gchar *uuid_dev2, gchar *pin, gchar *uri_1, gchar *rt_1,
-       gchar *interface_1, int permission_1, gchar *uri_2, gchar *rt_2,
-       gchar *interface_2, int permission_2, gpointer user_data);
-
-gboolean group_device_eject(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid_dev1, gchar *uuid_dev2, gpointer user_data);
-
-gboolean group_invite(Group *group, GDBusMethodInvocation *invocation, gchar *group_name,
-       gchar *uuid, gchar *pin, gpointer user_data);
-
-gboolean group_eject(Group *group, GDBusMethodInvocation *invocation, gchar *group_name,
-       gchar *uuid, gpointer user_data);
-
-gboolean group_get_remote_device(Group *group, GDBusMethodInvocation *invocation,
-       gpointer user_data);
-
-gboolean group_pair_resource(Group *group, GDBusMethodInvocation *invocation,
-       gchar *target_1, gchar *subject_1, gchar *uri_1, gchar *rt_1,
-       gchar *interface_1, int permission_1, gchar *target_2, gchar *subject_2,
-       gchar *uri_2, gchar *rt_2, gchar *interface_2, int permission_2,
-       gpointer user_data);
-
-gboolean group_unpair_resource(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid_dev1, gchar *uuid_dev2, gpointer user_data);
-
-gboolean group_send_data(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid_dev, gchar *addr, int port, GVariant *params,
-       gpointer user_data);
-
-gboolean group_find_mowned_devices(Group *group,
-       GDBusMethodInvocation *invocation, int timeout, gpointer user_data);
-
-gboolean group_get_mowned_device(Group *group,
-       GDBusMethodInvocation *invocation, gpointer user_data);
-
-gboolean group_get_my_mowned_device(Group *group,
-       GDBusMethodInvocation *invocation, gpointer user_data);
-
-gboolean group_get_my_uuid(Group *group,
-       GDBusMethodInvocation *invocation, gpointer user_data);
-
-gboolean group_request_create_group(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid, gchar *group_name, gpointer user_data);
-
-gboolean group_request_invite(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid, gchar *group_name, gchar *target_uuid, gchar *PIN, gpointer user_data);
-
-gboolean group_request_eject(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid, gchar *group_name, gchar *target_uuid, gpointer user_data);
-
-gboolean group_request_delete_group(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid, gchar *group_name, gpointer user_data);
-
-gboolean group_start_invited_device_monitor(Group *group,
-                                       GDBusMethodInvocation *invocation, int start,
-                                       gpointer user_data);
-
-void notify_group_found(GVariant *group_data);
-void notify_group_find_finish(int ret);
-void notify_device_found(int device_count, GVariant *device_data);
-void notify_device_find_finish(int ret);
-void notify_group_device_invite_result(int ret);
-void notify_group_device_eject_result(int ret);
-void notify_mowned_device_found(int device_count, GVariant *device_data);
-void notify_mowned_device_find_finish(int ret);
-void notify_group_join(int result);
-void notify_send_data_finish(const char *resp_data, int ret);
-void notify_request_result(const char *cmd, const char *requester_id,
-                                                  unsigned char *arg, int len, int ret);
-void notify_device_monitor_result(const char *uuid, const char *group_name,
-                                                                 const char *status);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __MDGD_GDBUS_GROUP_H__ */
old mode 100644 (file)
new mode 100755 (executable)
index 93fe63b..416035e
@@ -25,147 +25,37 @@ extern "C"
 {
 #endif
 
-typedef struct {
-       char *uri_path; /**< URI path */
-       char *device_id; /**< Device ID */
-       char *host_addr; /**< Host address */
-       char *group_name; /**< Group name */
-       char *resource_type; /**< Resource type */
-       mdgd_group_type_e type; /**< Group yype */
-} mdgd_group_t;
-
-typedef struct {
-       char *device_id; /**< Device Id */
-       int adapter; /**< Adapter type */
-       int flags; /**< Flags */
-       int port; /**< Remtoe device is listening this port */
-       char *addr; /**< IP Address of remote device */
-       int ifindex; /**< Network interfce index of Remote device */
-       char *route_data; /**< Route data */
-       char *remote_id; /**< Remote Id */
-       int conn_type; /**< Connection type */
-       int secure_port; /**< Secured port once TLS handhaking complete */
-       int tcp_port; /**< TCP port when using CoAP over TCP */
-       char *sec_ver; /**< OCF Security specification version */
-       int dev_status; /**< Device status */
-       char *model_name; /**< Device ID */
-       char *device_name; /**< Host address */
-       char *platform_ver; /**< Group name */
-       char *vendor_id; /**< Resource type */
-       char *profile; /**< Group yype */
-       bool mowned;
-       mdgd_device_type_e type;
-} mdgd_mot_device_t;
-
-typedef struct {
-       char *group_name;
-       char *uuid_dev1; /**< Source device Id */
-       char *uuid_dev2; /**< Target device Id */
-       char *pin; /**< Random or pre-configured PIN */
-       char *uri_1; /**< URI at source resource */
-       char *rt_1; /**< Resource type at source resource */
-       char *interface_1; /**< Interface at source resource */
-       int permission_1; /**< CRUDN for target device */
-       char *uri_2; /**< URI at target resource */
-       char *rt_2; /**< Resource type at target resource */
-       char *interface_2; /**< Interface at target resource */
-       int permission_2; /**< CRUDN for source device */
-} mdgd_group_invite_info_t;
-
-typedef struct {
-       char *group_name; /**< Group Name */
-       char *uuid; /**< Device ID */
-       char *host; /**< Device Host Address */
-       int count; /**< Count of successful post method */
-} mdgd_invited_device_t;
-
-typedef struct {
-       char *name; /**< Group name */
-       GList *device_list; /**< Remote device UUIDs. (char* type) */
-} mdgd_grp_t;
-
-/* Called when daemon is start. */
-int mdgd_group_initialize();
-
-/* create group and destroy */
+/* Group Manangement */
 int mdgd_group_create(const char* name);
-int mdgd_group_destroy(const char* name);
+int mdgd_group_delete(const char* name);
 
-/* Find Remote groups */
 int mdgd_group_find(int timeout);
-GVariant *mdgd_group_get_found_groups();
-int mdgd_group_add_new(char *uri_path, char *device_id, char *device_name,
-                                char *host_addr, char *resource_type, mdgd_group_type_e type);
-
-/* Join the remote devices in my daemon */
-int mdgd_group_get_groups(mdgd_group_t ***handles, int *count); //Get all of group in my daemon
-int mdgd_group_get_remote_devices(/* callback */); //Get all of device in network (Async)
-
-int mdgd_group_add_new_mot_device(mdgd_mot_device_t *device);
-void mdgd_group_notify_mot_enable_device_done();
-int mdgd_group_find_mot_enabled_devices(int timeout);
+int mdgd_group_found(mdgd_group_t *group);
+int mdgd_group_find_result(int timeout);
 
-char *mdgd_group_invite_get_uuid();
-char *mdgd_group_invite_get_pin();
+int mdgd_group_find_device(int timeout, bool is_invited);
+int mdgd_group_found_device(mdgd_device_t *device);
+int mdgd_group_find_device_result(int timeout);
 
-/* Join to device in group (async) */
-int mdgd_group_invite(const char *group_name, const char *uuid,
-                                         const char *pin);
-mdgd_group_invite_info_t *mdgd_group_get_invite_info();
-void mdgd_group_free_invite_info();
-void mdgd_group_notify_group_invite(int result);
+int mdgd_group_invite_device(const char *group_name, const char *uuid, const char *pin);
+void mdgd_group_notify_invite_device(int result);
 
-/* eject from group (async) */
-int mdgd_group_eject(const gchar *group_name, gchar *uuid_dev1, const char *uuid_dev2);
-void mdgd_group_notify_group_dismiss(int result);
+int mdgd_group_eject_device(const char *group_name, const char *uuid);
+void mdgd_group_notify_eject_device(int result);
 
-int mdgd_group_pair_resource(char* target1, char *subject1, char *uri1,
-       char *rt1, char *interface1, int permission1, char* target2, char *subject2,
-       char *uri2, char *rt2, char *interface2, int permission2);
+int mdgd_group_regist_channel(char *channel_id, char *sender);
+int mdgd_group_unregist_channel(char *channel_id, char *sender);
 
-int mdgd_group_unpair_resource(gchar *uuid_dev1, gchar *uuid_dev2);
 int mdgd_group_send_data(gchar *uuid_dev, gchar *addr, int port,
                                                 unsigned char *data, int len);
-void mdgd_group_notify_keepalive_response(mdgd_command_t *cmd);
+void mdgd_group_notify_send_data(int result);
 
-GVariant *mdgd_group_get_remote_mot_enabled_devices();
-int mdgd_group_get_mot_device_count();
-
-int mdgd_group_add_new_mowned_device(mdgd_mot_device_t *device);
-void mdgd_group_notify_mowned_device_find_done();
-int mdgd_group_find_mowned_devices();
-GVariant *mdgd_group_get_mowned_devices();
-int mdgd_group_get_mowned_device_count();
-GVariant *mdgd_group_get_my_mowned_devices();
-void mdgd_group_change_mowned_device(mdgd_mot_device_t *device);
-
-/* Join to remote device group */
-int mdgd_group_join();
-int mdgd_group_leave_from(/* callback */); //leave from certain remote group (Async)
-
-/* Called when daemon is end. */
-int mdgd_group_deinitialize();
-
-/* Getter for a group */
-int mdgd_group_get_group_name(mdgd_group_t *handle, char **name);
-int mdgd_group_get_group_type(mdgd_group_t *handle, int *type);
-int mdgd_group_get_group_device_type(mdgd_group_t *handle);
-int mdgd_group_get_group_device_id(mdgd_group_t *handle);
-
-/* notify */
-int mdgd_group_event_handler(/*callback*/); // event hadnler
-int mdgd_group_add_device_in_group(const char *group_name, const char *uuid);
-int mdgd_group_remove_device_in_group(char *group_name, char *uuid);
-
-/* Group management */
+/* Group Request */
 int mdgd_group_request_create_group(char *uuid, char *group_name);
 int mdgd_group_request_invite(char *uuid, char *group_name, char *target_uuid, char *PIN);
 int mdgd_group_request_eject(char *uuid, char *group_name, char *target_uuid);
 int mdgd_group_request_delete_group(char *uuid, char *group_name);
 
-int mdgd_group_start_invited_device_monitor(int start);
-mdgd_mot_device_t *mdgd_group_check_device_in_mot_enb_dev_list(char *uuid);
-
 #ifdef __cplusplus
 }
 #endif
old mode 100644 (file)
new mode 100755 (executable)
index 57d7cab..2d8eba2
 #define __MDGD_IOT_H__
 
 #include <mdgd_resource.h>
+#include <mdgd_group.h>
 
 #ifdef __cplusplus
 extern "C"
 {
 #endif
 
-#define SVR_PATH "/tmp/.svr.dat" /**< For Temp */
-
-typedef struct _iot_discovery_t {
-       gchar *uuid; /**< Device Id */
-       gchar *data; /**< Data to send */
-       gchar *host; /**< Target host IP address + Port */
-} iot_discovery_t;
-
-typedef struct _mdgd_command_t {
-       int tid; /**< Timer ID */
-       int resource_type; /**< OCF resource type */
-       mdgd_request_type_e command; /**< Comments set for group management */
-       gchar *uuid; /**< Device UUID */
-       gchar *host; /**< Host address + Port */
-       gchar *arg1; /**< Arguement #1 */
-       gchar *arg2; /**< Arguement #2 */
-       gchar *arg3; /**< Arguement #3 */
-       gchar *arg4; /**< Arguement #4 */
-#ifdef SUPPORT_BASE64_ENCODING
-       unsigned char *data;
-       int data_len;
-#endif
-       void *user_data;
-} mdgd_command_t;
+#define MAX_FILE_PATH_LEN 1024
+#define SVR_DB_FILE_NAME "oic_svr_db_mdgd_manager.dat"
+#define SYSTEM_INFO_PLATFORM_VERSION "http://tizen.org/feature/platform.version"
+#define SYSTEM_INFO_MANUF_NAME "http://tizen.org/system/manufacturer"
+#define SYSTEM_INFO_MODEL_NAME "http://tizen.org/system/model_name"
+#define SYSTEM_INFO_BUILD_STRING "http://tizen.org/system/build.string"
+#define SYSTEM_INFO_TIZEN_ID "http://tizen.org/system/tizenid"
+#define SYSTEM_INFO_PROFILE "http://tizen.org/feature/profile"
 
 int mdgd_iot_initialize();
 int mdgd_iot_add_resource(mdgd_resource_type_e resource_type, const char *uri);
-int mdgd_iot_delete_resource(mdgd_resource_type_e resource_type,
-                                                        const char *uri);
 int mdgd_iot_discovery_resource(mdgd_resource_type_e resource_type, int timeout, void *user_data);
 int mdgd_iot_send_data(mdgd_resource_type_e resource_type, int timeout,
                                           mdgd_command_t *cmd);
+int mdgd_iot_get_device_description(mdgd_device_t *device);
 int mdgd_iot_deinitialize();
 
 #ifdef __cplusplus
old mode 100644 (file)
new mode 100755 (executable)
index ae25481..3ea54ee
@@ -18,8 +18,7 @@
 #ifndef __MDGD_LOG_H__
 #define __MDGD_LOG_H__
 
-#include <dlog.h>
-#include <mdgd_enum.h>
+#include <mdgd_typedef.h>
 
 #ifdef __cplusplus
 extern "C"
@@ -60,30 +59,21 @@ extern "C"
 
 #define NOTUSED(var) (var = var)
 
-#define mdgd_check_null_print_error(value, error) do { \
-       /* LCOV_EXCL_START */ \
-       if (G_UNLIKELY(NULL == (value))) { \
-               LOGE("%s", error); \
-       } \
-       /* LCOV_EXCL_STOP */ \
-} while (FALSE)
-
-
 #define mdgd_check_null_ret_error(name, value, error) do { \
        /* LCOV_EXCL_START */ \
        if (G_UNLIKELY(NULL == (value))) { \
-               LOGE("%s is NULL", name); \
-               return error; \
-       } \
+                               LOGE("%s is NULL", name); \
+                               return error; \
+                       } \
        /* LCOV_EXCL_STOP */ \
 } while (FALSE)
 
 #define mdgd_check_null_ret(name, value) do { \
        /* LCOV_EXCL_START */ \
        if (G_UNLIKELY(NULL == (value))) { \
-               LOGE("%s is NULL", name); \
-               return; \
-       } \
+                               LOGE("%s is NULL", name); \
+                               return; \
+                       } \
        /* LCOV_EXCL_STOP */ \
 } while (FALSE)
 
diff --git a/src/mdg-manager/include/mdgd_manager.h b/src/mdg-manager/include/mdgd_manager.h
deleted file mode 100644 (file)
index 3f2aaf5..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef __MDGD_MANAGER_H__
-#define __MDGD_MANAGER_H__
-
-#include <mdgd_log.h>
-#include <mdgd_group.h>
-#include <mdgd_resource.h>
-#include <mdgd_gdbus.h>
-#include <mdgd_db.h>
-
-#endif /* __MDGD_MANAGER_H__ */
old mode 100644 (file)
new mode 100755 (executable)
index 395525e..9a6b0e0
@@ -27,16 +27,9 @@ int agent_dbus_stop();
 
 int agent_enable();
 int agent_disable();
-int agent_get_ownerid(char* deviceid);
 int agent_find_mot_enable_devices(int timeout);
 int agent_find_mowned_devices();
 int agent_mot(char* uuid_str, char *pin);
-int agent_resources_pairwise(char* target1, char *subject1, char *uri1,
-       char *rt1, char *interface1, int permission1, char* target2, char *subject2,
-       char *uri2, char *rt2, char *interface2, int permission2);
-int agent_unlink_resources(char* uuid_str1, char *uuid_str2);
-int agent_remove_subowner(char* uuid_str);
-int agent_remove_subowned(char* uuid_str);
 int agent_pair(const char *pin, char* target1, const char *subject1, char *uri1,
        char *rt1, char *interface1, int permission1, const char* target2,
        char *subject2, char *uri2, char *rt2, char *interface2, int permission2);
old mode 100644 (file)
new mode 100755 (executable)
index f801372..b00c8cc
@@ -26,26 +26,9 @@ extern "C"
 {
 #endif
 
-typedef struct {
-       mdgd_resource_type_e resource_type;
-       char *type;
-       char *uri_prefix;
-       unsigned char policies;
-} mdgd_rd_t;
-
-typedef struct {
-       OCResourceHandle resource;
-       char *uri;
-} mdgd_re_t;
-
-int mdgd_resource_append(mdgd_resource_type_e resource_type, const char *uri,
-                                                OCResourceHandle resource);
 char *mdgd_resource_get_type(mdgd_resource_type_e resource_type);
 char *mdgd_resource_get_uri_prefix(mdgd_resource_type_e resource_type);
 unsigned char mdgd_resource_get_policies(mdgd_resource_type_e resource_type);
-void mdgd_resource_print_list();
-OCResourceHandle mdgd_resource_get_handle(mdgd_resource_type_e resource_type,
-                                                                                 const char *uri);
 
 #ifdef __cplusplus
 }
old mode 100644 (file)
new mode 100755 (executable)
similarity index 50%
rename from src/mdg-manager/include/mdgd_enum.h
rename to src/mdg-manager/include/mdgd_typedef.h
index e733d59..827a1c6
  *
  */
 
-#ifndef __MDGD_ENUM_H__
-#define __MDGD_ENUM_H__
+#ifndef __MDGD_TYPEDEF_H__
+#define __MDGD_TYPEDEF_H__
 
 #include <tizen.h>
+#include <glib.h>
+#include <unistd.h>
+#include <gio/gio.h>
+#include <mdg_gdbus.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sqlite3.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <net/if.h>
+#include <arpa/inet.h>
+#include <dirent.h>
+#include <dlog.h>
+#include <error.h>
 
 #define NOTUSED(var) (var = var) /**< It is used to avoid generating build warning */
 
@@ -43,12 +58,10 @@ typedef enum {
        MDGD_ERROR_ALREADY_REGISTERED = TIZEN_ERROR_MDG | 0x03, /**< Request already registered */
        MDGD_ERROR_IN_PROGRESS = TIZEN_ERROR_MDG | 0x04,/**< operation is in progress */
        MDGD_ERROR_COMM_ERROR = TIZEN_ERROR_MDG | 0x05, /**< communication error */
-       MDGD_ERROR_RX = TIZEN_ERROR_MDG | 0x06, /**< RX error */
-       MDGD_ERROR_TX = TIZEN_ERROR_MDG | 0x07, /**< TX error */
        MDGD_ERROR_PLUGIN_FAIL = TIZEN_ERROR_MDG | 0x08, /**< Plugin failed */
        MDGD_ERROR_ALREADY_IN_PROGRESS = TIZEN_ERROR_MDG | 0x09, /**< Already in progress */
-       MDGD_ERROR_NOT_STARTED = TIZEN_ERROR_MDG | 0x0A, /**< Not Started */
-       MDGD_ERROR_ALREADY_INITIALIZED = TIZEN_ERROR_MDG | 0x0B, /**< Already initilized */
+       MDGD_ERROR_DB = TIZEN_ERROR_MDG | 0x0A, /**< DB Error */
+       MDGD_ERROR_IOTIVITY = TIZEN_ERROR_MDG | 0x0B, /**< Iotivity Error */
        MDGD_ERROR_UNKNOWN = -999
 } mdgd_error_e;
 
@@ -60,7 +73,6 @@ typedef enum {
 typedef enum {
        MDGD_RESOURCE_TYPE_GROUP = 0, /**< Group resource type  */
        MDGD_RESOURCE_TYPE_DEVICE, /**< Device resource type  */
-       MDGD_RESOURCE_TYPE_OPERATION, /**< Operation resource type */
        MDGD_RESOURCE_TYPE_DATA, /**< Data resource type */
        MDGD_RESOURCE_TYPE_MAX
 } mdgd_resource_type_e;
@@ -71,15 +83,13 @@ typedef enum {
  * @since_tizen 5.0
  */
 typedef enum {
-       MDGD_GROUP_GROUP_ERROR = 0, /**< Group type error */
-       MDGD_GROUP_GROUP_LOCAL = 1, /**< Local group type */
-       MDGD_GROUP_GROUP_REMOTE = 2, /**< Remote group type */
+       MDGD_GROUP_TYPE_LOCAL = 1, /**< Local group type */
+       MDGD_GROUP_TYPE_REMOTE = 2, /**< Remote group type */
 } mdgd_group_type_e;
 
 typedef enum {
-       MDGD_GROUP_DEVICE_ERROR = 0, /**< Group type error */
-       MDGD_GROUP_DEVICE_LOCAL = 1, /**< Local group type */
-       MDGD_GROUP_DEVICE_REMOTE = 2, /**< Remote group type */
+       MDGD_DEVICE_TYPE_LOCAL = 1, /**< Local group type */
+       MDGD_DEVICE_TYPE_REMOTE = 2, /**< Remote group type */
 } mdgd_device_type_e;
 
 /**
@@ -92,10 +102,81 @@ typedef enum {
        MDGD_REQ_SEND_DATA = 0, /**< Send data */
        MDGD_REQ_CREATE_GROUP, /**< Create Group */
        MDGD_REQ_INVITE_DEVICE, /**< Invite Device */
-       MDGD_REQ_EJECT_DEVICE, /**< Exile Device */
+       MDGD_REQ_EJECT_DEVICE, /**< Eject Device */
        MDGD_REQ_DELETE_GROUP, /**< Delete Group */
-       MDGD_REQ_KEEP_ALIVE, /**< Keep Alive Message */
-       MDGD_REQ_SEND_DATA_ALL, /**< Send data in subnet */
 } mdgd_request_type_e;
 
-#endif /* __MDGD_ENUM_H__ */
+typedef enum {
+       MDGD_EVENT_GROUP_FOUND = 0,
+       MDGD_EVENT_GROUP_FIND_FINISH,
+       MDGD_EVENT_DEVICE_FOUND,
+       MDGD_EVENT_DEVICE_FIND_FINISH,
+       MDGD_EVENT_INVITE_DEVICE_FINISH,
+       MDGD_EVENT_EJECT_DEVICE_FINISH,
+       MDGD_EVENT_REQUEST_FINISH,
+       MDGD_EVENT_SEND_DATA_FINISH,
+} mdgd_event_type_e;
+
+typedef struct {
+       char *device_id; /**< Device ID */
+       char *host_addr; /**< IP Address of remote device */
+       char *group_name; /**< Group name */
+       mdgd_group_type_e type; /**< Group type */
+} mdgd_group_t;
+
+typedef struct {
+       char *device_id; /**< Device Id */
+       int port; /**< Remtoe device is listening this port */
+       char *addr; /**< IP Address of remote device */
+       unsigned int conn_type; /**< Connection type */
+       int secure_port; /**< Secured port once TLS handhaking complete */
+       char *model_name; /**< Device ID */
+       char *device_name; /**< Host address */
+       char *platform_ver; /**< Group name */
+       char *vendor_id; /**< Resource type */
+       char *profile; /**< Group yype */
+       bool is_invited;
+       mdgd_device_type_e type; /**< Group type */
+} mdgd_device_t;
+
+typedef struct {
+       GMainLoop *main_loop;
+       GHashTable *channel;
+       int ref_count;
+       char *device_uuid;
+       mdgd_device_t *device;
+       sqlite3 *db;
+       bool mot_me;
+} mdgd_context_t;
+
+typedef struct {
+       char *conn_name;
+       int conn_id;
+       GDBusConnection *connection;
+} mdgd_conn_destroy_data;
+
+typedef struct _mdgd_command_t {
+       int tid; /**< Timer ID */
+       int resource_type; /**< OCF resource type */
+       mdgd_request_type_e command; /**< Comments set for group management */
+       gchar *uuid; /**< Device UUID */
+       gchar *host; /**< Host address + Port */
+       gchar *arg1; /**< Arguement #1 */
+       gchar *arg2; /**< Arguement #2 */
+       gchar *arg3; /**< Arguement #3 */
+       gchar *arg4; /**< Arguement #4 */
+#ifdef SUPPORT_BASE64_ENCODING
+       unsigned char *data;
+       int data_len;
+#endif
+       void *user_data;
+} mdgd_command_t;
+
+typedef struct _mdgd_rd_t {
+       mdgd_resource_type_e resource_type;
+       char *type;
+       char *uri_prefix;
+       char *policies;
+} mdgd_rd_t;
+
+#endif /* __MDGD_TYPEDEF_H__ */
old mode 100644 (file)
new mode 100755 (executable)
index 6e1ce35..8040ac4
@@ -23,12 +23,23 @@ extern "C"
 {
 #endif
 
+#include <octypes.h>
+#include <pmtypes.h>
+#include <mdgd_log.h>
+
 #define LOCAL_IP 1 /**< Local IP */
 #define REMOTE_IP 2 /**< Remote IP */
 
 void mdgd_remove_ip_info(void);
 int mdgd_make_ip_info(void);
 int mdgd_is_local_ip(char *ipdata);
+char *mdgd_addr2host(char *addr, int port, bool is_secure);
+int mdgd_uuid_to_str(const OicUuid_t* uuid, char** strUuid);
+void mdgd_clean_user_data(void *user_data);
+GVariant *mdgd_create_variant_group(mdgd_group_t *group);
+GVariant *mdgd_create_variant_device(mdgd_device_t *device);
+GVariant *mdgd_create_variant_dummy();
+
 
 #ifdef __cplusplus
 }
old mode 100644 (file)
new mode 100755 (executable)
index e7535bf..8382c1a
                        <arg type="i" name="timeout" direction="in" />
                        <arg type="i" name="result" direction="out" />
                </method>
-               <method name="GetFoundGroups">
-                       <arg type="i" name="result" direction="out" />
-                       <arg type="aa{sv}" name="groups" direction="out" />
-               </method>
-               <method name="Join">
-                       <arg type="i" name="result" direction="out" />
-               </method>
-               <method name="Leave">
-                       <arg type="i" name="result" direction="out" />
-               </method>
                <method name="Delete">
-                       <arg type="s" name="group_name" direction="in"/>
-                       <arg type="i" name="result" direction="out"/>
+                       <arg type="s" name="group_name" direction="in" />
+                       <arg type="i" name="result" direction="out" />
                </method>
-               <method name="DeviceFind">
+               <method name="FindDevice">
                        <arg type="i" name="timeout" direction="in" />
+                       <arg type="i" name="is_invited" direction="in" />
                        <arg type="i" name="result" direction="out" />
                </method>
-               <method name="Invite">
+               <method name="InviteDevice">
                        <arg type="s" name="group_name" direction="in"/>
                        <arg type="s" name="uuid" direction="in"/>
                        <arg type="s" name="pin" direction="in" />
                        <arg type="i" name="result" direction="out"/>
                </method>
-               <method name="Eject">
+               <method name="EjectDevice">
                        <arg type="s" name="group_name" direction="in"/>
                        <arg type="s" name="uuid" direction="in"/>
                        <arg type="i" name="result" direction="out" />
                </method>
-               <method name="DeviceInvite">
-                       <arg type="s" name="uuid_dev1" direction="in"/>
-                       <arg type="s" name="uuid_dev2" direction="in"/>
-                       <arg type="s" name="pin" direction="in" />
-                       <arg type="s" name="uri_1" direction="in"/>
-                       <arg type="s" name="rt_1" direction="in"/>
-                       <arg type="s" name="interface_1" direction="in"/>
-                       <arg type="i" name="permission_1" direction="in"/>
-                       <arg type="s" name="uri_2" direction="in"/>
-                       <arg type="s" name="rt_2" direction="in"/>
-                       <arg type="s" name="interface_2" direction="in"/>
-                       <arg type="i" name="permission_2" direction="in"/>
-                       <arg type="i" name="result" direction="out"/>
+               <method name="GetLocalDevice">
+                       <arg type="a{sv}" name="device_info" direction="out" />
                </method>
-               <method name="DeviceEject">
-                       <arg type="s" name="uuid_dev1" direction="in"/>
-                       <arg type="s" name="uuid_dev2" direction="in"/>
-                       <arg type="i" name="result" direction="out" />
+               <method name="GetMemberDevices">
+                       <arg type="s" name="group_name" direction="in"/>
+                       <arg type="aa{sv}" name="devices" direction="out" />
                </method>
-               <method name="GetRemoteDevice">
-                       <arg type="i" name="device_count" direction="out" />
-                       <arg type="aa{sv}" name="device_info" direction="out" />
-               </method>
-               <method name="PairResource">
-                       <arg type="s" name="target_1" direction="in"/>
-                       <arg type="s" name="subject_1" direction="in"/>
-                       <arg type="s" name="uri_1" direction="in"/>
-                       <arg type="s" name="rt_1" direction="in"/>
-                       <arg type="s" name="interface_1" direction="in"/>
-                       <arg type="i" name="permission_1" direction="in"/>
-                       <arg type="s" name="target_2" direction="in"/>
-                       <arg type="s" name="subject_2" direction="in"/>
-                       <arg type="s" name="uri_2" direction="in"/>
-                       <arg type="s" name="rt_2" direction="in"/>
-                       <arg type="s" name="interface_2" direction="in"/>
-                       <arg type="i" name="permission_2" direction="in"/>
-                       <arg type="i" name="result" direction="out"/>
+               <method name="RegistChannel">
+                       <arg type="s" name="channel_id" direction="in"/>
+                       <arg type="i" name="result" direction="out" />
                </method>
-               <method name="UnpairResource">
-                       <arg type="s" name="uuid_dev1" direction="in"/>
-                       <arg type="s" name="uuid_dev2" direction="in"/>
-                       <arg type="i" name="result" direction="out"/>
+               <method name="UnregistChannel">
+                       <arg type="s" name="channel_id" direction="in"/>
+                       <arg type="i" name="result" direction="out" />
                </method>
                <method name="SendData">
                        <arg type="s" name="uuid" direction="in" />
                        <arg type="(iay)" name="data" direction="in"/>
                        <arg type="i" name="result" direction="out" />
                </method>
-               <method name="FindMownedDevices">
-                       <arg type="i" name="timeout" direction="in" />
-                       <arg type="i" name="result" direction="out" />
-               </method>
-               <method name="GetMownedDevice">
-                       <arg type="i" name="device_count" direction="out" />
-                       <arg type="aa{sv}" name="device_info" direction="out" />
-               </method>
-               <method name="GetMyMownedDevice">
-                       <arg type="a{sv}" name="device_info" direction="out" />
-               </method>
-               <method name="GetMyUuid">
-                       <arg type="s" name="uuid" direction="out" />
-               </method>
                <method name="RequestCreateGroup">
                        <arg type="s" name="uuid" direction="in" />
                        <arg type="s" name="group_name" direction="in" />
                        <arg type="s" name="group_name" direction="in" />
                        <arg type="i" name="result" direction="out" />
                </method>
-               <method name="StartInvitedDeviceMonitor">
-                       <arg type="i" name="start" direction="in" />
-                       <arg type="i" name="result" direction="out" />
-               </method>
                <!-- Signal (D-Bus) definitions -->
-               <signal name="GroupFound">
-                       <arg type="a{sv}" name="group_info" direction="out" />
-               </signal>
-               <signal name="GroupFindFinish">
+               <signal name="Event">
+                       <arg type="i" name="type" direction="out" />
                        <arg type="i" name="result" direction="out" />
-               </signal>
-               <signal name="DeviceFound">
-                       <arg type="i" name="device_count" direction="out" />
-                       <arg type="aa{sv}" name="device_info" direction="out" />
-               </signal>
-               <signal name="DeviceFindFinish">
-                       <arg type="i" name="result" direction="out" />
-               </signal>
-               <signal name="DeviceInviteResult">
-                       <arg type="i" name="result" direction="out" />
-               </signal>
-               <signal name="DeviceEjectResult">
-                       <arg type="i" name="result" direction="out" />
-               </signal>
-               <signal name="MownedDeviceFound">
-                       <arg type="i" name="device_count" direction="out" />
-                       <arg type="aa{sv}" name="device_info" direction="out" />
-               </signal>
-               <signal name="MownedDeviceFindFinish">
-                       <arg type="i" name="result" direction="out" />
-               </signal>
-               <signal name="JoinResult">
-                       <arg type="i" name="result" direction="out" />
-               </signal>
-               <signal name="SendDataFinish">
-                       <arg type="s" name="resp_data" direction="out" />
-                       <arg type="i" name="result" direction="out" />
-               </signal>
-               <signal name="RequestResult">
-                       <arg type="s" name="command" direction="out" />
-                       <arg type="s" name="device_id" direction="out" />
-                       <arg type="(iay)" name="arg" direction="out" />
-                       <arg type="i" name="result" direction="out" />
-               </signal>
-               <signal name="DeviceMonitorResult">
-                       <arg type="s" name="uuid" direct="out" />
-                       <arg type="s" name="group_name" direct="out" />
-                       <arg type="s" name="status" direct="out" />
+                       <arg type="a{sv}" name="data" direction="out" />
                </signal>
        </interface>
 </node>
old mode 100644 (file)
new mode 100755 (executable)
index 2aa0376..4be52dc
 static pthread_mutex_t context_lock = PTHREAD_MUTEX_INITIALIZER;
 static mdgd_context_t *mdgd_ctx;
 
+static void __on_destroy(gpointer data)
+{
+       if (data != NULL)
+               g_free(data);
+}
+
 int mdgd_context_create()
 {
        mdgd_ctx = g_new0(mdgd_context_t, 1);
@@ -27,8 +33,9 @@ int mdgd_context_create()
                LOG_DEBUG("create mdgd_context is failed");
                return MDGD_ERROR_OUT_OF_MEMORY;
        }
-       mdgd_ctx->mot_me = FALSE;
-       mdgd_ctx->first_search = TRUE;
+
+       mdgd_ctx->mot_me = false;
+       mdgd_ctx->channel = g_hash_table_new_full(g_str_hash, g_str_equal, __on_destroy, __on_destroy);
 
        return MDGD_ERROR_NONE;
 }
old mode 100644 (file)
new mode 100755 (executable)
index 497261c..6fbe11f
@@ -112,7 +112,7 @@ static int __create_device_table()
                return -1;
        }
 
-       sql = sqlite3_mprintf("CREATE TABLE %s(id INTEGER PRIMARY KEY, device_id TEXT, group_name TEXT);",
+       sql = sqlite3_mprintf("CREATE TABLE %s(id INTEGER PRIMARY KEY, group_name TEXT, device_id TEXT);",
                MDGD_DB_DEVICE_TABLE);
 
        if (sql != NULL) {
@@ -254,16 +254,18 @@ int mdgd_db_deinit()
 
 int mdgd_db_group_insert(const char *group_name)
 {
-       int ret = 0;
+       int ret = MDGD_ERROR_NONE;
        int sql_ret;
        char *sql = NULL;
        char *error = NULL;
 
+       LOG_BEGIN();
+
        mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
 
        if (mdgd_ctx->db == NULL) {
                LOG_ERR("mtp_ctx->db is NULL");
-               return -1;
+               return MDGD_ERROR_DB;
        }
 
        sql = sqlite3_mprintf("INSERT INTO %s (group_name) values(%Q);",
@@ -274,25 +276,29 @@ int mdgd_db_group_insert(const char *group_name)
                sql_ret = sqlite3_exec(mdgd_ctx->db, sql, NULL, NULL, &error);
                if (sql_ret != SQLITE_OK) {
                        LOG_ERR("sqlite3_exec failed, %d, %s", sql_ret, error);
-                       ret = -1;
+                       ret = MDGD_ERROR_DB;
                        sqlite3_free(error);
                }
                sqlite3_free(sql);
        } else {
                LOG_ERR("sql is NULL");
-               ret = -1;
+               ret = MDGD_ERROR_DB;
        }
 
+       LOG_END();
+
        return ret;
 }
 
-int mdgd_db_device_insert(const char *device_id, const char *group_name)
+int mdgd_db_device_insert(const char *group_name, const char *device_id)
 {
        int ret = 0;
        int sql_ret;
        char *sql = NULL;
        char *error = NULL;
 
+       LOG_BEGIN();
+
        mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
 
        if (mdgd_ctx->db == NULL) {
@@ -318,6 +324,8 @@ int mdgd_db_device_insert(const char *device_id, const char *group_name)
                ret = -1;
        }
 
+       LOG_END();
+
        return ret;
 }
 
@@ -328,6 +336,8 @@ int mdgd_db_group_delete(char *group_name)
        char *sql = NULL;
        char *error = NULL;
 
+       LOG_BEGIN();
+
        mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
 
        if (mdgd_ctx->db == NULL) {
@@ -357,16 +367,20 @@ int mdgd_db_group_delete(char *group_name)
                ret = -1;
        }
 
+       LOG_END();
+
        return ret;
 }
 
-int mdgd_db_device_delete(char *device_id, char *group_name)
+int mdgd_db_device_delete(char *group_name, char *device_id)
 {
        int ret = 0;
        int sql_ret;
        char *sql = NULL;
        char *error = NULL;
 
+       LOG_BEGIN();
+
        mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
 
        if (mdgd_ctx->db == NULL) {
@@ -406,13 +420,14 @@ int mdgd_db_device_delete(char *device_id, char *group_name)
 
 }
 
-bool mdgd_check_device_exist(char *device_id)
+bool mdgd_db_check_device_exist(char *device_id)
 {
        int ret = 0;
        bool result = false;
-       int sql_ret;
        char *sql = NULL;
 
+       LOG_BEGIN();
+
        mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
 
        sql = sqlite3_mprintf("SELECT count(*) FROM %s WHERE device_id=%Q;",
@@ -451,15 +466,70 @@ bool mdgd_check_device_exist(char *device_id)
                result = false;
        }
 
+       LOG_END();
+
        return result;
 }
 
-bool mdgd_check_group_exist(const char *group_name)
+bool mdgd_db_check_device_exist_in_group(char *group_name, char *device_id)
 {
        int ret = 0;
        bool result = false;
        char *sql = NULL;
 
+       LOG_BEGIN();
+
+       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
+
+       sql = sqlite3_mprintf("SELECT count(*) FROM %s WHERE group_name=%Q and device_id=%Q;",
+               MDGD_DB_DEVICE_TABLE, group_name, device_id);
+       if (sql != NULL) {
+               sqlite3_stmt *stmt = NULL;
+
+               ret = sqlite3_prepare_v2(mdgd_ctx->db, sql, strlen(sql), &stmt, NULL);
+               if (ret == SQLITE_OK) {
+                       ret = sqlite3_step(stmt);
+                       if (ret == SQLITE_ROW) {
+                               int count;
+
+                               count = sqlite3_column_int(stmt, 0);
+                               if (count > 0)
+                                       result = true;
+                               else
+                                       result = false;
+                       } else {
+                               LOG_ERR("sqlite3_step failed, [%d:%s]", ret, sqlite3_errmsg(mdgd_ctx->db));
+
+                               result = false;
+                       }
+
+                       sqlite3_finalize(stmt);
+               } else {
+                       LOG_ERR("sqlite3_prepare_v2 failed, [%d:%s]", ret, sqlite3_errmsg(mdgd_ctx->db));
+
+                       result = false;
+               }
+
+               sqlite3_free(sql);
+       } else {
+               LOG_ERR("sqlite3_mprintf failed");
+
+               result = false;
+       }
+
+       LOG_END();
+
+       return result;
+}
+
+bool mdgd_db_check_group_exist(const char *group_name)
+{
+       int ret = 0;
+       bool result = false;
+       char *sql = NULL;
+
+       LOG_BEGIN();
+
        mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
 
        sql = sqlite3_mprintf("SELECT count(*) FROM %s WHERE group_name=%Q;",
@@ -498,11 +568,153 @@ bool mdgd_check_group_exist(const char *group_name)
                result = false;
        }
 
+       LOG_END();
+
        return result;
 }
 
-int mdgd_db_print()
+void mdgd_db_get_groups(char **groups, int *group_count)
+{
+       int ret, i = 0;
+       char *sql = NULL;
+
+       LOG_BEGIN();
+
+       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
+
+       sql = sqlite3_mprintf("SELECT * FROM %s", MDGD_DB_GROUP_TABLE);
+       if (sql != NULL) {
+               sqlite3_stmt *stmt = NULL;
+
+               ret = sqlite3_prepare_v2(mdgd_ctx->db, sql, strlen(sql), &stmt, NULL);
+               if (ret == SQLITE_OK) {
+                       while (sqlite3_step(stmt) == SQLITE_ROW) {
+                               groups[i++] = g_strdup(sqlite3_column_text(stmt, 1));
+                       }
+
+                       sqlite3_finalize(stmt);
+               } else {
+                       LOG_ERR("sqlite3_prepare_v2 failed, [%d:%s]", ret, sqlite3_errmsg(mdgd_ctx->db));
+               }
+
+               sqlite3_free(sql);
+       } else {
+               LOG_ERR("sqlite3_mprintf failed");
+       }
+
+       *group_count = i;
+
+       LOG_END();
+}
+
+void mdgd_db_get_devices_in_group(char *group_name, char **devices, int *device_count)
+{
+       int ret, i = 0;
+       char *sql = NULL;
+
+       LOG_BEGIN();
+
+       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
+
+       sql = sqlite3_mprintf("SELECT * FROM %s WHERE group_name=%Q;",
+               MDGD_DB_DEVICE_TABLE, group_name);
+
+       if (sql != NULL) {
+               sqlite3_stmt *stmt = NULL;
+
+               ret = sqlite3_prepare_v2(mdgd_ctx->db, sql, strlen(sql), &stmt, NULL);
+               if (ret == SQLITE_OK) {
+                       while (sqlite3_step(stmt) == SQLITE_ROW) {
+                               devices[i++] = g_strdup(sqlite3_column_text(stmt, 2));
+                       }
+
+                       sqlite3_finalize(stmt);
+               } else {
+                       LOG_ERR("sqlite3_prepare_v2 failed, [%d:%s]", ret, sqlite3_errmsg(mdgd_ctx->db));
+               }
+
+               sqlite3_free(sql);
+       } else {
+               LOG_ERR("sqlite3_mprintf failed");
+       }
+
+       *device_count = i;
+
+       LOG_END();
+}
+
+
+int mdgd_db_group_print()
 {
+       int ret, i = 0;
+       char *sql = NULL;
+
+       LOG_BEGIN();
+
+       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
+
+       sql = sqlite3_mprintf("SELECT * FROM %s", MDGD_DB_GROUP_TABLE);
+       if (sql != NULL) {
+               sqlite3_stmt *stmt = NULL;
+
+               ret = sqlite3_prepare_v2(mdgd_ctx->db, sql, strlen(sql), &stmt, NULL);
+               if (ret == SQLITE_OK) {
+                       while (sqlite3_step(stmt) == SQLITE_ROW) {
+                               char *group_name;
+                               group_name = g_strdup(sqlite3_column_text(stmt, 1));
+                               LOG_DEBUG("%d. %s", ++i, group_name);
+                       }
+
+                       sqlite3_finalize(stmt);
+               } else {
+                       LOG_ERR("sqlite3_prepare_v2 failed, [%d:%s]", ret, sqlite3_errmsg(mdgd_ctx->db));
+               }
+
+               sqlite3_free(sql);
+       } else {
+               LOG_ERR("sqlite3_mprintf failed");
+       }
+
+       LOG_END();
+
+       return 0;
+}
+
+int mdgd_db_device_print()
+{
+       int ret, i = 0;
+       char *sql = NULL;
+
+       LOG_BEGIN();
+
+       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
+
+       sql = sqlite3_mprintf("SELECT * FROM %s", MDGD_DB_DEVICE_TABLE);
+       if (sql != NULL) {
+               sqlite3_stmt *stmt = NULL;
+
+               ret = sqlite3_prepare_v2(mdgd_ctx->db, sql, strlen(sql), &stmt, NULL);
+               if (ret == SQLITE_OK) {
+                       while (sqlite3_step(stmt) == SQLITE_ROW) {
+                               char *group_name;
+                               char *device_id;
+                               group_name = g_strdup(sqlite3_column_text(stmt, 1));
+                               device_id = g_strdup(sqlite3_column_text(stmt, 2));
+                               LOG_DEBUG("%d. %s, %s", ++i, group_name, device_id);
+                       }
+
+                       sqlite3_finalize(stmt);
+               } else {
+                       LOG_ERR("sqlite3_prepare_v2 failed, [%d:%s]", ret, sqlite3_errmsg(mdgd_ctx->db));
+               }
+
+               sqlite3_free(sql);
+       } else {
+               LOG_ERR("sqlite3_mprintf failed");
+       }
+
+       LOG_END();
+
        return 0;
 }
 
old mode 100644 (file)
new mode 100755 (executable)
index bedf36f..d5a96a2
 
 #include <mdgd_gdbus.h>
 #include <sys/types.h>
-
-#define DBUS_SERVICE_DBUS              "org.freedesktop.DBus"
-#define DBUS_INTERFACE_DBUS            "org.freedesktop.DBus"
+#include <mdgd_group.h>
+#include <mdgd_db.h>
 
 static Group *group_skeleton;
 static Enabler *enabler_skeleton;
 
-Group *group_dbus_get_object()
+gboolean group_create(Group *group, GDBusMethodInvocation *invocation,
+       gchar *group_name, gpointer user_data)
 {
-       return group_skeleton;
+       gint result = MDGD_ERROR_NONE;
+
+       LOG_BEGIN();
+
+       result = mdgd_group_create(group_name);
+       group_complete_create(group, invocation, result);
+
+       LOG_END();
+
+       return TRUE;
+}
+
+gboolean group_find(Group *group, GDBusMethodInvocation *invocation, gint timeout,
+       gpointer user_data)
+{
+       gint result = MDGD_ERROR_UNKNOWN;
+
+       LOG_BEGIN();
+
+       result = mdgd_group_find(timeout);
+       group_complete_find(group, invocation, result);
+
+       LOG_END();
+
+       return TRUE;
+}
+
+gboolean group_delete(Group *group, GDBusMethodInvocation *invocation,
+       gchar *group_name, gpointer user_data)
+{
+       gint result = MDGD_ERROR_UNKNOWN;
+
+       LOG_BEGIN();
+
+       result = mdgd_group_delete(group_name);
+       group_complete_delete(group, invocation, result);
+
+       LOG_END();
+
+       return TRUE;
+}
+
+gboolean group_find_device(Group *group, GDBusMethodInvocation *invocation,
+       gint timeout, gint is_invited, gpointer user_data)
+{
+       int result = MDGD_ERROR_UNKNOWN;
+
+       LOG_BEGIN();
+
+       result = mdgd_group_find_device(timeout, is_invited);
+       group_complete_find_device(group, invocation, result);
+
+       LOG_END();
+
+       return TRUE;
+}
+
+gboolean group_invite_device(Group *group, GDBusMethodInvocation *invocation, gchar *group_name,
+       gchar *uuid, gchar *pin, gpointer user_data)
+{
+       gint result = MDGD_ERROR_UNKNOWN;
+
+       LOG_BEGIN();
+
+       result = mdgd_group_invite_device(group_name, uuid, pin);
+       group_complete_invite_device(group, invocation, result);
+
+       LOG_END();
+
+       return TRUE;
+}
+
+gboolean group_eject_device(Group *group, GDBusMethodInvocation *invocation, gchar *group_name,
+       gchar *uuid, gpointer user_data)
+{
+       gint result = MDGD_ERROR_UNKNOWN;
+
+       LOG_BEGIN();
+
+       result = mdgd_group_eject_device(group_name, uuid);
+       group_complete_eject_device(group, invocation, result);
+
+       LOG_END();
+
+       return TRUE;
+}
+
+gboolean group_find_channel(Group *group, GDBusMethodInvocation *invocation,
+       gchar *uuid_dev, gchar *addr, int port, GVariant *params,
+       gpointer user_data)
+{
+       LOG_BEGIN();
+       LOG_END();
+}
+
+
+gboolean group_regist_channel(Group *group, GDBusMethodInvocation *invocation,
+       gchar *channel_id, gpointer user_data)
+{
+       int ret = MDGD_ERROR_UNKNOWN;
+
+       LOG_BEGIN();
+
+       const gchar *sender = g_dbus_method_invocation_get_sender(invocation);
+
+       ret = mdgd_group_regist_channel(channel_id, sender);
+
+       group_complete_regist_channel(group, invocation, ret);
+
+       LOG_END();
+
+       return TRUE;
+}
+
+gboolean group_unregist_channel(Group *group, GDBusMethodInvocation *invocation,
+       gchar *channel_id, gpointer user_data)
+{
+       int ret = MDGD_ERROR_UNKNOWN;
+
+       LOG_BEGIN();
+
+       const gchar *sender = g_dbus_method_invocation_get_sender(invocation);
+
+       ret = mdgd_group_unregist_channel(channel_id, sender);
+
+       group_complete_unregist_channel(group, invocation, ret);
+
+       LOG_END();
+
+       return TRUE;
+}
+
+gboolean group_send_data(Group *group, GDBusMethodInvocation *invocation,
+       gchar *uuid_dev, gchar *addr, int port, GVariant *params,
+       gpointer user_data)
+{
+       int ret = MDGD_ERROR_UNKNOWN;
+       int length = 0;
+       int len;
+       unsigned char *data;
+       GVariantIter *iter;
+
+       LOG_BEGIN();
+
+       g_variant_get(params, "(iay)", &len, &iter);
+
+       data = g_try_malloc0(len + 1);
+       if (NULL == data) {
+               group_complete_send_data(group, invocation, -1);
+               LOG_ERR("Failed to allocate memory");
+               return TRUE;
+       }
+
+       while (g_variant_iter_loop(iter, "y", &data[length]))
+               length += 1;
+
+       g_variant_iter_free(iter);
+
+       ret = mdgd_group_send_data(uuid_dev, addr, port, data, len);
+
+       group_complete_send_data(group, invocation, 0);
+
+       g_free(data);
+
+       LOG_END();
+
+       return ret;
+}
+
+gboolean group_get_local_device(Group *group,
+       GDBusMethodInvocation *invocation, gpointer user_data)
+{
+       GVariant *device_data;
+       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
+
+       LOG_BEGIN();
+
+       device_data = mdgd_create_variant_device(mdgd_ctx->device);
+       group_complete_get_local_device(group, invocation, device_data);
+
+       LOG_END();
+
+       return TRUE;
+}
+
+gboolean group_request_create_group(Group *group, GDBusMethodInvocation
+       *invocation, gchar *uuid, gchar *group_name, gpointer user_data)
+{
+       int ret = MDGD_ERROR_UNKNOWN;
+
+       LOG_BEGIN();
+
+       ret = mdgd_group_request_create_group(uuid, group_name);
+       group_complete_request_create_group(group, invocation, ret);
+
+       LOG_END();
+
+       return TRUE;
+}
+
+gboolean group_request_invite(Group *group, GDBusMethodInvocation *invocation,
+       gchar *uuid, gchar *group_name, gchar *target_uuid, gchar *PIN, gpointer user_data)
+{
+       int ret = MDGD_ERROR_UNKNOWN;
+
+       LOG_BEGIN();
+
+       ret = mdgd_group_request_invite(uuid, group_name, target_uuid, PIN);
+       group_complete_request_invite(group, invocation, ret);
+
+       LOG_END();
+
+       return TRUE;
+}
+
+gboolean group_request_eject(Group *group, GDBusMethodInvocation *invocation,
+       gchar *uuid, gchar *group_name, gchar *target_uuid, gpointer user_data)
+{
+       int ret = MDGD_ERROR_UNKNOWN;
+
+       LOG_BEGIN();
+
+       ret = mdgd_group_request_eject(uuid, group_name, target_uuid);
+       group_complete_request_eject(group, invocation, ret);
+
+       LOG_END();
+
+       return TRUE;
+}
+
+void mdgd_gdbus_emit_event(mdgd_event_type_e type, int ret, GVariant *data)
+{
+       LOG_BEGIN();
+
+       group_emit_event(group_skeleton, type, ret, data);
+
+       LOG_END();
 }
 
 static bool __group_init(GDBusConnection *connection)
@@ -51,63 +287,33 @@ static bool __group_init(GDBusConnection *connection)
                NULL);
 
        g_signal_connect(group_skeleton,
-               "handle-get-found-groups",
-               G_CALLBACK(group_get_found_groups),
-               NULL);
-
-       g_signal_connect(group_skeleton,
-               "handle-join",
-               G_CALLBACK(group_join),
-               NULL);
-
-       g_signal_connect(group_skeleton,
-               "handle-leave",
-               G_CALLBACK(group_leave),
-               NULL);
-
-       g_signal_connect(group_skeleton,
                "handle-delete",
                G_CALLBACK(group_delete),
                NULL);
 
        g_signal_connect(group_skeleton,
-               "handle-device-find",
-               G_CALLBACK(group_device_find),
-               NULL);
-
-       g_signal_connect(group_skeleton,
-               "handle-invite",
-               G_CALLBACK(group_invite),
-               NULL);
-
-       g_signal_connect(group_skeleton,
-               "handle-eject",
-               G_CALLBACK(group_eject),
-               NULL);
-
-       g_signal_connect(group_skeleton,
-               "handle-device-invite",
-               G_CALLBACK(group_device_invite),
+               "handle-find-device",
+               G_CALLBACK(group_find_device),
                NULL);
 
        g_signal_connect(group_skeleton,
-               "handle-device-eject",
-               G_CALLBACK(group_device_eject),
+               "handle-invite-device",
+               G_CALLBACK(group_invite_device),
                NULL);
 
        g_signal_connect(group_skeleton,
-               "handle-get-remote-device",
-               G_CALLBACK(group_get_remote_device),
+               "handle-eject-device",
+               G_CALLBACK(group_eject_device),
                NULL);
 
        g_signal_connect(group_skeleton,
-               "handle-pair-resource",
-               G_CALLBACK(group_pair_resource),
+               "handle-regist-channel",
+               G_CALLBACK(group_regist_channel),
                NULL);
 
        g_signal_connect(group_skeleton,
-               "handle-unpair-resource",
-               G_CALLBACK(group_unpair_resource),
+               "handle-unregist-channel",
+               G_CALLBACK(group_unregist_channel),
                NULL);
 
        g_signal_connect(group_skeleton,
@@ -116,23 +322,8 @@ static bool __group_init(GDBusConnection *connection)
                NULL);
 
        g_signal_connect(group_skeleton,
-               "handle-find-mowned-devices",
-               G_CALLBACK(group_find_mowned_devices),
-               NULL);
-
-       g_signal_connect(group_skeleton,
-               "handle-get-mowned-device",
-               G_CALLBACK(group_get_mowned_device),
-               NULL);
-
-       g_signal_connect(group_skeleton,
-               "handle-get-my-mowned-device",
-               G_CALLBACK(group_get_my_mowned_device),
-               NULL);
-
-       g_signal_connect(group_skeleton,
-               "handle-get-my-uuid",
-               G_CALLBACK(group_get_my_uuid),
+               "handle-get-local-device",
+               G_CALLBACK(group_get_local_device),
                NULL);
 
        g_signal_connect(group_skeleton,
@@ -150,16 +341,6 @@ static bool __group_init(GDBusConnection *connection)
                G_CALLBACK(group_request_eject),
                NULL);
 
-       g_signal_connect(group_skeleton,
-               "handle-request-delete-group",
-               G_CALLBACK(group_request_delete_group),
-               NULL);
-
-       g_signal_connect(group_skeleton,
-               "handle-start-invited-device-monitor",
-               G_CALLBACK(group_start_invited_device_monitor),
-               NULL);
-
        group = g_dbus_object_manager_server_new(MDGD_DBUS_GROUP_PATH);
 
        // Set connection to 'manager'
@@ -199,6 +380,7 @@ static void _app_conn_destroyed_cb(GDBusConnection *conn, const gchar *Name,
                mdgd_ctx->ref_count -= 1;
 
                g_dbus_connection_signal_unsubscribe(data->connection, data->conn_id);
+               mdgd_group_unregist_channel(NULL, name);
        }
 
        g_free(name);
diff --git a/src/mdg-manager/src/mdgd_gdbus_group.c b/src/mdg-manager/src/mdgd_gdbus_group.c
deleted file mode 100644 (file)
index af2576d..0000000
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <mdgd_db.h>
-#include <mdgd_gdbus_group.h>
-
-/* GDBUS Group Layer */
-/* In this gdbus group layer, Please call the "fn_group" service layer function.*/
-
-gboolean group_create(Group *group, GDBusMethodInvocation *invocation,
-       gchar *group_name, gpointer user_data)
-{
-       gint result = MDGD_ERROR_NONE;
-
-       LOG_DEBUG("group create called using dbus successful");
-
-       if (mdgd_check_group_exist(group_name))
-               LOG_DEBUG("Group already created");
-       else {
-               result = mdgd_group_create(group_name);
-               if (MDGD_ERROR_NONE == result)
-                       mdgd_db_group_insert(group_name);
-       }
-
-       group_complete_create(group, invocation, result);
-
-       return TRUE;
-}
-
-gboolean group_find(Group *group, GDBusMethodInvocation *invocation, gint timeout,
-       gpointer user_data)
-{
-       gint result = MDGD_ERROR_UNKNOWN;
-
-       LOG_DEBUG("group find called using dbus successful");
-
-       result = mdgd_group_find(timeout);
-
-       group_complete_find(group, invocation, result);
-       return TRUE;
-}
-
-gboolean group_get_found_groups(Group *group, GDBusMethodInvocation *invocation,
-       gpointer user_data)
-{
-       gint result = MDGD_ERROR_NONE;
-       GVariant *group_data;
-
-       LOG_DEBUG("get found groups called using dbus successful");
-
-       group_data = mdgd_group_get_found_groups();
-
-       group_complete_get_found_groups(group, invocation, result, group_data);
-       return TRUE;
-}
-
-gboolean group_join(Group *group, GDBusMethodInvocation *invocation,
-       gpointer user_data)
-{
-       gint result = MDGD_ERROR_UNKNOWN;
-
-       LOG_DEBUG("join called using dbus successful");
-
-       result = mdgd_group_join();
-
-       group_complete_join(group, invocation, result);
-
-       return TRUE;
-}
-
-gboolean group_leave(Group *group, GDBusMethodInvocation *invocation,
-       gpointer user_data)
-{
-       //group_complete_leave(group, invocation, result);
-
-       return TRUE;
-}
-
-gboolean group_delete(Group *group, GDBusMethodInvocation *invocation,
-       gchar *group_name, gpointer user_data)
-{
-       gint result = MDGD_ERROR_INVALID_PARAMETER;
-
-       LOG_DEBUG("group delete called using dbus successful");
-
-       if (mdgd_check_group_exist(group_name)) {
-               LOG_DEBUG("Group %s exists", group_name);
-               result = mdgd_group_destroy(group_name);
-               if (MDGD_ERROR_NONE == result)
-                       mdgd_db_group_delete(group_name);
-       }
-
-       group_complete_delete(group, invocation, result);
-
-       return TRUE;
-}
-
-gboolean group_device_find(Group *group, GDBusMethodInvocation *invocation,
-       gint timeout, gpointer user_data)
-{
-       int result = MDGD_ERROR_UNKNOWN;
-
-       result = mdgd_group_find_mot_enabled_devices(timeout);
-
-       group_complete_device_find(group, invocation, result);
-
-       return TRUE;
-}
-
-gboolean group_device_invite(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid_dev1, gchar *uuid_dev2, gchar *pin, gchar *uri_1, gchar *rt_1,
-       gchar *interface_1, int permission_1, gchar *uri_2, gchar *rt_2,
-       gchar *interface_2, int permission_2, gpointer user_data)
-{
-       gint result = MDGD_ERROR_UNKNOWN;
-
-       LOG_DEBUG("group device invite called using dbus successful");
-/*
-       result = mdgd_group_invite(uuid_dev1, uuid_dev2, pin, uri_1, rt_1,
-                                       interface_1, permission_1, uri_2, rt_2, interface_2,
-                                       permission_2);
-*/
-       group_complete_device_invite(group, invocation, result);
-
-       return TRUE;
-}
-
-gboolean group_device_eject(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid_dev1, gchar *uuid_dev2, gpointer user_data)
-{
-       gint result = MDGD_ERROR_UNKNOWN;
-
-       LOG_DEBUG("group device eject called using dbus successful");
-
-       result = mdgd_group_eject(NULL, uuid_dev1, uuid_dev2);
-
-       group_complete_device_eject(group, invocation, result);
-
-       return TRUE;
-}
-
-gboolean group_invite(Group *group, GDBusMethodInvocation *invocation, gchar *group_name,
-       gchar *uuid, gchar *pin, gpointer user_data)
-{
-       gint result = MDGD_ERROR_UNKNOWN;
-
-       LOG_DEBUG("group invite called using dbus successful");
-
-       if (mdgd_check_device_exist(uuid)) {
-               result = MDGD_ERROR_ALREADY_REGISTERED;
-       } else {
-               result = mdgd_group_invite(group_name, uuid, pin);
-               if (MDGD_ERROR_NONE == result)
-                       mdgd_db_device_insert(uuid, group_name);
-       }
-
-       /* Now, for the sake of convenience, we change 'group_complete_invite' to 'group_complete_device_invite'. */
-#if 0
-       group_complete_invite(group, invocation, result);
-#else
-       group_complete_device_invite(group, invocation, result);
-#endif
-
-       return TRUE;
-}
-
-gboolean group_eject(Group *group, GDBusMethodInvocation *invocation, gchar *group_name,
-       gchar *uuid, gpointer user_data)
-{
-       gint result = MDGD_ERROR_UNKNOWN;
-
-       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-       mdgd_check_null_ret_error("mdgd_ctx", mdgd_ctx, FALSE);
-
-       result = mdgd_group_eject(group_name, mdgd_ctx->device_uuid, uuid);
-
-       /* Now, for the sake of convenience, we change 'group_complete_eject' to 'group_complete_device_eject'. */
-#if 0
-       group_complete_invite(group, invocation, result);
-#else
-       group_complete_device_eject(group, invocation, result);
-#endif
-
-       return TRUE;
-}
-
-gboolean group_get_remote_device(Group *group, GDBusMethodInvocation *invocation,
-       gpointer user_data)
-{
-       int dev_count = 0;
-       GVariant *device_data;
-
-       LOG_DEBUG("get remote device called using dbus successful");
-
-       dev_count = mdgd_group_get_mot_device_count();
-       device_data = mdgd_group_get_remote_mot_enabled_devices();
-
-       group_complete_get_remote_device(group, invocation, dev_count, device_data);
-
-       return TRUE;
-}
-
-gboolean group_pair_resource(Group *group, GDBusMethodInvocation *invocation,
-       gchar *target_1, gchar *subject_1, gchar *uri_1, gchar *rt_1,
-       gchar *interface_1, int permission_1, gchar *target_2, gchar *subject_2,
-       gchar *uri_2, gchar *rt_2, gchar *interface_2, int permission_2,
-       gpointer user_data)
-{
-       int ret = MDGD_ERROR_UNKNOWN;
-
-       LOG_DEBUG("pair resource called using dbus successful");
-
-       ret = mdgd_group_pair_resource(target_1, subject_1, uri_1, rt_1,
-                                          interface_1, permission_1, target_2, subject_2, uri_2,
-                                          rt_2, interface_2, permission_2);
-
-       group_complete_pair_resource(group, invocation, ret);
-
-       return TRUE;
-}
-
-gboolean group_unpair_resource(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid_dev1, gchar *uuid_dev2, gpointer user_data)
-{
-       int ret = MDGD_ERROR_UNKNOWN;
-
-       LOG_DEBUG("unpair resource called using dbus successful");
-
-       ret = mdgd_group_unpair_resource(uuid_dev1, uuid_dev2);
-
-       group_complete_unpair_resource(group, invocation, ret);
-
-       return TRUE;
-}
-
-gboolean group_send_data(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid_dev, gchar *addr, int port, GVariant *params,
-       gpointer user_data)
-{
-       int ret = MDGD_ERROR_UNKNOWN;
-       int length = 0;
-       int len;
-       unsigned char *data;
-       GVariantIter *iter;
-
-       LOG_DEBUG("send data called using dbus successful");
-
-       g_variant_get(params, "(iay)", &len, &iter);
-
-       data = g_try_malloc0(len + 1);
-       if (NULL == data) {
-               group_complete_send_data(group, invocation, -1);
-               LOG_ERR("Failed to allocate memory");
-               return TRUE;
-       }
-
-       while (g_variant_iter_loop(iter, "y", &data[length]))
-               length += 1;
-
-       g_variant_iter_free(iter);
-
-       ret = mdgd_group_send_data(uuid_dev, addr, port, data, len);
-
-       group_complete_send_data(group, invocation, 0);
-
-       g_free(data);
-
-       return ret;
-}
-
-gboolean group_find_mowned_devices(Group *group,
-       GDBusMethodInvocation *invocation, gint timeout, gpointer user_data)
-{
-       int ret = MDGD_ERROR_UNKNOWN;
-
-       LOG_DEBUG("find mot owned devices called using dbus successful");
-
-       ret = mdgd_group_find_mowned_devices(timeout);
-
-       group_complete_find_mowned_devices(group, invocation, ret);
-
-       return TRUE;
-}
-
-gboolean group_get_mowned_device(Group *group,
-       GDBusMethodInvocation *invocation, gpointer user_data)
-{
-       int dev_count = 0;
-       GVariant *device_data;
-
-       LOG_DEBUG("get mowned device called using dbus successful");
-
-       dev_count = mdgd_group_get_mowned_device_count();
-       device_data = mdgd_group_get_mowned_devices();
-
-       group_complete_get_mowned_device(group, invocation, dev_count, device_data);
-
-       return TRUE;
-}
-
-gboolean group_get_my_mowned_device(Group *group,
-       GDBusMethodInvocation *invocation, gpointer user_data)
-{
-       GVariant *device_data;
-
-       LOG_DEBUG("get mowned device called using dbus successful");
-
-       device_data = mdgd_group_get_my_mowned_devices();
-       LOG_DEBUG("get mowned device called end ");
-
-       group_complete_get_my_mowned_device(group, invocation, device_data);
-
-       return TRUE;
-}
-
-gboolean group_get_my_uuid(Group *group,
-       GDBusMethodInvocation *invocation, gpointer user_data)
-{
-       LOG_DEBUG("get my uuid called using dbus successful");
-
-       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-       group_complete_get_my_uuid(group, invocation, mdgd_ctx->device_uuid);
-
-       return TRUE;
-}
-
-gboolean group_request_create_group(Group *group, GDBusMethodInvocation
-       *invocation, gchar *uuid, gchar *group_name, gpointer user_data)
-{
-       int ret = MDGD_ERROR_UNKNOWN;
-
-       LOG_DEBUG("Request Create Group called using dbus successful");
-
-       ret = mdgd_group_request_create_group(uuid, group_name);
-
-       group_complete_request_create_group(group, invocation, ret);
-
-       return TRUE;
-}
-
-gboolean group_request_invite(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid, gchar *group_name, gchar *target_uuid, gchar *PIN, gpointer user_data)
-{
-       int ret = MDGD_ERROR_UNKNOWN;
-
-       LOG_DEBUG("Request Invite called using dbus successful");
-
-       ret = mdgd_group_request_invite(uuid, group_name, target_uuid, PIN);
-
-       group_complete_request_invite(group, invocation, ret);
-
-       return TRUE;
-}
-
-gboolean group_request_eject(Group *group, GDBusMethodInvocation *invocation,
-       gchar *uuid, gchar *group_name, gchar *target_uuid, gpointer user_data)
-{
-       int ret = MDGD_ERROR_UNKNOWN;
-
-       LOG_DEBUG("Request Eject called using dbus successful");
-
-       ret = mdgd_group_request_eject(uuid, group_name, target_uuid);
-
-       group_complete_request_eject(group, invocation, ret);
-
-       return TRUE;
-}
-
-gboolean group_request_delete_group(Group *group,
-       GDBusMethodInvocation *invocation, gchar *uuid, gchar *group_name, gpointer user_data)
-{
-       int ret = MDGD_ERROR_UNKNOWN;
-
-       LOG_DEBUG("Request Delete Group called using dbus successful");
-
-       ret = mdgd_group_request_delete_group(uuid, group_name);
-
-       group_complete_request_delete_group(group, invocation, ret);
-
-       return TRUE;
-}
-
-gboolean group_start_invited_device_monitor(Group *group,
-                                       GDBusMethodInvocation *invocation, int start,
-                                       gpointer user_data)
-{
-       int ret = MDGD_ERROR_UNKNOWN;
-
-       LOG_DEBUG("Start Myowned device monitor");
-
-       ret = mdgd_group_start_invited_device_monitor(start);
-
-       group_complete_start_invited_device_monitor(group, invocation, ret);
-
-       return TRUE;
-}
-
-void notify_group_found(GVariant *group_data)
-{
-       group_emit_group_found(group_dbus_get_object(), group_data);
-}
-
-void notify_group_find_finish(int ret)
-{
-       group_emit_group_find_finish(group_dbus_get_object(), ret);
-}
-
-void notify_device_found(int device_count, GVariant *device_data)
-{
-       group_emit_device_found(group_dbus_get_object(), device_count, device_data);
-}
-
-void notify_device_find_finish(int ret)
-{
-       group_emit_device_find_finish(group_dbus_get_object(), ret);
-}
-
-void notify_group_device_invite_result(int ret)
-{
-       group_emit_device_invite_result(group_dbus_get_object(), ret);
-}
-
-void notify_group_device_eject_result(int ret)
-{
-       group_emit_device_eject_result(group_dbus_get_object(), ret);
-}
-
-void notify_mowned_device_found(int device_count, GVariant *device_data)
-{
-       group_emit_mowned_device_found(group_dbus_get_object(), device_count, device_data);
-}
-
-void notify_mowned_device_find_finish(int ret)
-{
-       group_emit_mowned_device_find_finish(group_dbus_get_object(), ret);
-}
-void notify_group_join(int result)
-{
-       group_emit_join_result(group_dbus_get_object(), result);
-}
-
-void notify_send_data_finish(const char *resp_data, int ret)
-{
-       group_emit_send_data_finish(group_dbus_get_object(), resp_data, ret);
-}
-
-void notify_request_result(const char *cmd, const char *requester_id,
-                                                  unsigned char *arg, int len, int ret)
-{
-       GVariantBuilder *bytearray_builder = NULL;
-       GVariant *params = NULL;
-       int i;
-
-       bytearray_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
-
-       for (i = 0; i < len; i++)
-               g_variant_builder_add(bytearray_builder, "y", arg[i]);
-
-       params = g_variant_new("(iay)", len, bytearray_builder);
-       g_variant_builder_unref(bytearray_builder);
-
-       group_emit_request_result(group_dbus_get_object(), cmd, requester_id,
-                                                         params, ret);
-}
-
-void notify_device_monitor_result(const char *uuid, const char *group_name,
-                                                                 const char *status)
-{
-       group_emit_device_monitor_result(group_dbus_get_object(), uuid, group_name,
-                                                                         status);
-}
-
old mode 100644 (file)
new mode 100755 (executable)
index b86f7fa..1b22b8a
  *
  */
 
-#include <mdgd_enum.h>
 #include <mdgd_group.h>
 #include <mdgd_mot_agent.h>
-#include <mdgd_gdbus_group.h>
 #include <mdgd_db.h>
-#include <mdgd_util.h>
+#include <mdgd_context.h>
+#include <mdgd_gdbus.h>
 
-GList *found_group_list;
-GList *mot_enb_dev_list = NULL;
-GList *mowned_dev_list = NULL;
-GList *invited_dev_list = NULL;
-mdgd_group_invite_info_t *group_invite_info = NULL;
-mdgd_mot_device_t *my_device = NULL;
-
-#define KEEPALIVE_MESSAGE_TIMEOUT 900
-#define CHECK_DEVICE_STATUS_TIMEOUT 3000
-
-/* Called when daemon is start. */
-int mdgd_group_initialize()
-{
-       int sql_ret = SQLITE_OK;
-       char *sql = NULL;
-       sqlite3_stmt *stmt = NULL;
-
-       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-
-       //1. group creation
-       sql = sqlite3_mprintf("SELECT group_name FROM %s;", MDGD_DB_GROUP_TABLE);
-       if (sql != NULL) {
-               sql_ret = sqlite3_prepare_v2(mdgd_ctx->db, sql, strlen(sql), &stmt, NULL);
-               if (sql_ret != SQLITE_OK) {
-                       LOG_ERR("Error: %s", sqlite3_errmsg(mdgd_ctx->db));
-                       sqlite3_free(sql);
-                       return MDGD_ERROR_UNKNOWN;
-               }
-
-               do {
-                       char *group_name = NULL;
-                       sql_ret = sqlite3_step(stmt);
-                       if (sql_ret != SQLITE_ROW) {
-                               break;
-                       }
-
-                       group_name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
-                       if (NULL == group_name) {
-                               LOG_ERR("Memory allocation failed");
-                               continue;
-                       }
-
-                       mdgd_group_create(group_name);
-               } while (sql_ret != SQLITE_DONE);
-
-               sqlite3_finalize(stmt);
-               sqlite3_free(sql);
-       }
-
-       //2. device creation
-       mdgd_group_find_mot_enabled_devices(2);
-
-       return MDGD_ERROR_NONE;
-}
-
-void __print_foreach_device(gpointer data, gpointer user_data)
-{
-       char *uuid = (char *)data;
-       LOG_DEBUG("        - %s", uuid);
-}
-
-void __print_foreach_grp(gpointer data, gpointer user_data)
-{
-       mdgd_grp_t *grp = (mdgd_grp_t *)data;
-       LOG_DEBUG("Group name : %s", grp->name);
-       LOG_DEBUG("    <Device>");
-       g_list_foreach(grp->device_list, __print_foreach_device, NULL);
-       LOG_DEBUG("");
-}
-
-void __print_groups_information()
-{
-       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-       mdgd_check_null_ret("mdgd_ctx", mdgd_ctx);
-
-       LOG_DEBUG("-------------------------------------------");
-       g_list_foreach(mdgd_ctx->grp_list, __print_foreach_grp, NULL);
-       LOG_DEBUG("-------------------------------------------");
-}
-
-/* create group and destroy */
 int mdgd_group_create(const char* name)
 {
-       int ret;
+       int ret = MDGD_ERROR_NONE;
 
        LOG_BEGIN();
 
        mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
        mdgd_check_null_ret_error("mdgd_ctx", mdgd_ctx, MDGD_ERROR_INVALID_PARAMETER);
-       GList *list = mdgd_ctx->grp_list;
-
-       GList *l;
-       for (l = list; l != NULL; l = l->next) {
-               mdgd_grp_t *grp = (mdgd_grp_t *)l->data;
-
-               if (!strncmp(grp->name, name, strlen(grp->name))) {
-                       LOG_ERR("already exists name in structure");
-                       return MDGD_ERROR_UNKNOWN;
-               }
-       }
 
-       ret = mdgd_iot_add_resource(MDGD_RESOURCE_TYPE_GROUP, name);
-       if (ret != MDGD_ERROR_NONE) {
-               LOG_ERR("Add resource is failed : %s", mdgd_log_get_error_string(ret));
-       }
-
-       mdgd_grp_t *grp = g_new0(mdgd_grp_t, 1);
-       grp->name = strdup(name);
-
-       mdgd_ctx->grp_list = g_list_append(mdgd_ctx->grp_list, grp);
-
-       mdgd_resource_print_list();
-       __print_groups_information();
+       if (mdgd_db_check_group_exist(name) == false)
+               ret = mdgd_db_group_insert(name);
+       else
+               ret = MDGD_ERROR_ALREADY_REGISTERED;
 
        LOG_END();
 
-       return MDGD_ERROR_NONE;
+       return ret;
 }
 
-static void _free_group_func(gpointer data)
+int mdgd_group_delete(const char *name)
 {
-       mdgd_group_t *group = (mdgd_group_t *)data;
-       mdgd_check_null_ret("group", group);
-
-       if (group->uri_path != NULL) {
-               g_free(group->uri_path);
-               group->uri_path = NULL;
-       }
-       if (group->device_id != NULL) {
-               g_free(group->device_id);
-               group->device_id = NULL;
-       }
-       if (group->group_name != NULL) {
-               g_free(group->group_name);
-               group->group_name = NULL;
-       }
-       if (group->host_addr != NULL) {
-               g_free(group->host_addr);
-               group->host_addr = NULL;
-       }
-       if (group->resource_type != NULL) {
-               g_free(group->resource_type);
-               group->resource_type = NULL;
-       }
-       g_free(group);
-       group = NULL;
-}
+       int ret = MDGD_ERROR_NONE;
+       char *devices[256];
+       int device_count = 0;
 
-int mdgd_group_destroy(const char* name)
-{
-       int ret = MDGD_ERROR_UNKNOWN;
-       GList *iter = NULL;
-       bool found = FALSE;
-       mdgd_grp_t *grp = NULL;
+       LOG_BEGIN();
 
        mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-       mdgd_check_null_ret_error("mdgd_ctx", mdgd_ctx, -1);
-
-       iter = mdgd_ctx->grp_list;
-       while (iter != NULL) {
-               grp = (mdgd_grp_t *)iter->data;
-               if (g_strcmp0(grp->name, name) == 0) {
-                       GList *device_iter = grp->device_list;
-                       while (device_iter != NULL) {
-                               char *device_uuid = (char *)device_iter->data;
-                               mdgd_group_eject(name, mdgd_ctx->device_uuid, device_uuid);
-
-                               device_iter = g_list_next(device_iter);
-                       }
-
-                       found = TRUE;
-                       break;
-               }
 
-               iter = g_list_next(iter);
-       }
-       ret = mdgd_iot_delete_resource(MDGD_RESOURCE_TYPE_GROUP, name);
-       if (ret == MDGD_ERROR_NONE) {
-               LOG_DEBUG("Successfully destroyed group %s", name);
-
-               iter = found_group_list;
-
-               while (iter != NULL) {
-                       mdgd_group_t *group = (mdgd_group_t *)iter->data;
-                       iter = g_list_next(iter);
-
-                       if (group->type == MDGD_GROUP_GROUP_LOCAL &&
-                               g_strcmp0(group->group_name, name) == 0) {
-                               LOG_DEBUG("Remove %s from found group list", name);
-                               found_group_list = g_list_remove(found_group_list, group);
-                               _free_group_func(group);
-                               break;
-                       }
-               }
+       /* Get all device in group */
+       mdgd_db_get_devices_in_group(name, devices, &device_count);
+       for (int i = 0; i < device_count; i++) {
+               mdgd_db_device_delete(name, devices[i]);
 
-               if (found == TRUE)
-                       mdgd_ctx->grp_list = g_list_remove(mdgd_ctx->grp_list, grp);
+               if (mdgd_db_check_device_exist(devices[i]) == false)
+                       agent_unpair(mdgd_ctx->device_uuid, devices[i]);
        }
 
+       /* delete group */
+       mdgd_db_group_delete(name);
+
+       LOG_END();
+
        return ret;
 }
-
-static void _mot_enb_dev_list_free_func(gpointer data)
+static gboolean __timeout_cb(gpointer data)
 {
-       mdgd_mot_device_t *device = (mdgd_mot_device_t *)data;
-       mdgd_check_null_ret("device", device);
+       int ret = MDGD_ERROR_NONE;
+       mdgd_command_t *cmd = (mdgd_command_t *)data;
+       mdgd_check_null_ret("cmd", cmd);
+       GVariant *dummy = mdgd_create_variant_dummy();
 
-       if (device->device_id != NULL) {
-               g_free(device->device_id);
-               device->device_id = NULL;
-       }
-       if (device->addr != NULL) {
-               g_free(device->addr);
-               device->addr = NULL;
-       }
-       if (device->route_data != NULL) {
-               g_free(device->route_data);
-               device->route_data = NULL;
-       }
-       if (device->remote_id != NULL) {
-               g_free(device->remote_id);
-               device->remote_id = NULL;
-       }
-       if (device->sec_ver != NULL) {
-               g_free(device->sec_ver);
-               device->sec_ver = NULL;
+       LOG_BEGIN();
+
+       if (cmd->resource_type == MDGD_RESOURCE_TYPE_GROUP) {
+               mdgd_gdbus_emit_event(MDGD_EVENT_GROUP_FIND_FINISH, 0, dummy);
+       } else if (cmd->resource_type == MDGD_RESOURCE_TYPE_DEVICE) {
+               mdgd_gdbus_emit_event(MDGD_EVENT_DEVICE_FIND_FINISH, 0, dummy);
+       } else {
+               LOG_ERR("Unknown Resource Type");
        }
-       g_free(device);
-       device = NULL;
+
+       LOG_END();
 }
 
 int mdgd_group_find(int timeout)
@@ -259,633 +92,196 @@ int mdgd_group_find(int timeout)
 
        LOG_BEGIN();
 
-       /* list freeing */
-       g_list_free_full(found_group_list, _free_group_func);
-       found_group_list = NULL;
-
        mdgd_command_t *cmd = g_new0(mdgd_command_t, 1);
        mdgd_check_null_ret_error("cmd", cmd, MDGD_ERROR_INVALID_PARAMETER);
+       cmd->resource_type = MDGD_RESOURCE_TYPE_GROUP;
+
        ret = mdgd_iot_discovery_resource(MDGD_RESOURCE_TYPE_GROUP, timeout, cmd);
        if (ret != MDGD_ERROR_NONE)
                LOG_ERR("Failed to discover resource : %s", mdgd_log_get_error_string(ret));
 
+       g_timeout_add_seconds(timeout + 1, __timeout_cb, cmd);
+
        LOG_END();
 
        return ret;
 }
 
-GVariant *mdgd_group_get_found_groups()
-{
-       GVariantBuilder *builder;
-       GVariant *group_data;
-       GList *iter = NULL;
-
-       builder = g_variant_builder_new(G_VARIANT_TYPE("aa{sv}"));
-
-       iter = found_group_list;
-       while (iter != NULL) {
-               mdgd_group_t *group = (mdgd_group_t *)iter->data;
-
-               g_variant_builder_open(builder, G_VARIANT_TYPE_VARDICT);
-               g_variant_builder_add(builder, "{sv}", "URI",
-                                                         g_variant_new_string(group->uri_path));
-               g_variant_builder_add(builder, "{sv}", "DeviceID",
-                                                         g_variant_new_string(group->device_id));
-               g_variant_builder_add(builder, "{sv}", "GroupName",
-                                                         g_variant_new_string(group->group_name));
-               g_variant_builder_add(builder, "{sv}", "HostAddress",
-                                                         g_variant_new_string(group->host_addr));
-               g_variant_builder_add(builder, "{sv}", "GroupDeviceType",
-                                                         g_variant_new_string(group->resource_type));
-               /*When we get found groups, we can get my groups also. */
-               g_variant_builder_add(builder, "{sv}", "GroupType",
-                                                         g_variant_new_int32(group->type));
-               g_variant_builder_close(builder);
-
-               iter = g_list_next(iter);
-       }
-
-       group_data = g_variant_builder_end(builder);
-       g_variant_builder_unref(builder);
-
-       return group_data;
-}
-
-int mdgd_group_add_new(char *uri_path, char *device_id, char *device_name,
-                                        char *host_addr, char *resource_type, mdgd_group_type_e type)
+int mdgd_group_found(mdgd_group_t *group)
 {
-       mdgd_group_t *group;
-       GVariantBuilder *builder;
        GVariant *group_data;
 
        LOG_BEGIN();
 
-       group = g_try_malloc0(sizeof(mdgd_group_t));
-       mdgd_check_null_print_error(group, "Memory allocation failed");
+       group_data = mdgd_create_variant_group(group);
 
-       group->uri_path = g_strdup(uri_path);
-       group->device_id = g_strdup(device_id);
-       group->group_name = g_strdup(device_name);
-       group->host_addr = g_strdup(host_addr);
-       group->resource_type =  g_strdup(resource_type);
-       group->type = type;
-
-       found_group_list = g_list_append(found_group_list, group);
-
-       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
-
-       g_variant_builder_add(builder, "{sv}", "URI",
-                                                 g_variant_new_string(group->uri_path));
-       g_variant_builder_add(builder, "{sv}", "DeviceID",
-                                                 g_variant_new_string(group->device_id));
-       g_variant_builder_add(builder, "{sv}", "GroupName",
-                                                 g_variant_new_string(group->group_name));
-       g_variant_builder_add(builder, "{sv}", "HostAddress",
-                                                 g_variant_new_string(group->host_addr));
-       g_variant_builder_add(builder, "{sv}", "GroupDeviceType",
-                                                 g_variant_new_string(group->resource_type));
-       g_variant_builder_add(builder, "{sv}", "GroupType",
-                                                 g_variant_new_int32(group->type));
-
-       group_data = g_variant_builder_end(builder);
-
-       notify_group_found(group_data);
-
-       g_variant_builder_unref(builder);
+       mdgd_gdbus_emit_event(MDGD_EVENT_GROUP_FOUND, 0, group_data);
 
        LOG_END();
 
        return MDGD_ERROR_NONE;
 }
 
-/* Join the remote devices in my daemon */
-
-// Find MOT enabled devices
-int mdgd_group_add_new_mot_device(mdgd_mot_device_t *device)
+int mdgd_group_find_device(int timeout, bool is_invited)
 {
-       GList *iter = NULL;
-       gboolean is_exist = FALSE;
+       int ret;
 
        LOG_BEGIN();
 
-       iter = mot_enb_dev_list;
-       while (iter != NULL) {
-               mdgd_mot_device_t *temp = (mdgd_mot_device_t *)iter->data;
+       mdgd_command_t *cmd = g_new0(mdgd_command_t, 1);
+       mdgd_check_null_ret_error("cmd", cmd, MDGD_ERROR_INVALID_PARAMETER);
+       cmd->resource_type = MDGD_RESOURCE_TYPE_DEVICE;
 
-               if (g_strcmp0(temp->device_id, device->device_id) == 0) {
-                       LOG_DEBUG("Device %s already exists in mot enable device list",
-                                         device->device_id);
-                       is_exist = TRUE;
-                       break;
-               }
+       if (is_invited == false)
+               ret = agent_find_mot_enable_devices(timeout);
+       else
+               ret = agent_find_mowned_devices(timeout);
 
-               iter = g_list_next(iter);
+       if (ret != MDGD_ERROR_NONE) {
+               LOG_ERR("Failed to find device : %s",
+                                mdgd_log_get_error_string(ret));
        }
 
-       if (is_exist == FALSE) {
-               LOG_DEBUG("Add device with uuid %s to mot enabled device list",
-                                 device->device_id);
-               mot_enb_dev_list = g_list_append(mot_enb_dev_list, device);
-       }
+       g_timeout_add_seconds(timeout + 1, __timeout_cb, cmd);
 
        LOG_END();
 
-       return is_exist;
-}
-
-
-GVariant *mdgd_group_get_remote_mot_enabled_devices()
-{
-       GVariantBuilder *builder;
-       GVariant *group_data;
-       GList *iter = NULL;
-
-       mdgd_remove_ip_info();
-       mdgd_make_ip_info();
-
-       builder = g_variant_builder_new(G_VARIANT_TYPE("aa{sv}"));
-
-       iter = mot_enb_dev_list;
-       while (iter != NULL) {
-               mdgd_mot_device_t *device = (mdgd_mot_device_t *)iter->data;
-
-               g_variant_builder_open(builder, G_VARIANT_TYPE_VARDICT);
-               g_variant_builder_add(builder, "{sv}", "DeviceID",
-                                                         g_variant_new_string(device->device_id));
-               g_variant_builder_add(builder, "{sv}", "Adapter",
-                                                         g_variant_new_int32(device->adapter));
-               g_variant_builder_add(builder, "{sv}", "Flags",
-                                                         g_variant_new_int32(device->flags));
-               g_variant_builder_add(builder, "{sv}", "Port",
-                                                         g_variant_new_uint16(device->port));
-               g_variant_builder_add(builder, "{sv}", "Address",
-                                                         g_variant_new_string(device->addr));
-               g_variant_builder_add(builder, "{sv}", "DeviceType",
-                                                         g_variant_new_uint16(mdgd_is_local_ip(device->addr)));
-               g_variant_builder_add(builder, "{sv}", "Ifindex",
-                                                         g_variant_new_int32(device->ifindex));
-               g_variant_builder_add(builder, "{sv}", "RouteData",
-                                                         g_variant_new_string(device->route_data));
-               g_variant_builder_add(builder, "{sv}", "ConnType",
-                                                         g_variant_new_int32(device->conn_type));
-               g_variant_builder_add(builder, "{sv}", "SecurePort",
-                                                         g_variant_new_uint16(device->secure_port));
-               g_variant_builder_add(builder, "{sv}", "TcpPort",
-                                                         g_variant_new_uint16(device->tcp_port));
-               g_variant_builder_add(builder, "{sv}", "SecVer",
-                                                         g_variant_new_string(device->sec_ver));
-               g_variant_builder_add(builder, "{sv}", "DeviceStatus",
-                                                         g_variant_new_int32(device->dev_status));
-               LOG_DEBUG("%s", device->model_name);
-               g_variant_builder_add(builder, "{sv}", "ModelName",
-                                                         g_variant_new_string(device->model_name));
-               g_variant_builder_add(builder, "{sv}", "DeviceName",
-                                                         g_variant_new_string(device->device_name));
-               g_variant_builder_add(builder, "{sv}", "PlatformVer",
-                                                         g_variant_new_string(device->platform_ver));
-               g_variant_builder_add(builder, "{sv}", "VendorID",
-                                                         g_variant_new_string(device->vendor_id));
-               g_variant_builder_add(builder, "{sv}", "Profile",
-                                                         g_variant_new_string(device->profile));
-
-               g_variant_builder_close(builder);
-
-               iter = g_list_next(iter);
-       }
-
-       group_data = g_variant_builder_end(builder);
-       g_variant_builder_unref(builder);
-
-       return group_data;
-}
-
-int mdgd_group_get_mot_device_count()
-{
-       if (mot_enb_dev_list)
-               return g_list_length(mot_enb_dev_list);
-
-       return 0;
+       return ret;
 }
 
-void mdgd_group_notify_mot_enable_device_done()
+int mdgd_group_found_device(mdgd_device_t *device)
 {
        GVariant *device_data;
-       int count = mdgd_group_get_mot_device_count();
-
-       LOG_BEGIN();
-
-       device_data = mdgd_group_get_remote_mot_enabled_devices();
-
-       notify_device_found(count, device_data);
-
-       LOG_END();
-}
-
-int mdgd_group_find_mot_enabled_devices(int timeout)
-{
-       int ret;
 
        LOG_BEGIN();
 
-       /* list freeing */
-       g_list_free_full(mot_enb_dev_list, _mot_enb_dev_list_free_func);
-       mot_enb_dev_list = NULL;
+       device_data = mdgd_create_variant_device(device);
 
-       ret = agent_find_mot_enable_devices(timeout);
-       if (ret != MDGD_ERROR_NONE) {
-               LOG_ERR("Failed to find mot enable devices : %s",
-                                mdgd_log_get_error_string(ret));
-       }
+       mdgd_gdbus_emit_event(MDGD_EVENT_DEVICE_FOUND, 0, device_data);
 
        LOG_END();
 
-       return ret;
+       return MDGD_ERROR_NONE;
 }
 
-void mdgd_group_notify_keepalive_response(mdgd_command_t *cmd)
-{
-       GList *iter = NULL;
-       gboolean is_exist = FALSE;
-       mdgd_invited_device_t *temp;
-
-       LOG_DEBUG("Response received from uuid %s", cmd->uuid);
-
-       iter = invited_dev_list;
-       while (iter != NULL) {
-               temp = (mdgd_invited_device_t *)iter->data;
-
-               if ((g_strcmp0(temp->group_name, cmd->arg1) == 0) &&
-                       (g_strcmp0(temp->uuid, cmd->uuid) == 0)) {
-                       LOG_DEBUG("Device %s count %d found in invited device list",
-                                         cmd->uuid, temp->count);
-                       is_exist = TRUE;
-                       break;
-               }
-
-               iter = g_list_next(iter);
-       }
-
-       if (is_exist == TRUE)
-               temp->count += 1;
-}
+#define FULL_PERMISSION 31
 
-int mdgd_group_request_keepalive(char *uuid, char *group_name, char *host)
+int mdgd_group_invite_device(const char *group_name, const char *uuid, const char *pin)
 {
        int ret = MDGD_ERROR_NONE;
 
-       LOG_DEBUG("[Request KeepAlive] to %s", uuid);
-       mdgd_command_t *cmd = g_new0(mdgd_command_t, 1);
-       cmd->command = MDGD_REQ_KEEP_ALIVE;
-       cmd->uuid = g_strdup(uuid);
-       cmd->arg1 = g_strdup(group_name);
-       cmd->host = g_strdup(host);
-
-       ret = mdgd_iot_send_data(MDGD_RESOURCE_TYPE_DATA, 2, cmd);
-       if (ret != MDGD_ERROR_NONE) {
-               LOG_ERR("Failed to send data : %s",
-                               mdgd_log_get_error_string(ret));
-               return ret;
-       }
-
-       return 0;
-}
-
-mdgd_group_invite_info_t *mdgd_group_get_invite_info()
-{
-       return group_invite_info;
-}
-
-void mdgd_group_free_invite_info()
-{
-       LOG_DEBUG("Remove Group Invite Information %p", group_invite_info);
-
-       if (group_invite_info) {
-               g_free(group_invite_info->group_name);
-               g_free(group_invite_info->uuid_dev1);
-               g_free(group_invite_info->uuid_dev2);
-               g_free(group_invite_info->pin);
-               g_free(group_invite_info->uri_1);
-               g_free(group_invite_info->rt_1);
-               g_free(group_invite_info->interface_1);
-               g_free(group_invite_info->uri_2);
-               g_free(group_invite_info->rt_2);
-               g_free(group_invite_info->interface_2);
-               g_free(group_invite_info);
-
-               group_invite_info = NULL;
-       }
-}
-
-mdgd_mot_device_t *mdgd_group_check_device_in_mot_enb_dev_list(char *uuid)
-{
-       mdgd_mot_device_t *device;
-       GList *iter;
-
-       iter = mot_enb_dev_list;
+       LOG_BEGIN();
 
-       while (iter != NULL) {
-               device = (mdgd_mot_device_t *)iter->data;
+       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
+       mdgd_check_null_ret_error("mdgd_ctx", mdgd_ctx, MDGD_ERROR_INVALID_PARAMETER);
 
-               if (g_strcmp0(device->device_id, uuid) == 0) {
-                       LOG_DEBUG("Device %s is available in mot enable device list", uuid);
-                       return device;
+       if (mdgd_db_check_device_exist_in_group(group_name, uuid)) {
+               ret = MDGD_ERROR_ALREADY_REGISTERED;
+       } else {
+               if (mdgd_db_check_device_exist(uuid) == false) {
+                       ret = agent_pair(pin, mdgd_ctx->device_uuid, uuid, "/comp/data",
+                                                "core.comp.data", "oic.if.baseline", FULL_PERMISSION, uuid,
+                                                mdgd_ctx->device_uuid, "/comp/data", "core.comp.data",
+                                                "oic.if.baseline", FULL_PERMISSION);
                }
-       }
 
-       return NULL;
-}
-
-static char *_addr2host(char *addr, int port)
-{
-       char ip[50];
-       char *percent;
-
-       g_strlcpy(ip, addr, strlen(addr) + 1);
-
-       /* Remove % from address */
-       percent = strchr(ip, '%');
-       if (percent)
-               percent[0] = '\0';
-
-       /* IPv6 Address should be encoded for RFC6874  */
-       if (strchr(ip, ':')) /* IPv6 Adress */
-               return g_strdup_printf("coaps://[%s%s%s]:%d", ip, "%25",
-                                                                       percent + 1, port);
-       else /* IPv4 Address */
-               return g_strdup_printf("coaps://%s:%d", ip, port);
-}
-
-void mdgd_group_notify_group_invite(int ret)
-{
-       /*
-        * ret = 0 OC_STACK_OK
-        * ret = 49 OC_STACK_DUPLICATE_UUID
-        */
-       if (OC_STACK_OK == ret && group_invite_info) {
-               mdgd_invited_device_t *device;
-               GList *iter = NULL;
-               gboolean is_exist = FALSE;
-
-               device = g_try_malloc0(sizeof(mdgd_invited_device_t));
-               if (NULL == device) {
-                       LOG_ERR("Memory allocation failed");
-               } else {
-                       device->group_name = g_strdup(group_invite_info->group_name);
-                       device->uuid = g_strdup(group_invite_info->uuid_dev2);
-
-                       iter = invited_dev_list;
-                       while (iter != NULL) {
-                               mdgd_invited_device_t *temp = (mdgd_invited_device_t *)iter->data;
-
-                               if ((g_strcmp0(temp->group_name, device->group_name) == 0) &&
-                                       (g_strcmp0(temp->uuid, device->uuid) == 0)) {
-                                       LOG_DEBUG("Device %s already exists in invited device list",
-                                                         temp->uuid);
-                                       is_exist = TRUE;
-                                       break;
-                               }
-
-                               iter = g_list_next(iter);
-                       }
-
-                       if (is_exist == FALSE) {
-                               mdgd_mot_device_t *temp;
-                               temp = mdgd_group_check_device_in_mot_enb_dev_list(device->uuid);
-                               if (temp)
-                                       device->host = _addr2host(temp->addr, temp->secure_port);
-
-                               device->count = 0;
-                               LOG_DEBUG("Add device %s group %s host %s to invited device list",
-                                                 device->uuid, device->group_name, device->host);
-                               invited_dev_list = g_list_prepend(invited_dev_list, device);
-
-                               mdgd_group_request_keepalive(device->uuid, device->group_name,
-                                                                                        device->host);
-
-                               mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-                               mdgd_check_null_ret("mdgd_ctx", mdgd_ctx);
-
-                               if (mdgd_ctx->monitor_started == true) {
-                                       notify_device_monitor_result(device->uuid, device->group_name,
-                                                                                                "Added");
-
-                                       mdgd_group_start_invited_device_monitor(1);
-                               }
-
-                       } else {
-                               g_free(device->uuid);
-                               g_free(device->group_name);
-                               g_free(device);
-                       }
-               }
-       } else if (OC_STACK_DUPLICATE_UUID == ret) {
-               /* Replace error code for CAPI */
-               ret = MDGD_ERROR_ALREADY_REGISTERED;
-       } else if (OC_STACK_INVALID_PARAM == ret) {
-               /* Replace error code for CAPI */
-               ret = MDGD_ERROR_OPERATION_FAILED;
+               if (MDGD_ERROR_NONE == ret)
+                       mdgd_db_device_insert(group_name, uuid);
        }
 
-       mdgd_group_free_invite_info();
-
-       notify_group_device_invite_result(ret);
-}
-
-
-#define FULL_PERMISSION 31
-
-int _is_pairwise_uuid(char *uuid)
-{
-       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-       mdgd_check_null_ret_error("mdgd_ctx", mdgd_ctx, -1);
-
-       GList *iter = NULL;
-
-       iter = mdgd_ctx->pairwise_list;
-       while (iter != NULL) {
-               char *pairwise_uuid = (char *)iter->data;
-
-               if (!strncmp(pairwise_uuid, uuid, strlen(uuid)))
-                       return 0;
-
-               iter = g_list_next(iter);
-       }
+       LOG_END();
 
-       return -1;
+       return ret;
 }
 
-int mdgd_group_add_device_in_group(const char *group_name, const char *uuid)
+void mdgd_group_notify_invite_device(int result)
 {
-       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-       mdgd_check_null_ret_error("mdgd_ctx", mdgd_ctx, -1);
-
-       GList *iter = NULL;
-
-       iter = mdgd_ctx->grp_list;
-       while (iter != NULL) {
-               mdgd_grp_t *group = (mdgd_grp_t *)iter->data;
-
-               if (!strncmp(group_name, group->name, strlen(group->name))) {
-                       GList *device_iter = group->device_list;
-                       while (device_iter != NULL) {
-                               char *device_uuid = (char *)device_iter->data;
-                               if (!strncmp(device_uuid, uuid, strlen(device_uuid)))
-                                       return -1;
-
-                               device_iter = g_list_next(device_iter);
-                       }
-
-                       group->device_list = g_list_append(group->device_list, strdup(uuid));
-
-                       __print_groups_information();
-                       return 0;
-               }
+       LOG_BEGIN();
 
-               iter = g_list_next(iter);
-       }
+       GVariant *dummy = mdgd_create_variant_dummy();
+       mdgd_gdbus_emit_event(MDGD_EVENT_INVITE_DEVICE_FINISH, result, dummy);
 
-       return -1;
+       LOG_END();
 }
 
-//Join to device in group (async)
-int mdgd_group_invite(const char *group_name, const char *uuid, const char *pin)
+int mdgd_group_eject_device(const char *group_name, const char *uuid)
 {
        int ret = MDGD_ERROR_NONE;
 
        LOG_BEGIN();
+
        mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
        mdgd_check_null_ret_error("mdgd_ctx", mdgd_ctx, MDGD_ERROR_INVALID_PARAMETER);
 
-#ifdef INVITE_EJECT_DEVICE_BY_MULTI_RUN
-       /*
-        * 1. Perform MOT
-        * 2. Discover Mowned devices
-        * 3. Pairwise
-        */
-       LOG_DEBUG("group name : %s, uuid : %s", group_name, uuid);
-
-       if (_is_pairwise_uuid(uuid) < 0) {
-
-               ret = agent_mot(uuid, pin);
-               if (ret == MDGD_ERROR_NONE) {
-                       group_invite_info = g_try_malloc0(sizeof(mdgd_group_invite_info_t));
-                       group_invite_info->uuid_dev1 = g_strdup(mdgd_ctx->device_uuid);
-                       group_invite_info->uuid_dev2 = g_strdup(uuid);
-                       group_invite_info->pin = g_strdup(pin);
-                       group_invite_info->uri_1 = g_strdup("/comp/data/1");
-                       group_invite_info->rt_1 = g_strdup("core.comp.data");
-                       group_invite_info->interface_1 = g_strdup("oic.if.baseline");
-                       group_invite_info->permission_1 = FULL_PERMISSION;
-                       group_invite_info->uri_2 = g_strdup("/comp/data/1");
-                       group_invite_info->rt_2 = g_strdup("core.comp.data");
-                       group_invite_info->interface_2 = g_strdup("oic.if.baseline");
-                       group_invite_info->permission_2 = FULL_PERMISSION;
-               }
+       if (mdgd_db_check_device_exist_in_group(group_name, uuid) == false) {
+               ret = MDGD_ERROR_NO_DATA;
+       } else {
+               mdgd_db_device_delete(group_name, uuid);
+               if (mdgd_db_check_device_exist(uuid) == false)
+                       ret = agent_unpair(mdgd_ctx->device_uuid, uuid);
        }
 
-#else
-       group_invite_info = g_try_malloc0(sizeof(mdgd_group_invite_info_t));
-       mdgd_check_null_ret_error("group_invite_info", group_invite_info,
-               MDGD_ERROR_OUT_OF_MEMORY);
-       group_invite_info->uuid_dev2 = g_strdup(uuid);
-       group_invite_info->group_name = g_strdup(group_name);
-
-       ret = agent_pair(pin, mdgd_ctx->device_uuid, uuid, "/comp/data/1",
-                                        "core.comp.data", "oic.if.baseline", FULL_PERMISSION, uuid,
-                                        mdgd_ctx->device_uuid, "/comp/data/1", "core.comp.data",
-                                        "oic.if.baseline", FULL_PERMISSION);
-#endif
-
-       if (mdgd_group_add_device_in_group(group_name, uuid) < 0)
-               return MDGD_ERROR_NONE;
-
        LOG_END();
 
        return ret;
 }
 
-void mdgd_group_notify_group_dismiss(int result)
+void mdgd_group_notify_eject_device(int result)
 {
-       LOG_DEBUG("Notify group eject %d", result);
+       LOG_BEGIN();
 
-       /* Replace error code for CAPI */
-       if (OC_STACK_INVALID_PARAM == result)
-               result = MDGD_ERROR_ALREADY_REGISTERED;
+       GVariant *dummy = mdgd_create_variant_dummy();
+       mdgd_gdbus_emit_event(MDGD_EVENT_EJECT_DEVICE_FINISH, result, dummy);
 
-       notify_group_device_eject_result(result);
+       LOG_END();
 }
 
-int mdgd_group_remove_device_in_group(char *group_name, char *uuid)
+int mdgd_group_regist_channel(char *channel_id, char *sender)
 {
+       int ret = MDGD_ERROR_NONE;
        mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-       mdgd_check_null_ret_error("mdgd_ctx", mdgd_ctx, -1);
-
-       GList *iter = NULL;
-
-       /* Find the device at every group in list */
-       iter = mdgd_ctx->grp_list;
-       while (iter != NULL) {
-               mdgd_grp_t *group = (mdgd_grp_t *)iter->data;
-               if (!strncmp(group_name, group->name, strlen(group_name))) {
-                       GList *device_iter = group->device_list;
-
-                       device_iter = g_list_remove_all(device_iter, uuid);
-               }
-
-               iter = g_list_next(iter);
-       }
-       mdgd_db_device_delete(uuid, group_name);
-       __print_groups_information();
-
-       return 0;
-}
-
-//dismiss from group (async)
-int mdgd_group_eject(const gchar *group_name, gchar *uuid_dev1, const gchar *uuid_dev2)
-{
-       int ret;
 
        LOG_BEGIN();
- #ifdef INVITE_EJECT_DEVICE_BY_MULTI_RUN
-       ret = agent_remove_mo_at_device(uuid);
-       /*
-        * 1. Unpair device
-        * 2. Remove MOT at device #2
-        * 3. Remove cred at local (device #1)
-        * */
-#else
-       ret = agent_unpair(uuid_dev1, uuid_dev2);
-#endif
-       mdgd_group_remove_device_in_group(group_name, uuid_dev2);
+
+       char *value = g_hash_table_lookup(mdgd_ctx->channel, channel_id);
+       if (value == NULL)
+               g_hash_table_insert(mdgd_ctx->channel, (gpointer)g_strdup(channel_id), (gpointer)g_strdup(sender));
+       else
+               ret = MDGD_ERROR_ALREADY_REGISTERED;
 
        LOG_END();
 
        return ret;
 }
 
-int mdgd_group_pair_resource(char* target1, char *subject1, char *uri1,
-       char *rt1, char *interface1, int permission1, char* target2, char *subject2,
-       char *uri2, char *rt2, char *interface2, int permission2)
+gboolean __foreach_hash_table(gpointer key, gpointer value, gpointer user_data)
 {
-       int ret;
-
-       LOG_BEGIN();
-
-       ret = agent_resources_pairwise(target1, subject1, uri1, rt1, interface1, permission1,
-                                                target2, subject2, uri2, rt2, interface2, permission2);
-
-       LOG_END();
-
-       return ret;
+       char *sender = (char *)user_data;
+       if (g_strcmp0(sender, value) == 0)
+               return TRUE;
+       else
+               return FALSE;
 }
 
-int mdgd_group_unpair_resource(gchar *uuid_dev1, gchar *uuid_dev2)
+int mdgd_group_unregist_channel(char *channel_id, char *sender)
 {
-       int ret;
+       int ret = MDGD_ERROR_NONE;
+       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
 
        LOG_BEGIN();
 
-       ret = agent_unlink_resources(uuid_dev1, uuid_dev2);
+       if (channel_id == NULL) {
+               int removed_count;
+               removed_count = g_hash_table_foreach_remove(mdgd_ctx->channel,
+                                                               __foreach_hash_table, sender);
+               LOG_DEBUG("removed channel count is %d", removed_count);
+       } else {
+               char *value = g_hash_table_lookup(mdgd_ctx->channel, channel_id);
+               if (value != NULL)
+                       g_hash_table_remove(mdgd_ctx->channel, channel_id);
+               else
+                       ret = MDGD_ERROR_NO_DATA;
+       }
 
        LOG_END();
 
@@ -909,7 +305,7 @@ int mdgd_group_send_data(gchar *uuid_dev, gchar *addr, int port,
        cmd->command = MDGD_REQ_SEND_DATA;
        cmd->uuid = g_strdup(uuid_dev);
 
-       cmd->host = _addr2host(addr, port);
+       cmd->host = mdgd_addr2host(addr, port, true);
 
 #ifdef SUPPORT_BASE64_ENCODING
        cmd->data = g_try_malloc0(len + 1);
@@ -948,270 +344,20 @@ int mdgd_group_send_data(gchar *uuid_dev, gchar *addr, int port,
        return ret;
 }
 
-int  mdgd_group_add_new_mowned_device(mdgd_mot_device_t *device)
+void mdgd_group_notify_send_data(int result)
 {
-       GList *iter = NULL;
-       gboolean is_exist = FALSE;
-
        LOG_BEGIN();
 
-       iter = mowned_dev_list;
-       while (iter != NULL) {
-               mdgd_mot_device_t *temp = (mdgd_mot_device_t *)iter->data;
-
-               if (g_strcmp0(temp->device_id, device->device_id) == 0) {
-                       LOG_DEBUG("Device %s already exists in mowned device list",
-                                         device->device_id);
-                       is_exist = TRUE;
-                       break;
-               }
-
-               iter = g_list_next(iter);
-       }
-
-       if (is_exist == FALSE) {
-               LOG_DEBUG("Add device with uuid %s to mowned device list",
-                                 device->device_id);
-               mowned_dev_list = g_list_append(mowned_dev_list, device);
-       }
+       GVariant *dummy = mdgd_create_variant_dummy();
+       mdgd_gdbus_emit_event(MDGD_EVENT_SEND_DATA_FINISH, result, dummy);
 
        LOG_END();
-
-       return is_exist;
 }
 
-GVariant *mdgd_group_get_mowned_devices()
-{
-       GVariantBuilder *builder;
-       GVariant *group_data;
-       GList *iter = NULL;
-
-       mdgd_remove_ip_info();
-       mdgd_make_ip_info();
-
-       builder = g_variant_builder_new(G_VARIANT_TYPE("aa{sv}"));
-
-       iter = mowned_dev_list;
-       while (iter != NULL) {
-               mdgd_mot_device_t *device = (mdgd_mot_device_t *)iter->data;
-
-               g_variant_builder_open(builder, G_VARIANT_TYPE_VARDICT);
-               g_variant_builder_add(builder, "{sv}", "DeviceID",
-                                                         g_variant_new_string(device->device_id));
-               g_variant_builder_add(builder, "{sv}", "Adapter",
-                                                         g_variant_new_int32(device->adapter));
-               g_variant_builder_add(builder, "{sv}", "Flags",
-                                                         g_variant_new_int32(device->flags));
-               g_variant_builder_add(builder, "{sv}", "Port",
-                                                         g_variant_new_uint16(device->port));
-               g_variant_builder_add(builder, "{sv}", "Address",
-                                                         g_variant_new_string(device->addr));
-               g_variant_builder_add(builder, "{sv}", "DeviceType",
-                                                         g_variant_new_uint16(mdgd_is_local_ip(device->addr)));
-               g_variant_builder_add(builder, "{sv}", "Ifindex",
-                                                         g_variant_new_int32(device->ifindex));
-               g_variant_builder_add(builder, "{sv}", "RouteData",
-                                                         g_variant_new_string(device->route_data));
-               g_variant_builder_add(builder, "{sv}", "ConnType",
-                                                         g_variant_new_int32(device->conn_type));
-               g_variant_builder_add(builder, "{sv}", "SecurePort",
-                                                         g_variant_new_uint16(device->secure_port));
-               g_variant_builder_add(builder, "{sv}", "TcpPort",
-                                                         g_variant_new_uint16(device->tcp_port));
-               g_variant_builder_add(builder, "{sv}", "SecVer",
-                                                         g_variant_new_string(device->sec_ver));
-               g_variant_builder_add(builder, "{sv}", "DeviceStatus",
-                                                         g_variant_new_int32(device->dev_status));
-               g_variant_builder_add(builder, "{sv}", "ModelName",
-                                                         g_variant_new_string(device->model_name));
-               g_variant_builder_add(builder, "{sv}", "DeviceName",
-                                                         g_variant_new_string(device->device_name));
-               g_variant_builder_add(builder, "{sv}", "PlatformVer",
-                                                         g_variant_new_string(device->platform_ver));
-               g_variant_builder_add(builder, "{sv}", "VendorID",
-                                                         g_variant_new_string(device->vendor_id));
-               g_variant_builder_add(builder, "{sv}", "Profile",
-                                                         g_variant_new_string(device->profile));
-
-               g_variant_builder_close(builder);
-
-               iter = g_list_next(iter);
-       }
-
-       group_data = g_variant_builder_end(builder);
-       g_variant_builder_unref(builder);
-
-       return group_data;
-}
-
-void mdgd_group_change_mowned_device(mdgd_mot_device_t *device)
-{
-       LOG_BEGIN();
-
-       my_device = device;
-
-       LOG_END();
-}
-
-GVariant *mdgd_group_get_my_mowned_devices()
-{
-       GVariantBuilder *builder;
-       GVariant *group_data;
-
-       mdgd_remove_ip_info();
-       mdgd_make_ip_info();
-
-       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
-
-       if (my_device != NULL) {
-               g_variant_builder_add(builder, "{sv}", "DeviceID",
-                                                         g_variant_new_string(my_device->device_id));
-               g_variant_builder_add(builder, "{sv}", "Adapter",
-                                                         g_variant_new_int32(my_device->adapter));
-               g_variant_builder_add(builder, "{sv}", "Flags",
-                                                         g_variant_new_int32(my_device->flags));
-               g_variant_builder_add(builder, "{sv}", "Port",
-                                                         g_variant_new_uint16(my_device->port));
-               g_variant_builder_add(builder, "{sv}", "Address",
-                                                         g_variant_new_string(my_device->addr));
-               g_variant_builder_add(builder, "{sv}", "DeviceType",
-                                                         g_variant_new_uint16(mdgd_is_local_ip(my_device->addr)));
-               g_variant_builder_add(builder, "{sv}", "Ifindex",
-                                                         g_variant_new_int32(my_device->ifindex));
-               g_variant_builder_add(builder, "{sv}", "RouteData",
-                                                         g_variant_new_string(my_device->route_data));
-               g_variant_builder_add(builder, "{sv}", "ConnType",
-                                                         g_variant_new_int32(my_device->conn_type));
-               g_variant_builder_add(builder, "{sv}", "SecurePort",
-                                                         g_variant_new_uint16(my_device->secure_port));
-               g_variant_builder_add(builder, "{sv}", "TcpPort",
-                                                         g_variant_new_uint16(my_device->tcp_port));
-               g_variant_builder_add(builder, "{sv}", "SecVer",
-                                                         g_variant_new_string(my_device->sec_ver));
-               g_variant_builder_add(builder, "{sv}", "DeviceStatus",
-                                                         g_variant_new_int32(my_device->dev_status));
-               g_variant_builder_add(builder, "{sv}", "ModelName",
-                                                         g_variant_new_string(my_device->model_name));
-               g_variant_builder_add(builder, "{sv}", "DeviceName",
-                                                         g_variant_new_string(my_device->device_name));
-               g_variant_builder_add(builder, "{sv}", "PlatformVer",
-                                                         g_variant_new_string(my_device->platform_ver));
-               g_variant_builder_add(builder, "{sv}", "VendorID",
-                                                         g_variant_new_string(my_device->vendor_id));
-               g_variant_builder_add(builder, "{sv}", "Profile",
-                                                         g_variant_new_string(my_device->profile));
-       }
-
-       group_data = g_variant_builder_end(builder);
-       g_variant_builder_unref(builder);
-
-       return group_data;
-}
-
-int mdgd_group_get_mowned_device_count()
-{
-       if (mowned_dev_list)
-               return g_list_length(mowned_dev_list);
-
-       return 0;
-}
-
-void mdgd_group_notify_mowned_device_find_done()
-{
-       GVariant *device_data;
-       int count = g_list_length(mowned_dev_list);
-
-       LOG_BEGIN();
-
-       device_data = mdgd_group_get_mowned_devices();
-
-       notify_mowned_device_found(count, device_data);
-
-       LOG_END();
-}
-
-int mdgd_group_find_mowned_devices(int timeout)
-{
-       int ret;
-
-       LOG_BEGIN();
-
-       /* list freeing */
-       g_list_free_full(mowned_dev_list, _mot_enb_dev_list_free_func);
-       mowned_dev_list = NULL;
-
-       ret = agent_find_mowned_devices(timeout);
-       if (ret != MDGD_ERROR_NONE) {
-               LOG_ERR("Failed to find mowned devices : %s",
-                                mdgd_log_get_error_string(ret));
-       }
-
-       LOG_END();
-
-       return ret;
-}
-
-/* Join to remote device group */
-
-int mdgd_group_join()
-{
-       int ret = MDGD_ERROR_NONE;
-
-       LOG_BEGIN();
-
-
-       LOG_END();
-
-       return ret;
-}
-
-int mdgd_group_leave_from(/* callback */) //leave from certain remote group (Async)
-{
-       int ret = MDGD_ERROR_NONE;
-       return ret;
-}
-
-/* Called when daemon is end. */
-int mdgd_group_deinitialize()
+int mdgd_group_request_create_group(char *uuid,
+       char *group_name)
 {
        int ret = MDGD_ERROR_NONE;
-       return ret;
-}
-
-int mdgd_group_get_group_name(mdgd_group_t *handle, char **name)
-{
-       int ret = MDGD_ERROR_NONE;
-       NOTUSED(handle);
-       NOTUSED(name);
-       return ret;
-}
-
-int mdgd_group_get_group_type(mdgd_group_t *handle, int *type)
-{
-       int ret = MDGD_ERROR_NONE;
-       NOTUSED(handle);
-       NOTUSED(type);
-       return ret;
-}
-
-int mdgd_group_get_group_device_type(mdgd_group_t *handle)
-{
-       int ret = MDGD_ERROR_NONE;
-       NOTUSED(handle);
-       return ret;
-}
-
-int mdgd_group_get_group_device_id(mdgd_group_t *handle)
-{
-       int ret = MDGD_ERROR_NONE;
-       NOTUSED(handle);
-       return ret;
-}
-
-int mdgd_group_request_create_group(char *uuid, char *group_name)
-{
-       int ret = MDGD_ERROR_NONE;
-       mdgd_mot_device_t *device;
 
        LOG_ERR("[Request Create Group] %s", group_name);
        LOG_ERR("[Request Create Group] to %s", uuid);
@@ -1221,29 +367,23 @@ int mdgd_group_request_create_group(char *uuid, char *group_name)
        cmd->uuid = g_strdup(uuid);
        cmd->arg1 = g_strdup(group_name);
 
-       device = mdgd_group_check_device_in_mot_enb_dev_list(uuid);
-       if (device) {
-               cmd->host = _addr2host(device->addr, device->secure_port);
-               ret = mdgd_iot_send_data(MDGD_RESOURCE_TYPE_DATA, 5, cmd);
-               if (ret != MDGD_ERROR_NONE) {
-                       LOG_ERR("Failed to send data : %s",
-                                       mdgd_log_get_error_string(ret));
-               }
-       } else {
-               ret = mdgd_iot_discovery_resource(MDGD_RESOURCE_TYPE_DATA, 5, cmd);
-               if (ret != MDGD_ERROR_NONE) {
-                       LOG_ERR("Failed to discover resource : %s",
-                                       mdgd_log_get_error_string(ret));
-               }
+       LOG_DEBUG("UUID %s host %s", cmd->uuid, cmd->host);
+
+       ret = mdgd_iot_send_data(MDGD_RESOURCE_TYPE_DATA, 3, cmd);
+       if (ret != MDGD_ERROR_NONE) {
+               LOG_ERR("Failed to send data : %s",
+                               mdgd_log_get_error_string(ret));
        }
 
+       LOG_END();
+
        return ret;
 }
 
-int mdgd_group_request_invite(char *uuid, char *group_name, char *target_uuid, char *PIN)
+int mdgd_group_request_invite(char *uuid,
+       char *group_name, char *target_uuid, char *PIN)
 {
        int ret = MDGD_ERROR_NONE;
-       mdgd_mot_device_t *device;
 
        LOG_ERR("[Request Invite] %s, %s, %s", group_name, target_uuid, PIN);
        LOG_ERR("[Request Invite] to %s", uuid);
@@ -1255,30 +395,24 @@ int mdgd_group_request_invite(char *uuid, char *group_name, char *target_uuid, c
        cmd->arg2 = g_strdup(target_uuid);
        cmd->arg3 = g_strdup(PIN);
 
-       device = mdgd_group_check_device_in_mot_enb_dev_list(uuid);
-       if (device) {
-               cmd->host = _addr2host(device->addr, device->secure_port);
-               ret = mdgd_iot_send_data(MDGD_RESOURCE_TYPE_DATA, 5, cmd);
-               if (ret != MDGD_ERROR_NONE) {
-                       LOG_ERR("Failed to send data : %s",
-                                       mdgd_log_get_error_string(ret));
-               }
-       } else {
-               ret = mdgd_iot_discovery_resource(MDGD_RESOURCE_TYPE_DATA, 5, cmd);
-               if (ret != MDGD_ERROR_NONE) {
-                       LOG_ERR("Failed to discover resource : %s",
-                                       mdgd_log_get_error_string(ret));
-               }
+       LOG_DEBUG("UUID %s host %s", cmd->uuid, cmd->host);
+
+       ret = mdgd_iot_send_data(MDGD_RESOURCE_TYPE_DATA, 3, cmd);
+       if (ret != MDGD_ERROR_NONE) {
+               LOG_ERR("Failed to send data : %s",
+                               mdgd_log_get_error_string(ret));
        }
 
+       LOG_END();
+
        return ret;
 }
 
 
-int mdgd_group_request_eject(char *uuid, char *group_name, char *target_uuid)
+int mdgd_group_request_eject(char *uuid,
+       char *group_name, char *target_uuid)
 {
        int ret = MDGD_ERROR_NONE;
-       mdgd_mot_device_t *device;
 
        LOG_ERR("[Request Eject] %s, %s", group_name, target_uuid);
        LOG_ERR("[Request Eject] to %s", uuid);
@@ -1289,151 +423,15 @@ int mdgd_group_request_eject(char *uuid, char *group_name, char *target_uuid)
        cmd->arg1 = g_strdup(group_name);
        cmd->arg2 = g_strdup(target_uuid);
 
-       device = mdgd_group_check_device_in_mot_enb_dev_list(uuid);
-       if (device) {
-               cmd->host = _addr2host(device->addr, device->secure_port);
-               ret = mdgd_iot_send_data(MDGD_RESOURCE_TYPE_DATA, 5, cmd);
-               if (ret != MDGD_ERROR_NONE) {
-                       LOG_ERR("Failed to send data : %s",
-                                       mdgd_log_get_error_string(ret));
-               }
-       } else {
-               ret = mdgd_iot_discovery_resource(MDGD_RESOURCE_TYPE_DATA, 5, cmd);
-               if (ret != MDGD_ERROR_NONE) {
-                       LOG_ERR("Failed to discover resource : %s",
-                                       mdgd_log_get_error_string(ret));
-               }
-       }
-
-       return ret;
-
-}
-
-
-int mdgd_group_request_delete_group(char *uuid, char *group_name)
-{
-       int ret = MDGD_ERROR_NONE;
-       mdgd_mot_device_t *device;
-
-       LOG_ERR("[Request Delete Group] %s", group_name);
-       LOG_ERR("[Request Delete Group] to %s", uuid);
-
-       mdgd_command_t *cmd = g_new0(mdgd_command_t, 1);
-       cmd->command = MDGD_REQ_DELETE_GROUP;
-       cmd->uuid = g_strdup(uuid);
-       cmd->arg1 = g_strdup(group_name);
-
-       device = mdgd_group_check_device_in_mot_enb_dev_list(uuid);
-       if (device) {
-               cmd->host = _addr2host(device->addr, device->secure_port);
-               ret = mdgd_iot_send_data(MDGD_RESOURCE_TYPE_DATA, 5, cmd);
-               if (ret != MDGD_ERROR_NONE) {
-                       LOG_ERR("Failed to send data : %s",
-                                       mdgd_log_get_error_string(ret));
-               }
-       } else {
-               ret = mdgd_iot_discovery_resource(MDGD_RESOURCE_TYPE_DATA, 5, cmd);
-               if (ret != MDGD_ERROR_NONE) {
-                       LOG_ERR("Failed to discover resource : %s",
-                                       mdgd_log_get_error_string(ret));
-               }
-       }
-
-       return ret;
-}
-
-static gboolean __send_keepalive_messages(gpointer user_data)
-{
-       GList *iter = NULL;
-
-       iter = invited_dev_list;
-       while (iter != NULL) {
-               mdgd_invited_device_t *temp = (mdgd_invited_device_t *)iter->data;
-
-               mdgd_group_request_keepalive(temp->uuid, temp->group_name, temp->host);
-
-               iter = g_list_next(iter);
-       }
-
-       return TRUE;
-}
-
-static gboolean __check_invited_device_status(gpointer user_data)
-{
-       int *t_id = (int *)user_data;
-       GList *iter = NULL;
-
-       g_source_remove(*t_id);
-       *t_id = 0;
-
-       iter = invited_dev_list;
-       while (iter != NULL) {
-               mdgd_invited_device_t *temp = (mdgd_invited_device_t *)iter->data;
-
-               iter = g_list_next(iter);
-
-               LOG_DEBUG("uuid %s count %d", temp->uuid, temp->count);
-
-               if (temp->count == 0) {
-                       LOG_DEBUG("Remove device with uuid %s", temp->uuid);
-                       invited_dev_list = g_list_remove(invited_dev_list, temp);
-
-                       notify_device_monitor_result(temp->uuid, temp->group_name,
-                                                                                "Removed");
-
-                       g_free(temp->host);
-                       g_free(temp->uuid);
-                       g_free(temp->group_name);
-                       g_free(temp);
-               } else {
-                       temp->count = 0;
-               }
-       }
-
-       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-       mdgd_check_null_ret_error("mdgd_ctx", mdgd_ctx, FALSE);
-
-       if (mdgd_ctx->monitor_started == false) {
-               g_free(t_id);
-               return FALSE;
-       }
-
-       if (g_list_length(invited_dev_list) == 0) {
-               g_free(t_id);
-               return FALSE;
-       }
-
-       *t_id = g_timeout_add(KEEPALIVE_MESSAGE_TIMEOUT, __send_keepalive_messages,
-                                                 NULL);
-
-       return TRUE;
-}
-
-int mdgd_group_start_invited_device_monitor(int start)
-{
-       int *t_id;
+       LOG_DEBUG("UUID %s host %s", cmd->uuid, cmd->host);
 
-       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-       mdgd_check_null_ret_error("mdgd_ctx", mdgd_ctx,
-                                                         MDGD_ERROR_INVALID_PARAMETER);
-
-       if (start) { /* Start Monitor */
-               mdgd_ctx->monitor_started = true;
-               LOG_DEBUG("Start invited device monitor");
-       } else { /* Stop Monitor */
-               mdgd_ctx->monitor_started = false;
-               LOG_DEBUG("Stop invited device monitor");
-               return MDGD_ERROR_NONE;
+       ret = mdgd_iot_send_data(MDGD_RESOURCE_TYPE_DATA, 3, cmd);
+       if (ret != MDGD_ERROR_NONE) {
+               LOG_ERR("Failed to send data : %s",
+                               mdgd_log_get_error_string(ret));
        }
 
-       t_id = g_try_malloc0(sizeof(int));
-       mdgd_check_null_ret_error(t_id, NULL, MDGD_ERROR_OUT_OF_MEMORY);
-
-       *t_id = g_timeout_add(KEEPALIVE_MESSAGE_TIMEOUT, __send_keepalive_messages,
-                                                 NULL);
-
-       g_timeout_add(CHECK_DEVICE_STATUS_TIMEOUT, __check_invited_device_status,
-                                                 t_id);
+       LOG_END();
 
-       return MDGD_ERROR_NONE;
+       return ret;
 }
old mode 100644 (file)
new mode 100755 (executable)
index 2abf585..b0bbc84
@@ -1098,10 +1098,6 @@ static gboolean _timeout_cb(gpointer data)
        } else if (cmd->resource_type == MDGD_RESOURCE_TYPE_DEVICE) {
                if (!strncmp(cmd->arg1, "disc_mot_enb_devs_done", strlen(cmd->arg1))) {
                        LOG_DEBUG("Device Find Done. notified");
-<<<<<<< HEAD
-                       mdgd_group_notify_mot_enable_device_done();
-                       notify_device_find_finish(ret);
-=======
                        if (mdgd_group_get_mot_device_count() > 0)
                                ret = 0;
 
@@ -1114,7 +1110,6 @@ static gboolean _timeout_cb(gpointer data)
                                mdgd_group_notify_mot_enable_device_done();
                                notify_device_find_finish(ret);
                        }
->>>>>>> Add daemon recovery when daemon is reboot impl
                } else {
                        LOG_DEBUG("MOT Device Find Done. notified");
                        mdgd_group_notify_mowned_device_find_done();
diff --git a/src/mdg-manager/src/mdgd_iot_client.cpp b/src/mdg-manager/src/mdgd_iot_client.cpp
new file mode 100755 (executable)
index 0000000..317f398
--- /dev/null
@@ -0,0 +1,351 @@
+/*
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <tzplatform_config.h>
+
+#include <utlist.h>
+#include <base64.h>
+#include <sys/utsname.h>
+
+#include <octypes.h>
+#include <pmtypes.h>
+#include <pmutility.h>
+#include <securevirtualresourcetypes.h>
+
+#include <iotivity_config.h>
+#include <platform_features.h>
+#include <ocprovisioningmanager.h>
+#include <doxmresource.h>
+#include <system_info.h>
+#include <vconf.h>
+#include <system_settings.h>
+
+#include <mdgd_iot.h>
+#include <mdgd_group.h>
+#include <mdgd_gdbus.h>
+#include <mdgd_mot_agent.h>
+#include <mdgd_db.h>
+#include <map>
+
+#include "OCProvisioningManager.hpp"
+#include "OCPlatform.h"
+#include "OCApi.h"
+
+using namespace OC;
+using namespace std;
+
+void __get_group_information(const HeaderOptions& headerOptions,
+       const OCRepresentation& rep, const int eCode, void *user_data)
+{
+       int ret;
+
+       LOG_BEGIN();
+
+       try {
+               if (eCode == OC_STACK_OK || eCode == OC_STACK_RESOURCE_CREATED ||
+                       eCode == OC_STACK_RESOURCE_CHANGED) {
+                       mdgd_check_null_ret("user_data", user_data);
+                       mdgd_group_t *group = (mdgd_group_t *)user_data;
+                       std::map<std::string, AttributeValue> groups = rep.getValues();
+                       std::map<std::string, AttributeValue>::iterator iter;
+
+                       for (iter = groups.begin(); iter != groups.end(); ++iter) {
+
+                               std::string group_name = (*iter).first;
+                               group->group_name = g_strdup(group_name.c_str());
+                               LOG_DEBUG("Group Found : %s, Type : %d", group->group_name, group->type);
+
+                               mdgd_group_found(group);
+
+                               g_free(group->group_name);
+                               group->group_name = NULL;
+                       }
+               } else {
+                       LOG_ERR("__get_device_description Response error %d", eCode);
+               }
+       } catch(std::exception& e) {
+               LOG_ERR("Exception %s in on get", e.what());
+       }
+
+       LOG_END();
+}
+
+static bool _found_resource(std::shared_ptr<OCResource> resource,
+                                                       void *user_data)
+{
+       int ret;
+       char *resource_uri_path;
+       char *resource_host;
+       char *resource_type = NULL;
+       mdgd_group_type_e group_type;
+       std::string resourceURI;
+
+       LOG_BEGIN();
+
+       /* Check timeout error */
+       try {
+               if (resource) {
+                       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
+
+                       LOG_DEBUG("URI [%s], Host [%s], Device ID [%s]",
+                               resource->uri().c_str(), resource->host().c_str(), resource->sid().c_str());
+
+                       for(auto &resourceTypes : resource->getResourceTypes()) {
+                               LOG_DEBUG("Resource Type [%s]", resourceTypes.c_str());
+                               if (resource_type == NULL)
+                                       resource_type = g_strdup(resourceTypes.c_str());
+                       }
+
+                       if (g_strcmp0(resource_type, mdgd_resource_get_type(MDGD_RESOURCE_TYPE_GROUP)) == 0) {
+                               mdgd_group_t *group = (mdgd_group_t *)g_try_malloc0(sizeof(mdgd_group_t));
+                               group->device_id = g_strdup(resource->sid().c_str());
+                               group->host_addr = g_strdup(resource->host().c_str());
+                               if (g_strcmp0(resource->sid().c_str(), mdgd_ctx->device_uuid) != 0) {
+                                       group->type = MDGD_GROUP_TYPE_REMOTE;
+                               } else {
+                                       group->type = MDGD_GROUP_TYPE_LOCAL;
+                               }
+
+                               resource->get(QueryParamsMap(), std::bind(&__get_group_information,
+                                       std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, group));
+                       }
+               }
+               else {
+                       LOG_ERR("Resource is invalid");
+               }
+       }
+       catch(std::exception& e)
+       {
+               LOG_ERR("Exception in foundResource: %s", e.what());
+       }
+
+       LOG_END();
+
+       return TRUE;
+}
+
+int mdgd_iot_discovery_resource(mdgd_resource_type_e resource_type, int timeout,
+       void *user_data)
+{
+       int ret;
+       std::ostringstream requestURI;
+       mdgd_command_t *cmd = (mdgd_command_t *) user_data;
+
+       LOG_BEGIN();
+
+       try {
+               requestURI << OC_RSRVD_WELL_KNOWN_URI << "?rt=" <<
+                       mdgd_resource_get_type(resource_type);
+
+               auto found_cb = std::bind (&_found_resource, std::placeholders::_1,
+                                                                  cmd);
+
+               // timeout setting
+               if (cmd) {
+                       LOG_DEBUG("Querying for Resource host address  %s",
+                                         cmd->host ? cmd->host : "NULL");
+
+                       if (cmd->host)
+                               ret = OCPlatform::findResource(cmd->host, requestURI.str(),
+                                                                                          CT_ADAPTER_IP,
+                                                                                          found_cb);
+                       else
+                               ret = OCPlatform::findResource("", requestURI.str(),
+                                                                                          CT_ADAPTER_IP,
+                                                                                          found_cb);
+               }
+       } catch (OCException &e) {
+               LOG_ERR("Failed to find resource %s", e.what());
+               ret = e.code();
+       }
+
+       LOG_DEBUG("find resource : %s", get_error_message(ret));
+
+       LOG_END();
+
+       return ret;
+}
+
+void __get_device_description(const HeaderOptions& headerOptions,
+       const OCRepresentation& rep, const int eCode, void *user_data)
+{
+       int ret;
+
+       LOG_BEGIN();
+
+       try {
+               if (eCode == OC_STACK_OK || eCode == OC_STACK_RESOURCE_CREATED ||
+                       eCode == OC_STACK_RESOURCE_CHANGED) {
+                       mdgd_check_null_ret("user_data", user_data);
+                       mdgd_device_t *device = (mdgd_device_t *)user_data;
+                       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
+
+                       std::string modelName;
+                       std::string platformVer;
+                       std::string Profile;
+                       std::string deviceName;
+                       std::string vendorID;
+
+                       rep.getValue("model_name", modelName);
+                       rep.getValue("platform_ver", platformVer);
+                       rep.getValue("profile", Profile);
+                       rep.getValue("device_name", deviceName);
+                       rep.getValue("vendor_id", vendorID);
+
+                       device->model_name = g_strdup(modelName.c_str());
+                       device->platform_ver = g_strdup(platformVer.c_str());
+                       device->profile = g_strdup(Profile.c_str());
+                       device->device_name = g_strdup(deviceName.c_str());
+                       device->vendor_id = g_strdup(vendorID.c_str());
+
+                       LOG_DEBUG("Remote Device Found");
+                       device->type = MDGD_DEVICE_TYPE_REMOTE;
+                       /* Store device information in data structure */
+                       mdgd_group_found_device(device);
+               } else {
+                       LOG_ERR("__get_device_description Response error %d", eCode);
+               }
+       } catch(std::exception& e) {
+               LOG_ERR("Exception %s in on get", e.what());
+       }
+
+       LOG_END();
+}
+
+int mdgd_iot_get_device_description(mdgd_device_t *device)
+{
+       std::string uri_path;
+       std::vector<std::string> resource_types = {"core.comp.device"};
+       std::vector<std::string> ifaces = {DEFAULT_INTERFACE};
+       char *host_addr = NULL;
+
+       LOG_BEGIN();
+
+       uri_path =      std::string(mdgd_resource_get_uri_prefix(MDGD_RESOURCE_TYPE_DEVICE));
+       host_addr = mdgd_addr2host(device->addr, device->port, false);
+
+       OCResource::Ptr device_resource = OCPlatform::constructResourceObject(std::string(host_addr),
+               uri_path, (OCConnectivityType)device->conn_type, false, resource_types, ifaces);
+
+       device_resource->get(QueryParamsMap(), std::bind (&__get_device_description, std::placeholders::_1,
+                                                          std::placeholders::_2, std::placeholders::_3, device));
+
+       LOG_END();
+}
+
+static void __send_data_finish(const HeaderOptions&,
+                                        const OCRepresentation& rep, const int eCode,
+                                        void *user_data)
+{
+       int ret = MDGD_ERROR_NONE;
+       mdgd_command_t *cmd = (mdgd_command_t *)user_data;
+
+       if (eCode < OC_STACK_OK && eCode > OC_STACK_RESOURCE_CHANGED) {
+               LOG_ERR("__send_data_result : %d", eCode);
+               ret = MDGD_ERROR_IOTIVITY;
+       }
+
+       mdgd_group_notify_send_data(ret);
+
+       //__clean_user_data(cmd);
+}
+
+int mdgd_iot_send_data(mdgd_resource_type_e resource_type, int timeout,
+                                          mdgd_command_t *cmd)
+{
+       int ret;
+       OCResource::Ptr resource;
+       std::string requestURI;
+       std::vector<std::string> ifaces = {DEFAULT_INTERFACE};
+       std::vector<std::string> resource_types;
+       resource_types = {mdgd_resource_get_type(resource_type)};
+
+       try {
+               requestURI = std::string(mdgd_resource_get_uri_prefix(resource_type));
+
+               LOG_DEBUG("Request URI %s", requestURI.c_str());
+
+               resource = OCPlatform::constructResourceObject(std::string(cmd->host),
+                                                          requestURI, CT_ADAPTER_IP, false,
+                                                          resource_types, ifaces);
+               if (!resource) {
+                       LOG_ERR("Failed to construct resource");
+                       return -1;
+               }
+
+               OCRepresentation rep;
+               rep.setValue("CMD", cmd->command);
+
+               mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
+               rep.setValue("device_id", std::string(mdgd_ctx->device_uuid));
+
+#ifdef SUPPORT_BASE64_ENCODING
+               uint32_t outSize = 0;
+               size_t b64BufSize;
+               char *b64Buf;
+#endif
+               switch (cmd->command) {
+               case MDGD_REQ_SEND_DATA:
+#ifdef SUPPORT_BASE64_ENCODING
+                       b64BufSize = B64ENCODE_OUT_SAFESIZE((cmd->data_len + 1));
+                       b64Buf = (char *) g_try_malloc0(b64BufSize + 1);
+                       if (NULL == b64Buf) {
+                               mdgd_clean_user_data(cmd);
+                               return TRUE;
+                       }
+                       b64Encode(cmd->data, cmd->data_len,
+                                         b64Buf, b64BufSize, &outSize);
+                       rep.setValue("data", std::string(b64Buf));
+                       LOG_DEBUG("b64BufSize = %d outSize = %d b64Buf = %s",
+                                         b64BufSize, outSize, b64Buf);
+                       g_free(b64Buf);
+#else
+                       rep.setValue("data", std::string(cmd->arg1));
+#endif
+                       break;
+               case MDGD_REQ_CREATE_GROUP:
+               case MDGD_REQ_DELETE_GROUP:
+                       rep.setValue("name", std::string(cmd->arg1));
+                       break;
+               case MDGD_REQ_INVITE_DEVICE:
+                       rep.setValue("name", std::string(cmd->arg1));
+                       rep.setValue("id", std::string(cmd->arg2));
+                       rep.setValue("PIN", std::string(cmd->arg3));
+                       break;
+               case MDGD_REQ_EJECT_DEVICE:
+                       rep.setValue("name", std::string(cmd->arg1));
+                       rep.setValue("id", std::string(cmd->arg2));
+                       break;
+               default:
+                       LOG_ERR("Invalid command %d", cmd->command);
+                       return -1;
+               }
+
+               ret = resource->post(rep, QueryParamsMap(),
+                                                  std::bind (&__send_data_finish, std::placeholders::_1,
+                                                  std::placeholders::_2, std::placeholders::_3, cmd));
+
+       } catch (OCException &e) {
+               LOG_ERR("Failed to send data %s", e.what());
+               ret = e.code();
+       }
+
+       LOG_DEBUG("Send Data : %s", get_error_message(ret));
+
+       return ret;
+}
+
diff --git a/src/mdg-manager/src/mdgd_iot_server.cpp b/src/mdg-manager/src/mdgd_iot_server.cpp
new file mode 100755 (executable)
index 0000000..d1e8c09
--- /dev/null
@@ -0,0 +1,277 @@
+/*
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <tzplatform_config.h>
+
+#include <utlist.h>
+#include <base64.h>
+#include <sys/utsname.h>
+
+#include <octypes.h>
+#include <pmtypes.h>
+#include <pmutility.h>
+#include <securevirtualresourcetypes.h>
+
+#include <iotivity_config.h>
+#include <platform_features.h>
+#include <ocprovisioningmanager.h>
+#include <doxmresource.h>
+#include <system_info.h>
+#include <vconf.h>
+#include <system_settings.h>
+
+#include <mdgd_iot.h>
+#include <mdgd_group.h>
+#include <mdgd_gdbus.h>
+#include <mdgd_mot_agent.h>
+#include <mdgd_db.h>
+
+#include "OCProvisioningManager.hpp"
+#include "OCPlatform.h"
+#include "OCApi.h"
+
+using namespace OC;
+using namespace std;
+
+OCEntityHandlerResult _request_handler(std::shared_ptr<OCResourceRequest> request)
+{
+       LOG_BEGIN();
+
+       if (request) {
+               std::string requestType = request->getRequestType();
+               int requestFlag = request->getRequestHandlerFlag();
+               OCRepresentation requestRep = request->getResourceRepresentation();
+               ObservationInfo observationInfo = request->getObservationInfo();
+               std::string resourceUri = request->getResourceUri();
+
+               auto pResponse = std::make_shared<OC::OCResourceResponse>();
+               OCRepresentation responseRep;
+               mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
+
+               LOG_DEBUG("Received request from %s:%d",
+                         observationInfo.address.c_str(), observationInfo.port);
+               LOG_DEBUG("Request type %s, flag %x", requestType.c_str(), requestFlag);
+               for (auto& attribute : requestRep) {
+                       LOG_DEBUG("%s of type %d with value %s", attribute.attrname().c_str(),
+                                 attribute.type(),
+                                 attribute.getValueToString().c_str());
+               }
+
+               if (requestType == "GET") {
+                       if (strcmp(resourceUri.c_str(),
+                                       mdgd_resource_get_uri_prefix(MDGD_RESOURCE_TYPE_DEVICE)) == 0) {
+                               char *device_name = NULL;
+                               char *model_name = NULL;
+                               char *platform_ver = NULL;
+                               char *profile = NULL;
+                               char *vendor_id = NULL;
+
+                               system_settings_get_value_string(SYSTEM_SETTINGS_KEY_DEVICE_NAME, &device_name);
+                               system_info_get_platform_string(SYSTEM_INFO_MODEL_NAME, &model_name);
+                               system_info_get_platform_string(SYSTEM_INFO_PLATFORM_VERSION, &platform_ver);
+                               system_info_get_platform_string(SYSTEM_INFO_PROFILE, &profile);
+
+                               responseRep.setValue("model_name", std::string(model_name));
+                               responseRep.setValue("platform_ver", std::string(platform_ver));
+                               responseRep.setValue("profile", std::string(profile));
+                               responseRep.setValue("device_name", std::string(device_name));
+                               responseRep.setValue("vendor_id", std::string("6FFF"));
+                       } else if (strcmp(resourceUri.c_str(),
+                               mdgd_resource_get_uri_prefix(MDGD_RESOURCE_TYPE_GROUP)) == 0) {
+                               int group_count;
+                               char *groups[256];
+
+                               mdgd_db_get_groups(groups, &group_count);
+                               for (int i = 0; i < group_count; i++) {
+                                       LOG_DEBUG("%d. group name : %s", i+1, groups[i]);
+                                       responseRep.setValue(std::string(groups[i]), "NONE");
+                               }
+                       } else {
+                               LOG_ERR("Unknown Resource URI");
+                       }
+               } else if (requestType == "POST") { /* Request Operation */
+                       unsigned char *arg = NULL;
+                       int arg_len = 0;
+                       int result;
+                       int cmd;
+                       std::string requester_id, group_name, uuid, data;
+#ifdef SUPPORT_BASE64_ENCODING
+                       int payload_len;
+                       size_t outSize;
+                       uint8_t *out;
+                       uint32_t len = 0;
+#endif
+                       try {
+                               if (!requestRep.getValue("CMD", cmd))
+                                       LOG_ERR("CMD not found in representation");
+                               else
+                                       LOG_DEBUG("Command received %d", cmd);
+
+                               if (!requestRep.getValue("device_id", requester_id))
+                                       LOG_ERR("device_id not found in representation");
+                               else
+                                       LOG_DEBUG("device_id received %s", requester_id.c_str());
+
+                               switch(cmd) {
+                               case MDGD_REQ_SEND_DATA:
+                                       LOG_DEBUG("Receive Data");
+#ifdef SUPPORT_BASE64_ENCODING
+                                       if (!requestRep.getValue("data", data))
+                                               LOG_ERR("data not found");
+
+                                       /*
+                                        * BASE64 encoding/decoding system use '=' as padding byte
+                                        * But, query parameter does not allow use '=' character.Basically,
+                                        * So, in order to use BASE64 as query parameters, we need additioinal length param
+                                        * such as 'len=xx'
+                                        */
+                                       payload_len = strlen(data.c_str()); /* This data may be cliped the last padding 1~2 bytes ('='/'==') */
+
+                                       LOG_DEBUG("data = %s payload_len = %d", data.c_str(),
+                                                       payload_len);
+
+                                       outSize = B64DECODE_OUT_SAFESIZE(payload_len + 1);
+                                       out = (uint8_t *)g_try_malloc0(outSize);
+                                       if (NULL == out) {
+                                               LOG_ERR("Can't allocate memory for base64 str");
+                                               return OC_EH_OK;
+                                       }
+
+                                       if (B64_OK != b64Decode(data.c_str(), payload_len, out,
+                                                                               outSize, &len)) {
+                                               LOG_ERR("Base64 decoding failed.");
+                                               g_free(out);
+                                               return OC_EH_OK;
+                                       }
+
+                                       arg = (unsigned char *) g_try_malloc0(len);
+                                       memcpy(arg, out, len);
+                                       arg_len = len;
+
+                                       g_free(out);
+
+                                       LOG_DEBUG("Successfully decoded from base64");
+#else
+                                       if (!requestRep.getValue("data", data))
+                                               LOG_ERR("data not found");
+
+                                       LOG_DEBUG("Receive Data = %s", data.c_str());
+                                       arg = (unsigned char *) g_strdup(data.c_str());
+                                       arg_len = strlen(data.c_str());
+#endif
+                                       break;
+                               case MDGD_REQ_CREATE_GROUP:
+                                       LOG_DEBUG("Request create group");
+
+                                       result = MDGD_ERROR_NONE;
+
+                                       if (requestRep.getValue("name", group_name)) {
+                                               LOG_DEBUG("group_name : %s", group_name.c_str());
+                                               result = mdgd_group_create(group_name.c_str());
+                                               arg = (unsigned char *) g_strdup(group_name.c_str());
+                                               arg_len = strlen(group_name.c_str());
+                                       }
+                                       break;
+                               case MDGD_REQ_INVITE_DEVICE:
+                                       LOG_DEBUG("Request invite device");
+
+                                       if (!requestRep.getValue("name", group_name))
+                                               LOG_ERR("Group name not found");
+                                       if (!requestRep.getValue("id", uuid))
+                                               LOG_ERR("UUID not found");
+
+                                       LOG_DEBUG("group name : %s, UUID : %s", group_name.c_str(),
+                                                         uuid.c_str());
+
+                                       result = mdgd_group_invite_device(group_name.c_str(),
+                                               uuid.c_str(), "12341234");
+                                       arg = (unsigned char *) g_strdup(uuid.c_str());
+                                       arg_len = strlen(uuid.c_str());
+                                       break;
+                               case MDGD_REQ_EJECT_DEVICE:
+                                       LOG_DEBUG("Request eject device");
+
+                                       if (!requestRep.getValue("name", group_name))
+                                               LOG_ERR("Group name not found");
+                                       if (!requestRep.getValue("id", uuid))
+                                               LOG_ERR("UUID not found");
+
+                                       LOG_DEBUG("group name : %s Self UUID : %s Target UUID : %s",
+                                                         group_name.c_str(),mdgd_ctx->device_uuid,
+                                                         uuid.c_str());
+
+                                       result = mdgd_group_eject_device(group_name.c_str(),
+                                               uuid.c_str());
+                                       arg = (unsigned char *) g_strdup(uuid.c_str());
+                                       arg_len = strlen(uuid.c_str());
+                                       break;
+                               default:
+                                       LOG_ERR("Unknown request command %d", cmd);
+                                       break;
+                               }
+
+                               g_free(arg);
+                       } catch (std::exception& e) {
+                               LOG_ERR("Exceptioin occured %s", e.what());
+                       }
+               } else {
+                       LOG_ERR("Invalid Request Type");
+               }
+
+               pResponse->setRequestHandle(request->getRequestHandle());
+               pResponse->setResourceHandle(request->getResourceHandle());
+               pResponse->setErrorCode(200);
+               pResponse->setResponseResult(OC_EH_OK);
+               pResponse->setResourceRepresentation(responseRep, DEFAULT_INTERFACE);
+               LOG_DEBUG("Send response : %d", OC_EH_OK);
+               OCPlatform::sendResponse(pResponse);
+       }
+
+       LOG_END();
+
+       return OC_EH_OK;
+}
+
+int mdgd_iot_add_resource(mdgd_resource_type_e resource_type, const char *uri)
+{
+       OCResourceHandle resourceHandle;
+       std::string uri_path;
+
+       LOG_BEGIN();
+
+       uri_path =  std::string(mdgd_resource_get_uri_prefix(resource_type)) +
+                               std::string(uri);
+
+       LOG_DEBUG("[ADD] resource uri is %s", uri_path.c_str());
+
+       OCStackResult result = OCPlatform::registerResource(resourceHandle,
+                                                       uri_path,
+                                                       std::string(mdgd_resource_get_type(resource_type)),
+                                                       std::string(DEFAULT_INTERFACE), &_request_handler,
+                                                       mdgd_resource_get_policies(resource_type));
+       if (result != OC_STACK_OK) {
+               LOG_ERR("Failed to create resource");
+               return MDGD_ERROR_NONE;
+       } else {
+               LOG_DEBUG("Successfully created resource");
+       }
+
+       LOG_END();
+
+       return MDGD_ERROR_NONE;
+}
+
old mode 100644 (file)
new mode 100755 (executable)
index 71c75d0..7ab82d0
@@ -36,22 +36,14 @@ const char *mdgd_log_get_error_string(int result)
                return "MDGD_ERROR_NO_DATA";
        case MDGD_ERROR_OPERATION_FAILED:
                return "MDGD_ERROR_OPERATION_FAILED";
-       case MDGD_ERROR_ALREADY_REGISTERED:
-               return "MDGD_ERROR_ALREADY_REGISTERED";
        case MDGD_ERROR_IN_PROGRESS:
                return "MDGD_ERROR_IN_PROGRESS";
        case MDGD_ERROR_COMM_ERROR:
                return "MDGD_ERROR_COMM_ERROR";
-       case MDGD_ERROR_RX:
-               return "MDGD_ERROR_RX";
-       case MDGD_ERROR_TX:
-               return "MDGD_ERROR_TX";
        case MDGD_ERROR_PLUGIN_FAIL:
                return "MDGD_ERROR_PLUGIN_FAIL";
        case MDGD_ERROR_ALREADY_IN_PROGRESS:
                return "MDGD_ERROR_ALREADY_IN_PROGRESS";
-       case MDGD_ERROR_ALREADY_INITIALIZED:
-               return "MDG_ERROR_ALREADY_INITIALIZED";
        default:
                return "UNKNOWN";
        }
old mode 100644 (file)
new mode 100755 (executable)
index b2a5c75..a1ada95
  *
  */
 
-#include <mdgd_util.h>
-#include <mdgd_manager.h>
+#include <mdgd_context.h>
+#include <mdgd_group.h>
+#include <mdgd_resource.h>
+#include <mdgd_gdbus.h>
+#include <mdgd_db.h>
 #include <mdgd_mot_agent.h>
 
 int main(int argc, char *argv[])
@@ -53,7 +56,7 @@ int main(int argc, char *argv[])
                goto EXIT;
        }
 
-       //7. operation mgr initialize
+       //5. operation mgr initialize
        ret = agent_dbus_start();
        if (ret != MDGD_ERROR_NONE) {
                LOG_ERR("MOT agent interface initialize failed : %s",
@@ -62,15 +65,7 @@ int main(int argc, char *argv[])
        }
        agent_enable();
 
-       //example code
-       //6. group mgr initialize
-       ret = mdgd_group_initialize();
-       if (ret != MDGD_ERROR_NONE) {
-               LOG_ERR("COMP group initialize failed : %s", mdgd_log_get_error_string(ret));
-               goto EXIT;
-       }
-
-       //8. g main loop run
+       //7. g main loop run
        mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
        mdgd_check_null_ret_error("mdgd_ctx", mdgd_ctx, MDGD_ERROR_INVALID_PARAMETER);
 
@@ -78,19 +73,13 @@ int main(int argc, char *argv[])
        g_main_loop_run(mdgd_ctx->main_loop);
 
 EXIT:
-       //9. deinitialize phase
+       //8. deinitialize phase
        agent_disable();
        ret = agent_dbus_stop();
        if (ret != MDGD_ERROR_NONE)
                LOG_ERR("MOT agent interface deinitialize failed : %s",
                        mdgd_log_get_error_string(ret));
 
-       mdgd_remove_ip_info();
-
-       ret = mdgd_group_deinitialize();
-       if (ret != MDGD_ERROR_NONE)
-               LOG_ERR("COMP group deinitialize failed : %s", mdgd_log_get_error_string(ret));
-
        ret = mdgd_db_deinit();
        if (ret != MDGD_ERROR_NONE)
                LOG_ERR("COMP db deinitialize failed : %s", mdgd_log_get_error_string(ret));
old mode 100644 (file)
new mode 100755 (executable)
index 9d99d6a..b1aaf90
  * limitations under the License.
  *
  */
-#include <stdio.h>
-#include <stdlib.h>
-#include <error.h>
-
-#include <glib.h>
-#include <gio/gio.h>
-
-#include <mdgd_log.h>
-#include <mdgd_enum.h>
+#include <mdgd_context.h>
 #include <mdgd_group.h>
 #include <mdgd_mot_agent.h>
-#include <mdgd_gdbus_group.h>
 
 #define AGENT_SERVER_NAME "net.ma"
 #define AGENT_OBJECT_PATH "/net/ma"
@@ -45,12 +36,6 @@ struct agent_s {
 };
 struct agent_s agent; /**< MOT agent context */
 
-#ifdef INVITE_EJECT_DEVICE_BY_MULTI_RUN
-static bool mot_dev2 = false;
-static char *device_uuid1 = NULL;
-static char *device_uuid2 = NULL;
-#endif
-
 static int _check_agent_vaild(void)
 {
        if (NULL == agent.dbus_connection || NULL == agent.gproxy_agent_service) {
@@ -60,32 +45,6 @@ static int _check_agent_vaild(void)
        return MDGD_ERROR_NONE;
 }
 
-int agent_get_ownerid(char* deviceid)
-{
-       GVariant *variant = NULL;
-       int result = MDGD_ERROR_NONE;
-       GError *error = NULL;
-
-       result = _check_agent_vaild();
-       if (MDGD_ERROR_NONE != result)
-               return result;
-
-       variant = g_dbus_proxy_call_sync(agent.gproxy_agent_service, "get_ownerid",
-                       NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
-       if (variant) {
-               g_variant_get(variant, "(si)", deviceid, &result);
-               LOGD("get_ownerid status 0x%x", result);
-       } else if (error) {
-               LOGE("Failed DBus call [%s]", error->message);
-               g_error_free(error);
-               /* Restart mot-agent */
-               agent_enable();
-               result = MDGD_ERROR_IO_ERROR;
-       }
-
-       return result;
-}
-
 int agent_find_mot_enable_devices(int timeout)
 {
        GVariant *variant = NULL;
@@ -152,122 +111,8 @@ int agent_mot(char* uuid_str, char *pin)
                        g_variant_new("(ss)", uuid_str, pin), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
        if (variant) {
                g_variant_get(variant, "(i)", &result);
-               LOGD("mot status 0x%x", result);
-       } else if (error) {
-               LOGE("Failed DBus call [%s]", error->message);
-               g_error_free(error);
-               /* Restart mot-agent */
-               agent_enable();
-               result = MDGD_ERROR_IO_ERROR;
-       }
-
-       return result;
-}
-
-int agent_resources_pairwise(char* target1, char *subject1, char *uri1,
-       char *rt1, char *interface1, int permission1, char* target2, char *subject2, char *uri2,
-       char *rt2, char *interface2, int permission2)
-{
-       GVariant *variant = NULL;
-       int result = MDGD_ERROR_NONE;
-       GError *error = NULL;
-
-       result = _check_agent_vaild();
-       if (MDGD_ERROR_NONE != result)
-               return result;
-
-       variant = g_dbus_proxy_call_sync(agent.gproxy_agent_service, "pairwise",
-                       g_variant_new("(sssssisssssi)",
-                               target1, subject1, uri1, rt1, interface1, permission1,
-                               target2, subject2, uri2, rt2, interface2, permission2),
-                               G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               LOGD("pairwise status 0x%x", result);
-       } else if (error) {
-               LOGE("Failed DBus call [%s]", error->message);
-               g_error_free(error);
-               /* Restart mot-agent */
-               agent_enable();
-               result = MDGD_ERROR_IO_ERROR;
-       }
-
-       return result;
-}
-
-int agent_unlink_resources(char* uuid_str1, char *uuid_str2)
-{
-       GVariant *variant = NULL;
-       int result = MDGD_ERROR_NONE;
-       GError *error = NULL;
-
-       result = _check_agent_vaild();
-       if (MDGD_ERROR_NONE != result)
-               return result;
-
-       variant = g_dbus_proxy_call_sync(agent.gproxy_agent_service, "unlink",
-                       g_variant_new("(ss)", uuid_str1, uuid_str2), G_DBUS_CALL_FLAGS_NONE,
-                       -1, NULL, &error);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               LOGD("remove_subowner status 0x%x", result);
-       } else if (error) {
-               LOGE("Failed DBus call [%s]", error->message);
-               g_error_free(error);
-               /* Restart mot-agent */
-               agent_enable();
-               result = MDGD_ERROR_IO_ERROR;
-       }
-#ifdef INVITE_EJECT_DEVICE_BY_MULTI_RUN
-       if (result == MDGD_ERROR_NONE) {
-               device_uuid1 = g_strdup(uuid_str1);
-               device_uuid2 = g_strdup(uuid_str2);
-       }
-#endif
-       return result;
-}
-
-int agent_remove_subowner(char* uuid_str)
-{
-       GVariant *variant = NULL;
-       int result = MDGD_ERROR_NONE;
-       GError *error = NULL;
-
-       result = _check_agent_vaild();
-       if (MDGD_ERROR_NONE != result)
-               return result;
-
-       variant = g_dbus_proxy_call_sync(agent.gproxy_agent_service, "remove_subowner",
-                       g_variant_new("(s)", uuid_str), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               LOGD("remove_subowner status 0x%x", result);
-       } else if (error) {
-               LOGE("Failed DBus call [%s]", error->message);
-               g_error_free(error);
-               /* Restart mot-agent */
-               agent_enable();
-               result = MDGD_ERROR_IO_ERROR;
-       }
-
-       return result;
-}
-
-int agent_remove_subowned(char* uuid_str)
-{
-       GVariant *variant = NULL;
-       int result = MDGD_ERROR_NONE;
-       GError *error = NULL;
-
-       result = _check_agent_vaild();
-       if (MDGD_ERROR_NONE != result)
-               return result;
-
-       variant = g_dbus_proxy_call_sync(agent.gproxy_agent_service, "remove_device",
-                       g_variant_new("(s)", uuid_str), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
-       if (variant) {
-               g_variant_get(variant, "(i)", &result);
-               LOGD("remove_cred_cocal status 0x%x", result);
+               if (result != MDGD_ERROR_NONE)
+                       LOGD("mot status 0x%x", result);
        } else if (error) {
                LOGE("Failed DBus call [%s]", error->message);
                g_error_free(error);
@@ -458,166 +303,94 @@ static GDBusProxy *_get_proxy_service()
        return proxy;
 }
 
-#ifdef INVITE_EJECT_DEVICE_BY_MULTI_RUN
-static gboolean __perform_agent_pairwise(gpointer data)
-{
-       int ret;
-
-       mot_dev2 = false;
-
-       mdgd_group_invite_info_t *group_invite_info;
-
-       group_invite_info = mdgd_group_get_invite_info();
-       mdgd_check_null_ret_error("group_invite_info", group_invite_info, FALSE);
-
-       ret = agent_pairwise(group_invite_info->uuid_dev1, group_invite_info->uuid_dev2,
-                                                group_invite_info->uri_1, group_invite_info->rt_1,
-                                                group_invite_info->interface_1,
-                                                group_invite_info->permission_1,
-                                                group_invite_info->uuid_dev2, group_invite_info->uuid_dev1,
-                                                group_invite_info->uri_2, group_invite_info->rt_2,
-                                                group_invite_info->interface_2,
-                                                group_invite_info->permission_2);
-       if (ret != MDGD_ERROR_NONE)
-               mdgd_group_notify_group_invite(ret);
-
-       return FALSE;
-}
-
-static gboolean __perform_remove_mot_dev2(gpointer data)
-{
-       int ret;
-
-       ret = agent_remove_subowner(device_uuid2);
-       if (ret != MDGD_ERROR_NONE) {
-               mdgd_group_notify_group_dismiss(ret);
-               g_free(device_uuid1);
-               device_uuid1 = NULL;
-               g_free(device_uuid2);
-               device_uuid1 = NULL;
-       }
-
-       return FALSE;
-}
-
-static gboolean __perform_remove_cred_at_local(gpointer data)
-{
-       int ret;
-
-       ret = agent_remove_subowned(device_uuid2);
-       if (ret != MDGD_ERROR_NONE) {
-               mdgd_group_notify_group_dismiss(ret);
-               g_free(device_uuid1);
-               device_uuid1 = NULL;
-               g_free(device_uuid2);
-               device_uuid1 = NULL;
-       }
-       return FALSE;
-}
-#endif
-
 static void _agent_signal_handler(GDBusConnection *connection,
                const gchar *sender_name, const gchar *object_path, const gchar *interface_name,
                const gchar *signal_name, GVariant *parameters, gpointer userdata)
 {
        int result = MDGD_ERROR_NONE;
-       mdgd_check_null_ret("userdata", userdata);
 
-       LOG_DEBUG("signal received = %s", signal_name);
+       LOG_BEGIN();
 
-       if (0 == g_strcmp0(signal_name, "subowner_enabled")) {
-               g_variant_get(parameters, "(i)", &result);
-               LOG_DEBUG("Result : %d", result);
-       } else if (0 == g_strcmp0(signal_name, "disc_mot_enb_devs_done") ||
-                               0 == g_strcmp0(signal_name, "disc_mowned_devs_done")) {
+       mdgd_check_null_ret("userdata", userdata);
+       LOG_DEBUG("signal received = %s", signal_name);
 
+       if (0 == g_strcmp0(signal_name, "disc_mot_enb_devs_done") ||
+               0 == g_strcmp0(signal_name, "disc_mowned_devs_done")) {
                mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
+               GVariant *device_info;
+               GVariantIter *iter = NULL;
 
                mdgd_check_null_ret("mdgd_ctx", mdgd_ctx);
                mdgd_check_null_ret("parameters", parameters);
 
-               mdgd_command_t *cmd = g_new0(mdgd_command_t, 1);
-               mdgd_check_null_ret("cmd", cmd);
+               /* create device handle from parameter */
+               g_variant_get(parameters, "(aa{sv})", &iter);
+               while ((device_info = g_variant_iter_next_value(iter))) {
+                       mdgd_device_t *device;
 
-               cmd->uuid = g_strdup(mdgd_ctx->device_uuid);
-               cmd->user_data = (void *)g_variant_ref(parameters);
-               cmd->arg1 = g_strdup(signal_name);
+                       GVariant *val = g_variant_lookup_value(device_info, "deviceId", G_VARIANT_TYPE_STRING);
+                       gsize len = 0;
+                       const char *device_id = g_variant_get_string(val, &len);
 
-               /* Start peer-discovery */
-               mdgd_iot_discovery_resource(MDGD_RESOURCE_TYPE_DEVICE, 2, cmd);
-               LOG_DEBUG("Peer description discovery Start");
+                       LOG_DEBUG("!!!Device Found!!!");
 
-       } else if (0 == g_strcmp0(signal_name, "acl_done")) {
-               g_variant_get(parameters, "(i)", &result);
-               LOG_DEBUG("Result : %d", result);
-       } else if (0 == g_strcmp0(signal_name, "cred_done")) {
-               g_variant_get(parameters, "(i)", &result);
-               LOG_DEBUG("Result : %d", result);
-       } else if (0 == g_strcmp0(signal_name, "mot_done")) {
-#ifdef INVITE_EJECT_DEVICE_BY_MULTI_RUN
-               mdgd_mot_device_t *device;
-               mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-               mdgd_check_null_ret("mdgd_ctx", mdgd_ctx);
+                       if (strcmp(device_id, mdgd_ctx->device_uuid) == 0) {
+                               LOG_DEBUG("Already Stored : Skip Local device");
 
-               g_variant_get(parameters, "(i)", &result);
-               LOG_DEBUG("Result : %d", result);
+                               if (mdgd_ctx->mot_me == false) {
+                                       agent_mot(mdgd_ctx->device_uuid, "12341234");
+                                       mdgd_ctx->mot_me = true;
+                               }
 
-               if (result != 0 && result != 49 &&
-                       (mdgd_group_get_invite_info() != NULL))
-                       mdgd_group_notify_group_invite(result);
+                               continue;
+                       }
 
-               if (mdgd_ctx && (TRUE == mdgd_ctx->mot_me))
-                       g_timeout_add(10, __perform_agent_pairwise, NULL);
-#endif
-       } else if (0 == g_strcmp0(signal_name, "remove_mo_done")) {
-               g_variant_get(parameters, "(i)", &result);
-               LOG_DEBUG("Result : %d", result);
-#ifdef INVITE_EJECT_DEVICE_BY_MULTI_RUN
-               g_timeout_add(10, __perform_remove_cred_at_local, NULL);
-#endif
-       } else if (0 == g_strcmp0(signal_name, "remove_cred_local_done")) {
-               g_variant_get(parameters, "(i)", &result);
-               LOG_DEBUG("Result : %d", result);
-#ifdef INVITE_EJECT_DEVICE_BY_MULTI_RUN
-               mdgd_group_notify_group_dismiss(result);
-               g_free(device_uuid1);
-               device_uuid1 = NULL;
-               g_free(device_uuid2);
-               device_uuid1 = NULL;
-#endif
-       } else if (0 == g_strcmp0(signal_name, "pairwise_done")) {
-               g_variant_get(parameters, "(i)", &result);
-               LOG_DEBUG("Result : %d", result);
+                       device = (mdgd_device_t *)g_try_malloc0(sizeof(mdgd_device_t));
 
-               if (mdgd_group_get_invite_info() != NULL)
-                       mdgd_group_notify_group_invite(result);
-       } else if (0 == g_strcmp0(signal_name, "unlink_done")) {
-               g_variant_get(parameters, "(i)", &result);
-               LOG_DEBUG("Result : %d", result);
-#ifdef INVITE_EJECT_DEVICE_BY_MULTI_RUN
-               if (result != 0) {
-                       mdgd_group_notify_group_dismiss(result);
-                       g_free(device_uuid1);
-                       device_uuid1 = NULL;
-                       g_free(device_uuid2);
-                       device_uuid1 = NULL;
-               }
+                       LOG_DEBUG("deviceId = %s", device_id);
+                       device->device_id = g_strdup(device_id);
 
-               g_timeout_add(10, __perform_remove_mot_dev2, NULL);
-#endif
-       } else if (0 == g_strcmp0(signal_name, "pair_done")) {
+                       val = g_variant_lookup_value(device_info, "port", G_VARIANT_TYPE_UINT16);
+                       int port = g_variant_get_uint16(val);
+                       LOG_DEBUG("port = %d", port);
+                       device->port = port;
 
-               g_variant_get(parameters, "(i)", &result);
-               LOG_DEBUG("Result : %d", result);
+                       val = g_variant_lookup_value(device_info, "addr", G_VARIANT_TYPE_STRING);
+                       const char *addr = g_variant_get_string(val, &len);
+                       LOG_DEBUG("addr = %s", addr);
+                       device->addr = g_strdup(addr);
+
+                       val = g_variant_lookup_value(device_info, "connType", G_VARIANT_TYPE_UINT32);
+                       int connType = g_variant_get_uint32(val);
+                       LOG_DEBUG("connType = %d", connType);
+                       device->conn_type = connType;
+
+                       val = g_variant_lookup_value(device_info, "securePort", G_VARIANT_TYPE_UINT16);
+                       int securePort = g_variant_get_uint16(val);
+                       LOG_DEBUG("securePort = %d", securePort);
+                       device->secure_port = securePort;
 
-               mdgd_group_notify_group_invite(result);
-       } else if (0 == g_strcmp0(signal_name, "unpair_done")) {
+                       if (!strncmp(signal_name, "disc_mot_enb_devs_done", strlen(signal_name))) {
+                               device->is_invited = false;
+                               LOG_DEBUG("The device is mot enabled device");
+                       } else {
+                               device->is_invited = true;
+                               LOG_DEBUG("The device is mowned device");
+                       }
 
+                       mdgd_iot_get_device_description(device);
+               }
+       } else {
                g_variant_get(parameters, "(i)", &result);
                LOG_DEBUG("Result : %d", result);
 
-               mdgd_group_notify_group_dismiss(result);
+               if (0 == g_strcmp0(signal_name, "pair_done"))
+                       mdgd_group_notify_invite_device(result);
+               else if (0 == g_strcmp0(signal_name, "unpair_done"))
+                       mdgd_group_notify_eject_device(result);
        }
+
+       LOG_END();
 }
 static int _subscribe_event()
 {
@@ -633,7 +406,6 @@ static int _subscribe_event()
                return -1;
        }
        h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
-       LOG_DEBUG("subscribed for (subowner_enabled) signal %d", id);
 
        /* disc_mot_enb_devs_done */
        id = g_dbus_connection_signal_subscribe(h->dbus_connection, NULL, AGENT_SERVER_NAME,
@@ -644,7 +416,6 @@ static int _subscribe_event()
                return -1;
        }
        h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
-       LOG_DEBUG("subscribed for (disc_mot_enb_devs_done) signal %d", id);
 
        /* disc_mowned_devs_done */
        id = g_dbus_connection_signal_subscribe(h->dbus_connection, NULL, AGENT_SERVER_NAME,
@@ -655,7 +426,6 @@ static int _subscribe_event()
                return -1;
        }
        h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
-       LOG_DEBUG("subscribed for (disc_mowned_devs_done) signal %d", id);
 
        /* mot_done */
        id = g_dbus_connection_signal_subscribe(h->dbus_connection, NULL, AGENT_SERVER_NAME,
@@ -666,7 +436,6 @@ static int _subscribe_event()
                return -1;
        }
        h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
-       LOG_DEBUG("subscribed for (mot_done) signal %d", id);
 
        /* acl_done */
        id = g_dbus_connection_signal_subscribe(h->dbus_connection, NULL, AGENT_SERVER_NAME,
@@ -677,7 +446,6 @@ static int _subscribe_event()
                return -1;
        }
        h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
-       LOG_DEBUG("subscribed for (acl_done) signal %d", id);
 
        /*cred_done */
        id = g_dbus_connection_signal_subscribe(h->dbus_connection, NULL, AGENT_SERVER_NAME,
@@ -688,29 +456,6 @@ static int _subscribe_event()
                return -1;
        }
        h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
-       LOG_DEBUG("subscribed for (cred_done) signal %d", id);
-
-       /*pairwise_done */
-       id = g_dbus_connection_signal_subscribe(h->dbus_connection, NULL, AGENT_SERVER_NAME,
-                       "pairwise_done", AGENT_OBJECT_PATH, NULL,
-                       G_DBUS_CALL_FLAGS_NONE, _agent_signal_handler, h, NULL);
-       if (0 == id) {
-               LOG_ERR("g_dbus_connection_signal_subscribe(pairwise_done) Fail(%d)", errno);
-               return -1;
-       }
-       h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
-       LOG_DEBUG("subscribed for (pairwise_done) signal %d", id);
-
-       /*unlink_done */
-       id = g_dbus_connection_signal_subscribe(h->dbus_connection, NULL, AGENT_SERVER_NAME,
-                       "unlink_done", AGENT_OBJECT_PATH, NULL,
-                       G_DBUS_CALL_FLAGS_NONE, _agent_signal_handler, h, NULL);
-       if (0 == id) {
-               LOG_ERR("g_dbus_connection_signal_subscribe(unlink_done) Fail(%d)", errno);
-               return -1;
-       }
-       h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
-       LOG_DEBUG("subscribed for (unlink_done) signal %d", id);
 
        /* remove_mo_done */
        id = g_dbus_connection_signal_subscribe(h->dbus_connection, NULL, AGENT_SERVER_NAME,
@@ -721,7 +466,6 @@ static int _subscribe_event()
                return -1;
        }
        h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
-       LOG_DEBUG("subscribed for (remove_mo_done) signal %d", id);
 
        /* remove_cred_local_done */
        id = g_dbus_connection_signal_subscribe(h->dbus_connection, NULL, AGENT_SERVER_NAME,
@@ -732,7 +476,6 @@ static int _subscribe_event()
                return -1;
        }
        h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
-       LOG_DEBUG("subscribed for (remove_cred_local_done) signal %d", id);
 
        /*pair_done */
        id = g_dbus_connection_signal_subscribe(h->dbus_connection, NULL, AGENT_SERVER_NAME,
@@ -743,7 +486,6 @@ static int _subscribe_event()
                return -1;
        }
        h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
-       LOG_DEBUG("subscribed for (pair_done) signal %d", id);
 
        /*unpair_done */
        id = g_dbus_connection_signal_subscribe(h->dbus_connection, NULL, AGENT_SERVER_NAME,
@@ -754,7 +496,6 @@ static int _subscribe_event()
                return -1;
        }
        h->dbus_sub_ids = g_list_append(h->dbus_sub_ids, GUINT_TO_POINTER(id));
-       LOG_DEBUG("subscribed for (unpair_done) signal %d", id);
 
        return 0;
 }
@@ -767,7 +508,6 @@ static void _on_unsubscribe_ids(gpointer data, gpointer userdata)
                LOG_ERR("Invaild parameter");
                return;
        }
-       LOG_DEBUG("[Signal unsubscribe] : %d", id);
        g_dbus_connection_signal_unsubscribe(h->dbus_connection, id);
 }
 static void _unsubscribe_event()
old mode 100644 (file)
new mode 100755 (executable)
index 404b03a..f7be08e
 
 /* resource_type, type, uri, policies */
 static mdgd_rd_t mdgd_rds[] = {
-       {MDGD_RESOURCE_TYPE_GROUP, "core.comp.group", "/comp/group/",
+       {MDGD_RESOURCE_TYPE_GROUP, "core.comp.group", "/comp/group",
                OC_DISCOVERABLE | OC_OBSERVABLE},
        {MDGD_RESOURCE_TYPE_DEVICE, "core.comp.device", "/comp/device",
                OC_DISCOVERABLE | OC_OBSERVABLE},
-       {MDGD_RESOURCE_TYPE_OPERATION, "core.comp.operation", "/comp/operation/",
-               OC_DISCOVERABLE | OC_OBSERVABLE},
-       {MDGD_RESOURCE_TYPE_DATA, "core.comp.data", "/comp/data/",
+       {MDGD_RESOURCE_TYPE_DATA, "core.comp.data", "/comp/data",
                OC_DISCOVERABLE | OC_OBSERVABLE | OC_SECURE},
 };
 
-int mdgd_resource_append(mdgd_resource_type_e resource_type, const char *uri,
-                                                OCResourceHandle resource)
-{
-       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-       GList *list = mdgd_ctx->resource_list[resource_type];
-
-       //append resource handle / name to list
-       mdgd_re_t *element = g_new0(mdgd_re_t, 1);
-       element->uri = g_strdup(uri);
-       element->resource = resource;
-       list = g_list_append(list, element);
-
-       mdgd_ctx->resource_list[resource_type] = list;
-
-       return 0;
-}
-
 char *mdgd_resource_get_type(mdgd_resource_type_e resource_type)
 {
        return mdgd_rds[resource_type].type;
@@ -60,42 +41,3 @@ unsigned char mdgd_resource_get_policies(mdgd_resource_type_e resource_type)
 {
        return mdgd_rds[resource_type].policies;
 }
-
-void __print_foreach_resource(gpointer data, gpointer user_data)
-{
-       mdgd_re_t *re = (mdgd_re_t *)data;
-       LOG_DEBUG("    ** uri : %s", re->uri);
-}
-
-void mdgd_resource_print_list()
-{
-       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-
-       LOG_DEBUG("-------------------Print resource list-----------------------");
-
-       for (int i = 0; i < MDGD_RESOURCE_TYPE_MAX; i++) {
-               LOG_DEBUG("Resource type %d list length : %d",
-                       i, g_list_length(mdgd_ctx->resource_list[i]));
-               g_list_foreach(mdgd_ctx->resource_list[i], __print_foreach_resource, NULL);
-       }
-
-       LOG_DEBUG("-------------------Print resource list end-------------------");
-}
-
-OCResourceHandle mdgd_resource_get_handle(mdgd_resource_type_e resource_type,
-                                                                                 const char *uri)
-{
-       mdgd_context_t *mdgd_ctx = mdgd_context_get_context();
-       GList *list;
-
-       LOG_DEBUG("Get Resource handle type %d uri %s", resource_type, uri);
-
-       for (list = mdgd_ctx->resource_list[resource_type]; list != NULL;
-                list = list->next) {
-               mdgd_re_t *re = (mdgd_re_t *)list->data;
-               if (g_strcmp0(re->uri, uri) == 0)
-                       return re->resource;
-       }
-
-       return NULL;
-}
old mode 100644 (file)
new mode 100755 (executable)
index 436f1b1..f88f949
  *
  */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <net/if.h>
-#include <sys/ioctl.h>
-#include <arpa/inet.h>
-#include <dirent.h>
-#include <glib.h>
-
-#include <mdgd_log.h>
 #include <mdgd_util.h>
 
 #define IPV6_ADDR_GLOBAL 0x0000U
@@ -123,12 +112,12 @@ void mdgd_remove_ip_info(void)
 }
 
 static void _parse_inet6(const char *ifname) {
-    FILE *f = NULL;
+    FILE *f;
     int scope, prefix;
-    unsigned char ipv6[16] = {0, };
-    char dname[IFNAMSIZ + 1] = {0,};
-    char address[INET6_ADDRSTRLEN] = {0, };
-    char *scopestr = NULL;
+    unsigned char ipv6[16];
+    char dname[IFNAMSIZ];
+    char address[INET6_ADDRSTRLEN];
+    char *scopestr;
 
     f = fopen("/proc/net/if_inet6", "r");
     if (f == NULL) {
@@ -137,16 +126,15 @@ static void _parse_inet6(const char *ifname) {
     }
 
     while (19 == fscanf(f," %2hhx%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx" \
-               "%2hhx%2hhx%2hhx%2hhx%2hhx %*x %x %x %*x %16s",
+               "%2hhx%2hhx%2hhx%2hhx%2hhx %*x %x %x %*x %s",
                &ipv6[0], &ipv6[1], &ipv6[2], &ipv6[3], &ipv6[4], &ipv6[5], &ipv6[6], &ipv6[7],
                &ipv6[8], &ipv6[9], &ipv6[10], &ipv6[11], &ipv6[12], &ipv6[13], &ipv6[14],
                &ipv6[15], &prefix, &scope, dname)) {
 
-        if (strncmp(ifname, dname, IFNAMSIZ) != 0) {
+        if (strcmp(ifname, dname) != 0)
             continue;
-        }
 
-        if (NULL == inet_ntop(AF_INET6, ipv6, address, sizeof(address)))
+        if (inet_ntop(AF_INET6, ipv6, address, sizeof(address)) == NULL)
             continue;
 
                ipv6_info_s *_ipv6 = calloc(1, sizeof(ipv6_info_s));
@@ -176,16 +164,8 @@ static void _parse_inet6(const char *ifname) {
             scopestr = "Unknown";
         }
                _ipv6->ip = g_strdup(address); /* ex) fe80::212:34ff:fe5a:ec0e */
-               if (NULL == _ipv6->ip) {
-                       LOGE("Memory allocation failed");
-                       continue;
-               }
                _ipv6->prefix = prefix; /* ex) 64 */
                _ipv6->scope = g_strdup(scopestr); /* Link */
-               if (NULL == _ipv6->scope) {
-                       LOGE("Memory allocation failed");
-                       continue;
-               }
 
                g_ip_info.ipv6_list = g_list_append(g_ip_info.ipv6_list, _ipv6);
     }
@@ -197,8 +177,8 @@ static void _parse_ioctl(const char *ifname)
 {
     int sock;
     struct ifreq ifr;
-    struct sockaddr_in *ipaddr = NULL;
-    char address[INET_ADDRSTRLEN + 1] = {0,};
+    struct sockaddr_in *ipaddr;
+    char address[INET_ADDRSTRLEN];
     size_t ifnamelen;
 
     /* copy ifname to ifr object */
@@ -297,6 +277,7 @@ int mdgd_make_ip_info(void)
 int mdgd_is_local_ip(char *ipdata)
 {
        char *ip = NULL;
+       char *ifname = NULL;
        char *save_str = NULL;
        char *addr = NULL;
        GList *iter = NULL;
@@ -306,6 +287,7 @@ int mdgd_is_local_ip(char *ipdata)
        addr = g_strdup(ipdata);
 
        ip = strtok_r(addr, "%", &save_str);
+       ifname = strtok_r(NULL, "%", &save_str);
 
        iter = g_list_first(g_ip_info.ipv6_list);
        while (NULL != iter) {
@@ -333,3 +315,190 @@ int mdgd_is_local_ip(char *ipdata)
        return REMOTE_IP;
 }
 
+char *mdgd_addr2host(char *addr, int port, bool is_secure)
+{
+       char ip[50];
+       char *percent;
+
+       g_strlcpy(ip, addr, strlen(addr) + 1);
+
+       /* Remove % from address */
+       percent = strchr(ip, '%');
+       if (percent)
+               percent[0] = '\0';
+
+       /* IPv6 Address should be encoded for RFC6874  */
+       if (is_secure != true) {
+               if (strchr(ip, ':')) /* IPv6 Adress */
+                       return g_strdup_printf("coap://[%s%s%s]:%d", ip, "%25",
+                                                                               percent + 1, port);
+               else /* IPv4 Address */
+                       return g_strdup_printf("coap://%s:%d", ip, port);
+       } else {
+               if (strchr(ip, ':')) /* IPv6 Adress */
+                       return g_strdup_printf("coaps://[%s%s%s]:%d", ip, "%25",
+                                                                               percent + 1, port);
+               else /* IPv4 Address */
+                       return g_strdup_printf("coaps://%s:%d", ip, port);
+       }
+}
+
+int mdgd_uuid_to_str(const OicUuid_t* uuid, char** strUuid)
+{
+       if (NULL == uuid || NULL == strUuid || NULL != *strUuid) {
+               LOG_ERR("ConvertUuidToStr : Invalid param");
+               return OC_STACK_INVALID_PARAM;
+       }
+
+       size_t uuidIdx = 0;
+       size_t urnIdx = 0;
+       const size_t urnBufSize = (UUID_LENGTH * 2) + 4 + 1;
+       char* convertedUrn = (char*)calloc(urnBufSize, sizeof(char));
+       if (NULL == convertedUrn) {
+               LOG_ERR("Memory Allocation Failed");
+               goto exit;
+       }
+
+       for (uuidIdx = 0, urnIdx = 0; uuidIdx < UUID_LENGTH && urnIdx < urnBufSize;
+               uuidIdx++, urnIdx += 2) {
+               // canonical format for UUID has '8-4-4-4-12'
+               if (uuidIdx == 4 || uuidIdx == 6 || uuidIdx == 8 || uuidIdx == 10) {
+                       snprintf(convertedUrn + urnIdx, 2, "%c", '-');
+                       urnIdx++;
+               }
+               snprintf(convertedUrn + urnIdx, 3, "%02x", (uint8_t)(uuid->id[uuidIdx]));
+       }
+       convertedUrn[urnBufSize - 1] = '\0';
+
+       *strUuid = convertedUrn;
+       return OC_STACK_OK;
+
+exit:
+       return OC_STACK_NO_MEMORY;
+}
+
+void mdgd_clean_user_data(void *user_data)
+{
+       mdgd_command_t *cmd = (mdgd_command_t *)user_data;
+
+       if (NULL == cmd)
+               return;
+
+       if (cmd->tid) {
+               g_source_remove(cmd->tid);
+       }
+
+       if (cmd->uuid) {
+               g_free(cmd->uuid);
+               cmd->uuid = NULL;
+       }
+       if (cmd->host) {
+               g_free(cmd->host);
+               cmd->host = NULL;
+       }
+       if (cmd->arg1) {
+               g_free(cmd->arg1);
+               cmd->arg1 = NULL;
+       }
+       if (cmd->arg2) {
+               g_free(cmd->arg2);
+               cmd->arg2 = NULL;
+       }
+       if (cmd->arg3) {
+               g_free(cmd->arg3);
+               cmd->arg3 = NULL;
+       }
+       if (cmd->arg4) {
+               g_free(cmd->arg4);
+               cmd->arg4 = NULL;
+       }
+
+#ifdef SUPPORT_BASE64_ENCODING
+       if (cmd->data) {
+               g_free(cmd->data);
+               cmd->data = NULL;
+       }
+#endif
+
+       g_free(cmd);
+       cmd = NULL;
+}
+
+GVariant *mdgd_create_variant_group(mdgd_group_t *group)
+{
+       GVariant *data;
+
+       GVariantBuilder *builder;
+
+       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+
+       g_variant_builder_add(builder, "{sv}", "DeviceID",
+                                                 g_variant_new_string(group->device_id));
+       g_variant_builder_add(builder, "{sv}", "HostAddr",
+                                                 g_variant_new_string(group->host_addr));
+       g_variant_builder_add(builder, "{sv}", "GroupName",
+                                                 g_variant_new_string(group->group_name));
+       g_variant_builder_add(builder, "{sv}", "Type",
+                                                 g_variant_new_int32(group->type));
+
+       data = g_variant_builder_end(builder);
+
+       g_variant_builder_unref(builder);
+
+       return data;
+}
+
+GVariant *mdgd_create_variant_device(mdgd_device_t *device)
+{
+       GVariant *data;
+
+       GVariantBuilder *builder;
+
+       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+
+       g_variant_builder_add(builder, "{sv}", "DeviceID",
+                                                 g_variant_new_string(device->device_id));
+       g_variant_builder_add(builder, "{sv}", "Port",
+                                                 g_variant_new_int32(device->port));
+       g_variant_builder_add(builder, "{sv}", "Addr",
+                                                 g_variant_new_string(device->addr));
+       g_variant_builder_add(builder, "{sv}", "ConnType",
+                                                 g_variant_new_int32(device->conn_type));
+       g_variant_builder_add(builder, "{sv}", "SecurePort",
+                                                 g_variant_new_int32(device->secure_port));
+       g_variant_builder_add(builder, "{sv}", "ModelName",
+                                                 g_variant_new_string(device->model_name));
+       g_variant_builder_add(builder, "{sv}", "DeviceName",
+                                                 g_variant_new_string(device->device_name));
+       g_variant_builder_add(builder, "{sv}", "PlatformVer",
+                                                 g_variant_new_string(device->platform_ver));
+       g_variant_builder_add(builder, "{sv}", "VendorID",
+                                                 g_variant_new_string(device->vendor_id));
+       g_variant_builder_add(builder, "{sv}", "Profile",
+                                                 g_variant_new_string(device->profile));
+       g_variant_builder_add(builder, "{sv}", "IsInvited",
+                                                 g_variant_new_int32(device->is_invited));
+       g_variant_builder_add(builder, "{sv}", "Type",
+                                                 g_variant_new_int32(device->type));
+
+       data = g_variant_builder_end(builder);
+
+       g_variant_builder_unref(builder);
+
+       return data;
+}
+
+GVariant *mdgd_create_variant_dummy()
+{
+       GVariant *data;
+
+       GVariantBuilder *builder;
+
+       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+       data = g_variant_builder_end(builder);
+
+       g_variant_builder_unref(builder);
+
+       return data;
+}
+