summaryrefslogtreecommitdiffstats
path: root/server.cpp
diff options
context:
space:
mode:
authorChristopher Wiley <wiley@google.com>2016-07-27 13:48:22 -0700
committerChristopher Wiley <wiley@google.com>2016-08-02 15:53:31 -0700
commitc139fbf821d3c62523afbcf0950ebc2d1abaa93d (patch)
tree1b195b2e620bd77bb396faa2771ad4e9d7e53064 /server.cpp
parent2acbc1243c156aa13c54fcc4723a79f398da47ec (diff)
downloadplatform_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.cpp39
1 files changed, 26 insertions, 13 deletions
diff --git a/server.cpp b/server.cpp
index 6541808..15d64b4 100644
--- a/server.cpp
+++ b/server.cpp
@@ -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!";