device: renew dhcp leases on awake for software devices
[NetworkManager.git] / libnm-glib / nm-vpn-plugin-ui-interface.c
1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2 /*
3  * This library is free software; you can redistribute it and/or
4  * modify it under the terms of the GNU Lesser General Public
5  * License as published by the Free Software Foundation; either
6  * version 2 of the License, or (at your option) any later version.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11  * Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public
14  * License along with this library; if not, write to the
15  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16  * Boston, MA 02110-1301 USA.
17  *
18  * Copyright 2008 - 2010 Red Hat, Inc.
19  * Copyright 2008 Novell, Inc.
20  */
21
22 #include "nm-default.h"
23
24 #include "nm-vpn-plugin-ui-interface.h"
25
26 static void
27 interface_init (gpointer g_iface)
28 {
29         static gboolean initialized = FALSE;
30
31         if (initialized)
32                 return;
33
34         /* Properties */
35
36         /**
37          * NMVPNPluginUiInterface:name:
38          *
39          * Short display name of the VPN plugin.
40          */
41         g_object_interface_install_property (g_iface,
42                  g_param_spec_string (NM_VPN_PLUGIN_UI_INTERFACE_NAME, "", "",
43                                       NULL,
44                                       G_PARAM_READABLE |
45                                       G_PARAM_STATIC_STRINGS));
46
47         /**
48          * NMVPNPluginUiInterface:desc:
49          *
50          * Longer description of the VPN plugin.
51          */
52         g_object_interface_install_property (g_iface,
53                  g_param_spec_string (NM_VPN_PLUGIN_UI_INTERFACE_DESC, "", "",
54                                       NULL,
55                                       G_PARAM_READABLE |
56                                       G_PARAM_STATIC_STRINGS));
57
58         /**
59          * NMVPNPluginUiInterface:service:
60          *
61          * D-Bus service name of the plugin's VPN service.
62          */
63         g_object_interface_install_property (g_iface,
64                  g_param_spec_string (NM_VPN_PLUGIN_UI_INTERFACE_SERVICE, "", "",
65                                       NULL,
66                                       G_PARAM_READABLE |
67                                       G_PARAM_STATIC_STRINGS));
68
69         initialized = TRUE;
70 }
71
72
73 GType
74 nm_vpn_plugin_ui_interface_get_type (void)
75 {
76         static GType vpn_plugin_ui_interface_type = 0;
77
78         if (!vpn_plugin_ui_interface_type) {
79                 const GTypeInfo vpn_plugin_ui_interface_info = {
80                         sizeof (NMVpnPluginUiInterface), /* class_size */
81                         interface_init,   /* base_init */
82                         NULL,           /* base_finalize */
83                         NULL,
84                         NULL,           /* class_finalize */
85                         NULL,           /* class_data */
86                         0,
87                         0,              /* n_preallocs */
88                         NULL
89                 };
90
91                 vpn_plugin_ui_interface_type = g_type_register_static (G_TYPE_INTERFACE,
92                                                                        "NMVpnPluginUiInterface",
93                                                                        &vpn_plugin_ui_interface_info,
94                                                                        0);
95
96                 g_type_interface_add_prerequisite (vpn_plugin_ui_interface_type, G_TYPE_OBJECT);
97         }
98
99         return vpn_plugin_ui_interface_type;
100 }
101
102
103 NMVpnPluginUiWidgetInterface *
104 nm_vpn_plugin_ui_interface_ui_factory (NMVpnPluginUiInterface *iface,
105                                        NMConnection *connection,
106                                        GError **error)
107 {
108         g_return_val_if_fail (NM_IS_VPN_PLUGIN_UI_INTERFACE (iface), NULL);
109
110         return NM_VPN_PLUGIN_UI_INTERFACE_GET_INTERFACE (iface)->ui_factory (iface, connection, error);
111 }
112
113 guint32
114 nm_vpn_plugin_ui_interface_get_capabilities (NMVpnPluginUiInterface *iface)
115 {
116         g_return_val_if_fail (NM_IS_VPN_PLUGIN_UI_INTERFACE (iface), 0);
117
118         return NM_VPN_PLUGIN_UI_INTERFACE_GET_INTERFACE (iface)->get_capabilities (iface);
119 }
120
121 NMConnection *
122 nm_vpn_plugin_ui_interface_import (NMVpnPluginUiInterface *iface,
123                                    const char *path,
124                                    GError **error)
125 {
126         g_return_val_if_fail (NM_IS_VPN_PLUGIN_UI_INTERFACE (iface), NULL);
127
128         if (nm_vpn_plugin_ui_interface_get_capabilities (iface) & NM_VPN_PLUGIN_UI_CAPABILITY_IMPORT) {
129                 g_return_val_if_fail (NM_VPN_PLUGIN_UI_INTERFACE_GET_INTERFACE (iface)->import_from_file != NULL, NULL);
130                 return NM_VPN_PLUGIN_UI_INTERFACE_GET_INTERFACE (iface)->import_from_file (iface, path, error);
131         }
132         return NULL;
133 }
134
135 gboolean
136 nm_vpn_plugin_ui_interface_export (NMVpnPluginUiInterface *iface,
137                                    const char *path,
138                                    NMConnection *connection,
139                                    GError **error)
140 {
141         g_return_val_if_fail (NM_IS_VPN_PLUGIN_UI_INTERFACE (iface), FALSE);
142
143         if (nm_vpn_plugin_ui_interface_get_capabilities (iface) & NM_VPN_PLUGIN_UI_CAPABILITY_EXPORT) {
144                 g_return_val_if_fail (NM_VPN_PLUGIN_UI_INTERFACE_GET_INTERFACE (iface)->export_to_file != NULL, FALSE);
145                 return NM_VPN_PLUGIN_UI_INTERFACE_GET_INTERFACE (iface)->export_to_file (iface, path, connection, error);
146         }
147         return FALSE;
148 }
149
150 char *
151 nm_vpn_plugin_ui_interface_get_suggested_name (NMVpnPluginUiInterface *iface,
152                                                NMConnection *connection)
153 {
154         g_return_val_if_fail (NM_IS_VPN_PLUGIN_UI_INTERFACE (iface), NULL);
155
156         if (NM_VPN_PLUGIN_UI_INTERFACE_GET_INTERFACE (iface)->get_suggested_name)
157                 return NM_VPN_PLUGIN_UI_INTERFACE_GET_INTERFACE (iface)->get_suggested_name (iface, connection);
158         return NULL;
159 }
160
161 gboolean
162 nm_vpn_plugin_ui_interface_delete_connection (NMVpnPluginUiInterface *iface,
163                                               NMConnection *connection,
164                                               GError **error)
165 {
166         /* Deprecated and no longer used */
167         return TRUE;
168 }
169
170
171 static void
172 widget_interface_init (gpointer g_iface)
173 {
174         GType iface_type = G_TYPE_FROM_INTERFACE (g_iface);
175         static gboolean initialized = FALSE;
176
177         if (initialized)
178                 return;
179
180         /* Signals */
181         g_signal_new ("changed",
182                       iface_type,
183                       G_SIGNAL_RUN_FIRST,
184                       G_STRUCT_OFFSET (NMVpnPluginUiWidgetInterface, changed),
185                       NULL, NULL,
186                       g_cclosure_marshal_VOID__VOID,
187                       G_TYPE_NONE, 0);
188
189         initialized = TRUE;
190 }
191
192 GType
193 nm_vpn_plugin_ui_widget_interface_get_type (void)
194 {
195         static GType vpn_plugin_ui_widget_interface_type = 0;
196
197         if (!vpn_plugin_ui_widget_interface_type) {
198                 const GTypeInfo vpn_plugin_ui_widget_interface_info = {
199                         sizeof (NMVpnPluginUiWidgetInterface), /* class_size */
200                         widget_interface_init,   /* base_init */
201                         NULL,           /* base_finalize */
202                         NULL,
203                         NULL,           /* class_finalize */
204                         NULL,           /* class_data */
205                         0,
206                         0,              /* n_preallocs */
207                         NULL
208                 };
209
210                 vpn_plugin_ui_widget_interface_type = g_type_register_static (G_TYPE_INTERFACE,
211                                                                               "NMVpnPluginUiWidgetInterface",
212                                                                               &vpn_plugin_ui_widget_interface_info,
213                                                                               0);
214
215                 g_type_interface_add_prerequisite (vpn_plugin_ui_widget_interface_type, G_TYPE_OBJECT);
216         }
217
218         return vpn_plugin_ui_widget_interface_type;
219 }
220
221 GObject *
222 nm_vpn_plugin_ui_widget_interface_get_widget (NMVpnPluginUiWidgetInterface *iface)
223 {
224         g_return_val_if_fail (NM_IS_VPN_PLUGIN_UI_WIDGET_INTERFACE (iface), NULL);
225
226         return NM_VPN_PLUGIN_UI_WIDGET_INTERFACE_GET_INTERFACE (iface)->get_widget (iface);
227 }
228
229 gboolean
230 nm_vpn_plugin_ui_widget_interface_update_connection (NMVpnPluginUiWidgetInterface *iface,
231                                                      NMConnection *connection,
232                                                      GError **error)
233 {
234         g_return_val_if_fail (NM_IS_VPN_PLUGIN_UI_WIDGET_INTERFACE (iface), FALSE);
235
236         if (error)
237                 g_return_val_if_fail (*error == NULL, FALSE);
238
239         return NM_VPN_PLUGIN_UI_WIDGET_INTERFACE_GET_INTERFACE (iface)->update_connection (iface, connection, error);
240 }
241
242 gboolean
243 nm_vpn_plugin_ui_widget_interface_save_secrets (NMVpnPluginUiWidgetInterface *iface,
244                                                 NMConnection *connection,
245                                                 GError **error)
246 {
247         /* Deprecated and no longer used */
248         return TRUE;
249 }