diff options
author | Vitaly Buka <vitalybuka@google.com> | 2016-02-01 14:41:45 -0800 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2016-02-02 16:53:19 +0000 |
commit | 6a1ba84d9b295dcc0c8f50b580182a665c4aa8ce (patch) | |
tree | 7073cee59d1b19d84abb3fea3d828b2c6a61722b | |
parent | 329ad806d155a45f5450f998801b5ca16351bc88 (diff) | |
download | libweave-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.h | 2 | ||||
-rw-r--r-- | include/weave/provider/test/mock_wifi.h | 2 | ||||
-rw-r--r-- | include/weave/provider/wifi.h | 3 | ||||
-rw-r--r-- | src/privet/wifi_bootstrap_manager.cc | 16 | ||||
-rw-r--r-- | src/privet/wifi_ssid_generator.cc | 17 | ||||
-rw-r--r-- | src/privet/wifi_ssid_generator.h | 2 | ||||
-rw-r--r-- | src/privet/wifi_ssid_generator_unittest.cc | 28 | ||||
-rw-r--r-- | src/weave_unittest.cc | 5 |
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, |