libnm,core: Add ConnectivityCheckUri property and accessors

So that applications like GNOME Shell can hit the same URI to show the
captive portal login page.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/209
This commit is contained in:
Iain Lane 2019-07-22 15:55:15 +01:00 committed by Thomas Haller
parent b621aba5c2
commit 8f8a1990ce
8 changed files with 61 additions and 2 deletions

View file

@ -527,6 +527,13 @@
-->
<property name="ConnectivityCheckEnabled" type="b" access="readwrite"/>
<!--
ConnectivityCheckUri:
The URI that NetworkManager will hit to check if there is internet connectivity.
-->
<property name="ConnectivityCheckUri" type="s" access="read"/>
<!--
GlobalDnsConfiguration:

View file

@ -1611,6 +1611,7 @@ global:
libnm_1_20_0 {
global:
nm_client_connectivity_check_get_uri;
nm_device_modem_get_apn;
nm_device_modem_get_device_id;
nm_device_modem_get_operator_code;

View file

@ -552,6 +552,28 @@ nm_client_connectivity_check_set_enabled (NMClient *client, gboolean enabled)
nm_manager_connectivity_check_set_enabled (NM_CLIENT_GET_PRIVATE (client)->manager, enabled);
}
/**
* nm_client_connectivity_check_get_uri:
* @client: a #NMClient
*
* Get the URI that will be queried to determine if there is internet
* connectivity.
*
* Returns: (transfer none): the connectivity URI in use
*
* Since: 1.20
*/
const char *
nm_client_connectivity_check_get_uri (NMClient *client)
{
g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
if (!nm_client_get_nm_running (client))
return NULL;
return nm_manager_connectivity_check_get_uri (NM_CLIENT_GET_PRIVATE (client)->manager);
}
/**
* nm_client_get_logging:
* @client: a #NMClient

View file

@ -265,6 +265,9 @@ NM_AVAILABLE_IN_1_10
void nm_client_connectivity_check_set_enabled (NMClient *client,
gboolean enabled);
NM_AVAILABLE_IN_1_20
const char *nm_client_connectivity_check_get_uri (NMClient *client);
gboolean nm_client_get_logging (NMClient *client,
char **level,
char **domains,

View file

@ -605,6 +605,12 @@ nm_manager_connectivity_check_set_enabled (NMManager *manager, gboolean enabled)
"b", enabled);
}
const char *
nm_manager_connectivity_check_get_uri (NMManager *manager)
{
return nmdbus_manager_get_connectivity_check_uri (NM_MANAGER_GET_PRIVATE (manager)->proxy);
}
gboolean
nm_manager_get_logging (NMManager *manager, char **level, char **domains, GError **error)
{

View file

@ -108,6 +108,8 @@ gboolean nm_manager_connectivity_check_get_enabled (NMManager *manager);
void nm_manager_connectivity_check_set_enabled (NMManager *manager,
gboolean enabled);
const char *nm_manager_connectivity_check_get_uri (NMManager *manager);
gboolean nm_manager_get_logging (NMManager *manager,
char **level,
char **domains,

View file

@ -132,6 +132,7 @@ NM_GOBJECT_PROPERTIES_DEFINE (NMManager,
PROP_CONNECTIVITY,
PROP_CONNECTIVITY_CHECK_AVAILABLE,
PROP_CONNECTIVITY_CHECK_ENABLED,
PROP_CONNECTIVITY_CHECK_URI,
PROP_PRIMARY_CONNECTION,
PROP_PRIMARY_CONNECTION_TYPE,
PROP_ACTIVATING_CONNECTION,
@ -1129,8 +1130,13 @@ _config_changed_cb (NMConfig *config, NMConfigData *config_data, NMConfigChangeF
if (NM_FLAGS_HAS (changes, NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG))
_notify (self, PROP_GLOBAL_DNS_CONFIGURATION);
if ((!nm_config_data_get_connectivity_uri (config_data)) != (!nm_config_data_get_connectivity_uri (old_data)))
_notify (self, PROP_CONNECTIVITY_CHECK_AVAILABLE);
if (!nm_streq0 (nm_config_data_get_connectivity_uri (config_data),
nm_config_data_get_connectivity_uri (old_data))) {
if ((!nm_config_data_get_connectivity_uri (config_data)) != (!nm_config_data_get_connectivity_uri (old_data)))
_notify (self, PROP_CONNECTIVITY_CHECK_AVAILABLE);
_notify (self, PROP_CONNECTIVITY_CHECK_URI);
}
g_object_thaw_notify (G_OBJECT (self));
}
@ -7542,6 +7548,10 @@ get_property (GObject *object, guint prop_id,
case PROP_CONNECTIVITY_CHECK_ENABLED:
g_value_set_boolean (value, concheck_enabled (self, NULL));
break;
case PROP_CONNECTIVITY_CHECK_URI:
config_data = nm_config_get_data (priv->config);
g_value_set_string (value, nm_config_data_get_connectivity_uri (config_data));
break;
case PROP_PRIMARY_CONNECTION:
nm_dbus_utils_g_value_set_object_path (value, priv->primary_connection);
break;
@ -8038,6 +8048,7 @@ static const NMDBusInterfaceInfoExtended interface_info_manager = {
NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE_L ("Connectivity", "u", NM_MANAGER_CONNECTIVITY),
NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE_L ("ConnectivityCheckAvailable", "b", NM_MANAGER_CONNECTIVITY_CHECK_AVAILABLE),
NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READWRITABLE_L ("ConnectivityCheckEnabled", "b", NM_MANAGER_CONNECTIVITY_CHECK_ENABLED, NM_AUTH_PERMISSION_ENABLE_DISABLE_CONNECTIVITY_CHECK, NM_AUDIT_OP_NET_CONTROL),
NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE ("ConnectivityCheckUri", "s", NM_MANAGER_CONNECTIVITY_CHECK_URI),
NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READWRITABLE_L ("GlobalDnsConfiguration", "a{sv}", NM_MANAGER_GLOBAL_DNS_CONFIGURATION, NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS, NM_AUDIT_OP_NET_CONTROL),
),
),
@ -8150,6 +8161,12 @@ nm_manager_class_init (NMManagerClass *manager_class)
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS);
obj_properties[PROP_CONNECTIVITY_CHECK_URI] =
g_param_spec_string (NM_MANAGER_CONNECTIVITY_CHECK_URI, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
obj_properties[PROP_PRIMARY_CONNECTION] =
g_param_spec_string (NM_MANAGER_PRIMARY_CONNECTION, "", "",
NULL,

View file

@ -47,6 +47,7 @@
#define NM_MANAGER_CONNECTIVITY "connectivity"
#define NM_MANAGER_CONNECTIVITY_CHECK_AVAILABLE "connectivity-check-available"
#define NM_MANAGER_CONNECTIVITY_CHECK_ENABLED "connectivity-check-enabled"
#define NM_MANAGER_CONNECTIVITY_CHECK_URI "connectivity-check-uri"
#define NM_MANAGER_PRIMARY_CONNECTION "primary-connection"
#define NM_MANAGER_PRIMARY_CONNECTION_TYPE "primary-connection-type"
#define NM_MANAGER_ACTIVATING_CONNECTION "activating-connection"