ipconfig: Add Function to Stringify ipconfig Type
[framework/connectivity/connman.git] / src / wifi.c
1 /*
2  *
3  *  Connection Manager
4  *
5  *  Copyright (C) 2007-2010  Intel Corporation. All rights reserved.
6  *
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.
10  *
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.
15  *
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
19  *
20  */
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25
26 #include <stdio.h>
27 #include <string.h>
28
29 #include <glib.h>
30
31 #include "connman.h"
32
33 char *connman_wifi_build_group_name(const unsigned char *ssid,
34                                                 unsigned int ssid_len,
35                                                         const char *mode,
36                                                         const char *security)
37 {
38         GString *str;
39         unsigned int i;
40
41         str = g_string_sized_new((ssid_len * 2) + 24);
42         if (str == NULL)
43                 return NULL;
44
45         if (ssid_len > 0 && ssid[0] != '\0') {
46                 for (i = 0; i < ssid_len; i++)
47                         g_string_append_printf(str, "%02x", ssid[i]);
48         }
49
50         g_string_append_printf(str, "_%s_%s", mode, security);
51
52         return g_string_free(str, FALSE);
53 }
54
55 char **connman_wifi_load_ssid(void)
56 {
57         GKeyFile *key_file;
58         const char * profile;
59         gchar **groups, *group;
60         gsize num_groups;
61         char **hex_ssids;
62         int i, j;
63
64         profile = __connman_profile_active_ident();
65
66         key_file = __connman_storage_open_profile(profile);
67         if (key_file == NULL)
68                 return NULL;
69
70         groups = g_key_file_get_groups(key_file, &num_groups);
71
72         hex_ssids = g_try_malloc0(sizeof(*hex_ssids) * (num_groups + 1));
73         if (hex_ssids == NULL)
74                 goto done;
75
76         for (i = 0, j = 0; groups[i]; i++) {
77                 gchar *hex_ssid;
78                 gboolean favorite;
79
80                 group = groups[i];
81
82                 favorite = g_key_file_get_boolean(key_file, group,
83                                                         "Favorite", NULL);
84                 if (favorite == FALSE)
85                         continue;
86
87                 hex_ssid = g_key_file_get_string(key_file, group,
88                                                         "SSID", NULL);
89                 if (hex_ssid == NULL)
90                         continue;
91
92                 hex_ssids[j++] = hex_ssid;
93         }
94
95         hex_ssids[j] = NULL;
96
97 done:
98         g_strfreev(groups);
99
100         __connman_storage_close_profile(profile, key_file, FALSE);
101
102         return hex_ssids;
103 }