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