diff options
-rwxr-xr-x | include/service.h | 3 | ||||
-rw-r--r-- | src/connman.conf | 1 | ||||
-rwxr-xr-x | src/manager.c | 21 | ||||
-rwxr-xr-x | 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 @@ <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" /> 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; |