Change mdg framework
authorJihoon Jung <jh8801.jung@samsung.com>
Tue, 26 Jun 2018 11:08:53 +0000 (20:08 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 2 Jul 2018 10:40:01 +0000 (19:40 +0900)
Signed-off-by: Jihoon Jung <jh8801.jung@samsung.com>
14 files changed:
include/mdg.h
src/mdg.c [changed mode: 0644->0755]
src/mdg_dbus.c
src/mdg_dbus.h
src/mdg_gdbus.xml
src/mdg_private.h
src/mdg_util.c
src/mdg_util.h
test/common.h [changed mode: 0644->0755]
test/main.c [changed mode: 0644->0755]
test/mdg-manager.c
test/mdg-test.c [deleted file]
test/menu.c [changed mode: 0644->0755]
test/menu.h [changed mode: 0644->0755]

index 7390100..4ae2b05 100644 (file)
@@ -71,7 +71,6 @@ typedef enum {
        MDG_ERROR_PLUGIN_FAIL = TIZEN_ERROR_MDG | 0x08, /**< Plugin failed */
        MDG_ERROR_ALREADY_IN_PROGRESS = TIZEN_ERROR_MDG | 0x09, /**< Already in progress */
        MDG_ERROR_NOT_STARTED = TIZEN_ERROR_MDG | 0x0A, /**< Not Started */
-       MDG_ERROR_ALREADY_INITIALIZED = TIZEN_ERROR_MDG | 0x0B, /**< Already initilized */
        MDG_ERROR_UNKNOWN = -999,
 
 } mdg_error_e;
@@ -158,8 +157,7 @@ int mdg_deinitialize(mdg_h handle);
  * @since_tizen 5.0
  */
 typedef enum {
-       MDG_GROUP_TYPE_ERROR = 0, /**< Error */
-       MDG_GROUP_TYPE_MINE = 1, /**< Local group */
+       MDG_GROUP_TYPE_LOCAL = 1, /**< Local group */
        MDG_GROUP_TYPE_REMOTE = 2, /**< Remote grojp */
 } mdg_group_type_e;
 
@@ -203,7 +201,7 @@ typedef bool (*mdg_group_found_cb)(mdg_group_type_e type,
 typedef void (*mdg_group_find_finish_cb)(int result, void *user_data);
 
 /**
- * @brief Finds group resources in local and the network.
+ * @brief Finds group resources in the network.
  * @details This function is find group resources in the network plus my local network.
  *
  * @since_tizen 5.0
@@ -221,7 +219,6 @@ typedef void (*mdg_group_find_finish_cb)(int result, void *user_data);
  * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
  *
  * @see mdg_group_create()
- * @see mdg_group_get_found_groups()
  *
  */
 int mdg_group_find(mdg_h handle, int timeout,
@@ -229,30 +226,6 @@ int mdg_group_find(mdg_h handle, int timeout,
                void *user_data);
 
 /**
- * @brief Gets a list of group resources.
- * @details This function retrieves a list of group resources found.
- *
- * @since_tizen 5.0
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
- *
- * @param[in] handle The multi device group manager handle
- * @param[in] groups Group resource list
- * @param[out] count Number of groups
- *
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #MDG_ERROR_NONE Successful
- * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @see mdg_group_create()
- * @see mdg_group_find()
- *
- */
-int mdg_group_get_found_groups(mdg_h handle,
-               mdg_group_h **groups, int *count);
-
-/**
  * @}
  */
 
@@ -277,7 +250,6 @@ int mdg_group_get_found_groups(mdg_h handle,
  * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
  *
  * @see mdg_group_find()
- * @see mdg_group_get_found_groups()
  *
  */
 int mdg_group_create(mdg_h handle, char *group_name);
@@ -353,7 +325,7 @@ int mdg_group_get_member_devices(mdg_h handle,
  *
  * @see mdg_group_invite_device()
  */
-typedef void (*mdg_group_invite_device_result_cb)(int result, void *user_data);
+typedef void (*mdg_group_invite_device_finish_cb)(int result, void *user_data);
 
 /**
  * @brief Called after mdg_group_eject_device().
@@ -371,7 +343,7 @@ typedef void (*mdg_group_invite_device_result_cb)(int result, void *user_data);
  *
  * @see mdg_group_ejecct_device()
  */
-typedef void (*mdg_group_eject_device_result_cb)(int result, void *user_data);
+typedef void (*mdg_group_eject_device_finish_cb)(int result, void *user_data);
 
 /**
  * @brief Requests to invite a device to the group which local device owns.
@@ -403,7 +375,7 @@ typedef void (*mdg_group_eject_device_result_cb)(int result, void *user_data);
  */
 int mdg_group_invite_device(mdg_h handle, mdg_group_h group,
                mdg_device_h device, char *PIN,
-               mdg_group_invite_device_result_cb callback, void *user_data);
+               mdg_group_invite_device_finish_cb callback, void *user_data);
 
 /**
  * @brief Requests to expel the device from the group which local device owns.
@@ -432,7 +404,7 @@ int mdg_group_invite_device(mdg_h handle, mdg_group_h group,
  *
  */
 int mdg_group_eject_device(mdg_h handle, mdg_group_h group,
-               mdg_device_h device, mdg_group_eject_device_result_cb callback,
+               mdg_device_h device, mdg_group_eject_device_finish_cb callback,
                void *user_data);
 
 
@@ -523,7 +495,7 @@ int mdg_request_join_group(mdg_h handle, mdg_group_h group,
  * @see mdg_group_get_member_devices()
  *
  */
-int mdg_request_leave_group (mdg_h handle, mdg_group_h group,
+int mdg_request_leave_group(mdg_h handle, mdg_group_h group,
                mdg_request_result_cb cb, void *user_data);
 
 /**
@@ -620,34 +592,6 @@ int mdg_request_eject_device(mdg_h handle, mdg_group_h group,
        mdg_device_h device, mdg_request_result_cb cb, void *user_data);
 
 /**
- * @brief Requests to delete the group.
- * @details This function deletes a specific group and expels all devices in that group.
- *
- * @since_tizen 5.0
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
- *
- * @param[in] handle The multi device group manager handle
- * @param[in] group Group handle
- * @param[in] cb Callback handler to receive the result
- * @param[in] user_data User data pointer
- *
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #MDG_ERROR_NONE Successful
- * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @see mdg_request_create_group()
- * @see mdg_request_invite_device()
- * @see mdg_request_eject_device()
- * @see mdg_request_result_callback()
- * @see mdg_device_send_data()
- *
- */
-int mdg_request_delete_group(mdg_h handle, mdg_group_h group,
-               mdg_request_result_cb cb, void *user_data);
-
-/**
  * @}
  */
 
@@ -680,7 +624,7 @@ int mdg_request_delete_group(mdg_h handle, mdg_group_h group,
  * @see mdg_group_info_get_host_addr()
  *
  */
-int mdg_group_info_clone(mdg_group_h dst,
+int mdg_group_info_clone(mdg_group_h *dst,
                mdg_group_h src);
 
 /**
@@ -706,6 +650,9 @@ int mdg_group_info_clone(mdg_group_h dst,
  */
 int mdg_group_info_destroy(mdg_group_h group);
 
+int mdg_group_info_get_device_id(mdg_group_h group, char **device_id);
+int mdg_group_info_get_host_addr(mdg_group_h group, char **host_addr);
+
 /**
  * @brief Gets group type of the group handle.
  *
@@ -728,62 +675,7 @@ int mdg_group_info_destroy(mdg_group_h group);
  * @see mdg_group_info_get_host_addr()
  *
  */
-int mdg_group_info_get_type(mdg_group_h group,
-               mdg_group_type_e *type);
-
-/**
- * @brief Gets resource type of the group handle.
- *
- * @since_tizen 5.0
- * @privlevel public
- *
- * @remarks The @a resource_type should be released using free().
- *
- * @param[in] group Group handle
- * @param[out] resource_type Resource type
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #MDG_ERROR_NONE Successful
- * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @see mdg_group_info_create()
- * @see mdg_group_info_clone()
- * @see mdg_group_info_destroy()
- * @see mdg_group_info_get_type()
- * @see mdg_group_info_get_uri_path()
- * @see mdg_group_info_get_name()
- * @see mdg_group_info_get_host_addr()
- *
- */
-int mdg_group_info_get_resource_type(
-               mdg_group_h group, char **resource_type);
-
-/**
- * @brief Gets URI path of the group handle.
- *
- * @since_tizen 5.0
- * @privlevel public
- *
- * @remarks The @a uri_path should be released using free().
- *
- * @param[in] group Group handle
- * @param[out] uri_path URI path
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #MDG_ERROR_NONE Successful
- * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @see mdg_group_info_create()
- * @see mdg_group_info_clone()
- * @see mdg_group_info_destroy()
- * @see mdg_group_info_get_type()
- * @see mdg_group_info_get_resource_type()
- * @see mdg_group_info_get_name()
- * @see mdg_group_info_get_host_addr()
- *
- */
-int mdg_group_info_get_uri_path(mdg_group_h group,
-               char **uri_path);
+int mdg_group_info_get_type(mdg_group_h group, mdg_group_type_e *type);
 
 /**
  * @brief Gets name of the group handle.
@@ -809,35 +701,7 @@ int mdg_group_info_get_uri_path(mdg_group_h group,
  * @see mdg_group_info_get_host_addr()
  *
  */
-int mdg_group_info_get_name(mdg_group_h group,
-               char **name);
-
-/**
- * @brief Gets host address of the group handle.
- *
- * @since_tizen 5.0
- * @privlevel public
- *
- * @remarks The @a host_addr should be released using free().
- *
- * @param[in] group Group handle
- * @param[out] host_addr Host address of the group
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #MDG_ERROR_NONE Successful
- * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @see mdg_group_info_create()
- * @see mdg_group_info_clone()
- * @see mdg_group_info_destroy()
- * @see mdg_group_info_get_type()
- * @see mdg_group_info_get_resource_type()
- * @see mdg_group_info_get_name()
- * @see mdg_group_info_get_uri_path()
- *
- */
-int mdg_group_info_get_host_addr(mdg_group_h group,
-               char **host_addr);
+int mdg_group_info_get_name(mdg_group_h group, char **name);
 
 /**
  * @}
@@ -855,22 +719,11 @@ int mdg_group_info_get_host_addr(mdg_group_h group,
  * @since_tizen 5.0
  */
 typedef enum {
-       MDG_DEVICE_TYPE_ERROR = 0, /**< Error */
        MDG_DEVICE_TYPE_LOCAL = 1, /**< Local device */
        MDG_DEVICE_TYPE_REMOTE = 2, /**< Remote device */
 } mdg_device_type_e;
 
 /**
- * @brief Device Status.
- *
- * @since_tizen 5.0
- */
-typedef enum {
-       MDG_DEVICE_ADDED = 0, /**< Device Added */
-       MDG_DEVICE_REMOVED = 1, /**< Device Removed */
-} mdg_device_status_e;
-
-/**
  * @brief Called after mdg_device_find().
  * @details This function can receive a device found.
  *
@@ -928,87 +781,33 @@ typedef void (*mdg_device_find_finish_cb)(int result, void *user_data);
  *
  * @see mdg_device_send_data()
  */
-typedef void (*mdg_device_send_data_finish_cb)(int result, char *resp_data,
-               void *user_data);
-
-/**
- * @brief Callback function pointer to be regsitered after enabling device
- * monitor
- *
- * @since_tizen 5.0
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
- *
- * @remarks The @a uuid, @arg should not be released.
- * @remarks The @a uuid, @arg can be used only in the callback. To use outside, make a copy.
- * @remarks The @a group_name, @arg should not be released.
- * @remarks The @a group_name, @arg can be used only in the callback. To use outside, make a copy.
- *
- * @param[out] uuid Device ID
- * @param[out] group_name Group name
- * @param[out] status Device Status
- * @param[out] user_data User data pointer
- *
- * @pre The callback must be registered with mdg_request_result_callback()
- *
- * @see mdg_device_monitor_start()
- */
-typedef void (*mdg_device_monitor_result_cb)(char *uuid, char *group_name,
-                                       mdg_device_status_e status, void *user_data);
+typedef void (*mdg_device_send_data_finish_cb)(int result, void *user_data);
 
 /**
- * @brief Finds candidate devices to include my groups in the network.
- * @details This function will search for candidate devices that can be included in local group.
+ * @brief Gets my local device handle.
+ * @details This function returns the local device information handle.
  *
  * @since_tizen 5.0
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
- *
- * @param[in] handle The multi device group manager handle
- * @param[in] timeout Time to find
- * @param[in] found_cb Callback handler to retrieve the found device
- * @param[in] finish_cb Callback handler to know finding process finished
- * @param[in] user_data User data poiter
- *
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #MDG_ERROR_NONE Successful
- * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @see mdg_device_get_found_devices()
- *
- */
-int mdg_device_find(mdg_h handle, int timeout,
-               mdg_device_found_cb found_cb, mdg_device_find_finish_cb finish_cb,
-               void *user_data);
-
-/**
- * @brief Gets a list of candidate devices to can be included my group.
- * @details This function retrieves a list of multiple owner enabled devices found.
  *
- * @since_tizen 5.0
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
+ * @remarks The @a target should be released using mdg_device_info_destroy().
  *
  * @param[in] handle The multi device group manager handle
- * @param[in] devices Device list
- * @param[in] count Number of devices
- *
+ * @param[in] device Local device handle
  *
  * @return 0 on success, otherwise a negative error value.
  * @retval #MDG_ERROR_NONE Successful
  * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MDG_ERROR_NO_DATA No data
  *
- * @see mdg_device_find_mowned_device()
+ * @see mdg_device_info_get_my_uuid()
  *
  */
-int mdg_device_get_found_devices(mdg_h handle,
-               mdg_device_h **devices, int *count);
+int mdg_device_get_local_device(mdg_h handle,
+               mdg_device_h *device);
 
 /**
- * @brief Finds my owned devices in the network.
- * @details This function looks up devices on your network that are registered as multiple
- * owners.
+ * @brief Finds candidate devices to include my groups in the network.
+ * @details This function will search for candidate devices that can be included in local group.
  *
  * @since_tizen 5.0
  * @privlevel public
@@ -1025,35 +824,23 @@ int mdg_device_get_found_devices(mdg_h handle,
  * @retval #MDG_ERROR_NONE Successful
  * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
  *
- * @see mdg_device_get_found_mowned_devices()
- *
  */
-int mdg_device_find_mowned_device(mdg_h handle, int timeout,
+int mdg_device_find(mdg_h handle, int timeout, bool is_invited,
                mdg_device_found_cb found_cb, mdg_device_find_finish_cb finish_cb,
                void *user_data);
 
-/**
- * @brief Gets a list of discovered owned devices.
- * @details This function retrieves a list of my owned devices found.
- *
- * @since_tizen 5.0
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
- *
- * @param[in] handle The multi device group manager handle
- * @param[in] devices Device list
- * @param[in] count Number of devices
- *
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #MDG_ERROR_NONE Successful
- * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @see mdg_device_find_mowned_device()
- *
- */
-int mdg_device_get_found_mowned_devices(mdg_h handle,
-               mdg_device_h **devices, int *count);
+typedef void (*mdg_channel_cb)(int result, mdg_device_h device, char *channel_id,
+                                       unsigned char *arg, int len, void *user_data);
+
+/* Server Side */
+int mdg_device_regist_channel(mdg_h handle, char *channel_id,
+       mdg_channel_cb channel_cb, void *user_data);
+
+int mdg_device_unregist_channel(mdg_h handle, char *channel_id);
+
+/* Client Side */
+//int mdg_device_get_channels(mdg_h handle, mdg_device_h device,
+//             mdg_device_get_channels_cb get_channels_cb, void *user_data);
 
 /**
  * @brief Sends data to the remote device.
@@ -1082,51 +869,11 @@ int mdg_device_get_found_mowned_devices(mdg_h handle,
  * @see mdg_request_result_callback()
  *
  */
-int mdg_device_send_data(mdg_h handle, mdg_device_h device,
+int mdg_device_send_data(mdg_h handle, mdg_device_h device, char *channel_id,
                           unsigned char *data, int len,
                           mdg_device_send_data_finish_cb finish_cb, void *user_data);
 
 /**
- * @brief Starts monitoring peers in the network.
- *
- * @since_tizen 5.0
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
- *
- * @param[in] handle The multi device group manager handle
- * @param[in] cb Callback to be called when receiving keep alive message from peers
- * @param[in] user_data User data pointer
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #MDG_ERROR_NONE Successful
- * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @see mdg_device_monitor_stop()
- *
- */
-int mdg_device_monitor_start(mdg_h handle, mdg_device_monitor_result_cb cb,
-               void *user_data);
-
-/**
- * @brief Stops monitoring peers in the network.
- *
- * @since_tizen 5.0
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
- *
- * @param[in] handle The multi device group manager handle
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #MDG_ERROR_NONE Successful
- * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @see mdg_device_monitor_start()
- *
- */
-int mdg_device_monitor_stop(mdg_h handle);
-
-
-/**
  * @}
  */
 
@@ -1136,50 +883,6 @@ int mdg_device_monitor_stop(mdg_h handle);
  */
 
 /**
- * @brief Gets my local device ID.
- * @details This function returns current UUID of local device.
- *
- * @since_tizen 5.0
- *
- * @remarks The @a uuid should not be released.
- * @remarks The @a uuid can be used only in the callback. To use outside, make a copy.
- *
- * @param[in] handle The multi device group manager handle
- * @param[out] uuid Local device UUID
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #MDG_ERROR_NONE Successful
- * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @see mdg_device_info_get_my_device()
- *
- */
-
-int mdg_device_info_get_my_uuid(mdg_h handle, char **uuid);
-
-/**
- * @brief Gets my local device handle.
- * @details This function returns the local device information handle.
- *
- * @since_tizen 5.0
- *
- * @remarks The @a target should be released using mdg_device_info_destroy().
- *
- * @param[in] handle The multi device group manager handle
- * @param[in] device Local device handle
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #MDG_ERROR_NONE Successful
- * @retval #MDG_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #MDG_ERROR_NO_DATA No data
- *
- * @see mdg_device_info_get_my_uuid()
- *
- */
-int mdg_device_info_get_my_device(mdg_h handle,
-               mdg_device_h *device);
-
-/**
  * @brief Clones the device handle.
  *
  * @since_tizen 5.0
@@ -1202,7 +905,7 @@ int mdg_device_info_get_my_device(mdg_h handle,
  * @see mdg_device_info_get_model_name()
  *
  */
-int mdg_device_info_clone(mdg_device_h target,
+int mdg_device_info_clone(mdg_device_h *target,
                mdg_device_h source);
 
 /**
@@ -1276,18 +979,20 @@ int mdg_device_info_get_device_id(mdg_device_h device,
  * @see mdg_device_info_get_model_name()
  *
  */
-int mdg_device_info_get_ip(mdg_device_h device, char **ip);
+int mdg_device_info_get_addr(mdg_device_h device, char **addr);
+int mdg_device_info_get_port(mdg_device_h device, int *port);
+int mdg_device_info_get_secure_port(mdg_device_h device, int *secure_port);
 
 /**
- * @brief Gets device type of the device handle.
+ * @brief Gets model name of the device handle.
  *
  * @since_tizen 5.0
  * @privlevel public
  *
- * @remarks The @a device_type should be released using free().
+ * @remarks The @a model_name should be released using free().
  *
  * @param[in] device Device handle
- * @param[out] device_type Device type
+ * @param[out] model_name Model name
  *
  * @return 0 on success, otherwise a negative error value.
  * @retval #MDG_ERROR_NONE Successful
@@ -1298,22 +1003,26 @@ int mdg_device_info_get_ip(mdg_device_h device, char **ip);
  * @see mdg_device_info_destroy()
  * @see mdg_device_info_get_device_id()
  * @see mdg_device_info_get_ip()
- * @see mdg_device_info_get_model_name()
+ * @see mdg_device_info_get_device_type()
  *
  */
-int mdg_device_info_get_device_type(mdg_device_h device,
-               mdg_device_type_e *device_type);
+int mdg_device_info_get_model_name(mdg_device_h device, char **model_name);
+int mdg_device_info_get_device_name(mdg_device_h device, char **device_name);
+int mdg_device_info_get_platform_ver(mdg_device_h device, char **platform_ver);
+int mdg_device_info_get_vendor_id(mdg_device_h device, char **vendor_id);
+int mdg_device_info_get_profile(mdg_device_h device, char **profile);
+int mdg_device_info_is_invited(mdg_device_h device, bool *is_invited);
 
 /**
- * @brief Gets model name of the device handle.
+ * @brief Gets device type of the device handle.
  *
  * @since_tizen 5.0
  * @privlevel public
  *
- * @remarks The @a model_name should be released using free().
+ * @remarks The @a device_type should be released using free().
  *
  * @param[in] device Device handle
- * @param[out] model_name Model name
+ * @param[out] device_type Device type
  *
  * @return 0 on success, otherwise a negative error value.
  * @retval #MDG_ERROR_NONE Successful
@@ -1324,11 +1033,11 @@ int mdg_device_info_get_device_type(mdg_device_h device,
  * @see mdg_device_info_destroy()
  * @see mdg_device_info_get_device_id()
  * @see mdg_device_info_get_ip()
- * @see mdg_device_info_get_device_type()
+ * @see mdg_device_info_get_model_name()
  *
  */
-int mdg_device_info_get_model_name(mdg_device_h device,
-               char **model_name);
+int mdg_device_info_get_type(mdg_device_h device,
+               mdg_device_type_e *device_type);
 
 /**
  * @}
old mode 100644 (file)
new mode 100755 (executable)
index a887ffa..1c4abe4
--- a/src/mdg.c
+++ b/src/mdg.c
 #include <mdg_gdbus.h>
 #include <mdg_private.h>
 
-/**
- * Companion Manager CAPI
- */
-
-static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /**< Mutex for dbus */
-
-#define MDG_LOCK \
-do { \
-       pthread_mutex_lock(&mutex); \
-} while (0);
-
-#define MDG_UNLOCK \
-do { \
-       pthread_mutex_unlock(&mutex); \
-} while (0);
-
-int ref_count = 0; /**< How many clients are alive */
-bool __is_initialized = false; /**< Initialize or not */
+GSList *handle_list = NULL;
 
 EXPORT_API int mdg_initialize(mdg_h *handle)
 {
@@ -66,18 +49,9 @@ EXPORT_API int mdg_initialize(mdg_h *handle)
        }
        *handle = mdg_manager;
 
-       if (__is_initialized) {
-               /* LCOV_EXCL_START */
-               _DBG("Already initialized");
-               return MDG_ERROR_ALREADY_INITIALIZED;
-               /* LCOV_EXCL_STOP */
-       }
-
-       MDG_LOCK;
        ret = gdbus_initialize(*handle);
-       __is_initialized = true;
-       MDG_UNLOCK;
-       ref_count++;
+
+       handle_list = g_slist_prepend(handle_list, *handle);
 
        _END();
 
@@ -89,31 +63,17 @@ EXPORT_API int mdg_deinitialize(mdg_h handle)
        int ret = MDG_ERROR_NONE;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
+       CHECK_HANDLE_IS_VALID(handle);
 
        _BEGIN();
 
-       MDG_LOCK;
+       handle_list = g_slist_remove(handle_list, handle);
 
-       if (0 > --ref_count) {
-               /* LCOV_EXCL_START */
-               _DBG("all connections closed\n");
-               ref_count = 0;
-               MDG_UNLOCK;
-               return ret;
-               /* LCOV_EXCL_STOP */
-       }
-
-       if (__is_initialized == true && ref_count == 0) {
-               ret = gdbus_deinitialize(handle);
-               __is_initialized = false;
-       }
-
-       MDG_UNLOCK;
+       ret = gdbus_deinitialize(handle);
 
        _END();
 
        return ret;
-
 }
 
 EXPORT_API int mdg_group_create(mdg_h handle, char *group_name)
@@ -125,8 +85,7 @@ EXPORT_API int mdg_group_create(mdg_h handle, char *group_name)
 
        mdg_manager_s *_handle = handle;
        mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
-       if (0 == strlen(group_name))
-               return MDG_ERROR_INVALID_PARAMETER;
+       CHECK_HANDLE_IS_VALID(handle);
 
        /* create group to daemon using gdbus */
        group_call_create_sync(_handle->group_proxy, group_name, &ret, NULL, &error);
@@ -140,10 +99,6 @@ EXPORT_API void mdg_group_destroy(mdg_group_s *group)
 
        mdg_check_null_ret("group", group);
 
-       if (group->uri_path) {
-               g_free(group->uri_path);
-               group->uri_path = NULL;
-       }
        if (group->device_id) {
                g_free(group->device_id);
                group->device_id = NULL;
@@ -152,14 +107,7 @@ EXPORT_API void mdg_group_destroy(mdg_group_s *group)
                g_free(group->group_name);
                group->group_name = NULL;
        }
-       if (group->host_addr) {
-               g_free(group->host_addr);
-               group->host_addr = NULL;
-       }
-       if (group->resource_type) {
-               g_free(group->resource_type);
-               group->resource_type = NULL;
-       }
+
        g_free(group);
        group = NULL;
 }
@@ -175,6 +123,7 @@ EXPORT_API int mdg_group_find(mdg_h handle, int timeout,
 
        mdg_manager_s *_handle = handle;
        mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
+       CHECK_HANDLE_IS_VALID(handle);
 
        _handle->group_found_cb.found_cb = found_cb;
        _handle->group_find_finish_cb.finish_cb = finish_cb;
@@ -183,84 +132,82 @@ EXPORT_API int mdg_group_find(mdg_h handle, int timeout,
 
        /* get groups from daemon using gdbus */
        group_call_find_sync(_handle->group_proxy, timeout, &ret, NULL, &error);
+       if (error) {
+               _ERR("Failed DBus call [%s]", error->message);
+               g_error_free(error);
+               ret = MDG_ERROR_IO_ERROR;
+       }
 
        return ret;
 }
 
-EXPORT_API int mdg_group_get_found_groups(mdg_h handle,
-       mdg_group_h **groups, int *count)
+EXPORT_API int mdg_device_find(mdg_h handle, int timeout, bool is_invited,
+       mdg_device_found_cb found_cb, mdg_device_find_finish_cb finish_cb,
+       void *user_data)
 {
        int ret = MDG_ERROR_NONE;
-       GVariant *va = NULL;
        GError *error = NULL;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
 
        mdg_manager_s *_handle = handle;
        mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
+       CHECK_HANDLE_IS_VALID(handle);
+
+       _handle->device_found_cb.found_cb = found_cb;
+       _handle->device_found_cb.user_data = user_data;
+       _handle->device_find_finish_cb.finish_cb = finish_cb;
+       _handle->device_find_finish_cb.user_data = user_data;
 
        /* get groups from daemon using gdbus */
-       group_call_get_found_groups_sync(_handle->group_proxy, &ret, &va, NULL, &error);
-       *count = g_variant_n_children(va);
-
-       _DBG("get found groups : %d", *count);
-
-       /* LCOV_EXCL_START */
-       if (*count > 0) {
-               GVariantIter *iter = NULL, *iter_row = NULL;
-               GVariant *key_value;
-               const gchar *key;
-               guint i = 0;
-
-               *groups = g_new0(mdg_group_h, *count);
-
-               g_variant_get(va, "aa{sv}", &iter);
-               while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
-
-                       char *uri_path = NULL;
-                       char *device_id = NULL;
-                       char *group_name = NULL;
-                       char *host_addr = NULL;
-                       char *resource_type = NULL;
-
-                       mdg_group_s *group = NULL;
-                       mdg_group_type_e type = MDG_GROUP_TYPE_ERROR;
-
-                       while (g_variant_iter_loop(iter_row, "{sv}", &key, &key_value)) {
-                               if (g_strcmp0(key, "URI") == 0)
-                                       uri_path = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "DeviceID") == 0)
-                                       device_id = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "GroupName") == 0)
-                                       group_name = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "HostAddress") == 0)
-                                       host_addr = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "GroupDeviceType") == 0)
-                                       resource_type = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "GroupType") == 0)
-                                       type = g_variant_get_int32(key_value);
-                       }
-                       g_variant_iter_free(iter_row);
-
-                       _INFO("DeviceID %s GroupName %s HostAddress %s GroupDeviceType %s",
-                                 device_id, group_name, host_addr, resource_type);
-
-                       group = create_group_handle(uri_path,
-                               device_id, group_name, host_addr, resource_type, type);
-
-                       (*groups)[i++] = (mdg_group_h)group;
-               }
-               g_variant_iter_free(iter);
+       group_call_find_device_sync(_handle->group_proxy, timeout, is_invited, &ret, NULL, &error);
+       if (error) {
+               _ERR("Failed DBus call [%s]", error->message);
+               g_error_free(error);
+               ret = MDG_ERROR_IO_ERROR;
        }
-       /* LCOV_EXCL_STOP */
-       g_variant_unref(va);
 
        return ret;
 }
 
