diff options
| author | Christopher Wiley <wiley@google.com> | 2016-07-27 13:48:22 -0700 |
|---|---|---|
| committer | Christopher Wiley <wiley@google.com> | 2016-08-02 15:53:31 -0700 |
| commit | c139fbf821d3c62523afbcf0950ebc2d1abaa93d (patch) | |
| tree | 1b195b2e620bd77bb396faa2771ad4e9d7e53064 /server.cpp | |
| parent | 2acbc1243c156aa13c54fcc4723a79f398da47ec (diff) | |
| download | platform_system_connectivity_wificond-c139fbf821d3c62523afbcf0950ebc2d1abaa93d.tar.gz platform_system_connectivity_wificond-c139fbf821d3c62523afbcf0950ebc2d1abaa93d.tar.bz2 platform_system_connectivity_wificond-c139fbf821d3c62523afbcf0950ebc2d1abaa93d.zip | |
Add support for creating client interfaces
Bug: 30041062
Test: unit/integration tests pass
Change-Id: I48a0adc338e474085c399750441198a4acae2cf5
Diffstat (limited to 'server.cpp')
| -rw-r--r-- | server.cpp | 39 |
1 files changed, 26 insertions, 13 deletions
@@ -27,6 +27,7 @@ using std::string; using std::vector; using std::unique_ptr; using android::net::wifi::IApInterface; +using android::net::wifi::IClientInterface; using android::wifi_hal::DriverTool; using android::wifi_system::HalTool; using android::wifi_system::HostapdManager; @@ -46,13 +47,6 @@ Server::Server(unique_ptr<HalTool> hal_tool, } Status Server::createApInterface(sp<IApInterface>* created_interface) { - if (!ap_interfaces_.empty()) { - // In the future we may support multiple interfaces at once. However, - // today, we support just one. - LOG(ERROR) << "Cannot create AP interface when other interfaces exist"; - return Status::ok(); - } - string interface_name; if (!SetupInterfaceForMode(DriverTool::kFirmwareModeAp, &interface_name)) { return Status::ok(); // Logging was done internally @@ -66,18 +60,37 @@ Status Server::createApInterface(sp<IApInterface>* created_interface) { return Status::ok(); } +Status Server::createClientInterface(sp<IClientInterface>* created_interface) { + string interface_name; + if (!SetupInterfaceForMode(DriverTool::kFirmwareModeSta, + &interface_name)) { + return Status::ok(); // Logging was done internally + } + + unique_ptr<ClientInterfaceImpl> client_interface(new ClientInterfaceImpl( + interface_name)); + *created_interface = client_interface->GetBinder(); + client_interfaces_.push_back(std::move(client_interface)); + return Status::ok(); +} + Status Server::tearDownInterfaces() { - if (!ap_interfaces_.empty()) { - ap_interfaces_.clear(); - if (!driver_tool_->UnloadDriver()) { - LOG(ERROR) << "Failed to unload WiFi driver!"; - return Status::ok(); - } + ap_interfaces_.clear(); + client_interfaces_.clear(); + if (!driver_tool_->UnloadDriver()) { + LOG(ERROR) << "Failed to unload WiFi driver!"; } return Status::ok(); } bool Server::SetupInterfaceForMode(int mode, string* interface_name) { + if (!ap_interfaces_.empty() || !client_interfaces_.empty()) { + // In the future we may support multiple interfaces at once. However, + // today, we support just one. + LOG(ERROR) << "Cannot create AP interface when other interfaces exist"; + return false; + } + string result; if (!driver_tool_->LoadDriver()) { LOG(ERROR) << "Failed to load WiFi driver!"; |
