NetworkManager/src/libnm-core-public/nm-keyfile.h
Thomas Haller fdf9614ba7
build: move "libnm-core/" to "src/" and split it
"libnm-core/" is rather complicated. It provides a static library that
is linked into libnm.so and NetworkManager. It also contains public
headers (like "nm-setting.h") which are part of public libnm API.

Then we have helper libraries ("libnm-core/nm-libnm-core-*/") which
only rely on public API of libnm-core, but are themself static
libraries that can be used by anybody who uses libnm-core. And
"libnm-core/nm-libnm-core-intern" is used by libnm-core itself.

Move "libnm-core/" to "src/". But also split it in different
directories so that they have a clearer purpose.

The goal is to have a flat directory hierarchy. The "src/libnm-core*/"
directories correspond to the different modules (static libraries and set
of headers that we have). We have different kinds of such modules because
of how we combine various code together. The directory layout now reflects
this.
2021-02-18 19:46:51 +01:00

165 lines
6.1 KiB
C

/* SPDX-License-Identifier: LGPL-2.1-or-later */
#ifndef __NM_KEYFILE_H__
#define __NM_KEYFILE_H__
#if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION)
#error "Only <NetworkManager.h> can be included directly."
#endif
#include "nm-core-types.h"
G_BEGIN_DECLS
/**
* NMKeyfileHandlerFlags:
* @NM_KEYFILE_HANDLER_FLAGS_NONE: no flags set.
*
* Flags for customizing nm_keyfile_read() and nm_keyfile_write().
*
* Currently no flags are implemented.
*
* Since: 1.30
*/
typedef enum { /*< flags >*/
NM_KEYFILE_HANDLER_FLAGS_NONE = 0,
} NMKeyfileHandlerFlags;
/**
* NMKeyfileHandlerType:
* @NM_KEYFILE_HANDLER_TYPE_WARN: a warning.
* @NM_KEYFILE_HANDLER_TYPE_WRITE_CERT: for handling certificates while writing
* a connection to keyfile.
*
* The type of the callback for %NMKeyfileReadHandler and %NMKeyfileWriteHandler.
* Depending on the type, you can interpret %NMKeyfileHandlerData.
*
* Since: 1.30
*/
typedef enum {
NM_KEYFILE_HANDLER_TYPE_WARN = 1,
NM_KEYFILE_HANDLER_TYPE_WRITE_CERT = 2,
} NMKeyfileHandlerType;
/**
* NMKeyfileHandlerData:
*
* Opaque type with parameters for the callback. The actual content
* depends on the %NMKeyfileHandlerType.
*
* Since: 1.30
*/
typedef struct _NMKeyfileHandlerData NMKeyfileHandlerData;
/**
* NMKeyfileReadHandler:
* @keyfile: the #GKeyFile that is currently read
* @connection: the #NMConnection that is being constructed.
* @handler_type: the %NMKeyfileHandlerType that indicates which type
* the request is.
* @handler_data: the #NMKeyfileHandlerData. What you can do with it
* depends on the @handler_type.
* @user_data: the user-data argument to nm_keyfile_read().
*
* Hook to nm_keyfile_read().
*
* The callee may abort the reading by setting an error via nm_keyfile_handler_data_fail_with_error().
*
* Returns: the callee should return TRUE, if the event was handled and/or recognized.
* Otherwise, a default action will be performed that depends on the @type.
* For %NM_KEYFILE_HANDLER_TYPE_WARN type, the default action is doing nothing.
*
* Since: 1.30
*/
typedef gboolean (*NMKeyfileReadHandler)(GKeyFile * keyfile,
NMConnection * connection,
NMKeyfileHandlerType handler_type,
NMKeyfileHandlerData *handler_data,
void * user_data);
NM_AVAILABLE_IN_1_30
NMConnection *nm_keyfile_read(GKeyFile * keyfile,
const char * base_dir,
NMKeyfileHandlerFlags handler_flags,
NMKeyfileReadHandler handler,
void * user_data,
GError ** error);
/**
* NMKeyfileWriteHandler:
* @connection: the #NMConnection that is currently written.
* @keyfile: the #GKeyFile that is currently constructed.
* @handler_type: the %NMKeyfileHandlerType that indicates which type
* the request is.
* @handler_data: the #NMKeyfileHandlerData. What you can do with it
* depends on the @handler_type.
* @user_data: the user-data argument to nm_keyfile_read().
*
* This is a hook to tweak the serialization.
*
* Handler for certain properties or events that are not entirely contained
* within the keyfile or that might be serialized differently. The @type and
* @handler_data arguments tell which kind of argument we have at hand.
*
* Currently only the type %NM_KEYFILE_HANDLER_TYPE_WRITE_CERT is supported.
*
* The callee may call nm_keyfile_handler_data_fail_with_error() to abort
* the writing with error.
*
* Returns: the callee should return %TRUE if the event was handled. If the
* event was unhandled, a default action will be performed that depends on
* the @handler_type.
*
* Since: 1.30
*/
typedef gboolean (*NMKeyfileWriteHandler)(NMConnection * connection,
GKeyFile * keyfile,
NMKeyfileHandlerType handler_type,
NMKeyfileHandlerData *handler_data,
void * user_data);
NM_AVAILABLE_IN_1_30
GKeyFile *nm_keyfile_write(NMConnection * connection,
NMKeyfileHandlerFlags handler_flags,
NMKeyfileWriteHandler handler,
void * user_data,
GError ** error);
/*****************************************************************************/
NM_AVAILABLE_IN_1_30
void nm_keyfile_handler_data_fail_with_error(NMKeyfileHandlerData *handler_data, GError *src);
NM_AVAILABLE_IN_1_30
void nm_keyfile_handler_data_get_context(const NMKeyfileHandlerData *handler_data,
const char ** out_kf_group_name,
const char ** out_kf_key_name,
NMSetting ** out_cur_setting,
const char ** out_cur_property_name);
/**
* NMKeyfileWarnSeverity:
* @NM_KEYFILE_WARN_SEVERITY_DEBUG: debug message
* @NM_KEYFILE_WARN_SEVERITY_INFO: info message
* @NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE: info message about a missing file
* @NM_KEYFILE_WARN_SEVERITY_WARN: a warning message
*
* The severity level of %NM_KEYFILE_HANDLER_TYPE_WARN events.
*
* Since: 1.30
*/
typedef enum {
NM_KEYFILE_WARN_SEVERITY_DEBUG = 1000,
NM_KEYFILE_WARN_SEVERITY_INFO = 2000,
NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE = 2901,
NM_KEYFILE_WARN_SEVERITY_WARN = 3000,
} NMKeyfileWarnSeverity;
NM_AVAILABLE_IN_1_30
void nm_keyfile_handler_data_warn_get(const NMKeyfileHandlerData *handler_data,
const char ** out_message,
NMKeyfileWarnSeverity * out_severity);
G_END_DECLS
#endif /* __NM_KEYFILE_H__ */