-EXPORT_API int mdg_device_find(mdg_h handle, int timeout,
-       mdg_device_found_cb found_cb, mdg_device_find_finish_cb finish_cb,
-       void *user_data)
+typedef struct _channel_cb_s {
+       char *channel_id;
+       mdg_channel_cb cb;
+       void *user_data;
+} channel_cb_s;
+
+/**
+ * Companion Manager CAPI
+ */
+int __add_channel_cb(mdg_manager_s *handle, char *channel_id, mdg_channel_cb channel_cb, void *user_data)
+{
+       channel_cb_s *channel_s;
+
+       GSList *l1, *l2;
+       for (l1 = handle_list; l1 != NULL; l1 = l1->next) {
+               mdg_manager_s *tmp_handle = (mdg_manager_s *)l1->data;
+               for (l2 = tmp_handle->channel_cb_list; l2 != NULL; l2 = l2->next) {
+                       channel_cb_s *tmp_channel = (channel_cb_s *)l2->data;
+                       if (g_strcmp0(tmp_channel->channel_id, channel_id) == 0)
+                               return MDG_ERROR_UNKNOWN;
+               }
+       }
+
+       channel_s = g_try_new0(channel_cb_s, 1);
+       if (channel_s == NULL)
+               return MDG_ERROR_OUT_OF_MEMORY;
+
+       channel_s->channel_id = g_strdup(channel_id);
+       channel_s->cb = channel_cb;
+       channel_s->user_data = user_data;
+
+       handle->channel_cb_list = g_slist_prepend(handle->channel_cb_list, channel_s);
+
+       return 0;
+}
+
+EXPORT_API int mdg_device_regist_channel(mdg_h handle, char *channel_id,
+       mdg_channel_cb channel_cb, void *user_data)
 {
        int ret = MDG_ERROR_NONE;
        GError *error = NULL;
@@ -269,53 +216,69 @@ EXPORT_API int mdg_device_find(mdg_h handle, int timeout,
 
        mdg_manager_s *_handle = handle;
        mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
+       CHECK_HANDLE_IS_VALID(_handle);
 
-       _handle->device_found_cb.found_cb = found_cb;
-       _handle->device_found_cb.user_data = user_data;
-       _handle->device_find_finish_cb.finish_cb = finish_cb;
-       _handle->device_find_finish_cb.user_data = user_data;
+       _BEGIN();
 
-       /* get groups from daemon using gdbus */
-       group_call_device_find_sync(_handle->group_proxy, timeout, &ret, NULL, &error);
+       group_call_regist_channel_sync(_handle->group_proxy, channel_id, &ret, NULL, &error);
        if (error) {
                _ERR("Failed DBus call [%s]", error->message);
                g_error_free(error);
                ret = MDG_ERROR_IO_ERROR;
        }
 
+       if (ret == MDG_ERROR_NONE)
+               ret = __add_channel_cb(handle, channel_id, channel_cb, user_data);
+
+       _END();
+
        return ret;
 }
 
-EXPORT_API int mdg_device_find_mowned_device(mdg_h handle,
-       int timeout, mdg_device_found_cb found_cb,
-       mdg_device_find_finish_cb finish_cb, void *user_data)
+EXPORT_API int mdg_device_unregist_channel(mdg_h handle, char *channel_id)
 {
        int ret = MDG_ERROR_NONE;
+       bool is_exist = false;
        GError *error = NULL;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
 
        mdg_manager_s *_handle = handle;
        mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
+       CHECK_HANDLE_IS_VALID(handle);
 
-       _handle->mowned_device_found_cb.found_cb = found_cb;
-       _handle->mowned_device_found_cb.user_data = user_data;
-       _handle->mowned_device_find_finish_cb.finish_cb = finish_cb;
-       _handle->mowned_device_find_finish_cb.user_data = user_data;
+       _BEGIN();
 
-       /* get groups from daemon using gdbus */
-       group_call_find_mowned_devices_sync(_handle->group_proxy, timeout, &ret, NULL, &error);
-       if (error) {
-               _ERR("Failed DBus call [%s]", error->message);
-               g_error_free(error);
-               ret = MDG_ERROR_IO_ERROR;
+       GSList *l;
+       for (l = _handle->channel_cb_list; l != NULL; l = l->next) {
+               channel_cb_s *tmp_channel = (channel_cb_s *)l->data;
+               if (g_strcmp0(tmp_channel->channel_id, channel_id) == 0) {
+                       g_free(tmp_channel->channel_id);
+                       _handle->channel_cb_list = g_slist_remove_link(_handle->channel_cb_list, l);
+                       is_exist = true;
+                       break;
+               }
+       }
+
+       if (is_exist == false)
+               ret = MDG_ERROR_UNKNOWN;
+
+       if (ret == MDG_ERROR_NONE) {
+               group_call_unregist_channel_sync(_handle->group_proxy, channel_id, &ret, NULL, &error);
+               if (error) {
+                       _ERR("Failed DBus call [%s]", error->message);
+                       g_error_free(error);
+                       ret = MDG_ERROR_IO_ERROR;
+               }
        }
 
+       _END();
+
        return ret;
 }
 
 EXPORT_API int mdg_device_send_data(mdg_h handle,
-       mdg_device_h device, unsigned char *data, int len,
+       mdg_device_h device, char *channel_id, unsigned char *data, int len,
        mdg_device_send_data_finish_cb finish_cb, void *user_data)
 {
        int ret = MDG_ERROR_NONE;
@@ -329,6 +292,7 @@ EXPORT_API int mdg_device_send_data(mdg_h handle,
 
        mdg_manager_s *_handle = handle;
        mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
+       CHECK_HANDLE_IS_VALID(handle);
 
        mdg_device_s *dev = (mdg_device_s *)device;
        mdg_check_null_ret_error("dev", dev, MDG_ERROR_INVALID_PARAMETER);
@@ -352,8 +316,8 @@ EXPORT_API int mdg_device_send_data(mdg_h handle,
        _handle->send_data_finish_cb.finish_cb = finish_cb;
        _handle->send_data_finish_cb.user_data = user_data;
 
-       group_call_send_data_sync(_handle->group_proxy, dev->device_id, dev->ip,
-                                                         dev->sec_port, params, &ret, NULL, &error);
+       group_call_send_data_sync(_handle->group_proxy, dev->device_id, dev->addr,
+                                                         dev->secure_port, params, &ret, NULL, &error);
        if (error) {
                _ERR("Failed DBus call [%s]", error->message);
                g_error_free(error);
@@ -366,276 +330,27 @@ EXPORT_API int mdg_device_send_data(mdg_h handle,
        return ret;
 }
 
-/* mdg_request_join_group : join to remote group. if group handle is my daemon's,
-   then the api return fail error */
-EXPORT_API int mdg_device_get_found_devices(mdg_h handle,
-       mdg_device_h **devices, int *count)
-{
-       int ret = MDG_ERROR_NONE;
-       int num = 0;
-       GVariant *va = NULL;
-       GError *error = NULL;
-
-       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
-
-       mdg_manager_s *_handle = handle;
-       mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
-
-       /* get groups from daemon using gdbus */
-       group_call_get_remote_device_sync(_handle->group_proxy, &num, &va, NULL, &error);
-       if (error) {
-               _ERR("Failed DBus call [%s]", error->message);
-               g_error_free(error);
-               ret = MDG_ERROR_IO_ERROR;
-       }
-       /* *count = g_variant_n_children(va); */
-       *count = num;
-
-       _DBG("get found devices : %d", *count);
-       /* LCOV_EXCL_START */
-       if (*count > 0) {
-               GVariantIter *iter = NULL, *iter_row = NULL;
-               GVariant *key_value = NULL;
-               const gchar *key;
-               guint i = 0;
-
-               *devices = g_new0(mdg_group_h, *count);
-
-               g_variant_get(va, "aa{sv}", &iter);
-               while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
-                       char *deviceid = NULL;
-                       char *addr = NULL;
-                       int device_type = MDG_DEVICE_TYPE_ERROR;
-                       int port;
-                       int sec_port;
-                       mdg_device_s *device = NULL;
-                       char *model_name = NULL;
-                       char *device_name = NULL;
-                       char *platform_ver = NULL;
-                       char *vendor_id = NULL;
-                       char *profile = NULL;
-
-                       while (g_variant_iter_loop(iter_row, "{sv}", &key, &key_value)) {
-                               if (g_strcmp0(key, "DeviceID") == 0)
-                                       deviceid = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "Address") == 0)
-                                       addr = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "DeviceType") == 0)
-                                       device_type = g_variant_get_uint16(key_value);
-                               else if (g_strcmp0(key, "Port") == 0)
-                                       port = g_variant_get_uint16(key_value);
-                               else if (g_strcmp0(key, "SecurePort") == 0)
-                                       sec_port = g_variant_get_uint16(key_value);
-                               else if (g_strcmp0(key, "ModelName") == 0)
-                                       model_name = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "DeviceName") == 0)
-                                       device_name = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "PlatformVer") == 0)
-                                       platform_ver = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "VendorID") == 0)
-                                       vendor_id = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "Profile") == 0)
-                                       profile = (char *)g_variant_get_string(key_value, NULL);
-                       }
-                       g_variant_iter_free(iter_row);
-
-                       device = create_device_handle(deviceid, addr, device_type, port, sec_port,
-                               model_name, device_name, platform_ver, vendor_id, profile);
-
-                       (*devices)[i++] = (mdg_device_h)device;
-               }
-               g_variant_iter_free(iter);
-       }
-       /* LCOV_EXCL_STOP */
-       g_variant_unref(va);
-
-       return ret;
-}
-
-EXPORT_API int mdg_device_get_found_mowned_devices(
-       mdg_h handle, mdg_device_h **devices, int *count)
-{
-       int ret = MDG_ERROR_NONE;
-       int num = 0;
-       GVariant *va = NULL;
-       GError *error = NULL;
-
-       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
-
-       mdg_manager_s *_handle = handle;
-       mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
-
-       /* get groups from daemon using gdbus */
-       group_call_get_mowned_device_sync(_handle->group_proxy, &num, &va, NULL, &error);
-       if (error) {
-               _ERR("Failed DBus call [%s]", error->message);
-               g_error_free(error);
-               ret = MDG_ERROR_IO_ERROR;
-       }
-       /* *count = g_variant_n_children(va); */
-       *count = num;
-
-       _INFO("get found mowned devices : %d", *count);
-
-       /* LCOV_EXCL_START */
-       if (*count > 0) {
-               GVariantIter *iter = NULL, *iter_row = NULL;
-               GVariant *key_value;
-               const gchar *key;
-               guint i = 0;
-
-               *devices = g_new0(mdg_device_h, *count);
-
-               g_variant_get(va, "aa{sv}", &iter);
-               while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
-                       char *deviceid = NULL;
-                       char *addr = NULL;
-                       int device_type = MDG_DEVICE_TYPE_ERROR;
-                       int port;
-                       int sec_port;
-                       mdg_device_s *device = NULL;
-                       char *model_name = NULL;
-                       char *device_name = NULL;
-                       char *platform_ver = NULL;
-                       char *vendor_id = NULL;
-                       char *profile = NULL;
-
-                       while (g_variant_iter_loop(iter_row, "{sv}", &key, &key_value)) {
-                               if (g_strcmp0(key, "DeviceID") == 0)
-                                       deviceid = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "Address") == 0)
-                                       addr = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "DeviceType") == 0)
-                                       device_type = g_variant_get_uint16(key_value);
-                               else if (g_strcmp0(key, "Port") == 0)
-                                       port = g_variant_get_uint16(key_value);
-                               else if (g_strcmp0(key, "SecurePort") == 0)
-                                       sec_port = g_variant_get_uint16(key_value);
-                               else if (g_strcmp0(key, "ModelName") == 0)
-                                       model_name = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "DeviceName") == 0)
-                                       device_name = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "PlatformVer") == 0)
-                                       platform_ver = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "VendorID") == 0)
-                                       vendor_id = (char *)g_variant_get_string(key_value, NULL);
-                               else if (g_strcmp0(key, "Profile") == 0)
-                                       profile = (char *)g_variant_get_string(key_value, NULL);
-                       }
-                       g_variant_iter_free(iter_row);
-
-                       device = create_device_handle(deviceid, addr, device_type, port, sec_port,
-                               model_name, device_name, platform_ver, vendor_id, profile);
-
-                       (*devices)[i++] = (mdg_device_h)device;
-               }
-               g_variant_iter_free(iter);
-       }
-       /* LCOV_EXCL_STOP */
-       g_variant_unref(va);
-
-       return ret;
-}
-
-EXPORT_API int mdg_device_info_get_my_uuid(mdg_h handle, char **uuid)
-{
-       int ret = 0;
-       GError *error = NULL;
-
-       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
-
-       mdg_manager_s *_handle = handle;
-       mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
-
-       group_call_get_my_uuid_sync(_handle->group_proxy, uuid, NULL, &error);
-       if (error) {
-               _ERR("Failed DBus call [%s]", error->message);
-               g_error_free(error);
-               ret = MDG_ERROR_IO_ERROR;
-       }
-
-       return ret;
-}
-
-EXPORT_API int mdg_device_info_get_my_device(mdg_h handle,
+EXPORT_API int mdg_device_get_local_device(mdg_h handle,
        mdg_device_h *device)
 {
        int ret = MDG_ERROR_NONE;
        GError *error = NULL;
        GVariant *va = NULL;
-       GVariantIter *iter = NULL;
-       const gchar *key;
-       GVariant *key_value = NULL;
-       char *deviceid = NULL;
-       char *addr = NULL;
-       int device_type = MDG_DEVICE_TYPE_ERROR;
-       int port = -1;
-       int sec_port = -1;
-       char *model_name = NULL;
-       char *device_name = NULL;
-       char *platform_ver = NULL;
-       char *vendor_id = NULL;
-       char *profile = NULL;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
 
        mdg_manager_s *_handle = handle;
        mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
+       CHECK_HANDLE_IS_VALID(handle);
 
-       group_call_get_my_mowned_device_sync(_handle->group_proxy, &va, NULL, &error);
+       group_call_get_local_device_sync(_handle->group_proxy, &va, NULL, &error);
        if (error) {
                _ERR("Failed DBus call [%s]", error->message);
                g_error_free(error);
                ret = MDG_ERROR_IO_ERROR;
        }
 
-       g_variant_get(va, "a{sv}", &iter);
-       /* LCOV_EXCL_START */
-       while (g_variant_iter_loop(iter, "{sv}", &key, &key_value)) {
-               if (g_strcmp0(key, "DeviceID") == 0)
-                       deviceid = (char *)g_variant_get_string(key_value, NULL);
-               else if (g_strcmp0(key, "Address") == 0)
-                       addr = (char *)g_variant_get_string(key_value, NULL);
-               else if (g_strcmp0(key, "DeviceType") == 0)
-                       device_type = g_variant_get_uint16(key_value);
-               else if (g_strcmp0(key, "Port") == 0)
-                       port = g_variant_get_uint16(key_value);
-               else if (g_strcmp0(key, "SecurePort") == 0)
-                       sec_port = g_variant_get_uint16(key_value);
-               else if (g_strcmp0(key, "ModelName") == 0)
-                       model_name = (char *)g_variant_get_string(key_value, NULL);
-               else if (g_strcmp0(key, "DeviceName") == 0)
-                       device_name = (char *)g_variant_get_string(key_value, NULL);
-               else if (g_strcmp0(key, "PlatformVer") == 0)
-                       platform_ver = (char *)g_variant_get_string(key_value, NULL);
-               else if (g_strcmp0(key, "VendorID") == 0)
-                       vendor_id = (char *)g_variant_get_string(key_value, NULL);
-               else if (g_strcmp0(key, "Profile") == 0)
-                       profile = (char *)g_variant_get_string(key_value, NULL);
-       }
-
-       if (deviceid == NULL || addr == NULL)
-               return MDG_ERROR_NO_DATA;
-       /* LCOV_EXCL_STOP */
-
-       *device = (mdg_device_h)create_device_handle(deviceid, addr, device_type, port, sec_port,
-                               model_name, device_name, platform_ver, vendor_id, profile);
-
-       g_variant_iter_free(iter);
-
-       return ret;
-}
-
-/* group merge */
-EXPORT_API int mdg_group_merge(mdg_h hadnle,
-       mdg_group_h dest_group, mdg_group_h src_group)
-{
-       int ret = MDG_ERROR_NONE;
-
-       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
-
-       NOTUSED(dest_group);
-       NOTUSED(src_group);
+       *device = mdg_get_device_from_variant(va);
 
        return ret;
 }
@@ -649,17 +364,13 @@ EXPORT_API int mdg_group_delete(mdg_h handle, mdg_group_h group)
 
        mdg_manager_s *_handle = handle;
        mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
+       CHECK_HANDLE_IS_VALID(handle);
 
        mdg_group_s *grp = (mdg_group_s *)group;
        mdg_check_null_ret_error("grp", grp, MDG_ERROR_INVALID_PARAMETER);
 
-       group_call_delete_sync(_handle->group_proxy, grp->group_name, &ret, NULL,
-                                                  &error);
-       if (error) {
-               _ERR("Failed DBus call [%s]", error->message);
-               g_error_free(error);
-               ret = MDG_ERROR_IO_ERROR;
-       }
+       /* create group to daemon using gdbus */
+       group_call_delete_sync(_handle->group_proxy, grp->group_name, &ret, NULL, &error);
 
        return ret;
 }
