return RET_SUCCESS;
}
+#if 0
static int run_group_get_members(MManager *mm, struct menu_data *menu)
{
int ret;
return RET_SUCCESS;
}
+#endif
static int run_group_merge(MManager *mm, struct menu_data *menu)
{
return RET_SUCCESS;
}
-void _mowned_device_finish_cb(int num_of_devs, void *user_data)
+void _mowned_device_finish_cb(int result, void *user_data)
{
- msgp("%d Device(s) Found", num_of_devs);
+ msgb("Find My Owned Devices Finished ret: [0x%X] [%s]", result, comp_error_to_string(result));
}
bool _mowned_device_found_cb(companion_device_h device, void *user_data)
static int run_devices_find_mowned_device(MManager *mm, struct menu_data *menu)
{
int ret;
-
+ int duration;
msg("Find My Owned Devices");
- ret = companion_device_find_mowned_device(_mowned_device_found_cb, _mowned_device_finish_cb, NULL);
+ if (strlen(timeout))
+ duration = (unsigned short)strtol(timeout, NULL, 10);
+
+ ret = companion_device_find_mowned_device(duration, _mowned_device_found_cb, _mowned_device_finish_cb, NULL);
if (COMP_ERROR_NONE != ret) {
msgr("Failed to Find My Owned Devices: [%s(0x%X)]", comp_error_to_string(ret), ret);
return RET_FAILURE;
int companion_device_find(int timeout, companion_device_found_cb found_cb,
companion_device_find_finish_cb finish_cb, void *user_data);
int companion_device_get_found_devices(companion_device_h **devices, int *count);
-int companion_device_find_mowned_device(
+int companion_device_find_mowned_device(int timeout,
companion_device_found_cb found_cb, companion_device_find_finish_cb finish_cb, void *user_data);
int companion_device_get_found_mowned_devices(
companion_device_h **devices, int *count);
} device_find_finish_cb_t;
device_find_finish_cb_t device_find_finish_cb;
+typedef struct _mowned_device_found_cb_t {
+ companion_device_found_cb found_cb;
+ void *user_data;
+} mowned_device_found_cb_t;
+mowned_device_found_cb_t mowned_device_found_cb;
+
+typedef struct _mowned_device_find_finish_cb_t {
+ companion_device_find_finish_cb finish_cb;
+ void *user_data;
+} mowned_device_find_finish_cb_t;
+mowned_device_find_finish_cb_t mowned_device_find_finish_cb;
+
typedef struct _device_invite_result_cb_t {
companion_device_invite_result_cb result_cb;
void *user_data;
device_find_finish_cb.finish_cb(ret, 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;
+ companion_device_t *device = NULL;
+
+ g_variant_get(va, "aa{sv}", &iter);
+ while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+ char *device_id;
+ char *ip;
+ char *device_type;
+ int port;
+
+ 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, "SecVer") == 0) {
+ device_type = (char *)g_variant_get_string(key_value, NULL);
+ } else if (g_strcmp0(key, "Port") == 0) {
+ port = g_variant_get_uint16(key_value);
+ }
+
+ }
+ g_variant_iter_free(iter_row);
+
+ device = _create_device_handle(device_id, ip, device_type, port);
+ if (mowned_device_found_cb.found_cb)
+ mowned_device_found_cb.found_cb(device, mowned_device_found_cb.user_data);
+ }
+ g_variant_iter_free(iter);
+}
+
+static void _mowned_device_find_finish_cb(Group *object,
+ gint ret, gpointer user_data)
+{
+ if (mowned_device_find_finish_cb.finish_cb)
+ mowned_device_find_finish_cb.finish_cb(ret, mowned_device_find_finish_cb.user_data);
+}
+
static void __device_invite_result_cb(Group *object,
gint ret, gpointer user_data)
{
g_signal_connect(group_proxy, "group-find-finish", G_CALLBACK(_group_find_finish_cb), NULL);
g_signal_connect(group_proxy, "device-found", G_CALLBACK(__device_found_cb), NULL);
g_signal_connect(group_proxy, "device-find-finish", G_CALLBACK(_device_find_finish_cb), NULL);
- g_signal_connect(group_proxy, "mowned-device-found", G_CALLBACK(__device_found_cb), NULL);
+ g_signal_connect(group_proxy, "mowned-device-found", G_CALLBACK(__mowned_device_found_cb), NULL);
+ g_signal_connect(group_proxy, "mowned-device-find-finish", G_CALLBACK(_mowned_device_find_finish_cb), NULL);
g_signal_connect(group_proxy, "device-invite-result", G_CALLBACK(__device_invite_result_cb), NULL);
g_signal_connect(group_proxy, "device-eject-result", G_CALLBACK(__device_eject_result_cb), NULL);
g_signal_connect(group_proxy, "send-data-finish", G_CALLBACK(__send_data_finish_cb), NULL);
group_call_get_found_groups_sync(group_proxy, &ret, &va, NULL, &error);
*count = g_variant_n_children(va);
- _ERR("get found groups : %d", *count);
+ _DBG("get found groups : %d", *count);
if (*count > 0) {
GVariantIter *iter = NULL, *iter_row = NULL;
return ret;
}
-int companion_device_find_mowned_device(
+int companion_device_find_mowned_device(int timeout,
companion_device_found_cb found_cb, companion_device_find_finish_cb finish_cb, void *user_data)
{
int ret = 0;
GError *error = NULL;
- device_found_cb.found_cb = found_cb;
- device_found_cb.user_data = user_data;
- device_find_finish_cb.finish_cb= finish_cb;
- device_find_finish_cb.user_data = user_data;
+ mowned_device_found_cb.found_cb = found_cb;
+ mowned_device_found_cb.user_data = user_data;
+ mowned_device_find_finish_cb.finish_cb= finish_cb;
+ mowned_device_find_finish_cb.user_data = user_data;
/* get groups from daemon using gdbus */
- group_call_find_mowned_devices_sync(group_proxy, &ret, NULL, &error);
+ group_call_find_mowned_devices_sync(group_proxy, timeout, &ret, NULL, &error);
return ret;
}
/* *count = g_variant_n_children(va); */
*count = num;
- _ERR("get found devices : %d", *count);
+ _DBG("get found devices : %d", *count);
if (*count > 0) {
GVariantIter *iter = NULL, *iter_row = NULL;
/* *count = g_variant_n_children(va); */
*count = num;
- _ERR("get found mowned devices : %d", *count);
+ _INFO("get found mowned devices : %d", *count);
if (*count > 0) {
GVariantIter *iter = NULL, *iter_row = NULL;
GError *error = NULL;
companion_device_t *dev = (companion_device_t *)device;
- _ERR("Device id : %s", dev->device_id);
+ _DBG("Device id : %s", dev->device_id);
group_call_request_create_group_sync(group_proxy, dev->device_id, group_name, &ret, NULL, &error);
companion_group_t *grp = (companion_group_t *)group;
companion_device_t *dev = (companion_device_t *)device;
- _ERR("%s", grp->device_id);
- _ERR("%s", grp->group_name);
- _ERR("%s", dev->device_id);
+ _DBG("%s", grp->device_id);
+ _DBG("%s", grp->group_name);
+ _DBG("%s", dev->device_id);
group_call_request_invite(group_proxy, grp->device_id, grp->group_name, dev->device_id, PIN,
NULL, NULL, NULL);
companion_group_t *grp = (companion_group_t *)group;
companion_device_t *dev = (companion_device_t *)device;
- _ERR("%s", grp->device_id);
- _ERR("%s", grp->group_name);
- _ERR("%s", dev->device_id);
+ _DBG("%s", grp->device_id);
+ _DBG("%s", grp->group_name);
+ _DBG("%s", dev->device_id);
group_call_request_eject(group_proxy, grp->device_id, grp->group_name, dev->device_id,
NULL, NULL, NULL);
<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" />
</signal>
+ <signal name="MownedDeviceFindFinish">
+ <arg type="i" name="result" direction="out" />
+ </signal>
<signal name="JoinResult">
<arg type="i" name="result" direction="out" />
</signal>
gboolean group_delete(Group *group, GDBusMethodInvocation *invocation,
gpointer user_data);
-gboolean group_device_find(Group *group, GDBusMethodInvocation *invocation, gint timeout,
- gpointer user_data);
+gboolean group_device_find(Group *group, GDBusMethodInvocation *invocation,
+ gint timeout ,gpointer user_data);
gboolean group_device_invite(Group *group, GDBusMethodInvocation *invocation,
gchar *uuid_dev1, gchar *uuid_dev2, gchar *pin, gchar *uri_1, gchar *rt_1,
gchar *uuid_dev, gchar *addr, int port, gchar *data, int len, gpointer user_data);
gboolean group_find_mowned_devices(Group *group,
- GDBusMethodInvocation *invocation, gpointer user_data);
+ GDBusMethodInvocation *invocation, int timeout, gpointer user_data);
gboolean group_get_mowned_device(Group *group,
GDBusMethodInvocation *invocation, gpointer user_data);
void notify_group_device_invite_result(int ret);
void notify_group_device_eject_result(int ret);
void notify_mowned_device_found(int device_count, GVariant *device_data);
+void notify_mowned_device_find_finish(int ret);
void notify_group_join(int result);
void notify_send_data_finish(char *resp_data, int ret);
void notify_request_result(char *cmd, char *arg, int ret);
}
gboolean group_find_mowned_devices(Group *group,
- GDBusMethodInvocation *invocation, gpointer user_data)
+ GDBusMethodInvocation *invocation, gint timeout, gpointer user_data)
{
int ret = 0;
LOG_DEBUG("find mot owned devices called using dbus successful");
- ret = comp_group_find_mowned_devices();
+ ret = comp_group_find_mowned_devices(timeout);
group_complete_find_mowned_devices(group, invocation, ret);
group_emit_mowned_device_found(group_dbus_get_object(), device_count, device_data);
}
+void notify_mowned_device_find_finish(int ret)
+{
+ group_emit_mowned_device_find_finish(group_dbus_get_object(), ret);
+}
void notify_group_join(int result)
{
group_emit_join_result(group_dbus_get_object(), result);
LOG_END();
}
-int comp_group_find_mowned_devices()
+int comp_group_find_mowned_devices(int timeout)
{
int ret;
g_list_free_full(mowned_dev_list, _mot_enb_dev_list_free_func);
mowned_dev_list = NULL;
- ret = agent_find_mowned_devices();
+ ret = agent_find_mowned_devices(timeout);
if (ret != COMP_ERROR_NONE) {
LOG_ERR("Failed to find mowned devices : %s",
comp_log_get_error_string(ret));
static char *device_uuid2 = NULL;
#endif
-int found_device_count;
+int found_device_count; /**< Number of MOT enabled devices */
+int found_mowned_device_count; /**< Number of My Sub-Owned devices */
int agent_get_ownerid(char* deviceid)
{
found_device_count = 0;
variant = g_dbus_proxy_call_sync(agent.gproxy_agent_service, "disc_mot_enb_devs",
- NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
+ g_variant_new("(i)", timeout), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
if (variant) {
g_variant_get(variant, "(i)", &result);
LOGD("disc_mot_enb_devs status 0x%x", result);
return result;
}
-int agent_find_mowned_devices()
+static gboolean _find_mowned_device_timeout_cb(gpointer data)
+{
+ int ret = -1;
+
+ if (found_mowned_device_count > 0)
+ ret = 0;
+
+ notify_mowned_device_find_finish(ret);
+
+ return false;
+}
+
+int agent_find_mowned_devices(int timeout)
{
GVariant *variant = NULL;
int result = COMP_ERROR_NONE;
}
variant = g_dbus_proxy_call_sync(agent.gproxy_agent_service, "disc_mowned_devs",
- NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
+ g_variant_new("(i)", timeout), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
if (variant) {
g_variant_get(variant, "(i)", &result);
LOGD("disc_mowned_devs status 0x%x", result);
return COMP_ERROR_IO_ERROR;
}
+ g_timeout_add_seconds(timeout + 1, _find_mowned_device_timeout_cb, NULL);
+
return result;
}
g_variant_iter_free(iter);
LOG_DEBUG("mowned_devs_cnt = %d", mowned_devs_cnt);
-
+ found_mowned_device_count = mowned_devs_cnt;
comp_group_notify_mowned_device_find_done(mowned_devs_cnt);
} else if (0 == g_strcmp0(signal_name, "acl_done")) {
g_variant_get(parameters, "(i)", &result);
<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" />
</signal>
+ <signal name="MownedDeviceFindFinish">
+ <arg type="i" name="result" direction="out" />
+ </signal>
<signal name="JoinResult">
<arg type="i" name="result" direction="out" />
</signal>
<arg type="i" name="result" direction="out"/>\r
</method>\r
<method name="disc_mot_enb_devs">\r
+ <arg type="i" name="timeout" direction="in"/>\r
<arg type="i" name="result" direction="out"/>\r
</method>\r
<method name="disc_mowned_devs">\r
+ <arg type="i" name="timeout" direction="in"/>\r
<arg type="i" name="result" direction="out"/>\r
</method>\r
<method name="mot">\r
\r
static gboolean _ma_dbus_handle_disc_mot_enb_devs(NetMa *object,\r
GDBusMethodInvocation *invocation,\r
+ gint timeout,\r
gpointer user_data)\r
{\r
int ret = MA_ERROR_NONE;\r
\r
ma_check_null_ret_error("service", service, FALSE);\r
\r
- ret = ma_request_disc_mot_enb_devs(service);\r
+ ret = ma_request_disc_mot_enb_devs(service, timeout);\r
if (MA_ERROR_NONE != ret)\r
MA_LOGE("Failed to ma_request_disc_mot_enb_devs !");\r
\r
\r
static gboolean _ma_dbus_handle_disc_mowned_devs(NetMa *object,\r
GDBusMethodInvocation *invocation,\r
+ gint timeout,\r
gpointer user_data)\r
{\r
int ret = MA_ERROR_NONE;\r
ma_check_null_ret_error("service", service, FALSE);\r
\r
\r
- ret = ma_request_disc_owned_devs(service);\r
+ ret = ma_request_disc_owned_devs(service, timeout);\r
if (MA_ERROR_NONE != ret)\r
MA_LOGE("Failed to ma_request_disc_owned_devs !");\r
\r
typedef struct {
ma_cmd_id_e cid; /**< Command ID */
int tid; /**< Timer ID */
+ int timeout; /**< Timeout value */
GThread *thread; /**< Thread handle */
unsigned int sid; /**< Subcribed signal ID */
bool found; /**< Whether we discoverd devices */
ma_check_null_ret_error("con", con, NULL);
MA_LOGI("Discovering Multiple Ownership Transfer enabled Devices on Network..");
- if (OC_STACK_OK != OCDiscoverMultipleOwnerEnabledDevices(DISCOVERY_TIMEOUT,
+ if (OC_STACK_OK != OCDiscoverMultipleOwnerEnabledDevices(con->timeout,
&g_client->g_motdev_list)) {
MA_LOGE( "OCDiscoverMultipleOwnerEnalbedDevices API error");
goto DISC_MOT_ENB_DEVS_END;
return NULL;
}
-static int _disc_mot_enb_devs(ma_service *service)
+static int _disc_mot_enb_devs(ma_service *service, int timeout)
{
ma_req_cb_s *con = NULL;
con = g_malloc0(sizeof(ma_req_cb_s));
con->userdata = service;
con->cid = MA_DISC_MOT_ENB_DEVS;
+
+ if (timeout < 1)
+ timeout = DISCOVERY_TIMEOUT;
+ con->timeout = timeout;
+
#ifdef TIMEOUT_USED
- con->tid = g_timeout_add_seconds(DISCOVERY_TIMEOUT * 2, _ma_timeout_cb, con);
+ con->tid = g_timeout_add_seconds(timeout * 2, _ma_timeout_cb, con);
#endif
return MA_ERROR_NONE;
}
_remove_owned_client();
MA_LOGD("Discovering Multiple Owned Devices");
- ret = OCDiscoverMultipleOwnedDevices(DISCOVERY_TIMEOUT, &g_client->g_mowned_list);
+ ret = OCDiscoverMultipleOwnedDevices(con->timeout, &g_client->g_mowned_list);
if (OC_STACK_OK != ret) {
MA_LOGE( "OCDiscoverMultipleOwnerEnabledDevices API error");
goto DISC_OWNED_DEVS_END;
return NULL;
}
-static int _disc_owned_devs(ma_service *service)
+static int _disc_owned_devs(ma_service *service, int timeout)
{
ma_req_cb_s *con = NULL;
con = g_malloc0(sizeof(ma_req_cb_s));
con->userdata = service;
con->cid = MA_DISC_MOWNED_DEVS;
+ if (timeout < 1)
+ timeout = DISCOVERY_TIMEOUT;
+ con->timeout = timeout;
+
con->thread = g_thread_try_new("disc_owned_devs", _disc_owned_devs_func, con, NULL);
if (!con->thread) {
MA_LOGE("Failed to create thread");
}
g_thread_unref(con->thread);
#ifdef TIMEOUT_USED
- con->tid = g_timeout_add_seconds(DISCOVERY_TIMEOUT * 2, _ma_timeout_cb, con);
+ con->tid = g_timeout_add_seconds(timeout * 2, _ma_timeout_cb, con);
#endif
return MA_ERROR_NONE;
}
return ret;
}
-int ma_request_disc_mot_enb_devs(ma_service *service)
+int ma_request_disc_mot_enb_devs(ma_service *service, int timeout)
{
int ret =MA_ERROR_NONE;
/* Set d2ds status 'pending' */
g_atomic_int_set(&service->pending, 1);
- ret = _disc_mot_enb_devs(service);
+ ret = _disc_mot_enb_devs(service, timeout);
return ret;
}
-int ma_request_disc_owned_devs(ma_service *service)
+int ma_request_disc_owned_devs(ma_service *service, int timeout)
{
int ret =MA_ERROR_NONE;
/* Set d2ds status 'pending' */
g_atomic_int_set(&service->pending, 1);
- ret = _disc_owned_devs(service);
+ ret = _disc_owned_devs(service, timeout);
return ret;
}
int ma_request_enable(ma_service *service);
int ma_request_disable(ma_service *service);
int ma_request_get_ownerid(ma_service *service, gchar **uuid_str);
-int ma_request_disc_mot_enb_devs(ma_service *service);
-int ma_request_disc_owned_devs(ma_service *service);
+int ma_request_disc_mot_enb_devs(ma_service *service, int timeout);
+int ma_request_disc_owned_devs(ma_service *service, int timeout);
int ma_request_mot(ma_service *service, gchar* uuid, gchar *pin);
int ma_request_prov_acl(ma_service *service, gchar *target, gchar *subject,
gchar *rsrc_uri, gchar *rsrc_type, gchar *rsrc_interface, int permission);