summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2014-09-29 10:58:16 -0400
committerDan Winship <danw@gnome.org>2014-10-09 08:20:36 -0400
commit01ea9b42b054300626ea3ee1a3a9b7ffdf71190e (patch)
tree95b34052479ab35cfe86b5cb652a0f3c04a80713
parent9f38c8b07d63b5e75c36b8dfb1b455b7f28f3f64 (diff)
downloadNetworkManager-01ea9b42b054300626ea3ee1a3a9b7ffdf71190e.tar.gz
libnm: merge NMRemoteSettings into NMClient
Make NMRemoteSettings internal and have NMClient wrap all of its APIs, just like it does with NMManager.
-rw-r--r--clients/cli/connections.c58
-rw-r--r--clients/cli/general.c18
-rw-r--r--clients/cli/nmcli.c3
-rw-r--r--clients/cli/nmcli.h2
-rw-r--r--clients/tui/nm-editor-utils.c16
-rw-r--r--clients/tui/nm-editor-utils.h6
-rw-r--r--clients/tui/nmt-connect-connection-list.c6
-rw-r--r--clients/tui/nmt-edit-connection-list.c4
-rw-r--r--clients/tui/nmt-editor.c9
-rw-r--r--clients/tui/nmtui-edit.c12
-rw-r--r--clients/tui/nmtui-hostname.c8
-rw-r--r--clients/tui/nmtui.c9
-rw-r--r--clients/tui/nmtui.h1
-rw-r--r--examples/C/glib/add-connection-libnm.c25
-rw-r--r--examples/C/glib/list-connections-libnm.c25
-rw-r--r--libnm/Makefile.am4
-rw-r--r--libnm/NetworkManager.h1
-rw-r--r--libnm/libnm.ver36
-rw-r--r--libnm/nm-client.c683
-rw-r--r--libnm/nm-client.h76
-rw-r--r--libnm/nm-remote-settings.c484
-rw-r--r--libnm/nm-remote-settings.h37
-rw-r--r--libnm/tests/test-remote-settings-client.c174
-rw-r--r--libnm/tests/test-secret-agent.c18
24 files changed, 883 insertions, 832 deletions
diff --git a/clients/cli/connections.c b/clients/cli/connections.c
index 1670a38741..cfaa669b06 100644
--- a/clients/cli/connections.c
+++ b/clients/cli/connections.c
@@ -4894,7 +4894,7 @@ typedef struct {
} AddConnectionInfo;
static void
-add_connection_cb (GObject *settings,
+add_connection_cb (GObject *client,
GAsyncResult *result,
gpointer user_data)
{
@@ -4903,8 +4903,7 @@ add_connection_cb (GObject *settings,
NMRemoteConnection *connection;
GError *error = NULL;
- connection = nm_remote_settings_add_connection_finish (NM_REMOTE_SETTINGS (settings),
- result, &error);
+ connection = nm_client_add_connection_finish (NM_CLIENT (client), result, &error);
if (error) {
g_dbus_error_strip_remote_error (error);
g_string_printf (nmc->return_text,
@@ -4926,13 +4925,13 @@ add_connection_cb (GObject *settings,
static void
add_new_connection (gboolean persistent,
- NMRemoteSettings *settings,
+ NMClient *client,
NMConnection *connection,
GAsyncReadyCallback callback,
gpointer user_data)
{
- nm_remote_settings_add_connection_async (settings, connection, persistent,
- NULL, callback, user_data);
+ nm_client_add_connection_async (client, connection, persistent,
+ NULL, callback, user_data);
}
static void
@@ -5236,7 +5235,7 @@ do_connection_add (NmCli *nmc, int argc, char **argv)
/* Tell the settings service to add the new connection */
add_new_connection (save_bool,
- nmc->system_settings,
+ nmc->client,
connection,
add_connection_cb,
info);
@@ -6335,15 +6334,14 @@ set_info_and_signal_editor_thread (GError *error, MonitorACInfo *monitor_ac_info
}
static void
-add_connection_editor_cb (GObject *settings,
+add_connection_editor_cb (GObject *client,
GAsyncResult *result,
gpointer user_data)
{
NMRemoteConnection *connection;
GError *error = NULL;
- connection = nm_remote_settings_add_connection_finish (NM_REMOTE_SETTINGS (settings),
- result, &error);
+ connection = nm_client_add_connection_finish (NM_CLIENT (client), result, &error);
set_info_and_signal_editor_thread (error, NULL);
g_clear_object (&connection);
@@ -6958,8 +6956,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
menu_ctx.valid_props_str = NULL;
/* Get remote connection */
- con_tmp = nm_remote_settings_get_connection_by_uuid (nmc->system_settings,
- nm_connection_get_uuid (connection));
+ con_tmp = nm_client_get_connection_by_uuid (nmc->client,
+ nm_connection_get_uuid (connection));
g_weak_ref_init (&weak, con_tmp);
rem_con = g_weak_ref_get (&weak);
@@ -7393,7 +7391,7 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
info->nmc = nmc;
info->con_name = g_strdup (nm_connection_get_id (connection));
add_new_connection (persistent,
- nmc->system_settings,
+ nmc->client,
connection,
add_connection_editor_cb,
info);
@@ -7423,8 +7421,8 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
nm_connection_get_id (connection),
nm_connection_get_uuid (connection));
- con_tmp = nm_remote_settings_get_connection_by_uuid (nmc->system_settings,
- nm_connection_get_uuid (connection));
+ con_tmp = nm_client_get_connection_by_uuid (nmc->client,
+ nm_connection_get_uuid (connection));
g_weak_ref_set (&weak, con_tmp);
refresh_remote_connection (&weak, &rem_con);
@@ -8022,8 +8020,8 @@ do_connection_modify (NmCli *nmc,
nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
goto finish;
}
- rc = nm_remote_settings_get_connection_by_uuid (nmc->system_settings,
- nm_connection_get_uuid (connection));
+ rc = nm_client_get_connection_by_uuid (nmc->client,
+ nm_connection_get_uuid (connection));
if (!rc) {
g_string_printf (nmc->return_text, _("Error: Unknown connection '%s'."), name);
nmc->return_value = NMC_RESULT_ERROR_NOT_FOUND;
@@ -8289,7 +8287,7 @@ do_connection_reload (NmCli *nmc, int argc, char **argv)
return nmc->return_value;
}
- if (!nm_remote_settings_reload_connections (nmc->system_settings, NULL, &error)) {
+ if (!nm_client_reload_connections (nmc->client, NULL, &error)) {
g_dbus_error_strip_remote_error (error);
g_string_printf (nmc->return_text, _("Error: failed to reload connections: %s."),
error->message);
@@ -8327,7 +8325,7 @@ do_connection_load (NmCli *nmc, int argc, char **argv)
filenames[i] = argv[i];
filenames[i] = NULL;
- nm_remote_settings_load_connections (nmc->system_settings, filenames, &failures, NULL, &error);
+ nm_client_load_connections (nmc->client, filenames, &failures, NULL, &error);
g_free (filenames);
if (error) {
g_dbus_error_strip_remote_error (error);
@@ -8456,28 +8454,8 @@ do_connections (NmCli *nmc, int argc, char **argv)
if (!nmc_versions_match (nmc))
return nmc->return_value;
- /* Get NMRemoteSettings object */
- if (!(nmc->system_settings = nm_remote_settings_new (NULL, &error))) {
- g_dbus_error_strip_remote_error (error);
- g_string_printf (nmc->return_text, _("Error: could not get remote settings: %s."),
- error->message);
- g_error_free (error);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- nmc->should_wait = FALSE;
- return nmc->return_value;
- }
-
- /* Find out whether settings service is running */
- g_object_get (nmc->system_settings, NM_REMOTE_SETTINGS_NM_RUNNING, &nmc->system_settings_running, NULL);
- if (!nmc->system_settings_running) {
- g_string_printf (nmc->return_text, _("Error: Can't obtain connections: settings service is not running."));
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- nmc->should_wait = FALSE;
- return nmc->return_value;
- }
-
/* Get the connection list */
- nmc->connections = nm_remote_settings_list_connections (nmc->system_settings);
+ nmc->connections = nm_client_list_connections (nmc->client);
/* Now parse the command line and perform the required operation */
if (argc == 0) {
diff --git a/clients/cli/general.c b/clients/cli/general.c
index 381a330ca2..1da3803fc9 100644
--- a/clients/cli/general.c
+++ b/clients/cli/general.c
@@ -540,7 +540,7 @@ save_hostname_cb (GObject *object, GAsyncResult *result, gpointer user_data)
NmCli *nmc = (NmCli *) user_data;
GError *error = NULL;
- nm_remote_settings_save_hostname_finish (NM_REMOTE_SETTINGS (object), result, &error);
+ nm_client_save_hostname_finish (NM_CLIENT (object), result, &error);
if (error) {
g_dbus_error_strip_remote_error (error);
g_string_printf (nmc->return_text, _("Error: failed to set hostname: %s"),
@@ -585,28 +585,16 @@ do_general (NmCli *nmc, int argc, char **argv)
show_nm_status (nmc, NULL, NULL);
}
else if (matches (*argv, "hostname") == 0) {
- NMRemoteSettings *rem_settings;
-
if (nmc_arg_is_help (*(argv+1))) {
usage_general_hostname ();
goto finish;
}
- /* get system settings */
- if (!(rem_settings = nm_remote_settings_new (NULL, &error))) {
- g_dbus_error_strip_remote_error (error);
- g_string_printf (nmc->return_text, _("Error: Could not get system settings: %s."),
- error->message);
- g_clear_error (&error);
- nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
- goto finish;
- }
-
if (next_arg (&argc, &argv) != 0) {
/* no arguments -> get hostname */
char *hostname = NULL;
- g_object_get (rem_settings, NM_REMOTE_SETTINGS_HOSTNAME, &hostname, NULL);
+ g_object_get (nmc->client, NM_CLIENT_HOSTNAME, &hostname, NULL);
if (hostname)
g_print ("%s\n", hostname);
g_free (hostname);
@@ -618,7 +606,7 @@ do_general (NmCli *nmc, int argc, char **argv)
g_print ("Warning: ignoring extra garbage after '%s' hostname\n", hostname);
nmc->should_wait = TRUE;
- nm_remote_settings_save_hostname_async (rem_settings, hostname, NULL, save_hostname_cb, nmc);
+ nm_client_save_hostname_async (nmc->client, hostname, NULL, save_hostname_cb, nmc);
}
}
else if (matches (*argv, "permissions") == 0) {
diff --git a/clients/cli/nmcli.c b/clients/cli/nmcli.c
index 7145af0e93..f6ca11e935 100644
--- a/clients/cli/nmcli.c
+++ b/clients/cli/nmcli.c
@@ -498,8 +498,6 @@ nmc_init (NmCli *nmc)
nmc->timeout = -1;
- nmc->system_settings = NULL;
- nmc->system_settings_running = FALSE;
nmc->connections = NULL;
nmc->should_wait = FALSE;
@@ -526,7 +524,6 @@ nmc_cleanup (NmCli *nmc)
g_string_free (nmc->return_text, TRUE);
- if (nmc->system_settings) g_object_unref (nmc->system_settings);
g_slist_free (nmc->connections);
g_free (nmc->required_fields);
diff --git a/clients/cli/nmcli.h b/clients/cli/nmcli.h
index 7b2d1713c7..2d67320cbd 100644
--- a/clients/cli/nmcli.h
+++ b/clients/cli/nmcli.h
@@ -110,8 +110,6 @@ typedef struct _NmCli {
int timeout; /* Operation timeout */
- NMRemoteSettings *system_settings; /* System settings */
- gboolean system_settings_running; /* Is system settings service running? */
GSList *connections; /* List of connections */
gboolean should_wait; /* Indication that nmcli should not end yet */
diff --git a/clients/tui/nm-editor-utils.c b/clients/tui/nm-editor-utils.c
index 54efbf8ea1..e7b47e1a0d 100644
--- a/clients/tui/nm-editor-utils.c
+++ b/clients/tui/nm-editor-utils.c
@@ -254,14 +254,14 @@ nm_editor_utils_get_connection_type_list (void)
}
static char *
-get_available_connection_name (const char *format,
- NMRemoteSettings *settings)
+get_available_connection_name (const char *format,
+ NMClient *client)
{
GSList *connections, *iter, *names = NULL;
char *cname = NULL;
int i = 0;
- connections = nm_remote_settings_list_connections (settings);
+ connections = nm_client_list_connections (client);
for (iter = connections; iter; iter = iter->next) {
const char *id;
@@ -297,7 +297,7 @@ get_available_connection_name (const char *format,
* nm_editor_utils_create_connection:
* @type: the type of the connection's primary #NMSetting
* @master: (allow-none): the connection's master, if any
- * @settings: an #NMRemoteSettings
+ * @client: an #NMClient
*
* Creates a new #NMConnection of the given type, automatically
* creating a UUID and an appropriate not-currently-in-use connection
@@ -309,9 +309,9 @@ get_available_connection_name (const char *format,
* Returns: a new #NMConnection
*/
NMConnection *
-nm_editor_utils_create_connection (GType type,
- NMConnection *master,
- NMRemoteSettings *settings)
+nm_editor_utils_create_connection (GType type,
+ NMConnection *master,
+ NMClient *client)
{
NMEditorConnectionTypeData **types;
NMEditorConnectionTypeDataReal *type_data = NULL;
@@ -359,7 +359,7 @@ nm_editor_utils_create_connection (GType type,
}
uuid = nm_utils_uuid_generate ();
- id = get_available_connection_name (type_data->id_format, settings);
+ id = get_available_connection_name (type_data->id_format, client);
g_object_set (s_con,
NM_SETTING_CONNECTION_UUID, uuid,
diff --git a/clients/tui/nm-editor-utils.h b/clients/tui/nm-editor-utils.h
index 8d61d7525a..5e402ce715 100644
--- a/clients/tui/nm-editor-utils.h
+++ b/clients/tui/nm-editor-utils.h
@@ -34,9 +34,9 @@ typedef struct {
NMEditorConnectionTypeData **nm_editor_utils_get_connection_type_list (void);
NMEditorConnectionTypeData *nm_editor_utils_get_connection_type_data (NMConnection *conn);
-NMConnection *nm_editor_utils_create_connection (GType type,
- NMConnection *master,
- NMRemoteSettings *settings);
+NMConnection *nm_editor_utils_create_connection (GType type,
+ NMConnection *master,
+ NMClient *client);
G_END_DECLS
diff --git a/clients/tui/nmt-connect-connection-list.c b/clients/tui/nmt-connect-connection-list.c
index a596364533..f4dc0cf98e 100644
--- a/clients/tui/nmt-connect-connection-list.c
+++ b/clients/tui/nmt-connect-connection-list.c
@@ -480,7 +480,7 @@ nmt_connect_connection_list_rebuild (NmtConnectConnectionList *list)
devices = nm_client_get_devices (nm_client);
acs = nm_client_get_active_connections (nm_client);
- connections = nm_remote_settings_list_connections (nm_settings);
+ connections = nm_client_list_connections (nm_client);
nmt_devices = NULL;
@@ -636,9 +636,9 @@ nmt_connect_connection_list_get_connection (NmtConnectConnectionList *list,
g_return_val_if_fail (identifier, FALSE);
if (nm_utils_is_uuid (identifier))
- conn = NM_CONNECTION (nm_remote_settings_get_connection_by_uuid (nm_settings, identifier));
+ conn = NM_CONNECTION (nm_client_get_connection_by_uuid (nm_client, identifier));
if (!conn)
- conn = NM_CONNECTION (nm_remote_settings_get_connection_by_id (nm_settings, identifier));
+ conn = NM_CONNECTION (nm_client_get_connection_by_id (nm_client, identifier));
for (diter = priv->nmt_devices; diter; diter = diter->next) {
nmtdev = diter->data;
diff --git a/clients/tui/nmt-edit-connection-list.c b/clients/tui/nmt-edit-connection-list.c
index 508f204c39..9afe44164f 100644
--- a/clients/tui/nmt-edit-connection-list.c
+++ b/clients/tui/nmt-edit-connection-list.c
@@ -191,7 +191,7 @@ nmt_edit_connection_list_rebuild (NmtEditConnectionList *list)
selected_conn = nmt_newt_listbox_get_active_key (priv->listbox);
free_connections (list);
- priv->connections = nm_remote_settings_list_connections (nm_settings);
+ priv->connections = nm_client_list_connections (nm_client);
for (iter = priv->connections; iter; iter = next) {
conn = iter->data;
next = iter->next;
@@ -293,7 +293,7 @@ nmt_edit_connection_list_constructed (GObject *object)
if (priv->extra)
nmt_newt_button_box_add_widget_end (priv->buttons, priv->extra);
- g_signal_connect (nm_settings, "notify::" NM_REMOTE_SETTINGS_CONNECTIONS,
+ g_signal_connect (nm_client, "notify::" NM_CLIENT_CONNECTIONS,
G_CALLBACK (rebuild_on_connections_changed), list);
nmt_edit_connection_list_rebuild (list);
diff --git a/clients/tui/nmt-editor.c b/clients/tui/nmt-editor.c
index 93e36d7919..bd1c77e339 100644
--- a/clients/tui/nmt-editor.c
+++ b/clients/tui/nmt-editor.c
@@ -115,15 +115,14 @@ connection_updated (GObject *connection,
}
static void
-connection_added (GObject *settings,
+connection_added (GObject *client,
GAsyncResult *result,
gpointer op)
{
NMRemoteConnection *connection;
GError *error = NULL;
- connection = nm_remote_settings_add_connection_finish (NM_REMOTE_SETTINGS (settings),
- result, &error);
+ connection = nm_client_add_connection_finish (NM_CLIENT (client), result, &error);
nmt_sync_op_complete_boolean (op, error == NULL, error);
g_clear_object (&connection);
g_clear_error (&error);
@@ -157,8 +156,8 @@ save_connection_and_exit (NmtNewtButton *button,
*/
nm_connection_clear_secrets (priv->orig_connection);
} else {
- nm_remote_settings_add_connection_async (nm_settings, priv->orig_connection, TRUE,
- NULL, connection_added, &op);
+ nm_client_add_connection_async (nm_client, priv->orig_connection, TRUE,
+ NULL, connection_added, &op);
if (!nmt_sync_op_wait_boolean (&op, &error)) {
nmt_newt_message_dialog (_("Unable to add new connection: %s"),
error->message);
diff --git a/clients/tui/nmtui-edit.c b/clients/tui/nmtui-edit.c
index c0354784fe..48a8f04772 100644
--- a/clients/tui/nmtui-edit.c
+++ b/clients/tui/nmtui-edit.c
@@ -180,7 +180,7 @@ create_connection (NmtNewtWidget *widget, gpointer list)
GType type = (GType) GPOINTER_TO_SIZE (nmt_newt_listbox_get_active_key (priv->listbox));
NMConnection *connection;
- connection = nm_editor_utils_create_connection (type, priv->master, nm_settings);
+ connection = nm_editor_utils_create_connection (type, priv->master, nm_client);
nmt_edit_connection (connection);
g_object_unref (connection);
@@ -473,7 +473,7 @@ connection_deleted_callback (GObject *connection,
}
static void
-connection_removed_signal (NMRemoteSettings *settings,
+connection_removed_signal (NMClient *client,
NMRemoteConnection *connection,
gpointer user_data)
{
@@ -496,7 +496,7 @@ remove_one_connection (NMRemoteConnection *connection)
nmt_sync_op_init (&data.op);
data.connection = connection;
- g_signal_connect (nm_settings, NM_REMOTE_SETTINGS_CONNECTION_REMOVED,
+ g_signal_connect (nm_client, NM_CLIENT_CONNECTION_REMOVED,
G_CALLBACK (connection_removed_signal), &data);
nm_remote_connection_delete_async (connection, NULL, connection_deleted_callback, &data);
@@ -507,7 +507,7 @@ remove_one_connection (NMRemoteConnection *connection)
g_error_free (error);
}
- g_signal_handlers_disconnect_by_func (nm_settings, G_CALLBACK (connection_removed_signal), &data);
+ g_signal_handlers_disconnect_by_func (nm_client, G_CALLBACK (connection_removed_signal), &data);
}
void
@@ -553,9 +553,9 @@ nmtui_edit (int argc, char **argv)
if (argc == 2) {
if (nm_utils_is_uuid (argv[1]))
- conn = NM_CONNECTION (nm_remote_settings_get_connection_by_uuid (nm_settings, argv[1]));
+ conn = NM_CONNECTION (nm_client_get_connection_by_uuid (nm_client, argv[1]));
if (!conn)
- conn = NM_CONNECTION (nm_remote_settings_get_connection_by_id (nm_settings, argv[1]));
+ conn = NM_CONNECTION (nm_client_get_connection_by_id (nm_client, argv[1]));
if (!conn) {
nmt_newt_message_dialog ("%s: no such connection '%s'\n", argv[0], argv[1]);
diff --git a/clients/tui/nmtui-hostname.c b/clients/tui/nmtui-hostname.c
index 92e493d92b..23de95b854 100644
--- a/clients/tui/nmtui-hostname.c
+++ b/clients/tui/nmtui-hostname.c
@@ -71,8 +71,8 @@ nmtui_hostname_run_dialog (void)
ok = nmt_newt_button_box_add_end (bbox, _("OK"));
nmt_newt_widget_set_exit_on_activate (ok, TRUE);
- g_object_get (G_OBJECT (nm_settings),
- NM_REMOTE_SETTINGS_HOSTNAME, &hostname,
+ g_object_get (G_OBJECT (nm_client),
+ NM_CLIENT_HOSTNAME, &hostname,
NULL);
nmt_newt_entry_set_text (entry, hostname);
g_free (hostname);
@@ -92,7 +92,7 @@ hostname_set (GObject *object,
{
GError *error = NULL;
- nm_remote_settings_save_hostname_finish (NM_REMOTE_SETTINGS (object), result, &error);
+ nm_client_save_hostname_finish (NM_CLIENT (object), result, &error);
nmt_sync_op_complete_boolean (op, error == NULL, error);
g_clear_error (&error);
}
@@ -112,7 +112,7 @@ nmtui_hostname (int argc, char **argv)
if (hostname) {
nmt_sync_op_init (&op);
- nm_remote_settings_save_hostname_async (nm_settings, hostname, NULL, hostname_set, &op);
+ nm_client_save_hostname_async (nm_client, hostname, NULL, hostname_set, &op);
if (nmt_sync_op_wait_boolean (&op, &error)) {
/* Translators: this indicates the result. ie, "I have set the hostname to ..." */
nmt_newt_message_dialog (_("Set hostname to '%s'"), hostname);
diff --git a/clients/tui/nmtui.c b/clients/tui/nmtui.c
index ee63ccf280..0fac98ebc4 100644
--- a/clients/tui/nmtui.c
+++ b/clients/tui/nmtui.c
@@ -44,7 +44,6 @@
#include "nmtui-hostname.h"
NMClient *nm_client;
-NMRemoteSettings *nm_settings;
static GMainLoop *loop;
typedef NmtNewtForm * (*NmtuiSubprogram) (int argc, char **argv);
@@ -244,13 +243,6 @@ main (int argc, char **argv)
exit (1);
}
- nm_settings = nm_remote_settings_new (NULL, &error);
- if (!nm_settings) {
- g_printerr (_("Could not contact NetworkManager: %s.\n"), error->message);
- g_error_free (error);
- exit (1);
- }
-
if (sleep_on_startup)
sleep (5);
@@ -296,7 +288,6 @@ main (int argc, char **argv)
nmt_newt_finished ();
g_object_unref (nm_client);
- g_object_unref (nm_settings);
return 0;
}
diff --git a/clients/tui/nmtui.h b/clients/tui/nmtui.h
index 10b9c06ade..aada9719f7 100644
--- a/clients/tui/nmtui.h
+++ b/clients/tui/nmtui.h
@@ -24,7 +24,6 @@
G_BEGIN_DECLS
extern NMClient *nm_client;
-extern NMRemoteSettings *nm_settings;
void nmtui_quit (void);
diff --git a/examples/C/glib/add-connection-libnm.c b/examples/C/glib/add-connection-libnm.c
index c680f420ff..1288e79c51 100644
--- a/examples/C/glib/add-connection-libnm.c
+++ b/examples/C/glib/add-connection-libnm.c
@@ -31,7 +31,7 @@
#include <NetworkManager.h>
static void
-added_cb (GObject *settings,
+added_cb (GObject *client,
GAsyncResult *result,
gpointer user_data)
{
@@ -42,8 +42,7 @@ added_cb (GObject *settings,
/* NM responded to our request; either handle the resulting error or
* print out the object path of the connection we just added.
*/
- remote = nm_remote_settings_add_connection_finish (NM_REMOTE_SETTINGS (settings),
- result, &error);
+ remote = nm_client_add_connection_finish (NM_CLIENT (client), result, &error);
if (error) {
g_print ("Error adding connection: %s", error->message);
@@ -58,7 +57,7 @@ added_cb (GObject *settings,
}
static void
-add_connection (NMRemoteSettings *settings, GMainLoop *loop, const char *con_name)
+add_connection (NMClient *client, GMainLoop *loop, const char *con_name)
{
NMConnection *connection;
NMSettingConnection *s_con;
@@ -94,7 +93,7 @@ add_connection (NMRemoteSettings *settings, GMainLoop *loop, const char *con_nam
/* Ask the settings service to add the new connection; we'll quit the
* mainloop and exit when the callback is called.
*/
- nm_remote_settings_add_connection_async (settings, connection, TRUE, NULL, added_cb, loop);
+ nm_client_add_connection_async (client, connection, TRUE, NULL, added_cb, loop);
g_object_unref (connection);
}
@@ -102,7 +101,7 @@ add_connection (NMRemoteSettings *settings, GMainLoop *loop, const char *con_nam
int
main (int argc, char *argv[])
{
- NMRemoteSettings *settings;
+ NMClient *client;
GMainLoop *loop;
GError *error = NULL;
@@ -113,21 +112,21 @@ main (int argc, char *argv[])
loop = g_main_loop_new (NULL, FALSE);
- /* Create our proxy for NetworkManager's settings service */
- settings = nm_remote_settings_new (NULL, &error);
- if (!settings) {
- g_message ("Error: Could not get system settings: %s.", error->message);
+ /* Connect to NetworkManager */
+ client = nm_client_new (NULL, &error);
+ if (!client) {
+ g_message ("Error: Could not connect to NetworkManager: %s.", error->message);
g_error_free (error);
return 1;
}
- /* Ask the settings service to add the new connection */
- add_connection (settings, loop, "__Test connection__");
+ /* Ask NM to add the new connection */
+ add_connection (client, loop, "__Test connection__");
/* Wait for the connection to be added */
g_main_loop_run (loop);
/* Clean up */
- g_object_unref (settings);
+ g_object_unref (client);
return 0;
}
diff --git a/examples/C/glib/list-connections-libnm.c b/examples/C/glib/list-connections-libnm.c
index bebeeb8a23..f761bfd77f 100644
--- a/examples/C/glib/list-connections-libnm.c
+++ b/examples/C/glib/list-connections-libnm.c
@@ -18,9 +18,9 @@
*/
/*
- * The example shows how to list connections from the System Settings service
- * using libnm. Contrast this example with list-connections-gdbus.c, which is a
- * bit lower level and talks directly to NM using GDBus.
+ * The example shows how to list connections. Contrast this example with
+ * list-connections-gdbus.c, which is a bit lower level and talks directly to NM
+ * using GDBus.
*
* Compile with:
* gcc -Wall `pkg-config --libs --cflags glib-2.0 libnm` list-connections-libnm.c -o list-connections-libnm
@@ -65,8 +65,7 @@ show_connection (gpointer data, gpointer user_data)
int
main (int argc, char *argv[])
{
- NMRemoteSettings *settings;
- gboolean settings_running;
+ NMClient *client;
GError *error = NULL;
GSList *connections;
@@ -75,30 +74,26 @@ main (int argc, char *argv[])
g_type_init ();
#endif
- /* Get system settings */
- if (!(settings = nm_remote_settings_new (NULL, &error))) {
- g_message ("Error: Could not get system settings: %s.", error->message);
+ if (!(client = nm_client_new (NULL, &error))) {
+ g_message ("Error: Could not connect to NetworkManager: %s.", error->message);
g_error_free (error);
return EXIT_FAILURE;
}
- /* Find out whether setting service is running */
- g_object_get (settings, NM_REMOTE_SETTINGS_NM_RUNNING, &settings_running, NULL);
-
- if (!settings_running) {
- g_message ("Error: Can't obtain connections: settings service is not running.");
+ if (!nm_client_get_nm_running (client)) {
+ g_message ("Error: Can't obtain connections: NetworkManager is not running.");
return EXIT_FAILURE;
}
/* Now the connections can be listed. */
- connections = nm_remote_settings_list_connections (settings);
+ connections = nm_client_list_connections (client);
printf ("Connections:\n===================\n");
g_slist_foreach (connections, show_connection, NULL);
g_slist_free (connections);
- g_object_unref (settings);
+ g_object_unref (client);
return EXIT_SUCCESS;
}
diff --git a/libnm/Makefile.am b/libnm/Makefile.am
index f5ab2c6eee..e3945b88b6 100644
--- a/libnm/Makefile.am
+++ b/libnm/Makefile.am
@@ -50,7 +50,6 @@ libnminclude_HEADERS = \
nm-ip6-config.h \
nm-object.h \
nm-remote-connection.h \
- nm-remote-settings.h \
nm-secret-agent.h \
nm-vpn-connection.h \
nm-vpn-plugin.h \
@@ -64,7 +63,8 @@ libnm_la_private_headers = \
nm-manager.h \
nm-object-cache.h \
nm-object-private.h \
- nm-remote-connection-private.h
+ nm-remote-connection-private.h \
+ nm-remote-settings.h
libnm_la_csources = \
nm-access-point.c \
diff --git a/libnm/NetworkManager.h b/libnm/NetworkManager.h
index d7414101ce..ce7bec74c2 100644
--- a/libnm/NetworkManager.h
+++ b/libnm/NetworkManager.h
@@ -50,7 +50,6 @@
#include <nm-ip6-config.h>
#include <nm-object.h>
#include <nm-remote-connection.h>
-#include <nm-remote-settings.h>
#include <nm-secret-agent.h>
#include <nm-setting-8021x.h>
#include <nm-setting-adsl.h>
diff --git a/libnm/libnm.ver b/libnm/libnm.ver
index 08182f8c09..437cebf936 100644
--- a/libnm/libnm.ver
+++ b/libnm/libnm.ver
@@ -37,6 +37,8 @@ global:
nm_client_activate_connection_finish;
nm_client_add_and_activate_connection_async;
nm_client_add_and_activate_connection_finish;
+ nm_client_add_connection_async;
+ nm_client_add_connection_finish;
nm_client_check_connectivity;
nm_client_check_connectivity_async;
nm_client_check_connectivity_finish;
@@ -47,6 +49,9 @@ global:
nm_client_error_quark;
nm_client_get_activating_connection;
nm_client_get_active_connections;
+ nm_client_get_connection_by_id;
+ nm_client_get_connection_by_path;
+ nm_client_get_connection_by_uuid;
nm_client_get_connectivity;
nm_client_get_device_by_iface;
nm_client_get_device_by_path;
@@ -59,6 +64,10 @@ global:
nm_client_get_state;
nm_client_get_type;
nm_client_get_version;
+ nm_client_list_connections;
+ nm_client_load_connections;
+ nm_client_load_connections_async;
+ nm_client_load_connections_finish;
nm_client_networking_get_enabled;
nm_client_networking_set_enabled;
nm_client_new;
@@ -66,6 +75,12 @@ global:
nm_client_new_finish;
nm_client_permission_get_type;
nm_client_permission_result_get_type;
+ nm_client_reload_connections;
+ nm_client_reload_connections_async;
+ nm_client_reload_connections_finish;
+ nm_client_save_hostname;
+ nm_client_save_hostname_async;
+ nm_client_save_hostname_finish;
nm_client_set_logging;
nm_client_wimax_get_enabled;
nm_client_wimax_hardware_get_enabled;
@@ -363,27 +378,6 @@ global:
nm_remote_connection_save;
nm_remote_connection_save_async;
nm_remote_connection_save_finish;
- nm_remote_settings_add_connection_async;
- nm_remote_settings_add_connection_finish;
- nm_remote_settings_error_get_type;
- nm_remote_settings_error_quark;
- nm_remote_settings_get_connection_by_id;
- nm_remote_settings_get_connection_by_path;
- nm_remote_settings_get_connection_by_uuid;
- nm_remote_settings_get_type;
- nm_remote_settings_list_connections;
- nm_remote_settings_load_connections;
- nm_remote_settings_load_connections_async;
- nm_remote_settings_load_connections_finish;
- nm_remote_settings_new;
- nm_remote_settings_new_async;
- nm_remote_settings_new_finish;
- nm_remote_settings_reload_connections;
- nm_remote_settings_reload_connections_async;
- nm_remote_settings_reload_connections_finish;
- nm_remote_settings_save_hostname;
- nm_remote_settings_save_hostname_async;
- nm_remote_settings_save_hostname_finish;
nm_secret_agent_capabilities_get_type;
nm_secret_agent_delete_secrets;
nm_secret_agent_error_get_type;
diff --git a/libnm/nm-client.c b/libnm/nm-client.c
index c0f0075086..ac464b336e 100644
--- a/libnm/nm-client.c
+++ b/libnm/nm-client.c
@@ -24,6 +24,7 @@
#include "nm-client.h"
#include "nm-manager.h"
+#include "nm-remote-settings.h"
#include "nm-device-ethernet.h"
#include "nm-device-wifi.h"
#include "nm-device-private.h"
@@ -50,6 +51,7 @@ G_DEFINE_TYPE_WITH_CODE (NMClient, nm_client, G_TYPE_OBJECT,
typedef struct {
NMManager *manager;
+ NMRemoteSettings *settings;
} NMClientPrivate;
enum {
@@ -70,6 +72,9 @@ enum {
PROP_PRIMARY_CONNECTION,
PROP_ACTIVATING_CONNECTION,
PROP_DEVICES,
+ PROP_CONNECTIONS,
+ PROP_HOSTNAME,
+ PROP_CAN_MODIFY,
LAST_PROP
};
@@ -78,6 +83,8 @@ enum {
DEVICE_ADDED,
DEVICE_REMOVED,
PERMISSION_CHANGED,
+ CONNECTION_ADDED,
+ CONNECTION_REMOVED,
LAST_SIGNAL
};
@@ -579,6 +586,112 @@ nm_client_check_connectivity_finish (NMClient *client,
return (NMConnectivityState) g_simple_async_result_get_op_res_gssize (simple);
}
+
+/**
+ * nm_client_save_hostname:
+ * @client: the %NMClient
+ * @hostname: (allow-none): the new persistent hostname to set, or %NULL to
+ * clear any existing persistent hostname
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: return location for #GError
+ *
+ * Requests that the machine's persistent hostname be set to the specified value
+ * or cleared.
+ *
+ * Returns: %TRUE if the request was successful, %FALSE if it failed
+ **/
+gboolean
+nm_client_save_hostname (NMClient *client,
+ const char *hostname,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ return nm_remote_settings_save_hostname (NM_CLIENT_GET_PRIVATE (client)->settings,
+ hostname, cancellable, error);
+}
+
+static void
+save_hostname_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+
+ if (nm_remote_settings_save_hostname_finish (NM_REMOTE_SETTINGS (object), result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ else
+ g_simple_async_result_take_error (simple, error);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_client_save_hostname_async:
+ * @client: the %NMClient
+ * @hostname: (allow-none): the new persistent hostname to set, or %NULL to
+ * clear any existing persistent hostname
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: (scope async): callback to be called when the operation completes
+ * @user_data: (closure): caller-specific data passed to @callback
+ *
+ * Requests that the machine's persistent hostname be set to the specified value
+ * or cleared.
+ **/
+void
+nm_client_save_hostname_async (NMClient *client,
+ const char *hostname,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+ GError *error = NULL;
+
+ g_return_if_fail (NM_IS_CLIENT (client));
+
+ if (!_nm_client_check_nm_running (client, &error)) {
+ g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error);
+ return;
+ }
+
+ simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data,
+ nm_client_save_hostname_async);
+ nm_remote_settings_save_hostname_async (NM_CLIENT_GET_PRIVATE (client)->settings,
+ hostname,
+ cancellable, save_hostname_cb, simple);
+}
+
+/**
+ * nm_client_save_hostname_finish:
+ * @client: the %NMClient
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: return location for #GError
+ *
+ * Gets the result of an nm_client_save_hostname_async() call.
+ *
+ * Returns: %TRUE if the request was successful, %FALSE if it failed
+ **/
+gboolean
+nm_client_save_hostname_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
/****************************************************************/
/* Devices */
/****************************************************************/
@@ -1034,6 +1147,419 @@ nm_client_deactivate_connection_finish (NMClient *client,
}
/****************************************************************/
+/* Connections */
+/****************************************************************/
+
+/**
+ * nm_client_list_connections:
+ * @client: the %NMClient
+ *
+ * Returns: (transfer container) (element-type NMRemoteConnection): a
+ * list containing all connections provided by the remote settings service.
+ * Each element of the returned list is a %NMRemoteConnection instance, which is
+ * owned by the %NMClient object and should not be freed by the caller.
+ * The returned list is, however, owned by the caller and should be freed
+ * using g_slist_free() when no longer required.
+ **/
+GSList *
+nm_client_list_connections (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+
+ return nm_remote_settings_list_connections (NM_CLIENT_GET_PRIVATE (client)->settings);
+}
+
+/**
+ * nm_client_get_connection_by_id:
+ * @client: the %NMClient
+ * @id: the id of the remote connection
+ *
+ * Returns the first matching %NMRemoteConnection matching a given @id.
+ *
+ * Returns: (transfer none): the remote connection object on success, or %NULL if no
+ * matching object was found.
+ **/
+NMRemoteConnection *
+nm_client_get_connection_by_id (NMClient *client, const char *id)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (id != NULL, NULL);
+
+ return nm_remote_settings_get_connection_by_id (NM_CLIENT_GET_PRIVATE (client)->settings, id);
+}
+
+/**
+ * nm_client_get_connection_by_path:
+ * @client: the %NMClient
+ * @path: the D-Bus object path of the remote connection
+ *
+ * Returns the %NMRemoteConnection representing the connection at @path.
+ *
+ * Returns: (transfer none): the remote connection object on success, or %NULL if the object was
+ * not known
+ **/
+NMRemoteConnection *
+nm_client_get_connection_by_path (NMClient *client, const char *path)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (path != NULL, NULL);
+
+ return nm_remote_settings_get_connection_by_path (NM_CLIENT_GET_PRIVATE (client)->settings, path);
+}
+
+/**
+ * nm_client_get_connection_by_uuid:
+ * @client: the %NMClient
+ * @uuid: the UUID of the remote connection
+ *
+ * Returns the %NMRemoteConnection identified by @uuid.
+ *
+ * Returns: (transfer none): the remote connection object on success, or %NULL if the object was
+ * not known
+ **/
+NMRemoteConnection *
+nm_client_get_connection_by_uuid (NMClient *client, const char *uuid)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (uuid != NULL, NULL);
+
+ return nm_remote_settings_get_connection_by_uuid (NM_CLIENT_GET_PRIVATE (client)->settings, uuid);
+}
+
+static void
+add_connection_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ NMRemoteConnection *conn;
+ GError *error = NULL;
+
+ conn = nm_remote_settings_add_connection_finish (NM_REMOTE_SETTINGS (object), result, &error);
+ if (conn)
+ g_simple_async_result_set_op_res_gpointer (simple, conn, g_object_unref);
+ else
+ g_simple_async_result_take_error (simple, error);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_client_add_connection_async:
+ * @client: the %NMClient
+ * @connection: the connection to add. Note that this object's settings will be
+ * added, not the object itself
+ * @save_to_disk: whether to immediately save the connection to disk
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: (scope async): callback to be called when the add operation completes
+ * @user_data: (closure): caller-specific data passed to @callback
+ *
+ * Requests that the remote settings service add the given settings to a new
+ * connection. If @save_to_disk is %TRUE, the connection is immediately written
+ * to disk; otherwise it is initially only stored in memory, but may be saved
+ * later by calling the connection's nm_remote_connection_commit_changes()
+ * method.
+ *
+ * @connection is untouched by this function and only serves as a template of
+ * the settings to add. The #NMRemoteConnection object that represents what
+ * NetworkManager actually added is returned to @callback when the addition
+ * operation is complete.
+ *
+ * Note that the #NMRemoteConnection returned in @callback may not contain
+ * identical settings to @connection as NetworkManager may perform automatic
+ * completion and/or normalization of connection properties.
+ **/
+void
+nm_client_add_connection_async (NMClient *client,
+ NMConnection *connection,
+ gboolean save_to_disk,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+ GError *error = NULL;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+
+ if (!_nm_client_check_nm_running (client, &error)) {
+ g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error);
+ return;
+ }
+
+ simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data,
+ nm_client_deactivate_connection_async);
+ nm_remote_settings_add_connection_async (NM_CLIENT_GET_PRIVATE (client)->settings,
+ connection, save_to_disk,
+ cancellable, add_connection_cb, simple);
+}
+
+/**
+ * nm_client_add_connection_finish:
+ * @client: an #NMClient
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of a call to nm_client_add_connection_async().
+ *
+ * Returns: (transfer full): the new #NMRemoteConnection on success, %NULL on
+ * failure, in which case @error will be set.
+ **/
+NMRemoteConnection *
+nm_client_add_connection_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return NULL;
+ else
+ return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple));
+}
+
+/**
+ * nm_client_load_connections:
+ * @client: the %NMClient
+ * @filenames: %NULL-terminated array of filenames to load
+ * @failures: (out) (transfer full): on return, a %NULL-terminated array of
+ * filenames that failed to load
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: return location for #GError
+ *
+ * Requests that the remote settings service load or reload the given files,
+ * adding or updating the connections described within.
+ *
+ * The changes to the indicated files will not yet be reflected in
+ * @client's connections array when the function returns.
+ *
+ * If all of the indicated files were successfully loaded, the
+ * function will return %TRUE, and @failures will be set to %NULL. If
+ * NetworkManager tried to load the files, but some (or all) failed,
+ * then @failures will be set to a %NULL-terminated array of the
+ * filenames that failed to load.
+ *
+ * Returns: %TRUE if NetworkManager at least tried to load @filenames,
+ * %FALSE if an error occurred (eg, permission denied).
+ **/
+gboolean
+nm_client_load_connections (NMClient *client,
+ char **filenames,
+ char ***failures,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+ g_return_val_if_fail (filenames != NULL, FALSE);
+
+ if (!_nm_client_check_nm_running (client, error))
+ return FALSE;
+
+ return nm_remote_settings_load_connections (NM_CLIENT_GET_PRIVATE (client)->settings,
+ filenames, failures,
+ cancellable, error);
+}
+
+static void
+load_connections_cb (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+ char **failures = NULL;
+
+ if (nm_remote_settings_load_connections_finish (NM_REMOTE_SETTINGS (object),
+ &failures, result, &error))
+ g_simple_async_result_set_op_res_gpointer (simple, failures, (GDestroyNotify) g_strfreev);
+ else
+ g_simple_async_result_take_error (simple, error);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_client_load_connections_async:
+ * @client: the %NMClient
+ * @filenames: %NULL-terminated array of filenames to load
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: (scope async): callback to be called when the operation completes
+ * @user_data: (closure): caller-specific data passed to @callback
+ *
+ * Requests that the remote settings service asynchronously load or reload the
+ * given files, adding or updating the connections described within.
+ *
+ * See nm_client_load_connections() for more details.
+ **/
+void
+nm_client_load_connections_async (NMClient *client,
+ char **filenames,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+ GError *error = NULL;
+
+ g_return_if_fail (NM_IS_CLIENT (client));
+ g_return_if_fail (filenames != NULL);
+
+ if (!_nm_client_check_nm_running (client, &error)) {
+ g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error);
+ return;
+ }
+
+ simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data,
+ nm_client_load_connections_async);
+ nm_remote_settings_load_connections_async (NM_CLIENT_GET_PRIVATE (client)->settings,
+ filenames,
+ cancellable, load_connections_cb, simple);
+}
+
+/**
+ * nm_client_load_connections_finish:
+ * @client: the %NMClient
+ * @failures: (out) (transfer full): on return, a %NULL-terminated array of
+ * filenames that failed to load
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: location for a #GError, or %NULL
+ *
+ * Gets the result of an nm_client_load_connections_async() call.
+
+ * See nm_client_load_connections() for more details.
+ *
+ * Returns: %TRUE if NetworkManager at least tried to load @filenames,
+ * %FALSE if an error occurred (eg, permission denied).
+ **/
+gboolean
+nm_client_load_connections_finish (NMClient *client,
+ char ***failures,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else {
+ if (failures)
+ *failures = g_strdupv (g_simple_async_result_get_op_res_gpointer (simple));
+ return TRUE;
+ }
+}
+
+/**
+ * nm_client_reload_connections:
+ * @client: the #NMClient
+ * @cancellable: a #GCancellable, or %NULL
+ * @error: return location for #GError
+ *
+ * Requests that the remote settings service reload all connection
+ * files from disk, adding, updating, and removing connections until
+ * the in-memory state matches the on-disk state.
+ *
+ * Return value: %TRUE on success, %FALSE on failure
+ **/
+gboolean
+nm_client_reload_connections (NMClient *client,
+ GCancellable *cancellable,
+ GError **error)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+
+ if (!_nm_client_check_nm_running (client, error))
+ return FALSE;
+
+ return nm_remote_settings_reload_connections (NM_CLIENT_GET_PRIVATE (client)->settings,
+ cancellable, error);
+}
+
+static void
+reload_connections_cb (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ GSimpleAsyncResult *simple = user_data;
+ GError *error = NULL;
+
+ if (nm_remote_settings_reload_connections_finish (NM_REMOTE_SETTINGS (object),
+ result, &error))
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+ else
+ g_simple_async_result_take_error (simple, error);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+/**
+ * nm_client_reload_connections_async:
+ * @client: the #NMClient
+ * @cancellable: a #GCancellable, or %NULL
+ * @callback: (scope async): callback to be called when the reload operation completes
+ * @user_data: (closure): caller-specific data passed to @callback
+ *
+ * Requests that the remote settings service begin reloading all connection
+ * files from disk, adding, updating, and removing connections until the
+ * in-memory state matches the on-disk state.
+ **/
+void
+nm_client_reload_connections_async (NMClient *client,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *simple;
+ GError *error = NULL;
+
+ g_return_if_fail (NM_IS_CLIENT (client));
+
+ if (!_nm_client_check_nm_running (client, &error)) {
+ g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error);
+ return;
+ }
+
+ simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data,
+ nm_client_reload_connections_async);
+ nm_remote_settings_reload_connections_async (NM_CLIENT_GET_PRIVATE (client)->settings,
+ cancellable, reload_connections_cb, simple);
+}
+
+/**
+ * nm_client_reload_connections_finish:
+ * @client: the #NMClient
+ * @result: the result passed to the #GAsyncReadyCallback
+ * @error: return location for #GError
+ *
+ * Gets the result of an nm_client_reload_connections_async() call.
+ *
+ * Return value: %TRUE on success, %FALSE on failure
+ **/
+gboolean
+nm_client_reload_connections_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (NM_IS_CLIENT (client), FALSE);
+ g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE);
+
+ simple = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ else
+ return g_simple_async_result_get_op_res_gboolean (simple);
+}
+
+/****************************************************************/
/**
* nm_client_new:
@@ -1046,10 +1572,6 @@ nm_client_deactivate_connection_finish (NMClient *client,
* client. You can use nm_client_new_async() if you want to avoid
* that.
*
- * NOTE: #NMClient provides information about devices and a mechanism to
- * control them. To access and modify network configuration data, use the
- * #NMRemoteSettings object.
- *
* Returns: a new #NMClient or NULL on an error
**/
NMClient *
@@ -1084,10 +1606,6 @@ client_inited (GObject *source, GAsyncResult *result, gpointer user_data)
* @callback will be called when it is done; use
* nm_client_new_finish() to get the result. Note that on an error,
* the callback can be invoked with two first parameters as NULL.
- *
- * NOTE: #NMClient provides information about devices and a mechanism to
- * control them. To access and modify network configuration data, use the
- * #NMRemoteSettings object.
**/
void
nm_client_new_async (GCancellable *cancellable,
@@ -1137,9 +1655,9 @@ nm_client_new_finish (GAsyncResult *result, GError **error)
}
static void
-manager_notify (GObject *object,
- GParamSpec *pspec,
- gpointer client)
+subobject_notify (GObject *object,
+ GParamSpec *pspec,
+ gpointer client)
{
if (!g_str_has_suffix (pspec->name, "-internal"))
g_object_notify (client, pspec->name);
@@ -1170,6 +1688,21 @@ manager_permission_changed (NMManager *manager,
}
static void
+settings_connection_added (NMRemoteSettings *manager,
+ NMRemoteConnection *connection,
+ gpointer client)
+{
+ g_signal_emit (client, signals[CONNECTION_ADDED], 0, connection);
+}
+static void
+settings_connection_removed (NMRemoteSettings *manager,
+ NMRemoteConnection *connection,
+ gpointer client)
+{
+ g_signal_emit (client, signals[CONNECTION_REMOVED], 0, connection);
+}
+
+static void
constructed (GObject *object)
{
NMClient *client = NM_CLIENT (object);
@@ -1178,9 +1711,8 @@ constructed (GObject *object)
priv->manager = g_object_new (NM_TYPE_MANAGER,
NM_OBJECT_PATH, NM_DBUS_PATH,
NULL);
-
g_signal_connect (priv->manager, "notify",
- G_CALLBACK (manager_notify), client);
+ G_CALLBACK (subobject_notify), client);
g_signal_connect (priv->manager, "device-added",
G_CALLBACK (manager_device_added), client);
g_signal_connect (priv->manager, "device-removed",
@@ -1188,6 +1720,16 @@ constructed (GObject *object)
g_signal_connect (priv->manager, "permission-changed",
G_CALLBACK (manager_permission_changed), client);
+ priv->settings = g_object_new (NM_TYPE_REMOTE_SETTINGS,
+ NM_OBJECT_PATH, NM_DBUS_PATH_SETTINGS,
+ NULL);
+ g_signal_connect (priv->settings, "notify",
+ G_CALLBACK (subobject_notify), client);
+ g_signal_connect (priv->settings, "connection-added",
+ G_CALLBACK (settings_connection_added), client);
+ g_signal_connect (priv->settings, "connection-removed",
+ G_CALLBACK (settings_connection_removed), client);
+
G_OBJECT_CLASS (nm_client_parent_class)->constructed (object);
}
@@ -1199,6 +1741,8 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
if (!g_initable_init (G_INITABLE (priv->manager), cancellable, error))
return FALSE;
+ if (!g_initable_init (G_INITABLE (priv->settings), cancellable, error))
+ return FALSE;
return TRUE;
}
@@ -1207,6 +1751,8 @@ typedef struct {
NMClient *client;
GCancellable *cancellable;
GSimpleAsyncResult *result;
+ gboolean manager_inited;
+ gboolean settings_inited;
} NMClientInitData;
static void
@@ -1224,12 +1770,26 @@ init_async_inited_manager (GObject *object, GAsyncResult *result, gpointer user_
NMClientInitData *init_data = user_data;
GError *error = NULL;
- if (g_async_initable_init_finish (G_ASYNC_INITABLE (object), result, &error))
- g_simple_async_result_set_op_res_gboolean (init_data->result, TRUE);
- else
+ if (!g_async_initable_init_finish (G_ASYNC_INITABLE (object), result, &error))
+ g_simple_async_result_take_error (init_data->result, error);
+
+ init_data->manager_inited = TRUE;
+ if (init_data->settings_inited)
+ init_async_complete (init_data);
+}
+
+static void
+init_async_inited_settings (GObject *object, GAsyncResult *result, gpointer user_data)
+{
+ NMClientInitData *init_data = user_data;
+ GError *error = NULL;
+
+ if (!g_async_initable_init_finish (G_ASYNC_INITABLE (object), result, &error))
g_simple_async_result_take_error (init_data->result, error);
- init_async_complete (init_data);
+ init_data->settings_inited = TRUE;
+ if (init_data->manager_inited)
+ init_async_complete (init_data);
}
static void
@@ -1248,6 +1808,9 @@ init_async_parent_inited (GObject *source, GAsyncResult *result, gpointer user_d
g_async_initable_init_async (G_ASYNC_INITABLE (priv->manager),
G_PRIORITY_DEFAULT, init_data->cancellable,
init_async_inited_manager, init_data);
+ g_async_initable_init_async (G_ASYNC_INITABLE (priv->settings),
+ G_PRIORITY_DEFAULT, init_data->cancellable,
+ init_async_inited_settings, init_data);
}
static void
@@ -1292,6 +1855,7 @@ dispose (GObject *object)
NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE (object);
g_clear_object (&priv->manager);
+ g_clear_object (&priv->settings);
G_OBJECT_CLASS (nm_client_parent_class)->dispose (object);
}
@@ -1338,6 +1902,12 @@ get_property (GObject *object, guint prop_id,
g_object_get_property (G_OBJECT (NM_CLIENT_GET_PRIVATE (object)->manager),
pspec->name, value);
break;
+ case PROP_CONNECTIONS:
+ case PROP_HOSTNAME:
+ case PROP_CAN_MODIFY:
+ g_object_get_property (G_OBJECT (NM_CLIENT_GET_PRIVATE (object)->settings),
+ pspec->name, value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1559,6 +2129,48 @@ nm_client_class_init (NMClientClass *client_class)
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
+ /**
+ * NMClient:connections:
+ *
+ * The list of configured connections that are available to the user. (Note
+ * that this differs from the underlying D-Bus property, which may also
+ * contain the object paths of connections that the user does not have
+ * permission to read the details of.)
+ *
+ * Element-type: NMRemoteConnection
+ */
+ g_object_class_install_property
+ (object_class, PROP_CONNECTIONS,
+ g_param_spec_boxed (NM_CLIENT_CONNECTIONS, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:hostname:
+ *
+ * The machine hostname stored in persistent configuration. This can be
+ * modified by calling nm_client_save_hostname().
+ */
+ g_object_class_install_property
+ (object_class, PROP_HOSTNAME,
+ g_param_spec_string (NM_CLIENT_HOSTNAME, "", "",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
+ * NMClient:can-modify:
+ *
+ * If %TRUE, adding and modifying connections is supported.
+ */
+ g_object_class_install_property
+ (object_class, PROP_CAN_MODIFY,
+ g_param_spec_boolean (NM_CLIENT_CAN_MODIFY, "", "",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
/* signals */
/**
@@ -1569,7 +2181,7 @@ nm_client_class_init (NMClientClass *client_class)
* Notifies that a #NMDevice is added.
**/
signals[DEVICE_ADDED] =
- g_signal_new ("device-added",
+ g_signal_new (NM_CLIENT_DEVICE_ADDED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMClientClass, device_added),
@@ -1585,7 +2197,7 @@ nm_client_class_init (NMClientClass *client_class)
* Notifies that a #NMDevice is removed.
**/
signals[DEVICE_REMOVED] =
- g_signal_new ("device-removed",
+ g_signal_new (NM_CLIENT_DEVICE_REMOVED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMClientClass, device_removed),
@@ -1602,11 +2214,42 @@ nm_client_class_init (NMClientClass *client_class)
* Notifies that a permission has changed
**/
signals[PERMISSION_CHANGED] =
- g_signal_new ("permission-changed",
+ g_signal_new (NM_CLIENT_PERMISSION_CHANGED,
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
+ /**
+ * NMClient::connection-added:
+ * @client: the settings object that received the signal
+ * @connection: the new connection
+ *
+ * Notifies that a #NMConnection has been added.
+ **/
+ signals[CONNECTION_ADDED] =
+ g_signal_new (NM_CLIENT_CONNECTION_ADDED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMClientClass, connection_added),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ NM_TYPE_REMOTE_CONNECTION);
+
+ /**
+ * NMClient::connection-removed:
+ * @client: the settings object that received the signal
+ * @connection: the removed connection
+ *
+ * Notifies that a #NMConnection has been removed.
+ **/
+ signals[CONNECTION_REMOVED] =
+ g_signal_new (NM_CLIENT_CONNECTION_REMOVED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMClientClass, connection_removed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ NM_TYPE_REMOTE_CONNECTION);
}
static void
diff --git a/libnm/nm-client.h b/libnm/nm-client.h
index bcb897eada..99de7e003a 100644
--- a/libnm/nm-client.h
+++ b/libnm/nm-client.h
@@ -29,9 +29,11 @@
#include <glib.h>
#include <glib-object.h>
#include <gio/gio.h>
+
#include <nm-dbus-interface.h>
#include "nm-device.h"
#include "nm-active-connection.h"
+#include "nm-remote-connection.h"
#include "nm-vpn-connection.h"
G_BEGIN_DECLS
@@ -59,6 +61,15 @@ G_BEGIN_DECLS
#define NM_CLIENT_PRIMARY_CONNECTION "primary-connection"
#define NM_CLIENT_ACTIVATING_CONNECTION "activating-connection"
#define NM_CLIENT_DEVICES "devices"
+#define NM_CLIENT_CONNECTIONS "connections"
+#define NM_CLIENT_HOSTNAME "hostname"
+#define NM_CLIENT_CAN_MODIFY "can-modify"
+
+#define NM_CLIENT_DEVICE_ADDED "device-added"
+#define NM_CLIENT_DEVICE_REMOVED "device-removed"
+#define NM_CLIENT_PERMISSION_CHANGED "permission-changed"
+#define NM_CLIENT_CONNECTION_ADDED "connection-added"
+#define NM_CLIENT_CONNECTION_REMOVED "connection-removed"
/**
* NMClientPermission:
@@ -131,12 +142,18 @@ typedef enum {
* @NM_CLIENT_ERROR_UNKNOWN: unknown or unclassified error
* @NM_CLIENT_ERROR_MANAGER_NOT_RUNNING: an operation that requires NetworkManager
* failed because NetworkManager is not running
+ * @NM_CLIENT_ERROR_CONNECTION_REMOVED: the #NMRemoteConnection object
+ * was removed before it was completely initialized
+ * @NM_CLIENT_ERROR_CONNECTION_UNAVAILABLE: the #NMRemoteConnection object
+ * is not visible or otherwise unreadable
*
* Describes errors that may result from operations involving a #NMClient.
**/
typedef enum {
NM_CLIENT_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
NM_CLIENT_ERROR_MANAGER_NOT_RUNNING, /*< nick=ManagerNotRunning >*/
+ NM_CLIENT_ERROR_CONNECTION_REMOVED, /*< nick=ConnectionRemoved >*/
+ NM_CLIENT_ERROR_CONNECTION_UNAVAILABLE, /*< nick=ConnectionUnavailable >*/
} NMClientError;
#define NM_CLIENT_ERROR nm_client_error_quark ()
@@ -155,6 +172,8 @@ typedef struct {
void (*permission_changed) (NMClient *client,
NMClientPermission permission,
NMClientPermissionResult result);
+ void (*connection_added) (NMClient *client, NMRemoteConnection *connection);
+ void (*connection_removed) (NMClient *client, NMRemoteConnection *connection);
/*< private >*/
gpointer padding[8];
@@ -218,6 +237,19 @@ NMConnectivityState nm_client_check_connectivity_finish (NMClient *client,
GAsyncResult *result,
GError **error);
+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,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_client_save_hostname_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error);
+
/* Devices */
const GPtrArray *nm_client_get_devices (NMClient *client);
@@ -266,6 +298,50 @@ gboolean nm_client_deactivate_connection_finish (NMClient *client,
GAsyncResult *result,
GError **error);
+/* Connections */
+
+GSList *nm_client_list_connections (NMClient *client);
+
+NMRemoteConnection *nm_client_get_connection_by_id (NMClient *client, const char *id);
+NMRemoteConnection *nm_client_get_connection_by_path (NMClient *client, const char *path);
+NMRemoteConnection *nm_client_get_connection_by_uuid (NMClient *client, const char *uuid);
+
+void nm_client_add_connection_async (NMClient *client,
+ NMConnection *connection,
+ gboolean save_to_disk,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+NMRemoteConnection *nm_client_add_connection_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error);
+
+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,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_client_load_connections_finish (NMClient *client,
+ char ***failures,
+ GAsyncResult *result,
+ GError **error);
+
+gboolean nm_client_reload_connections (NMClient *client,
+ GCancellable *cancellable,
+ GError **error);
+void nm_client_reload_connections_async (NMClient *client,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean nm_client_reload_connections_finish (NMClient *client,
+ GAsyncResult *result,
+ GError **error);
+
G_END_DECLS
#endif /* __NM_CLIENT_H__ */
diff --git a/libnm/nm-remote-settings.c b/libnm/nm-remote-settings.c
index 5ed6d03949..12e5450375 100644
--- a/libnm/nm-remote-settings.c
+++ b/libnm/nm-remote-settings.c
@@ -24,6 +24,7 @@
#include <nm-connection.h>
#include "nm-remote-settings.h"
+#include "nm-client.h"
#include "nm-remote-connection-private.h"
#include "nm-object-private.h"
#include "nm-dbus-helpers.h"
@@ -33,99 +34,6 @@
#include "nmdbus-settings.h"
-/**
- * SECTION:nm-remote-settings
- * @Short_description: A helper for NetworkManager's settings API
- * @Title: NMRemoteSettings
- * @See_also:#NMRemoteConnection, #NMClient
- *
- * The #NMRemoteSettings object represents NetworkManager's "settings" service,
- * which stores network configuration and allows authenticated clients to
- * add, delete, and modify that configuration. The data required to connect
- * to a specific network is called a "connection" and encapsulated by the
- * #NMConnection object. Once a connection is known to NetworkManager, having
- * either been added by a user or read from on-disk storage, the
- * #NMRemoteSettings object creates a #NMRemoteConnection object which
- * represents this stored connection. Use the #NMRemoteConnection object to
- * perform any operations like modification or deletion.
- *
- * To add a new network connection to the NetworkManager settings service, first
- * build up a template #NMConnection object. Since this connection is not yet
- * added to NetworkManager, it is known only to your program and is not yet
- * an #NMRemoteConnection. Then ask #NMRemoteSettings to add your connection.
- * When the connection is added successfully, the supplied callback is called
- * and returns to your program the new #NMRemoteConnection which represents
- * the stored object known to NetworkManager.
- *
- * |[<!-- language="C" -->
- * static void
- * added_cb (GObject *object,
- * GAsyncResult *result,
- * gpointer user_data)
- * {
- * NMRemoteConnection *remote;
- * GError *error = NULL;
- *
- * remote = nm_remote_settings_add_connection_finish (NM_REMOTE_SETTINGS (object),
- * result, &error);
- * if (error) {
- * g_print ("Error adding connection: %s", error->message);
- * g_clear_error (&error);
- * } else {
- * g_print ("Added: %s\n", nm_connection_get_path (NM_CONNECTION (remote)));
- * /&ast; Use 'remote' with nm_remote_connection_commit_changes() to save
- * * changes and nm_remote_connection_delete() to delete the connection &ast;/
- * }
- * }
- *
- * static gboolean
- * add_wired_connection (const char *human_name)
- * {
- * NMConnection *connection;
- * NMSettingConnection *s_con;
- * NMSettingWired *s_wired;
- * char *uuid;
- * gboolean success;
- *
- * connection = nm_simple_connection_new ();
- *
- * /&ast; Build up the 'connection' setting &ast;/
- * s_con = (NMSettingConnection *) nm_setting_connection_new ();
- * uuid = nm_utils_uuid_generate ();
- * g_object_set (G_OBJECT (s_con),
- * NM_SETTING_CONNECTION_UUID, uuid,
- * NM_SETTING_CONNECTION_ID, human_name,
- * NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
- * NULL);
- * g_free (uuid);
- * nm_connection_add_setting (connection, NM_SETTING (s_con));
- *
- * /&ast; Add the required 'wired' setting as this is a wired connection &ast;/
- * nm_connection_add_setting (connection, nm_setting_wired_new ());
- *
- * /&ast; Add an 'ipv4' setting using AUTO configuration (eg DHCP) &ast;/
- * s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
- * g_object_set (G_OBJECT (s_ip4),
- * NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
- * NULL);
- * nm_connection_add_setting (connection, NM_SETTING (s_ip4));
- *
- * /&ast; Ask NetworkManager to store the connection &ast;/
- * success = nm_remote_settings_add_connection_async (settings, connection,
- * NULL, added_cb, NULL);
- *
- * /&ast; Release the template connection; the actual stored connection will
- * * be returned in added_cb() &ast;/
- * g_object_unref (connection);
- *
- * /&ast; Let glib event loop run and added_cb() will be called when NetworkManager
- * * is done adding the new connection. &ast;/
- *
- * return success;
- * }
- * ]|
- */
-
G_DEFINE_TYPE (NMRemoteSettings, nm_remote_settings, NM_TYPE_OBJECT)
#define NM_REMOTE_SETTINGS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_REMOTE_SETTINGS, NMRemoteSettingsPrivate))
@@ -144,7 +52,6 @@ typedef struct {
enum {
PROP_0,
- PROP_NM_RUNNING,
PROP_CONNECTIONS,
PROP_HOSTNAME,
PROP_CAN_MODIFY,
@@ -163,25 +70,6 @@ static guint signals[LAST_SIGNAL] = { 0 };
/**********************************************************************/
-/**
- * nm_remote_settings_error_quark:
- *
- * Registers an error quark for #NMRemoteSettings if necessary.
- *
- * Returns: the error quark used for #NMRemoteSettings errors.
- **/
-GQuark
-nm_remote_settings_error_quark (void)
-{
- static GQuark quark;
-
- if (G_UNLIKELY (!quark))
- quark = g_quark_from_static_string ("nm-remote-settings-error-quark");
- return quark;
-}
-
-/**********************************************************************/
-
typedef struct {
NMRemoteSettings *self;
GSimpleAsyncResult *simple;
@@ -255,16 +143,6 @@ get_connection_by_string (NMRemoteSettings *settings,
return NULL;
}
-/**
- * nm_remote_settings_get_connection_by_id:
- * @settings: the %NMRemoteSettings
- * @id: the id of the remote connection
- *
- * Returns the first matching %NMRemoteConnection matching a given @id.
- *
- * Returns: (transfer none): the remote connection object on success, or %NULL if no
- * matching object was found.
- **/
NMRemoteConnection *
nm_remote_settings_get_connection_by_id (NMRemoteSettings *settings, const char *id)
{
@@ -274,16 +152,6 @@ nm_remote_settings_get_connection_by_id (NMRemoteSettings *settings, const char
return get_connection_by_string (settings, id, nm_connection_get_id);
}
-/**
- * nm_remote_settings_get_connection_by_path:
- * @settings: the %NMRemoteSettings
- * @path: the D-Bus object path of the remote connection
- *
- * Returns the %NMRemoteConnection representing the connection at @path.
- *
- * Returns: (transfer none): the remote connection object on success, or %NULL if the object was
- * not known
- **/
NMRemoteConnection *
nm_remote_settings_get_connection_by_path (NMRemoteSettings *settings, const char *path)
{
@@ -293,16 +161,6 @@ nm_remote_settings_get_connection_by_path (NMRemoteSettings *settings, const cha
return get_connection_by_string (settings, path, nm_connection_get_path);
}
-/**
- * nm_remote_settings_get_connection_by_uuid:
- * @settings: the %NMRemoteSettings
- * @uuid: the UUID of the remote connection
- *
- * Returns the %NMRemoteConnection identified by @uuid.
- *
- * Returns: (transfer none): the remote connection object on success, or %NULL if the object was
- * not known
- **/
NMRemoteConnection *
nm_remote_settings_get_connection_by_uuid (NMRemoteSettings *settings, const char *uuid)
{
@@ -393,25 +251,14 @@ object_creation_failed (NMObject *object, GError *error, char *failed_path)
addinfo = add_connection_info_find (self, failed_path);
if (addinfo) {
- add_error = g_error_new_literal (NM_REMOTE_SETTINGS_ERROR,
- NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED,
+ add_error = g_error_new_literal (NM_CLIENT_ERROR,
+ NM_CLIENT_ERROR_CONNECTION_REMOVED,
"Connection removed before it was initialized");
add_connection_info_complete (self, addinfo, NULL, add_error);
g_error_free (add_error);
}
}
-/**
- * nm_remote_settings_list_connections:
- * @settings: the %NMRemoteSettings
- *
- * Returns: (transfer container) (element-type NMRemoteConnection): a
- * list containing all connections provided by the remote settings service.
- * Each element of the returned list is a %NMRemoteConnection instance, which is
- * owned by the %NMRemoteSettings object and should not be freed by the caller.
- * The returned list is, however, owned by the caller and should be freed
- * using g_slist_free() when no longer required.
- **/
GSList *
nm_remote_settings_list_connections (NMRemoteSettings *settings)
{
@@ -432,18 +279,6 @@ nm_remote_settings_list_connections (NMRemoteSettings *settings)
return list;
}
-static gboolean
-settings_service_is_running (NMRemoteSettings *settings, GError **error)
-{
- if (!_nm_object_get_nm_running (NM_OBJECT (settings))) {
- g_set_error_literal (error, NM_REMOTE_SETTINGS_ERROR,
- NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE,
- "NetworkManager is not running.");
- return FALSE;
- } else
- return TRUE;
-}
-
static void
add_connection_done (GObject *proxy, GAsyncResult *result, gpointer user_data)
{
@@ -470,31 +305,6 @@ add_connection_done (GObject *proxy, GAsyncResult *result, gpointer user_data)
*/
}
-/**
- * nm_remote_settings_add_connection_async:
- * @settings: the %NMRemoteSettings
- * @connection: the connection to add. Note that this object's settings will be
- * added, not the object itself
- * @save_to_disk: whether to immediately save the connection to disk
- * @cancellable: a #GCancellable, or %NULL
- * @callback: (scope async): callback to be called when the add operation completes
- * @user_data: (closure): caller-specific data passed to @callback
- *
- * Requests that the remote settings service add the given settings to a new
- * connection. If @save_to_disk is %TRUE, the connection is immediately written
- * to disk; otherwise it is initially only stored in memory, but may be saved
- * later by calling the connection's nm_remote_connection_commit_changes()
- * method.
- *
- * @connection is untouched by this function and only serves as a template of
- * the settings to add. The #NMRemoteConnection object that represents what
- * NetworkManager actually added is returned to @callback when the addition
- * operation is complete.
- *
- * Note that the #NMRemoteConnection returned in @callback may not contain
- * identical settings to @connection as NetworkManager may perform automatic
- * completion and/or normalization of connection properties.
- **/
void
nm_remote_settings_add_connection_async (NMRemoteSettings *settings,
NMConnection *connection,
@@ -506,18 +316,12 @@ nm_remote_settings_add_connection_async (NMRemoteSettings *settings,
NMRemoteSettingsPrivate *priv;
AddConnectionInfo *info;
GVariant *new_settings;
- GError *error = NULL;
g_return_if_fail (NM_IS_REMOTE_SETTINGS (settings));
g_return_if_fail (NM_IS_CONNECTION (connection));
priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
- if (!settings_service_is_running (settings, &error)) {
- g_simple_async_report_take_gerror_in_idle (G_OBJECT (settings), callback, user_data, error);
- return;
- }
-
info = g_slice_new0 (AddConnectionInfo);
info->self = settings;
info->simple = g_simple_async_result_new (G_OBJECT (settings), callback, user_data,
@@ -541,17 +345,6 @@ nm_remote_settings_add_connection_async (NMRemoteSettings *settings,
priv->add_list = g_slist_append (priv->add_list, info);
}
-/**
- * nm_remote_settings_add_connection_finish:
- * @settings: an #NMRemoteSettings
- * @result: the result passed to the #GAsyncReadyCallback
- * @error: location for a #GError, or %NULL
- *
- * Gets the result of a call to nm_remote_settings_add_connection_async().
- *
- * Returns: (transfer full): the new #NMRemoteConnection on success, %NULL on
- * failure, in which case @error will be set.
- **/
NMRemoteConnection *
nm_remote_settings_add_connection_finish (NMRemoteSettings *settings,
GAsyncResult *result,
@@ -568,30 +361,6 @@ nm_remote_settings_add_connection_finish (NMRemoteSettings *settings,
return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple));
}
-/**
- * nm_remote_settings_load_connections:
- * @settings: the %NMRemoteSettings
- * @filenames: %NULL-terminated array of filenames to load
- * @failures: (out) (transfer full): on return, a %NULL-terminated array of
- * filenames that failed to load
- * @cancellable: a #GCancellable, or %NULL
- * @error: return location for #GError
- *
- * Requests that the remote settings service load or reload the given files,
- * adding or updating the connections described within.
- *
- * The changes to the indicated files will not yet be reflected in
- * @settings's connections array when the function returns.
- *
- * If all of the indicated files were successfully loaded, the
- * function will return %TRUE, and @failures will be set to %NULL. If
- * NetworkManager tried to load the files, but some (or all) failed,
- * then @failures will be set to a %NULL-terminated array of the
- * filenames that failed to load.
- *
- * Returns: %TRUE if NetworkManager at least tried to load @filenames,
- * %FALSE if an error occurred (eg, permission denied).
- **/
gboolean
nm_remote_settings_load_connections (NMRemoteSettings *settings,
char **filenames,
@@ -607,9 +376,6 @@ nm_remote_settings_load_connections (NMRemoteSettings *settings,
priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
- if (!settings_service_is_running (settings, error))
- return FALSE;
-
if (!nmdbus_settings_call_load_connections_sync (priv->proxy,
(const char * const *) filenames,
&success,
@@ -639,19 +405,6 @@ load_connections_cb (GObject *proxy, GAsyncResult *result, gpointer user_data)
g_object_unref (simple);
}
-/**
- * nm_remote_settings_load_connections_async:
- * @settings: the %NMRemoteSettings
- * @filenames: %NULL-terminated array of filenames to load
- * @cancellable: a #GCancellable, or %NULL
- * @callback: (scope async): callback to be called when the operation completes
- * @user_data: (closure): caller-specific data passed to @callback
- *
- * Requests that the remote settings service asynchronously load or reload the
- * given files, adding or updating the connections described within.
- *
- * See nm_remote_settings_load_connections() for more details.
- **/
void
nm_remote_settings_load_connections_async (NMRemoteSettings *settings,
char **filenames,
@@ -661,7 +414,6 @@ nm_remote_settings_load_connections_async (NMRemoteSettings *settings,
{
NMRemoteSettingsPrivate *priv;
GSimpleAsyncResult *simple;
- GError *error = NULL;
g_return_if_fail (NM_IS_REMOTE_SETTINGS (settings));
g_return_if_fail (filenames != NULL);
@@ -671,33 +423,11 @@ nm_remote_settings_load_connections_async (NMRemoteSettings *settings,
simple = g_simple_async_result_new (G_OBJECT (settings), callback, user_data,
nm_remote_settings_load_connections_async);
- if (!settings_service_is_running (settings, &error)) {
- g_simple_async_result_take_error (simple, error);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- return;
- }
-
nmdbus_settings_call_load_connections (priv->proxy,
(const char * const *) filenames,
cancellable, load_connections_cb, simple);
}
-/**
- * nm_remote_settings_load_connections_finish:
- * @settings: the %NMRemoteSettings
- * @failures: (out) (transfer full): on return, a %NULL-terminated array of
- * filenames that failed to load
- * @result: the result passed to the #GAsyncReadyCallback
- * @error: location for a #GError, or %NULL
- *
- * Gets the result of an nm_remote_settings_load_connections_async() call.
-
- * See nm_remote_settings_load_connections() for more details.
- *
- * Returns: %TRUE if NetworkManager at least tried to load @filenames,
- * %FALSE if an error occurred (eg, permission denied).
- **/
gboolean
nm_remote_settings_load_connections_finish (NMRemoteSettings *settings,
char ***failures,
@@ -717,18 +447,6 @@ nm_remote_settings_load_connections_finish (NMRemoteSettings *settings,
}
}
-/**
- * nm_remote_settings_reload_connections:
- * @settings: the #NMRemoteSettings
- * @cancellable: a #GCancellable, or %NULL
- * @error: return location for #GError
- *
- * Requests that the remote settings service reload all connection
- * files from disk, adding, updating, and removing connections until
- * the in-memory state matches the on-disk state.
- *
- * Return value: %TRUE on success, %FALSE on failure
- **/
gboolean
nm_remote_settings_reload_connections (NMRemoteSettings *settings,
GCancellable *cancellable,
@@ -741,9 +459,6 @@ nm_remote_settings_reload_connections (NMRemoteSettings *settings,
priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
- if (!settings_service_is_running (settings, error))
- return FALSE;
-
if (!nmdbus_settings_call_reload_connections_sync (priv->proxy, &success,
cancellable, error))
success = FALSE;
@@ -769,17 +484,6 @@ reload_connections_cb (GObject *proxy, GAsyncResult *result, gpointer user_data)
g_object_unref (simple);
}
-/**
- * nm_remote_settings_reload_connections_async:
- * @settings: the #NMRemoteSettings
- * @cancellable: a #GCancellable, or %NULL
- * @callback: (scope async): callback to be called when the reload operation completes
- * @user_data: (closure): caller-specific data passed to @callback
- *
- * Requests that the remote settings service begin reloading all connection
- * files from disk, adding, updating, and removing connections until the
- * in-memory state matches the on-disk state.
- **/
void
nm_remote_settings_reload_connections_async (NMRemoteSettings *settings,
GCancellable *cancellable,
@@ -788,7 +492,6 @@ nm_remote_settings_reload_connections_async (NMRemoteSettings *settings,
{
NMRemoteSettingsPrivate *priv;
GSimpleAsyncResult *simple;
- GError *error = NULL;
g_return_if_fail (NM_IS_REMOTE_SETTINGS (settings));
@@ -797,27 +500,10 @@ nm_remote_settings_reload_connections_async (NMRemoteSettings *settings,
simple = g_simple_async_result_new (G_OBJECT (settings), callback, user_data,
nm_remote_settings_reload_connections_async);
- if (!settings_service_is_running (settings, &error)) {
- g_simple_async_result_take_error (simple, error);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- return;
- }
-
nmdbus_settings_call_reload_connections (priv->proxy, cancellable,
reload_connections_cb, simple);
}
-/**
- * nm_remote_settings_reload_connections_finish:
- * @settings: the #NMRemoteSettings
- * @result: the result passed to the #GAsyncReadyCallback
- * @error: return location for #GError
- *
- * Gets the result of an nm_remote_settings_reload_connections_async() call.
- *
- * Return value: %TRUE on success, %FALSE on failure
- **/
gboolean
nm_remote_settings_reload_connections_finish (NMRemoteSettings *settings,
GAsyncResult *result,
@@ -834,19 +520,6 @@ nm_remote_settings_reload_connections_finish (NMRemoteSettings *settings,
return g_simple_async_result_get_op_res_gboolean (simple);
}
-/**
- * nm_remote_settings_save_hostname:
- * @settings: the %NMRemoteSettings
- * @hostname: (allow-none): the new persistent hostname to set, or %NULL to
- * clear any existing persistent hostname
- * @cancellable: a #GCancellable, or %NULL
- * @error: return location for #GError
- *
- * Requests that the machine's persistent hostname be set to the specified value
- * or cleared.
- *
- * Returns: %TRUE if the request was successful, %FALSE if it failed
- **/
gboolean
nm_remote_settings_save_hostname (NMRemoteSettings *settings,
const char *hostname,
@@ -859,9 +532,6 @@ nm_remote_settings_save_hostname (NMRemoteSettings *settings,
priv = NM_REMOTE_SETTINGS_GET_PRIVATE (settings);
- if (!settings_service_is_running (settings, error))
- return FALSE;
-
return nmdbus_settings_call_save_hostname_sync (priv->proxy,
hostname ? hostname : "",
cancellable, error);
@@ -883,18 +553,6 @@ save_hostname_cb (GObject *proxy,
g_object_unref (simple);
}
-/**
- * nm_remote_settings_save_hostname_async:
- * @settings: the %NMRemoteSettings
- * @hostname: (allow-none): the new persistent hostname to set, or %NULL to
- * clear any existing persistent hostname
- * @cancellable: a #GCancellable, or %NULL
- * @callback: (scope async): callback to be called when the operation completes
- * @user_data: (closure): caller-specific data passed to @callback
- *
- * Requests that the machine's persistent hostname be set to the specified value
- * or cleared.
- **/
void
nm_remote_settings_save_hostname_async (NMRemoteSettings *settings,
const char *hostname,
@@ -904,7 +562,6 @@ nm_remote_settings_save_hostname_async (NMRemoteSettings *settings,
{
NMRemoteSettingsPrivate *priv;
GSimpleAsyncResult *simple;
- GError *error = NULL;
g_return_if_fail (NM_IS_REMOTE_SETTINGS (settings));
@@ -913,28 +570,11 @@ nm_remote_settings_save_hostname_async (NMRemoteSettings *settings,
simple = g_simple_async_result_new (G_OBJECT (settings), callback, user_data,
nm_remote_settings_save_hostname_async);
- if (!settings_service_is_running (settings, &error)) {
- g_simple_async_result_take_error (simple, error);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- return;
- }
-
nmdbus_settings_call_save_hostname (priv->proxy,
hostname ? hostname : "",
cancellable, save_hostname_cb, simple);
}
-/**
- * nm_remote_settings_save_hostname_finish:
- * @settings: the %NMRemoteSettings
- * @result: the result passed to the #GAsyncReadyCallback
- * @error: return location for #GError
- *
- * Gets the result of an nm_remote_settings_save_hostname_async() call.
- *
- * Returns: %TRUE if the request was successful, %FALSE if it failed
- **/
gboolean
nm_remote_settings_save_hostname_finish (NMRemoteSettings *settings,
GAsyncResult *result,
@@ -954,15 +594,12 @@ nm_remote_settings_save_hostname_finish (NMRemoteSettings *settings,
static void
updated_properties (GObject *object, GAsyncResult *result, gpointer user_data)
{
- NMRemoteSettings *self = NM_REMOTE_SETTINGS (user_data);
GError *error = NULL;
if (!_nm_object_reload_properties_finish (NM_OBJECT (object), result, &error)) {
g_warning ("%s: error reading NMRemoteSettings properties: %s", __func__, error->message);
g_error_free (error);
}
-
- g_object_notify (G_OBJECT (self), NM_REMOTE_SETTINGS_NM_RUNNING);
}
static void
@@ -999,7 +636,6 @@ nm_running_changed (GObject *object,
}
_nm_object_suppress_property_updates (NM_OBJECT (self), TRUE);
- g_object_notify (G_OBJECT (self), NM_REMOTE_SETTINGS_NM_RUNNING);
} else {
_nm_object_suppress_property_updates (NM_OBJECT (self), FALSE);
_nm_object_reload_properties_async (NM_OBJECT (self), updated_properties, self);
@@ -1010,70 +646,6 @@ nm_running_changed (GObject *object,
/****************************************************************/
-/**
- * nm_remote_settings_new:
- * @cancellable: a #GCancellable, or %NULL
- * @error: location for a #GError, or %NULL
- *
- * Creates a new object representing the remote settings service.
- *
- * Note that this will do blocking D-Bus calls to initialize the
- * settings object. You can use nm_remote_settings_new_async() if you
- * want to avoid that.
- *
- * Returns: the new remote settings object on success, or %NULL on failure
- **/
-NMRemoteSettings *
-nm_remote_settings_new (GCancellable *cancellable,
- GError **error)
-{
- return g_initable_new (NM_TYPE_REMOTE_SETTINGS, cancellable, error,
- NULL);
-}
-
-/**
- * nm_remote_settings_new_async:
- * @cancellable: a #GCancellable, or %NULL
- * @callback: callback to call when the settings object is created
- * @user_data: data for @callback
- *
- * Creates a new object representing the remote settings service and
- * begins asynchronously initializing it. @callback will be called
- * when it is done; use nm_remote_settings_new_finish() to get the
- * result.
- **/
-void
-nm_remote_settings_new_async (GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- g_async_initable_new_async (NM_TYPE_REMOTE_SETTINGS, G_PRIORITY_DEFAULT, cancellable,
- callback, user_data,
- NULL);
-}
-
-/**
- * nm_remote_settings_new_finish:
- * @result: a #GAsyncResult
- * @error: location for a #GError, or %NULL
- *
- * Gets the result of an nm_remote_settings_new_async() call.
- *
- * Returns: a new #NMRemoteSettings object, or %NULL on error
- **/
-NMRemoteSettings *
-nm_remote_settings_new_finish (GAsyncResult *result, GError **error)
-{
- GObject *source;
- NMRemoteSettings *settings;
-
- source = g_async_result_get_source_object (result);
- settings = (NMRemoteSettings *) g_async_initable_new_finish (G_ASYNC_INITABLE (source), result, error);
- g_object_unref (source);
-
- return settings;
-}
-
static void
nm_remote_settings_init (NMRemoteSettings *self)
{
@@ -1160,9 +732,6 @@ get_property (GObject *object, guint prop_id,
NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (object);
switch (prop_id) {
- case PROP_NM_RUNNING:
- g_value_set_boolean (value, _nm_object_get_nm_running (NM_OBJECT (object)));
- break;
case PROP_CONNECTIONS:
g_value_take_boxed (value, _nm_utils_copy_object_array (priv->visible_connections));
break;
@@ -1202,28 +771,6 @@ nm_remote_settings_class_init (NMRemoteSettingsClass *class)
/* Properties */
- /**
- * NMRemoteSettings:nm-running:
- *
- * Whether the NetworkManager settings service is running.
- */
- g_object_class_install_property
- (object_class, PROP_NM_RUNNING,
- g_param_spec_boolean (NM_REMOTE_SETTINGS_NM_RUNNING, "", "",
- FALSE,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * NMRemoteSettings:connections:
- *
- * The list of configured connections that are available to the user. (Note
- * that this differs from the underlying D-Bus property, which may also
- * contain the object paths of connections that the user does not have
- * permission to read the details of.)
- *
- * Element-type: NMRemoteConnection
- */
g_object_class_install_property
(object_class, PROP_CONNECTIONS,
g_param_spec_boxed (NM_REMOTE_SETTINGS_CONNECTIONS, "", "",
@@ -1231,12 +778,6 @@ nm_remote_settings_class_init (NMRemoteSettingsClass *class)
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
- /**
- * NMRemoteSettings:hostname:
- *
- * The machine hostname stored in persistent configuration. This can be
- * modified by calling nm_remote_settings_save_hostname().
- */
g_object_class_install_property
(object_class, PROP_HOSTNAME,
g_param_spec_string (NM_REMOTE_SETTINGS_HOSTNAME, "", "",
@@ -1244,11 +785,6 @@ nm_remote_settings_class_init (NMRemoteSettingsClass *class)
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
- /**
- * NMRemoteSettings:can-modify:
- *
- * If %TRUE, adding and modifying connections is supported.
- */
g_object_class_install_property
(object_class, PROP_CAN_MODIFY,
g_param_spec_boolean (NM_REMOTE_SETTINGS_CAN_MODIFY, "", "",
@@ -1257,13 +793,6 @@ nm_remote_settings_class_init (NMRemoteSettingsClass *class)
G_PARAM_STATIC_STRINGS));
/* Signals */
- /**
- * NMRemoteSettings::connection-added:
- * @settings: the settings object that received the signal
- * @connection: the new connection
- *
- * Notifies that a #NMConnection has been added.
- **/
signals[CONNECTION_ADDED] =
g_signal_new (NM_REMOTE_SETTINGS_CONNECTION_ADDED,
G_OBJECT_CLASS_TYPE (object_class),
@@ -1273,13 +802,6 @@ nm_remote_settings_class_init (NMRemoteSettingsClass *class)
G_TYPE_NONE, 1,
NM_TYPE_REMOTE_CONNECTION);
- /**
- * NMRemoteSettings::connection-removed:
- * @settings: the settings object that received the signal
- * @connection: the removed connection
- *
- * Notifies that a #NMConnection has been removed.
- **/
signals[CONNECTION_REMOVED] =
g_signal_new (NM_REMOTE_SETTINGS_CONNECTION_REMOVED,
G_OBJECT_CLASS_TYPE (object_class),
diff --git a/libnm/nm-remote-settings.h b/libnm/nm-remote-settings.h
index 1ada9a21dd..bed6a495e4 100644
--- a/libnm/nm-remote-settings.h
+++ b/libnm/nm-remote-settings.h
@@ -22,10 +22,6 @@
#ifndef __NM_REMOTE_SETTINGS_H__
#define __NM_REMOTE_SETTINGS_H__
-#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION)
-#error "Only <NetworkManager.h> can be included directly."
-#endif
-
#include <gio/gio.h>
#include <nm-object.h>
#include <nm-connection.h>
@@ -40,30 +36,6 @@ G_BEGIN_DECLS
#define NM_IS_REMOTE_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_REMOTE_SETTINGS))
#define NM_REMOTE_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_REMOTE_SETTINGS, NMRemoteSettingsClass))
-/**
- * NMRemoteSettingsError:
- * @NM_REMOTE_SETTINGS_ERROR_UNKNOWN: unknown or unclassified error
- * @NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED: the #NMRemoteConnection object
- * was removed before it was completely initialized
- * @NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE: the #NMRemoteConnection object
- * is not visible or otherwise unreadable
- * @NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE: NetworkManager is not running.
- *
- * Describes errors that may result from operations involving a #NMRemoteSettings.
- *
- **/
-typedef enum {
- NM_REMOTE_SETTINGS_ERROR_UNKNOWN = 0, /*< nick=UnknownError >*/
- NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED, /*< nick=ConnectionRemoved >*/
- NM_REMOTE_SETTINGS_ERROR_CONNECTION_UNAVAILABLE, /*< nick=ConnectionUnavailable >*/
- NM_REMOTE_SETTINGS_ERROR_SERVICE_UNAVAILABLE, /*< nick=ServiceUnavailable >*/
-} NMRemoteSettingsError;
-
-#define NM_REMOTE_SETTINGS_ERROR nm_remote_settings_error_quark ()
-GQuark nm_remote_settings_error_quark (void);
-
-
-#define NM_REMOTE_SETTINGS_NM_RUNNING "nm-running"
#define NM_REMOTE_SETTINGS_CONNECTIONS "connections"
#define NM_REMOTE_SETTINGS_HOSTNAME "hostname"
#define NM_REMOTE_SETTINGS_CAN_MODIFY "can-modify"
@@ -93,15 +65,6 @@ struct _NMRemoteSettingsClass {
GType nm_remote_settings_get_type (void);
-NMRemoteSettings *nm_remote_settings_new (GCancellable *cancellable,
- GError **error);
-
-void nm_remote_settings_new_async (GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-NMRemoteSettings *nm_remote_settings_new_finish (GAsyncResult *result,
- GError **error);
-
GSList *nm_remote_settings_list_connections (NMRemoteSettings *settings);
NMRemoteConnection *nm_remote_settings_get_connection_by_id (NMRemoteSettings *settings,
diff --git a/libnm/tests/test-remote-settings-client.c b/libnm/tests/test-remote-settings-client.c
index 1561ef9e42..ca0f03f6d4 100644
--- a/libnm/tests/test-remote-settings-client.c
+++ b/libnm/tests/test-remote-settings-client.c
@@ -30,7 +30,7 @@
#include "nm-test-utils.h"
static NMTestServiceInfo *sinfo;
-static NMRemoteSettings *settings = NULL;
+static NMClient *client = NULL;
GDBusConnection *bus = NULL;
NMRemoteConnection *remote = NULL;
@@ -44,14 +44,14 @@ add_cb (GObject *s,
gboolean *done = user_data;
GError *error = NULL;
- remote = nm_remote_settings_add_connection_finish (settings, result, &error);
+ remote = nm_client_add_connection_finish (client, result, &error);
g_assert_no_error (error);
*done = TRUE;
g_object_add_weak_pointer (G_OBJECT (remote), (void **) &remote);
- /* nm_remote_settings_add_connection_finish() adds a ref to @remote, but we
- * want the weak pointer to be cleared as soon as @settings drops its own ref.
+ /* nm_client_add_connection_finish() adds a ref to @remote, but we
+ * want the weak pointer to be cleared as soon as @client drops its own ref.
* So drop ours.
*/
g_object_unref (remote);
@@ -68,12 +68,12 @@ test_add_connection (void)
connection = nmtst_create_minimal_connection (TEST_CON_ID, NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
- nm_remote_settings_add_connection_async (settings,
- connection,
- TRUE,
- NULL,
- add_cb,
- &done);
+ nm_client_add_connection_async (client,
+ connection,
+ TRUE,
+ NULL,
+ add_cb,
+ &done);
start = time (NULL);
do {
@@ -113,7 +113,7 @@ visible_changed_cb (GObject *object, GParamSpec *pspec, gboolean *done)
}
static void
-connection_removed_cb (NMRemoteSettings *s, NMRemoteConnection *connection, gboolean *done)
+connection_removed_cb (NMClient *s, NMRemoteConnection *connection, gboolean *done)
{
if (connection == remote)
*done = TRUE;
@@ -143,7 +143,7 @@ test_make_invisible (void)
/* Listen for the remove event when the connection becomes invisible */
g_signal_connect (remote, "notify::" NM_REMOTE_CONNECTION_VISIBLE, G_CALLBACK (visible_changed_cb), &visible_changed);
- g_signal_connect (settings, "connection-removed", G_CALLBACK (connection_removed_cb), &connection_removed);
+ g_signal_connect (client, "connection-removed", G_CALLBACK (connection_removed_cb), &connection_removed);
path = g_strdup (nm_connection_get_path (NM_CONNECTION (remote)));
proxy = g_dbus_proxy_new_sync (bus,
@@ -156,7 +156,7 @@ test_make_invisible (void)
NULL);
g_assert (proxy != NULL);
- /* Bypass the NMRemoteSettings object so we can test it independently */
+ /* Bypass the NMClient object so we can test it independently */
g_dbus_proxy_call (proxy,
"SetVisible",
g_variant_new ("(b)", FALSE),
@@ -174,10 +174,10 @@ test_make_invisible (void)
g_assert (connection_removed == TRUE);
g_signal_handlers_disconnect_by_func (remote, G_CALLBACK (visible_changed_cb), &visible_changed);
- g_signal_handlers_disconnect_by_func (settings, G_CALLBACK (connection_removed_cb), &connection_removed);
+ g_signal_handlers_disconnect_by_func (client, G_CALLBACK (connection_removed_cb), &connection_removed);
- /* Ensure NMRemoteSettings no longer has the connection */
- list = nm_remote_settings_list_connections (settings);
+ /* Ensure NMClient no longer has the connection */
+ list = nm_client_list_connections (client);
for (iter = list; iter; iter = g_slist_next (iter)) {
NMConnection *candidate = NM_CONNECTION (iter->data);
@@ -199,7 +199,7 @@ test_make_invisible (void)
/*******************************************************************/
static void
-vis_new_connection_cb (NMRemoteSettings *foo,
+vis_new_connection_cb (NMClient *foo,
NMRemoteConnection *connection,
NMRemoteConnection **new)
{
@@ -219,7 +219,7 @@ test_make_visible (void)
g_assert (remote != NULL);
/* Wait for the new-connection signal when the connection is visible again */
- g_signal_connect (settings, NM_REMOTE_SETTINGS_CONNECTION_ADDED,
+ g_signal_connect (client, NM_CLIENT_CONNECTION_ADDED,
G_CALLBACK (vis_new_connection_cb), &new);
path = g_strdup (nm_connection_get_path (NM_CONNECTION (remote)));
@@ -233,7 +233,7 @@ test_make_visible (void)
NULL);
g_assert (proxy != NULL);
- /* Bypass the NMRemoteSettings object so we can test it independently */
+ /* Bypass the NMClient object so we can test it independently */
g_dbus_proxy_call (proxy,
"SetVisible",
g_variant_new ("(b)", TRUE),
@@ -252,10 +252,10 @@ test_make_visible (void)
g_assert (new);
g_assert (new == remote);
- g_signal_handlers_disconnect_by_func (settings, G_CALLBACK (vis_new_connection_cb), &new);
+ g_signal_handlers_disconnect_by_func (client, G_CALLBACK (vis_new_connection_cb), &new);
- /* Ensure NMRemoteSettings has the connection */
- list = nm_remote_settings_list_connections (settings);
+ /* Ensure NMClient has the connection */
+ list = nm_client_list_connections (client);
for (iter = list; iter; iter = g_slist_next (iter)) {
NMConnection *candidate = NM_CONNECTION (iter->data);
@@ -288,7 +288,7 @@ deleted_cb (GObject *proxy,
}
static void
-removed_cb (NMRemoteSettings *s, NMRemoteConnection *connection, gboolean *done)
+removed_cb (NMClient *s, NMRemoteConnection *connection, gboolean *done)
{
if (connection == remote)
*done = TRUE;
@@ -305,14 +305,14 @@ test_remove_connection (void)
char *path;
/* Find a connection to delete */
- list = nm_remote_settings_list_connections (settings);
+ list = nm_client_list_connections (client);
g_assert_cmpint (g_slist_length (list), >, 0);
connection = NM_REMOTE_CONNECTION (list->data);
g_assert (connection);
g_assert (remote == connection);
path = g_strdup (nm_connection_get_path (NM_CONNECTION (connection)));
- g_signal_connect (settings, "connection-removed", G_CALLBACK (removed_cb), &done);
+ g_signal_connect (client, "connection-removed", G_CALLBACK (removed_cb), &done);
proxy = g_dbus_proxy_new_sync (bus,
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
@@ -324,7 +324,7 @@ test_remove_connection (void)
NULL);
g_assert (proxy != NULL);
- /* Bypass the NMRemoteSettings object so we can test it independently */
+ /* Bypass the NMClient object so we can test it independently */
g_dbus_proxy_call (proxy,
"Delete",
NULL,
@@ -341,8 +341,8 @@ test_remove_connection (void)
g_assert (!remote);
- /* Ensure NMRemoteSettings no longer has the connection */
- list = nm_remote_settings_list_connections (settings);
+ /* Ensure NMClient no longer has the connection */
+ list = nm_client_list_connections (client);
for (iter = list; iter; iter = g_slist_next (iter)) {
NMConnection *candidate = NM_CONNECTION (iter->data);
@@ -367,8 +367,8 @@ add_remove_cb (GObject *s,
gboolean *done = user_data;
GError *error = NULL;
- connection = nm_remote_settings_add_connection_finish (settings, result, &error);
- g_assert_error (error, NM_REMOTE_SETTINGS_ERROR, NM_REMOTE_SETTINGS_ERROR_CONNECTION_REMOVED);
+ connection = nm_client_add_connection_finish (client, result, &error);
+ g_assert_error (error, NM_CLIENT_ERROR, NM_CLIENT_ERROR_CONNECTION_REMOVED);
g_assert (connection == NULL);
*done = TRUE;
@@ -396,12 +396,12 @@ test_add_remove_connection (void)
g_variant_unref (ret);
connection = nmtst_create_minimal_connection (TEST_ADD_REMOVE_ID, NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
- nm_remote_settings_add_connection_async (settings,
- connection,
- TRUE,
- NULL,
- add_remove_cb,
- &done);
+ nm_client_add_connection_async (client,
+ connection,
+ TRUE,
+ NULL,
+ add_remove_cb,
+ &done);
start = time (NULL);
do {
@@ -415,91 +415,6 @@ test_add_remove_connection (void)
/*******************************************************************/
-static GMainLoop *loop;
-
-static gboolean
-loop_quit (gpointer user_data)
-{
- g_main_loop_quit (loop);
- return G_SOURCE_REMOVE;
-}
-
-static void
-settings_nm_running_changed (GObject *client,
- GParamSpec *pspec,
- gpointer user_data)
-{
- int *running_changed = user_data;
-
- (*running_changed)++;
- g_main_loop_quit (loop);
-}
-
-static void
-test_nm_running (void)
-{
- NMRemoteSettings *settings2;
- guint quit_id;
- int running_changed = 0;
- gboolean running;
- GError *error = NULL;
-
- loop = g_main_loop_new (NULL, FALSE);
-
- g_object_get (G_OBJECT (settings),
- NM_REMOTE_SETTINGS_NM_RUNNING, &running,
- NULL);
- g_assert (running == TRUE);
-
- /* Now kill the test service. */
- nm_test_service_cleanup (sinfo);
-
- settings2 = nm_remote_settings_new (NULL, &error);
- g_assert_no_error (error);
- g_assert (settings2 != NULL);
-
- /* settings2 should know that NM is running, but the previously-created
- * settings hasn't gotten the news yet.
- */
- g_object_get (G_OBJECT (settings2),
- NM_REMOTE_SETTINGS_NM_RUNNING, &running,
- NULL);
- g_assert (running == FALSE);
- g_object_get (G_OBJECT (settings),
- NM_REMOTE_SETTINGS_NM_RUNNING, &running,
- NULL);
- g_assert (running == TRUE);
-
- g_signal_connect (settings, "notify::" NM_REMOTE_SETTINGS_NM_RUNNING,
- G_CALLBACK (settings_nm_running_changed), &running_changed);
- quit_id = g_timeout_add_seconds (5, loop_quit, loop);
- g_main_loop_run (loop);
- g_assert_cmpint (running_changed, ==, 1);
- g_source_remove (quit_id);
-
- g_object_get (G_OBJECT (settings2),
- NM_REMOTE_SETTINGS_NM_RUNNING, &running,
- NULL);
- g_assert (running == FALSE);
-
- /* Now restart it */
- sinfo = nm_test_service_init ();
-
- quit_id = g_timeout_add_seconds (5, loop_quit, loop);
- g_main_loop_run (loop);
- g_assert_cmpint (running_changed, ==, 2);
- g_source_remove (quit_id);
-
- g_object_get (G_OBJECT (settings2),
- NM_REMOTE_SETTINGS_NM_RUNNING, &running,
- NULL);
- g_assert (running == TRUE);
-
- g_object_unref (settings2);
-}
-
-/*******************************************************************/
-
int
main (int argc, char **argv)
{
@@ -519,24 +434,23 @@ main (int argc, char **argv)
sinfo = nm_test_service_init ();
- settings = nm_remote_settings_new (NULL, &error);
+ client = nm_client_new (NULL, &error);
g_assert_no_error (error);
- g_assert (settings != NULL);
+ g_assert (client != NULL);
/* FIXME: these tests assume that they get run in order, but g_test_run()
* does not actually guarantee that!
*/
- g_test_add_func ("/remote_settings/add_connection", test_add_connection);
- g_test_add_func ("/remote_settings/make_invisible", test_make_invisible);
- g_test_add_func ("/remote_settings/make_visible", test_make_visible);
- g_test_add_func ("/remote_settings/remove_connection", test_remove_connection);
- g_test_add_func ("/remote_settings/add_remove_connection", test_add_remove_connection);
- g_test_add_func ("/remote_settings/nm_running", test_nm_running);
+ g_test_add_func ("/client/add_connection", test_add_connection);
+ g_test_add_func ("/client/make_invisible", test_make_invisible);
+ g_test_add_func ("/client/make_visible", test_make_visible);
+ g_test_add_func ("/client/remove_connection", test_remove_connection);
+ g_test_add_func ("/client/add_remove_connection", test_add_remove_connection);
ret = g_test_run ();
nm_test_service_cleanup (sinfo);
- g_object_unref (settings);
+ g_object_unref (client);
g_object_unref (bus);
return ret;
diff --git a/libnm/tests/test-secret-agent.c b/libnm/tests/test-secret-agent.c
index c4eafd7a40..de49893c75 100644
--- a/libnm/tests/test-secret-agent.c
+++ b/libnm/tests/test-secret-agent.c
@@ -182,7 +182,6 @@ test_secret_agent_new (void)
typedef struct {
NMTestServiceInfo *sinfo;
NMClient *client;
- NMRemoteSettings *settings;
NMSecretAgent *agent;
NMDevice *device;
@@ -227,7 +226,7 @@ connection_added_cb (GObject *s,
NMRemoteConnection *connection;
GError *error = NULL;
- connection = nm_remote_settings_add_connection_finish (sadata->settings, result, &error);
+ connection = nm_client_add_connection_finish (sadata->client, result, &error);
g_assert_no_error (error);
g_assert_cmpstr (nm_connection_get_id (NM_CONNECTION (connection)), ==, sadata->con_id);
@@ -268,8 +267,6 @@ test_setup (TestSecretAgentData *sadata, gconstpointer test_data)
sadata->sinfo = nm_test_service_init ();
sadata->client = nm_client_new (NULL, &error);
g_assert_no_error (error);
- sadata->settings = nm_remote_settings_new (NULL, &error);
- g_assert_no_error (error);
sadata->loop = g_main_loop_new (NULL, FALSE);
sadata->timeout_id = g_timeout_add_seconds (5, timeout_assert, NULL);
@@ -316,12 +313,12 @@ test_setup (TestSecretAgentData *sadata, gconstpointer test_data)
NULL);
nm_connection_add_setting (connection, s_wsec);
- nm_remote_settings_add_connection_async (sadata->settings,
- connection,
- TRUE,
- NULL,
- connection_added_cb,
- sadata);
+ nm_client_add_connection_async (sadata->client,
+ connection,
+ TRUE,
+ NULL,
+ connection_added_cb,
+ sadata);
g_object_unref (connection);
g_main_loop_run (sadata->loop);
@@ -358,7 +355,6 @@ test_cleanup (TestSecretAgentData *sadata, gconstpointer test_data)
g_object_unref (sadata->connection);
g_object_unref (sadata->client);
- g_object_unref (sadata->settings);
ret = g_dbus_proxy_call_sync (sadata->sinfo->proxy,
"RemoveDevice",