Re: [PATCH fast connect v2 5/5] wifi: Add SSIDs and frequencies to wpa_supplicant scan for fast scan.

2011-09-05 Thread Jukka Rissanen

Hi Marcel,

On 09/05/2011 01:40 PM, Marcel Holtmann wrote:

Hi Patrik,


+   keyfile = g_key_file_new();
+
+   if (g_file_get_contents(pathname,&data,&length, NULL) == FALSE) {
+   g_free(pathname);
+   return -ENOENT;
+   }
+
+   g_free(pathname);
+
+   if (g_key_file_load_from_data(keyfile, data, length,
+   0, NULL) == FALSE) {
+   g_free(data);
+   return -EILSEQ;
+   }


Here we should free 'keyfile' before both return statements? And perhaps
move 'keyfile' creation after g_file_get_contents statements have been
processed(?).


as a side note, we should use mmap() instead of g_file_get_contents()
since there is little point in allocating our memory for a file that we
just read once and then free again.


We should probably use g_key_file_load_from_file() here instead of 
g_file_get_contents() while waiting for Alok's config file loading 
patches. Also the keyfile was not freed.





Regards

Marcel



Jukka
___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman


Re: [PATCH fast connect v2 5/5] wifi: Add SSIDs and frequencies to wpa_supplicant scan for fast scan.

2011-09-05 Thread Marcel Holtmann
Hi Patrik,

> > +   keyfile = g_key_file_new();
> > +
> > +   if (g_file_get_contents(pathname, &data, &length, NULL) == FALSE) {
> > +   g_free(pathname);
> > +   return -ENOENT;
> > +   }
> > +
> > +   g_free(pathname);
> > +
> > +   if (g_key_file_load_from_data(keyfile, data, length,
> > +   0, NULL) == FALSE) {
> > +   g_free(data);
> > +   return -EILSEQ;
> > +   }
> 
> Here we should free 'keyfile' before both return statements? And perhaps
> move 'keyfile' creation after g_file_get_contents statements have been
> processed(?).

as a side note, we should use mmap() instead of g_file_get_contents()
since there is little point in allocating our memory for a file that we
just read once and then free again.

Regards

Marcel


___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman


Re: [PATCH fast connect v2 5/5] wifi: Add SSIDs and frequencies to wpa_supplicant scan for fast scan.

2011-09-05 Thread Patrik Flykt
On Thu, 2011-08-25 at 16:27 +0300, Jukka Rissanen wrote:
> +   keyfile = g_key_file_new();
> +
> +   if (g_file_get_contents(pathname, &data, &length, NULL) == FALSE) {
> +   g_free(pathname);
> +   return -ENOENT;
> +   }
> +
> +   g_free(pathname);
> +
> +   if (g_key_file_load_from_data(keyfile, data, length,
> +   0, NULL) == FALSE) {
> +   g_free(data);
> +   return -EILSEQ;
> +   }

Here we should free 'keyfile' before both return statements? And perhaps
move 'keyfile' creation after g_file_get_contents statements have been
processed(?).

Cheers,

Patrik


___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman


Re: [PATCH fast connect v2 5/5] wifi: Add SSIDs and frequencies to wpa_supplicant scan for fast scan.

2011-09-05 Thread Patrik Flykt

Hi,

