Emit Service PropertyChanged when ConnectReason and DisconnectionRequested changes 56/213556/1
authorNishant Chaprana <n.chaprana@samsung.com>
Fri, 6 Sep 2019 15:22:47 +0000 (20:52 +0530)
committerNishant Chaprana <n.chaprana@samsung.com>
Fri, 6 Sep 2019 15:22:47 +0000 (20:52 +0530)
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 <n.chaprana@samsung.com>
include/service.h
packaging/connman.spec
src/network.c
src/service.c

index a5ee5ef..f4f4ea2 100644 (file)
@@ -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
index 080b465..7ce6465 100644 (file)
@@ -5,7 +5,7 @@
 
 Name:           connman
 Version:        1.35
-Release:        32
+Release:        33
 License:        GPL-2.0+
 Summary:        Connection Manager
 Url:            http://connman.net
index 9e5d961..fc57dcc 100755 (executable)
@@ -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);
index 85bcc31..43e7983 100644 (file)
@@ -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;