2 * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 #include <gmock/gmock.h>
21 #include <gtest/gtest.h>
25 #include <gio/gunixfdlist.h>
39 error_e Vpnsvc::vpn_init(const char *iface_name, int iface_name_len, int *result,
40 int *h_index, char *h_name)
42 GVariant *message = NULL;
43 error_e error = ERROR_NONE;
44 GError *g_error = NULL;
45 GUnixFDList *fd_list = NULL;
48 fd_list = g_unix_fd_list_new();
49 if (fd_list == NULL) {
50 GLOGD("g_unix_fd_list_new() failed!");
51 return ERROR_OPERATION_FAILED ;
54 if ((iface_fd = open("/dev/net/tun", O_RDWR)) < 0) {
55 GLOGD("tun device open fail\n");
56 g_object_unref(fd_list);
57 return ERROR_OPERATION_FAILED;
60 g_unix_fd_list_append(fd_list, iface_fd, &g_error);
61 if (g_error != NULL) {
63 g_object_unref(fd_list);
64 return ERROR_OPERATION_FAILED;
67 message = InvokeMethod_with_fd(fd_list,
69 NETCONFIG_VPNSVC_PATH,
70 NETCONFIG_VPNSVC_INTERFACE,
72 g_variant_new("(su)", iface_name, iface_name_len),
75 if (message == NULL) {
76 GLOGD("Failed to invoke dbus method");
78 g_object_unref(fd_list);
82 g_variant_get(message, "(iis)", result, h_index, h_name);
83 g_variant_unref(message);
85 g_object_unref(fd_list);
90 error_e Vpnsvc::vpn_deinit(const char *dev_name, int *result)
92 GVariant *message = NULL;
93 error_e error = ERROR_NONE;
95 message = InvokeMethod(NETCONFIG_SERVICE,
96 NETCONFIG_VPNSVC_PATH,
97 NETCONFIG_VPNSVC_INTERFACE,
99 g_variant_new("(s)", dev_name),
102 if (message == NULL) {
103 GLOGD("Failed to invoke dbus method");
107 g_variant_get(message, "(i)", result);
108 g_variant_unref(message);
113 error_e Vpnsvc::vpn_protect(const char *dev_name, int *result)
115 GVariant *message = NULL;
116 error_e error = ERROR_NONE;
117 GError *g_error = NULL;
118 GUnixFDList *fd_list = NULL;
121 fd_list = g_unix_fd_list_new();
122 if (fd_list == NULL) {
123 GLOGD("g_unix_fd_list_new() failed!");
124 return ERROR_OPERATION_FAILED ;
127 if ((iface_fd = open("/dev/net/tun", O_RDWR)) < 0) {
128 GLOGD("tun device open fail\n");
129 g_object_unref(fd_list);
130 return ERROR_OPERATION_FAILED;
133 g_unix_fd_list_append(fd_list, iface_fd, &g_error);
134 if (g_error != NULL) {
136 g_object_unref(fd_list);
137 return ERROR_OPERATION_FAILED;
140 message = InvokeMethod_with_fd(fd_list,
142 NETCONFIG_VPNSVC_PATH,
143 NETCONFIG_VPNSVC_INTERFACE,
145 g_variant_new("(s)", dev_name),
148 if (message == NULL) {
149 GLOGD("Failed to invoke dbus method");
151 g_object_unref(fd_list);
155 g_variant_get(message, "(i)", result);
156 g_variant_unref(message);
158 g_object_unref(fd_list);
163 error_e Vpnsvc::vpn_up(const char *iface_name, int *result)
165 GVariant *message = NULL;
166 error_e error = ERROR_NONE;
168 message = InvokeMethod(NETCONFIG_SERVICE,
169 NETCONFIG_VPNSVC_PATH,
170 NETCONFIG_VPNSVC_INTERFACE,
172 g_variant_new("(s)", iface_name),
175 if (message == NULL) {
176 GLOGD("Failed to invoke dbus method");
180 g_variant_get(message, "(i)", result);
181 g_variant_unref(message);
186 error_e Vpnsvc::vpn_down(const char *iface_name, int *result)
188 GVariant *message = NULL;
189 error_e error = ERROR_NONE;
191 message = InvokeMethod(NETCONFIG_SERVICE,
192 NETCONFIG_VPNSVC_PATH,
193 NETCONFIG_VPNSVC_INTERFACE,
195 g_variant_new("(s)", iface_name),
198 if (message == NULL) {
199 GLOGD("Failed to invoke dbus method");
203 g_variant_get(message, "(i)", result);
204 g_variant_unref(message);
209 error_e Vpnsvc::vpn_block_networks(GVariant *nets_vpn, int nr_nets_vpn,
210 GVariant *nets_orig, int nr_nets_orig, int *result)
212 GVariant *message = NULL;
213 error_e error = ERROR_NONE;
215 message = InvokeMethod(NETCONFIG_SERVICE,
216 NETCONFIG_VPNSVC_PATH,
217 NETCONFIG_VPNSVC_INTERFACE,
219 g_variant_new("(vuvu)", nets_vpn, nr_nets_vpn,
220 nets_orig, nr_nets_orig),
223 if (message == NULL) {
224 GLOGD("Failed to invoke dbus method");
228 g_variant_get(message, "(i)", result);
229 g_variant_unref(message);
234 error_e Vpnsvc::vpn_unblock_networks(int *result)
236 GVariant *message = NULL;
237 error_e error = ERROR_NONE;
239 message = InvokeMethod(NETCONFIG_SERVICE,
240 NETCONFIG_VPNSVC_PATH,
241 NETCONFIG_VPNSVC_INTERFACE,
242 VPN_UNBLOCK_NETWORKS,
246 if (message == NULL) {
247 GLOGD("Failed to invoke dbus method");
251 g_variant_get(message, "(i)", result);
252 g_variant_unref(message);
257 error_e Vpnsvc::vpn_update_settings(int iface_index, const char *local_ip,
258 const char *remote_ip, int mtu, int *result)
260 GVariant *message = NULL;
261 error_e error = ERROR_NONE;
263 message = InvokeMethod(NETCONFIG_SERVICE,
264 NETCONFIG_VPNSVC_PATH,
265 NETCONFIG_VPNSVC_INTERFACE,
267 g_variant_new("(issu)", iface_index, local_ip,
271 if (message == NULL) {
272 GLOGD("Failed to invoke dbus method");
276 g_variant_get(message, "(i)", result);
277 g_variant_unref(message);
282 error_e Vpnsvc::vpn_add_route(const char *iface_name, const char *route, int prefix,
285 GVariant *message = NULL;
286 error_e error = ERROR_NONE;
288 message = InvokeMethod(NETCONFIG_SERVICE,
289 NETCONFIG_VPNSVC_PATH,
290 NETCONFIG_VPNSVC_INTERFACE,
292 g_variant_new("(ssi)", iface_name, route, prefix),
295 if (message == NULL) {
296 GLOGD("Failed to invoke dbus method");
300 g_variant_get(message, "(i)", result);
301 g_variant_unref(message);
306 error_e Vpnsvc::vpn_remove_route(const char *iface_name, const char *route, int prefix,
309 GVariant *message = NULL;
310 error_e error = ERROR_NONE;
312 message = InvokeMethod(NETCONFIG_SERVICE,
313 NETCONFIG_VPNSVC_PATH,
314 NETCONFIG_VPNSVC_INTERFACE,
316 g_variant_new("(ssi)", iface_name, route, prefix),
319 if (message == NULL) {
320 GLOGD("Failed to invoke dbus method");
324 g_variant_get(message, "(i)", result);
325 g_variant_unref(message);
330 error_e Vpnsvc::vpn_add_dns_server(const char* iface_name, const char *dns_server,
333 GVariant *message = NULL;
334 error_e error = ERROR_NONE;
336 message = InvokeMethod(NETCONFIG_SERVICE,
337 NETCONFIG_VPNSVC_PATH,
338 NETCONFIG_VPNSVC_INTERFACE,
340 g_variant_new("(ss)", iface_name, dns_server),
343 if (message == NULL) {
344 GLOGD("Failed to invoke dbus method");
348 g_variant_get(message, "(i)", result);
349 g_variant_unref(message);
354 error_e Vpnsvc::vpn_remove_dns_server(const char* iface_name, const char *dns_server,
357 GVariant *message = NULL;
358 error_e error = ERROR_NONE;
360 message = InvokeMethod(NETCONFIG_SERVICE,
361 NETCONFIG_VPNSVC_PATH,
362 NETCONFIG_VPNSVC_INTERFACE,
363 VPN_REMOVE_DNS_SERVER,
364 g_variant_new("(ss)", iface_name, dns_server),
367 if (message == NULL) {
368 GLOGD("Failed to invoke dbus method");
372 g_variant_get(message, "(i)", result);
373 g_variant_unref(message);