Modify send_arp
[platform/core/connectivity/net-config.git] / src / mptcp.c
1 /*
2  * Network Configuration - VPN Service Module
3  *
4  * Copyright (c) 2015 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <unistd.h>
23 #include <gio/gunixfdlist.h>
24
25 #include "mptcp.h"
26 #include "mptcp-internal.h"
27 #include "netdbus.h"
28 #include "log.h"
29
30 static Mptcp *mptcp_object = NULL;
31
32 Mptcp *get_mptcp_object(void)
33 {
34         return mptcp_object;
35 }
36
37 /*********************
38  * Handler Functions *
39  ********************/
40 gboolean handle_mptcp_supported(Mptcp *object, GDBusMethodInvocation *invocation)
41 {
42         DBG("handle_mptcp_supported");
43         gboolean value;
44
45         value = mptcp_supported();
46
47         mptcp_complete_is_supported(object, invocation, value);
48         return TRUE;
49 }
50
51 gboolean handle_mptcp_set_enabled(Mptcp *object, GDBusMethodInvocation *invocation, gint enable)
52 {
53         DBG("handle_mptcp_set_enabled");
54
55         gboolean ret = mptcp_set_enabled(enable);
56         mptcp_complete_set_enabled(object, invocation, ret);
57         return TRUE;
58 }
59
60 gboolean handle_mptcp_get_enabled(Mptcp *object, GDBusMethodInvocation *invocation)
61 {
62         DBG("handle_mptcp_get_enabled");
63         gint value;
64
65         value = mptcp_get_enabled();
66         if (value != 0 && value != 1 && value != 2)
67                 ERR("Invalid value of mptcp_enabled[%d]", value);
68
69         mptcp_complete_get_enabled(object, invocation, value);
70         return TRUE;
71 }
72
73 gboolean handle_mptcp_set_path_manager(Mptcp *object, GDBusMethodInvocation *invocation, const gchar *pm)
74 {
75         DBG("handle_mptcp_set_path_manager %s", pm);
76
77         gboolean ret = mptcp_set_path_manager(pm);
78         mptcp_complete_set_path_manager(object, invocation, ret);
79         return TRUE;
80 }
81
82 gboolean handle_mptcp_get_path_manager(Mptcp *object, GDBusMethodInvocation *invocation)
83 {
84         DBG("handle_mptcp_get_path_manager");
85         gchar* pm;
86
87         pm = mptcp_get_path_manager();
88         DBG("get path manager %s", pm ? pm : "null");
89         mptcp_complete_get_path_manager(object, invocation, pm);
90         g_free(pm);
91
92         return TRUE;
93 }
94
95 gboolean handle_mptcp_set_scheduler(Mptcp *object, GDBusMethodInvocation *invocation, const gchar *scheduler)
96 {
97         DBG("handle_mptcp_set_scheduler");
98
99         gboolean ret = mptcp_mptcp_set_scheduler(scheduler);
100         mptcp_complete_set_scheduler(object, invocation, ret);
101         return TRUE;
102 }
103
104 gboolean handle_mptcp_get_scheduler(Mptcp *object, GDBusMethodInvocation *invocation)
105 {
106         DBG("handle_mptcp_get_scheduler");
107         gchar* scheduler;
108
109         scheduler = mptcp_get_scheduler();
110         DBG("get scheduler %s", scheduler ? scheduler : "null");
111         mptcp_complete_get_scheduler(object, invocation, scheduler);
112         g_free(scheduler);
113
114         return TRUE;
115 }
116
117
118 /*****************************
119  * Initializations Functions *
120  ****************************/
121 void mptcp_object_create_and_init(void)
122 {
123         DBG("Create mptcp object.");
124         GDBusInterfaceSkeleton *interface_mptcp = NULL;
125         GDBusConnection *connection = NULL;
126         GDBusObjectManagerServer *server = netdbus_get_mptcp_manager();
127         if (server == NULL)
128                 return;
129
130         connection = netdbus_get_connection();
131         g_dbus_object_manager_server_set_connection(server, connection);
132
133         /* Interface */
134         mptcp_object = mptcp_skeleton_new();
135         interface_mptcp = G_DBUS_INTERFACE_SKELETON(mptcp_object);
136
137         /* VPN Service */
138         g_signal_connect(mptcp_object, "handle-is-supported",
139                         G_CALLBACK(handle_mptcp_supported), NULL);
140         g_signal_connect(mptcp_object, "handle-set-enabled",
141                         G_CALLBACK(handle_mptcp_set_enabled), NULL);
142         g_signal_connect(mptcp_object, "handle-get-enabled",
143                         G_CALLBACK(handle_mptcp_get_enabled), NULL);
144         g_signal_connect(mptcp_object, "handle-set-path-manager",
145                         G_CALLBACK(handle_mptcp_set_path_manager), NULL);
146         g_signal_connect(mptcp_object, "handle-get-path-manager",
147                         G_CALLBACK(handle_mptcp_get_path_manager), NULL);
148         g_signal_connect(mptcp_object, "handle-set-scheduler",
149                         G_CALLBACK(handle_mptcp_set_scheduler), NULL);
150         g_signal_connect(mptcp_object, "handle-get-scheduler",
151                         G_CALLBACK(handle_mptcp_get_scheduler), NULL);
152
153         if (!g_dbus_interface_skeleton_export(interface_mptcp, connection,
154                         NETCONFIG_MPTCP_PATH, NULL)) {
155                 ERR("Export NETCONFIG_MPTCP_PATH for mptcp failed");
156         }
157
158         return;
159 }
160
161 void mptcp_object_deinit(void)
162 {
163         DBG("Deinit mptcp object.");
164
165         g_object_unref(mptcp_object);
166 }
167