From 5e42775e3dbed134c7e319b38b50eaf488b0f450 Mon Sep 17 00:00:00 2001 From: Jaehyun Kim Date: Mon, 17 May 2021 16:20:43 +0900 Subject: Added dbus method 'GetConnectedService' 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 --- include/service.h | 3 ++- src/connman.conf | 1 + src/manager.c | 21 ++++++++++++++++++++- src/service.c | 27 ++++++++++++++++++++++++++- 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/include/service.h b/include/service.h index 93b8ba7d..e41bba39 100755 --- a/include/service.h +++ b/include/service.h @@ -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 diff --git a/src/connman.conf b/src/connman.conf index adff8fa4..267a4fcd 100644 --- a/src/connman.conf +++ b/src/connman.conf @@ -21,6 +21,7 @@ + diff --git a/src/manager.c b/src/manager.c index 19f62c65..4f8306a1 100755 --- a/src/manager.c +++ b/src/manager.c @@ -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", diff --git a/src/service.c b/src/service.c index c918b64c..e4dbc32f 100755 --- a/src/service.c +++ b/src/service.c @@ -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; -- cgit v1.2.3