@@ -681,7 +392,7 @@ EXPORT_API int mdg_group_get_member_devices(mdg_h handle,
 
 EXPORT_API int mdg_group_invite_device(mdg_h handle,
        mdg_group_h group, mdg_device_h device, char *PIN,
-       mdg_group_invite_device_result_cb result_cb, void *user_data)
+       mdg_group_invite_device_finish_cb finish_cb, void *user_data)
 {
        int ret = MDG_ERROR_NONE;
        GError *error = NULL;
@@ -690,6 +401,7 @@ EXPORT_API int mdg_group_invite_device(mdg_h handle,
 
        mdg_manager_s *_handle = handle;
        mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
+       CHECK_HANDLE_IS_VALID(handle);
 
        mdg_group_s *grp = (mdg_group_s *)group;
        mdg_check_null_ret_error("grp", grp, MDG_ERROR_INVALID_PARAMETER);
@@ -697,24 +409,18 @@ EXPORT_API int mdg_group_invite_device(mdg_h handle,
        mdg_device_s *dev = (mdg_device_s *)device;
        mdg_check_null_ret_error("dev", dev, MDG_ERROR_INVALID_PARAMETER);
 
-       _handle->device_invite_result_cb.result_cb = result_cb;
-       _handle->device_invite_result_cb.user_data = user_data;
+       _handle->device_invite_finish_cb.finish_cb = finish_cb;
+       _handle->device_invite_finish_cb.user_data = user_data;
 
-       /* Now, for the sake of convenience, we change 'mdg_group_invite_device' to
-          'group_call_invite_sync'. */
-#if 0
-       group_call_device_invite_sync(group_proxy, dev->device_id, PIN, &ret, NULL, &error);
-#else
-       group_call_invite_sync(_handle->group_proxy, grp->group_name, dev->device_id, PIN,
+       group_call_invite_device_sync(_handle->group_proxy, grp->group_name, dev->device_id, PIN,
                &ret, NULL, &error);
-#endif
 
        return ret;
 }
 
 EXPORT_API int mdg_group_eject_device(mdg_h handle,
        mdg_group_h group, mdg_device_h device,
-       mdg_group_eject_device_result_cb result_cb, void *user_data)
+       mdg_group_eject_device_finish_cb finish_cb, void *user_data)
 {
        int ret = MDG_ERROR_NONE;
        GError *error = NULL;
@@ -723,6 +429,7 @@ EXPORT_API int mdg_group_eject_device(mdg_h handle,
 
        mdg_manager_s *_handle = handle;
        mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
+       CHECK_HANDLE_IS_VALID(handle);
 
        mdg_device_s *dev = (mdg_device_s *)device;
        mdg_check_null_ret_error("dev", dev, MDG_ERROR_INVALID_PARAMETER);
@@ -730,17 +437,11 @@ EXPORT_API int mdg_group_eject_device(mdg_h handle,
        mdg_group_s *grp = (mdg_group_s *)group;
        mdg_check_null_ret_error("grp", grp, MDG_ERROR_INVALID_PARAMETER);
 
-       _handle->device_eject_result_cb.result_cb = result_cb;
-       _handle->device_eject_result_cb.user_data = user_data;
+       _handle->device_eject_finish_cb.finish_cb = finish_cb;
+       _handle->device_eject_finish_cb.user_data = user_data;
 
-       /* Now, for the sake of convenience, we change 'mdg_device_eject' to
-         'group_call_eject_sync'. */
-#if 0
-       group_call_device_eject_sync(group_proxy, dev->device_id, &ret, NULL, &error);
-#else
-       group_call_eject_sync(_handle->group_proxy, grp->group_name, dev->device_id, &ret,
+       group_call_eject_device_sync(_handle->group_proxy, grp->group_name, dev->device_id, &ret,
                NULL, &error);
-#endif
 
        return ret;
 }
@@ -763,41 +464,28 @@ EXPORT_API int mdg_group_info_create(mdg_group_h* group)
        return ret;
 }
 
-EXPORT_API int mdg_group_info_clone(mdg_group_h target,
+EXPORT_API int mdg_group_info_clone(mdg_group_h *target,
        mdg_group_h source)
 {
        int ret = MDG_ERROR_NONE;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
 
-       mdg_group_s * dst = (mdg_group_s *)target;
-       mdg_check_null_ret_error("target", target, MDG_ERROR_INVALID_PARAMETER);
-
        mdg_group_s * src = (mdg_group_s *)source;
        mdg_check_null_ret_error("source", source, MDG_ERROR_INVALID_PARAMETER);
 
-       ret  = mdg_group_info_create(&target);
-       if (MDG_ERROR_NONE != ret) {
-               /* LCOV_EXCL_START */
-               _ERR("mdg_group_info_create() Failed(%d)", ret);
-               return ret;
-               /* LCOV_EXCL_STOP */
-       }
-
-       if (src->uri_path)
-               dst->uri_path = g_strdup(src->uri_path);
+       *target = (mdg_group_s *)g_malloc0(sizeof(mdg_group_s));
+       mdg_check_null_ret_error("target", target, MDG_ERROR_INVALID_PARAMETER);
+       mdg_group_s *dst = *target;
 
        if (src->device_id)
                dst->device_id = g_strdup(src->device_id);
 
-       if (src->group_name)
-               dst->group_name = g_strdup(src->group_name);
-
        if (src->host_addr)
                dst->host_addr = g_strdup(src->host_addr);
 
-       if (src->resource_type)
-               dst->resource_type = g_strdup(src->resource_type);
+       if (src->group_name)
+               dst->group_name = g_strdup(src->group_name);
 
        dst->type = src->type;
 
@@ -813,64 +501,57 @@ EXPORT_API int mdg_group_info_destroy(mdg_group_h data)
        mdg_group_s * group = (mdg_group_s *)data;
        mdg_check_null_ret_error("group", group, MDG_ERROR_INVALID_PARAMETER);
 
-       if (group->uri_path) {
-               g_free(group->uri_path);
-               group->uri_path = NULL;
-       }
        if (group->device_id) {
                g_free(group->device_id);
                group->device_id = NULL;
        }
-       if (group->group_name) {
-               g_free(group->group_name);
-               group->group_name = NULL;
-       }
        if (group->host_addr) {
-               g_free((mdg_group_s *)group->host_addr);
+               g_free(group->host_addr);
                group->host_addr = NULL;
        }
-       if (group->resource_type) {
-               g_free((mdg_group_s *)group->resource_type);
-               group->resource_type = NULL;
+       if (group->group_name) {
+               g_free(group->group_name);
+               group->group_name = NULL;
        }
+
        g_free(group);
        group = NULL;
 
        return ret;
 }
 
-EXPORT_API int mdg_group_info_get_type(mdg_group_h group,
-       mdg_group_type_e *type)
+EXPORT_API int mdg_group_info_get_device_id(
+       mdg_group_h group, char **device_id)
 {
        int ret = MDG_ERROR_NONE;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
 
-       *type = ((mdg_group_s *)group)->type;
+       *device_id = g_strdup(((mdg_group_s *)group)->device_id);
 
        return ret;
 }
 
-EXPORT_API int mdg_group_info_get_resource_type(
-       mdg_group_h group, char **resource_type)
+EXPORT_API int mdg_group_info_get_host_addr(
+       mdg_group_h group, char **host_addr)
 {
        int ret = MDG_ERROR_NONE;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
 
-       *resource_type = g_strdup(((mdg_group_s *)group)->resource_type);
+       *host_addr = g_strdup(((mdg_group_s *)group)->host_addr);
 
        return ret;
 }
 
-EXPORT_API int mdg_group_info_get_uri_path(
-       mdg_group_h group, char **uri_path)
+EXPORT_API int mdg_group_info_get_type(mdg_group_h group,
+       mdg_group_type_e *type)
 {
        int ret = MDG_ERROR_NONE;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
 
-       *uri_path = g_strdup(((mdg_group_s *)group)->uri_path);
+       *type = ((mdg_group_s *)group)->type;
 
        return ret;
 }
@@ -887,63 +568,47 @@ EXPORT_API int mdg_group_info_get_name(
        return ret;
 }
 
-EXPORT_API int mdg_group_info_get_host_addr
-       (mdg_group_h group, char **host_addr)
+EXPORT_API int mdg_device_info_clone(mdg_device_h *target,
+       mdg_device_h source)
 {
        int ret = MDG_ERROR_NONE;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
 
-       *host_addr = g_strdup(((mdg_group_s *)group)->host_addr);
-
-       return ret;
-}
+       mdg_device_s * src = (mdg_device_s *)source;
+       mdg_check_null_ret_error("source", source, MDG_ERROR_INVALID_PARAMETER);
 
-EXPORT_API int mdg_device_info_create(mdg_device_h* device)
-{
-       int ret = MDG_ERROR_NONE;
+       *target = (mdg_device_s *)g_malloc0(sizeof(mdg_device_s));
+       mdg_check_null_ret_error("target", target, MDG_ERROR_INVALID_PARAMETER);
+       mdg_device_s *dst = *target;
 
-       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
+       if (src->device_id)
+               dst->device_id = g_strdup(src->device_id);
 
-       mdg_device_h _device = g_malloc0(sizeof(mdg_device_s));
-       if (NULL == device) {
-               /* LCOV_EXCL_START */
-               _ERR("Memory allocation Failed(%d)", errno);
-               return MDG_ERROR_OUT_OF_MEMORY;
-               /* LCOV_EXCL_STOP */
-       }
-       *device = _device;
+       if (src->addr)
+               dst->addr = g_strdup(src->addr);
 
-       return ret;
-}
+       dst->port = src->port;
+       dst->secure_port = src->secure_port;
+       dst->conn_type = src->conn_type;
 
-EXPORT_API int mdg_device_info_clone(mdg_device_h target,
-       mdg_device_h source)
-{
-       int ret = MDG_ERROR_NONE;
+       if (src->model_name)
+               dst->model_name = g_strdup(src->model_name);
 
-       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
+       if (src->device_name)
+               dst->device_name = g_strdup(src->device_name);
 
-       mdg_device_s *dst = (mdg_device_s *)target;
-       mdg_check_null_ret_error("target", target, MDG_ERROR_INVALID_PARAMETER);
+       if (src->platform_ver)
+               dst->platform_ver = g_strdup(src->platform_ver);
 
-       mdg_device_s *src = (mdg_device_s *)source;
-       mdg_check_null_ret_error("source", source, MDG_ERROR_INVALID_PARAMETER);
+       if (src->vendor_id)
+               dst->vendor_id = g_strdup(src->vendor_id);
 
-       ret  = mdg_device_info_create(&target);
-       if (MDG_ERROR_NONE != ret) {
-               /* LCOV_EXCL_START */
-               _ERR("mdg_device_info_create() Failed(%d)", ret);
-               return ret;
-               /* LCOV_EXCL_STOP */
-       }
+       if (src->profile)
+               dst->profile = g_strdup(src->profile);
 
-       if (src->device_id)
-               dst->device_id = g_strdup(src->device_id);
-       if (src->ip)
-               dst->ip = g_strdup(src->ip);
-       if (src->device_type)
-               dst->device_type = src->device_type;
+       dst->is_invited = src->is_invited;
+       dst->type = src->type;
 
        return ret;
 }
@@ -961,9 +626,35 @@ EXPORT_API int mdg_device_info_destroy(mdg_device_h data)
                g_free(device->device_id);
                device->device_id = NULL;
        }
-       if (device->ip) {
-               g_free(device->ip);
-               device->ip = NULL;
+
+       if (device->addr) {
+               g_free(device->addr);
+               device->addr = NULL;
+       }
+
+       if (device->model_name) {
+               g_free(device->model_name);
+               device->model_name = NULL;
+       }
+
+       if (device->device_name) {
+               g_free(device->device_name);
+               device->device_name = NULL;
+       }
+
+       if (device->platform_ver) {
+               g_free(device->platform_ver);
+               device->platform_ver = NULL;
+       }
+
+       if (device->vendor_id) {
+               g_free(device->vendor_id);
+               device->vendor_id = NULL;
+       }
+
+       if (device->profile) {
+               g_free(device->profile);
+               device->profile = NULL;
        }
 
        g_free(device);
@@ -982,28 +673,40 @@ EXPORT_API int mdg_device_info_get_device_id(
        *device_id = g_strdup(((mdg_device_s *)device)->device_id);
 
        return ret;
-
 }
-EXPORT_API int mdg_device_info_get_ip(
-       mdg_device_h device, char **ip)
+
+EXPORT_API int mdg_device_info_get_addr(
+       mdg_device_h device, char **addr)
 {
        int ret = MDG_ERROR_NONE;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
 
-       *ip = g_strdup(((mdg_device_s *)device)->ip);
+       *addr = g_strdup(((mdg_device_s *)device)->addr);
 
        return ret;
+}
 
+EXPORT_API int mdg_device_info_get_port(
+       mdg_device_h device, int *port)
+{
+       int ret = MDG_ERROR_NONE;
+
+       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
+
+       *port = (((mdg_device_s *)device)->port);
+
+       return ret;
 }
-EXPORT_API int mdg_device_info_get_device_type(
-       mdg_device_h device, mdg_device_type_e *device_type)
+
+EXPORT_API int mdg_device_info_get_secure_port(
+       mdg_device_h device, int *secure_port)
 {
        int ret = MDG_ERROR_NONE;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
 
-       *device_type = ((mdg_device_s *)device)->device_type;
+       *secure_port = (((mdg_device_s *)device)->secure_port);
 
        return ret;
 }
@@ -1020,61 +723,104 @@ EXPORT_API int mdg_device_info_get_model_name(
        return ret;
 }
 
-EXPORT_API int mdg_request_create_group(mdg_h handle,
-       mdg_device_h device, char *group_name, mdg_request_result_cb cb,
-       void *user_data)
+EXPORT_API int mdg_device_info_get_device_name(
+       mdg_device_h device, char **device_name)
 {
        int ret = MDG_ERROR_NONE;
-       GError *error = NULL;
 
-       NOTUSED(cb);
-       NOTUSED(user_data);
+       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
+
+       *device_name = g_strdup(((mdg_device_s *)device)->device_name);
+
+       return ret;
+}
+
+EXPORT_API int mdg_device_info_get_platform_ver(
+       mdg_device_h device, char **platform_ver)
+{
+       int ret = MDG_ERROR_NONE;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
 
-       mdg_manager_s *_handle = handle;
-       mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
+       *platform_ver = g_strdup(((mdg_device_s *)device)->platform_ver);
 
-       mdg_device_s *dev = (mdg_device_s *)device;
-       mdg_check_null_ret_error("device", device, MDG_ERROR_INVALID_PARAMETER);
-       mdg_check_null_ret_error("group_name", group_name,
-               MDG_ERROR_INVALID_PARAMETER);
+       return ret;
+}
 
-       _DBG("Device id : %s", dev->device_id);
+EXPORT_API int mdg_device_info_get_vendor_id(
+       mdg_device_h device, char **vendor_id)
+{
+       int ret = MDG_ERROR_NONE;
 
-       group_call_request_create_group_sync(_handle->group_proxy, dev->device_id,
-               group_name, &ret, NULL, &error);
+       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
+
+       *vendor_id = g_strdup(((mdg_device_s *)device)->vendor_id);
 
        return ret;
 }
 
-EXPORT_API int mdg_request_join_group(mdg_h handle, mdg_group_h group,
-       mdg_request_result_cb callback, void *user_data)
+EXPORT_API int mdg_device_info_get_profile(
+       mdg_device_h device, char **profile)
 {
        int ret = MDG_ERROR_NONE;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
 
-       NOTUSED(handle);
-       NOTUSED(group);
-       NOTUSED(callback);
-       NOTUSED(user_data);
+       *profile = g_strdup(((mdg_device_s *)device)->profile);
 
        return ret;
 }
 
-EXPORT_API int mdg_request_leave_group (mdg_h handle,
-       mdg_group_h group, mdg_request_result_cb callback, void *user_data)
+EXPORT_API int mdg_device_info_is_invited(
+       mdg_device_h device, bool *is_invited)
 {
        int ret = MDG_ERROR_NONE;
 
        CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
 
-       NOTUSED(handle);
-       NOTUSED(group);
-       NOTUSED(callback);
+       *is_invited = ((mdg_device_s *)device)->is_invited;
+
+       return ret;
+}
+
+EXPORT_API int mdg_device_info_get_type(
+       mdg_device_h device, mdg_device_type_e *type)
+{
+       int ret = MDG_ERROR_NONE;
+
+       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
+
+       *type = ((mdg_device_s *)device)->type;
+
+       return ret;
+}
+
+EXPORT_API int mdg_request_create_group(mdg_h handle,
+       mdg_device_h device, char *group_name, mdg_request_result_cb cb,
+       void *user_data)
+{
+       int ret = MDG_ERROR_NONE;
+       GError *error = NULL;
+
+       NOTUSED(cb);
        NOTUSED(user_data);
 
+       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
+
+       mdg_manager_s *_handle = handle;
+       mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
+       CHECK_HANDLE_IS_VALID(handle);
+
+       mdg_device_s *dev = (mdg_device_s *)device;
+       mdg_check_null_ret_error("device", device, MDG_ERROR_INVALID_PARAMETER);
+       mdg_check_null_ret_error("group_name", group_name,
+               MDG_ERROR_INVALID_PARAMETER);
+
+       _DBG("Device id : %s", dev->device_id);
+
+       group_call_request_create_group_sync(_handle->group_proxy, dev->device_id,
+               group_name, &ret, NULL, &error);
+
        return ret;
 }
 
@@ -1092,6 +838,7 @@ EXPORT_API int mdg_request_invite_device(mdg_h handle,
 
        mdg_manager_s *_handle = handle;
        mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
+       CHECK_HANDLE_IS_VALID(handle);
 
        mdg_group_s *grp = (mdg_group_s *)group;
        mdg_check_null_ret_error("group", group, MDG_ERROR_INVALID_PARAMETER);
@@ -1128,6 +875,7 @@ EXPORT_API int mdg_request_eject_device(mdg_h handle,
 
        mdg_manager_s *_handle = handle;
        mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
+       CHECK_HANDLE_IS_VALID(handle);
 
        mdg_group_s *grp = (mdg_group_s *)group;
        mdg_check_null_ret_error("group", group, MDG_ERROR_INVALID_PARAMETER);
@@ -1150,20 +898,6 @@ EXPORT_API int mdg_request_eject_device(mdg_h handle,
        return ret;
 }
 
-EXPORT_API int mdg_request_delete_group(mdg_h handle,
-       mdg_group_h group, mdg_request_result_cb cb, void *user_data)
-{
-       int ret = MDG_ERROR_NONE;
-
-       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
-
-       NOTUSED(handle);
-       NOTUSED(group);
-       NOTUSED(cb);
-       NOTUSED(user_data);
-       return ret;
-}
-
 EXPORT_API int mdg_request_result_callback(mdg_h handle,
        mdg_request_result_cb result_cb, void *user_data)
 {
@@ -1179,65 +913,3 @@ EXPORT_API int mdg_request_result_callback(mdg_h handle,
 
        return ret;
 }
-
-EXPORT_API int mdg_device_monitor_start(mdg_h handle,
-                                         mdg_device_monitor_result_cb cb, void *user_data)
-{
-       int ret = MDG_ERROR_NONE;
-       GError *error = NULL;
-
-       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
-
-       mdg_manager_s *_handle = handle;
-       mdg_check_null_ret_error("handle", handle,
-                                                                  MDG_ERROR_INVALID_PARAMETER);
-
-       group_call_start_invited_device_monitor_sync(_handle->group_proxy, 1, &ret,
-                                                        NULL, &error);
-       if (ret != MDG_ERROR_NONE) {
-               _ERR("Failed to start monitor");
-               return ret;
-       } else if (error) {
-               _ERR("Failed DBus call [%s]", error->message);
-               g_error_free(error);
-               ret = MDG_ERROR_IO_ERROR;
-       }
-
-       _handle->monitor_result_cb.cb = cb;
-       _handle->monitor_result_cb.user_data = user_data;
-
-       return ret;
-}
-
-EXPORT_API int mdg_device_monitor_stop(mdg_h handle)
-{
-       int ret = MDG_ERROR_NONE;
-       GError *error = NULL;
-
-       CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
-
-       mdg_manager_s *_handle = handle;
-       mdg_check_null_ret_error("handle", handle,
-                                                                  MDG_ERROR_INVALID_PARAMETER);
-
-       if (_handle->monitor_result_cb.cb == NULL) {
-               _ERR("Monitor is not started");
-               return MDG_ERROR_NOT_STARTED;
-       }
-
-       group_call_start_invited_device_monitor_sync(_handle->group_proxy, 0, &ret,
-                                                        NULL, &error);
-       if (ret != MDG_ERROR_NONE) {
-               _ERR("Failed to stop monitor");
-               return ret;
-       } else if (error) {
-               _ERR("Failed DBus call [%s]", error->message);
-               g_error_free(error);
-               ret = MDG_ERROR_IO_ERROR;
-       }
-
-       _handle->monitor_result_cb.cb = NULL;
-       _handle->monitor_result_cb.user_data = NULL;
-
-       return ret;
-}
index 1f59604..b7a250f 100755 (executable)
 #include <mdg_gdbus.h>
 #include <mdg_private.h>
 
-#define MDG_DBUS_SERVICE "org.tizen.mdg" /**< For mdg dbus */
-#define MDG_DBUS_GROUP_PATH "/org/tizen/mdg/group" /**< For group dbus */
-#define MDG_DBUS_ENABLER_PATH "/org/tizen/mdg/enabler" /**< dbus auto-activation */
-
 /* LCOV_EXCL_START */
-static void __group_found_cb(Group *object, GVariant *va, gpointer user_data)
+static void __event_cb(Group *object,
+       gint event_type, gint ret, GVariant *va, gpointer user_data)
 {
-       GVariantIter *iter = NULL;
-       const gchar *key;
-       GVariant *key_value = NULL;
-       mdg_group_s *group = NULL;
-       char *uri_path = NULL;
-       char *device_id = NULL;
-       char *group_name = NULL;
-       char *host_addr = NULL;
-       char *resource_type = NULL;
-       mdg_group_type_e type = MDG_GROUP_TYPE_ERROR;
-
        NOTUSED(object);
-
-       mdg_manager_s *handle = user_data;
        mdg_check_null_ret("user_data", user_data);
 
-       g_variant_get(va, "a{sv}", &iter);
-       while (g_variant_iter_loop(iter, "{sv}", &key, &key_value)) {
-               if (g_strcmp0(key, "URI") == 0)
-                       uri_path = (char *)g_variant_get_string(key_value, NULL);
-               else if (g_strcmp0(key, "DeviceID") == 0)
-                       device_id = (char *)g_variant_get_string(key_value, NULL);
-               else if (g_strcmp0(key, "GroupName") == 0)
-                       group_name = (char *)g_variant_get_string(key_value, NULL);
-               else if (g_strcmp0(key, "HostAddress") == 0)
-                       host_addr = (char *)g_variant_get_string(key_value, NULL);
-               else if (g_strcmp0(key, "GroupDeviceType") == 0)
-                       resource_type = (char *)g_variant_get_string(key_value, NULL);
-               else if (g_strcmp0(key, "GroupType") == 0)
-                       type = g_variant_get_int32(key_value);
-       }
-
-       g_variant_iter_free(iter);
-
-       group = create_group_handle(uri_path, device_id, group_name, host_addr,
-               resource_type, type);
-       if (handle->group_found_cb.found_cb)
-               handle->group_found_cb.found_cb(type, group, handle->group_found_cb.user_data);
-}
-
-static void _group_find_finish_cb(Group *object, gint ret, gpointer user_data)
-{
-       NOTUSED(object);
-
        mdg_manager_s *handle = user_data;
-       mdg_check_null_ret("user_data", user_data);
-
-       if (handle->group_find_finish_cb.finish_cb)
-               handle->group_find_finish_cb.finish_cb(ret,
-                       handle->group_find_finish_cb.user_data);
-}
 
-static void __device_found_cb(Group *object, gint count, GVariant *va,
-       gpointer user_data)
-{
-       GVariantIter *iter = NULL;
-       GVariantIter *iter_row = NULL;
-       const gchar *key;
-       GVariant *key_value;
-       mdg_device_s *device = NULL;
+       _BEGIN();
 
-       NOTUSED(object);
+       _DBG("Event occured : %d", event_type);
 
-       mdg_manager_s *handle = user_data;
-       mdg_check_null_ret("user_data", user_data);
+       if (event_type == MDG_EVENT_GROUP_FOUND) {
+               mdg_group_s *group = NULL;
 
-       g_variant_get(va, "aa{sv}", &iter);
-       while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
-               char *device_id = NULL;
-               char *ip = NULL;
-               int device_type = MDG_DEVICE_TYPE_ERROR;
-               int port = -1;
-               int sec_port = -1;
-               char *model_name = NULL;
-               char *device_name = NULL;
-               char *platform_ver = NULL;
-               char *vendor_id = NULL;
-               char *profile = NULL;
-
-               while (g_variant_iter_loop(iter_row, "{sv}", &key, &key_value)) {
-                       if (g_strcmp0(key, "DeviceID") == 0)
-                               device_id = (char *)g_variant_get_string(key_value, NULL);
-                       else if (g_strcmp0(key, "Address") == 0)
-                               ip = (char *)g_variant_get_string(key_value, NULL);
-                       else if (g_strcmp0(key, "DeviceType") == 0)
-                               device_type = g_variant_get_uint16(key_value);
-                       else if (g_strcmp0(key, "Port") == 0)
-                               port = g_variant_get_uint16(key_value);
-                       else if (g_strcmp0(key, "SecurePort") == 0)
-                               sec_port = g_variant_get_uint16(key_value);
-                       else if (g_strcmp0(key, "ModelName") == 0)
-                               model_name = (char *)g_variant_get_string(key_value, NULL);
-                       else if (g_strcmp0(key, "DeviceName") == 0)
-                               device_name = (char *)g_variant_get_string(key_value, NULL);
-                       else if (g_strcmp0(key, "PlatformVer") == 0)
-                               platform_ver = (char *)g_variant_get_string(key_value, NULL);
-                       else if (g_strcmp0(key, "VendorID") == 0)
-                               vendor_id = (char *)g_variant_get_string(key_value, NULL);
-                       else if (g_strcmp0(key, "Profile") == 0)
-                               profile = (char *)g_variant_get_string(key_value, NULL);
+               group = mdg_get_group_from_variant(va);
+               if (handle->group_found_cb.found_cb) {
+                       handle->group_found_cb.found_cb(group->type, group,
+                               handle->group_found_cb.user_data);
+               } else {
+                       _ERR("The callback not exists");
                }
-               g_variant_iter_free(iter_row);
-
-               device = create_device_handle(device_id, ip, device_type, port,
-                                       sec_port, model_name, device_name, platform_ver, vendor_id, profile);
-               if (handle->device_found_cb.found_cb)
-                       handle->device_found_cb.found_cb(device, handle->device_found_cb.user_data);
-       }
-       g_variant_iter_free(iter);
-}
-
-static void _device_find_finish_cb(Group *object, gint ret, gpointer user_data)
-{
-       NOTUSED(object);
-
-       mdg_manager_s *handle = user_data;
-       mdg_check_null_ret("user_data", user_data);
-
-       if (handle->device_find_finish_cb.finish_cb)
-               handle->device_find_finish_cb.finish_cb(ret,
-                       handle->device_find_finish_cb.user_data);
-}
-
-static void __mowned_device_found_cb(Group *object, gint count, GVariant *va,
-       gpointer user_data)
-{
-       GVariantIter *iter = NULL;
-       GVariantIter *iter_row = NULL;
-       const gchar *key;
-       GVariant *key_value;
-       mdg_device_s *device = NULL;
-
-       NOTUSED(object);
-
-       mdg_manager_s *handle = user_data;
-       mdg_check_null_ret("user_data", user_data);
-
-       g_variant_get(va, "aa{sv}", &iter);
-       while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
-               char *device_id = NULL;
-               char *ip = NULL;
-               int device_type = MDG_DEVICE_TYPE_ERROR;
-               int port = -1;
-               int sec_port = -1;
-               char *model_name = NULL;
-               char *device_name = NULL;
-               char *platform_ver = NULL;
-               char *vendor_id = NULL;
-               char *profile = NULL;
-
-               while (g_variant_iter_loop(iter_row, "{sv}", &key, &key_value)) {
-                       if (g_strcmp0(key, "DeviceID") == 0)
-                               device_id = (char *)g_variant_get_string(key_value, NULL);
-                       else if (g_strcmp0(key, "Address") == 0)
-                               ip = (char *)g_variant_get_string(key_value, NULL);
-                       else if (g_strcmp0(key, "DeviceType") == 0)
-                               device_type = g_variant_get_uint16(key_value);
-                       else if (g_strcmp0(key, "Port") == 0)
-                               port = g_variant_get_uint16(key_value);
-                       else if (g_strcmp0(key, "SecurePort") == 0)
-                               sec_port = g_variant_get_uint16(key_value);
-                       else if (g_strcmp0(key, "ModelName") == 0)
-                               model_name = (char *)g_variant_get_string(key_value, NULL);
-                       else if (g_strcmp0(key, "DeviceName") == 0)
-                               device_name = (char *)g_variant_get_string(key_value, NULL);
-                       else if (g_strcmp0(key, "PlatformVer") == 0)
-                               platform_ver = (char *)g_variant_get_string(key_value, NULL);
-                       else if (g_strcmp0(key, "VendorID") == 0)
-                               vendor_id = (char *)g_variant_get_string(key_value, NULL);
-                       else if (g_strcmp0(key, "Profile") == 0)
-                               profile = (char *)g_variant_get_string(key_value, NULL);
+       } else if (event_type == MDG_EVENT_GROUP_FIND_FINISH) {
+               if (handle->group_find_finish_cb.finish_cb) {
+                       handle->group_find_finish_cb.finish_cb(ret,
+                               handle->group_find_finish_cb.user_data);
+               } else {
+                       _ERR("The callback not exists");
+               }
+       } else if (event_type == MDG_EVENT_DEVICE_FOUND) {
+               mdg_device_s *device = NULL;
+
+               device = mdg_get_device_from_variant(va);
+               if (handle->device_found_cb.found_cb) {
+                       handle->device_found_cb.found_cb(device,
+                               handle->device_found_cb.user_data);
+               } else {
+                       _ERR("The callback not exists");
+               }
+       } else if (event_type == MDG_EVENT_DEVICE_FIND_FINISH) {
+               if (handle->device_find_finish_cb.finish_cb) {
+                       handle->device_find_finish_cb.finish_cb(ret,
+                               handle->device_find_finish_cb.user_data);
+               } else {
+                       _ERR("The callback not exists");
+               }
+       } else if (event_type == MDG_EVENT_INVITE_DEVICE_FINISH) {
+               if (handle->device_invite_finish_cb.finish_cb) {
+                       handle->device_invite_finish_cb.finish_cb(ret,
+                               handle->device_invite_finish_cb.user_data);
+               } else {
+                       _ERR("The callback not exists");
+               }
+       } else if (event_type == MDG_EVENT_EJECT_DEVICE_FINISH) {
+               if (handle->device_eject_finish_cb.finish_cb) {
+                       handle->device_eject_finish_cb.finish_cb(ret,
+                               handle->device_eject_finish_cb.user_data);
+               } else {
+                       _ERR("The callback not exists");
+               }
+       } else if (event_type == MDG_EVENT_SEND_DATA_FINISH) {
+               if (handle->send_data_finish_cb.finish_cb) {
+                       handle->send_data_finish_cb.finish_cb(ret,
+                               handle->send_data_finish_cb.user_data);
+               } else {
+                       _ERR("The callback not exists");
                }
-               g_variant_iter_free(iter_row);
-
-               device = create_device_handle(device_id, ip, device_type, port,
-                                       sec_port, model_name, device_name, platform_ver, vendor_id, profile);
-               if (handle->mowned_device_found_cb.found_cb)
-                       handle->mowned_device_found_cb.found_cb(device,
-                               handle->mowned_device_found_cb.user_data);
-               destroy_device_handle(device);
-       }
-       g_variant_iter_free(iter);
-}
-
-static void _mowned_device_find_finish_cb(Group *object, gint ret,
-       gpointer user_data)
-{
-       NOTUSED(object);
-
-       mdg_manager_s *handle = user_data;
-       mdg_check_null_ret("user_data", user_data);
-
-       if (handle->mowned_device_find_finish_cb.finish_cb)
-               handle->mowned_device_find_finish_cb.finish_cb(ret,
-                       handle->mowned_device_find_finish_cb.user_data);
-}
-
-static void __device_invite_result_cb(Group *object, gint ret, gpointer user_data)
-{
-       NOTUSED(object);
-
-       mdg_manager_s *handle = user_data;
-       mdg_check_null_ret("user_data", user_data);
-
-       if (handle->device_invite_result_cb.result_cb)
-               handle->device_invite_result_cb.result_cb(ret,
-                       handle->device_invite_result_cb.user_data);
-}
-
-static void __device_eject_result_cb(Group *object, gint ret, gpointer user_data)
-{
-       NOTUSED(object);
-
-       mdg_manager_s *handle = user_data;
-       mdg_check_null_ret("user_data", user_data);
-
-       if (handle->device_eject_result_cb.result_cb)
-               handle->device_eject_result_cb.result_cb(ret,
-                       handle->device_eject_result_cb.user_data);
-}
-
-static void __send_data_finish_cb(Group *object, gchar *resp_data, gint ret,
-       gpointer user_data)
-{
-       NOTUSED(object);
-
-       mdg_manager_s *handle = user_data;
-       mdg_check_null_ret("user_data", user_data);
-
-       if (handle->send_data_finish_cb.finish_cb)
-               handle->send_data_finish_cb.finish_cb(ret, resp_data,
-                       handle->send_data_finish_cb.user_data);
-}
-
-static void __request_result_cb(Group *object, gchar *cmd, gchar *device_id,
-                                       GVariant *arg, gint ret, gpointer user_data)
-{
-       int len, length = 0;
-       unsigned char *data;
-       GVariantIter *iter;
-
-       NOTUSED(object);
-
-       mdg_manager_s *handle = user_data;
-       mdg_check_null_ret("user_data", user_data);
-
-       g_variant_get(arg, "(iay)", &len, &iter);
-
-       data = g_try_malloc0(len + 1);
-       if (data) {
-               data = NULL;
-               len = 0;
        } else {
-               while (g_variant_iter_loop(iter, "y", &data[length]))
-                       length += 1;
-
-               data[length > len ? len : length] = '\0';
-               _DBG("Received result length %d data %s", len, data);
-
-               g_variant_iter_free(iter);
+               _ERR("Unknown Event");
        }
 
-       if (handle->request_result_cb.result_cb)
-               handle->request_result_cb.result_cb(cmd, device_id, data, len, ret,
-                       handle->request_result_cb.user_data);
-
-       g_free(data);
-}
-
-static void __monitor_result_cb(Group *object, gchar *uuid, gchar *group_name,
-                                       gchar *status, gpointer user_data)
-{
-       mdg_device_status_e device_status;
-       mdg_manager_s *handle = user_data;
-       mdg_check_null_ret("user_data", user_data);
-
-       _DBG("Received Monitor Result uuid %s group name %s status %s", uuid,
-                group_name, status);
-
-       if (g_strcmp0(status, "Added") == 0)
-               device_status = MDG_DEVICE_ADDED;
-       else if (g_strcmp0(status, "Removed") == 0)
-               device_status = MDG_DEVICE_REMOVED;
-       else
-               return;
-
-       if (handle->monitor_result_cb.cb)  {
-               handle->monitor_result_cb.cb(uuid, group_name, device_status,
-                                                        handle->monitor_result_cb.user_data);
-       }
+       _END();
 }
 /* LCOV_EXCL_STOP */
 
-
 static int _enabler_proxy_init(mdg_manager_s *handle)
 {
        GError *error = NULL;
@@ -426,27 +201,7 @@ static int _group_proxy_init(mdg_manager_s *handle)
        }
 
        g_signal_connect(handle->group_proxy,
-               "group-found", G_CALLBACK(__group_found_cb), handle);
-       g_signal_connect(handle->group_proxy,
-               "group-find-finish", G_CALLBACK(_group_find_finish_cb), handle);
-       g_signal_connect(handle->group_proxy,
-               "device-found", G_CALLBACK(__device_found_cb), handle);
-       g_signal_connect(handle->group_proxy,
-               "device-find-finish", G_CALLBACK(_device_find_finish_cb), handle);
-       g_signal_connect(handle->group_proxy,
-               "mowned-device-found", G_CALLBACK(__mowned_device_found_cb), handle);
-       g_signal_connect(handle->group_proxy,
-               "mowned-device-find-finish", G_CALLBACK(_mowned_device_find_finish_cb), handle);
-       g_signal_connect(handle->group_proxy,
-               "device-invite-result", G_CALLBACK(__device_invite_result_cb), handle);
-       g_signal_connect(handle->group_proxy,
-               "device-eject-result", G_CALLBACK(__device_eject_result_cb), handle);
-       g_signal_connect(handle->group_proxy,
-               "send-data-finish", G_CALLBACK(__send_data_finish_cb), handle);
-       g_signal_connect(handle->group_proxy,
-               "request-result", G_CALLBACK(__request_result_cb), handle);
-       g_signal_connect(handle->group_proxy,
-               "device-monitor-result", G_CALLBACK(__monitor_result_cb), handle);
+               "event", G_CALLBACK(__event_cb), handle);
 
        return MDG_ERROR_NONE;
 }
@@ -480,8 +235,6 @@ int gdbus_initialize(mdg_manager_s *handle)
        if (handle->enabler_proxy == NULL)
                ret = -1; /* LCOV_EXCL_LINE */
 
-       handle->ca = g_cancellable_new();
-
        return ret;
 }
 
@@ -492,10 +245,6 @@ int gdbus_deinitialize(mdg_manager_s *handle)
        _group_proxy_deinit(handle);
        _enabler_proxy_deinit(handle);
 
-       g_cancellable_cancel(handle->ca);
-       g_object_unref(handle->ca);
-       handle->ca = NULL;
-
        return ret;
 }
 
index 838b2fd..5dcf832 100644 (file)
@@ -25,6 +25,10 @@ extern "C"
 {
 #endif
 
+#define MDG_DBUS_SERVICE "org.tizen.mdg" /**< For mdg dbus */
+#define MDG_DBUS_GROUP_PATH "/org/tizen/mdg/group" /**< For group dbus */
+#define MDG_DBUS_ENABLER_PATH "/org/tizen/mdg/enabler" /**< dbus auto-activation */
+
 int gdbus_initialize(mdg_manager_s *handle);
 int gdbus_deinitialize(mdg_manager_s *handle);
 
index e7535bf..e30676d 100644 (file)
                        <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="local_device" 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">
-                       <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">
+               <signal name="Event">
+                       <arg type="i" name="type" direction="out" />
                        <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>
index e4ccfd6..6bc4beb 100644 (file)
@@ -53,6 +53,7 @@
        }
 #endif
 
+
 /**
  * @brief New group found callback structure
  * @since_tizen 5.0
@@ -90,40 +91,22 @@ typedef struct _device_find_finish_cb_t {
 } device_find_finish_cb_t;
 
 /**
- * @brief New my own device found callback structure
- * @since_tizen 5.0
- */
-typedef struct _mowned_device_found_cb_t {
-       mdg_device_found_cb found_cb; /**< User callback to be called */
-       void *user_data; /**< User data pointer */
-} mowned_device_found_cb_t;
-
-/**
- * @brief Finding my own device done callback structure
- * @since_tizen 5.0
- */
-typedef struct _mowned_device_find_finish_cb_t {
-       mdg_device_find_finish_cb finish_cb; /**< User callback to be called */
-       void *user_data; /**< User data pointer */
-} mowned_device_find_finish_cb_t;
-
-/**
  * @brief Inviting a device done callback structure
  * @since_tizen 5.0
  */
-typedef struct _device_invite_result_cb_t {
-       mdg_group_invite_device_result_cb result_cb; /**< User callback to be called */
+typedef struct _device_invite_finish_cb_t {
+       mdg_group_invite_device_finish_cb finish_cb; /**< User callback to be called */
        void *user_data; /**< User data pointer */
-} device_invite_result_cb_t;
+} device_invite_finish_cb_t;
 
 /**
  * @brief Ejecting the device done callback structure
  * @since_tizen 5.0
  */
-typedef struct _device_eject_result_cb_t {
-       mdg_group_eject_device_result_cb result_cb; /**< User callback to be called */
+typedef struct _device_eject_finish_cb_t {
+       mdg_group_eject_device_finish_cb finish_cb; /**< User callback to be called */
        void *user_data; /**< User data pointer */
-} device_eject_result_cb_t;
+} device_eject_finish_cb_t;
 
 /**
  * @brief Sending data to the device done callback structure
@@ -144,48 +127,38 @@ typedef struct _request_result_cb_t {
 } request_result_cb_t;
 
 /**
- * @brief Sending device monitor result callback structure
- * @since_tizen 5.0
- */
-typedef struct _monitor_result_cb_t {
-       mdg_device_monitor_result_cb cb; /**< User callback to be called */
-       void *user_data; /**< User data pointer */
-} monitor_result_cb_t;
-
-/**
  * @brief The mdg-manager context
  * @since_tizen 5.0
  */
 typedef struct _mdg_manager_s {
-       GCancellable *ca; /**< Cancelable */
-
        Group *group_proxy; /**< To receive signal from cmdgd */
        Enabler *enabler_proxy; /**< Enbler proxy */
        GDBusConnection *system_bus; /**< GDBus System Bus */
+       GSList *channel_cb_list;
 
        group_found_cb_t group_found_cb; /**< When it called after finding a every single group */
        group_find_finish_cb_t group_find_finish_cb; /**< When it called the group finging time is up */
        device_found_cb_t device_found_cb; /**< When it called after finding a every single device */
        device_find_finish_cb_t device_find_finish_cb; /**< When it called the device finging time is up */
-       mowned_device_found_cb_t mowned_device_found_cb; /**< When it called after finding a every single my own device */
-       mowned_device_find_finish_cb_t mowned_device_find_finish_cb; /**< When it called the time of finding my own devices is up */
-       device_invite_result_cb_t device_invite_result_cb; /**< When it called after invinting a device done or timeout */
-       device_eject_result_cb_t device_eject_result_cb; /**< When it called after ejecting the device done or timeout */
+       device_invite_finish_cb_t device_invite_finish_cb; /**< When it called after invinting a device done or timeout */
+       device_eject_finish_cb_t device_eject_finish_cb; /**< When it called after ejecting the device done or timeout */
        send_data_finish_cb_t send_data_finish_cb; /**< When it called after sending the device done or timeout */
        request_result_cb_t request_result_cb; /**< When it called after sending private commands or timeout */
-       monitor_result_cb_t monitor_result_cb; /**< It is called after device status is changed */
 } mdg_manager_s;
 
+#define CHECK_HANDLE_IS_VALID(handle) { \
+       if (g_slist_find (handle_list, handle) == NULL) \
+               return MDG_ERROR_UNKNOWN; \
+}
+
 /**
  * @brief The group structure
  * @since_tizen 5.0
  */
 typedef struct _mdg_group_s {
-       char *uri_path; /**< URI Path for group resource */
        char *device_id; /**< Device ID of the device has this group resource */
-       char *group_name; /**< Group Name (Friendly name) */
        char *host_addr; /**< Host address */
-       char *resource_type; /**< Resource type */
+       char *group_name; /**< Group Name (Friendly name) */
        mdg_group_type_e type; /**< Mine or Remote */
 } mdg_group_s;
 
@@ -195,16 +168,28 @@ typedef struct _mdg_group_s {
  */
 typedef struct _mdg_device_s {
        char *device_id; /**< Device ID */
-       char *ip; /**< Device IP */
-       int device_type; /**< Device Type */
+       char *addr; /**< Device IP */
        int port; /**< Port Number */
-       int sec_port; /**< Secure Port Number */
+       int secure_port; /**< Secure Port Number */
+       unsigned int conn_type; /**< Connection type */
        char *model_name;
        char *device_name;
        char *platform_ver;
        char *vendor_id;
        char *profile;
+       bool is_invited;
+       mdg_device_type_e type; /**< Device Type */
 } mdg_device_s;
 
+typedef enum {
+       MDG_EVENT_GROUP_FOUND = 0,
+       MDG_EVENT_GROUP_FIND_FINISH,
+       MDG_EVENT_DEVICE_FOUND,
+       MDG_EVENT_DEVICE_FIND_FINISH,
+       MDG_EVENT_INVITE_DEVICE_FINISH,
+       MDG_EVENT_EJECT_DEVICE_FINISH,
+       MDG_EVENT_REQUEST_FINISH,
+       MDG_EVENT_SEND_DATA_FINISH,
+} mdg_event_type_e;
 
 #endif /* __TIZEN_NETWORK_COMMON_MDG_PRIVATE_H__ */
index 1593e6c..09d94bd 100755 (executable)
 #include <mdg_debug.h>
 #include <mdg_private.h>
 
-mdg_group_s *create_group_handle(char *uri_path, char *device_id,
-       char *group_name, char *host_addr, char *resource_type, mdg_group_type_e type)
+mdg_group_s *mdg_get_group_from_variant(GVariant *va)
 {
+       char *device_id = NULL;
+       char *host_addr = NULL;
+       char *group_name = NULL;
+       mdg_group_type_e type = MDG_GROUP_TYPE_LOCAL;
+       GVariantIter *iter = NULL;
+       const gchar *key;
+       GVariant *key_value = NULL;
+
        mdg_group_s *group = calloc(1, sizeof(mdg_group_s));
        if (NULL == group) {
-               /* LCOV_EXCL_START */
-               _ERR("Memory allocation failed");
-               goto CREATE_GROUP_HANDLER_ERROR;
-               /* LCOV_EXCL_STOP */
+                       /* LCOV_EXCL_START */
+                       _ERR("Memory allocation failed");
+                       return NULL;
+                       /* LCOV_EXCL_STOP */
+       }
+
+       g_variant_get(va, "a{sv}", &iter);
+       while (g_variant_iter_loop(iter, "{sv}", &key, &key_value)) {
+               if (g_strcmp0(key, "DeviceID") == 0)
+                       device_id = (char *)g_variant_get_string(key_value, NULL);
+               else if (g_strcmp0(key, "HostAddr") == 0)
+                       host_addr = (char *)g_variant_get_string(key_value, NULL);
+               else if (g_strcmp0(key, "GroupName") == 0)
+                       group_name = (char *)g_variant_get_string(key_value, NULL);
+               else if (g_strcmp0(key, "Type") == 0)
+                       type = g_variant_get_int32(key_value);
        }
 
-       group->uri_path = g_strdup(uri_path);
        group->device_id = g_strdup(device_id);
-       group->group_name = g_strdup(group_name);
        group->host_addr = g_strdup(host_addr);
-       group->resource_type = g_strdup(resource_type);
+       group->group_name = g_strdup(group_name);
        group->type = type;
 
-       if (!group->uri_path || !group->device_id ||
-               !group->host_addr || !group->resource_type) {
-               /* LCOV_EXCL_START */
-               _ERR("Memory allocation failed");
-               goto CREATE_GROUP_HANDLER_ERROR;
-               /* LCOV_EXCL_STOP */
-       }
-       return group;
+       g_variant_iter_free(iter);
 
-CREATE_GROUP_HANDLER_ERROR:
-       /* LCOV_EXCL_START */
-       if (group) {
-               if (group->uri_path) {
-                       free(group->uri_path);
-                       group->uri_path = NULL;
-               }
-               if (group->device_id) {
-                       free(group->device_id);
-                       group->device_id = NULL;
-               }
-               if (group->group_name) {
-                       free(group->group_name);
-                       group->group_name = NULL;
-               }
-               if (group->host_addr) {
-                       free(group->host_addr);
-                       group->host_addr = NULL;
-               }
-               if (group->resource_type) {
-                       free(group->resource_type);
-                       group->resource_type = NULL;
-               }
-               free(group);
-               group = NULL;
-       }
-       return NULL;
-       /* LCOV_EXCL_STOP */
+       return group;
 }
 
-mdg_device_s *create_device_handle(char *device_id, char *ip,
-       int device_type, int port, int sec_port, char *model_name, char *device_name,
-       char *platform_ver, char *vendor_id, char *profile)
+mdg_device_s *mdg_get_device_from_variant(GVariant *va)
 {
+       char *device_id = NULL;
+       char *addr = NULL;
+       int port;
+       int secure_port;
+       int conn_type;
+       char *model_name = NULL;
+       char *device_name = NULL;
+       char *platform_ver = NULL;
+       char *vendor_id = NULL;
+       char *profile = NULL;
+       bool is_invited;
+       int type = MDG_DEVICE_TYPE_LOCAL;
+       GVariantIter *iter = NULL;
+       const gchar *key;
+       GVariant *key_value = NULL;
+
        mdg_device_s *device = calloc(1, sizeof(mdg_device_s));
        if (NULL == device) {
-               /* LCOV_EXCL_START */
-               _ERR("Memory allocation failed");
-               goto CREATE_DEVICE_HANDLER_ERROR;
-               /* LCOV_EXCL_STOP */
+                       /* LCOV_EXCL_START */
+                       _ERR("Memory allocation failed");
+                       return NULL;
+                       /* LCOV_EXCL_STOP */
+       }
+
+       g_variant_get(va, "a{sv}", &iter);
+       while (g_variant_iter_loop(iter, "{sv}", &key, &key_value)) {
+               if (g_strcmp0(key, "DeviceID") == 0)
+                       device_id = (char *)g_variant_get_string(key_value, NULL);
+               else if (g_strcmp0(key, "Addr") == 0)
+                       addr = (char *)g_variant_get_string(key_value, NULL);
+               else if (g_strcmp0(key, "Port") == 0)
+                       port = g_variant_get_int32(key_value);
+               else if (g_strcmp0(key, "SecurePort") == 0)
+                       secure_port = g_variant_get_int32(key_value);
+               else if (g_strcmp0(key, "ConnType") == 0)
+                       conn_type = g_variant_get_int32(key_value);
+               else if (g_strcmp0(key, "ModelName") == 0)
+                       model_name = (char *)g_variant_get_string(key_value, NULL);
+               else if (g_strcmp0(key, "DeviceName") == 0)
+                       device_name = (char *)g_variant_get_string(key_value, NULL);
+               else if (g_strcmp0(key, "PlatformVer") == 0)
+                       platform_ver = (char *)g_variant_get_string(key_value, NULL);
+               else if (g_strcmp0(key, "VendorID") == 0)
+                       vendor_id = (char *)g_variant_get_string(key_value, NULL);
+               else if (g_strcmp0(key, "Profile") == 0)
+                       profile = (char *)g_variant_get_string(key_value, NULL);
+               else if (g_strcmp0(key, "IsInvited") == 0)
+                       is_invited = g_variant_get_int32(key_value);
+               else if (g_strcmp0(key, "Type") == 0)
+                       type = g_variant_get_int32(key_value);
        }
 
        device->device_id = g_strdup(device_id);
-       device->ip = g_strdup(ip);
-       device->device_type = device_type;
+       device->addr = g_strdup(addr);
        device->port = port;
-       device->sec_port = sec_port;
+       device->secure_port = secure_port;
+       device->conn_type = conn_type;
        device->model_name = g_strdup(model_name);
        device->device_name = g_strdup(device_name);
        device->platform_ver = g_strdup(platform_ver);
        device->vendor_id = g_strdup(vendor_id);
        device->profile = g_strdup(profile);
+       device->is_invited = is_invited;
+       device->type = type;
 
-       if (!device->device_id || !device->ip || !device->model_name || !device->device_name ||
-               !device->platform_ver || !device->vendor_id || !device->profile) {
-               /* LCOV_EXCL_START */
-               _ERR("Memory allocation failed");
-               goto CREATE_DEVICE_HANDLER_ERROR;
-               /* LCOV_EXCL_STOP */
-       }
+       g_variant_iter_free(iter);
 
        return device;
-
-CREATE_DEVICE_HANDLER_ERROR:
-       /* LCOV_EXCL_START */
-       if (device) {
-               if (device->device_id) {
-                       free(device->device_id);
-                       device->device_id = NULL;
-               }
-               if (device->model_name) {
-                       free(device->model_name);
-                       device->model_name = NULL;
-               }
-               if (device->device_name) {
-                       free(device->device_name);
-                       device->device_name = NULL;
-               }
-               if (device->platform_ver) {
-                       free(device->platform_ver);
-                       device->platform_ver = NULL;
-               }
-               if (device->vendor_id) {
-                       free(device->vendor_id);
-                       device->vendor_id = NULL;
-               }
-               if (device->profile) {
-                       free(device->profile);
-                       device->profile = NULL;
-               }
-               if (device->ip) {
-                       free(device->ip);
-                       device->ip = NULL;
-               }
-               free(device);
-               device = NULL;
-       }
-       return NULL;
-       /* LCOV_EXCL_STOP */
-}
-
-void destroy_device_handle(mdg_device_s *device)
-{
-       if (NULL == device) {
-               /* LCOV_EXCL_START */
-               _ERR("Memory allocation failed");
-               return;
-               /* LCOV_EXCL_STOP */
-       }
-
-       if (device->device_id) {
-               free(device->device_id);
-               device->device_id = NULL;
-       }
-       if (device->model_name) {
-               free(device->model_name);
-               device->model_name = NULL;
-       }
-       if (device->device_name) {
-               free(device->device_name);
-               device->device_name = NULL;
-       }
-       if (device->platform_ver) {
-               free(device->platform_ver);
-               device->platform_ver = NULL;
-       }
-       if (device->vendor_id) {
-               free(device->vendor_id);
-               device->vendor_id = NULL;
-       }
-       if (device->profile) {
-               free(device->profile);
-               device->profile = NULL;
-       }
-       if (device->ip) {
-               free(device->ip);
-               device->ip = NULL;
-       }
-       free(device);
-       device = NULL;
 }
 
index 56c8843..aaed549 100755 (executable)
@@ -25,12 +25,8 @@ extern "C"
 {
 #endif
 
-mdg_group_s *create_group_handle(char *uri_path, char *device_id,
-       char *group_name, char *host_addr, char *resource_type, mdg_group_type_e type);
-mdg_device_s *create_device_handle(char *device_id, char *ip, int device_type,
-       int port, int sec_port, char *model_name, char *device_name,
-       char *platform_ver, char *vendor_id, char *profile);
-void destroy_device_handle(mdg_device_s *device);
+mdg_device_s *mdg_get_device_from_variant(GVariant *va);
+mdg_group_s *mdg_get_group_from_variant(GVariant *va);
 
 #ifdef __cplusplus
 }
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index bb4bf44..3d807f8
@@ -59,7 +59,6 @@ const char* mdg_error_to_string(mdg_error_e err)
        CASE_TO_STR(MDG_ERROR_PLUGIN_FAIL)
        CASE_TO_STR(MDG_ERROR_ALREADY_IN_PROGRESS)
        CASE_TO_STR(MDG_ERROR_NOT_STARTED)
-       CASE_TO_STR(MDG_ERROR_ALREADY_INITIALIZED)
        default :
                return "MDG_ERROR_UNKNOWN";
        }
@@ -68,7 +67,7 @@ const char* mdg_error_to_string(mdg_error_e err)
 const char *mdg_group_type_to_string(mdg_group_type_e e)
 {
        switch (e) {
-       CASE_TO_STR(MDG_GROUP_TYPE_MINE)
+       CASE_TO_STR(MDG_GROUP_TYPE_LOCAL)
        CASE_TO_STR(MDG_GROUP_TYPE_REMOTE)
        default :
                return "Unknown station type";
@@ -114,6 +113,11 @@ static gboolean __create_init_menu(struct menu_data init_menu[1])
        return TRUE;
 }
 
+void _free_group(gpointer data)
+{
+       mdg_group_info_destroy(data);
+}
+
 void _free_device(gpointer data)
 {
        mdg_device_info_destroy(data);
@@ -150,7 +154,7 @@ int main(int arg, char **argv)
 
 OUT:
        if (found_group_list)
-               g_list_free_full(found_group_list, _free_device);
+               g_list_free_full(found_group_list, _free_group);
        if (found_device_list)
                g_list_free_full(found_device_list, _free_device);
 
index a299e0a..9a5c8ce 100755 (executable)
@@ -30,20 +30,17 @@ mdg_h handle = NULL;
 
 GList *found_group_list;
 GList *found_device_list;
-GList *my_devices_list;
+GList *invited_device_list;
 
 static char groupid[MENU_DATA_SIZE + 1] = "mygroup";
 static char request_groupid[MENU_DATA_SIZE + 1] = "subgroup";
 static char timeout[MENU_DATA_SIZE + 1] = "2";
 static char group_idx[MENU_DATA_SIZE + 1] = "1";
-#if 0
-static char group_idx_a[MENU_DATA_SIZE + 1] = "1";
-static char group_idx_b[MENU_DATA_SIZE + 1] = "2";
-#endif
 static char device_idx[MENU_DATA_SIZE + 1] = "1";
 static char pin[MENU_DATA_SIZE + 1] = "12341234";
 static char message[MENU_DATA_SIZE + 1] = "Hello World!!";
-static char monitor[MENU_DATA_SIZE + 1] = "1";
+static char channel_id[MENU_DATA_SIZE + 1] = "Channel1";
+//static char monitor[MENU_DATA_SIZE + 1] = "1";
 
 static int run_group_find(MManager *mm, struct menu_data *menu);
 static int run_devices_find(MManager *mm, struct menu_data *menu);
@@ -100,25 +97,6 @@ void receive_request_result(char *cmd, char *device_id, unsigned char *arg,
        }
 }
 
-int run_get_my_id(MManager *mm, struct menu_data *menu)
-{
-       msg("Get Device ID of my device");
-
-       int ret;
-       char *uuid;
-       ret = mdg_device_info_get_my_uuid(handle, &uuid);
-
-       if (MDG_ERROR_NONE != ret) {
-               msgr("Failed to Get My Device ID: [%s(0x%X)]", mdg_error_to_string(ret), ret);
-               return RET_FAILURE;
-       }
-
-       msg(" - mdg_device_my_deviceid() ret: [0x%X] [%s]", ret, mdg_error_to_string(ret));
-       msgb("[ID] : [%s]", uuid);
-
-       return RET_SUCCESS;
-}
-
 void _device_eject_result_cb(int result, void *user_data)
 {
        msgb("\rEject Device Complete [%s]", mdg_error_to_string(result));
@@ -127,7 +105,7 @@ void _device_eject_result_cb(int result, void *user_data)
 static int run_device_eject(MManager *mm, struct menu_data *menu)
 {
        int ret;
-       int idx = 1;
+       int idx;
        mdg_group_h group = NULL;
        mdg_device_h device = NULL;
 
@@ -186,7 +164,7 @@ void _device_invite_result_cb(int result, void *user_data)
 static int run_device_invite(MManager *mm, struct menu_data *menu)
 {
        int ret;
-       int idx = 1;
+       int idx;
        mdg_group_h group = NULL;
        mdg_device_h device = NULL;
 
@@ -244,54 +222,90 @@ static void _destroy_mdg_device_info(gpointer data)
 
 static int run_devices_show(MManager *mm, struct menu_data *menu)
 {
-       char *deviceid = NULL;
-       char *ip = NULL;
-       mdg_device_type_e devicetype;
        mdg_device_h device;
-       int ret;
-       int count;
-       mdg_device_h *devices = NULL;
+
        int i;
        GList *iter = NULL;
 
-       ret = mdg_device_get_found_devices(handle, &devices, &count);
-       if (MDG_ERROR_NONE != ret) {
-               msgr("Failed to Get Found Devices: [%s(0x%X)]",
-                        mdg_error_to_string(ret), ret);
-               return RET_FAILURE;
-       } else {
-               if (found_device_list) {
-                       g_list_free_full(found_device_list, _destroy_mdg_device_info);
-                       found_device_list = NULL;
+       /* Get a first item */
+       i = 0;
+       iter = g_list_first(found_device_list);
+       while (NULL != iter) {
+               device = iter->data;
+               if (!device) {
+                       msgr("device is null");
+                       break;
                }
 
-               for (i = 0; i < count; i++)
-                       found_device_list = g_list_append(found_device_list, devices[i]);
+               char *model_name;
+               char *addr;
+               mdg_device_info_get_model_name(device, &model_name);
+               mdg_device_info_get_addr(device, &addr);
+
+               msgp("[%d] Model : %s, Addr : %s", i+1, model_name, addr);
+
+               mdg_device_h cloned_device;
+               char *cloned_model_name;
+               char *cloned_addr;
+
+               mdg_device_info_clone(&cloned_device, device);
+               mdg_device_info_get_model_name(cloned_device, &cloned_model_name);
+               mdg_device_info_get_addr(cloned_device, &cloned_addr);
+
+               msgp("*Cloned* [%d] Model : %s, Addr : %s", i+1, cloned_model_name, cloned_addr);
+
+               if (model_name)
+                       free(model_name);
+
+               if (addr)
+                       free(addr);
+
+               if (cloned_model_name)
+                       free(cloned_model_name);
+
+               if (cloned_addr)
+                       free(cloned_addr);
+
+               mdg_device_info_destroy(cloned_device);
+
+               /* Next item */
+               iter = g_list_next(iter);
+               i++;
        }
 
+       return RET_SUCCESS;
+}
+
+static int run_invited_devices_show(MManager *mm, struct menu_data *menu)
+{
+       mdg_device_h device;
+
+       int i;
+       GList *iter = NULL;
+
        /* Get a first item */
        i = 0;
-       iter = g_list_first(found_device_list);
+       iter = g_list_first(invited_device_list);
        while (NULL != iter) {
                device = iter->data;
                if (!device) {
-                       msgr("device list is null");
+                       msgr("device is null");
                        break;
                }
-               mdg_device_info_get_device_id(device, &deviceid);
-               mdg_device_info_get_ip(device, &ip);
-               mdg_device_info_get_device_type(device, &devicetype);
-               msgp("[%d] deviceid: %s, IP: %s type: %s", i+1, deviceid, ip,
-                        __device_type_to_string(devicetype));
-
-               if (deviceid) {
-                       free(deviceid);
-                       deviceid = NULL;
-               }
-               if (ip) {
-                       free(ip);
-                       ip  = NULL;
-               }
+
+               char *model_name;
+               char *addr;
+               mdg_device_info_get_model_name(device, &model_name);
+               mdg_device_info_get_addr(device, &addr);
+
+               msgp("[%d] Model : %s, Addr : %s", i+1, model_name, addr);
+
+               if (model_name)
+                       free(model_name);
+
+               if (addr)
+                       free(addr);
+
                /* Next item */
                iter = g_list_next(iter);
                i++;
@@ -357,65 +371,12 @@ static int run_group_get_members(MManager *mm, struct menu_data *menu)
        return RET_SUCCESS;
 }
 #endif
-#if 0
-static int run_group_merge(MManager *mm, struct menu_data *menu)
-{
-       int ret;
-       int a, b;
-       mdg_group_h group_a;
-       mdg_group_h group_b;
-
-       msg("Merge Group");
-
-       if (strlen(group_idx_a)) {
-               a = (unsigned short)strtol(group_idx_a, NULL, 10);
-               if (0 >= a) {
-                       msgp("Invalid index. set to 1");
-                       a = 1;
-               }
-       }
-
-       if (found_group_list) {
-               group_a = g_list_nth_data(found_group_list, a - 1);
-               if (NULL == group_a) {
-                       msgr("Failed to g_hash_table_find");
-                       return RET_FAILURE;
-               }
-       }
-
-       if (strlen(group_idx_b)) {
-               b = (unsigned short)strtol(group_idx_b, NULL, 10);
-               if (0 >= b) {
-                       msgp("Invalid index. set to 2");
-                       b = 1;
-               }
-       }
-
-       if (found_group_list) {
-               group_b = g_list_nth_data(found_group_list, b - 1);
-               if (NULL == group_b) {
-                       msgr("Failed to g_hash_table_find");
-                       return RET_FAILURE;
-               }
-       }
-
-
-       ret = mdg_group_merge(handle, group_a, group_b);
-       if (MDG_ERROR_NONE != ret) {
-               msgr("Failed to Merge Group: [%s(0x%X)]", mdg_error_to_string(ret), ret);
-               return RET_FAILURE;
-       }
-       msg(" - mdg_group_merge() ret: [0x%X] [%s]", ret, mdg_error_to_string(ret));
-
-       return RET_SUCCESS;
-}
-#endif
 
 static int run_group_delete(MManager *mm, struct menu_data *menu)
 {
        int ret;
-       int idx = 1;
-       mdg_group_h group = NULL;
+       int idx;
+       mdg_group_h group;
 
        msg("Delete Group");
 
@@ -445,40 +406,6 @@ static int run_group_delete(MManager *mm, struct menu_data *menu)
        return RET_SUCCESS;
 }
 
-int run_device_show_found(MManager *mm, struct menu_data *menu)
-{
-       int ret;
-       int count;
-       mdg_device_h *devices = NULL;
-
-       ret = mdg_device_get_found_devices(handle, &devices, &count);
-       if (MDG_ERROR_NONE != ret) {
-               msgr("Failed to Get Found Devices: [%s(0x%X)]", mdg_error_to_string(ret), ret);
-               return RET_FAILURE;
-       }
-       msg(" - mdg_device_get_found_devices() ret: [0x%X] [%s]", ret, mdg_error_to_string(ret));
-
-       for (int i = 0; i < count; i++) {
-               char *device_id = NULL;
-               char *ip = NULL;
-               mdg_device_type_e device_type;
-
-               mdg_device_info_get_device_id(devices[i], &device_id);
-               mdg_device_info_get_ip(devices[i], &ip);
-               mdg_device_info_get_device_type(devices[i], &device_type);
-
-               msgb("\n[ID] %s [IP] %s [Type] %s", device_id, ip,
-                       __device_type_to_string(device_type));
-
-               if (device_id)
-                       free(device_id);
-               if (ip)
-                       free(ip);
-       }
-
-       return RET_SUCCESS;
-}
-
 void _device_finish_cb(int result, void *user_data)
 {
        msgb("\rFind Device Finished ret: [0x%X] [%s]", result, mdg_error_to_string(result));
@@ -486,7 +413,7 @@ void _device_finish_cb(int result, void *user_data)
 
 bool _device_found_cb(mdg_device_h device, void *user_data)
 {
-       char *ip = NULL;
+       char *addr = NULL;
        char *device_id = NULL;
        char *model_name = NULL;
        mdg_device_type_e device_type;
@@ -494,9 +421,9 @@ bool _device_found_cb(mdg_device_h device, void *user_data)
        gboolean is_exist = FALSE;
 
        mdg_device_info_get_device_id(device, &device_id);
-       mdg_device_info_get_ip(device, &ip);
-       mdg_device_info_get_device_type(device, &device_type);
+       mdg_device_info_get_addr(device, &addr);
        mdg_device_info_get_model_name(device, &model_name);
+       mdg_device_info_get_type(device, &device_type);
 
        iter = found_device_list;
        while (iter != NULL) {
@@ -518,14 +445,14 @@ bool _device_found_cb(mdg_device_h device, void *user_data)
 
        if (is_exist == FALSE) {
                found_device_list = g_list_append(found_device_list, device);
-               msgp("\r[ID] %s [IP] %s [Type] %s [Name] %s", device_id, ip,
+               msgp("\r[ID] %s [IP] %s [Type] %s [Name] %s", device_id, addr,
                        __device_type_to_string(device_type), model_name);
        }
 
        if (device_id)
                free(device_id);
-       if (ip)
-               free(ip);
+       if (addr)
+               free(addr);
 
        return TRUE;
 }
@@ -533,13 +460,13 @@ bool _device_found_cb(mdg_device_h device, void *user_data)
 static int run_devices_find(MManager *mm, struct menu_data *menu)
 {
        int ret;
-       int duration = 2;
+       int duration;
        msg("Find Devices");
 
        if (strlen(timeout))
                duration = (unsigned short)strtol(timeout, NULL, 10);
 
-       ret = mdg_device_find(handle, duration, _device_found_cb, _device_finish_cb, NULL);
+       ret = mdg_device_find(handle, duration, false, _device_found_cb, _device_finish_cb, NULL);
        if (MDG_ERROR_NONE != ret) {
                msgr("Failed to Find Devices: [%s(0x%X)]", mdg_error_to_string(ret), ret);
                return RET_FAILURE;
@@ -554,36 +481,71 @@ static int run_devices_find(MManager *mm, struct menu_data *menu)
        return RET_SUCCESS;
 }
 
-int run_device_show_my_device(MManager *mm, struct menu_data *menu)
+int run_device_show_local_device(MManager *mm, struct menu_data *menu)
 {
        int ret = 0;
        mdg_device_h device = NULL;
 
-       msg("Get My Device");
+       msg("Get Local Device");
 
-       ret = mdg_device_info_get_my_device(handle, &device);
+       ret = mdg_device_get_local_device(handle, &device);
        if (MDG_ERROR_NONE != ret) {
                msgr("Failed to Get My Device: [%s(0x%X)]", mdg_error_to_string(ret), ret);
                return RET_FAILURE;
        }
-       msg(" - mdg_device_info_get_my_device() ret: [0x%X] [%s]", ret, mdg_error_to_string(ret));
+       msg(" - mdg_device_info_get_local_device() ret: [0x%X] [%s]", ret, mdg_error_to_string(ret));
 
        if (ret == 0) {
                char *device_id = NULL;
-               char *ip = NULL;
-               mdg_device_type_e device_type;
+               char *addr = NULL;
+               int port;
+               int secure_port;
+               char *model_name;
+               char *device_name;
+               char *platform_ver;
+               char *vendor_id;
+               char *profile;
+               bool is_invited;
+               mdg_device_type_e type;
 
                mdg_device_info_get_device_id(device, &device_id);
-               mdg_device_info_get_ip(device, &ip);
-               mdg_device_info_get_device_type(device, &device_type);
-
-               msgb("\n[ID] %s [IP] %s [Type] %s", device_id, ip,
-                       __device_type_to_string(device_type));
+               mdg_device_info_get_addr(device, &addr);
+               mdg_device_info_get_port(device, &port);
+               mdg_device_info_get_secure_port(device, &secure_port);
+               mdg_device_info_get_model_name(device, &model_name);
+               mdg_device_info_get_device_name(device, &device_name);
+               mdg_device_info_get_platform_ver(device, &platform_ver);
+               mdg_device_info_get_vendor_id(device, &vendor_id);
+               mdg_device_info_get_profile(device, &profile);
+               mdg_device_info_is_invited(device, &is_invited);
+               mdg_device_info_get_type(device, &type);
+
+               msgb("\n[ID] %s", device_id);
+               msgb("[ADDR] %s", addr);
+               msgb("[PORT] %d", port);
+               msgb("[S.PORT] %d", secure_port);
+               msgb("[Model Name] %s", model_name);
+               msgb("[Device Name] %s", device_name);
+               msgb("[Platform Ver.] %s", platform_ver);
+               msgb("[Vendor ID] %s", vendor_id);
+               msgb("[Profile] %s", profile);
+               msgb("[Is Invited] %d", is_invited);
+               msgb("[Type] %s\n", __device_type_to_string(type));
 
                if (device_id)
                        free(device_id);
-               if (ip)
-                       free(ip);
+               if (addr)
+                       free(addr);
+               if (model_name)
+                       free(model_name);
+               if (device_name)
+                       free(device_name);
+               if (platform_ver)
+                       free(platform_ver);
+               if (vendor_id)
+                       free(vendor_id);
+               if (profile)
+                       free(profile);
 
                mdg_device_info_destroy(device);
                device = NULL;
@@ -592,45 +554,8 @@ int run_device_show_my_device(MManager *mm, struct menu_data *menu)
        return RET_SUCCESS;
 }
 
-static int run_group_leave(MManager *mm, struct menu_data *menu)
-{
-       int ret;
-       int idx = 1;
-       mdg_group_h group = NULL;
-
-       msg("Leave Group");
-
-       if (strlen(group_idx)) {
-               idx = (unsigned short)strtol(group_idx, NULL, 10);
-               if (0 >= idx) {
-                       msgp("Invalid index. set to 1");
-                       idx = 1;
-               }
-       }
-
-       if (found_group_list) {
-               group = g_list_nth_data(found_group_list, idx - 1);
-               if (NULL == group) {
-                       msgr("Failed to g_hash_table_find");
-                       return RET_FAILURE;
-               }
-       }
-
-       ret = mdg_request_leave_group (handle, group, receive_request_result, NULL);
-       if (MDG_ERROR_NONE != ret) {
-               msgr("Failed to Leave Group: [%s(0x%X)]", mdg_error_to_string(ret), ret);
-               return RET_FAILURE;
-       }
-       msg(" - mdg_request_leave_group () ret: [0x%X] [%s]", ret, mdg_error_to_string(ret));
-
-       return RET_SUCCESS;
-}
-
 static int run_group_show(MManager *mm, struct menu_data *menu)
 {
-       char *rt;
-       char *uri;
-       mdg_group_type_e type;
        mdg_group_h group;
 
        int i;
@@ -645,56 +570,55 @@ static int run_group_show(MManager *mm, struct menu_data *menu)
                        msgr("groups is null");
                        break;
                }
+
+               char *device_id;
+               char *host_addr;
+               char *name;
+               mdg_group_type_e type;
+
+               mdg_group_info_get_device_id(group, &device_id);
+               mdg_group_info_get_host_addr(group, &host_addr);
+               mdg_group_info_get_name(group, &name);
                mdg_group_info_get_type(group, &type);
-               mdg_group_info_get_uri_path(group, &uri);
-               mdg_group_info_get_resource_type(group, &rt);
-               msgp("[%d] type: %s, URI: %s RT: %s", i+1, mdg_group_type_to_string(type), uri, rt);
-               if (uri) {
-                       free(uri);
-                       uri = NULL;
-               }
-               if (rt) {
-                       free(rt);
-                       rt = NULL;
-               }
-               /* Next item */
-               iter = g_list_next(iter);
-               i++;
-       }
 
-       return RET_SUCCESS;
-}
+               msgp("[%d] type: %s, name: %s", i+1, mdg_group_type_to_string(type), name);
+               msgp("     host_addr: %s, device_id: %s\n", host_addr, device_id);
 
-static int run_group_join(MManager *mm, struct menu_data *menu)
-{
-       int ret;
-       int idx = 1;
-       mdg_group_h group = NULL;
+               mdg_group_h cloned_group;
+               char *cloned_device_id;
+               char *cloned_host_addr;
+               char *cloned_name;
+               mdg_group_type_e cloned_type;
 
-       msg("Join Group");
+               mdg_group_info_clone(&cloned_group, group);
+               mdg_group_info_get_device_id(cloned_group, &cloned_device_id);
+               mdg_group_info_get_host_addr(cloned_group, &cloned_host_addr);
+               mdg_group_info_get_name(cloned_group, &cloned_name);
+               mdg_group_info_get_type(cloned_group, &cloned_type);
 
-       if (strlen(group_idx)) {
-               idx = (unsigned short)strtol(group_idx, NULL, 10);
-               if (0 >= idx) {
-                       msgp("Invalid index. set to 1");
-                       idx = 1;
-               }
-       }
+               msgp("*Cloned* [%d] type: %s, name: %s", i+1, mdg_group_type_to_string(cloned_type), cloned_name);
+               msgp("     host_addr: %s, device_id: %s\n", cloned_host_addr, cloned_device_id);
 
-       if (found_group_list) {
-               group = g_list_nth_data(found_group_list, idx - 1);
-               if (NULL == group) {
-                       msgr("Failed to g_hash_table_find");
-                       return RET_FAILURE;
-               }
-       }
+               if (device_id)
+                       free(device_id);
+               if (host_addr)
+                       free(host_addr);
+               if (name)
+                       free(name);
 
-       ret = mdg_request_join_group(handle, group, receive_request_result, NULL);
-       if (MDG_ERROR_NONE != ret) {
-               msgr("Failed to Join Group: [%s(0x%X)]", mdg_error_to_string(ret), ret);
-               return RET_FAILURE;
+               if (cloned_device_id)
+                       free(cloned_device_id);
+               if (cloned_host_addr)
+                       free(cloned_host_addr);
+               if (cloned_name)
+                       free(cloned_name);
+
+               mdg_group_info_destroy(cloned_group);
+
+               /* Next item */
+               iter = g_list_next(iter);
+               i++;
        }
-       msg(" - mdg_request_join_group() ret: [0x%X] [%s]", ret, mdg_error_to_string(ret));
 
        return RET_SUCCESS;
 }
@@ -704,56 +628,13 @@ static void _destroy_mdg_group_info(gpointer data)
        mdg_group_info_destroy((mdg_group_h)data);
 }
 
-static int run_group_show_found(MManager *mm, struct menu_data *menu)
-{
-       int ret;
-       int count;
-       mdg_group_h *groups = NULL;
-
-       msg("Show Found Group(s)");
-
-       ret = mdg_group_get_found_groups(handle, &groups, &count);
-       if (MDG_ERROR_NONE != ret) {
-               msgr("Failed to Get Found Groups: [%s(0x%X)]", mdg_error_to_string(ret), ret);
-               return RET_FAILURE;
-       }
-       msg(" - mdg_group_get_found_groups() ret: [0x%X] [%s]", ret, mdg_error_to_string(ret));
-
-       if (found_group_list) {
-               g_list_free_full(found_group_list, _destroy_mdg_group_info);
-               found_group_list = NULL;
-       }
-
-       for (int i = 0; i < count; i++) {
-               mdg_group_type_e type;
-               char *uri_path;
-               char *group_name;
-
-               mdg_group_info_get_type(groups[i], &type);
-               mdg_group_info_get_uri_path(groups[i], &uri_path);
-               mdg_group_info_get_name(groups[i], &group_name);
-
-               if (type == MDG_GROUP_TYPE_MINE)
-                       msgb("%d. type : MINE, name : %s, uri : %s", i+1, group_name, uri_path);
-               else
-                       msgb("%d. type : REMOTE, name : %s, uri : %s", i+1, group_name, uri_path);
-
-               found_group_list = g_list_append(found_group_list, groups[i]);
-
-               g_free(uri_path);
-               g_free(group_name);
-       }
-
-       return RET_SUCCESS;
-}
-
 bool _group_found_cb(mdg_group_type_e type, mdg_group_h group, void *user_data)
 {
        char *group_name;
 
        mdg_group_info_get_name(group, &group_name);
 
-       if (type == MDG_GROUP_TYPE_MINE)
+       if (type == MDG_GROUP_TYPE_LOCAL)
                msgp("\rfound group type : MINE, name : %s", group_name);
        else
                msgp("\rfound group type : REMOTE, name : %s", group_name);
@@ -771,7 +652,7 @@ void _group_finish_cb(int result, void *user_data)
 static int run_group_find(MManager *mm, struct menu_data *menu)
 {
        int ret;
-       int duration = 2;
+       int duration;
        msg("Find Group");
 
        if (strlen(timeout))
@@ -808,11 +689,9 @@ static int run_group_create(MManager *mm, struct menu_data *menu)
        return RET_SUCCESS;
 }
 
-void _send_data_finish_cb(int result, char *resp_data, void *user_data)
+void _send_data_finish_cb(int result, void *user_data)
 {
        msgb("\rFind Send Data Finished = %d", result);
-       if (resp_data != NULL && strlen(resp_data) > 0)
-               msgp("Response from %s", resp_data);
 }
 
 static int __send_data(int idx)
@@ -825,14 +704,14 @@ static int __send_data(int idx)
        if (found_device_list) {
                device = g_list_nth_data(found_device_list, idx - 1);
                if (NULL == device) {
-                       msgr("Find my device first");
+                       msgr("Find local device first");
                        return RET_FAILURE;
                }
        }
 
        mdg_device_info_get_device_id(device, &deviceid);
-       mdg_device_info_get_ip(device, &address);
-       msgp("Sent to [ID] %s [IP] %s", deviceid, address);
+       mdg_device_info_get_addr(device, &address);
+       msgp("Sent to [ID] %s [ADDR] %s", deviceid, address);
        if (deviceid) {
                free(deviceid);
                deviceid = NULL;
@@ -842,7 +721,7 @@ static int __send_data(int idx)
                address = NULL;
        }
 
-       ret = mdg_device_send_data(handle, device, (unsigned char *) message,
+       ret = mdg_device_send_data(handle, device, channel_id, (unsigned char *)message,
                                                 strlen(message), _send_data_finish_cb, NULL);
        if (MDG_ERROR_NONE != ret)
                msgr("Failed to Send Data: [ID] %s [IP] %s", deviceid, address);
@@ -870,110 +749,58 @@ static int run_send_data(MManager *mm, struct menu_data *menu)
        return __send_data(idx);
 }
 
-static int run_send_data_all(MManager *mm, struct menu_data *menu)
-{
-       int count = 0;
-
-       count = g_list_length(found_device_list);
-
-       if (0 >= count) {
-               msgr("No Device");
-               return RET_SUCCESS;
-       }
-
-       for (int i = 1; i <= count; i++)
-               __send_data(i);
-
-       return RET_SUCCESS;
-}
-
-void _mowned_device_finish_cb(int result, void *user_data)
+void _invited_device_finish_cb(int result, void *user_data)
 {
        msgb("\rFind My Owned Devices Finished ret: [0x%X] [%s]", result,
                mdg_error_to_string(result));
 }
 
-bool _mowned_device_found_cb(mdg_device_h device, void *user_data)
+bool _invited_device_found_cb(mdg_device_h device, void *user_data)
 {
-       char *ip = NULL;
+       char *addr = NULL;
        char *device_id = NULL;
        mdg_device_type_e device_type;
 
        mdg_device_info_get_device_id(device, &device_id);
-       mdg_device_info_get_ip(device, &ip);
-       mdg_device_info_get_device_type(device, &device_type);
+       mdg_device_info_get_addr(device, &addr);
+       mdg_device_info_get_type(device, &device_type);
 
-       msgp("\r[ID] %s [IP] %s [Type] %s", device_id, ip,
+       msgp("\r[ID] %s [IP] %s [Type] %s", device_id, addr,
                __device_type_to_string(device_type));
 
        if (device_id)
                free(device_id);
-       if (ip)
-               free(ip);
+       if (addr)
+               free(addr);
 
-       my_devices_list = g_list_append(my_devices_list, device);
+       invited_device_list = g_list_append(invited_device_list, device);
 
        return TRUE;
 }
 
-static int run_devices_find_mowned_device(MManager *mm, struct menu_data *menu)
+static int run_devices_find_invited_device(MManager *mm, struct menu_data *menu)
 {
        int ret;
-       int duration = 2;
+       int duration;
        msg("Find My Owned Devices");
 
        if (strlen(timeout))
                duration = (unsigned short)strtol(timeout, NULL, 10);
 
-       ret = mdg_device_find_mowned_device(handle, duration, _mowned_device_found_cb,
-               _mowned_device_finish_cb, NULL);
+       ret = mdg_device_find(handle, duration, true, _invited_device_found_cb,
+               _invited_device_finish_cb, NULL);
        if (MDG_ERROR_NONE != ret) {
                msgr("Failed to Find My Owned Devices: [%s(0x%X)]",
                        mdg_error_to_string(ret), ret);
                return RET_FAILURE;
        }
-       msg(" - mdg_device_find_mowned_device() ret: [0x%X] [%s]",
-               ret, mdg_error_to_string(ret));
-
-       if (my_devices_list) {
-               g_list_free_full(my_devices_list, _destroy_mdg_device_info);
-               my_devices_list = NULL;
-       }
-
-       return RET_SUCCESS;
-}
-
-int run_device_show_mowned_device(MManager *mm, struct menu_data *menu)
-{
-       int ret;
-       int count;
-       mdg_device_h *devices = NULL;
-
-       ret = mdg_device_get_found_mowned_devices(handle, &devices, &count);
-       if (MDG_ERROR_NONE != ret) {
-               msgr("Failed to Get Found Mowned Devices: [%s(0x%X)]",
-                       mdg_error_to_string(ret), ret);
-               return RET_FAILURE;
-       }
-       msg(" - mdg_device_get_found_mowned_devices() ret: [0x%X] [%s]", ret,
-               mdg_error_to_string(ret));
 
-       for (int i = 0; i < count; i++) {
-               char *device_id = NULL;
-               char *ip = NULL;
-               mdg_device_type_e device_type;
-
-               mdg_device_info_get_device_id(devices[i], &device_id);
-               mdg_device_info_get_ip(devices[i], &ip);
-               mdg_device_info_get_device_type(devices[i], &device_type);
-
-               msgb("\n[ID] %s [IP] %s [Type] %s", device_id, ip,
-                       __device_type_to_string(device_type));
+       msg(" - mdg_device_find_invited_device() ret: [0x%X] [%s]",
+               ret, mdg_error_to_string(ret));
 
-               if (device_id)
-                       free(device_id);
-               if (ip)
-                       free(ip);
+       if (invited_device_list) {
+               g_list_free_full(invited_device_list, _destroy_mdg_device_info);
+               invited_device_list = NULL;
        }
 
        return RET_SUCCESS;
@@ -982,7 +809,6 @@ int run_device_show_mowned_device(MManager *mm, struct menu_data *menu)
 static int run_request_create_group(MManager *mm, struct menu_data *menu)
 {
        int ret = 0;
-       int dev_idx = 1;
        int dev_count = 0;
        mdg_device_h device = NULL;
 
@@ -995,6 +821,7 @@ static int run_request_create_group(MManager *mm, struct menu_data *menu)
                return RET_SUCCESS;
        }
 
+       int dev_idx;
        if (device_idx != NULL && strlen(device_idx)) {
                dev_idx = (unsigned short)strtol(device_idx, NULL, 10);
                if (0 >= dev_idx) {
@@ -1028,8 +855,6 @@ static int run_request_create_group(MManager *mm, struct menu_data *menu)
 static int run_request_invite(MManager *mm, struct menu_data *menu)
 {
        int ret = 0;
-       int grp_idx = 1;
-       int dev_idx = 1;
        int grp_count = 0;
        int dev_count = 0;
        mdg_device_h device = NULL;
@@ -1043,6 +868,7 @@ static int run_request_invite(MManager *mm, struct menu_data *menu)
                return RET_SUCCESS;
        }
 
+       int grp_idx;
        if (group_idx != NULL && strlen(group_idx)) {
                grp_idx = (unsigned short)strtol(group_idx, NULL, 10);
                if (0 >= grp_idx) {
@@ -1059,6 +885,7 @@ static int run_request_invite(MManager *mm, struct menu_data *menu)
                }
        }
 
+       int dev_idx;
        if (device_idx != NULL && strlen(device_idx)) {
                dev_idx = (unsigned short)strtol(device_idx, NULL, 10);
                if (0 >= dev_idx) {
@@ -1150,82 +977,35 @@ static int run_request_eject(MManager *mm, struct menu_data *menu)
        return RET_SUCCESS;
 }
 
-static int run_request_delete_group(MManager *mm, struct menu_data *menu)
+void __channel_cb(int result, mdg_device_h device, char *channel_id,
+       unsigned char *arg, int len, void *user_data)
 {
-       int ret = 0;
-       int grp_count = 0;
-       mdg_group_h group = NULL;
-
-       grp_count = g_list_length(found_group_list);
-
-       if (0 >= grp_count) {
-               msgr("No Device");
-               return RET_SUCCESS;
-       }
-
-       int grp_idx;
-       if (group_idx != NULL && strlen(group_idx)) {
-               grp_idx = (unsigned short)strtol(group_idx, NULL, 10);
-               if (0 >= grp_idx) {
-                       msgp("Invalid index. set to 1");
-                       grp_idx = 1;
-               }
-       }
+       msg("[%s] channel callback is called by remote send message", channel_id);
+       msg("result is %d", result);
+}
 
-       if (found_group_list) {
-               group = g_list_nth_data(found_group_list, grp_idx - 1);
-               if (NULL == group) {
-                       msgr("Failed to g_hash_table_find");
-                       return RET_FAILURE;
-               }
-       }
+static int run_regist_channel(MManager *mm, struct menu_data *menu)
+{
+       int ret = 0;
 
-       ret = mdg_request_delete_group(handle, group, receive_request_result, NULL);
-       if (MDG_ERROR_NONE != ret) {
-               msgr("Failed to Request Delete Group: [%s(0x%X)]",
-                       mdg_error_to_string(ret), ret);
-               return RET_FAILURE;
-       }
+       ret = mdg_device_regist_channel(handle, channel_id, __channel_cb, NULL);
 
-       msg(" - mdg_request_delete_group() ret: [0x%X] [%s]",
-               ret, mdg_error_to_string(ret));
+       msg(" - mdg_device_regist_channel() ret: [0x%X] [%s]", ret, mdg_error_to_string(ret));
 
        return RET_SUCCESS;
 }
 
-static void device_monitor_result(char *uuid, char *group_name,
-                                                 mdg_device_status_e status, void *user_data)
+static int run_unregist_channel(MManager *mm, struct menu_data *menu)
 {
-       msgp("device monitor result uuid %s group_name %s status %s", uuid,
-                group_name, status == MDG_DEVICE_ADDED ? "ADDED" : "REMOVED");
-}
+       int ret = 0;
 
-static int run_start_device_monitor(MManager *mm, struct menu_data *menu)
-{
-       int ret;
+       ret = mdg_device_unregist_channel(handle, channel_id);
+
+       msg(" - mdg_unregist_channel() ret: [0x%X] [%s]", ret, mdg_error_to_string(ret));
 
-       if (g_strcmp0(monitor, "1") == 0) {
-               msg(" - Start device monitor");
-               ret = mdg_device_monitor_start(handle, device_monitor_result,
-                                                                                        NULL);
-               if (MDG_ERROR_NONE != ret) {
-                       msgr("Failed to Start Monitor: [%s(0x%X)]",
-                                mdg_error_to_string(ret), ret);
-                       return RET_FAILURE;
-               }
-       } else {
-               msg(" - Stop device monitor");
-               ret = mdg_device_monitor_stop(handle);
-               if (MDG_ERROR_NONE != ret) {
-                       msgr("Failed to Stop Monitor: [%s(0x%X)]",
-                                mdg_error_to_string(ret), ret);
-                       return RET_FAILURE;
-               }
-       }
        return RET_SUCCESS;
 }
 
-
 static struct menu_data menu_group_create[] = {
        { "0", "Group Name", NULL, NULL, groupid },
        { "1", "Run", NULL, run_group_create, NULL },
@@ -1238,35 +1018,13 @@ static struct menu_data menu_group_find[] = {
        { NULL, NULL, },
 };
 
-static struct menu_data menu_group_join[] = {
-       { "0", "Show Found Group(s)", NULL, run_group_show, NULL },
-       { "1", "Index", NULL, NULL, group_idx },
-       { "2", "Run", NULL, run_group_join, NULL },
-       { NULL, NULL, },
-};
-
-static struct menu_data menu_group_leave[] = {
-       { "0", "Show Found Group(s)", NULL, run_group_show, NULL },
-       { "1", "Index", NULL, NULL, group_idx },
-       { "2", "Run", NULL, run_group_leave, NULL },
-       { NULL, NULL, },
-};
-
 static struct menu_data menu_group_delete[] = {
        { "0", "Show Found Group(s)", NULL, run_group_show, NULL },
        { "1", "Index", NULL, NULL, group_idx },
        { "2", "Run", NULL, run_group_delete, NULL },
        { NULL, NULL, },
 };
-#if 0
-static struct menu_data menu_group_merge[] = {
-       { "0", "Show Found Group(s)", NULL, run_group_show, NULL },
-       { "1", "A Index", NULL, NULL, group_idx_a },
-       { "2", "B Index", NULL, NULL, group_idx_b },
-       { "3", "Run", NULL, run_group_merge, NULL },
-       { NULL, NULL, },
-};
-#endif
+
 static struct menu_data menu_devices_find[] = {
        { "0", "Timeout", NULL, NULL, timeout },
        { "1", "Run", NULL, run_devices_find, NULL },
@@ -1293,17 +1051,17 @@ static struct menu_data menu_group_eject_device[] = {
 };
 
 static struct menu_data menu_send_data[] = {
-       { "0", "Show My Owned Device(s)", NULL, run_device_show_mowned_device, NULL },
+       { "0", "Show My Owned Device(s)", NULL, run_invited_devices_show, NULL },
        { "1", "Message", NULL, NULL, message },
-       { "2", "Device Index", NULL, NULL, device_idx },
-       { "3", "Send (Unicast)", NULL, run_send_data, NULL },
-       { "4", "Send (Broadcast)", NULL, run_send_data_all, NULL },
+       { "2", "Channel Name", NULL, NULL, channel_id },
+       { "3", "Device Index", NULL, NULL, device_idx },
+       { "4", "Send", NULL, run_send_data, NULL },
        { NULL, NULL, },
 };
 
-static struct menu_data menu_devices_find_mownd_device[] = {
+static struct menu_data menu_devices_find_invited_device[] = {
        { "0", "Timeout", NULL, NULL, timeout },
-       { "1", "Run", NULL, run_devices_find_mowned_device, NULL },
+       { "1", "Run", NULL, run_devices_find_invited_device, NULL },
        { NULL, NULL, },
 };
 
@@ -1334,40 +1092,35 @@ static struct menu_data menu_request_eject[] = {
        { NULL, NULL, },
 };
 
-static struct menu_data menu_request_delete_group[] = {
-       { "0", "Show Found Group(s)", NULL, run_group_show, NULL },
-       { "1", "Group Index", NULL, NULL, group_idx },
-       { "2", "Run", NULL, run_request_delete_group, NULL },
+static struct menu_data menu_regist_channel[] = {
+       { "0", "Channel ID", NULL, NULL, channel_id },
+       { "1", "Run", NULL, run_regist_channel, NULL },
        { NULL, NULL, },
 };
 
-static struct menu_data menu_monitor[] = {
-       { "1", "Input 1 to Start and 2 to Stop Monitor", NULL, NULL,  monitor },
-       { "2", "Start/Stop Device Monitor", NULL, run_start_device_monitor, NULL },
+static struct menu_data menu_unregist_channel[] = {
+       { "0", "Channel ID", NULL, NULL, channel_id },
+       { "1", "Run", NULL, run_unregist_channel, NULL },
        { NULL, NULL, },
 };
 
 struct menu_data menu_mdg_manager[] = {
-       { "0", "Show My Device ID", NULL, run_get_my_id, NULL },
-       { "1", "Show My Device", NULL, run_device_show_my_device, NULL },
-       { "2", "Create Group", menu_group_create, NULL, NULL },
-       { "3", "Find Group(s)", menu_group_find, NULL, NULL },
-       { "4", "Show Found Group(s)", NULL, run_group_show_found , NULL },
-       { "5", "Join Group (Not yet developed)", menu_group_join, NULL, NULL },
-       { "6", "Leave Group (Not yet developed)", menu_group_leave, NULL, NULL },
-       { "7", "Delete Group", menu_group_delete, NULL, NULL },
-       { "8", "Find Device(s)", menu_devices_find, NULL, NULL },
-       { "9", "Show Found Device(s)", NULL, run_device_show_found, NULL },
-       { "10", "Invite Device", menu_group_invite_device, NULL, NULL },
-       { "11", "Eject Device", menu_group_eject_device, NULL, NULL },
-       { "12", "Find My Owned Device(s)", menu_devices_find_mownd_device, NULL, NULL },
-       { "13", "Show My Owned Device(s)", NULL, run_device_show_mowned_device, NULL},
-       { "14", "Send Message", menu_send_data, NULL, NULL },
-       { "15", "Request Create Group", menu_request_create_group, NULL, NULL },
-       { "16", "Request Invite", menu_request_invite, NULL, NULL },
-       { "17", "Request Eject", menu_request_eject, NULL, NULL },
-       { "18", "Request Delete Group (Not yet developed)", menu_request_delete_group,
-               NULL, NULL },
-       { "19", "Start/Stop Device Monitor", menu_monitor, NULL, NULL },
-       { NULL, NULL, },
+       { "1", "Show Local Device", NULL, run_device_show_local_device, NULL }, // O
+       { "2", "Create Group", menu_group_create, NULL, NULL }, // 0
+       { "3", "Find Group(s)", menu_group_find, NULL, NULL }, // 0
+       { "4", "Show Group(s)", NULL, run_group_show, NULL }, // 0
+       { "5", "Delete Group", menu_group_delete, NULL, NULL }, // 0
+       { "6", "Find Device(s)", menu_devices_find, NULL, NULL }, // 0
+       { "7", "Show Device(s)", NULL, run_devices_show, NULL }, // 0
+       { "8", "Invite Device", menu_group_invite_device, NULL, NULL }, // 0
+       { "9", "Eject Device", menu_group_eject_device, NULL, NULL }, // 0
+       { "10", "Find Invited Device(s)", menu_devices_find_invited_device, NULL, NULL }, // 0
+       { "11", "Show Invited Device(s)", NULL, run_invited_devices_show, NULL }, // 0
+       { "12", "Request Create Group", menu_request_create_group, NULL, NULL },
+       { "13", "Request Invite", menu_request_invite, NULL, NULL },
+       { "14", "Request Eject", menu_request_eject, NULL, NULL },
+       { "15", "Regist Channel", menu_regist_channel, NULL, NULL },
+       { "16", "Unregist Channel", menu_unregist_channel, NULL, NULL },
+       { "17", "Get Channel(s)", NULL, run_invited_devices_show, NULL },
+       { "18", "Send Message", menu_send_data, NULL, NULL }, // 0
 };
diff --git a/test/mdg-test.c b/test/mdg-test.c
deleted file mode 100644 (file)
index 639317c..0000000
+++ /dev/null
@@ -1,489 +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 <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <glib.h>
-#include <sys/time.h>
-
-#include <mdg.h>
-
-#define BUFFER_LEN 100
-#define TEST_CASE_MAX 10
-
-#define PRT(format, args...) printf("%s:%d() "format, __FUNCTION__, __LINE__, ##args)
-#define TC_PRT(format, args...) PRT(format"\n", ##args)
-
-#define BEGIN() TC_PRT("BEGIN");
-#define END() TC_PRT("END");
-
-GMainLoop *main_loop = NULL;
-
-typedef struct {
-       const char *tc_name;
-       int tc_code;
-       int (*tc_func)(void);
-} tc_table_t;
-
-GList *found_group_list;
-GList *found_device_list;
-
-mdg_h handle = NULL;
-
-#define CASE_TO_STR(x) case x: return #x;
-static const char* __device_type_to_string(mdg_device_type_e type)
-{
-       switch (type) {
-       /* CHECK: List all enum values here */
-       CASE_TO_STR(MDG_DEVICE_TYPE_LOCAL)
-       CASE_TO_STR(MDG_DEVICE_TYPE_REMOTE)
-       default :
-               return "MDG_DEVICE_TYPE_ERROR";
-       }
-}
-
-static bool test_get_user_int(const char *msg, int *num)
-{
-       if (msg == NULL || num == NULL)
-               return false;
-
-       int rv;
-       char buf[32] = { 0, };
-       printf("%s\n", msg);
-       rv = read(0, buf, 32);
-
-       if (rv < 0 || *buf == 0 || *buf == '\n' || *buf == '\r')
-               return false;
-
-       *num = atoi(buf);
-       return true;
-}
-
-static bool test_get_user_string(const char *msg, char *buf, int buf_size)
-{
-       if (msg == NULL || buf == NULL || buf_size < 2)
-               return false;
-
-       int rv;
-       printf("%s\n", msg);
-       memset(buf, 0, buf_size);
-       rv = read(0, buf, buf_size - 1);
-
-       if (rv < 0 || buf[0] == '\0' || buf[0] == '\n' || buf[0] == '\r') {
-               buf[0] = '\0';
-               return false;
-       }
-
-       if (rv >= 0)
-               buf[rv] = '\0';
-
-       return true;
-}
-
-int mdg_initialize_test(void)
-{
-       int ret = 0;
-
-       BEGIN();
-
-       ret = mdg_initialize(&handle);
-
-       if (ret == 0)
-               TC_PRT("Initialize successful");
-       else
-               TC_PRT("Initialize failed, ret [%d]", ret);
-
-       END();
-       return ret;
-}
-
-int mdg_group_create_test(void)
-{
-       int ret = 0;
-       char input_str[50] = {0, };
-       mdg_h handle = NULL;
-
-       BEGIN();
-
-       if (test_get_user_string("Input group name(ex - GROUP123)"
-                                                " - (Enter for skip) :", input_str, 50)) {
-               g_strstrip(input_str);
-       } else {
-               TC_PRT("Invalid Input !!![%s]", input_str);
-               END();
-               return -1;
-       }
-
-       ret = mdg_group_create(handle, input_str);
-
-       if (ret == 0)
-               TC_PRT("Group create successful");
-       else
-               TC_PRT("Group create failed, ret [%d]", ret);
-
-       END();
-       return ret;
-}
-
-bool _group_found_cb(mdg_group_type_e type, mdg_group_h group, void *user_data)
-{
-       char *uri_path;
-
-       mdg_group_info_get_uri_path(group, &uri_path);
-
-       TC_PRT("found group type : %d, uri : %s", type, uri_path);
-
-       found_group_list = g_list_append(found_group_list, group);
-}
-
-void _group_finish_cb(int result, void *user_data)
-{
-       TC_PRT("find operation finished");
-}
-
-int mdg_group_find_test(void)
-{
-       int ret = 0;
-       int input_int = 0;
-
-       BEGIN();
-       found_group_list = NULL;
-
-       if (!test_get_user_int("==> Input timeout value (sec)"
-                                                " - (Enter for skip) :", &input_int)) {
-               input_int = 5;
-               TC_PRT("default timeout value [%d]", input_int);
-       }
-
-       mdg_group_find(handle, input_int, _group_found_cb, _group_finish_cb, NULL);
-
-       if (ret == 0)
-               TC_PRT("group find successful");
-       else
-               TC_PRT("group find failed, ret [%d]", ret);
-
-       END();
-       return ret;
-}
-
-int mdg_group_get_found_groups_test(void)
-{
-       int ret = 0;
-       int count;
-       mdg_group_h *groups;
-
-       BEGIN();
-
-       found_group_list = NULL;
-
-       ret = mdg_group_get_found_groups(handle, &groups, &count);
-
-       if (ret == 0)
-               TC_PRT("group find successful");
-       else
-               TC_PRT("group find failed, ret [%d]", ret);
-
-       TC_PRT("Found group count : %d", count);
-
-       for (int i = 0; i < count; i++) {
-               mdg_group_type_e type;
-               char *uri_path;
-               mdg_group_info_get_type(groups[i], &type);
-               mdg_group_info_get_uri_path(groups[i], &uri_path);
-               TC_PRT("%d. type : %d, uri path : %s", i+1, type, uri_path);
-               found_group_list = g_list_append(found_group_list, groups[i]);
-       }
-
-       END();
-       return ret;
-}
-
-bool _device_found_cb(mdg_device_h device, void *user_data)
-{
-       char *device_id;
-       char *ip;
-       mdg_device_type_e device_type;
-
-       mdg_device_info_get_device_id(device, &device_id);
-       mdg_device_info_get_ip(device, &ip);
-       mdg_device_info_get_device_type(device, &device_type);
-
-       TC_PRT("found device device_id : %s, ip : %s, device_type : %s", device_id, ip,
-               __device_type_to_string(device_type));
-
-       found_device_list = g_list_append(found_device_list, device);
-}
-
-int mdg_device_find_test(void)
-{
-       int ret = 0;
-       int input_int = 0;
-
-       BEGIN();
-       found_device_list = NULL;
-
-       if (!test_get_user_int("==> Input timeout value (sec)"
-                                                " - (Enter for skip) :", &input_int)) {
-               input_int = 5;
-               TC_PRT("default timeout value [%d]", input_int);
-       }
-
-       mdg_device_find(handle, input_int, _device_found_cb, _group_finish_cb, NULL);
-
-       if (ret == 0)
-               TC_PRT("device find successful");
-       else
-               TC_PRT("device find failed, ret [%d]", ret);
-
-       END();
-       return ret;
-}
-
-int mdg_device_get_found_devices_test(void)
-{
-       int ret = 0;
-       int count = 0;
-       mdg_device_h *devices;
-
-       BEGIN();
-
-       found_device_list = NULL;
-
-       ret = mdg_device_get_found_devices(hadnle, &devices, &count);
-
-       if (ret == 0)
-               TC_PRT("device find successful");
-       else
-               TC_PRT("device find failed, ret [%d]", ret);
-
-       TC_PRT("Found device count : ", count);
-
-       for (int i = 0; i < count; i++) {
-               char *uuid;
-               char *ip;
-               mdg_device_type_e device_type;
-
-               mdg_device_info_get_device_id(devices[i], &uuid);
-               mdg_device_info_get_ip(devices[i], &ip);
-               mdg_device_info_get_device_type(devices[i], &device_type);
-
-               TC_PRT("%d. uuid : %s, ip : %s, device_type : %s", i+1, uuid, ip,
-                       __device_type_to_string(device_type));
-               found_device_list = g_list_append(found_device_list, devices[i]);
-       }
-
-       END();
-       return ret;
-}
-
-void _device_invite_result_cb(int result, void *user_data)
-{
-       TC_PRT("Invite complete !!!! ret : %d", result);
-}
-
-int mdg_device_invite_test(void)
-{
-       int ret = 0;
-       BEGIN();
-
-       /* using stored group list and device list */
-       if (g_list_length(found_device_list) > 0 && g_list_length(found_group_list) > 0) {
-               TC_PRT("Invite Test Start");
-               mdg_group_h group = (mdg_group_h)(found_group_list[0].data);
-               mdg_device_h device = (mdg_device_h)(found_device_list[0].data);
-
-               mdg_group_invite_device(handle, group, device, "12341234", _device_invite_result_cb, NULL);
-
-       } else {
-               TC_PRT("not exist found group or device list");
-       }
-
-       END();
-       return ret;
-}
-
-void _device_eject_result_cb(int result, void *user_data)
-{
-       TC_PRT("eject complete !!!! ret : %d", result);
-}
-
-int mdg_device_eject_test(void)
-{
-       int ret = 0;
-       BEGIN();
-
-       /* using stored group list and device list */
-       if (g_list_length(found_device_list) > 0 && g_list_length(found_group_list) > 0) {
-               TC_PRT("Invite Test Start");
-               mdg_group_h group = (mdg_group_h)(found_group_list[0].data);
-               mdg_device_h device = (mdg_device_h)(found_device_list[0].data);
-
-               /* using stored group list and device list */
-               mdg_group_eject_device(handle, group, device, _device_eject_result_cb, NULL);
-       } else {
-               TC_PRT("not exist found group or device list");
-       }
-
-
-       END();
-       return ret;
-}
-
-//send_data_callback : if the remote device not invited, then callback is called include result failed.
-//send_data_callback : if the remote device invited, then callback result successful.
-
-int mdg_send_data_to_remote_device_test(void)
-{
-       int ret = 0;
-       BEGIN();
-
-       if (g_list_length(found_device_list) > 0) {
-               mdg_device_h device = (mdg_device_h)(found_device_list[0].data);
-               ret = mdg_device_send_data(handle, device, "123", NULL, NULL);
-       } else {
-               TC_PRT("not exist found device list");
-       }
-
-       END();
-       return ret;
-}
-
-int mdg_deinitialize_test(void)
-{
-       int ret = 0;
-
-       BEGIN();
-
-       ret = mdg_deinitialize(handle);
-
-       if (ret == 0)
-               TC_PRT("Initialize successful");
-       else
-               TC_PRT("Initialize failed, ret [%d]", ret);
-
-       END();
-       return ret;
-}
-
-tc_table_t tc_table[] = {
-       /* manager api */
-       {"mdg_initialize_test",  1,     mdg_initialize_test},
-       {"mdg_group_create_test",  2,   mdg_group_create_test},
-       {"mdg_group_find_test",  3,     mdg_group_find_test},
-       {"mdg_group_get_found_groups_test",  4, mdg_group_get_found_groups_test},
-       {"mdg_device_find_test",  5,    mdg_device_find_test},
-       {"mdg_device_get_found_devices_test",  6,       mdg_device_get_found_devices_test},
-       {"mdg_device_invite_test",  7,  mdg_device_invite_test},
-       {"mdg_device_eject_test",  8,   mdg_device_eject_test},
-       {"mdg_send_data_to_remote_device_test",  9,     mdg_send_data_to_remote_device_test},
-       {"mdg_deinitialize_test",  TEST_CASE_MAX,       mdg_deinitialize_test},
-
-       /*-----------*/
-       {"Finish",                                                                      0x0000, NULL},
-       {NULL,                                                                          0x00ff, NULL},
-};
-
-static void tc_usage_print(void)
-{
-       int i = 0;
-
-       while (tc_table[i].tc_name) {
-               if (tc_table[i].tc_code != 0x00ff)
-                       printf("Key [%2d] : usage %s\n", tc_table[i].tc_code, tc_table[i].tc_name);
-               else
-                       printf("Key [%2d] : usage %s\n\n", 0x00ff, tc_table[i].tc_name);
-
-               i++;
-       }
-}
-
-static int test_input_callback(void *data)
-{
-       long test_id = (long)data;
-       int ret = 0;
-
-       if ((test_id >= 1) && (test_id <= TEST_CASE_MAX)) {
-               TC_PRT("test_input_callback test_id : %ld", test_id);
-
-               if (tc_table[test_id-1].tc_func != NULL) {
-                       ret = tc_table[test_id-1].tc_func();
-
-                       if (ret != 0)
-                               TC_PRT(">>>>> Test Error Returned !!! : %d", ret);
-               }
-       }
-
-       return 0;
-}
-
-static int test_terminate(void)
-{
-       int ret = 0;
-
-       TC_PRT("Finished");
-
-       mdg_deinitialize_test();
-       g_main_loop_quit(main_loop);
-
-       return ret;
-}
-
-static gboolean key_event_cb(GIOChannel *chan, GIOCondition cond, gpointer data)
-{
-       char buf[BUFFER_LEN] = {0,};
-       long test_id;
-       int rv = 0;
-
-       memset(buf, 0, sizeof(buf));
-
-       rv = read(0, buf, 100);
-
-       if (rv < 0 || buf[0] == '0') {
-               test_terminate();
-               exit(1);
-       }
-
-       if (*buf == '\n' || *buf == '\r')
-               tc_usage_print();
-
-       test_id = atoi(buf);
-
-       test_input_callback((void *)test_id);
-
-       return TRUE;
-}
-
-
-int main(int argc, char ** argv)
-{
-       GIOChannel *key_io;
-
-       main_loop = g_main_loop_new(NULL, FALSE);
-       key_io = g_io_channel_unix_new(0);
-
-       printf("Test Thread created...\n");
-
-       g_io_add_watch(key_io, (G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL), key_event_cb, NULL);
-       g_main_loop_run(main_loop);
-
-       g_io_channel_unref(key_io);
-       g_main_loop_unref(main_loop);
-
-       return 0;
-}
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)