1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2/*
3 * Copyright (C) 2007 - 2008 Novell, Inc.
4 * Copyright (C) 2007 - 2015 Red Hat, Inc.
5 */
6
7#ifndef __NM_VPN_SERVICE_PLUGIN_H__
8#define __NM_VPN_SERVICE_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 <gio/gio.h>
15#include "nm-vpn-dbus-interface.h"
16#include "nm-connection.h"
17
18G_BEGIN_DECLS
19
20#define NM_TYPE_VPN_SERVICE_PLUGIN (nm_vpn_service_plugin_get_type())
21#define NM_VPN_SERVICE_PLUGIN(obj) \
22 (G_TYPE_CHECK_INSTANCE_CAST((obj), NM_TYPE_VPN_SERVICE_PLUGIN, NMVpnServicePlugin))
23#define NM_VPN_SERVICE_PLUGIN_CLASS(klass) \
24 (G_TYPE_CHECK_CLASS_CAST((klass), NM_TYPE_VPN_SERVICE_PLUGIN, NMVpnServicePluginClass))
25#define NM_IS_VPN_SERVICE_PLUGIN(obj) \
26 (G_TYPE_CHECK_INSTANCE_TYPE((obj), NM_TYPE_VPN_SERVICE_PLUGIN))
27#define NM_IS_VPN_SERVICE_PLUGIN_CLASS(klass) \
28 (G_TYPE_CHECK_CLASS_TYPE((klass), NM_TYPE_VPN_SERVICE_PLUGIN))
29#define NM_VPN_SERVICE_PLUGIN_GET_CLASS(obj) \
30 (G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_VPN_SERVICE_PLUGIN, NMVpnServicePluginClass))
31
32#define NM_VPN_SERVICE_PLUGIN_DBUS_SERVICE_NAME "service-name"
33#define NM_VPN_SERVICE_PLUGIN_DBUS_WATCH_PEER "watch-peer"
34#define NM_VPN_SERVICE_PLUGIN_STATE "state"
35
36/**
37 * NMVpnServicePlugin:
38 *
39 * Since: 1.2
40 */
41typedef struct {
42 NM_AVAILABLE_IN_1_2
43 GObject parent;
44} NMVpnServicePlugin;
45
46typedef struct {
47 NM_AVAILABLE_IN_1_2
48 GObjectClass parent;
49
50 /* Signals */
51 NM_AVAILABLE_IN_1_2
52 void (*state_changed)(NMVpnServicePlugin *plugin, NMVpnServiceState state);
53
54 NM_AVAILABLE_IN_1_2
55 void (*ip4_config)(NMVpnServicePlugin *plugin, GVariant *ip4_config);
56
57 NM_AVAILABLE_IN_1_2
58 void (*login_banner)(NMVpnServicePlugin *plugin, const char *banner);
59
60 NM_AVAILABLE_IN_1_2
61 void (*failure)(NMVpnServicePlugin *plugin, NMVpnPluginFailure reason);
62
63 NM_AVAILABLE_IN_1_2
64 void (*quit)(NMVpnServicePlugin *plugin);
65
66 NM_AVAILABLE_IN_1_2
67 void (*config)(NMVpnServicePlugin *plugin, GVariant *config);
68
69 NM_AVAILABLE_IN_1_2
70 void (*ip6_config)(NMVpnServicePlugin *plugin, GVariant *config);
71
72 /* virtual methods */
73 NM_AVAILABLE_IN_1_2
74 gboolean (*connect)(NMVpnServicePlugin *plugin, NMConnection *connection, GError **err);
75
76 NM_AVAILABLE_IN_1_2
77 gboolean (*need_secrets)(NMVpnServicePlugin *plugin,
78 NMConnection *connection,
79 const char **setting_name,
80 GError **error);
81
82 NM_AVAILABLE_IN_1_2
83 gboolean (*disconnect)(NMVpnServicePlugin *plugin, GError **err);
84
85 NM_AVAILABLE_IN_1_2
86 gboolean (*new_secrets)(NMVpnServicePlugin *plugin, NMConnection *connection, GError **error);
87
88 NM_AVAILABLE_IN_1_2
89 gboolean (*connect_interactive)(NMVpnServicePlugin *plugin,
90 NMConnection *connection,
91 GVariant *details,
92 GError **error);
93
94 /*< private >*/
95 NM_AVAILABLE_IN_1_2
96 gpointer padding[8];
97} NMVpnServicePluginClass;
98
99NM_AVAILABLE_IN_1_2
100GType nm_vpn_service_plugin_get_type(void);
101
102NM_AVAILABLE_IN_1_2
103GDBusConnection *nm_vpn_service_plugin_get_connection(NMVpnServicePlugin *plugin);
104
105NM_AVAILABLE_IN_1_2
106void nm_vpn_service_plugin_secrets_required(NMVpnServicePlugin *plugin,
107 const char *message,
108 const char **hints);
109
110NM_AVAILABLE_IN_1_2
111void nm_vpn_service_plugin_set_login_banner(NMVpnServicePlugin *plugin, const char *banner);
112
113NM_AVAILABLE_IN_1_2
114void nm_vpn_service_plugin_failure(NMVpnServicePlugin *plugin, NMVpnPluginFailure reason);
115
116NM_AVAILABLE_IN_1_2
117void nm_vpn_service_plugin_set_config(NMVpnServicePlugin *plugin, GVariant *config);
118
119NM_AVAILABLE_IN_1_2
120void nm_vpn_service_plugin_set_ip4_config(NMVpnServicePlugin *plugin, GVariant *ip4_config);
121
122NM_AVAILABLE_IN_1_2
123void nm_vpn_service_plugin_set_ip6_config(NMVpnServicePlugin *plugin, GVariant *ip6_config);
124
125NM_AVAILABLE_IN_1_2
126gboolean nm_vpn_service_plugin_disconnect(NMVpnServicePlugin *plugin, GError **err);
127
128NM_AVAILABLE_IN_1_12
129void nm_vpn_service_plugin_shutdown(NMVpnServicePlugin *plugin);
130
131/* Utility functions */
132
133NM_AVAILABLE_IN_1_2
134gboolean
135nm_vpn_service_plugin_read_vpn_details(int fd, GHashTable **out_data, GHashTable **out_secrets);
136
137NM_AVAILABLE_IN_1_2
138gboolean nm_vpn_service_plugin_get_secret_flags(GHashTable *data,
139 const char *secret_name,
140 NMSettingSecretFlags *out_flags);
141
142G_END_DECLS
143
144#endif /* __NM_VPN_SERVICE_PLUGIN_H__ */
145

source code of include/libnm/nm-vpn-service-plugin.h