1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
2 | /* |
3 | * Copyright (C) 2008 Novell, Inc. |
4 | * Copyright (C) 2008 - 2015 Red Hat, Inc. |
5 | */ |
6 | |
7 | #ifndef __NM_VPN_EDITOR_PLUGIN_H__ |
8 | #define __NM_VPN_EDITOR_PLUGIN_H__ |
9 | |
10 | #if !defined(__NETWORKMANAGER_H_INSIDE__) && !defined(NETWORKMANAGER_COMPILATION) |
11 | #error "Only <NetworkManager.h> can be included directly." |
12 | #endif |
13 | |
14 | #include <glib.h> |
15 | #include <glib-object.h> |
16 | |
17 | #include "nm-connection.h" |
18 | #include "nm-utils.h" |
19 | |
20 | G_BEGIN_DECLS |
21 | |
22 | typedef struct _NMVpnPluginInfo NMVpnPluginInfo; |
23 | |
24 | typedef struct _NMVpnEditorPlugin NMVpnEditorPlugin; |
25 | typedef struct _NMVpnEditor NMVpnEditor; |
26 | |
27 | /* Plugin's factory function that returns a GObject that implements |
28 | * NMVpnEditorPlugin. |
29 | */ |
30 | #ifndef __GI_SCANNER__ |
31 | typedef NMVpnEditorPlugin *(*NMVpnEditorPluginFactory)(GError **error); |
32 | NMVpnEditorPlugin *nm_vpn_editor_plugin_factory(GError **error); |
33 | #endif |
34 | |
35 | /*****************************************************************************/ |
36 | /* Editor plugin interface */ |
37 | /*****************************************************************************/ |
38 | |
39 | #define NM_TYPE_VPN_EDITOR_PLUGIN (nm_vpn_editor_plugin_get_type()) |
40 | #define NM_VPN_EDITOR_PLUGIN(obj) \ |
41 | (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_VPN_EDITOR_PLUGIN, NMVpnEditorPlugin)) |
42 | #define NM_IS_VPN_EDITOR_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_VPN_EDITOR_PLUGIN)) |
43 | #define NM_VPN_EDITOR_PLUGIN_GET_INTERFACE(obj) \ |
44 | (G_TYPE_INSTANCE_GET_INTERFACE((obj), NM_TYPE_VPN_EDITOR_PLUGIN, NMVpnEditorPluginInterface)) |
45 | |
46 | /** |
47 | * NMVpnEditorPluginCapability: |
48 | * @NM_VPN_EDITOR_PLUGIN_CAPABILITY_NONE: unknown or no capability |
49 | * @NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT: the plugin can import new connections |
50 | * @NM_VPN_EDITOR_PLUGIN_CAPABILITY_EXPORT: the plugin can export connections |
51 | * @NM_VPN_EDITOR_PLUGIN_CAPABILITY_IPV6: the plugin supports IPv6 addressing |
52 | * |
53 | * Flags that indicate certain capabilities of the plugin to editor programs. |
54 | **/ |
55 | typedef enum /*< flags >*/ { |
56 | NM_VPN_EDITOR_PLUGIN_CAPABILITY_NONE = 0x00, |
57 | NM_VPN_EDITOR_PLUGIN_CAPABILITY_IMPORT = 0x01, |
58 | NM_VPN_EDITOR_PLUGIN_CAPABILITY_EXPORT = 0x02, |
59 | NM_VPN_EDITOR_PLUGIN_CAPABILITY_IPV6 = 0x04 |
60 | } NMVpnEditorPluginCapability; |
61 | |
62 | /* Short display name of the VPN plugin */ |
63 | #define NM_VPN_EDITOR_PLUGIN_NAME "name" |
64 | |
65 | /* Longer description of the VPN plugin */ |
66 | #define NM_VPN_EDITOR_PLUGIN_DESCRIPTION "description" |
67 | |
68 | /* D-Bus service name of the plugin's VPN service */ |
69 | #define NM_VPN_EDITOR_PLUGIN_SERVICE "service" |
70 | |
71 | typedef struct _NMVpnEditorPluginVT NMVpnEditorPluginVT; |
72 | |
73 | /** |
74 | * NMVpnEditorPluginInterface: |
75 | * @g_iface: the parent interface |
76 | * @get_editor: returns an #NMVpnEditor, pre-filled with values from @connection |
77 | * if non-%NULL. |
78 | * @get_capabilities: returns a bitmask of capabilities. |
79 | * @import_from_file: Try to import a connection from the specified path. On |
80 | * success, return a partial #NMConnection object. On error, return %NULL and |
81 | * set @error with additional information. Note that @error can be %NULL, in |
82 | * which case no additional error information should be provided. |
83 | * @export_to_file: Export the given connection to the specified path. Return |
84 | * %TRUE on success. On error, return %FALSE and set @error with additional |
85 | * error information. Note that @error can be %NULL, in which case no |
86 | * additional error information should be provided. |
87 | * @get_suggested_filename: For a given connection, return a suggested file |
88 | * name. Returned value will be %NULL or a suggested file name to be freed by |
89 | * the caller. |
90 | * @notify_plugin_info_set: A callback to be called when the plugin info is set. |
91 | * @get_vt: return a virtual function table to implement further functions in |
92 | * the plugin, without requiring to update libnm. Used by nm_vpn_editor_plugin_get_vt(). |
93 | * |
94 | * Interface for VPN editor plugins. |
95 | */ |
96 | typedef struct { |
97 | GTypeInterface g_iface; |
98 | |
99 | NMVpnEditor *(*get_editor)(NMVpnEditorPlugin *plugin, NMConnection *connection, GError **error); |
100 | |
101 | NMVpnEditorPluginCapability (*get_capabilities)(NMVpnEditorPlugin *plugin); |
102 | |
103 | NMConnection *(*import_from_file)(NMVpnEditorPlugin *plugin, const char *path, GError **error); |
104 | |
105 | gboolean (*export_to_file)(NMVpnEditorPlugin *plugin, |
106 | const char *path, |
107 | NMConnection *connection, |
108 | GError **error); |
109 | |
110 | char *(*get_suggested_filename)(NMVpnEditorPlugin *plugin, NMConnection *connection); |
111 | |
112 | void (*notify_plugin_info_set)(NMVpnEditorPlugin *plugin, NMVpnPluginInfo *plugin_info); |
113 | |
114 | const NMVpnEditorPluginVT *(*get_vt)(NMVpnEditorPlugin *plugin, gsize *out_vt_size); |
115 | } NMVpnEditorPluginInterface; |
116 | |
117 | GType nm_vpn_editor_plugin_get_type(void); |
118 | |
119 | NMVpnEditor *nm_vpn_editor_plugin_get_editor(NMVpnEditorPlugin *plugin, |
120 | NMConnection *connection, |
121 | GError **error); |
122 | |
123 | NMVpnEditorPluginCapability nm_vpn_editor_plugin_get_capabilities(NMVpnEditorPlugin *plugin); |
124 | |
125 | NM_AVAILABLE_IN_1_4 |
126 | gsize |
127 | nm_vpn_editor_plugin_get_vt(NMVpnEditorPlugin *plugin, NMVpnEditorPluginVT *vt, gsize vt_size); |
128 | |
129 | NMConnection * |
130 | nm_vpn_editor_plugin_import(NMVpnEditorPlugin *plugin, const char *path, GError **error); |
131 | gboolean nm_vpn_editor_plugin_export(NMVpnEditorPlugin *plugin, |
132 | const char *path, |
133 | NMConnection *connection, |
134 | GError **error); |
135 | char *nm_vpn_editor_plugin_get_suggested_filename(NMVpnEditorPlugin *plugin, |
136 | NMConnection *connection); |
137 | |
138 | NM_AVAILABLE_IN_1_2 |
139 | NMVpnEditorPlugin *nm_vpn_editor_plugin_load_from_file(const char *plugin_name, |
140 | const char *check_service, |
141 | int check_owner, |
142 | NMUtilsCheckFilePredicate check_file, |
143 | gpointer user_data, |
144 | GError **error); |
145 | |
146 | NM_AVAILABLE_IN_1_4 |
147 | NMVpnEditorPlugin * |
148 | nm_vpn_editor_plugin_load(const char *plugin_name, const char *check_service, GError **error); |
149 | |
150 | NM_AVAILABLE_IN_1_4 |
151 | NMVpnPluginInfo *nm_vpn_editor_plugin_get_plugin_info(NMVpnEditorPlugin *plugin); |
152 | NM_AVAILABLE_IN_1_4 |
153 | void nm_vpn_editor_plugin_set_plugin_info(NMVpnEditorPlugin *plugin, NMVpnPluginInfo *plugin_info); |
154 | |
155 | #include "nm-vpn-plugin-info.h" |
156 | |
157 | G_END_DECLS |
158 | |
159 | #endif /* __NM_VPN_EDITOR_PLUGIN_H__ */ |
160 | |