aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2016-02-01 14:41:45 -0800
committerVitaly Buka <vitalybuka@google.com>2016-02-02 16:53:19 +0000
commit6a1ba84d9b295dcc0c8f50b580182a665c4aa8ce (patch)
tree7073cee59d1b19d84abb3fea3d828b2c6a61722b
parent329ad806d155a45f5450f998801b5ca16351bc88 (diff)
downloadlibweave-6a1ba84d9b295dcc0c8f50b580182a665c4aa8ce.tar.gz
Changed meaning of some SSID flags
Added "WiFi 2.4Ghz" support flag. Added "WiFi 5.0Ghz" support flag. Make "WiFi Setup" flag more aggressive, (!online && !configured). BUG: 26570030 BUG: 25820726 BUG: 22558499 Change-Id: I6fedc6abe863ab1de40ad5b0763ece2369b61c06 Reviewed-on: https://weave-review.googlesource.com/2436 Reviewed-by: Vitaly Buka <vitalybuka@google.com>
-rw-r--r--examples/provider/wifi_manager.h2
-rw-r--r--include/weave/provider/test/mock_wifi.h2
-rw-r--r--include/weave/provider/wifi.h3
-rw-r--r--src/privet/wifi_bootstrap_manager.cc16
-rw-r--r--src/privet/wifi_ssid_generator.cc17
-rw-r--r--src/privet/wifi_ssid_generator.h2
-rw-r--r--src/privet/wifi_ssid_generator_unittest.cc28
-rw-r--r--src/weave_unittest.cc5
8 files changed, 53 insertions, 22 deletions
diff --git a/examples/provider/wifi_manager.h b/examples/provider/wifi_manager.h
index 2bfc5ca..72f54df 100644
--- a/examples/provider/wifi_manager.h
+++ b/examples/provider/wifi_manager.h
@@ -35,6 +35,8 @@ class WifiImpl : public provider::Wifi {
const DoneCallback& callback) override;
void StartAccessPoint(const std::string& ssid) override;
void StopAccessPoint() override;
+ bool IsWifi24Supported() const override {return true;};
+ bool IsWifi50Supported() const override {return false;};
static bool HasWifiCapability();
diff --git a/include/weave/provider/test/mock_wifi.h b/include/weave/provider/test/mock_wifi.h
index 9fbe10f..7ede55e 100644
--- a/include/weave/provider/test/mock_wifi.h
+++ b/include/weave/provider/test/mock_wifi.h
@@ -23,6 +23,8 @@ class MockWifi : public Wifi {
const DoneCallback&));
MOCK_METHOD1(StartAccessPoint, void(const std::string&));
MOCK_METHOD0(StopAccessPoint, void());
+ MOCK_CONST_METHOD0(IsWifi24Supported, bool());
+ MOCK_CONST_METHOD0(IsWifi50Supported, bool());
};
} // namespace test
diff --git a/include/weave/provider/wifi.h b/include/weave/provider/wifi.h
index 48ac651..9c7cfca 100644
--- a/include/weave/provider/wifi.h
+++ b/include/weave/provider/wifi.h
@@ -28,6 +28,9 @@ class Wifi {
// Stops WiFi access point.
virtual void StopAccessPoint() = 0;
+ virtual bool IsWifi24Supported() const = 0;
+ virtual bool IsWifi50Supported() const = 0;
+
protected:
virtual ~Wifi() {}
};
diff --git a/src/privet/wifi_bootstrap_manager.cc b/src/privet/wifi_bootstrap_manager.cc
index 566da80..ce2016a 100644
--- a/src/privet/wifi_bootstrap_manager.cc
+++ b/src/privet/wifi_bootstrap_manager.cc
@@ -204,8 +204,12 @@ std::string WifiBootstrapManager::GetHostedSsid() const {
}
std::set<WifiType> WifiBootstrapManager::GetTypes() const {
- // TODO(wiley) This should do some system work to figure this out.
- return {WifiType::kWifi24};
+ std::set<WifiType> result;
+ if (wifi_->IsWifi24Supported())
+ result.insert(WifiType::kWifi24);
+ if (wifi_->IsWifi50Supported())
+ result.insert(WifiType::kWifi50);
+ return result;
}
void WifiBootstrapManager::OnConnectDone(const std::string& ssid,
@@ -255,9 +259,15 @@ void WifiBootstrapManager::OnMonitorTimeout() {
void WifiBootstrapManager::UpdateConnectionState() {
connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
-
Network::State service_state{network_->GetConnectionState()};
VLOG(3) << "New network state: " << EnumToString(service_state);
+
+ // TODO: Make it true wifi state, currently it's rather online state.
+ if (service_state != Network::State::kOnline &&
+ config_->GetSettings().last_configured_ssid.empty()) {
+ return;
+ }
+
switch (service_state) {
case Network::State::kOffline:
connection_state_ = ConnectionState{ConnectionState::kOffline};
diff --git a/src/privet/wifi_ssid_generator.cc b/src/privet/wifi_ssid_generator.cc
index 697e5d8..4ad1602 100644
--- a/src/privet/wifi_ssid_generator.cc
+++ b/src/privet/wifi_ssid_generator.cc
@@ -52,20 +52,27 @@ WifiSsidGenerator::WifiSsidGenerator(const CloudDelegate* cloud,
}
std::string WifiSsidGenerator::GenerateFlags() const {
- return GenerateFlagsInternal(false);
+ return GenerateFlagsInternal();
}
-std::string WifiSsidGenerator::GenerateFlagsInternal(bool for_ssid) const {
+std::string WifiSsidGenerator::GenerateFlagsInternal() const {
std::bitset<6> flags1;
// Device needs WiFi configuration.
flags1[0] = wifi_ && IsSetupNeeded(wifi_->GetConnectionState());
+
// Device needs GCD registration.
flags1[1] = IsSetupNeeded(gcd_->GetConnectionState());
std::bitset<6> flags2;
- // Device is discoverable over WiFi.
- flags2[0] = for_ssid || (wifi_ && !wifi_->GetHostedSsid().empty());
+ if (wifi_) {
+ std::set<WifiType> types = wifi_->GetTypes();
+ // Device supports 2.4Ghz WiFi networks.
+ flags2[0] = types.find(WifiType::kWifi24) != types.end();
+
+ // Device supports 5.0Ghz WiFi networks.
+ flags2[1] = types.find(WifiType::kWifi50) != types.end();
+ }
std::string result{2, base64chars[0]};
result[0] = base64chars[flags1.to_ulong()];
@@ -82,7 +89,7 @@ std::string WifiSsidGenerator::GenerateSsid() const {
std::string result =
base::StringPrintf(kSsidFormat, name.c_str(), idx.c_str(),
- model_id.c_str(), GenerateFlagsInternal(true).c_str());
+ model_id.c_str(), GenerateFlagsInternal().c_str());
CHECK_EQ(result[result.size() - 11], '.');
return result;
}
diff --git a/src/privet/wifi_ssid_generator.h b/src/privet/wifi_ssid_generator.h
index 2b86f28..1197e73 100644
--- a/src/privet/wifi_ssid_generator.h
+++ b/src/privet/wifi_ssid_generator.h
@@ -30,7 +30,7 @@ class WifiSsidGenerator final {
// Sets object to use |n| instead of random number for SSID generation.
void SetRandomForTests(int n);
- std::string GenerateFlagsInternal(bool for_ssid) const;
+ std::string GenerateFlagsInternal() const;
const CloudDelegate* gcd_{nullptr};
const WifiDelegate* wifi_{nullptr};
diff --git a/src/privet/wifi_ssid_generator_unittest.cc b/src/privet/wifi_ssid_generator_unittest.cc
index 10680c8..406576d 100644
--- a/src/privet/wifi_ssid_generator_unittest.cc
+++ b/src/privet/wifi_ssid_generator_unittest.cc
@@ -22,40 +22,44 @@ class WifiSsidGeneratorTest : public testing::Test {
WifiSsidGenerator ssid_generator_{&gcd_, &wifi_};
};
-TEST_F(WifiSsidGeneratorTest, GenerateFlagsNoHostedAp) {
+TEST_F(WifiSsidGeneratorTest, GenerateFlagsWithWifi24) {
+ EXPECT_CALL(wifi_, GetTypes())
+ .WillRepeatedly(Return(std::set<WifiType>{WifiType::kWifi24}));
+
EXPECT_EQ(ssid_generator_.GenerateFlags().size(), 2u);
wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
gcd_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
- EXPECT_EQ("DA", ssid_generator_.GenerateFlags());
+ EXPECT_EQ("DB", ssid_generator_.GenerateFlags());
wifi_.connection_state_ = ConnectionState{ConnectionState::kOnline};
- EXPECT_EQ("CA", ssid_generator_.GenerateFlags());
+ EXPECT_EQ("CB", ssid_generator_.GenerateFlags());
gcd_.connection_state_ = ConnectionState{ConnectionState::kOffline};
- EXPECT_EQ("AA", ssid_generator_.GenerateFlags());
+ EXPECT_EQ("AB", ssid_generator_.GenerateFlags());
wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
- EXPECT_EQ("BA", ssid_generator_.GenerateFlags());
+ EXPECT_EQ("BB", ssid_generator_.GenerateFlags());
}
-TEST_F(WifiSsidGeneratorTest, GenerateFlagsWithHostedAp) {
- EXPECT_CALL(wifi_, GetHostedSsid())
- .WillRepeatedly(Return(ssid_generator_.GenerateSsid()));
+TEST_F(WifiSsidGeneratorTest, GenerateFlagsWithWifi50) {
+ EXPECT_CALL(wifi_, GetTypes())
+ .WillRepeatedly(Return(std::set<WifiType>{WifiType::kWifi50}));
+
EXPECT_EQ(ssid_generator_.GenerateFlags().size(), 2u);
wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
gcd_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
- EXPECT_EQ("DB", ssid_generator_.GenerateFlags());
+ EXPECT_EQ("DC", ssid_generator_.GenerateFlags());
wifi_.connection_state_ = ConnectionState{ConnectionState::kOnline};
- EXPECT_EQ("CB", ssid_generator_.GenerateFlags());
+ EXPECT_EQ("CC", ssid_generator_.GenerateFlags());
gcd_.connection_state_ = ConnectionState{ConnectionState::kOffline};
- EXPECT_EQ("AB", ssid_generator_.GenerateFlags());
+ EXPECT_EQ("AC", ssid_generator_.GenerateFlags());
wifi_.connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
- EXPECT_EQ("BB", ssid_generator_.GenerateFlags());
+ EXPECT_EQ("BC", ssid_generator_.GenerateFlags());
}
TEST_F(WifiSsidGeneratorTest, GenerateSsid31orLess) {
diff --git a/src/weave_unittest.cc b/src/weave_unittest.cc
index ebc66cd..b300f57 100644
--- a/src/weave_unittest.cc
+++ b/src/weave_unittest.cc
@@ -181,7 +181,10 @@ std::set<typename Map::key_type> GetKeys(const Map& map) {
class WeaveTest : public ::testing::Test {
protected:
- void SetUp() override {}
+ void SetUp() override {
+ EXPECT_CALL(wifi_, IsWifi24Supported()).WillRepeatedly(Return(true));
+ EXPECT_CALL(wifi_, IsWifi50Supported()).WillRepeatedly(Return(false));
+ }
template <class UrlMatcher>
void ExpectRequest(HttpClient::Method method,