1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
2 | |
3 | #ifndef __NM_KEYFILE_H__ |
4 | #define __NM_KEYFILE_H__ |
5 | |
6 | #if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION) |
7 | #error "Only <NetworkManager.h> can be included directly." |
8 | #endif |
9 | |
10 | #include "nm-core-types.h" |
11 | |
12 | G_BEGIN_DECLS |
13 | |
14 | /** |
15 | * NMKeyfileHandlerFlags: |
16 | * @NM_KEYFILE_HANDLER_FLAGS_NONE: no flags set. |
17 | * |
18 | * Flags for customizing nm_keyfile_read() and nm_keyfile_write(). |
19 | * |
20 | * Currently no flags are implemented. |
21 | * |
22 | * Since: 1.30 |
23 | */ |
24 | typedef enum { /*< flags >*/ |
25 | NM_KEYFILE_HANDLER_FLAGS_NONE = 0, |
26 | } NMKeyfileHandlerFlags; |
27 | |
28 | /** |
29 | * NMKeyfileHandlerType: |
30 | * @NM_KEYFILE_HANDLER_TYPE_WARN: a warning. |
31 | * @NM_KEYFILE_HANDLER_TYPE_WRITE_CERT: for handling certificates while writing |
32 | * a connection to keyfile. |
33 | * |
34 | * The type of the callback for %NMKeyfileReadHandler and %NMKeyfileWriteHandler. |
35 | * Depending on the type, you can interpret %NMKeyfileHandlerData. |
36 | * |
37 | * Since: 1.30 |
38 | */ |
39 | typedef enum { |
40 | NM_KEYFILE_HANDLER_TYPE_WARN = 1, |
41 | NM_KEYFILE_HANDLER_TYPE_WRITE_CERT = 2, |
42 | } NMKeyfileHandlerType; |
43 | |
44 | /** |
45 | * NMKeyfileHandlerData: |
46 | * |
47 | * Opaque type with parameters for the callback. The actual content |
48 | * depends on the %NMKeyfileHandlerType. |
49 | * |
50 | * Since: 1.30 |
51 | */ |
52 | typedef struct _NMKeyfileHandlerData NMKeyfileHandlerData; |
53 | |
54 | /** |
55 | * NMKeyfileReadHandler: |
56 | * @keyfile: the #GKeyFile that is currently read |
57 | * @connection: the #NMConnection that is being constructed. |
58 | * @handler_type: the %NMKeyfileHandlerType that indicates which type |
59 | * the request is. |
60 | * @handler_data: the #NMKeyfileHandlerData. What you can do with it |
61 | * depends on the @handler_type. |
62 | * @user_data: the user-data argument to nm_keyfile_read(). |
63 | * |
64 | * Hook to nm_keyfile_read(). |
65 | * |
66 | * The callee may abort the reading by setting an error via nm_keyfile_handler_data_fail_with_error(). |
67 | * |
68 | * Returns: the callee should return TRUE, if the event was handled and/or recognized. |
69 | * Otherwise, a default action will be performed that depends on the @type. |
70 | * For %NM_KEYFILE_HANDLER_TYPE_WARN type, the default action is doing nothing. |
71 | * |
72 | * Since: 1.30 |
73 | */ |
74 | typedef gboolean (*NMKeyfileReadHandler)(GKeyFile *keyfile, |
75 | NMConnection *connection, |
76 | NMKeyfileHandlerType handler_type, |
77 | NMKeyfileHandlerData *handler_data, |
78 | void *user_data); |
79 | |
80 | NM_AVAILABLE_IN_1_30 |
81 | NMConnection *nm_keyfile_read(GKeyFile *keyfile, |
82 | const char *base_dir, |
83 | NMKeyfileHandlerFlags handler_flags, |
84 | NMKeyfileReadHandler handler, |
85 | void *user_data, |
86 | GError **error); |
87 | |
88 | /** |
89 | * NMKeyfileWriteHandler: |
90 | * @connection: the #NMConnection that is currently written. |
91 | * @keyfile: the #GKeyFile that is currently constructed. |
92 | * @handler_type: the %NMKeyfileHandlerType that indicates which type |
93 | * the request is. |
94 | * @handler_data: the #NMKeyfileHandlerData. What you can do with it |
95 | * depends on the @handler_type. |
96 | * @user_data: the user-data argument to nm_keyfile_read(). |
97 | * |
98 | * This is a hook to tweak the serialization. |
99 | * |
100 | * Handler for certain properties or events that are not entirely contained |
101 | * within the keyfile or that might be serialized differently. The @type and |
102 | * @handler_data arguments tell which kind of argument we have at hand. |
103 | * |
104 | * Currently only the type %NM_KEYFILE_HANDLER_TYPE_WRITE_CERT is supported. |
105 | * |
106 | * The callee may call nm_keyfile_handler_data_fail_with_error() to abort |
107 | * the writing with error. |
108 | * |
109 | * Returns: the callee should return %TRUE if the event was handled. If the |
110 | * event was unhandled, a default action will be performed that depends on |
111 | * the @handler_type. |
112 | * |
113 | * Since: 1.30 |
114 | */ |
115 | typedef gboolean (*NMKeyfileWriteHandler)(NMConnection *connection, |
116 | GKeyFile *keyfile, |
117 | NMKeyfileHandlerType handler_type, |
118 | NMKeyfileHandlerData *handler_data, |
119 | void *user_data); |
120 | |
121 | NM_AVAILABLE_IN_1_30 |
122 | GKeyFile *nm_keyfile_write(NMConnection *connection, |
123 | NMKeyfileHandlerFlags handler_flags, |
124 | NMKeyfileWriteHandler handler, |
125 | void *user_data, |
126 | GError **error); |
127 | |
128 | /*****************************************************************************/ |
129 | |
130 | NM_AVAILABLE_IN_1_30 |
131 | void nm_keyfile_handler_data_fail_with_error(NMKeyfileHandlerData *handler_data, GError *src); |
132 | |
133 | NM_AVAILABLE_IN_1_30 |
134 | void nm_keyfile_handler_data_get_context(const NMKeyfileHandlerData *handler_data, |
135 | const char **out_kf_group_name, |
136 | const char **out_kf_key_name, |
137 | NMSetting **out_cur_setting, |
138 | const char **out_cur_property_name); |
139 | |
140 | /** |
141 | * NMKeyfileWarnSeverity: |
142 | * @NM_KEYFILE_WARN_SEVERITY_DEBUG: debug message |
143 | * @NM_KEYFILE_WARN_SEVERITY_INFO: info message |
144 | * @NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE: info message about a missing file |
145 | * @NM_KEYFILE_WARN_SEVERITY_WARN: a warning message |
146 | * |
147 | * The severity level of %NM_KEYFILE_HANDLER_TYPE_WARN events. |
148 | * |
149 | * Since: 1.30 |
150 | */ |
151 | typedef enum { |
152 | NM_KEYFILE_WARN_SEVERITY_DEBUG = 1000, |
153 | NM_KEYFILE_WARN_SEVERITY_INFO = 2000, |
154 | NM_KEYFILE_WARN_SEVERITY_INFO_MISSING_FILE = 2901, |
155 | NM_KEYFILE_WARN_SEVERITY_WARN = 3000, |
156 | } NMKeyfileWarnSeverity; |
157 | |
158 | NM_AVAILABLE_IN_1_30 |
159 | void nm_keyfile_handler_data_warn_get(const NMKeyfileHandlerData *handler_data, |
160 | const char **out_message, |
161 | NMKeyfileWarnSeverity *out_severity); |
162 | |
163 | G_END_DECLS |
164 | |
165 | #endif /* __NM_KEYFILE_H__ */ |
166 | |