On Thu, 2011-08-25 at 16:27 +0300, Jukka Rissanen wrote:
> +static void add_scan_frequency(DBusMessageIter *iter, unsigned int freq)
> +{
> +   DBusMessageIter data;
> +   unsigned int width;
> +
> +   dbus_message_iter_open_container(iter, DBUS_TYPE_STRUCT, NULL, &data);
> +
> +   dbus_message_iter_append_basic(&data, DBUS_TYPE_UINT32, &freq);
> +   dbus_message_iter_append_basic(&data, DBUS_TYPE_UINT32, &width);

'width' doesn't have a value but is used.

Patrik

___
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman


[PATCH fast connect v2 5/5] wifi: Add SSIDs and frequencies to wpa_supplicant scan for fast scan.

2011-08-25 Thread Jukka Rissanen
From: Mohamed Abbas 

Quite many fixes by Jukka Rissanen 
---
 gsupplicant/gsupplicant.h |   16 
 gsupplicant/supplicant.c  |  135 -
 plugins/wifi.c|  206 -
 3 files changed, 348 insertions(+), 9 deletions(-)

diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h
index 1419157..c409a4c 100644
--- a/gsupplicant/gsupplicant.h
+++ b/gsupplicant/gsupplicant.h
@@ -73,6 +73,8 @@ extern "C" {
 #define G_SUPPLICANT_PAIRWISE_TKIP (1 << 1)
 #define G_SUPPLICANT_PAIRWISE_CCMP (1 << 2)
 
+#define G_SUPPLICANT_MAX_FAST_SCAN 4
+
 typedef enum {
G_SUPPLICANT_MODE_UNKNOWN,
G_SUPPLICANT_MODE_INFRA,
@@ -131,6 +133,19 @@ struct _GSupplicantSSID {
 
 typedef struct _GSupplicantSSID GSupplicantSSID;
 
+struct _GSupplicantScanParams {
+   struct scan_ssid {
+   unsigned char ssid[32];
+   uint8_t ssid_len;
+   } ssids[G_SUPPLICANT_MAX_FAST_SCAN];
+
+   uint8_t num_ssids;
+
+   uint16_t freqs[G_SUPPLICANT_MAX_FAST_SCAN];
+};
+
+typedef struct _GSupplicantScanParams GSupplicantScanParams;
+
 /* global API */
 typedef void (*GSupplicantCountryCallback) (void *user_data);
 
@@ -155,6 +170,7 @@ int g_supplicant_interface_remove(GSupplicantInterface 
*interface,
GSupplicantInterfaceCallback callback,
void *user_data);
 int g_supplicant_interface_scan(GSupplicantInterface *interface,
+   GSupplicantScanParams *scan_data,
GSupplicantInterfaceCallback callback,
void *user_data);
 
diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c
index edc9279..3212606 100644
--- a/gsupplicant/supplicant.c
+++ b/gsupplicant/supplicant.c
@@ -2113,6 +2113,13 @@ struct interface_connect_data {
void *user_data;
 };
 
+struct interface_scan_data {
+   GSupplicantInterface *interface;
+   GSupplicantInterfaceCallback callback;
+   GSupplicantScanParams *scan_params;
+   void *user_data;
+};
+
 static void interface_create_property(const char *key, DBusMessageIter *iter,
void *user_data)
 {
@@ -2368,9 +2375,11 @@ int g_supplicant_interface_remove(GSupplicantInterface 
*interface,
 static void interface_scan_result(const char *error,
DBusMessageIter *iter, void *user_data)
 {
-   struct interface_data *data = user_data;
+   struct interface_scan_data *data = user_data;
 
if (error != NULL) {
+   SUPPLICANT_DBG("error %s", error);
+
if (data->callback != NULL)
data->callback(-EIO, data->interface, data->user_data);
} else {
@@ -2378,27 +2387,137 @@ static void interface_scan_result(const char *error,
data->interface->scan_data = data->user_data;
}
 
+   if (data != NULL && data->scan_params != NULL)
+   g_free(data->scan_params);
+
dbus_free(data);
 }
 
+static void add_scan_frequency(DBusMessageIter *iter, unsigned int freq)
+{
+   DBusMessageIter data;
+   unsigned int width;
+
+   dbus_message_iter_open_container(iter, DBUS_TYPE_STRUCT, NULL, &data);
+
+   dbus_message_iter_append_basic(&data, DBUS_TYPE_UINT32, &freq);
+   dbus_message_iter_append_basic(&data, DBUS_TYPE_UINT32, &width);
+
+   dbus_message_iter_close_container(iter, &data);
+}
+
+static void add_scan_frequencies(DBusMessageIter *iter,
+   void *user_data)
+{
+   GSupplicantScanParams *scan_data = user_data;
+   unsigned int freq;
+   int i;
+
+   for (i = 0; i < G_SUPPLICANT_MAX_FAST_SCAN; i++) {
+   freq = scan_data->freqs[i];
+   if (!freq)
+   break;
+
+   add_scan_frequency(iter, freq);
+   }
+}
+
+static void append_ssid(DBusMessageIter *iter,
+   const void *ssid, unsigned int len)
+{
+   DBusMessageIter array;
+
+   dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
+   DBUS_TYPE_BYTE_AS_STRING, &array);
+
+   dbus_message_iter_append_fixed_array(&array, DBUS_TYPE_BYTE,
+   &ssid, len);
+   dbus_message_iter_close_container(iter, &array);
+}
+
+static void append_ssids(DBusMessageIter *iter, void *user_data)
+{
+   GSupplicantScanParams *scan_data = user_data;
+   int i;
+
+   for (i = 0; i < scan_data->num_ssids; i++)
+   append_ssid(iter, scan_data->ssids[i].ssid,
+   scan_data->ssids[i].ssid_len);
+}
+
+static void supplicant_add_scan_frequency(DBusMessageIter *dict,
+   supplicant_dbus_array_function function,
+