fn-manager : Implement dbus interface from/to d2d-subowner
authorsaerome.kim <saerome.kim@samsung.com>
Wed, 10 Jan 2018 05:02:22 +0000 (14:02 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 2 Jul 2018 10:38:38 +0000 (19:38 +0900)
- discover MOT enabled devices
- discover my Multiple Owned devices
- do MOT
- remove MO

Signed-off-by: saerome.kim <saerome.kim@samsung.com>
src/fn-manager/include/comp_mot_agent.h
src/fn-manager/src/comp_mot_agent.c

index 514bc462aa235b1af8915ce7411e06e802db47e1..ca975788b50438b28062dd0562a3a03ec5404d22 100644 (file)
@@ -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
index f392c3f1cde43888e3b4fbb10d3481c42cbcd7eb..c1f1ae53558e98e27a7e2cd8d81b0696b875bdae 100644 (file)
@@ -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);
        }