13aff2d1de59972684bf2ab798351be5544158239San Mehat/*
23aff2d1de59972684bf2ab798351be5544158239San Mehat * Copyright (C) 2008 The Android Open Source Project
33aff2d1de59972684bf2ab798351be5544158239San Mehat *
43aff2d1de59972684bf2ab798351be5544158239San Mehat * Licensed under the Apache License, Version 2.0 (the "License");
53aff2d1de59972684bf2ab798351be5544158239San Mehat * you may not use this file except in compliance with the License.
63aff2d1de59972684bf2ab798351be5544158239San Mehat * You may obtain a copy of the License at
73aff2d1de59972684bf2ab798351be5544158239San Mehat *
83aff2d1de59972684bf2ab798351be5544158239San Mehat *      http://www.apache.org/licenses/LICENSE-2.0
93aff2d1de59972684bf2ab798351be5544158239San Mehat *
103aff2d1de59972684bf2ab798351be5544158239San Mehat * Unless required by applicable law or agreed to in writing, software
113aff2d1de59972684bf2ab798351be5544158239San Mehat * distributed under the License is distributed on an "AS IS" BASIS,
123aff2d1de59972684bf2ab798351be5544158239San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133aff2d1de59972684bf2ab798351be5544158239San Mehat * See the License for the specific language governing permissions and
143aff2d1de59972684bf2ab798351be5544158239San Mehat * limitations under the License.
153aff2d1de59972684bf2ab798351be5544158239San Mehat */
163aff2d1de59972684bf2ab798351be5544158239San Mehat
173aff2d1de59972684bf2ab798351be5544158239San Mehat#include <stdlib.h>
183aff2d1de59972684bf2ab798351be5544158239San Mehat
193aff2d1de59972684bf2ab798351be5544158239San Mehat#define LOG_TAG "SupplicantAssociatingEvent"
203aff2d1de59972684bf2ab798351be5544158239San Mehat#include <cutils/log.h>
213aff2d1de59972684bf2ab798351be5544158239San Mehat
223aff2d1de59972684bf2ab798351be5544158239San Mehat#include "SupplicantAssociatingEvent.h"
233aff2d1de59972684bf2ab798351be5544158239San Mehat
243aff2d1de59972684bf2ab798351be5544158239San MehatSupplicantAssociatingEvent::SupplicantAssociatingEvent(int level, char *event,
253aff2d1de59972684bf2ab798351be5544158239San Mehat                                                     size_t len) :
263aff2d1de59972684bf2ab798351be5544158239San Mehat                           SupplicantEvent(SupplicantEvent::EVENT_ASSOCIATING,
273aff2d1de59972684bf2ab798351be5544158239San Mehat                                           level) {
283aff2d1de59972684bf2ab798351be5544158239San Mehat    char *p = event;
293aff2d1de59972684bf2ab798351be5544158239San Mehat
303aff2d1de59972684bf2ab798351be5544158239San Mehat    mBssid = NULL;
313aff2d1de59972684bf2ab798351be5544158239San Mehat    mSsid = NULL;
32bbe92c370a614316d6320e8030b266f20b4fee0eSan Mehat    mFreq = -1;
333aff2d1de59972684bf2ab798351be5544158239San Mehat
343aff2d1de59972684bf2ab798351be5544158239San Mehat    // SSID 'default'
353aff2d1de59972684bf2ab798351be5544158239San Mehat    // OR
363aff2d1de59972684bf2ab798351be5544158239San Mehat    // "00:13:46:40:40:aa (SSID='default' freq=2437 MHz)"
373aff2d1de59972684bf2ab798351be5544158239San Mehat
383aff2d1de59972684bf2ab798351be5544158239San Mehat    if (strncmp(event, "SSID", 4)) {
393aff2d1de59972684bf2ab798351be5544158239San Mehat        mBssid = (char *) malloc(18);
403aff2d1de59972684bf2ab798351be5544158239San Mehat        strncpy(mBssid, p, 17);
413aff2d1de59972684bf2ab798351be5544158239San Mehat        mBssid[17] = '\0';
423aff2d1de59972684bf2ab798351be5544158239San Mehat        p += 25;
433aff2d1de59972684bf2ab798351be5544158239San Mehat
443aff2d1de59972684bf2ab798351be5544158239San Mehat        // "00:13:46:40:40:aa (SSID='default' freq=2437 MHz)"
453aff2d1de59972684bf2ab798351be5544158239San Mehat        //                           ^
463aff2d1de59972684bf2ab798351be5544158239San Mehat        //                           p
473aff2d1de59972684bf2ab798351be5544158239San Mehat        char *q = index(p, '\'');
483aff2d1de59972684bf2ab798351be5544158239San Mehat        if (!q) {
493aff2d1de59972684bf2ab798351be5544158239San Mehat            LOGE("Unable to decode SSID (p = {%s})\n", p);
503aff2d1de59972684bf2ab798351be5544158239San Mehat            return;
513aff2d1de59972684bf2ab798351be5544158239San Mehat        }
523aff2d1de59972684bf2ab798351be5544158239San Mehat        mSsid = (char *) malloc((q - p) +1);
533aff2d1de59972684bf2ab798351be5544158239San Mehat        strncpy(mSsid, p, q-p);
543aff2d1de59972684bf2ab798351be5544158239San Mehat        mSsid[q-p] = '\0';
553aff2d1de59972684bf2ab798351be5544158239San Mehat
563aff2d1de59972684bf2ab798351be5544158239San Mehat        p = q + 7;
573aff2d1de59972684bf2ab798351be5544158239San Mehat
583aff2d1de59972684bf2ab798351be5544158239San Mehat        // "00:13:46:40:40:aa (SSID='default' freq=2437 MHz)"
593aff2d1de59972684bf2ab798351be5544158239San Mehat        //                                         ^
603aff2d1de59972684bf2ab798351be5544158239San Mehat        //                                         p
613aff2d1de59972684bf2ab798351be5544158239San Mehat        if (!(q = index(p, ' '))) {
623aff2d1de59972684bf2ab798351be5544158239San Mehat            LOGE("Unable to decode frequency\n");
633aff2d1de59972684bf2ab798351be5544158239San Mehat            return;
643aff2d1de59972684bf2ab798351be5544158239San Mehat        }
653aff2d1de59972684bf2ab798351be5544158239San Mehat        *q = '\0';
663aff2d1de59972684bf2ab798351be5544158239San Mehat        mFreq = atoi(p);
673aff2d1de59972684bf2ab798351be5544158239San Mehat    } else {
683aff2d1de59972684bf2ab798351be5544158239San Mehat        p+= 6;
693aff2d1de59972684bf2ab798351be5544158239San Mehat
703aff2d1de59972684bf2ab798351be5544158239San Mehat        // SSID 'default'
713aff2d1de59972684bf2ab798351be5544158239San Mehat        //       ^
723aff2d1de59972684bf2ab798351be5544158239San Mehat        //       p
733aff2d1de59972684bf2ab798351be5544158239San Mehat
743aff2d1de59972684bf2ab798351be5544158239San Mehat        char *q = index(p, '\'');
753aff2d1de59972684bf2ab798351be5544158239San Mehat        if (!q) {
763aff2d1de59972684bf2ab798351be5544158239San Mehat            LOGE("Unable to decode SSID (p = {%s})\n", p);
773aff2d1de59972684bf2ab798351be5544158239San Mehat            return;
783aff2d1de59972684bf2ab798351be5544158239San Mehat        }
793aff2d1de59972684bf2ab798351be5544158239San Mehat        mSsid = (char *) malloc((q - p) +1);
803aff2d1de59972684bf2ab798351be5544158239San Mehat        strncpy(mSsid, p, q-p);
813aff2d1de59972684bf2ab798351be5544158239San Mehat        mSsid[q-p] = '\0';
823aff2d1de59972684bf2ab798351be5544158239San Mehat    }
833aff2d1de59972684bf2ab798351be5544158239San Mehat}
843aff2d1de59972684bf2ab798351be5544158239San Mehat
853aff2d1de59972684bf2ab798351be5544158239San MehatSupplicantAssociatingEvent::SupplicantAssociatingEvent(const char *bssid,
863aff2d1de59972684bf2ab798351be5544158239San Mehat                                                     const char *ssid,
873aff2d1de59972684bf2ab798351be5544158239San Mehat                                                     int freq) :
883aff2d1de59972684bf2ab798351be5544158239San Mehat                           SupplicantEvent(SupplicantEvent::EVENT_ASSOCIATING, -1) {
893aff2d1de59972684bf2ab798351be5544158239San Mehat    mBssid = strdup(bssid);
903aff2d1de59972684bf2ab798351be5544158239San Mehat    mSsid= strdup(ssid);
913aff2d1de59972684bf2ab798351be5544158239San Mehat    mFreq = freq;
923aff2d1de59972684bf2ab798351be5544158239San Mehat}
933aff2d1de59972684bf2ab798351be5544158239San Mehat
943aff2d1de59972684bf2ab798351be5544158239San MehatSupplicantAssociatingEvent::~SupplicantAssociatingEvent() {
953aff2d1de59972684bf2ab798351be5544158239San Mehat    if (mBssid)
963aff2d1de59972684bf2ab798351be5544158239San Mehat        free(mBssid);
973aff2d1de59972684bf2ab798351be5544158239San Mehat    if (mSsid)
983aff2d1de59972684bf2ab798351be5544158239San Mehat        free(mSsid);
993aff2d1de59972684bf2ab798351be5544158239San Mehat}
1003aff2d1de59972684bf2ab798351be5544158239San Mehat
101