/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2007 - 2008 Novell, Inc.
* Copyright (C) 2007 - 2014 Red Hat, Inc.
*/
#include "nm-default.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.
**/
/*****************************************************************************/
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);)
/*****************************************************************************/
static void
nm_simple_connection_init(NMSimpleConnection *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)
{
#if NM_MORE_ASSERTS
g_signal_handlers_disconnect_by_data(object,
(gpointer) &_nmtst_connection_unchanging_user_data);
#endif
nm_connection_clear_secrets(NM_CONNECTION(object));
G_OBJECT_CLASS(nm_simple_connection_parent_class)->dispose(object);
}
static void
nm_simple_connection_class_init(NMSimpleConnectionClass *simple_class)
{
GObjectClass *object_class = G_OBJECT_CLASS(simple_class);
object_class->dispose = dispose;
}
static void
nm_simple_connection_interface_init(NMConnectionInterface *iface)
{}