From: saerome.kim Date: Wed, 10 Jan 2018 05:02:22 +0000 (+0900) Subject: fn-manager : Implement dbus interface from/to d2d-subowner X-Git-Tag: submit/tizen/20190131.065036~263 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1dea4ffc519783aa7cf99116b681d6e17e7ec533;p=platform%2Fcore%2Fapi%2Fmulti-device-group.git fn-manager : Implement dbus interface from/to d2d-subowner - discover MOT enabled devices - discover my Multiple Owned devices - do MOT - remove MO Signed-off-by: saerome.kim --- diff --git a/src/fn-manager/include/comp_mot_agent.h b/src/fn-manager/include/comp_mot_agent.h index 514bc46..ca97578 100644 --- a/src/fn-manager/include/comp_mot_agent.h +++ b/src/fn-manager/include/comp_mot_agent.h @@ -25,5 +25,10 @@ int agent_dbus_stop(); int agent_enable(); int agent_disable(); +int get_ownerid(char* deviceid); +int find_mot_enable_devices(); +int find_mowned_devices(); +int mot_device(char* uuid_str, char *pin); +int remove_mot_device(char* uuid_str); #endif /* __COMP_MOT_AGENT_H__ */ \ No newline at end of file diff --git a/src/fn-manager/src/comp_mot_agent.c b/src/fn-manager/src/comp_mot_agent.c index f392c3f..c1f1ae5 100644 --- a/src/fn-manager/src/comp_mot_agent.c +++ b/src/fn-manager/src/comp_mot_agent.c @@ -35,6 +35,8 @@ #define AGENT_ENABLER_OBJ_PATH "/net/d2ds/enabler" #define AGENT_ENABLER_INTERFACE "net.d2ds.enabler" +#define NOTUSED(var) (var = var) + #define AGENT_DBUS_PROXY_TIMEOUT ((9.5 + 2) * 1000) /**< default timeout for GDBus */ struct agent_s { @@ -45,6 +47,131 @@ struct agent_s { }; struct agent_s agent; +int get_ownerid(char* deviceid) +{ + GVariant *variant = NULL; + int result = FN_ERROR_NONE; + GError *error = NULL; + + if (NULL == agent.dbus_connection || NULL == agent.gproxy_agent_service) { + LOG_ERR("I/O error"); + return FN_ERROR_IO_ERROR; + } + + variant = g_dbus_proxy_call_sync(agent.gproxy_agent_service, "get_ownerid", + NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); + if (variant) { + g_variant_get(variant, "(si)", deviceid, &result); + LOGD("get_ownerid status 0x%x", result); + } else if (error) { + LOGE("Failed DBus call [%s]", error->message); + g_error_free(error); + return FN_ERROR_IO_ERROR; + } + + return result; +} + +int find_mot_enable_devices() +{ + GVariant *variant = NULL; + int result = FN_ERROR_NONE; + GError *error = NULL; + + if (NULL == agent.dbus_connection || NULL == agent.gproxy_agent_service) { + LOG_ERR("I/O error"); + return FN_ERROR_IO_ERROR; + } + + variant = g_dbus_proxy_call_sync(agent.gproxy_agent_service, "disc_mot_enb_devs", + NULL, 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); + } else if (error) { + LOGE("Failed DBus call [%s]", error->message); + g_error_free(error); + return FN_ERROR_IO_ERROR; + } + + return result; +} + +int find_mowned_devices() +{ + GVariant *variant = NULL; + int result = FN_ERROR_NONE; + GError *error = NULL; + + if (NULL == agent.dbus_connection || NULL == agent.gproxy_agent_service) { + LOG_ERR("I/O error"); + return FN_ERROR_IO_ERROR; + } + + variant = g_dbus_proxy_call_sync(agent.gproxy_agent_service, "disc_mowned_devs", + NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); + if (variant) { + g_variant_get(variant, "(i)", &result); + LOGD("disc_mowned_devs status 0x%x", result); + } else if (error) { + LOGE("Failed DBus call [%s]", error->message); + g_error_free(error); + return FN_ERROR_IO_ERROR; + } + + return result; +} + +int mot_device(char* uuid_str, char *pin) +{ + GVariant *variant = NULL; + int result = FN_ERROR_NONE; + GError *error = NULL; + + if (NULL == agent.dbus_connection || NULL == agent.gproxy_agent_service) { + LOG_ERR("I/O error"); + return FN_ERROR_IO_ERROR; + } + + variant = g_dbus_proxy_call_sync(agent.gproxy_agent_service, "mot", + g_variant_new("(ss)", uuid_str, pin), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); + if (variant) { + g_variant_get(variant, "(i)", &result); + LOGD("mot status 0x%x", result); + } else if (error) { + LOGE("Failed DBus call [%s]", error->message); + g_error_free(error); + return FN_ERROR_IO_ERROR; + } + + return result; +} + +int remove_mot_device(char* uuid_str) +{ + GVariant *variant = NULL; + int result = FN_ERROR_NONE; + GError *error = NULL; + + if (NULL == agent.dbus_connection || NULL == agent.gproxy_agent_service) { + LOG_ERR("I/O error"); + return FN_ERROR_IO_ERROR; + } + + variant = g_dbus_proxy_call_sync(agent.gproxy_agent_service, "remove_mo", + g_variant_new("(s)", uuid_str), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); + if (variant) { + g_variant_get(variant, "(i)", &result); + LOGD("remove_mo status 0x%x", result); + } else if (error) { + LOGE("Failed DBus call [%s]", error->message); + g_error_free(error); + return FN_ERROR_IO_ERROR; + } + + return result; +} + int agent_enable() { GVariant *variant = NULL; @@ -110,7 +237,8 @@ static void _dbus_name_owner_notify(GObject *object, GParamSpec *pspec, { GDBusProxy *proxy = G_DBUS_PROXY(object); gchar *name_owner = g_dbus_proxy_get_name_owner(proxy); - struct agent_s* handle = (struct agent_s*)userdata; + + NOTUSED(userdata); LOG_DEBUG("Name owner notify [%s]", name_owner); @@ -167,6 +295,7 @@ static void _agent_signal_handler(GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer userdata) { + int result = FN_ERROR_NONE; struct agent_s *h = userdata; if (NULL == h) { @@ -177,7 +306,138 @@ static void _agent_signal_handler(GDBusConnection *connection, LOG_DEBUG("signal received = %s", signal_name); if (0 == g_strcmp0(signal_name, "subowner_enabled")) { - int result = FN_ERROR_NONE; + g_variant_get(parameters, "(i)", &result); + LOG_DEBUG("Result : %d", result); + } else if (0 == g_strcmp0(signal_name, "disc_mot_enb_devs_done")) { + GVariantIter *iter = NULL; + GVariantIter *iter_row = NULL; + + gchar *key; + GVariant *val; + gsize len = 0; + + if (NULL == parameters) { + LOG_ERR("No MOT enabled devices found"); + return; + } + g_variant_get(parameters, "(aa{sv})", &iter); + while (g_variant_iter_next(iter, "a{sv}", &iter_row)) { + while (g_variant_iter_loop(iter_row, "{sv}", &key, &val)) { + if (strcasecmp(key, "deviceId") == 0) { + const char *deviceid = g_variant_get_string(val, &len); + LOG_DEBUG("deviceId=%s", deviceid); + } else if (strcasecmp(key, "adapter") == 0) { + int adapter = g_variant_get_uint32(val); + LOG_DEBUG("adapter = %d", adapter); + } else if (strcasecmp(key, "adapter") == 0) { + int flags = g_variant_get_uint32(val); + LOG_DEBUG("flags = %d", flags); + } else if (strcasecmp(key, "port") == 0) { + int port = g_variant_get_uint16(val); + LOG_DEBUG("port = %d", port); + } else if (strcasecmp(key, "addr") == 0) { + const char *addr = g_variant_get_string(val, &len); + LOG_DEBUG("addr=%s", addr); + } else if (strcasecmp(key, "ifindex") == 0) { + int ifindex = g_variant_get_uint32(val); + LOG_DEBUG("ifindex = %d", ifindex); + } else if (strcasecmp(key, "routeData") == 0) { + const char *routeData = g_variant_get_string(val, &len); + LOG_DEBUG("routeData=%s", routeData); + } else if (strcasecmp(key, "remoteId") == 0) { + const char *remoteId = g_variant_get_string(val, &len); + LOG_DEBUG("remoteId=%s", remoteId); + } else if (strcasecmp(key, "connType") == 0) { + int connType = g_variant_get_uint32(val); + LOG_DEBUG("connType = %d", connType); + } else if (strcasecmp(key, "securePort") == 0) { + int securePort = g_variant_get_uint16(val); + LOG_DEBUG("securePort = %d", securePort); +#ifdef WITH_TCP + } else if (strcasecmp(key, "tcpPort") == 0) { + int tcpPort = g_variant_get_uint16(val); + LOG_DEBUG("tcpPort = %d", tcpPort); + } +#endif + else if (strcasecmp(key, "secVer") == 0) { + const char *secVer = g_variant_get_string(val, &len); + LOG_DEBUG("secVer=%s", secVer); + } else if (strcasecmp(key, "ifindex") == 0) { + int devStatus = g_variant_get_uint32(val); + LOG_DEBUG("devStatus = %d", devStatus); + } + } + g_variant_iter_free(iter_row); + } + g_variant_iter_free(iter); + + } else if (0 == g_strcmp0(signal_name, "disc_mowned_devs_done")) { + GVariantIter *iter = NULL; + GVariantIter *iter_row = NULL; + + gchar *key; + GVariant *val; + gsize len = 0; + + if (NULL == parameters) { + LOG_ERR("No Multiple Owned devices found"); + return; + } + g_variant_get(parameters, "(aa{sv})", &iter); + while (g_variant_iter_next(iter, "a{sv}", &iter_row)) { + while (g_variant_iter_loop(iter_row, "{sv}", &key, &val)) { + if (strcasecmp(key, "deviceId") == 0) { + const char *deviceid = g_variant_get_string(val, &len); + LOG_DEBUG("deviceId=%s", deviceid); + } else if (strcasecmp(key, "adapter") == 0) { + int adapter = g_variant_get_uint32(val); + LOG_DEBUG("adapter = %d", adapter); + } else if (strcasecmp(key, "adapter") == 0) { + int flags = g_variant_get_uint32(val); + LOG_DEBUG("flags = %d", flags); + } else if (strcasecmp(key, "port") == 0) { + int port = g_variant_get_uint16(val); + LOG_DEBUG("port = %d", port); + } else if (strcasecmp(key, "addr") == 0) { + const char *addr = g_variant_get_string(val, &len); + LOG_DEBUG("addr=%s", addr); + } else if (strcasecmp(key, "ifindex") == 0) { + int ifindex = g_variant_get_uint32(val); + LOG_DEBUG("ifindex = %d", ifindex); + } else if (strcasecmp(key, "routeData") == 0) { + const char *routeData = g_variant_get_string(val, &len); + LOG_DEBUG("routeData=%s", routeData); + } else if (strcasecmp(key, "remoteId") == 0) { + const char *remoteId = g_variant_get_string(val, &len); + LOG_DEBUG("remoteId=%s", remoteId); + } else if (strcasecmp(key, "connType") == 0) { + int connType = g_variant_get_uint32(val); + LOG_DEBUG("connType = %d", connType); + } else if (strcasecmp(key, "securePort") == 0) { + int securePort = g_variant_get_uint16(val); + LOG_DEBUG("securePort = %d", securePort); +#ifdef WITH_TCP + } else if (strcasecmp(key, "tcpPort") == 0) { + int tcpPort = g_variant_get_uint16(val); + LOG_DEBUG("tcpPort = %d", tcpPort); + } +#endif + else if (strcasecmp(key, "secVer") == 0) { + const char *secVer = g_variant_get_string(val, &len); + LOG_DEBUG("secVer=%s", secVer); + } else if (strcasecmp(key, "ifindex") == 0) { + int devStatus = g_variant_get_uint32(val); + LOG_DEBUG("devStatus = %d", devStatus); + } + } + g_variant_iter_free(iter_row); + } + g_variant_iter_free(iter); + + } else if (0 == g_strcmp0(signal_name, "mot_done")) { + g_variant_get(parameters, "(i)", &result); + LOG_DEBUG("Result : %d", result); + } else if (0 == g_strcmp0(signal_name, "remove_mo_done")) { g_variant_get(parameters, "(i)", &result); LOG_DEBUG("Result : %d", result); }