diff options
author | Thomas Haller <thaller@redhat.com> | 2019-10-03 10:49:00 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2019-10-03 10:49:00 +0200 |
commit | adac530d7ac04f8ecdf7b71ee252acf7b2ae10eb (patch) | |
tree | 3e750810dcf318d9307343aed09018e31171d7bd | |
parent | 3019648b4bc1856b84b904bb4cf02500fe35cb76 (diff) | |
parent | f45aeba40231dbee0e2e7640eebc6bdaa15fdc32 (diff) | |
download | NetworkManager-adac530d7ac04f8ecdf7b71ee252acf7b2ae10eb.tar.gz |
libnm: merge branch 'th/libnm-deprecate-sync-api'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/296
-rw-r--r-- | docs/libnm/libnm-docs.xml | 119 | ||||
-rw-r--r-- | libnm-core/nm-version.h | 26 | ||||
-rw-r--r-- | libnm/nm-client.c | 34 | ||||
-rw-r--r-- | libnm/nm-client.h | 38 | ||||
-rw-r--r-- | libnm/nm-device-wifi.c | 4 | ||||
-rw-r--r-- | libnm/nm-device-wifi.h | 2 | ||||
-rw-r--r-- | libnm/nm-device.c | 18 | ||||
-rw-r--r-- | libnm/nm-device.h | 13 | ||||
-rw-r--r-- | libnm/nm-libnm-utils.h | 4 | ||||
-rw-r--r-- | libnm/nm-manager.h | 22 | ||||
-rw-r--r-- | libnm/nm-remote-connection.c | 8 | ||||
-rw-r--r-- | libnm/nm-remote-connection.h | 8 | ||||
-rw-r--r-- | libnm/nm-remote-settings.h | 7 |
13 files changed, 295 insertions, 8 deletions
diff --git a/docs/libnm/libnm-docs.xml b/docs/libnm/libnm-docs.xml index b66e95ef5a..357cfe16d0 100644 --- a/docs/libnm/libnm-docs.xml +++ b/docs/libnm/libnm-docs.xml @@ -172,6 +172,125 @@ print ("NetworkManager version " + client.get_version())]]></programlisting></in <ulink url="https://gitlab.freedesktop.org/NetworkManager/NetworkManager/tree/master/examples">some examples</ulink>. </para> </simplesect> + + <simplesect id="sync-api"> + <title>Synchronous API in libnm</title> + <para> + Libnm contains some synchronous API. This API basically makes a blocking + D-Bus call (g_dbus_connection_call_sync()) and is now deprecated. + </para> + <para> + Note that D-Bus is fundamentally asynchronous. Doing blocking calls + on top of D-Bus is odd, especially for libnm's NMClient. That is because + NMClient essentially is a client-side cache of the objects of the D-Bus + interface. This cache should be filled exclusively by (asynchronous) D-Bus + events. So, making a blocking D-Bus call means to wait for a response and + return it, while queuing everything that happens in between. Basically, + there are three options how a synchronous API on NMClient could behave: + <orderedlist> + <listitem> + <para> + The call basically calls g_dbus_connection_call_sync(). This means + that libnm sends a D-Bus request via GDBusConnection, and blockingly + waits for the response. All D-Bus messages that get received in the + meantime are queued in the GMainContext that belongs to NMClient. + That means, none of these D-Bus events are processed until we + iterate the GMainContext after the call returns. The effect is, + that NMClient (and all cached objects in there) are unaffected by + the D-Bus request. + Most of the synchronous API calls in libnm are of this kind. + The problem is that the strict ordering of D-Bus events gets + violated. + For some API this is not an immediate problem. Take for example + nm_device_wifi_request_scan(). The call merely blockingly tells + NetworkManager to start scanning, but since NetworkManager's D-Bus + API does not directly expose any state that tells whether we are + currently scanning, this out of order processing of the D-Bus + request is a small issue. + The problem is more obvious for nm_client_networking_set_enabled(). + After calling it, NM_CLIENT_NETWORKING_ENABLED is still unaffected + and unchanged, because the PropertiesChanged signal from D-Bus + is not yet processed. + This means, while you make such a blocking call, NMClient's state + does not change. But usually you perform the synchronous call + to change some state. In this form, the blocking call is not useful, + because NMClient only changes the state after iterating the GMainContext, + and not after the blocking call returns. + </para> + </listitem> + <listitem> + <para> + Like 1), but after making the blocking g_dbus_connection_call_sync(), + update the NMClient cache artificially. This is what + nm_manager_check_connectivity() does, to "fix" bgo#784629. + This also has the problem of out-of-order events, but it kinda + solves the problem of not changing the state during the blocking + call. But it does so by hacking the state of the cache. I think + this is really wrong because the state should only be updated from + the ordered stream of D-Bus messages. When libnm decides to modify + the state, there are already D-Bus messages queued that affect this + very state. + </para> + </listitem> + <listitem> + <para> + Instead of calling g_dbus_connection_call_sync(), use the + asynchronous g_dbus_connection_call(). If we would use a sepaate + GMainContext for all D-Bus related calls, we could ensure that + while we block for the response, we iterate the internal main context. + This might be nice, because all events are processed in order and + after the blocking call returns, the NMClient state is up to date. + The are problems however: current blocking API does not do this, + so it's a significant change in behavior. Also, it might be + unexpected to the user that during the blocking call the entire + content of NMClient's cache might change and all pointers to the + cache might be invalidated. Also, of course NMClient would invoke + signals for all the changes that happen. + Another problem is that this would be more effort to implement + and it involves a small performance overhead for all D-Bus related + calls (because we have to serialize all events in an internal + GMainContext first and then invoke them on the caller's context). + Also, if the users wants this, they could implement it themself + using their own extra GMainContext and the asynchronous API. + </para> + </listitem> + </orderedlist> + + See also <ulink url="https://smcv.pseudorandom.co.uk/2008/11/nonblocking/">this blog</ulink> + for why blocking calls are wrong. + </para> + <para> + All possible behaviors for synchronous API have severe behavioural + issues and thus such API is deprecated. Note that "deprecated" here does not + mean that the API is going to be removed. Libnm does not break API. The + user may: + + <itemizedlist> + <listitem> + <para> + Continue to use this API. It's deprecated, awkward and discouraged, + but if it works for you, that's fine. + </para> + </listitem> + <listitem> + <para> + Use asynchronous API. That's the only sensible way to use D-Bus. + If libnm lacks a certain asynchronous counterpart, it should be + added. + </para> + </listitem> + <listitem> + <para> + Use GDBusConnection directly. There really isn't anything wrong + with D-Bus or GDBusConnection. This deprecated API is just a wrapper + around g_dbus_connection_call_sync(). You may call it directly + without feeling dirty. + </para> + </listitem> + </itemizedlist> + </para> + </simplesect> + </section> </chapter> diff --git a/libnm-core/nm-version.h b/libnm-core/nm-version.h index 5295778967..3180c7e26a 100644 --- a/libnm-core/nm-version.h +++ b/libnm-core/nm-version.h @@ -215,4 +215,30 @@ # define NM_AVAILABLE_IN_1_22 #endif +/* + * Synchronous API for calling D-Bus in libnm is deprecated. See + * https://developer.gnome.org/libnm/stable/usage.html#sync-api + * + * Note that "deprecated" here does not really mean that the API is going + * to be removed. We don't break API. Just comment that it is awkward and + * discouraged. The user may: + * + * - continue to use this API. It's deprecated, awkward and discouraged, + * but if it works for you, that's fine. + * + * - use asynchronous API. That's the only sensible way to use D-Bus. + * If libnm lacks a certain asynchronous counterpart, it should be + * added. + * + * - use GDBusConnection directly. There really isn't anything wrong + * with D-Bus or GDBusConnection. This deprecated API is just a wrapper + * around g_dbus_connection_call_sync(). You may call it directly + * without feeling dirty. + * + * We don't want to force users away from this API, for that reason the + * macro does not yet expand to G_DEPRECATED. + */ +#define _NM_DEPRECATED_SYNC_METHOD /*NM_DEPRECATED_IN_1_22*/ +#define _NM_DEPRECATED_SYNC_WRITABLE_PROPERTY /*NM_DEPRECATED_IN_1_22*/ + #endif /* NM_VERSION_H */ diff --git a/libnm/nm-client.c b/libnm/nm-client.c index 567e014961..fd6c35dcae 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -291,12 +291,15 @@ nm_client_networking_get_enabled (NMClient *client) * all controlled interfaces are available for activation. * * Returns: %TRUE on success, %FALSE otherwise + * + * Deprecated: 1.22, use nm_client_networking_set_enabled_async() or GDBusConnection **/ gboolean nm_client_networking_set_enabled (NMClient *client, gboolean enable, GError **error) { g_return_val_if_fail (NM_IS_CLIENT (client), FALSE); + /* FIXME(libnm-async-api): add nm_client_networking_set_enabled_async(). */ if (!_nm_client_check_nm_running (client, error)) return FALSE; @@ -329,12 +332,15 @@ nm_client_wireless_get_enabled (NMClient *client) * @enabled: %TRUE to enable wireless * * Enables or disables wireless devices. - **/ + * + * Deprecated: 1.22, use nm_client_wireless_set_enabled_async() or GDBusConnection + */ void nm_client_wireless_set_enabled (NMClient *client, gboolean enabled) { g_return_if_fail (NM_IS_CLIENT (client)); + /* FIXME(libnm-async-api): add nm_client_wireless_set_enabled_async(). */ if (!nm_client_get_nm_running (client)) return; @@ -669,6 +675,8 @@ nm_client_get_connectivity (NMClient *client) * if you do not want to block. * * Returns: the (new) current connectivity state + * + * Deprecated: 1.22, use nm_client_check_connectivity_async() or GDBusConnection */ NMConnectivityState nm_client_check_connectivity (NMClient *client, @@ -780,6 +788,8 @@ nm_client_check_connectivity_finish (NMClient *client, * or cleared. * * Returns: %TRUE if the request was successful, %FALSE if it failed + * + * Deprecated: 1.22, use nm_client_save_hostname_async() or GDBusConnection **/ gboolean nm_client_save_hostname (NMClient *client, @@ -1417,6 +1427,8 @@ nm_client_add_and_activate_connection2_finish (NMClient *client, * Deactivates an active #NMActiveConnection. * * Returns: success or failure + * + * Deprecated: 1.22, use nm_client_deactivate_connection_async() or GDBusConnection **/ gboolean nm_client_deactivate_connection (NMClient *client, @@ -1878,6 +1890,8 @@ nm_client_add_connection2_finish (NMClient *client, * * Returns: %TRUE if NetworkManager at least tried to load @filenames, * %FALSE if an error occurred (eg, permission denied). + * + * Deprecated: 1.22, use nm_client_load_connections_async() or GDBusConnection **/ gboolean nm_client_load_connections (NMClient *client, @@ -2001,6 +2015,8 @@ nm_client_load_connections_finish (NMClient *client, * the in-memory state matches the on-disk state. * * Return value: %TRUE on success, %FALSE on failure + * + * Deprecated: 1.22, use nm_client_reload_connections_async() or GDBusConnection **/ gboolean nm_client_reload_connections (NMClient *client, @@ -3661,7 +3677,9 @@ nm_client_class_init (NMClientClass *client_class) * NMClient:networking-enabled: * * Whether networking is enabled. - **/ + * + * The property setter is a synchronous D-Bus call. This is deprecated since 1.22. + */ g_object_class_install_property (object_class, PROP_NETWORKING_ENABLED, g_param_spec_boolean (NM_CLIENT_NETWORKING_ENABLED, "", "", @@ -3673,6 +3691,8 @@ nm_client_class_init (NMClientClass *client_class) * NMClient:wireless-enabled: * * Whether wireless is enabled. + * + * The property setter is a synchronous D-Bus call. This is deprecated since 1.22. **/ g_object_class_install_property (object_class, PROP_WIRELESS_ENABLED, @@ -3697,7 +3717,9 @@ nm_client_class_init (NMClientClass *client_class) * NMClient:wwan-enabled: * * Whether WWAN functionality is enabled. - **/ + * + * The property setter is a synchronous D-Bus call. This is deprecated since 1.22. + */ g_object_class_install_property (object_class, PROP_WWAN_ENABLED, g_param_spec_boolean (NM_CLIENT_WWAN_ENABLED, "", "", @@ -3721,7 +3743,9 @@ nm_client_class_init (NMClientClass *client_class) * NMClient:wimax-enabled: * * Whether WiMAX functionality is enabled. - **/ + * + * The property setter is a synchronous D-Bus call. This is deprecated since 1.22. + */ g_object_class_install_property (object_class, PROP_WIMAX_ENABLED, g_param_spec_boolean (NM_CLIENT_WIMAX_ENABLED, "", "", @@ -3786,6 +3810,8 @@ nm_client_class_init (NMClientClass *client_class) * Whether a connectivity checking service has been enabled. * * Since: 1.10 + * + * The property setter is a synchronous D-Bus call. This is deprecated since 1.22. */ g_object_class_install_property (object_class, PROP_CONNECTIVITY_CHECK_ENABLED, diff --git a/libnm/nm-client.h b/libnm/nm-client.h index faa7d825d8..0b3b0e36e7 100644 --- a/libnm/nm-client.h +++ b/libnm/nm-client.h @@ -26,17 +26,28 @@ G_BEGIN_DECLS #define NM_CLIENT_STATE "state" #define NM_CLIENT_STARTUP "startup" #define NM_CLIENT_NM_RUNNING "nm-running" + +_NM_DEPRECATED_SYNC_WRITABLE_PROPERTY #define NM_CLIENT_NETWORKING_ENABLED "networking-enabled" + +_NM_DEPRECATED_SYNC_WRITABLE_PROPERTY #define NM_CLIENT_WIRELESS_ENABLED "wireless-enabled" -#define NM_CLIENT_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled" +_NM_DEPRECATED_SYNC_WRITABLE_PROPERTY #define NM_CLIENT_WWAN_ENABLED "wwan-enabled" -#define NM_CLIENT_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled" +_NM_DEPRECATED_SYNC_WRITABLE_PROPERTY #define NM_CLIENT_WIMAX_ENABLED "wimax-enabled" + +#define NM_CLIENT_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled" +#define NM_CLIENT_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled" #define NM_CLIENT_WIMAX_HARDWARE_ENABLED "wimax-hardware-enabled" + #define NM_CLIENT_ACTIVE_CONNECTIONS "active-connections" #define NM_CLIENT_CONNECTIVITY "connectivity" #define NM_CLIENT_CONNECTIVITY_CHECK_AVAILABLE "connectivity-check-available" + +_NM_DEPRECATED_SYNC_WRITABLE_PROPERTY #define NM_CLIENT_CONNECTIVITY_CHECK_ENABLED "connectivity-check-enabled" + #define NM_CLIENT_PRIMARY_CONNECTION "primary-connection" #define NM_CLIENT_ACTIVATING_CONNECTION "activating-connection" #define NM_CLIENT_DEVICES "devices" @@ -225,20 +236,31 @@ gboolean nm_client_get_startup (NMClient *client); gboolean nm_client_get_nm_running (NMClient *client); gboolean nm_client_networking_get_enabled (NMClient *client); + +_NM_DEPRECATED_SYNC_METHOD gboolean nm_client_networking_set_enabled (NMClient *client, gboolean enabled, GError **error); gboolean nm_client_wireless_get_enabled (NMClient *client); + +_NM_DEPRECATED_SYNC_METHOD void nm_client_wireless_set_enabled (NMClient *client, gboolean enabled); + gboolean nm_client_wireless_hardware_get_enabled (NMClient *client); gboolean nm_client_wwan_get_enabled (NMClient *client); + +_NM_DEPRECATED_SYNC_METHOD void nm_client_wwan_set_enabled (NMClient *client, gboolean enabled); + gboolean nm_client_wwan_hardware_get_enabled (NMClient *client); gboolean nm_client_wimax_get_enabled (NMClient *client); + +_NM_DEPRECATED_SYNC_METHOD void nm_client_wimax_set_enabled (NMClient *client, gboolean enabled); + gboolean nm_client_wimax_hardware_get_enabled (NMClient *client); NM_AVAILABLE_IN_1_10 @@ -248,6 +270,7 @@ NM_AVAILABLE_IN_1_10 gboolean nm_client_connectivity_check_get_enabled (NMClient *client); NM_AVAILABLE_IN_1_10 +_NM_DEPRECATED_SYNC_METHOD void nm_client_connectivity_check_set_enabled (NMClient *client, gboolean enabled); @@ -268,9 +291,12 @@ NMClientPermissionResult nm_client_get_permission_result (NMClient *client, NMConnectivityState nm_client_get_connectivity (NMClient *client); +_NM_DEPRECATED_SYNC_METHOD +NM_DEPRECATED_IN_1_22 NMConnectivityState nm_client_check_connectivity (NMClient *client, GCancellable *cancellable, GError **error); + void nm_client_check_connectivity_async (NMClient *client, GCancellable *cancellable, GAsyncReadyCallback callback, @@ -279,10 +305,12 @@ NMConnectivityState nm_client_check_connectivity_finish (NMClient *client, GAsyncResult *result, GError **error); +_NM_DEPRECATED_SYNC_METHOD gboolean nm_client_save_hostname (NMClient *client, const char *hostname, GCancellable *cancellable, GError **error); + void nm_client_save_hostname_async (NMClient *client, const char *hostname, GCancellable *cancellable, @@ -344,10 +372,12 @@ NMActiveConnection *nm_client_add_and_activate_connection2_finish (NMClient *cli GVariant **out_result, GError **error); +_NM_DEPRECATED_SYNC_METHOD gboolean nm_client_deactivate_connection (NMClient *client, NMActiveConnection *active, GCancellable *cancellable, GError **error); + void nm_client_deactivate_connection_async (NMClient *client, NMActiveConnection *active, GCancellable *cancellable, @@ -391,11 +421,13 @@ NMRemoteConnection *nm_client_add_connection2_finish (NMClient *client, GVariant **out_result, GError **error); +_NM_DEPRECATED_SYNC_METHOD gboolean nm_client_load_connections (NMClient *client, char **filenames, char ***failures, GCancellable *cancellable, GError **error); + void nm_client_load_connections_async (NMClient *client, char **filenames, GCancellable *cancellable, @@ -406,9 +438,11 @@ gboolean nm_client_load_connections_finish (NMClient *client, GAsyncResult *result, GError **error); +_NM_DEPRECATED_SYNC_METHOD gboolean nm_client_reload_connections (NMClient *client, GCancellable *cancellable, GError **error); + void nm_client_reload_connections_async (NMClient *client, GCancellable *cancellable, GAsyncReadyCallback callback, diff --git a/libnm/nm-device-wifi.c b/libnm/nm-device-wifi.c index f37ef69fa6..30dbd09f89 100644 --- a/libnm/nm-device-wifi.c +++ b/libnm/nm-device-wifi.c @@ -331,6 +331,8 @@ _device_wifi_request_scan (NMDeviceWifi *device, * * Returns: %TRUE on success, %FALSE on error, in which case @error will be * set. + * + * Deprecated: 1.22, use nm_device_wifi_request_scan_async() or GDBusConnection **/ gboolean nm_device_wifi_request_scan (NMDeviceWifi *device, @@ -359,6 +361,8 @@ nm_device_wifi_request_scan (NMDeviceWifi *device, * set. * * Since: 1.2 + * + * Deprecated: 1.22, use nm_device_wifi_request_scan_options_async() or GDBusConnection **/ gboolean nm_device_wifi_request_scan_options (NMDeviceWifi *device, diff --git a/libnm/nm-device-wifi.h b/libnm/nm-device-wifi.h index d875486673..18ebf24ccc 100644 --- a/libnm/nm-device-wifi.h +++ b/libnm/nm-device-wifi.h @@ -66,10 +66,12 @@ const GPtrArray * nm_device_wifi_get_access_points (NMDeviceWifi * NM_AVAILABLE_IN_1_12 gint64 nm_device_wifi_get_last_scan (NMDeviceWifi *device); +_NM_DEPRECATED_SYNC_METHOD gboolean nm_device_wifi_request_scan (NMDeviceWifi *device, GCancellable *cancellable, GError **error); NM_AVAILABLE_IN_1_2 +_NM_DEPRECATED_SYNC_METHOD gboolean nm_device_wifi_request_scan_options (NMDeviceWifi *device, GVariant *options, GCancellable *cancellable, diff --git a/libnm/nm-device.c b/libnm/nm-device.c index 90534e33bc..4acbfbce91 100644 --- a/libnm/nm-device.c +++ b/libnm/nm-device.c @@ -610,6 +610,8 @@ nm_device_class_init (NMDeviceClass *device_class) * NMDevice:autoconnect: * * Whether the device can auto-activate a connection. + * + * The property setter is a synchronous D-Bus call. This is deprecated since 1.22. **/ g_object_class_install_property (object_class, PROP_AUTOCONNECT, @@ -1087,12 +1089,16 @@ nm_device_get_managed (NMDevice *device) * Enables or disables management of #NMDevice by NetworkManager. * * Since: 1.2 + * + * Deprecated: 1.22, use nm_device_set_managed_async() or GDBusConnection **/ void nm_device_set_managed (NMDevice *device, gboolean managed) { g_return_if_fail (NM_IS_DEVICE (device)); + /* FIXME(libnm-async-api): add nm_device_set_managed_async(). */ + managed = !!managed; NM_DEVICE_GET_PRIVATE (device)->managed = managed; @@ -1125,12 +1131,16 @@ nm_device_get_autoconnect (NMDevice *device) * @autoconnect: %TRUE to enable autoconnecting * * Enables or disables automatic activation of the #NMDevice. + * + * Deprecated: 1.22, use nm_device_set_autoconnect_async() or GDBusConnection **/ void nm_device_set_autoconnect (NMDevice *device, gboolean autoconnect) { g_return_if_fail (NM_IS_DEVICE (device)); + /* FIXME(libnm-async-api): add nm_device_set_autoconnect_async(). */ + NM_DEVICE_GET_PRIVATE (device)->autoconnect = autoconnect; _nm_object_set_property (NM_OBJECT (device), @@ -1988,6 +1998,8 @@ nm_device_is_software (NMDevice *device) * Returns: %TRUE on success, %FALSE on error, in which case @error will be set. * * Since: 1.2 + * + * Deprecated: 1.22, use nm_device_reapply_async() or GDBusConnection **/ gboolean nm_device_reapply (NMDevice *device, @@ -2130,6 +2142,8 @@ nm_device_reapply_finish (NMDevice *device, * to nm_connection_verify(). * * Since: 1.2 + * + * Deprecated: 1.22, use nm_device_get_applied_connection_async() or GDBusConnection **/ NMConnection * nm_device_get_applied_connection (NMDevice *device, @@ -2302,6 +2316,8 @@ nm_device_get_applied_connection_finish (NMDevice *device, * request. * * Returns: %TRUE on success, %FALSE on error, in which case @error will be set. + * + * Deprecated: 1.22, use nm_device_disconnect_async() or GDBusConnection **/ gboolean nm_device_disconnect (NMDevice *device, @@ -2406,6 +2422,8 @@ nm_device_disconnect_finish (NMDevice *device, * * Returns: %TRUE on success, %FALSE on error, in which case @error * will be set. + * + * Deprecated: 1.22, use nm_device_delete_async() or GDBusConnection **/ gboolean nm_device_delete (NMDevice *device, diff --git a/libnm/nm-device.h b/libnm/nm-device.h index b5343bd243..5d8a1cae6e 100644 --- a/libnm/nm-device.h +++ b/libnm/nm-device.h @@ -32,7 +32,10 @@ G_BEGIN_DECLS #define NM_DEVICE_CAPABILITIES "capabilities" #define NM_DEVICE_REAL "real" #define NM_DEVICE_MANAGED "managed" + +_NM_DEPRECATED_SYNC_WRITABLE_PROPERTY #define NM_DEVICE_AUTOCONNECT "autoconnect" + #define NM_DEVICE_FIRMWARE_MISSING "firmware-missing" #define NM_DEVICE_NM_PLUGIN_MISSING "nm-plugin-missing" #define NM_DEVICE_IP4_CONFIG "ip4-config" @@ -97,10 +100,16 @@ const char * nm_device_get_type_description (NMDevice *device); const char * nm_device_get_hw_address (NMDevice *device); NMDeviceCapabilities nm_device_get_capabilities (NMDevice *device); gboolean nm_device_get_managed (NMDevice *device); + NM_AVAILABLE_IN_1_2 +_NM_DEPRECATED_SYNC_METHOD void nm_device_set_managed (NMDevice *device, gboolean managed); + gboolean nm_device_get_autoconnect (NMDevice *device); + +_NM_DEPRECATED_SYNC_METHOD void nm_device_set_autoconnect (NMDevice *device, gboolean autoconnect); + gboolean nm_device_get_firmware_missing (NMDevice *device); NM_AVAILABLE_IN_1_2 gboolean nm_device_get_nm_plugin_missing (NMDevice *device); @@ -130,6 +139,7 @@ GPtrArray * nm_device_get_lldp_neighbors (NMDevice *device); char ** nm_device_disambiguate_names (NMDevice **devices, int num_devices); NM_AVAILABLE_IN_1_2 +_NM_DEPRECATED_SYNC_METHOD gboolean nm_device_reapply (NMDevice *device, NMConnection *connection, guint64 version_id, @@ -150,6 +160,7 @@ gboolean nm_device_reapply_finish (NMDevice *device, GError **error); NM_AVAILABLE_IN_1_2 +_NM_DEPRECATED_SYNC_METHOD NMConnection *nm_device_get_applied_connection (NMDevice *device, guint32 flags, guint64 *version_id, @@ -167,6 +178,7 @@ NMConnection *nm_device_get_applied_connection_finish (NMDevice *device, guint64 *version_id, GError **error); +_NM_DEPRECATED_SYNC_METHOD gboolean nm_device_disconnect (NMDevice *device, GCancellable *cancellable, GError **error); @@ -178,6 +190,7 @@ gboolean nm_device_disconnect_finish (NMDevice *device, GAsyncResult *result, GError **error); +_NM_DEPRECATED_SYNC_METHOD gboolean nm_device_delete (NMDevice *device, GCancellable *cancellable, GError **error); diff --git a/libnm/nm-libnm-utils.h b/libnm/nm-libnm-utils.h index 35684117fd..5dc579010a 100644 --- a/libnm/nm-libnm-utils.h +++ b/libnm/nm-libnm-utils.h @@ -10,6 +10,10 @@ #error Cannot use this header. #endif +/* Markers for deprecated sync code in internal API. */ +#define _NM_DEPRECATED_SYNC_METHOD_INTERNAL NM_DEPRECATED_IN_1_22 +#define _NM_DEPRECATED_SYNC_WRITABLE_PROPERTY_INTERNAL NM_DEPRECATED_IN_1_22 + char *nm_utils_fixup_vendor_string (const char *desc); char *nm_utils_fixup_product_string (const char *desc); diff --git a/libnm/nm-manager.h b/libnm/nm-manager.h index 54a06b0019..9b46b6417d 100644 --- a/libnm/nm-manager.h +++ b/libnm/nm-manager.h @@ -13,6 +13,7 @@ #include "nm-object.h" #include "nm-client.h" +#include "nm-libnm-utils.h" #define NM_TYPE_MANAGER (nm_manager_get_type ()) #define NM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MANAGER, NMManager)) @@ -25,16 +26,26 @@ #define NM_MANAGER_STATE "state" #define NM_MANAGER_STARTUP "startup" #define NM_MANAGER_NETWORKING_ENABLED "networking-enabled" + +_NM_DEPRECATED_SYNC_WRITABLE_PROPERTY_INTERNAL #define NM_MANAGER_WIRELESS_ENABLED "wireless-enabled" -#define NM_MANAGER_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled" + +_NM_DEPRECATED_SYNC_WRITABLE_PROPERTY_INTERNAL #define NM_MANAGER_WWAN_ENABLED "wwan-enabled" -#define NM_MANAGER_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled" + +_NM_DEPRECATED_SYNC_WRITABLE_PROPERTY_INTERNAL #define NM_MANAGER_WIMAX_ENABLED "wimax-enabled" + +#define NM_MANAGER_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled" +#define NM_MANAGER_WWAN_HARDWARE_ENABLED "wwan-hardware-enabled" #define NM_MANAGER_WIMAX_HARDWARE_ENABLED "wimax-hardware-enabled" #define NM_MANAGER_ACTIVE_CONNECTIONS "active-connections" #define NM_MANAGER_CONNECTIVITY "connectivity" #define NM_MANAGER_CONNECTIVITY_CHECK_AVAILABLE "connectivity-check-available" + +_NM_DEPRECATED_SYNC_WRITABLE_PROPERTY_INTERNAL #define NM_MANAGER_CONNECTIVITY_CHECK_ENABLED "connectivity-check-enabled" + #define NM_MANAGER_PRIMARY_CONNECTION "primary-connection" #define NM_MANAGER_ACTIVATING_CONNECTION "activating-connection" #define NM_MANAGER_DEVICES "devices" @@ -71,12 +82,17 @@ NMState nm_manager_get_state (NMManager *manager); gboolean nm_manager_get_startup (NMManager *manager); gboolean nm_manager_networking_get_enabled (NMManager *manager); + +_NM_DEPRECATED_SYNC_METHOD_INTERNAL gboolean nm_manager_networking_set_enabled (NMManager *manager, gboolean enabled, GError **error); gboolean nm_manager_wireless_get_enabled (NMManager *manager); + +_NM_DEPRECATED_SYNC_METHOD_INTERNAL void nm_manager_wireless_set_enabled (NMManager *manager, gboolean enabled); + gboolean nm_manager_wireless_hardware_get_enabled (NMManager *manager); gboolean nm_manager_wwan_get_enabled (NMManager *manager); @@ -110,6 +126,7 @@ NMClientPermissionResult nm_manager_get_permission_result (NMManager *manager, NMConnectivityState nm_manager_get_connectivity (NMManager *manager); +_NM_DEPRECATED_SYNC_METHOD_INTERNAL NMConnectivityState nm_manager_check_connectivity (NMManager *manager, GCancellable *cancellable, GError **error); @@ -160,6 +177,7 @@ NMActiveConnection *nm_manager_add_and_activate_connection_finish (NMManager *ma GVariant **out_result, GError **error); +_NM_DEPRECATED_SYNC_METHOD_INTERNAL gboolean nm_manager_deactivate_connection (NMManager *manager, NMActiveConnection *active, GCancellable *cancellable, diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c index 7d1aa1a1ea..04fbd3b170 100644 --- a/libnm/nm-remote-connection.c +++ b/libnm/nm-remote-connection.c @@ -181,6 +181,8 @@ nm_remote_connection_update2_finish (NMRemoteConnection *connection, * disk; if %FALSE, then only the in-memory representation will be changed. * * Returns: %TRUE on success, %FALSE on error, in which case @error will be set. + * + * Deprecated: 1.22, use nm_remote_connection_commit_changes_async() or GDBusConnection **/ gboolean nm_remote_connection_commit_changes (NMRemoteConnection *connection, @@ -317,6 +319,8 @@ nm_remote_connection_commit_changes_finish (NMRemoteConnection *connection, * been written to disk, or if the connection has never been saved. * * Returns: %TRUE on success, %FALSE on error, in which case @error will be set. + * + * Deprecated: 1.22, use nm_remote_connection_save_async() or GDBusConnection **/ gboolean nm_remote_connection_save (NMRemoteConnection *connection, @@ -420,6 +424,8 @@ nm_remote_connection_save_finish (NMRemoteConnection *connection, * Deletes the connection. * * Returns: %TRUE on success, %FALSE on error, in which case @error will be set. + * + * Deprecated: 1.22, use nm_remote_connection_delete_async() or GDBusConnection **/ gboolean nm_remote_connection_delete (NMRemoteConnection *connection, @@ -523,6 +529,8 @@ nm_remote_connection_delete_finish (NMRemoteConnection *connection, * * Returns: a #GVariant of type %NM_VARIANT_TYPE_CONNECTION containing * @connection's secrets, or %NULL on error. + * + * Deprecated: 1.22, use nm_remote_connection_get_secrets_async() or GDBusConnection **/ GVariant * nm_remote_connection_get_secrets (NMRemoteConnection *connection, diff --git a/libnm/nm-remote-connection.h b/libnm/nm-remote-connection.h index 37ab154e95..ce6eef993d 100644 --- a/libnm/nm-remote-connection.h +++ b/libnm/nm-remote-connection.h @@ -59,10 +59,12 @@ GVariant *nm_remote_connection_update2_finish (NMRemoteConnection *connection, GAsyncResult *result, GError **error); +_NM_DEPRECATED_SYNC_METHOD gboolean nm_remote_connection_commit_changes (NMRemoteConnection *connection, gboolean save_to_disk, GCancellable *cancellable, GError **error); + void nm_remote_connection_commit_changes_async (NMRemoteConnection *connection, gboolean save_to_disk, GCancellable *cancellable, @@ -72,9 +74,11 @@ gboolean nm_remote_connection_commit_changes_finish (NMRemoteConnection *connect GAsyncResult *result, GError **error); +_NM_DEPRECATED_SYNC_METHOD gboolean nm_remote_connection_save (NMRemoteConnection *connection, GCancellable *cancellable, GError **error); + void nm_remote_connection_save_async (NMRemoteConnection *connection, GCancellable *cancellable, GAsyncReadyCallback callback, @@ -83,9 +87,11 @@ gboolean nm_remote_connection_save_finish (NMRemoteConnection *connection, GAsyncResult *result, GError **error); +_NM_DEPRECATED_SYNC_METHOD gboolean nm_remote_connection_delete (NMRemoteConnection *connection, GCancellable *cancellable, GError **error); + void nm_remote_connection_delete_async (NMRemoteConnection *connection, GCancellable *cancellable, GAsyncReadyCallback callback, @@ -94,10 +100,12 @@ gboolean nm_remote_connection_delete_finish (NMRemoteConnection *connection, GAsyncResult *result, GError **error); +_NM_DEPRECATED_SYNC_METHOD GVariant *nm_remote_connection_get_secrets (NMRemoteConnection *connection, const char *setting_name, GCancellable *cancellable, GError **error); + void nm_remote_connection_get_secrets_async (NMRemoteConnection *connection, const char *setting_name, GCancellable *cancellable, diff --git a/libnm/nm-remote-settings.h b/libnm/nm-remote-settings.h index 180e900880..6006a53b56 100644 --- a/libnm/nm-remote-settings.h +++ b/libnm/nm-remote-settings.h @@ -12,6 +12,7 @@ #endif #include "nm-object.h" +#include "nm-libnm-utils.h" #define NM_TYPE_REMOTE_SETTINGS (nm_remote_settings_get_type ()) #define NM_REMOTE_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_REMOTE_SETTINGS, NMRemoteSettings)) @@ -74,11 +75,13 @@ void nm_remote_settings_add_connection2 (NMRemoteSettings *self, NMRemoteSettingAddConnection2Callback callback, gpointer user_data); +_NM_DEPRECATED_SYNC_METHOD_INTERNAL gboolean nm_remote_settings_load_connections (NMRemoteSettings *settings, char **filenames, char ***failures, GCancellable *cancellable, GError **error); + void nm_remote_settings_load_connections_async (NMRemoteSettings *settings, char **filenames, GCancellable *cancellable, @@ -89,9 +92,11 @@ gboolean nm_remote_settings_load_connections_finish (NMRemoteSettings *settings, GAsyncResult *result, GError **error); +_NM_DEPRECATED_SYNC_METHOD_INTERNAL gboolean nm_remote_settings_reload_connections (NMRemoteSettings *settings, GCancellable *cancellable, GError **error); + void nm_remote_settings_reload_connections_async (NMRemoteSettings *settings, GCancellable *cancellable, GAsyncReadyCallback callback, @@ -100,10 +105,12 @@ gboolean nm_remote_settings_reload_connections_finish (NMRemoteSettings *setting GAsyncResult *result, GError **error); +_NM_DEPRECATED_SYNC_METHOD_INTERNAL gboolean nm_remote_settings_save_hostname (NMRemoteSettings *settings, const char *hostname, GCancellable *cancellable, GError **error); + void nm_remote_settings_save_hostname_async (NMRemoteSettings *settings, const char *hostname, GCancellable *cancellable, |