~ubuntu-branches/ubuntu/saucy/wpasupplicant/saucy

« back to all changes in this revision

Viewing changes to src/drivers/driver_osx.m

  • Committer: Bazaar Package Importer
  • Author(s): Mathieu Trudel-Lapierre
  • Date: 2010-11-22 09:43:43 UTC
  • mfrom: (1.1.16 upstream)
  • Revision ID: james.westby@ubuntu.com-20101122094343-qgsxaojvmswfri77
Tags: 0.7.3-0ubuntu1
* Get wpasupplicant 0.7.3 from Debian's SVN. Leaving 0.7.3-1 as unreleased
  for now.
* Build-Depend on debhelper 8, since the packaging from Debian uses compat 8.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
#include "common.h"
21
21
#include "driver.h"
22
22
#include "eloop.h"
 
23
#include "common/ieee802_11_defs.h"
23
24
 
24
25
#include "Apple80211.h"
25
26
 
111
112
}
112
113
 
113
114
 
114
 
static int wpa_driver_osx_scan(void *priv, const u8 *ssid, size_t ssid_len)
 
115
static int wpa_driver_osx_scan(void *priv, struct wpa_driver_scan_params *params)
115
116
{
116
117
        struct wpa_driver_osx_data *drv = priv;
117
118
        WirelessError err;
 
119
        const u8 *ssid = params->ssids[0].ssid;
 
120
        size_t ssid_len = params->ssids[0].ssid_len;
118
121
 
119
122
        if (drv->scan_results) {
120
123
                CFRelease(drv->scan_results);
156
159
}
157
160
 
158
161
 
159
 
static int wpa_driver_osx_get_scan_results(void *priv,
160
 
                                           struct wpa_scan_result *results,
161
 
                                           size_t max_size)
 
162
static void wpa_driver_osx_add_scan_entry(struct wpa_scan_results *res,
 
163
                                          WirelessNetworkInfo *info)
 
164
{
 
165
        struct wpa_scan_res *result, **tmp;
 
166
        size_t extra_len;
 
167
        u8 *pos;
 
168
 
 
169
        extra_len = 2 + info->ssid_len;
 
170
 
 
171
        result = os_zalloc(sizeof(*result) + extra_len);
 
172
        if (result == NULL)
 
173
                return;
 
174
        os_memcpy(result->bssid, info->bssid, ETH_ALEN);
 
175
        result->freq = 2407 + info->channel * 5;
 
176
        //result->beacon_int =;
 
177
        result->caps = info->capability;
 
178
        //result->qual = info->signal;
 
179
        result->noise = info->noise;
 
180
 
 
181
        pos = (u8 *)(result + 1);
 
182
 
 
183
        *pos++ = WLAN_EID_SSID;
 
184
        *pos++ = info->ssid_len;
 
185
        os_memcpy(pos, info->ssid, info->ssid_len);
 
186
        pos += info->ssid_len;
 
187
 
 
188
        result->ie_len = pos - (u8 *)(result + 1);
 
189
 
 
190
        tmp = os_realloc(res->res,
 
191
                         (res->num + 1) * sizeof(struct wpa_scan_res *));
 
192
        if (tmp == NULL) {
 
193
                os_free(result);
 
194
                return;
 
195
        }
 
196
        tmp[res->num++] = result;
 
197
        res->res = tmp;
 
198
}
 
199
 
 
200
 
 
201
static struct wpa_scan_results * wpa_driver_osx_get_scan_results(void *priv)
162
202
{
163
203
        struct wpa_driver_osx_data *drv = priv;
 
204
        struct wpa_scan_results *res;
164
205
        size_t i, num;
165
206
 
166
207
        if (drv->scan_results == NULL)
167
208
                return 0;
168
209
 
169
210
        num = CFArrayGetCount(drv->scan_results);
170
 
        if (num > max_size)
171
 
                num = max_size;
172
 
        os_memset(results, 0, num * sizeof(struct wpa_scan_result));
173
 
 
174
 
        for (i = 0; i < num; i++) {
175
 
                struct wpa_scan_result *res = &results[i];
176
 
                WirelessNetworkInfo *info;
177
 
                info = (WirelessNetworkInfo *)
 
211
 
 
212
        res = os_zalloc(sizeof(*res));
 
213
        if (res == NULL)
 
214
                return NULL;
 
215
 
 
216
        for (i = 0; i < num; i++)
 
217
                wpa_driver_osx_add_scan_entry(res, (WirelessNetworkInfo *)
178
218
                        CFDataGetBytePtr(CFArrayGetValueAtIndex(
179
 
                                                 drv->scan_results, i));
180
 
 
181
 
                os_memcpy(res->bssid, info->bssid, ETH_ALEN);
182
 
                if (info->ssid_len > 32) {
183
 
                        wpa_printf(MSG_DEBUG, "OSX: Invalid SSID length %d in "
184
 
                                   "scan results", (int) info->ssid_len);
185
 
                        continue;
186
 
                }
187
 
                os_memcpy(res->ssid, info->ssid, info->ssid_len);
188
 
                res->ssid_len = info->ssid_len;
189
 
                res->caps = info->capability;
190
 
                res->freq = 2407 + info->channel * 5;
191
 
                res->level = info->signal;
192
 
                res->noise = info->noise;
193
 
        }
194
 
 
195
 
        return num;
 
219
                                drv->scan_results, i)));
 
220
 
 
221
        return res;
196
222
}
197
223
 
198
224
 
277
303
}
278
304
 
279
305
 
280
 
static int wpa_driver_osx_set_key(void *priv, wpa_alg alg, const u8 *addr,
 
306
static int wpa_driver_osx_set_key(const char *ifname, void *priv,
 
307
                                  enum wpa_alg alg, const u8 *addr,
281
308
                                  int key_idx, int set_tx, const u8 *seq,
282
309
                                  size_t seq_len, const u8 *key,
283
310
                                  size_t key_len)
424
451
        .get_bssid = wpa_driver_osx_get_bssid,
425
452
        .init = wpa_driver_osx_init,
426
453
        .deinit = wpa_driver_osx_deinit,
427
 
        .scan = wpa_driver_osx_scan,
428
 
        .get_scan_results = wpa_driver_osx_get_scan_results,
 
454
        .scan2 = wpa_driver_osx_scan,
 
455
        .get_scan_results2 = wpa_driver_osx_get_scan_results,
429
456
        .associate = wpa_driver_osx_associate,
430
457
        .set_key = wpa_driver_osx_set_key,
431
458
        .get_capa = wpa_driver_osx_get_capa,