5 * Copyright (C) 2007-2010 Intel Corporation. All rights reserved.
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
34 #define PROFILE_DEFAULT_IDENT "default"
36 struct connman_profile {
40 connman_bool_t offlinemode;
43 static struct connman_profile *default_profile = NULL;
45 static DBusConnection *connection = NULL;
47 connman_bool_t __connman_profile_get_offlinemode(void)
49 if (default_profile == NULL)
52 DBG("offlinemode %d", default_profile->offlinemode);
54 return default_profile->offlinemode;
57 int __connman_profile_set_offlinemode(connman_bool_t offlinemode)
59 DBG("offlinemode %d", offlinemode);
61 if (default_profile == NULL)
64 if (default_profile->offlinemode == offlinemode)
67 default_profile->offlinemode = offlinemode;
71 int __connman_profile_save_default(void)
75 if (default_profile != NULL)
76 __connman_storage_save_profile(default_profile);
81 const char *__connman_profile_active_ident(void)
85 return PROFILE_DEFAULT_IDENT;
88 const char *__connman_profile_active_path(void)
92 if (default_profile == NULL)
95 return default_profile->path;
98 static void free_profile(struct connman_profile *profile)
100 g_free(profile->name);
101 g_free(profile->path);
102 g_free(profile->ident);
106 static int profile_init(void)
110 default_profile = g_try_new0(struct connman_profile, 1);
111 if (default_profile == NULL)
114 default_profile->ident = g_strdup(PROFILE_DEFAULT_IDENT);
115 default_profile->path = g_strdup_printf("/profile/%s",
116 PROFILE_DEFAULT_IDENT);
118 if (default_profile->ident == NULL || default_profile->path == NULL) {
119 free_profile(default_profile);
123 default_profile->name = g_strdup("Default");
125 __connman_storage_load_profile(default_profile);
127 connman_info("Adding default profile");
129 DBG("profile %p path %s", default_profile, default_profile->path);
134 static int profile_load(struct connman_profile *profile)
137 GError *error = NULL;
138 connman_bool_t offlinemode;
141 DBG("profile %p", profile);
143 keyfile = __connman_storage_open_profile(profile->ident);
147 name = g_key_file_get_string(keyfile, "global", "Name", NULL);
149 g_free(profile->name);
150 profile->name = name;
153 offlinemode = g_key_file_get_boolean(keyfile, "global",
154 "OfflineMode", &error);
156 profile->offlinemode = offlinemode;
157 g_clear_error(&error);
159 __connman_storage_close_profile(profile->ident, keyfile, FALSE);
164 static int profile_save(struct connman_profile *profile)
168 DBG("profile %p", profile);
170 keyfile = __connman_storage_open_profile(profile->ident);
174 if (profile->name != NULL)
175 g_key_file_set_string(keyfile, "global",
176 "Name", profile->name);
178 g_key_file_set_boolean(keyfile, "global",
179 "OfflineMode", profile->offlinemode);
181 __connman_storage_close_profile(profile->ident, keyfile, TRUE);
186 static struct connman_storage profile_storage = {
188 .priority = CONNMAN_STORAGE_PRIORITY_LOW,
189 .profile_init = profile_init,
190 .profile_load = profile_load,
191 .profile_save = profile_save,
194 int __connman_profile_init(void)
198 connection = connman_dbus_get_connection();
199 if (connection == NULL)
202 if (connman_storage_register(&profile_storage) < 0)
203 connman_error("Failed to register profile storage");
208 void __connman_profile_cleanup(void)
212 if (connection == NULL)
215 connman_storage_unregister(&profile_storage);
217 dbus_connection_unref(connection);