From: Daniel Wagner <daniel.wag...@bmw-carit.de>

---
 src/config.c  |  2 +-
 src/connman.h |  2 +-
 src/device.c  |  4 ++--
 src/service.c | 30 +++++++++++++++++-------------
 src/session.c |  2 +-
 5 files changed, 22 insertions(+), 18 deletions(-)

diff --git a/src/config.c b/src/config.c
index feee6b2..22321bf 100644
--- a/src/config.c
+++ b/src/config.c
@@ -1258,7 +1258,7 @@ static void provision_service(gpointer key, gpointer 
value,
 
                g_timeout_add(0, remove_virtual_config, virtual);
        } else
-               __connman_service_auto_connect();
+               
__connman_service_auto_connect(CONNMAN_SERVICE_CONNECT_REASON_AUTO);
 }
 
 int __connman_config_provision_service(struct connman_service *service)
diff --git a/src/connman.h b/src/connman.h
index 80afab3..87c5835 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -705,7 +705,7 @@ int __connman_service_connect(struct connman_service 
*service,
 int __connman_service_disconnect(struct connman_service *service);
 int __connman_service_disconnect_all(void);
 void __connman_service_set_active_session(bool enable, GSList *list);
-void __connman_service_auto_connect(void);
+void __connman_service_auto_connect(enum connman_service_connect_reason 
reason);
 bool __connman_service_remove(struct connman_service *service);
 bool __connman_service_is_provider_pending(struct connman_service *service);
 void __connman_service_set_provider_pending(struct connman_service *service,
diff --git a/src/device.c b/src/device.c
index e112d27..508733c 100644
--- a/src/device.c
+++ b/src/device.c
@@ -669,7 +669,7 @@ int connman_device_reconnect_service(struct connman_device 
*device)
 {
        DBG("device %p", device);
 
-       __connman_service_auto_connect();
+       __connman_service_auto_connect(CONNMAN_SERVICE_CONNECT_REASON_AUTO);
 
        return 0;
 }
@@ -758,7 +758,7 @@ int connman_device_set_scanning(struct connman_device 
*device,
 
        __connman_technology_scan_stopped(device);
 
-       __connman_service_auto_connect();
+       __connman_service_auto_connect(CONNMAN_SERVICE_CONNECT_REASON_AUTO);
 
        return 0;
 }
diff --git a/src/service.c b/src/service.c
index 63054b7..0f294ee 100644
--- a/src/service.c
+++ b/src/service.c
@@ -3091,7 +3091,7 @@ int __connman_service_reset_ipconfig(struct 
connman_service *service,
                        *new_state = service->state_ipv4;
                else
                        *new_state = service->state_ipv6;
-               __connman_service_auto_connect();
+               
__connman_service_auto_connect(CONNMAN_SERVICE_CONNECT_REASON_AUTO);
        }
 
        DBG("err %d ipconfig %p type %d method %d state %s", err,
@@ -3146,7 +3146,7 @@ static DBusMessage *set_property(DBusConnection *conn,
                autoconnect_changed(service);
 
                if (autoconnect)
-                       __connman_service_auto_connect();
+                       
__connman_service_auto_connect(CONNMAN_SERVICE_CONNECT_REASON_AUTO);
 
                service_save(service);
        } else if (g_str_equal(name, "Nameservers.Configuration")) {
@@ -3569,7 +3569,9 @@ static GList *preferred_tech_list_get(void)
        return tech_data.preferred_list;
 }
 
-static bool auto_connect_service(GList *services, bool preferred)
+static bool auto_connect_service(GList *services,
+                               enum connman_service_connect_reason reason,
+                               bool preferred)
 {
        struct connman_service *service = NULL;
        bool ignore[MAX_CONNMAN_SERVICE_TYPES] = { };
@@ -3624,8 +3626,7 @@ static bool auto_connect_service(GList *services, bool 
preferred)
                DBG("service %p %s %s", service, service->name,
                                (preferred) ? "preferred" : "auto");
 
-               __connman_service_connect(service,
-                               CONNMAN_SERVICE_CONNECT_REASON_AUTO);
+               __connman_service_connect(service, reason);
 
                if (!active_count)
                        return true;
@@ -3638,6 +3639,7 @@ static bool auto_connect_service(GList *services, bool 
preferred)
 
 static gboolean run_auto_connect(gpointer data)
 {
+       enum connman_service_connect_reason reason = GPOINTER_TO_UINT(data);
        bool autoconnecting = false;
        GList *preferred_tech;
 
@@ -3647,24 +3649,26 @@ static gboolean run_auto_connect(gpointer data)
 
        preferred_tech = preferred_tech_list_get();
        if (preferred_tech) {
-               autoconnecting = auto_connect_service(preferred_tech, true);
+               autoconnecting = auto_connect_service(preferred_tech, reason,
+                                                       true);
                g_list_free(preferred_tech);
        }
 
        if (!autoconnecting || active_count)
-               auto_connect_service(service_list, false);
+               auto_connect_service(service_list, reason, false);
 
        return FALSE;
 }
 
-void __connman_service_auto_connect(void)
+void __connman_service_auto_connect(enum connman_service_connect_reason reason)
 {
        DBG("");
 
        if (autoconnect_timeout != 0)
                return;
 
-       autoconnect_timeout = g_timeout_add_seconds(0, run_auto_connect, NULL);
+       autoconnect_timeout = g_timeout_add_seconds(0, run_auto_connect,
+                                               GUINT_TO_POINTER(reason));
 }
 
 static gboolean run_vpn_auto_connect(gpointer data) {
@@ -3877,7 +3881,7 @@ static gboolean connect_timeout(gpointer user_data)
        if (autoconnect &&
                        service->connect_reason !=
                                CONNMAN_SERVICE_CONNECT_REASON_USER)
-               __connman_service_auto_connect();
+               
__connman_service_auto_connect(CONNMAN_SERVICE_CONNECT_REASON_AUTO);
 
        return FALSE;
 }
@@ -4979,7 +4983,7 @@ static void service_complete(struct connman_service 
*service)
        reply_pending(service, EIO);
 
        if (service->connect_reason != CONNMAN_SERVICE_CONNECT_REASON_USER)
-               __connman_service_auto_connect();
+               
__connman_service_auto_connect(CONNMAN_SERVICE_CONNECT_REASON_AUTO);
 
        g_get_current_time(&service->modified);
        service_save(service);
@@ -5385,7 +5389,7 @@ static int service_indicate_state(struct connman_service 
*service)
                 */
                downgrade_connected_services();
 
-               __connman_service_auto_connect();
+               
__connman_service_auto_connect(CONNMAN_SERVICE_CONNECT_REASON_AUTO);
        }
 
        if (new_state == CONNMAN_SERVICE_STATE_FAILURE) {
@@ -6714,7 +6718,7 @@ struct connman_service * 
__connman_service_create_from_network(struct connman_ne
        if (service->favorite) {
                device = connman_network_get_device(service->network);
                if (device && !connman_device_get_scanning(device))
-                       __connman_service_auto_connect();
+                       
__connman_service_auto_connect(CONNMAN_SERVICE_CONNECT_REASON_AUTO);
        }
 
        __connman_notifier_service_add(service, service->name);
diff --git a/src/session.c b/src/session.c
index 4c273cb..72ed5c9 100644
--- a/src/session.c
+++ b/src/session.c
@@ -1009,7 +1009,7 @@ static DBusMessage *connect_session(DBusConnection *conn,
                                        session->info->config.allowed_bearers);
        }
 
-       __connman_service_auto_connect();
+       __connman_service_auto_connect(CONNMAN_SERVICE_CONNECT_REASON_SESSION);
 
        return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
 }
-- 
1.8.5.3

_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman

Reply via email to