From 55c73c5d731572b1c92894ac57150555b7e61216 Mon Sep 17 00:00:00 2001 From: Nishant Chaprana Date: Fri, 6 Sep 2019 20:52:47 +0530 Subject: [PATCH] Emit Service PropertyChanged when ConnectReason and DisconnectionRequested changes Description: The properties perform below tasks:- 1. ConnectReason: To identify whether connection was an autoconnection or user initiated. 2. DisconnectionRequested: To identify whether disconnection was user initiated or not. Change-Id: I2ba4fc4637673571745517cdc33fc3a6d6367953 Signed-off-by: Nishant Chaprana --- include/service.h | 3 +++ packaging/connman.spec | 2 +- src/network.c | 4 ++++ src/service.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 65 insertions(+), 3 deletions(-) diff --git a/include/service.h b/include/service.h index a5ee5ef..f4f4ea2 100644 --- a/include/service.h +++ b/include/service.h @@ -187,6 +187,9 @@ struct connman_service *connman_service_get_default_connection(void); */ int connman_service_set_proxy(struct connman_service *service, const char *proxy, gboolean active); + +void connman_service_set_disconnection_requested(struct connman_service *service, + bool disconnection_requested); #endif #ifdef __cplusplus diff --git a/packaging/connman.spec b/packaging/connman.spec index 080b465..7ce6465 100644 --- a/packaging/connman.spec +++ b/packaging/connman.spec @@ -5,7 +5,7 @@ Name: connman Version: 1.35 -Release: 32 +Release: 33 License: GPL-2.0+ Summary: Connection Manager Url: http://connman.net diff --git a/src/network.c b/src/network.c index 9e5d961..fc57dcc 100755 --- a/src/network.c +++ b/src/network.c @@ -1705,6 +1705,8 @@ int __connman_network_connect(struct connman_network *network) __connman_device_disconnect(network->device); #if defined TIZEN_EXT DBG("ConnMan, Connect Request [%s]", network->name); + struct connman_service *service = connman_service_lookup_from_network(network); + connman_service_set_disconnection_requested(service, false); #endif err = network->driver->connect(network); if (err < 0) { @@ -1746,6 +1748,8 @@ int __connman_network_disconnect(struct connman_network *network) network->connecting = false; #if defined TIZEN_EXT DBG("ConnMan, Disconnect request"); + struct connman_service *service = connman_service_lookup_from_network(network); + connman_service_set_disconnection_requested(service, true); #endif if (network->driver->disconnect) err = network->driver->disconnect(network); diff --git a/src/service.c b/src/service.c index 85bcc31..43e7983 100644 --- a/src/service.c +++ b/src/service.c @@ -171,8 +171,11 @@ struct connman_service { * Only for EAP-FAST */ char *phase1; -#endif -#ifdef TIZEN_EXT + /* + * Description: To indicate that disconnection triggered by user. + */ + bool disconnection_requested; + enum connman_dnsconfig_method dns_config_method_ipv4; enum connman_dnsconfig_method dns_config_method_ipv6; #endif @@ -2299,6 +2302,51 @@ static void state_changed(struct connman_service *service) DBUS_TYPE_STRING, &str); } +#if defined TIZEN_EXT +static void connect_reason_changed(struct connman_service *service) +{ + if (!service->path) + return; + + if (!allow_property_changed(service)) + return; + + connman_dbus_property_changed_basic(service->path, + CONNMAN_SERVICE_INTERFACE, + "ConnectReason", + DBUS_TYPE_INT32, + &service->connect_reason); +} + +static void disconnection_requested_changed(struct connman_service *service) +{ + dbus_bool_t disconnection_requested; + + if (!service->path) + return; + + if (!allow_property_changed(service)) + return; + + disconnection_requested = service->disconnection_requested; + connman_dbus_property_changed_basic(service->path, + CONNMAN_SERVICE_INTERFACE, + "DisconnectionRequested", + DBUS_TYPE_BOOLEAN, + &disconnection_requested); +} + +void connman_service_set_disconnection_requested(struct connman_service *service, + bool disconnection_requested) +{ + if (service == NULL) + return; + + service->disconnection_requested = disconnection_requested; + disconnection_requested_changed(service); +} +#endif + static void strength_changed(struct connman_service *service) { if (service->strength == 0) @@ -5585,6 +5633,9 @@ static DBusMessage *connect_service(DBusConnection *conn, /*Reset the association status code while issue connect request*/ service->assoc_status_code = 0; + + /* Reset the disconnection_requested while issue connect request*/ + connman_service_set_disconnection_requested(service, false); #endif if (service->pending) @@ -6413,6 +6464,7 @@ static void service_initialize(struct connman_service *service) service->wps = false; #if defined TIZEN_EXT + service->disconnection_requested = false; service->storage_reload = false; /* * Description: TIZEN implements system global connection management. @@ -8386,6 +8438,9 @@ int __connman_service_connect(struct connman_service *service, DBG("service %p err %d", service, err); service->connect_reason = reason; +#if defined TIZEN_EXT + connect_reason_changed(service); +#endif if (err >= 0) return 0; -- 2.7.4