blob: a153f38e7dc68becbc4bb769ac0d8d6405f90b44 [file] [log] [blame]
mukesh agrawalb54601c2011-06-07 17:39:22 -07001// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <base/stringprintf.h>
6#include <base/string_number_conversions.h>
7
8#include "shill/wifi_endpoint.h"
9
10using std::string;
11
12namespace shill {
13
14const char WiFiEndpoint::kSupplicantPropertySSID[] = "SSID";
15const char WiFiEndpoint::kSupplicantPropertyBSSID[] = "BSSID";
16const char WiFiEndpoint::kSupplicantPropertySignal[] = "Signal";
17const char WiFiEndpoint::kSupplicantPropertyMode[] = "Mode";
18
19const char WiFiEndpoint::kSupplicantNetworkModeInfrastructure[] =
20 "infrastructure";
21const char WiFiEndpoint::kSupplicantNetworkModeAdHoc[] = "ad-hoc";
22const char WiFiEndpoint::kSupplicantNetworkModeAccessPoint[] = "ap";
23
24const uint32_t WiFiEndpoint::kSupplicantNetworkModeInfrastructureInt = 0;
25const uint32_t WiFiEndpoint::kSupplicantNetworkModeAdHocInt = 1;
26const uint32_t WiFiEndpoint::kSupplicantNetworkModeAccessPointInt = 2;
27
28WiFiEndpoint::WiFiEndpoint(
29 const std::map<string, ::DBus::Variant> &properties) {
30 // XXX will segfault on missing properties
31 ssid_ =
32 properties.find(kSupplicantPropertySSID)->second.
33 operator std::vector<uint8_t>();
34 bssid_ =
35 properties.find(kSupplicantPropertyBSSID)->second.
36 operator std::vector<uint8_t>();
37 signal_strength_ =
38 properties.find(kSupplicantPropertySignal)->second;
39 network_mode_ = parse_mode(
40 properties.find(kSupplicantPropertyMode)->second);
41
42 if (network_mode_ < 0) {
43 // XXX log error?
44 }
45
46 ssid_string_ = string(ssid_.begin(), ssid_.end());
47 ssid_hex_ = base::HexEncode(&(*ssid_.begin()), ssid_.size());
48 bssid_string_ = StringPrintf("%02x:%02x:%02x:%02x:%02x:%02x",
49 bssid_[0], bssid_[1], bssid_[2],
50 bssid_[3], bssid_[4], bssid_[5]);
51 bssid_hex_ = base::HexEncode(&(*bssid_.begin()), bssid_.size());
52}
53
54WiFiEndpoint::~WiFiEndpoint() {}
55
56const std::vector<uint8_t> &WiFiEndpoint::ssid() const {
57 return ssid_;
58}
59
60const string &WiFiEndpoint::ssid_string() const {
61 return ssid_string_;
62}
63
64const string &WiFiEndpoint::ssid_hex() const {
65 return ssid_hex_;
66}
67
68const string &WiFiEndpoint::bssid_string() const {
69 return bssid_string_;
70}
71
72const string &WiFiEndpoint::bssid_hex() const {
73 return bssid_hex_;
74}
75
76int16_t WiFiEndpoint::signal_strength() const {
77 return signal_strength_;
78}
79
80uint32_t WiFiEndpoint::network_mode() const {
81 return network_mode_;
82}
83
84int32_t WiFiEndpoint::parse_mode(const std::string &mode_string) {
85 if (mode_string == kSupplicantNetworkModeInfrastructure) {
86 return kSupplicantNetworkModeInfrastructureInt;
87 } else if (mode_string == kSupplicantNetworkModeAdHoc) {
88 return kSupplicantNetworkModeAdHocInt;
89 } else if (mode_string == kSupplicantNetworkModeAccessPoint) {
90 return kSupplicantNetworkModeAccessPointInt;
91 } else {
92 return -1;
93 }
94}
95
96} // namespace shill