2 * Network Configuration Module
4 * Copyright (c) 2020 Samsung Electronics Co., Ltd. All rights reserved.
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
31 } netconfig_setting_data_s;
34 SETTING_TYPE_LAST_POWER = 0,
35 SETTING_TYPE_WIFI_OFF_BY_AIRPLANE,
36 SETTING_TYPE_WIFI_OFF_BY_RESTRICTED,
37 SETTING_TYPE_WIFI_OFF_BY_EMERGENCY,
39 // Extension data for socket buffer size. This might be used on Robot profile only.
40 SETTING_TYPE_READ_BUFFER_SIZE_DEFAULT,
41 SETTING_TYPE_READ_BUFFER_SIZE_MAX,
42 SETTING_TYPE_WRITE_BUFFER_SIZE_DEFAULT,
43 SETTING_TYPE_WRITE_BUFFER_SIZE_MAX,
44 SETTING_TYPE_IPV4_UDP_BUFFER_SIZE,
45 } netconfig_setting_type_e;
47 netconfig_setting_data_s netconfig_setting_data[] = {
48 { "LastPoweredInterfaces", {NULL} },
49 { "WifiOffByAirplaneInterfaces", {NULL} },
50 { "WifiOffByRestrictedInterfaces", {NULL} },
51 { "WifiOffByEmergencyInterfaces", {NULL} },
54 { "ReadBufferSizeDefault", {0} },
55 { "ReadBufferSizeMax", {0} },
56 { "WriteBufferSizeDefault", {0} },
57 { "WriteBufferSizeMax", {0} },
58 { "IPv4UdpBufferSize", {NULL} },
61 void netconfig_setting_init(void)
63 netconfig_setting_load();
65 INFO("setting is initialized");
70 void netconfig_setting_deinit(void)
74 netconfig_setting_save();
76 size = SETTING_TYPE_WIFI_OFF_BY_EMERGENCY;
77 for (i = 0; i <= size; i++)
78 g_slist_free_full(netconfig_setting_data[i].data.string_list, g_free);
80 g_free(netconfig_setting_data[SETTING_TYPE_IPV4_UDP_BUFFER_SIZE].data.size_list);
82 INFO("setting is deinitialized");
87 static void __setting_set_string_list(GKeyFile *keyfile, const char *group, netconfig_setting_type_e type)
89 GString *string_str = NULL;
90 char **string_list = NULL;
94 string_str = g_string_new(NULL);
96 list = netconfig_setting_data[type].data.string_list;
97 for (; list; list = list->next) {
98 if (string_str->len > 0)
99 g_string_append_printf(string_str, " %s", (char *)list->data);
101 g_string_append(string_str, list->data);
104 if (string_str->len > 0) {
105 string_list = g_strsplit_set(string_str->str, " ", 0);
106 length = g_strv_length(string_list);
107 g_key_file_set_string_list(keyfile, group,
108 netconfig_setting_data[type].key,
109 (const gchar **)string_list, length);
111 g_key_file_remove_key(keyfile, group,
112 netconfig_setting_data[type].key, NULL);
115 g_strfreev(string_list);
116 g_string_free(string_str, TRUE);
120 static void __setting_get_string_list(GKeyFile *keyfile, const char *group, netconfig_setting_type_e type)
122 char **string_list = NULL;
126 INFO("Key [%s]", netconfig_setting_data[type].key);
128 string_list = g_key_file_get_string_list(keyfile, group,
129 netconfig_setting_data[type].key, &length, NULL);
131 ERR("%d key cannot be found from %s.", type, group);
136 for (i = 0; string_list[i]; i++) {
137 netconfig_setting_data[type].data.string_list = g_slist_append(
138 netconfig_setting_data[type].data.string_list,
139 g_strdup(string_list[i]));
141 INFO("%s", string_list[i]);
145 g_strfreev(string_list);
148 static void __setting_get_integer(GKeyFile *keyfile, const char *group, netconfig_setting_type_e type)
151 GError *error = NULL;
153 INFO("Key [%s]", netconfig_setting_data[type].key);
154 value = g_key_file_get_integer(keyfile, group, netconfig_setting_data[type].key, &error);
156 ERR("Failed to get integer value from keyfile. %s", error->message);
160 netconfig_setting_data[type].data.size = value;
163 static void __setting_get_integer_list(GKeyFile *keyfile, const char *group, netconfig_setting_type_e type)
165 int *value_list = NULL;
167 GError *error = NULL;
169 INFO("Key [%s]", netconfig_setting_data[type].key);
170 value_list = g_key_file_get_integer_list(keyfile, group,
171 netconfig_setting_data[type].key, &length, &error);
172 if (error || length != 3) {
173 ERR("Failed to get integer value from keyfile. %s",
174 error ? error->message : "length isn't 3.");
178 netconfig_setting_data[type].data.size_list = value_list;
181 int netconfig_setting_save(void)
183 GKeyFile *keyfile = NULL;
185 INFO("Save setting [%s]", NETCONFIG_SETTINGS_PATH);
187 keyfile = netconfig_keyfile_load(NETCONFIG_SETTINGS_PATH);
188 if (keyfile == NULL) {
189 ERR("Fail to get settings keyfile");
193 __setting_set_string_list(keyfile, SETTINGS_WIFI_GROUP_NAME, SETTING_TYPE_LAST_POWER);
194 __setting_set_string_list(keyfile, SETTINGS_WIFI_GROUP_NAME,
195 SETTING_TYPE_WIFI_OFF_BY_AIRPLANE);
196 __setting_set_string_list(keyfile, SETTINGS_WIFI_GROUP_NAME,
197 SETTING_TYPE_WIFI_OFF_BY_RESTRICTED);
198 __setting_set_string_list(keyfile, SETTINGS_WIFI_GROUP_NAME,
199 SETTING_TYPE_WIFI_OFF_BY_EMERGENCY);
201 netconfig_keyfile_save(keyfile, NETCONFIG_SETTINGS_PATH);
203 g_key_file_free(keyfile);
207 int netconfig_setting_load(void)
209 GKeyFile *keyfile = NULL;
211 INFO("Load setting [%s]", NETCONFIG_SETTINGS_PATH);
213 keyfile = netconfig_keyfile_load(NETCONFIG_SETTINGS_PATH);
214 if (keyfile == NULL) {
215 ERR("Fail to get settings keyfile");
219 __setting_get_string_list(keyfile, SETTINGS_WIFI_GROUP_NAME, SETTING_TYPE_LAST_POWER);
220 __setting_get_string_list(keyfile, SETTINGS_WIFI_GROUP_NAME,
221 SETTING_TYPE_WIFI_OFF_BY_AIRPLANE);
222 __setting_get_string_list(keyfile, SETTINGS_WIFI_GROUP_NAME,
223 SETTING_TYPE_WIFI_OFF_BY_RESTRICTED);
224 __setting_get_string_list(keyfile, SETTINGS_WIFI_GROUP_NAME,
225 SETTING_TYPE_WIFI_OFF_BY_EMERGENCY);
227 __setting_get_integer(keyfile, SETTINGS_EXTENSION_GROUP_NAME,
228 SETTING_TYPE_READ_BUFFER_SIZE_DEFAULT);
229 __setting_get_integer(keyfile, SETTINGS_EXTENSION_GROUP_NAME,
230 SETTING_TYPE_READ_BUFFER_SIZE_MAX);
231 __setting_get_integer(keyfile, SETTINGS_EXTENSION_GROUP_NAME,
232 SETTING_TYPE_WRITE_BUFFER_SIZE_DEFAULT);
233 __setting_get_integer(keyfile, SETTINGS_EXTENSION_GROUP_NAME,
234 SETTING_TYPE_WRITE_BUFFER_SIZE_MAX);
236 __setting_get_integer_list(keyfile, SETTINGS_EXTENSION_GROUP_NAME,
237 SETTING_TYPE_IPV4_UDP_BUFFER_SIZE);
242 void netconfig_setting_update_interface_for_last_powered(const char *interface_name,
245 GSList *list = netconfig_setting_data[SETTING_TYPE_LAST_POWER].data.string_list;
248 for ( ; list; list = list->next) {
249 const char *ifname = list->data;
250 if (g_strcmp0(ifname, interface_name) == 0) {
252 netconfig_setting_data[SETTING_TYPE_LAST_POWER].data.string_list = g_slist_remove(
253 netconfig_setting_data[SETTING_TYPE_LAST_POWER].data.string_list, ifname);
260 if (mode == TRUE && find == FALSE)
261 netconfig_setting_data[SETTING_TYPE_LAST_POWER].data.string_list = g_slist_append(
262 netconfig_setting_data[SETTING_TYPE_LAST_POWER].data.string_list, g_strdup(interface_name));
264 netconfig_setting_save();
267 GSList *netconfig_setting_get_interfaces_for_last_powered(void)
269 return netconfig_setting_data[SETTING_TYPE_LAST_POWER].data.string_list;
272 void netconfig_setting_update_interface_off_for_airplane(const char *interface_name,
275 GSList *list = netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_AIRPLANE].data.string_list;
278 for ( ; list; list = list->next) {
279 const char *ifname = list->data;
280 if (g_strcmp0(ifname, interface_name) == 0) {
282 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_AIRPLANE].data.string_list = g_slist_remove(
283 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_AIRPLANE].data.string_list, ifname);
290 if (mode == TRUE && find == FALSE)
291 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_AIRPLANE].data.string_list = g_slist_append(
292 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_AIRPLANE].data.string_list, g_strdup(interface_name));
294 netconfig_setting_save();
297 GSList *netconfig_setting_get_interfaces_off_by_airplane(void)
299 return netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_AIRPLANE].data.string_list;
302 void netconfig_setting_update_interface_off_for_restricted(const char *interface_name,
305 GSList *list = netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_RESTRICTED].data.string_list;
308 for ( ; list; list = list->next) {
309 const char *ifname = list->data;
310 if (g_strcmp0(ifname, interface_name) == 0) {
312 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_RESTRICTED].data.string_list = g_slist_remove(
313 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_RESTRICTED].data.string_list, ifname);
320 if (mode == TRUE && find == FALSE)
321 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_RESTRICTED].data.string_list = g_slist_append(
322 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_RESTRICTED].data.string_list, g_strdup(interface_name));
324 netconfig_setting_save();
327 GSList *netconfig_setting_get_interfaces_off_by_restricted(void)
329 return netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_RESTRICTED].data.string_list;
332 void netconfig_setting_update_interface_off_for_emergency(const char *interface_name,
335 GSList *list = netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_EMERGENCY].data.string_list;
338 for ( ; list; list = list->next) {
339 const char *ifname = list->data;
340 if (g_strcmp0(ifname, interface_name) == 0) {
342 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_EMERGENCY].data.string_list
344 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_EMERGENCY].data.string_list,
352 if (mode == TRUE && find == FALSE)
353 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_EMERGENCY].data.string_list
355 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_EMERGENCY].data.string_list,
356 g_strdup(interface_name));
358 netconfig_setting_save();
361 GSList *netconfig_setting_get_interfaces_off_by_emergency(void)
363 return netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_EMERGENCY].data.string_list;
366 int netconfig_setting_get_read_buffer_size_default(void)
368 return netconfig_setting_data[SETTING_TYPE_READ_BUFFER_SIZE_DEFAULT].data.size;
371 int netconfig_setting_get_read_buffer_size_max(void)
373 return netconfig_setting_data[SETTING_TYPE_READ_BUFFER_SIZE_MAX].data.size;
376 int netconfig_setting_get_write_buffer_size_default(void)
378 return netconfig_setting_data[SETTING_TYPE_WRITE_BUFFER_SIZE_DEFAULT].data.size;
381 int netconfig_setting_get_write_buffer_size_max(void)
383 return netconfig_setting_data[SETTING_TYPE_WRITE_BUFFER_SIZE_MAX].data.size;
386 int *netconfig_setting_get_ipv4_udp_buffer_size(void)
388 return netconfig_setting_data[SETTING_TYPE_IPV4_UDP_BUFFER_SIZE].data.size_list;