diff options
Diffstat (limited to 'src/libnm-core-impl/nm-simple-connection.c')
| -rw-r--r-- | src/libnm-core-impl/nm-simple-connection.c | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/src/libnm-core-impl/nm-simple-connection.c b/src/libnm-core-impl/nm-simple-connection.c new file mode 100644 index 00000000..6b5b1184 --- /dev/null +++ b/src/libnm-core-impl/nm-simple-connection.c @@ -0,0 +1,189 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2007 - 2008 Novell, Inc. + * Copyright (C) 2007 - 2014 Red Hat, Inc. + */ + +#include "libnm-core-impl/nm-default-libnm-core.h" + +#include "nm-simple-connection.h" + +#include "nm-setting-private.h" + +/** + * SECTION:nm-simple-connection + * @short_description: An unmanaged connection + * + * An #NMSimpleConnection does not directly represent a D-Bus-exported connection, + * but might be used in the process of creating a new one. + **/ + +/*****************************************************************************/ + +GTypeClass *_nm_simple_connection_class_instance = NULL; +int _nm_simple_connection_private_offset; + +/*****************************************************************************/ + +/** + * NMSimpleConnection: + */ +struct _NMSimpleConnection { + GObject parent; + /* In the past, this struct was public API. Preserve ABI! */ +}; + +struct _NMSimpleConnectionClass { + GObjectClass parent; + /* In the past, this struct was public API. Preserve ABI! */ + gpointer padding[4]; +}; + +static void nm_simple_connection_interface_init(NMConnectionInterface *iface); + +G_DEFINE_TYPE_WITH_CODE(NMSimpleConnection, + nm_simple_connection, + G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE(NM_TYPE_CONNECTION, + nm_simple_connection_interface_init);) + +#define _GET_PRIVATE(self) \ + G_TYPE_INSTANCE_GET_PRIVATE(self, NM_TYPE_SIMPLE_CONNECTION, NMConnectionPrivate) + +/*****************************************************************************/ + +static void +nm_simple_connection_init(NMSimpleConnection *self) +{ + NMConnectionPrivate *priv; + + priv = _GET_PRIVATE(self); + + priv->self = (NMConnection *) self; +} + +/** + * nm_simple_connection_new: + * + * Creates a new #NMSimpleConnection object with no #NMSetting objects. + * + * Returns: (transfer full): the new empty #NMConnection object + **/ +NMConnection * +nm_simple_connection_new(void) +{ + return g_object_new(NM_TYPE_SIMPLE_CONNECTION, NULL); +} + +/** + * _nm_simple_connection_new_from_dbus: + * @dict: a #GVariant of type %NM_VARIANT_TYPE_CONNECTION describing the connection + * @error: on unsuccessful return, an error + * + * Creates a new #NMSimpleConnection from a hash table describing the + * connection. See nm_connection_to_dbus() for a description of the expected + * hash table. + * + * Returns: (transfer full): the new #NMSimpleConnection object, populated with + * settings created from the values in the hash table, or %NULL if there was + * an error. + **/ +NMConnection * +_nm_simple_connection_new_from_dbus(GVariant *dict, NMSettingParseFlags parse_flags, GError **error) +{ + NMConnection *connection; + + g_return_val_if_fail(dict != NULL, NULL); + g_return_val_if_fail(g_variant_is_of_type(dict, NM_VARIANT_TYPE_CONNECTION), NULL); + g_return_val_if_fail(!NM_FLAGS_ANY(parse_flags, ~NM_SETTING_PARSE_FLAGS_ALL), NULL); + g_return_val_if_fail( + !NM_FLAGS_ALL(parse_flags, + NM_SETTING_PARSE_FLAGS_STRICT | NM_SETTING_PARSE_FLAGS_BEST_EFFORT), + NULL); + + connection = nm_simple_connection_new(); + if (!_nm_connection_replace_settings(connection, dict, parse_flags, error)) + g_clear_object(&connection); + return connection; +} + +/** + * nm_simple_connection_new_from_dbus: + * @dict: a #GVariant of type %NM_VARIANT_TYPE_CONNECTION describing the connection + * @error: on unsuccessful return, an error + * + * Creates a new #NMSimpleConnection from a hash table describing the + * connection and normalize the connection. See nm_connection_to_dbus() for a + * description of the expected hash table. + * + * Returns: (transfer full): the new #NMSimpleConnection object, populated with + * settings created from the values in the hash table, or %NULL if the + * connection failed to normalize. + **/ +NMConnection * +nm_simple_connection_new_from_dbus(GVariant *dict, GError **error) +{ + return _nm_simple_connection_new_from_dbus(dict, NM_SETTING_PARSE_FLAGS_NORMALIZE, error); +} + +/** + * nm_simple_connection_new_clone: + * @connection: the #NMConnection to clone + * + * Clones an #NMConnection as an #NMSimpleConnection. + * + * Returns: (transfer full): a new #NMConnection containing the same settings + * and properties as the source #NMConnection + **/ +NMConnection * +nm_simple_connection_new_clone(NMConnection *connection) +{ + NMConnection *clone; + const char * path; + + g_return_val_if_fail(NM_IS_CONNECTION(connection), NULL); + + clone = nm_simple_connection_new(); + + path = nm_connection_get_path(connection); + if (path) + nm_connection_set_path(clone, path); + + nm_connection_replace_settings_from_connection(clone, connection); + + return clone; +} + +static void +dispose(GObject *object) +{ + NMConnection *connection = NM_CONNECTION(object); + +#if NM_MORE_ASSERTS + g_signal_handlers_disconnect_by_data(object, + (gpointer) &_nmtst_connection_unchanging_user_data); +#endif + + nm_connection_clear_secrets(connection); + + _nm_connection_private_clear(_GET_PRIVATE(connection)); + + G_OBJECT_CLASS(nm_simple_connection_parent_class)->dispose(object); +} + +static void +nm_simple_connection_class_init(NMSimpleConnectionClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + g_type_class_add_private(klass, sizeof(NMConnectionPrivate)); + + object_class->dispose = dispose; + + _nm_simple_connection_private_offset = g_type_class_get_instance_private_offset(klass); + _nm_simple_connection_class_instance = (GTypeClass *) klass; +} + +static void +nm_simple_connection_interface_init(NMConnectionInterface *iface) +{} |