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.
25 SETTING_TYPE_LAST_POWER,
26 SETTING_TYPE_WIFI_OFF_BY_AIRPLANE,
27 SETTING_TYPE_WIFI_OFF_BY_RESTRICTED,
28 SETTING_TYPE_WIFI_OFF_BY_EMERGENCY,
29 } netconfig_setting_type_e;
34 } netconfig_setting_data_s;
36 netconfig_setting_data_s netconfig_setting_data[] = {
37 { "LastPoweredInterfaces", NULL },
38 { "WifiOffByAirplaneInterfaces", NULL },
39 { "WifiOffByRestrictedInterfaces", NULL },
40 { "WifiOffByEmergencyInterfaces", NULL },
43 void netconfig_setting_init(void)
45 netconfig_setting_load();
47 INFO("setting is initialized");
52 void netconfig_setting_deinit(void)
56 netconfig_setting_save();
58 size = ARRAY_SIZE(netconfig_setting_data);
59 for (i = 0; i < size; i++)
60 g_slist_free_full(netconfig_setting_data[i].string_list, g_free);
62 INFO("setting is deinitialized");
67 static void __setting_set_string_list(GKeyFile *keyfile, netconfig_setting_type_e type)
69 GString *string_str = NULL;
70 char **string_list = NULL;
74 string_str = g_string_new(NULL);
76 list = netconfig_setting_data[type].string_list;
77 for (; list; list = list->next) {
78 if (string_str->len > 0)
79 g_string_append_printf(string_str, " %s", (char *)list->data);
81 g_string_append(string_str, list->data);
84 if (string_str->len > 0) {
85 string_list = g_strsplit_set(string_str->str, " ", 0);
86 length = g_strv_length(string_list);
87 g_key_file_set_string_list(keyfile, SETTINGS_WIFI_GROUP_NAME,
88 netconfig_setting_data[type].key,
89 (const gchar **)string_list, length);
91 g_key_file_remove_key(keyfile, SETTINGS_WIFI_GROUP_NAME,
92 netconfig_setting_data[type].key, NULL);
95 g_string_free(string_str, TRUE);
99 static void __setting_get_string_list(GKeyFile *keyfile, netconfig_setting_type_e type)
101 char **string_list = NULL;
105 INFO("Key [%s]", netconfig_setting_data[type].key);
107 string_list = g_key_file_get_string_list(keyfile, SETTINGS_WIFI_GROUP_NAME,
108 netconfig_setting_data[type].key, &length, NULL);
109 if (string_list && length != 0) {
110 for (i = 0; string_list[i]; i++) {
111 netconfig_setting_data[type].string_list = g_slist_append(
112 netconfig_setting_data[type].string_list,
113 g_strdup(string_list[i]));
115 INFO("%s", string_list[i]);
119 g_strfreev(string_list);
122 int netconfig_setting_save(void)
124 GKeyFile *keyfile = NULL;
126 INFO("Save setting [%s]", NETCONFIG_SETTINGS_PATH);
128 keyfile = netconfig_keyfile_load(NETCONFIG_SETTINGS_PATH);
129 if (keyfile == NULL) {
130 ERR("Fail to get settings keyfile");
134 __setting_set_string_list(keyfile, SETTING_TYPE_LAST_POWER);
135 __setting_set_string_list(keyfile, SETTING_TYPE_WIFI_OFF_BY_AIRPLANE);
136 __setting_set_string_list(keyfile, SETTING_TYPE_WIFI_OFF_BY_RESTRICTED);
137 __setting_set_string_list(keyfile, SETTING_TYPE_WIFI_OFF_BY_EMERGENCY);
139 netconfig_keyfile_save(keyfile, NETCONFIG_SETTINGS_PATH);
141 g_key_file_free(keyfile);
145 int netconfig_setting_load(void)
147 GKeyFile *keyfile = NULL;
149 INFO("Load setting [%s]", NETCONFIG_SETTINGS_PATH);
151 keyfile = netconfig_keyfile_load(NETCONFIG_SETTINGS_PATH);
152 if (keyfile == NULL) {
153 ERR("Fail to get settings keyfile");
157 __setting_get_string_list(keyfile, SETTING_TYPE_LAST_POWER);
158 __setting_get_string_list(keyfile, SETTING_TYPE_WIFI_OFF_BY_AIRPLANE);
159 __setting_get_string_list(keyfile, SETTING_TYPE_WIFI_OFF_BY_RESTRICTED);
160 __setting_get_string_list(keyfile, SETTING_TYPE_WIFI_OFF_BY_EMERGENCY);
165 void netconfig_setting_update_interface_for_last_powered(const char *interface_name,
168 GSList *list = netconfig_setting_data[SETTING_TYPE_LAST_POWER].string_list;
171 for ( ; list; list = list->next) {
172 const char *ifname = list->data;
173 if (g_strcmp0(ifname, interface_name) == 0) {
175 netconfig_setting_data[SETTING_TYPE_LAST_POWER].string_list = g_slist_remove(
176 netconfig_setting_data[SETTING_TYPE_LAST_POWER].string_list, ifname);
183 if (mode == TRUE && find == FALSE)
184 netconfig_setting_data[SETTING_TYPE_LAST_POWER].string_list = g_slist_append(
185 netconfig_setting_data[SETTING_TYPE_LAST_POWER].string_list, g_strdup(interface_name));
187 netconfig_setting_save();
190 GSList *netconfig_setting_get_interfaces_for_last_powered(void)
192 return netconfig_setting_data[SETTING_TYPE_LAST_POWER].string_list;
195 void netconfig_setting_update_interface_off_for_airplane(const char *interface_name,
198 GSList *list = netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_AIRPLANE].string_list;
201 for ( ; list; list = list->next) {
202 const char *ifname = list->data;
203 if (g_strcmp0(ifname, interface_name) == 0) {
205 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_AIRPLANE].string_list = g_slist_remove(
206 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_AIRPLANE].string_list, ifname);
213 if (mode == TRUE && find == FALSE)
214 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_AIRPLANE].string_list = g_slist_append(
215 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_AIRPLANE].string_list, g_strdup(interface_name));
217 netconfig_setting_save();
220 GSList *netconfig_setting_get_interfaces_off_by_airplane(void)
222 return netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_AIRPLANE].string_list;
225 void netconfig_setting_update_interface_off_for_restricted(const char *interface_name,
228 GSList *list = netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_RESTRICTED].string_list;
231 for ( ; list; list = list->next) {
232 const char *ifname = list->data;
233 if (g_strcmp0(ifname, interface_name) == 0) {
235 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_RESTRICTED].string_list = g_slist_remove(
236 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_RESTRICTED].string_list, ifname);
243 if (mode == TRUE && find == FALSE)
244 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_RESTRICTED].string_list = g_slist_append(
245 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_RESTRICTED].string_list, g_strdup(interface_name));
247 netconfig_setting_save();
250 GSList *netconfig_setting_get_interfaces_off_by_restricted(void)
252 return netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_RESTRICTED].string_list;
255 void netconfig_setting_update_interface_off_for_emergency(const char *interface_name,
258 GSList *list = netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_EMERGENCY].string_list;
261 for ( ; list; list = list->next) {
262 const char *ifname = list->data;
263 if (g_strcmp0(ifname, interface_name) == 0) {
265 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_EMERGENCY].string_list = g_slist_remove(
266 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_EMERGENCY].string_list, ifname);
273 if (mode == TRUE && find == FALSE)
274 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_EMERGENCY].string_list = g_slist_append(
275 netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_EMERGENCY].string_list, g_strdup(interface_name));
277 netconfig_setting_save();
280 GSList *netconfig_setting_get_interfaces_off_by_emergency(void)
282 return netconfig_setting_data[SETTING_TYPE_WIFI_OFF_BY_EMERGENCY].string_list;