From: Jaehyun Kim Date: Mon, 17 May 2021 07:20:43 +0000 (+0900) Subject: Added dbus method 'GetConnectedService' X-Git-Tag: accepted/tizen/unified/20210601.135338^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F15%2F258415%2F7;p=platform%2Fupstream%2Fconnman.git 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 --- diff --git a/include/service.h b/include/service.h index 93b8ba7..e41bba3 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 adff8fa..267a4fc 100644 --- a/src/connman.conf +++ b/src/connman.conf @@ -21,6 +21,7 @@ + diff --git a/src/manager.c b/src/manager.c index 19f62c6..4f8306a 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 c918b64..e4dbc32 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;