From: Jonh Wendell <[email protected]> use now the enum "State", adding the "Behind Captive Portal" value.
Signed-off-by: Jonh Wendell <[email protected]> --- src/nm-connectivity.c | 59 +++++++++++++++++++++++++-------------------------- src/nm-connectivity.h | 13 ++++++++---- src/nm-manager.c | 25 ++++++++++++++++------ 3 files changed, 56 insertions(+), 41 deletions(-) diff --git a/src/nm-connectivity.c b/src/nm-connectivity.c index 7e0de2c..51c1a5e 100644 --- a/src/nm-connectivity.c +++ b/src/nm-connectivity.c @@ -27,6 +27,7 @@ #include "nm-connectivity.h" #include "nm-logging.h" #include "nm-manager.h" +#include "nm-enum-types.h" G_DEFINE_TYPE (NMConnectivity, nm_connectivity, G_TYPE_OBJECT) @@ -46,8 +47,8 @@ typedef struct { guint interval; /* the expected response for the connectivity check */ char *response; - /* indicates if the last connection check was successful */ - gboolean connected; + /* indicates the state of the last connection */ + NMConnectivityState state; /* the source id for the periodic check */ guint check_id; } NMConnectivityPrivate; @@ -58,33 +59,33 @@ enum { PROP_URI, PROP_INTERVAL, PROP_RESPONSE, - PROP_CONNECTED, + PROP_STATE, LAST_PROP }; -gboolean -nm_connectivity_get_connected (NMConnectivity *connectivity) +NMConnectivityState +nm_connectivity_get_state (NMConnectivity *connectivity) { - g_return_val_if_fail (NM_IS_CONNECTIVITY (connectivity), FALSE); + g_return_val_if_fail (NM_IS_CONNECTIVITY (connectivity), NM_CONNECTIVITY_STATE_NOT_CONNECTED); - return NM_CONNECTIVITY_GET_PRIVATE (connectivity)->connected; + return NM_CONNECTIVITY_GET_PRIVATE (connectivity)->state; } static void -update_connected (NMConnectivity *self, gboolean connected) +update_state (NMConnectivity *self, NMConnectivityState state) { NMConnectivityPrivate *priv = NM_CONNECTIVITY_GET_PRIVATE (self); - gboolean old_connected = priv->connected; + NMConnectivityState old_state = priv->state; if (priv->uri == NULL || priv->interval == 0) { /* Default to connected if no checks are to be run */ - priv->connected = TRUE; + priv->state = NM_CONNECTIVITY_STATE_CONNECTED; } else - priv->connected = connected; + priv->state = state; - if (priv->connected != old_connected) - g_object_notify (G_OBJECT (self), NM_CONNECTIVITY_CONNECTED); + if (priv->state != old_state) + g_object_notify (G_OBJECT (self), NM_CONNECTIVITY_STATE); } static void @@ -93,7 +94,7 @@ nm_connectivity_check_cb (SoupSession *session, SoupMessage *msg, gpointer user_ NMConnectivity *self = NM_CONNECTIVITY (user_data); NMConnectivityPrivate *priv = NM_CONNECTIVITY_GET_PRIVATE (self); SoupURI *soup_uri; - gboolean connected_new = FALSE; + NMConnectivityState state_new = NM_CONNECTIVITY_STATE_NOT_CONNECTED; const char *nm_header; char *uri_string; @@ -104,13 +105,13 @@ nm_connectivity_check_cb (SoupSession *session, SoupMessage *msg, gpointer user_ nm_header = soup_message_headers_get_one (msg->response_headers, "X-NetworkManager-Status"); if (g_strcmp0 (nm_header, "online") == 0) { nm_log_dbg (LOGD_CORE, "Connectivity check for uri '%s' with Status header successful.", uri_string); - connected_new = TRUE; + state_new = NM_CONNECTIVITY_STATE_CONNECTED; } else { /* check response */ if (msg->response_body->data && (g_str_has_prefix (msg->response_body->data, priv->response))) { nm_log_dbg (LOGD_CORE, "Connectivity check for uri '%s' with expected response '%s' successful.", uri_string, priv->response); - connected_new = TRUE; + state_new = NM_CONNECTIVITY_STATE_CONNECTED; } else { nm_log_dbg (LOGD_CORE, "Connectivity check for uri '%s' with expected response '%s' failed (status %d).", uri_string, priv->response, msg->status_code); @@ -119,7 +120,7 @@ nm_connectivity_check_cb (SoupSession *session, SoupMessage *msg, gpointer user_ g_free (uri_string); /* update connectivity and emit signal */ - update_connected (self, connected_new); + update_state (self, state_new); priv->running = FALSE; g_object_notify (G_OBJECT (self), NM_CONNECTIVITY_RUNNING); @@ -186,7 +187,7 @@ nm_connectivity_stop_check (NMConnectivity *self) priv->check_id = 0; } - update_connected (self, FALSE); + update_state (self, NM_CONNECTIVITY_STATE_NOT_CONNECTED); } NMConnectivity * @@ -202,7 +203,7 @@ nm_connectivity_new (const gchar *check_uri, NM_CONNECTIVITY_RESPONSE, check_response ? check_response : DEFAULT_RESPONSE, NULL); g_return_val_if_fail (self != NULL, NULL); - update_connected (self, FALSE); + update_state (self, NM_CONNECTIVITY_STATE_NOT_CONNECTED); return self; } @@ -243,9 +244,6 @@ set_property (GObject *object, guint property_id, g_free (priv->response); priv->response = sanitize_string_val (value); break; - case PROP_CONNECTED: - priv->connected = g_value_get_boolean (value); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -272,8 +270,8 @@ get_property (GObject *object, guint property_id, case PROP_RESPONSE: g_value_set_string (value, priv->response); break; - case PROP_CONNECTED: - g_value_set_boolean (value, priv->connected); + case PROP_STATE: + g_value_set_enum (value, priv->state); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -358,11 +356,12 @@ nm_connectivity_class_init (NMConnectivityClass *klass) G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); g_object_class_install_property - (object_class, PROP_CONNECTED, - g_param_spec_boolean (NM_CONNECTIVITY_CONNECTED, - "Connected", - "Is connected", - FALSE, - G_PARAM_READABLE)); + (object_class, PROP_STATE, + g_param_spec_enum (NM_CONNECTIVITY_STATE, + "State", + "Connectivity state", + NM_TYPE_CONNECTIVITY_STATE, + NM_CONNECTIVITY_STATE_NOT_CONNECTED, + G_PARAM_READABLE)); } diff --git a/src/nm-connectivity.h b/src/nm-connectivity.h index 6f6ee16..c5ca692 100644 --- a/src/nm-connectivity.h +++ b/src/nm-connectivity.h @@ -39,8 +39,13 @@ #define NM_CONNECTIVITY_URI "uri" #define NM_CONNECTIVITY_INTERVAL "interval" #define NM_CONNECTIVITY_RESPONSE "response" -#define NM_CONNECTIVITY_CONNECTED "connected" +#define NM_CONNECTIVITY_STATE "state" +typedef enum { + NM_CONNECTIVITY_STATE_NOT_CONNECTED, + NM_CONNECTIVITY_STATE_CONNECTED, + NM_CONNECTIVITY_STATE_BEHIND_CAPTIVE_PORTAL +} NMConnectivityState; typedef struct { GObject parent; @@ -57,10 +62,10 @@ NMConnectivity *nm_connectivity_new (const gchar *check_uri, guint check_interval, const gchar *check_response); -void nm_connectivity_start_check (NMConnectivity *connectivity); +void nm_connectivity_start_check (NMConnectivity *connectivity); -void nm_connectivity_stop_check (NMConnectivity *connectivity); +void nm_connectivity_stop_check (NMConnectivity *connectivity); -gboolean nm_connectivity_get_connected (NMConnectivity *connectivity); +NMConnectivityState nm_connectivity_get_state (NMConnectivity *connectivity); #endif /* NM_CONNECTIVITY_H */ diff --git a/src/nm-manager.c b/src/nm-manager.c index 3dc60d8..eb7eb9a 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -531,7 +531,7 @@ nm_manager_update_state (NMManager *manager) new_state = NM_STATE_CONNECTED_GLOBAL; #if WITH_CONCHECK /* Connectivity check might have a better idea */ - if (nm_connectivity_get_connected (priv->connectivity) == FALSE) + if (nm_connectivity_get_state (priv->connectivity) != NM_CONNECTIVITY_STATE_CONNECTED) new_state = NM_STATE_CONNECTED_SITE; #endif break; @@ -3820,12 +3820,23 @@ connectivity_changed (NMConnectivity *connectivity, gpointer user_data) { NMManager *self = NM_MANAGER (user_data); - gboolean connected; - - connected = nm_connectivity_get_connected (connectivity); - nm_log_dbg (LOGD_CORE, "connectivity checking indicates %s", - connected ? "CONNECTED" : "NOT CONNECTED"); + NMConnectivityState state; + char state_str[100]; + + state = nm_connectivity_get_state (connectivity); + + switch (state) { + case NM_CONNECTIVITY_STATE_CONNECTED: + strcpy (state_str, "CONNECTED"); + break; + case NM_CONNECTIVITY_STATE_BEHIND_CAPTIVE_PORTAL: + strcpy (state_str, "BEHIND CAPTIVE PORTAL"); + break; + default: + strcpy (state_str, "NOT CONNECTED"); + } + nm_log_dbg (LOGD_CORE, "connectivity checking indicates %s", state_str); nm_manager_update_state (self); } #endif /* WITH_CONCHECK */ @@ -4092,7 +4103,7 @@ nm_manager_new (NMSettings *settings, #if WITH_CONCHECK priv->connectivity = nm_connectivity_new (connectivity_uri, connectivity_interval, connectivity_response); - g_signal_connect (priv->connectivity, "notify::" NM_CONNECTIVITY_CONNECTED, + g_signal_connect (priv->connectivity, "notify::" NM_CONNECTIVITY_STATE, G_CALLBACK (connectivity_changed), singleton); #endif -- 1.8.1.2 _______________________________________________ networkmanager-list mailing list [email protected] https://mail.gnome.org/mailman/listinfo/networkmanager-list
