Added dbus method 'GetConnectedService' 15/258415/7 accepted/tizen/unified/20210601.135338 submit/tizen/20210528.085525
authorJaehyun Kim <jeik01.kim@samsung.com>
Mon, 17 May 2021 07:20:43 +0000 (16:20 +0900)
committerJaehyun Kim <jeik01.kim@samsung.com>
Fri, 28 May 2021 08:42:35 +0000 (17:42 +0900)
CAPI is fetching the full list of services
and looking for the service that is connected,
but this is an inefficient way,
so a dbus method to provide that information is added in connman.

Change-Id: I825682b3a1c01de3926145df499321ef161c4af7
Signed-off-by: Jaehyun Kim <jeik01.kim@samsung.com>
include/service.h
src/connman.conf
src/manager.c
src/service.c

index 93b8ba7..e41bba3 100755 (executable)
@@ -196,6 +196,7 @@ gboolean connman_service_is_no_ref_user_pdn_connection(
                                        struct connman_service *service);
 
 struct connman_service *connman_service_get_default_connection(void);
+struct connman_service *connman_service_get_connected_service(const char *ifname);
 
 /*
  * Description: telephony plug-in requires manual PROXY setting
@@ -211,7 +212,7 @@ void connman_service_set_disconnection_requested(struct connman_service *service
 void connman_service_set_internet_connection(struct connman_service *service,
                                                        bool internet_connection);
 bool connman_service_get_internet_connection(struct connman_service *service);
-DBusMessage *connman_service_get_defaut_info(DBusMessage *msg,
+DBusMessage *connman_service_create_dbus_service_reply(DBusMessage *msg,
                                                        struct connman_service *service);
 #endif
 
index adff8fa..267a4fc 100644 (file)
@@ -21,6 +21,7 @@
                <check send_destination="net.connman" send_interface="net.connman.Manager" send_member="GetProperties" privilege="http://tizen.org/privilege/network.get" />
                <check send_destination="net.connman" send_interface="net.connman.Manager" send_member="GetServices" privilege="http://tizen.org/privilege/network.get" />
                <check send_destination="net.connman" send_interface="net.connman.Manager" send_member="GetDefaultService" privilege="http://tizen.org/privilege/network.get" />
+               <check send_destination="net.connman" send_interface="net.connman.Manager" send_member="GetConnectedService" privilege="http://tizen.org/privilege/network.get" />
                <check send_destination="net.connman" send_interface="net.connman.Manager" send_member="GetMeshPeers" privilege="http://tizen.org/privilege/network.get" />
                <check send_destination="net.connman" send_interface="net.connman.Manager" send_member="GetConnectedMeshPeers" privilege="http://tizen.org/privilege/network.get" />
                <check send_destination="net.connman" send_interface="net.connman.Manager" send_member="GetDisconnectedMeshPeers" privilege="http://tizen.org/privilege/network.get" />
index 19f62c6..4f8306a 100755 (executable)
@@ -249,7 +249,22 @@ static DBusMessage *get_default_service(DBusConnection *conn,
        struct connman_service *service = connman_service_get_default_connection();
        DBG("service %p", service);
 
-       return connman_service_get_defaut_info(msg, service);
+       return connman_service_create_dbus_service_reply(msg, service);
+}
+
+static DBusMessage *get_connected_service(DBusConnection *conn,
+                                       DBusMessage *msg, void *data)
+{
+       const char *ifname;
+       struct connman_service *service;
+
+       dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &ifname,
+                                                       DBUS_TYPE_INVALID);
+
+       service = connman_service_get_connected_service(ifname);
+       DBG("Interface Name %s, service %p", ifname, service);
+
+       return connman_service_create_dbus_service_reply(msg, service);
 }
 #endif
 
@@ -732,6 +747,10 @@ static const GDBusMethodTable manager_methods[] = {
        { GDBUS_METHOD("GetDefaultService",
                        NULL, GDBUS_ARGS({ "service", "oa{sv}" }),
                        get_default_service) },
+       { GDBUS_METHOD("GetConnectedService",
+                       GDBUS_ARGS({ "ifname", "s" }),
+                       GDBUS_ARGS({ "service", "oa{sv}" }),
+                       get_connected_service) },
 #endif
 #if defined TIZEN_EXT_INS
        { GDBUS_METHOD("GetINS",
index c918b64..e4dbc32 100755 (executable)
@@ -2921,6 +2921,31 @@ struct connman_service *connman_service_get_default_connection(void)
 
        return default_service;
 }
+
+struct connman_service *connman_service_get_connected_service(const char *ifname)
+{
+       GList *list;
+       const char *svc_ifname;
+       struct connman_service *service;
+
+       if (!ifname)
+               return NULL;
+
+       for (list = service_list; list; list = list->next) {
+               service = list->data;
+
+               if (!is_connected(service->state))
+                       continue;
+
+               svc_ifname = connman_device_get_string(
+                               connman_network_get_device(service->network), "Interface");
+
+               if (svc_ifname && g_strcmp0(svc_ifname, ifname) == 0)
+                       return service;
+       }
+
+       return NULL;
+}
 #endif
 
 struct connman_service *connman_service_get_default(void)
@@ -4968,7 +4993,7 @@ bool connman_service_get_internet_connection(struct connman_service *service)
        return service->is_internet_connection;
 }
 
-DBusMessage *connman_service_get_defaut_info(DBusMessage *msg,
+DBusMessage *connman_service_create_dbus_service_reply(DBusMessage *msg,
                                                        struct connman_service *service)
 {
        DBusMessage *reply;