summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nexus/Android.mk66
-rw-r--r--nexus/CommandListener.cpp235
-rw-r--r--nexus/CommandListener.h87
-rw-r--r--nexus/Controller.cpp165
-rw-r--r--nexus/Controller.h69
-rw-r--r--nexus/DhcpClient.cpp140
-rw-r--r--nexus/DhcpClient.h54
-rw-r--r--nexus/DhcpEvent.cpp56
-rw-r--r--nexus/DhcpEvent.h33
-rw-r--r--nexus/DhcpListener.cpp108
-rw-r--r--nexus/DhcpListener.h38
-rw-r--r--nexus/DhcpState.cpp80
-rw-r--r--nexus/DhcpState.h39
-rw-r--r--nexus/IControllerHandler.h33
-rw-r--r--nexus/IDhcpEventHandlers.h33
-rw-r--r--nexus/ISupplicantEventHandler.h52
-rw-r--r--nexus/IWifiStatusPollerHandler.h26
-rw-r--r--nexus/InterfaceConfig.cpp94
-rw-r--r--nexus/InterfaceConfig.h80
-rw-r--r--nexus/LoopController.cpp25
-rw-r--r--nexus/LoopController.h33
-rw-r--r--nexus/NetworkManager.cpp205
-rw-r--r--nexus/NetworkManager.h95
-rw-r--r--nexus/NexusCommand.cpp21
-rw-r--r--nexus/NexusCommand.h28
-rw-r--r--nexus/OpenVpnController.cpp71
-rw-r--r--nexus/OpenVpnController.h42
-rw-r--r--nexus/Property.cpp203
-rw-r--r--nexus/Property.h137
-rw-r--r--nexus/PropertyManager.cpp280
-rw-r--r--nexus/PropertyManager.h49
-rw-r--r--nexus/ResponseCode.h53
-rw-r--r--nexus/ScanResult.cpp99
-rw-r--r--nexus/ScanResult.h49
-rw-r--r--nexus/Supplicant.cpp677
-rw-r--r--nexus/Supplicant.h95
-rw-r--r--nexus/SupplicantAssociatedEvent.cpp40
-rw-r--r--nexus/SupplicantAssociatedEvent.h34
-rw-r--r--nexus/SupplicantAssociatingEvent.cpp100
-rw-r--r--nexus/SupplicantAssociatingEvent.h37
-rw-r--r--nexus/SupplicantConnectedEvent.cpp61
-rw-r--r--nexus/SupplicantConnectedEvent.h36
-rw-r--r--nexus/SupplicantConnectionTimeoutEvent.cpp36
-rw-r--r--nexus/SupplicantConnectionTimeoutEvent.h34
-rw-r--r--nexus/SupplicantDisconnectedEvent.cpp33
-rw-r--r--nexus/SupplicantDisconnectedEvent.h30
-rw-r--r--nexus/SupplicantEvent.cpp29
-rw-r--r--nexus/SupplicantEvent.h54
-rw-r--r--nexus/SupplicantEventFactory.cpp119
-rw-r--r--nexus/SupplicantEventFactory.h31
-rw-r--r--nexus/SupplicantListener.cpp109
-rw-r--r--nexus/SupplicantListener.h44
-rw-r--r--nexus/SupplicantScanResultsEvent.cpp34
-rw-r--r--nexus/SupplicantScanResultsEvent.h30
-rw-r--r--nexus/SupplicantState.cpp49
-rw-r--r--nexus/SupplicantState.h36
-rw-r--r--nexus/SupplicantStateChangeEvent.cpp45
-rw-r--r--nexus/SupplicantStateChangeEvent.h34
-rw-r--r--nexus/SupplicantStatus.cpp91
-rw-r--r--nexus/SupplicantStatus.h42
-rw-r--r--nexus/TiwlanEventListener.cpp61
-rw-r--r--nexus/TiwlanEventListener.h55
-rw-r--r--nexus/TiwlanWifiController.cpp147
-rw-r--r--nexus/TiwlanWifiController.h43
-rw-r--r--nexus/VpnController.cpp92
-rw-r--r--nexus/VpnController.h97
-rw-r--r--nexus/WifiController.cpp819
-rw-r--r--nexus/WifiController.h296
-rw-r--r--nexus/WifiNetwork.cpp970
-rw-r--r--nexus/WifiNetwork.h356
-rw-r--r--nexus/WifiScanner.cpp103
-rw-r--r--nexus/WifiScanner.h47
-rw-r--r--nexus/WifiStatusPoller.cpp104
-rw-r--r--nexus/WifiStatusPoller.h47
-rw-r--r--nexus/main.cpp67
-rw-r--r--nexus/nexctl.c148
76 files changed, 0 insertions, 8290 deletions
diff --git a/nexus/Android.mk b/nexus/Android.mk
deleted file mode 100644
index f9f7110..0000000
--- a/nexus/Android.mk
+++ /dev/null
@@ -1,66 +0,0 @@
-BUILD_NEXUS := false
-ifeq ($(BUILD_NEXUS),true)
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- main.cpp \
- NexusCommand.cpp \
- CommandListener.cpp \
- Property.cpp \
- PropertyManager.cpp \
- InterfaceConfig.cpp \
- NetworkManager.cpp \
- Controller.cpp \
- WifiController.cpp \
- TiwlanWifiController.cpp \
- TiwlanEventListener.cpp \
- WifiNetwork.cpp \
- WifiStatusPoller.cpp \
- ScanResult.cpp \
- Supplicant.cpp \
- SupplicantEvent.cpp \
- SupplicantListener.cpp \
- SupplicantState.cpp \
- SupplicantEventFactory.cpp \
- SupplicantConnectedEvent.cpp \
- SupplicantAssociatingEvent.cpp \
- SupplicantAssociatedEvent.cpp \
- SupplicantStateChangeEvent.cpp \
- SupplicantScanResultsEvent.cpp \
- SupplicantConnectionTimeoutEvent.cpp \
- SupplicantDisconnectedEvent.cpp \
- SupplicantStatus.cpp \
- OpenVpnController.cpp \
- VpnController.cpp \
- LoopController.cpp \
- DhcpClient.cpp DhcpListener.cpp \
- DhcpState.cpp DhcpEvent.cpp \
-
-LOCAL_MODULE:= nexus
-
-LOCAL_C_INCLUDES := $(KERNEL_HEADERS) -I../../../frameworks/base/include/
-
-LOCAL_CFLAGS :=
-
-LOCAL_SHARED_LIBRARIES := libsysutils libwpa_client
-
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES:= \
- nexctl.c \
-
-LOCAL_MODULE:= nexctl
-
-LOCAL_C_INCLUDES := $(KERNEL_HEADERS)
-
-LOCAL_CFLAGS :=
-
-LOCAL_SHARED_LIBRARIES := libcutils
-
-include $(BUILD_EXECUTABLE)
-
-endif # ifeq ($(BUILD_NEXUS),true)
diff --git a/nexus/CommandListener.cpp b/nexus/CommandListener.cpp
deleted file mode 100644
index 7c934a7..0000000
--- a/nexus/CommandListener.cpp
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <errno.h>
-
-#define LOG_TAG "CommandListener"
-#include <cutils/log.h>
-
-#include <sysutils/SocketClient.h>
-
-#include "CommandListener.h"
-#include "Controller.h"
-#include "Property.h"
-#include "NetworkManager.h"
-#include "WifiController.h"
-#include "VpnController.h"
-#include "ResponseCode.h"
-
-CommandListener::CommandListener() :
- FrameworkListener("nexus") {
- registerCmd(new WifiScanResultsCmd());
- registerCmd(new WifiListNetworksCmd());
- registerCmd(new WifiCreateNetworkCmd());
- registerCmd(new WifiRemoveNetworkCmd());
-
- registerCmd(new GetCmd());
- registerCmd(new SetCmd());
- registerCmd(new ListCmd());
-}
-
-/* -------------
- * Wifi Commands
- * ------------ */
-
-CommandListener::WifiCreateNetworkCmd::WifiCreateNetworkCmd() :
- NexusCommand("wifi_create_network") {
-}
-
-int CommandListener::WifiCreateNetworkCmd::runCommand(SocketClient *cli,
- int argc, char **argv) {
- NetworkManager *nm = NetworkManager::Instance();
- WifiController *wc = (WifiController *) nm->findController("WIFI");
- WifiNetwork *wn;
-
- if (!(wn = wc->createNetwork()))
- cli->sendMsg(ResponseCode::OperationFailed, "Failed to create network", true);
- else {
- char tmp[128];
- sprintf(tmp, "Created network id %d.", wn->getNetworkId());
- cli->sendMsg(ResponseCode::CommandOkay, tmp, false);
- }
- return 0;
-}
-
-CommandListener::WifiRemoveNetworkCmd::WifiRemoveNetworkCmd() :
- NexusCommand("wifi_remove_network") {
-}
-
-int CommandListener::WifiRemoveNetworkCmd::runCommand(SocketClient *cli,
- int argc, char **argv) {
- NetworkManager *nm = NetworkManager::Instance();
- WifiController *wc = (WifiController *) nm->findController("WIFI");
-
- if (wc->removeNetwork(atoi(argv[1])))
- cli->sendMsg(ResponseCode::OperationFailed, "Failed to remove network", true);
- else {
- cli->sendMsg(ResponseCode::CommandOkay, "Network removed.", false);
- }
- return 0;
-}
-
-CommandListener::WifiScanResultsCmd::WifiScanResultsCmd() :
- NexusCommand("wifi_scan_results") {
-}
-
-int CommandListener::WifiScanResultsCmd::runCommand(SocketClient *cli,
- int argc, char **argv) {
- NetworkManager *nm = NetworkManager::Instance();
- WifiController *wc = (WifiController *) nm->findController("WIFI");
-
- ScanResultCollection *src = wc->createScanResults();
- ScanResultCollection::iterator it;
- char buffer[256];
-
- for(it = src->begin(); it != src->end(); ++it) {
- sprintf(buffer, "%s %u %d %s %s",
- (*it)->getBssid(), (*it)->getFreq(), (*it)->getLevel(),
- (*it)->getFlags(), (*it)->getSsid());
- cli->sendMsg(ResponseCode::WifiScanResult, buffer, false);
- delete (*it);
- it = src->erase(it);
- }
-
- delete src;
- cli->sendMsg(ResponseCode::CommandOkay, "Scan results complete.", false);
- return 0;
-}
-
-CommandListener::WifiListNetworksCmd::WifiListNetworksCmd() :
- NexusCommand("wifi_list_networks") {
-}
-
-int CommandListener::WifiListNetworksCmd::runCommand(SocketClient *cli,
- int argc, char **argv) {
- NetworkManager *nm = NetworkManager::Instance();
- WifiController *wc = (WifiController *) nm->findController("WIFI");
-
- WifiNetworkCollection *src = wc->createNetworkList();
- WifiNetworkCollection::iterator it;
- char buffer[256];
-
- for(it = src->begin(); it != src->end(); ++it) {
- sprintf(buffer, "%d:%s", (*it)->getNetworkId(), (*it)->getSsid());
- cli->sendMsg(ResponseCode::WifiNetworkList, buffer, false);
- delete (*it);
- }
-
- delete src;
- cli->sendMsg(ResponseCode::CommandOkay, "Network listing complete.", false);
- return 0;
-}
-
-/* ------------
- * Vpn Commands
- * ------------ */
-
-/* ----------------
- * Generic Commands
- * ---------------- */
-CommandListener::GetCmd::GetCmd() :
- NexusCommand("get") {
-}
-
-int CommandListener::GetCmd::runCommand(SocketClient *cli, int argc, char **argv) {
- char val[Property::ValueMaxSize];
-
- if (!NetworkManager::Instance()->getPropMngr()->get(argv[1],
- val,
- sizeof(val))) {
- goto out_inval;
- }
-
- char *tmp;
- asprintf(&tmp, "%s %s", argv[1], val);
- cli->sendMsg(ResponseCode::PropertyRead, tmp, false);
- free(tmp);
-
- cli->sendMsg(ResponseCode::CommandOkay, "Property read.", false);
- return 0;
-out_inval:
- errno = EINVAL;
- cli->sendMsg(ResponseCode::CommandParameterError, "Failed to read property.", true);
- return 0;
-}
-
-CommandListener::SetCmd::SetCmd() :
- NexusCommand("set") {
-}
-
-int CommandListener::SetCmd::runCommand(SocketClient *cli, int argc,
- char **argv) {
- if (NetworkManager::Instance()->getPropMngr()->set(argv[1], argv[2]))
- goto out_inval;
-
- cli->sendMsg(ResponseCode::CommandOkay, "Property set.", false);
- return 0;
-
-out_inval:
- errno = EINVAL;
- cli->sendMsg(ResponseCode::CommandParameterError, "Failed to set property.", true);
- return 0;
-}
-
-CommandListener::ListCmd::ListCmd() :
- NexusCommand("list") {
-}
-
-int CommandListener::ListCmd::runCommand(SocketClient *cli, int argc, char **argv) {
- android::List<char *> *pc;
- char *prefix = NULL;
-
- if (argc > 1)
- prefix = argv[1];
-
- if (!(pc = NetworkManager::Instance()->getPropMngr()->createPropertyList(prefix))) {
- errno = ENODATA;
- cli->sendMsg(ResponseCode::CommandParameterError, "Failed to list properties.", true);
- return 0;
- }
-
- android::List<char *>::iterator it;
-
- for (it = pc->begin(); it != pc->end(); ++it) {
- char p_v[Property::ValueMaxSize];
-
- if (!NetworkManager::Instance()->getPropMngr()->get((*it),
- p_v,
- sizeof(p_v))) {
- ALOGW("Failed to get %s (%s)", (*it), strerror(errno));
- }
-
- char *buf;
- if (asprintf(&buf, "%s %s", (*it), p_v) < 0) {
- ALOGE("Failed to allocate memory");
- free((*it));
- continue;
- }
- cli->sendMsg(ResponseCode::PropertyList, buf, false);
- free(buf);
-
- free((*it));
- }
-
- delete pc;
-
- cli->sendMsg(ResponseCode::CommandOkay, "Properties list complete.", false);
- return 0;
-}
diff --git a/nexus/CommandListener.h b/nexus/CommandListener.h
deleted file mode 100644
index 30c6dc0..0000000
--- a/nexus/CommandListener.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _COMMANDLISTENER_H__
-#define _COMMANDLISTENER_H__
-
-#include <sysutils/FrameworkListener.h>
-#include "NexusCommand.h"
-
-class CommandListener : public FrameworkListener {
-public:
- CommandListener();
- virtual ~CommandListener() {}
-
-private:
-
- class WifiScanCmd : public NexusCommand {
- public:
- WifiScanCmd();
- virtual ~WifiScanCmd() {}
- int runCommand(SocketClient *c, int argc, char ** argv);
- };
-
- class WifiScanResultsCmd : public NexusCommand {
- public:
- WifiScanResultsCmd();
- virtual ~WifiScanResultsCmd() {}
- int runCommand(SocketClient *c, int argc, char ** argv);
- };
-
- class WifiCreateNetworkCmd : public NexusCommand {
- public:
- WifiCreateNetworkCmd();
- virtual ~WifiCreateNetworkCmd() {}
- int runCommand(SocketClient *c, int argc, char ** argv);
- };
-
- class WifiRemoveNetworkCmd : public NexusCommand {
- public:
- WifiRemoveNetworkCmd();
- virtual ~WifiRemoveNetworkCmd() {}
- int runCommand(SocketClient *c, int argc, char ** argv);
- };
-
- class WifiListNetworksCmd : public NexusCommand {
- public:
- WifiListNetworksCmd();
- virtual ~WifiListNetworksCmd() {}
- int runCommand(SocketClient *c, int argc, char ** argv);
- };
-
- class SetCmd : public NexusCommand {
- public:
- SetCmd();
- virtual ~SetCmd() {}
- int runCommand(SocketClient *c, int argc, char ** argv);
- };
-
- class GetCmd : public NexusCommand {
- public:
- GetCmd();
- virtual ~GetCmd() {}
- int runCommand(SocketClient *c, int argc, char ** argv);
- };
-
- class ListCmd : public NexusCommand {
- public:
- ListCmd();
- virtual ~ListCmd() {}
- int runCommand(SocketClient *c, int argc, char ** argv);
- };
-};
-
-#endif
diff --git a/nexus/Controller.cpp b/nexus/Controller.cpp
deleted file mode 100644
index dae8783..0000000
--- a/nexus/Controller.cpp
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <malloc.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#define LOG_TAG "Controller"
-
-#include <cutils/log.h>
-
-#include "Controller.h"
-#include "InterfaceConfig.h"
-
-extern "C" int init_module(void *, unsigned int, const char *);
-extern "C" int delete_module(const char *, unsigned int);
-
-Controller::Controller(const char *name, PropertyManager *propMngr,
- IControllerHandler *handlers) {
- mPropMngr = propMngr;
- mName = strdup(name);
- mHandlers = handlers;
- mBoundInterface = NULL;
-}
-
-Controller::~Controller() {
- if (mBoundInterface)
- free(mBoundInterface);
- if (mName)
- free(mName);
-}
-
-int Controller::start() {
- return 0;
-}
-
-int Controller::stop() {
- return 0;
-}
-
-int Controller::loadKernelModule(char *modpath, const char *args) {
- void *module;
- unsigned int size;
-
- module = loadFile(modpath, &size);
- if (!module) {
- errno = -EIO;
- return -1;
- }
-
- int rc = init_module(module, size, args);
- free (module);
- return rc;
-}
-
-int Controller::unloadKernelModule(const char *modtag) {
- int rc = -1;
- int retries = 10;
-
- while (retries--) {
- rc = delete_module(modtag, O_NONBLOCK | O_EXCL);
- if (rc < 0 && errno == EAGAIN)
- usleep(1000*500);
- else
- break;
- }
-
- if (rc != 0) {
- ALOGW("Unable to unload kernel driver '%s' (%s)", modtag,
- strerror(errno));
- }
- return rc;
-}
-
-bool Controller::isKernelModuleLoaded(const char *modtag) {
- FILE *fp = fopen("/proc/modules", "r");
-
- if (!fp) {
- ALOGE("Unable to open /proc/modules (%s)", strerror(errno));
- return false;
- }
-
- char line[255];
- while(fgets(line, sizeof(line), fp)) {
- char *endTag = strchr(line, ' ');
-
- if (!endTag) {
- ALOGW("Unable to find tag for line '%s'", line);
- continue;
- }
- if (!strncmp(line, modtag, (endTag - line))) {
- fclose(fp);
- return true;
- }
- }
-
- fclose(fp);
- return false;
-}
-
-void *Controller::loadFile(char *filename, unsigned int *_size)
-{
- int ret, fd;
- struct stat sb;
- ssize_t size;
- void *buffer = NULL;
-
- /* open the file */
- fd = open(filename, O_RDONLY);
- if (fd < 0)
- return NULL;
-
- /* find out how big it is */
- if (fstat(fd, &sb) < 0)
- goto bail;
- size = sb.st_size;
-
- /* allocate memory for it to be read into */
- buffer = malloc(size);
- if (!buffer)
- goto bail;
-
- /* slurp it into our buffer */
- ret = read(fd, buffer, size);
- if (ret != size)
- goto bail;
-
- /* let the caller know how big it is */
- *_size = size;
-
-bail:
- close(fd);
- return buffer;
-}
-
-int Controller::bindInterface(const char *ifname) {
- mBoundInterface = strdup(ifname);
- return 0;
-}
-
-int Controller::unbindInterface(const char *ifname) {
- free(mBoundInterface);
- mBoundInterface = NULL;
- return 0;
-}
diff --git a/nexus/Controller.h b/nexus/Controller.h
deleted file mode 100644
index e7e17c5..0000000
--- a/nexus/Controller.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTROLLER_H
-#define _CONTROLLER_H
-
-#include <unistd.h>
-#include <sys/types.h>
-
-#include <utils/List.h>
-
-class PropertyManager;
-class IControllerHandler;
-
-#include "PropertyManager.h"
-
-class Controller {
- /*
- * Name of this controller - WIFI/VPN/USBNET/BTNET/BTDUN/LOOP/etc
- */
- char *mName;
-
- /*
- * Name of the system ethernet interface which this controller is
- * bound to.
- */
- char *mBoundInterface;
-
-protected:
- PropertyManager *mPropMngr;
- IControllerHandler *mHandlers;
-
-public:
- Controller(const char *name, PropertyManager *propMngr,
- IControllerHandler *handlers);
- virtual ~Controller();
-
- virtual int start();
- virtual int stop();
-
- const char *getName() { return mName; }
- const char *getBoundInterface() { return mBoundInterface; }
-
-protected:
- int loadKernelModule(char *modpath, const char *args);
- bool isKernelModuleLoaded(const char *modtag);
- int unloadKernelModule(const char *modtag);
- int bindInterface(const char *ifname);
- int unbindInterface(const char *ifname);
-
-private:
- void *loadFile(char *filename, unsigned int *_size);
-};
-
-typedef android::List<Controller *> ControllerCollection;
-#endif
diff --git a/nexus/DhcpClient.cpp b/nexus/DhcpClient.cpp
deleted file mode 100644
index 81fdf47..0000000
--- a/nexus/DhcpClient.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <pthread.h>
-
-#define LOG_TAG "DhcpClient"
-#include <cutils/log.h>
-#include <cutils/properties.h>
-
-#include <sysutils/ServiceManager.h>
-
-#include <netutils/ifc.h>
-#include <netutils/dhcp.h>
-
-#include "DhcpClient.h"
-#include "DhcpState.h"
-#include "DhcpListener.h"
-#include "IDhcpEventHandlers.h"
-#include "Controller.h"
-
-DhcpClient::DhcpClient(IDhcpEventHandlers *handlers) :
- mState(DhcpState::INIT), mHandlers(handlers) {
- mServiceManager = new ServiceManager();
- mListener = NULL;
- mListenerSocket = NULL;
- mController = NULL;
- mDoArpProbe = false;
- pthread_mutex_init(&mLock, NULL);
-}
-
-DhcpClient::~DhcpClient() {
- delete mServiceManager;
- if (mListener)
- delete mListener;
-}
-
-int DhcpClient::start(Controller *c) {
- ALOGD("Starting DHCP service (arp probe = %d)", mDoArpProbe);
- char svc[PROPERTY_VALUE_MAX];
- snprintf(svc,
- sizeof(svc),
- "dhcpcd:%s%s",
- (!mDoArpProbe ? "-A " : ""),
- c->getBoundInterface());
-
- pthread_mutex_lock(&mLock);
-
- if (mController) {
- pthread_mutex_unlock(&mLock);
- errno = EBUSY;
- return -1;
- }
- mController = c;
-
- sockaddr_in addr;
- if ((mListenerSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
- ALOGE("Failed to create DHCP listener socket");
- pthread_mutex_unlock(&mLock);
- return -1;
- }
- memset(&addr, 0, sizeof(addr));
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = inet_addr("127.0.0.1");
- addr.sin_port = htons(DhcpClient::STATUS_MONITOR_PORT);
-
- if (bind(mListenerSocket, (struct sockaddr *) &addr, sizeof(addr))) {
- ALOGE("Failed to bind DHCP listener socket");
- close(mListenerSocket);
- mListenerSocket = -1;
- pthread_mutex_unlock(&mLock);
- return -1;
- }
-
- if (mServiceManager->start(svc)) {
- ALOGE("Failed to start dhcp service");
- pthread_mutex_unlock(&mLock);
- return -1;
- }
-
- mListener = new DhcpListener(mController, mListenerSocket, mHandlers);
- if (mListener->startListener()) {
- ALOGE("Failed to start listener");
-#if 0
- mServiceManager->stop("dhcpcd");
- return -1;
-#endif
- delete mListener;
- mListener = NULL;
- pthread_mutex_unlock(&mLock);
- }
-
- pthread_mutex_unlock(&mLock);
- return 0;
-}
-
-int DhcpClient::stop() {
- pthread_mutex_lock(&mLock);
- if (!mController) {
- pthread_mutex_unlock(&mLock);
- return 0;
- }
-
- if (mListener) {
- mListener->stopListener();
- delete mListener;
- mListener = NULL;
- }
- close(mListenerSocket);
-
- if (mServiceManager->stop("dhcpcd")) {
- ALOGW("Failed to stop DHCP service (%s)", strerror(errno));
- // XXX: Kill it the hard way.. but its gotta go!
- }
-
- mController = NULL;
- pthread_mutex_unlock(&mLock);
- return 0;
-}
-
-void DhcpClient::setDoArpProbe(bool probe) {
- mDoArpProbe = probe;
-}
diff --git a/nexus/DhcpClient.h b/nexus/DhcpClient.h
deleted file mode 100644
index 42bfda0..0000000
--- a/nexus/DhcpClient.h
+++ /dev/null
@@ -1,54 +0,0 @@
-
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DhcpClient_H
-#define _DhcpClient_H
-
-#include <pthread.h>
-
-class IDhcpEventHandlers;
-class ServiceManager;
-class DhcpListener;
-class Controller;
-
-class DhcpClient {
-public:
- static const int STATUS_MONITOR_PORT = 6666;
-
-private:
- int mState;
- IDhcpEventHandlers *mHandlers;
- ServiceManager *mServiceManager;
- DhcpListener *mListener;
- int mListenerSocket;
- pthread_mutex_t mLock;
- Controller *mController;
- bool mDoArpProbe;
-
-public:
- DhcpClient(IDhcpEventHandlers *handlers);
- virtual ~DhcpClient();
-
- int getState() { return mState; }
- bool getDoArpProbe() { return mDoArpProbe; }
- void setDoArpProbe(bool probe);
-
- int start(Controller *c);
- int stop();
-};
-
-#endif
diff --git a/nexus/DhcpEvent.cpp b/nexus/DhcpEvent.cpp
deleted file mode 100644
index 2f1ce6f..0000000
--- a/nexus/DhcpEvent.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-
-#define LOG_TAG "DhcpEvent"
-#include <cutils/log.h>
-
-#include "DhcpEvent.h"
-
-char *DhcpEvent::toString(int val, char *buffer, int max) {
- if (val == DhcpEvent::UNKNOWN)
- strncpy(buffer, "UNKNOWN", max);
- else if (val == DhcpEvent::STOP)
- strncpy(buffer, "STOP", max);
- else if (val == DhcpEvent::RENEW)
- strncpy(buffer, "RENEW", max);
- else if (val == DhcpEvent::RELEASE)
- strncpy(buffer, "RELEASE", max);
- else if (val == DhcpEvent::TIMEOUT)
- strncpy(buffer, "TIMEOUT", max);
- else
- strncpy(buffer, "(internal error)", max);
-
- return buffer;
-}
-
-int DhcpEvent::parseString(const char *buffer) {
- if (!strcasecmp(buffer, "UNKNOWN"))
- return DhcpEvent::UNKNOWN;
- else if (!strcasecmp(buffer, "STOP"))
- return DhcpEvent::STOP;
- else if (!strcasecmp(buffer, "RENEW"))
- return DhcpEvent::RENEW;
- else if (!strcasecmp(buffer, "RELEASE"))
- return DhcpEvent::RELEASE;
- else if (!strcasecmp(buffer, "TIMEOUT"))
- return DhcpEvent::TIMEOUT;
- else {
- ALOGW("Bad event '%s'", buffer);
- return -1;
- }
-}
diff --git a/nexus/DhcpEvent.h b/nexus/DhcpEvent.h
deleted file mode 100644
index f77834d..0000000
--- a/nexus/DhcpEvent.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DHCP_EVENT_H
-#define _DHCP_EVENT_H
-
-class DhcpEvent {
-public:
- static const int UNKNOWN = 0;
- static const int STOP = 1;
- static const int RENEW = 2;
- static const int RELEASE = 3;
- static const int TIMEOUT = 4;
-
- static char *toString(int val, char *buffer, int max);
-
- static int parseString(const char *buffer);
-};
-
-#endif
diff --git a/nexus/DhcpListener.cpp b/nexus/DhcpListener.cpp
deleted file mode 100644
index 16c369b..0000000
--- a/nexus/DhcpListener.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <errno.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#define LOG_TAG "DhcpListener"
-#include <cutils/log.h>
-
-#include <DhcpListener.h>
-#include "IDhcpEventHandlers.h"
-#include "DhcpState.h"
-#include "DhcpEvent.h"
-#include "Controller.h"
-
-DhcpListener::DhcpListener(Controller *c, int socket, IDhcpEventHandlers *handlers) :
- SocketListener(socket, false) {
- mHandlers = handlers;
- mController = c;
-}
-
-DhcpListener::~DhcpListener() {
-}
-
-bool DhcpListener::onDataAvailable(SocketClient *cli) {
- char buffer[255];
- int rc;
-
- if ((rc = read(cli->getSocket(), buffer, sizeof(buffer))) < 0) {
- ALOGW("Error reading dhcp status msg (%s)", strerror(errno));
- return true;
- }
-
- if (!strncmp(buffer, "STATE:", 6)) {
- char *next = buffer;
- char *tmp;
- int i;
-
- for (i = 0; i < 2; i++) {
- if (!(tmp = strsep(&next, ":"))) {
- ALOGW("Error parsing state '%s'", buffer);
- return true;
- }
- }
-
- int st = DhcpState::parseString(tmp);
- mHandlers->onDhcpStateChanged(mController, st);
- } else if (!strncmp(buffer, "ADDRINFO:", 9)) {
- char *next = buffer + 9;
- struct in_addr ipaddr, netmask, gateway, broadcast, dns1, dns2;
-
- if (!inet_aton(strsep(&next, ":"), &ipaddr)) {
- ALOGW("Malformatted IP specified");
- }
- if (!inet_aton(strsep(&next, ":"), &netmask)) {
- ALOGW("Malformatted netmask specified");
- }
- if (!inet_aton(strsep(&next, ":"), &broadcast)) {
- ALOGW("Malformatted broadcast specified");
- }
- if (!inet_aton(strsep(&next, ":"), &gateway)) {
- ALOGW("Malformatted gateway specified");
- }
- if (!inet_aton(strsep(&next, ":"), &dns1)) {
- ALOGW("Malformatted dns1 specified");
- }
- if (!inet_aton(strsep(&next, ":"), &dns2)) {
- ALOGW("Malformatted dns2 specified");
- }
- mHandlers->onDhcpLeaseUpdated(mController, &ipaddr, &netmask,
- &broadcast, &gateway, &dns1, &dns2);
-
- } else if (!strncmp(buffer, "EVENT:", 6)) {
- char *next = buffer;
- char *tmp;
- int i;
-
- for (i = 0; i < 2; i++) {
- if (!(tmp = strsep(&next, ":"))) {
- ALOGW("Error parsing event '%s'", buffer);
- return true;
- }
- }
-
- int ev = DhcpEvent::parseString(tmp);
- mHandlers->onDhcpEvent(mController, ev);
-
- } else {
- ALOGW("Unknown DHCP monitor msg '%s'", buffer);
- }
-
- return true;
-}
diff --git a/nexus/DhcpListener.h b/nexus/DhcpListener.h
deleted file mode 100644
index ca6fe37..0000000
--- a/nexus/DhcpListener.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DhcpListener_H
-#define _DhcpListener_H
-
-#include <sysutils/SocketListener.h>
-
-class IDhcpEventHandlers;
-class Controller;
-
-class DhcpListener : public SocketListener {
- IDhcpEventHandlers *mHandlers;
- Controller *mController;
-
-public:
-
- DhcpListener(Controller *c, int socket, IDhcpEventHandlers *handlers);
- virtual ~DhcpListener();
-
-private:
- bool onDataAvailable(SocketClient *cli);
-};
-
-#endif
diff --git a/nexus/DhcpState.cpp b/nexus/DhcpState.cpp
deleted file mode 100644
index b86c186..0000000
--- a/nexus/DhcpState.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-
-#define LOG_TAG "DhcpState"
-#include <cutils/log.h>
-
-#include "DhcpState.h"
-
-char *DhcpState::toString(int val, char *buffer, int max) {
- if (val == DhcpState::INIT)
- strncpy(buffer, "INIT", max);
- else if (val == DhcpState::DISCOVERING)
- strncpy(buffer, "DISCOVERING", max);
- else if (val == DhcpState::REQUESTING)
- strncpy(buffer, "REQUESTING", max);
- else if (val == DhcpState::BOUND)
- strncpy(buffer, "BOUND", max);
- else if (val == DhcpState::RENEWING)
- strncpy(buffer, "RENEWING", max);
- else if (val == DhcpState::REBINDING)
- strncpy(buffer, "REBINDING", max);
- else if (val == DhcpState::REBOOT)
- strncpy(buffer, "REBOOT", max);
- else if (val == DhcpState::RENEW_REQUESTED)
- strncpy(buffer, "RENEW_REQUESTED", max);
- else if (val == DhcpState::INIT_IPV4LL)
- strncpy(buffer, "INIT_IPV4LL", max);
- else if (val == DhcpState::PROBING)
- strncpy(buffer, "PROBING", max);
- else if (val == DhcpState::ANNOUNCING)
- strncpy(buffer, "ANNOUNCING", max);
- else
- strncpy(buffer, "(internal error)", max);
-
- return buffer;
-}
-
-int DhcpState::parseString(const char *buffer) {
- if (!strcasecmp(buffer, "INIT"))
- return DhcpState::INIT;
- else if (!strcasecmp(buffer, "DISCOVERING"))
- return DhcpState::DISCOVERING;
- else if (!strcasecmp(buffer, "REQUESTING"))
- return DhcpState::REQUESTING;
- else if (!strcasecmp(buffer, "BOUND"))
- return DhcpState::BOUND;
- else if (!strcasecmp(buffer, "RENEWING"))
- return DhcpState::RENEWING;
- else if (!strcasecmp(buffer, "REBINDING"))
- return DhcpState::REBINDING;
- else if (!strcasecmp(buffer, "REBOOT"))
- return DhcpState::REBOOT;
- else if (!strcasecmp(buffer, "RENEW_REQUESTED"))
- return DhcpState::INIT_IPV4LL;
- else if (!strcasecmp(buffer, "INIT_IPV4LL"))
- return DhcpState::INIT_IPV4LL;
- else if (!strcasecmp(buffer, "PROBING"))
- return DhcpState::PROBING;
- else if (!strcasecmp(buffer, "ANNOUNCING"))
- return DhcpState::ANNOUNCING;
- else {
- ALOGW("Bad state '%s'", buffer);
- return -1;
- }
-}
diff --git a/nexus/DhcpState.h b/nexus/DhcpState.h
deleted file mode 100644
index 041c5d2..0000000
--- a/nexus/DhcpState.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DHCP_STATE_H
-#define _DHCP_STATE_H
-
-class DhcpState {
-public:
- static const int INIT = 0;
- static const int DISCOVERING = 1;
- static const int REQUESTING = 2;
- static const int BOUND = 3;
- static const int RENEWING = 4;
- static const int REBINDING = 5;
- static const int REBOOT = 6;
- static const int RENEW_REQUESTED = 7;
- static const int INIT_IPV4LL = 8;
- static const int PROBING = 9;
- static const int ANNOUNCING = 10;
-
- static char *toString(int val, char *buffer, int max);
-
- static int parseString(const char *buffer);
-};
-
-#endif
diff --git a/nexus/IControllerHandler.h b/nexus/IControllerHandler.h
deleted file mode 100644
index 3151587..0000000
--- a/nexus/IControllerHandler.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _ICONTROLLER_HANDLER_H
-#define _ICONTROLLER_HANDLER_H
-
-class Controller;
-class InterfaceConfig;
-
-class IControllerHandler {
-public:
- virtual ~IControllerHandler() {}
- virtual void onInterfaceConnected(Controller *c) = 0;
- virtual void onInterfaceDisconnected(Controller *c) = 0;
- virtual void onControllerSuspending(Controller *c) = 0;
- virtual void onControllerResumed(Controller *c) = 0;
-};
-
-#endif
-
diff --git a/nexus/IDhcpEventHandlers.h b/nexus/IDhcpEventHandlers.h
deleted file mode 100644
index 2568f09..0000000
--- a/nexus/IDhcpEventHandlers.h
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _IDhcpEventHandlers_H
-#define _IDhcpEventHandlers_H
-
-class IDhcpEventHandlers {
-public:
- virtual ~IDhcpEventHandlers() {}
- virtual void onDhcpStateChanged(Controller *c, int state) = 0;
- virtual void onDhcpEvent(Controller *c, int event) = 0;
- virtual void onDhcpLeaseUpdated(Controller *c,
- struct in_addr *addr, struct in_addr *net,
- struct in_addr *brd,
- struct in_addr *gw, struct in_addr *dns1,
- struct in_addr *dns2) = 0;
-};
-
-#endif
diff --git a/nexus/ISupplicantEventHandler.h b/nexus/ISupplicantEventHandler.h
deleted file mode 100644
index 1a3aa07..0000000
--- a/nexus/ISupplicantEventHandler.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _ISUPPLICANT_EVENT_HANDLER_H
-#define _ISUPPLICANT_EVENT_HANDLER_H
-
-class SupplicantAssociatingEvent;
-class SupplicantAssociatedEvent;
-class SupplicantConnectedEvent;
-class SupplicantScanResultsEvent;
-class SupplicantStateChangeEvent;
-class SupplicantConnectionTimeoutEvent;
-class SupplicantDisconnectedEvent;
-
-class ISupplicantEventHandler {
-public:
- virtual ~ISupplicantEventHandler(){}
- virtual void onAssociatingEvent(SupplicantAssociatingEvent *evt) = 0;
- virtual void onAssociatedEvent(SupplicantAssociatedEvent *evt) = 0;
- virtual void onConnectedEvent(SupplicantConnectedEvent *evt) = 0;
- virtual void onScanResultsEvent(SupplicantScanResultsEvent *evt) = 0;
- virtual void onStateChangeEvent(SupplicantStateChangeEvent *evt) = 0;
- virtual void onConnectionTimeoutEvent(SupplicantConnectionTimeoutEvent *evt) = 0;
- virtual void onDisconnectedEvent(SupplicantDisconnectedEvent *evt) = 0;
-#if 0
- virtual void onTerminatingEvent(SupplicantEvent *evt) = 0;
- virtual void onPasswordChangedEvent(SupplicantEvent *evt) = 0;
- virtual void onEapNotificationEvent(SupplicantEvent *evt) = 0;
- virtual void onEapStartedEvent(SupplicantEvent *evt) = 0;
- virtual void onEapMethodEvent(SupplicantEvent *evt) = 0;
- virtual void onEapSuccessEvent(SupplicantEvent *evt) = 0;
- virtual void onEapFailureEvent(SupplicantEvent *evt) = 0;
- virtual void onLinkSpeedEvent(SupplicantEvent *evt) = 0;
- virtual void onDriverStateEvent(SupplicantEvent *evt) = 0;
-#endif
-};
-
-#endif
-
diff --git a/nexus/IWifiStatusPollerHandler.h b/nexus/IWifiStatusPollerHandler.h
deleted file mode 100644
index 9b94945..0000000
--- a/nexus/IWifiStatusPollerHandler.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _IWIFISTATUSPOLLER_HANDLER_H
-#define _IWIFISTATUSPOLLER_HANDLER_H
-
-class IWifiStatusPollerHandler {
-public:
- virtual ~IWifiStatusPollerHandler() {}
- virtual void onStatusPollInterval() = 0;
-};
-
-#endif
diff --git a/nexus/InterfaceConfig.cpp b/nexus/InterfaceConfig.cpp
deleted file mode 100644
index 832cbca..0000000
--- a/nexus/InterfaceConfig.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#define LOG_TAG "InterfaceConfig"
-#include <cutils/log.h>
-
-#include "InterfaceConfig.h"
-#include "NetworkManager.h"
-
-InterfaceConfig::InterfaceConfig(bool propertiesReadOnly) {
- mStaticProperties.propIp = new IPV4AddressPropertyHelper("Addr", propertiesReadOnly, &mIp);
- mStaticProperties.propNetmask = new IPV4AddressPropertyHelper("Netmask", propertiesReadOnly, &mNetmask);
- mStaticProperties.propGateway = new IPV4AddressPropertyHelper("Gateway", propertiesReadOnly, &mGateway);
- mStaticProperties.propBroadcast = new IPV4AddressPropertyHelper("Broadcast", propertiesReadOnly, &mBroadcast);
- mStaticProperties.propDns = new InterfaceDnsProperty(this, propertiesReadOnly);
-}
-
-InterfaceConfig::~InterfaceConfig() {
- delete mStaticProperties.propIp;
- delete mStaticProperties.propNetmask;
- delete mStaticProperties.propGateway;
- delete mStaticProperties.propBroadcast;
- delete mStaticProperties.propDns;
-}
-
-void InterfaceConfig::setIp(struct in_addr *addr) {
- memcpy(&mIp, addr, sizeof(struct in_addr));
-}
-
-void InterfaceConfig::setNetmask(struct in_addr *addr) {
- memcpy(&mNetmask, addr, sizeof(struct in_addr));
-}
-
-void InterfaceConfig::setGateway(struct in_addr *addr) {
- memcpy(&mGateway, addr, sizeof(struct in_addr));
-}
-
-void InterfaceConfig::setBroadcast(struct in_addr *addr) {
- memcpy(&mBroadcast, addr, sizeof(struct in_addr));
-}
-
-void InterfaceConfig::setDns(int idx, struct in_addr *addr) {
- memcpy(&mDns[idx], addr, sizeof(struct in_addr));
-}
-
-int InterfaceConfig::attachProperties(PropertyManager *pm, const char *nsName) {
- pm->attachProperty(nsName, mStaticProperties.propIp);
- pm->attachProperty(nsName, mStaticProperties.propNetmask);
- pm->attachProperty(nsName, mStaticProperties.propGateway);
- pm->attachProperty(nsName, mStaticProperties.propBroadcast);
- pm->attachProperty(nsName, mStaticProperties.propDns);
- return 0;
-}
-
-int InterfaceConfig::detachProperties(PropertyManager *pm, const char *nsName) {
- pm->detachProperty(nsName, mStaticProperties.propIp);
- pm->detachProperty(nsName, mStaticProperties.propNetmask);
- pm->detachProperty(nsName, mStaticProperties.propGateway);
- pm->detachProperty(nsName, mStaticProperties.propBroadcast);
- pm->detachProperty(nsName, mStaticProperties.propDns);
- return 0;
-}
-
-InterfaceConfig::InterfaceDnsProperty::InterfaceDnsProperty(InterfaceConfig *c,
- bool ro) :
- IPV4AddressProperty("Dns", ro, 2) {
- mCfg = c;
-}
-
-int InterfaceConfig::InterfaceDnsProperty::set(int idx, struct in_addr *value) {
- memcpy(&mCfg->mDns[idx], value, sizeof(struct in_addr));
- return 0;
-}
-int InterfaceConfig::InterfaceDnsProperty::get(int idx, struct in_addr *buf) {
- memcpy(buf, &mCfg->mDns[idx], sizeof(struct in_addr));
- return 0;
-}
-
diff --git a/nexus/InterfaceConfig.h b/nexus/InterfaceConfig.h
deleted file mode 100644
index 3fc7390..0000000
--- a/nexus/InterfaceConfig.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _INTERFACE_CONFIG_H
-#define _INTERFACE_CONFIG_H
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include "Property.h"
-class PropertyManager;
-
-class InterfaceConfig {
- class InterfaceDnsProperty;
- friend class InterfaceConfig::InterfaceDnsProperty;
-
- struct {
- IPV4AddressPropertyHelper *propIp;
- IPV4AddressPropertyHelper *propNetmask;
- IPV4AddressPropertyHelper *propGateway;
- IPV4AddressPropertyHelper *propBroadcast;
- InterfaceDnsProperty *propDns;
- } mStaticProperties;
-
- struct in_addr mIp;
- struct in_addr mNetmask;
- struct in_addr mGateway;
- struct in_addr mBroadcast;
- struct in_addr mDns[2];
-
-public:
- InterfaceConfig(bool propertiesReadOnly);
- virtual ~InterfaceConfig();
-
- int set(const char *name, const char *value);
- const char *get(const char *name, char *buffer, size_t maxsize);
-
- const struct in_addr &getIp() const { return mIp; }
- const struct in_addr &getNetmask() const { return mNetmask; }
- const struct in_addr &getGateway() const { return mGateway; }
- const struct in_addr &getBroadcast() const { return mBroadcast; }
- const struct in_addr &getDns(int idx) const { return mDns[idx]; }
-
- void setIp(struct in_addr *addr);
- void setNetmask(struct in_addr *addr);
- void setGateway(struct in_addr *addr);
- void setBroadcast(struct in_addr *addr);
- void setDns(int idx, struct in_addr *addr);
-
- int attachProperties(PropertyManager *pm, const char *nsName);
- int detachProperties(PropertyManager *pm, const char *nsName);
-
-private:
-
- class InterfaceDnsProperty : public IPV4AddressProperty {
- InterfaceConfig *mCfg;
- public:
- InterfaceDnsProperty(InterfaceConfig *cfg, bool ro);
- int set(int idx, struct in_addr *value);
- int get(int idx, struct in_addr *buffer);
- };
-};
-
-
-#endif
diff --git a/nexus/LoopController.cpp b/nexus/LoopController.cpp
deleted file mode 100644
index f8e01d7..0000000
--- a/nexus/LoopController.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <errno.h>
-
-#include "LoopController.h"
-#include "PropertyManager.h"
-
-LoopController::LoopController(PropertyManager *propmngr,
- IControllerHandler *handlers) :
- Controller("loop", propmngr, handlers) {
-}
diff --git a/nexus/LoopController.h b/nexus/LoopController.h
deleted file mode 100644
index 53d16f1..0000000
--- a/nexus/LoopController.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _LOOP_CONTROLLER_H
-#define _LOOP_CONTROLLER_H
-
-#include "Controller.h"
-
-class ControllerHandler;
-
-class LoopController : public Controller {
-public:
- LoopController(PropertyManager *propmngr, IControllerHandler *h);
- virtual ~LoopController() {}
-
- int set(const char *name, const char *value);
- const char *get(const char *name, char *buffer, size_t maxsize);
-};
-
-#endif
diff --git a/nexus/NetworkManager.cpp b/nexus/NetworkManager.cpp
deleted file mode 100644
index d4285bf..0000000
--- a/nexus/NetworkManager.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <errno.h>
-
-#define LOG_TAG "Nexus"
-
-#include <cutils/log.h>
-
-#include "NetworkManager.h"
-#include "InterfaceConfig.h"
-#include "DhcpClient.h"
-#include "DhcpState.h"
-#include "DhcpEvent.h"
-#include "ResponseCode.h"
-
-NetworkManager *NetworkManager::sInstance = NULL;
-
-NetworkManager *NetworkManager::Instance() {
- if (!sInstance)
- sInstance = new NetworkManager(new PropertyManager());
- return sInstance;
-}
-
-NetworkManager::NetworkManager(PropertyManager *propMngr) {
- mBroadcaster = NULL;
- mControllerBindings = new ControllerBindingCollection();
- mPropMngr = propMngr;
- mLastDhcpState = DhcpState::INIT;
- mDhcp = new DhcpClient(this);
-}
-
-NetworkManager::~NetworkManager() {
-}
-
-int NetworkManager::run() {
- if (startControllers()) {
- ALOGW("Unable to start all controllers (%s)", strerror(errno));
- }
- return 0;
-}
-
-int NetworkManager::attachController(Controller *c) {
- ControllerBinding *cb = new ControllerBinding(c);
- mControllerBindings->push_back(cb);
- return 0;
-}
-
-int NetworkManager::startControllers() {
- int rc = 0;
- ControllerBindingCollection::iterator it;
-
- for (it = mControllerBindings->begin(); it != mControllerBindings->end(); ++it) {
- int irc = (*it)->getController()->start();
- if (irc && !rc)
- rc = irc;
- }
- return rc;
-}
-
-int NetworkManager::stopControllers() {
- int rc = 0;
- ControllerBindingCollection::iterator it;
-
- for (it = mControllerBindings->begin(); it != mControllerBindings->end(); ++it) {
- int irc = (*it)->getController()->stop();
- if (irc && !rc)
- rc = irc;
- }
- return rc;
-}
-
-NetworkManager::ControllerBinding *NetworkManager::lookupBinding(Controller *c) {
- ControllerBindingCollection::iterator it;
-
- for (it = mControllerBindings->begin(); it != mControllerBindings->end(); ++it) {
- if ((*it)->getController() == c)
- return (*it);
- }
- errno = ENOENT;
- return NULL;
-}
-
-Controller *NetworkManager::findController(const char *name) {
- ControllerBindingCollection::iterator it;
-
- for (it = mControllerBindings->begin(); it != mControllerBindings->end(); ++it) {
- if (!strcasecmp((*it)->getController()->getName(), name))
- return (*it)->getController();
- }
- errno = ENOENT;
- return NULL;
-}
-
-void NetworkManager::onInterfaceConnected(Controller *c) {
- ALOGD("Controller %s interface %s connected", c->getName(), c->getBoundInterface());
-
- if (mDhcp->start(c)) {
- ALOGE("Failed to start DHCP (%s)", strerror(errno));
- return;
- }
-}
-
-void NetworkManager::onInterfaceDisconnected(Controller *c) {
- ALOGD("Controller %s interface %s disconnected", c->getName(),
- c->getBoundInterface());
-
- mDhcp->stop();
-}
-
-void NetworkManager::onControllerSuspending(Controller *c) {
- ALOGD("Controller %s interface %s suspending", c->getName(),
- c->getBoundInterface());
- mDhcp->stop();
-}
-
-void NetworkManager::onControllerResumed(Controller *c) {
- ALOGD("Controller %s interface %s resumed", c->getName(),
- c->getBoundInterface());
-}
-
-void NetworkManager::onDhcpStateChanged(Controller *c, int state) {
- char tmp[255];
- char tmp2[255];
-
- ALOGD("onDhcpStateChanged(%s -> %s)",
- DhcpState::toString(mLastDhcpState, tmp, sizeof(tmp)),
- DhcpState::toString(state, tmp2, sizeof(tmp2)));
-
- switch(state) {
- case DhcpState::BOUND:
- // Refresh the 'net.xxx' for the controller
- break;
- case DhcpState::RENEWING:
- break;
- default:
- break;
- }
-
- char *tmp3;
- asprintf(&tmp3,
- "DHCP state changed from %d (%s) -> %d (%s)",
- mLastDhcpState,
- DhcpState::toString(mLastDhcpState, tmp, sizeof(tmp)),
- state,
- DhcpState::toString(state, tmp2, sizeof(tmp2)));
-
- getBroadcaster()->sendBroadcast(ResponseCode::DhcpStateChange,
- tmp3,
- false);
- free(tmp3);
-
- mLastDhcpState = state;
-}
-
-void NetworkManager::onDhcpEvent(Controller *c, int evt) {
- char tmp[64];
- ALOGD("onDhcpEvent(%s)", DhcpEvent::toString(evt, tmp, sizeof(tmp)));
-}
-
-void NetworkManager::onDhcpLeaseUpdated(Controller *c, struct in_addr *addr,
- struct in_addr *net,
- struct in_addr *brd,
- struct in_addr *gw,
- struct in_addr *dns1,
- struct in_addr *dns2) {
- ControllerBinding *bind = lookupBinding(c);
-
- if (!bind->getCurrentCfg())
- bind->setCurrentCfg(new InterfaceConfig(true));
-
- bind->getCurrentCfg()->setIp(addr);
- bind->getCurrentCfg()->setNetmask(net);
- bind->getCurrentCfg()->setGateway(gw);
- bind->getCurrentCfg()->setBroadcast(brd);
- bind->getCurrentCfg()->setDns(0, dns1);
- bind->getCurrentCfg()->setDns(1, dns2);
-}
-
-NetworkManager::ControllerBinding::ControllerBinding(Controller *c) :
- mController(c) {
-}
-
-void NetworkManager::ControllerBinding::setCurrentCfg(InterfaceConfig *c) {
- mCurrentCfg = c;
-}
-
-void NetworkManager::ControllerBinding::setBoundCfg(InterfaceConfig *c) {
- mBoundCfg = c;
-}
-
diff --git a/nexus/NetworkManager.h b/nexus/NetworkManager.h
deleted file mode 100644
index 93702ce..0000000
--- a/nexus/NetworkManager.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _NETWORKMANAGER_H
-#define _NETWORKMANAGER_H
-
-#include <utils/List.h>
-#include <sysutils/SocketListener.h>
-
-#include "Controller.h"
-#include "PropertyManager.h"
-#include "IControllerHandler.h"
-#include "IDhcpEventHandlers.h"
-
-class InterfaceConfig;
-class DhcpClient;
-
-class NetworkManager : public IControllerHandler, public IDhcpEventHandlers {
- static NetworkManager *sInstance;
-
- class ControllerBinding {
- Controller *mController;
- InterfaceConfig *mCurrentCfg;
- InterfaceConfig *mBoundCfg;
-
- public:
- ControllerBinding(Controller *c);
- virtual ~ControllerBinding() {}
-
- InterfaceConfig *getCurrentCfg() { return mCurrentCfg; }
- InterfaceConfig *getBoundCfg() { return mCurrentCfg; }
- Controller *getController() { return mController; }
-
- void setCurrentCfg(InterfaceConfig *cfg);
- void setBoundCfg(InterfaceConfig *cfg);
- };
-
- typedef android::List<ControllerBinding *> ControllerBindingCollection;
-
-private:
- ControllerBindingCollection *mControllerBindings;
- SocketListener *mBroadcaster;
- PropertyManager *mPropMngr;
- DhcpClient *mDhcp;
- int mLastDhcpState;
-
-public:
- virtual ~NetworkManager();
-
- int run();
-
- int attachController(Controller *controller);
-
- Controller *findController(const char *name);
-
- void setBroadcaster(SocketListener *sl) { mBroadcaster = sl; }
- SocketListener *getBroadcaster() { return mBroadcaster; }
- PropertyManager *getPropMngr() { return mPropMngr; }
-
- static NetworkManager *Instance();
-
-private:
- int startControllers();
- int stopControllers();
-
- NetworkManager(PropertyManager *propMngr);
- ControllerBinding *lookupBinding(Controller *c);
-
- void onInterfaceConnected(Controller *c);
- void onInterfaceDisconnected(Controller *c);
- void onControllerSuspending(Controller *c);
- void onControllerResumed(Controller *c);
-
- void onDhcpStateChanged(Controller *c, int state);
- void onDhcpEvent(Controller *c, int event);
- void onDhcpLeaseUpdated(Controller *c,
- struct in_addr *addr, struct in_addr *net,
- struct in_addr *brd,
- struct in_addr *gw, struct in_addr *dns1,
- struct in_addr *dns2);
-};
-#endif
diff --git a/nexus/NexusCommand.cpp b/nexus/NexusCommand.cpp
deleted file mode 100644
index 541eeeb..0000000
--- a/nexus/NexusCommand.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "NexusCommand.h"
-
-NexusCommand::NexusCommand(const char *cmd) :
- FrameworkCommand(cmd) {
-}
diff --git a/nexus/NexusCommand.h b/nexus/NexusCommand.h
deleted file mode 100644
index a7f944a..0000000
--- a/nexus/NexusCommand.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _NEXUS_COMMAND_H
-#define _NEXUS_COMMAND_H
-
-#include <sysutils/FrameworkCommand.h>
-
-class NexusCommand : public FrameworkCommand {
-public:
- NexusCommand(const char *cmd);
- virtual ~NexusCommand() {}
-};
-
-#endif
diff --git a/nexus/OpenVpnController.cpp b/nexus/OpenVpnController.cpp
deleted file mode 100644
index 6b6d892..0000000
--- a/nexus/OpenVpnController.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <errno.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#define LOG_TAG "OpenVpnController"
-#include <cutils/log.h>
-#include <cutils/properties.h>
-
-#include <sysutils/ServiceManager.h>
-
-#include "OpenVpnController.h"
-#include "PropertyManager.h"
-
-#define DAEMON_PROP_NAME "vpn.openvpn.status"
-#define DAEMON_CONFIG_FILE "/data/misc/openvpn/openvpn.conf"
-
-OpenVpnController::OpenVpnController(PropertyManager *propmngr,
- IControllerHandler *handlers) :
- VpnController(propmngr, handlers) {
- mServiceManager = new ServiceManager();
-}
-
-OpenVpnController::~OpenVpnController() {
- delete mServiceManager;
-}
-
-int OpenVpnController::start() {
- return VpnController::start();
-}
-
-int OpenVpnController::stop() {
- return VpnController::stop();
-}
-
-int OpenVpnController::enable() {
- char svc[PROPERTY_VALUE_MAX];
- char tmp[64];
-
- if (!mPropMngr->get("vpn.gateway", tmp, sizeof(tmp))) {
- ALOGE("Error reading property 'vpn.gateway' (%s)", strerror(errno));
- return -1;
- }
- snprintf(svc, sizeof(svc), "openvpn:--remote %s 1194", tmp);
-
- if (mServiceManager->start(svc))
- return -1;
-
- return 0;
-}
-
-int OpenVpnController::disable() {
- if (mServiceManager->stop("openvpn"))
- return -1;
- return 0;
-}
diff --git a/nexus/OpenVpnController.h b/nexus/OpenVpnController.h
deleted file mode 100644
index 529aab5..0000000
--- a/nexus/OpenVpnController.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _OPEN_VPN_CONTROLLER_H
-#define _OPEN_VPN_CONTROLLER_H
-
-#include "PropertyManager.h"
-#include "VpnController.h"
-
-class ServiceManager;
-class IControllerHandler;
-
-class OpenVpnController : public VpnController {
-private:
- ServiceManager *mServiceManager;
-
-public:
- OpenVpnController(PropertyManager *propmngr, IControllerHandler *handlers);
- virtual ~OpenVpnController();
-
- int start();
- int stop();
-
-private:
- int enable();
- int disable();
-};
-
-#endif
diff --git a/nexus/Property.cpp b/nexus/Property.cpp
deleted file mode 100644
index 6cfa955..0000000
--- a/nexus/Property.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-#include <errno.h>
-#include <strings.h>
-#include <netinet/in.h>
-
-#define LOG_TAG "Property"
-
-#include <cutils/log.h>
-
-#include "Property.h"
-
-Property::Property(const char *name, bool readOnly,
- int type, int numElements) :
- mName(name), mReadOnly(readOnly), mType(type),
- mNumElements(numElements) {
- if (index(name, '.')) {
- ALOGW("Property name %s violates namespace rules", name);
- }
-}
-
-StringProperty::StringProperty(const char *name, bool ro, int elements) :
- Property(name, ro, Property::Type_STRING, elements) {
-}
-int StringProperty::set(int idx, int value) {
- ALOGE("Integer 'set' called on string property!");
- errno = EINVAL;
- return -1;
-}
-int StringProperty::set(int idx, struct in_addr *value) {
- ALOGE("IpAddr 'set' called on string property!");
- errno = EINVAL;
- return -1;
-}
-int StringProperty::get(int idx, int *buffer) {
- ALOGE("Integer 'get' called on string property!");
- errno = EINVAL;
- return -1;
-}
-int StringProperty::get(int idx, struct in_addr *buffer) {
- ALOGE("IpAddr 'get' called on string property!");
- errno = EINVAL;
- return -1;
-}
-
-StringPropertyHelper::StringPropertyHelper(const char *name, bool ro,
- char *buffer, size_t max) :
- StringProperty(name, ro, 1) {
- mBuffer = buffer;
- mMax = max;
-}
-
-int StringPropertyHelper::set(int idx, const char *value) {
- if (idx != 0) {
- ALOGW("Attempt to use array index on StringPropertyHelper::set");
- errno = EINVAL;
- return -1;
- }
- strncpy(mBuffer, value, mMax);
- return 0;
-}
-
-int StringPropertyHelper::get(int idx, char *buffer, size_t max) {
- if (idx != 0) {
- ALOGW("Attempt to use array index on StringPropertyHelper::get");
- errno = EINVAL;
- return -1;
- }
- strncpy(buffer, mBuffer, max);
- return 0;
-}
-
-IntegerProperty::IntegerProperty(const char *name, bool ro, int elements) :
- Property(name, ro, Property::Type_INTEGER, elements) {
-}
-
-int IntegerProperty::set(int idx, const char *value) {
- ALOGE("String 'set' called on integer property!");
- errno = EINVAL;
- return -1;
-}
-int IntegerProperty::set(int idx, struct in_addr *value) {
- ALOGE("IpAddr 'set' called on integer property!");
- errno = EINVAL;
- return -1;
-}
-int IntegerProperty::get(int idx, char *buffer, size_t max) {
- ALOGE("String 'get' called on integer property!");
- errno = EINVAL;
- return -1;
-}
-int IntegerProperty::get(int idx, struct in_addr *buffer) {
- ALOGE("IpAddr 'get' called on integer property!");
- errno = EINVAL;
- return -1;
-}
-
-IntegerPropertyHelper::IntegerPropertyHelper(const char *name, bool ro,
- int *buffer) :
- IntegerProperty(name, ro, 1) {
- mBuffer = buffer;
-}
-
-int IntegerPropertyHelper::set(int idx, int value) {
- if (idx != 0) {
- ALOGW("Attempt to use array index on IntegerPropertyHelper::set");
- errno = EINVAL;
- return -1;
- }
- *mBuffer = value;
- return 0;
-}
-
-int IntegerPropertyHelper::get(int idx, int *buffer) {
- if (idx != 0) {
- ALOGW("Attempt to use array index on IntegerPropertyHelper::get");
- errno = EINVAL;
- return -1;
- }
- *buffer = *mBuffer;
- return 0;
-}
-
-IPV4AddressProperty::IPV4AddressProperty(const char *name, bool ro, int elements) :
- Property(name, ro, Property::Type_IPV4, elements) {
-}
-
-int IPV4AddressProperty::set(int idx, const char *value) {
- ALOGE("String 'set' called on ipv4 property!");
- errno = EINVAL;
- return -1;
-}
-int IPV4AddressProperty::set(int idx, int value) {
- ALOGE("Integer 'set' called on ipv4 property!");
- errno = EINVAL;
- return -1;
-}
-int IPV4AddressProperty::get(int idx, char *buffer, size_t max) {
- ALOGE("String 'get' called on ipv4 property!");
- errno = EINVAL;
- return -1;
-}
-int IPV4AddressProperty::get(int idx, int *buffer) {
- ALOGE("Integer 'get' called on ipv4 property!");
- errno = EINVAL;
- return -1;
-}
-
-IPV4AddressPropertyHelper::IPV4AddressPropertyHelper(const char *name, bool ro,
- struct in_addr *buffer) :
- IPV4AddressProperty(name, ro, 1) {
- mBuffer = buffer;
-}
-
-int IPV4AddressPropertyHelper::set(int idx, struct in_addr *value) {
- if (idx != 0) {
- ALOGW("Attempt to use array index on IPV4AddressPropertyHelper::set");
- errno = EINVAL;
- return -1;
- }
- memcpy(mBuffer, value, sizeof(struct in_addr));
- return 0;
-}
-
-int IPV4AddressPropertyHelper::get(int idx, struct in_addr *buffer) {
- if (idx != 0) {
- ALOGW("Attempt to use array index on IPV4AddressPropertyHelper::get");
- errno = EINVAL;
- return -1;
- }
- memcpy(buffer, mBuffer, sizeof(struct in_addr));
- return 0;
-}
-
-PropertyNamespace::PropertyNamespace(const char *name) {
- mName = strdup(name);
- mProperties = new PropertyCollection();
-}
-
-PropertyNamespace::~PropertyNamespace() {
- PropertyCollection::iterator it;
- for (it = mProperties->begin(); it != mProperties->end();) {
- delete (*it);
- it = mProperties->erase(it);
- }
- delete mProperties;
- free(mName);
-}
diff --git a/nexus/Property.h b/nexus/Property.h
deleted file mode 100644
index ceea2d3..0000000
--- a/nexus/Property.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PROPERTY_H
-#define _PROPERTY_H
-
-#include <netinet/in.h>
-#include <utils/List.h>
-
-class Property {
- const char *mName;
- bool mReadOnly;
- int mType;
- int mNumElements;
-
-public:
- static const int NameMaxSize = 128;
- static const int ValueMaxSize = 255;
-
- static const int Type_STRING = 1;
- static const int Type_INTEGER = 2;
- static const int Type_IPV4 = 3;
-
- Property(const char *name, bool ro, int type, int elements);
- virtual ~Property() {}
-
- virtual int set(int idx, const char *value) = 0;
- virtual int set(int idx, int value) = 0;
- virtual int set(int idx, struct in_addr *value) = 0;
-
- virtual int get(int idx, char *buffer, size_t max) = 0;
- virtual int get(int idx, int *buffer) = 0;
- virtual int get(int idx, struct in_addr *buffer) = 0;
-
- int getType() { return mType; }
- bool getReadOnly() { return mReadOnly; }
- int getNumElements() { return mNumElements; }
- const char *getName() { return mName; }
-};
-
-class StringProperty : public Property {
-public:
- StringProperty(const char *name, bool ro, int elements);
- virtual ~StringProperty() {}
-
- virtual int set(int idx, const char *value) = 0;
- int set(int idx, int value);
- int set(int idx, struct in_addr *value);
-
- virtual int get(int idx, char *buffer, size_t max) = 0;
- int get(int idx, int *buffer);
- int get(int idx, struct in_addr *buffer);
-};
-
-class StringPropertyHelper : public StringProperty {
- char *mBuffer;
- size_t mMax;
-public:
- StringPropertyHelper(const char *name, bool ro,
- char *buffer, size_t max);
- int set(int idx, const char *value);
- int get(int idx, char *buffer, size_t max);
-};
-
-class IntegerProperty : public Property {
-public:
- IntegerProperty(const char *name, bool ro, int elements);
- virtual ~IntegerProperty() {}
-
- int set(int idx, const char *value);
- virtual int set(int idx, int value) = 0;
- int set(int idx, struct in_addr *value);
-
- int get(int idx, char *buffer, size_t max);
- virtual int get(int idx, int *buffer) = 0;
- int get(int idx, struct in_addr *buffer);
-};
-
-class IntegerPropertyHelper : public IntegerProperty {
- int *mBuffer;
-public:
- IntegerPropertyHelper(const char *name, bool ro, int *buffer);
- int set(int idx, int value);
- int get(int idx, int *buffer);
-};
-
-class IPV4AddressProperty : public Property {
-public:
- IPV4AddressProperty(const char *name, bool ro, int elements);
- virtual ~IPV4AddressProperty() {}
-
- int set(int idx, const char *value);
- int set(int idx, int value);
- virtual int set(int idx, struct in_addr *value) = 0;
-
- int get(int idx, char *buffer, size_t max);
- int get(int idx, int *buffer);
- virtual int get(int idx, struct in_addr *buffer) = 0;
-};
-
-class IPV4AddressPropertyHelper : public IPV4AddressProperty {
- struct in_addr *mBuffer;
-public:
- IPV4AddressPropertyHelper(const char *name, bool ro, struct in_addr *buf);
- int set(int idx, struct in_addr *value);
- int get(int idx, struct in_addr *buffer);
-};
-
-typedef android::List<Property *> PropertyCollection;
-
-class PropertyNamespace {
- char *mName;
- PropertyCollection *mProperties;
-
-public:
- PropertyNamespace(const char *name);
- virtual ~PropertyNamespace();
-
- const char *getName() { return mName; }
- PropertyCollection *getProperties() { return mProperties; }
-};
-
-typedef android::List<PropertyNamespace *> PropertyNamespaceCollection;
-#endif
diff --git a/nexus/PropertyManager.cpp b/nexus/PropertyManager.cpp
deleted file mode 100644
index 41cdb41..0000000
--- a/nexus/PropertyManager.cpp
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#define LOG_TAG "PropertyManager"
-
-#include <cutils/log.h>
-
-#include "PropertyManager.h"
-
-PropertyManager::PropertyManager() {
- mNamespaces = new PropertyNamespaceCollection();
- pthread_mutex_init(&mLock, NULL);
-}
-
-PropertyManager::~PropertyManager() {
- PropertyNamespaceCollection::iterator it;
-
- for (it = mNamespaces->begin(); it != mNamespaces->end();) {
- delete (*it);
- it = mNamespaces->erase(it);
- }
- delete mNamespaces;
-}
-
-PropertyNamespace *PropertyManager::lookupNamespace_UNLOCKED(const char *ns) {
- PropertyNamespaceCollection::iterator ns_it;
-
- for (ns_it = mNamespaces->begin(); ns_it != mNamespaces->end(); ++ns_it) {
- if (!strcasecmp(ns, (*ns_it)->getName()))
- return (*ns_it);
- }
- errno = ENOENT;
- return NULL;
-}
-
-Property *PropertyManager::lookupProperty_UNLOCKED(PropertyNamespace *ns, const char *name) {
- PropertyCollection::iterator it;
-
- for (it = ns->getProperties()->begin();
- it != ns->getProperties()->end(); ++it) {
- if (!strcasecmp(name, (*it)->getName()))
- return (*it);
- }
- errno = ENOENT;
- return NULL;
-}
-
-int PropertyManager::attachProperty(const char *ns_name, Property *p) {
- PropertyNamespace *ns;
-
- ALOGD("Attaching property %s to namespace %s", p->getName(), ns_name);
- pthread_mutex_lock(&mLock);
- if (!(ns = lookupNamespace_UNLOCKED(ns_name))) {
- ALOGD("Creating namespace %s", ns_name);
- ns = new PropertyNamespace(ns_name);
- mNamespaces->push_back(ns);
- }
-
- if (lookupProperty_UNLOCKED(ns, p->getName())) {
- errno = EADDRINUSE;
- pthread_mutex_unlock(&mLock);
- ALOGE("Failed to register property %s.%s (%s)",
- ns_name, p->getName(), strerror(errno));
- return -1;
- }
-
- ns->getProperties()->push_back(p);
- pthread_mutex_unlock(&mLock);
- return 0;
-}
-
-int PropertyManager::detachProperty(const char *ns_name, Property *p) {
- PropertyNamespace *ns;
-
- ALOGD("Detaching property %s from namespace %s", p->getName(), ns_name);
- pthread_mutex_lock(&mLock);
- if (!(ns = lookupNamespace_UNLOCKED(ns_name))) {
- pthread_mutex_unlock(&mLock);
- ALOGE("Namespace '%s' not found", ns_name);
- return -1;
- }
-
- PropertyCollection::iterator it;
-
- for (it = ns->getProperties()->begin();
- it != ns->getProperties()->end(); ++it) {
- if (!strcasecmp(p->getName(), (*it)->getName())) {
- delete ((*it));
- ns->getProperties()->erase(it);
- pthread_mutex_unlock(&mLock);
- return 0;
- }
- }
-
- ALOGE("Property %s.%s not found", ns_name, p->getName());
- pthread_mutex_unlock(&mLock);
- errno = ENOENT;
- return -1;
-}
-
-int PropertyManager::doSet(Property *p, int idx, const char *value) {
-
- if (p->getReadOnly()) {
- errno = EROFS;
- return -1;
- }
-
- if (p->getType() == Property::Type_STRING) {
- return p->set(idx, value);
- } else if (p->getType() == Property::Type_INTEGER) {
- int tmp;
- errno = 0;
- tmp = strtol(value, (char **) NULL, 10);
- if (errno) {
- ALOGE("Failed to convert '%s' to int", value);
- errno = EINVAL;
- return -1;
- }
- return p->set(idx, tmp);
- } else if (p->getType() == Property::Type_IPV4) {
- struct in_addr tmp;
- if (!inet_aton(value, &tmp)) {
- ALOGE("Failed to convert '%s' to ipv4", value);
- errno = EINVAL;
- return -1;
- }
- return p->set(idx, &tmp);
- } else {
- ALOGE("Property '%s' has an unknown type (%d)", p->getName(),
- p->getType());
- errno = EINVAL;
- return -1;
- }
- errno = ENOENT;
- return -1;
-}
-
-int PropertyManager::doGet(Property *p, int idx, char *buffer, size_t max) {
-
- if (p->getType() == Property::Type_STRING) {
- if (p->get(idx, buffer, max)) {
- ALOGW("String property %s get failed (%s)", p->getName(),
- strerror(errno));
- return -1;
- }
- }
- else if (p->getType() == Property::Type_INTEGER) {
- int tmp;
- if (p->get(idx, &tmp)) {
- ALOGW("Integer property %s get failed (%s)", p->getName(),
- strerror(errno));
- return -1;
- }
- snprintf(buffer, max, "%d", tmp);
- } else if (p->getType() == Property::Type_IPV4) {
- struct in_addr tmp;
- if (p->get(idx, &tmp)) {
- ALOGW("IPV4 property %s get failed (%s)", p->getName(),
- strerror(errno));
- return -1;
- }
- strncpy(buffer, inet_ntoa(tmp), max);
- } else {
- ALOGE("Property '%s' has an unknown type (%d)", p->getName(),
- p->getType());
- errno = EINVAL;
- return -1;
- }
- return 0;
-}
-
-/*
- * IPropertyManager methods
- */
-
-int PropertyManager::set(const char *name, const char *value) {
-
- ALOGD("set %s = '%s'", name, value);
- pthread_mutex_lock(&mLock);
- PropertyNamespaceCollection::iterator ns_it;
- for (ns_it = mNamespaces->begin(); ns_it != mNamespaces->end(); ++ns_it) {
- PropertyCollection::iterator p_it;
- for (p_it = (*ns_it)->getProperties()->begin();
- p_it != (*ns_it)->getProperties()->end(); ++p_it) {
- for (int i = 0; i < (*p_it)->getNumElements(); i++) {
- char fqn[255];
- char tmp[8];
- sprintf(tmp, "_%d", i);
- snprintf(fqn, sizeof(fqn), "%s.%s%s",
- (*ns_it)->getName(), (*p_it)->getName(),
- ((*p_it)->getNumElements() > 1 ? tmp : ""));
- if (!strcasecmp(name, fqn)) {
- pthread_mutex_unlock(&mLock);
- return doSet((*p_it), i, value);
- }
- }
- }
- }
-
- ALOGE("Property %s not found", name);
- pthread_mutex_unlock(&mLock);
- errno = ENOENT;
- return -1;
-}
-
-const char *PropertyManager::get(const char *name, char *buffer, size_t max) {
- pthread_mutex_lock(&mLock);
- PropertyNamespaceCollection::iterator ns_it;
- for (ns_it = mNamespaces->begin(); ns_it != mNamespaces->end(); ++ns_it) {
- PropertyCollection::iterator p_it;
- for (p_it = (*ns_it)->getProperties()->begin();
- p_it != (*ns_it)->getProperties()->end(); ++p_it) {
-
- for (int i = 0; i < (*p_it)->getNumElements(); i++) {
- char fqn[255];
- char tmp[8];
- sprintf(tmp, "_%d", i);
- snprintf(fqn, sizeof(fqn), "%s.%s%s",
- (*ns_it)->getName(), (*p_it)->getName(),
- ((*p_it)->getNumElements() > 1 ? tmp : ""));
- if (!strcasecmp(name, fqn)) {
- pthread_mutex_unlock(&mLock);
- if (doGet((*p_it), i, buffer, max))
- return NULL;
- return buffer;
- }
- }
- }
- }
-
- ALOGE("Property %s not found", name);
- pthread_mutex_unlock(&mLock);
- errno = ENOENT;
- return NULL;
-}
-
-android::List<char *> *PropertyManager::createPropertyList(const char *prefix) {
- android::List<char *> *c = new android::List<char *>();
-
- pthread_mutex_lock(&mLock);
- PropertyNamespaceCollection::iterator ns_it;
- for (ns_it = mNamespaces->begin(); ns_it != mNamespaces->end(); ++ns_it) {
- PropertyCollection::iterator p_it;
- for (p_it = (*ns_it)->getProperties()->begin();
- p_it != (*ns_it)->getProperties()->end(); ++p_it) {
- for (int i = 0; i < (*p_it)->getNumElements(); i++) {
- char fqn[255];
- char tmp[8];
- sprintf(tmp, "_%d", i);
- snprintf(fqn, sizeof(fqn), "%s.%s%s",
- (*ns_it)->getName(), (*p_it)->getName(),
- ((*p_it)->getNumElements() > 1 ? tmp : ""));
- if (!prefix ||
- (prefix && !strncasecmp(fqn, prefix, strlen(prefix)))) {
- c->push_back(strdup(fqn));
- }
- }
- }
- }
- pthread_mutex_unlock(&mLock);
- return c;
-}
diff --git a/nexus/PropertyManager.h b/nexus/PropertyManager.h
deleted file mode 100644
index af56a9c..0000000
--- a/nexus/PropertyManager.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PROPERTY_MANAGER_H
-#define _PROPERTY_MANAGER_H
-
-#include <errno.h>
-#include <pthread.h>
-
-#include <utils/List.h>
-
-#include "Property.h"
-
-class PropertyManager {
- PropertyNamespaceCollection *mNamespaces;
- pthread_mutex_t mLock;
-
-public:
- PropertyManager();
- virtual ~PropertyManager();
- int attachProperty(const char *ns, Property *p);
- int detachProperty(const char *ns, Property *p);
-
- android::List<char *> *createPropertyList(const char *prefix);
-
- int set(const char *name, const char *value);
- const char *get(const char *name, char *buffer, size_t max);
-
-private:
- PropertyNamespace *lookupNamespace_UNLOCKED(const char *ns);
- Property *lookupProperty_UNLOCKED(PropertyNamespace *ns, const char *name);
- int doSet(Property *p, int idx, const char *value);
- int doGet(Property *p, int idx, char *buffer, size_t max);
-};
-
-#endif
diff --git a/nexus/ResponseCode.h b/nexus/ResponseCode.h
deleted file mode 100644
index 4b6cac8..0000000
--- a/nexus/ResponseCode.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _RESPONSECODE_H
-#define _RESPONSECODE_H
-
-class ResponseCode {
-public:
- // 100 series - Requestion action was initiated; expect another reply
- // before proceeding with a new command.
- static const int ActionInitiated = 100;
-
- static const int WifiScanResult = 125;
- static const int WifiNetworkList = 126;
-
- static const int PropertyRead = 127;
- static const int PropertySet = 128;
- static const int PropertyList = 129;
-
- // 200 series - Requested action has been successfully completed
- static const int CommandOkay = 200;
-
- // 400 series - The command was accepted but the requested action
- // did not take place.
- static const int OperationFailed = 400;
-
- // 500 series - The command was not accepted and the requested
- // action did not take place.
- static const int CommandSyntaxError = 500;
- static const int CommandParameterError = 501;
-
- // 600 series - Unsolicited broadcasts
- static const int UnsolicitedInformational = 600;
- static const int DhcpStateChange = 605;
- static const int SupplicantStateChange = 610;
- static const int ScanResultsReady = 615;
- static const int LinkSpeedChange = 620;
- static const int RssiChange = 625;
-};
-#endif
diff --git a/nexus/ScanResult.cpp b/nexus/ScanResult.cpp
deleted file mode 100644
index 72cb164..0000000
--- a/nexus/ScanResult.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-#include <ctype.h>
-
-#define LOG_TAG "ScanResult"
-#include <cutils/log.h>
-
-#include "ScanResult.h"
-
-ScanResult::ScanResult() {
-}
-
-ScanResult::ScanResult(char *rawResult) {
- char *p = rawResult, *q = rawResult;
- char tmp[255];
-
- // BSSID
- for (q = p; *q != '\t'; ++q);
- strncpy(tmp, p, (q - p));
- tmp[q-p] = '\0';
- mBssid = strdup(tmp);
- ++q;
-
- // FREQ
- for (p = q; *q != '\t'; ++q);
- strncpy(tmp, p, (q - p));
- tmp[q-p] = '\0';
- mFreq = atoi(tmp);
- ++q;
-
- // LEVEL
- for (p = q; *q != '\t'; ++q);
- strncpy(tmp, p, (q - p));
- tmp[q-p] = '\0';
- mLevel = atoi(tmp);
- ++q;
-
- // FLAGS
- for (p = q; *q != '\t'; ++q);
- strncpy(tmp, p, (q - p));
- tmp[q-p] = '\0';
- mFlags = strdup(tmp);
- ++q;
-
- // XXX: For some reason Supplicant sometimes sends a double-tab here.
- // haven't had time to dig into it ...
- if (*q == '\t')
- q++;
-
- for (p = q; *q != '\t'; ++q) {
- if (*q == '\0')
- break;
- }
-
- strncpy(tmp, p, (q - p));
- tmp[q-p] = '\0';
- mSsid = strdup(tmp);
- ++q;
-
- return;
- out_bad:
- ALOGW("Malformatted scan result (%s)", rawResult);
-}
-
-ScanResult::~ScanResult() {
- if (mBssid)
- free(mBssid);
- if (mFlags)
- free(mFlags);
- if (mSsid)
- free(mSsid);
-}
-
-ScanResult *ScanResult::clone() {
- ScanResult *r = new ScanResult();
-
- r->mBssid = strdup(mBssid);
- r->mFreq = mFreq;
- r->mLevel = mLevel;
- r->mFlags = strdup(mFlags);
- r->mSsid = strdup(mSsid);
-
- return r;
-}
diff --git a/nexus/ScanResult.h b/nexus/ScanResult.h
deleted file mode 100644
index 68ad0f0..0000000
--- a/nexus/ScanResult.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SCAN_RESULT_H
-#define _SCAN_RESULT_H
-
-#include <sys/types.h>
-
-#include <utils/List.h>
-
-class ScanResult {
- char *mBssid;
- uint32_t mFreq;
- int mLevel;
- char *mFlags;
- char *mSsid;
-
-private:
- ScanResult();
-
-public:
- ScanResult(char *rawResult);
- virtual ~ScanResult();
-
- ScanResult *clone();
-
- const char *getBssid() { return mBssid; }
- uint32_t getFreq() { return mFreq; }
- int getLevel() { return mLevel; }
- const char *getFlags() { return mFlags; }
- const char *getSsid() { return mSsid; }
-};
-
-typedef android::List<ScanResult *> ScanResultCollection;
-
-#endif
diff --git a/nexus/Supplicant.cpp b/nexus/Supplicant.cpp
deleted file mode 100644
index b604698..0000000
--- a/nexus/Supplicant.cpp
+++ /dev/null
@@ -1,677 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <errno.h>
-
-#define LOG_TAG "Supplicant"
-#include <cutils/log.h>
-#include <cutils/properties.h>
-
-#include "private/android_filesystem_config.h"
-
-#include <sysutils/ServiceManager.h>
-
-#include "Supplicant.h"
-#include "SupplicantListener.h"
-#include "NetworkManager.h"
-#include "WifiController.h"
-#include "SupplicantStatus.h"
-
-#include "libwpa_client/wpa_ctrl.h"
-
-#define IFACE_DIR "/data/system/wpa_supplicant"
-#define DRIVER_PROP_NAME "wlan.driver.status"
-#define SUPPLICANT_SERVICE_NAME "wpa_supplicant"
-#define SUPP_CONFIG_TEMPLATE "/system/etc/wifi/wpa_supplicant.conf"
-#define SUPP_CONFIG_FILE "/data/misc/wifi/wpa_supplicant.conf"
-
-Supplicant::Supplicant(WifiController *wc, ISupplicantEventHandler *handlers) {
- mHandlers = handlers;
- mController = wc;
- mInterfaceName = NULL;
- mCtrl = NULL;
- mMonitor = NULL;
- mListener = NULL;
-
- mServiceManager = new ServiceManager();
-
- mNetworks = new WifiNetworkCollection();
- pthread_mutex_init(&mNetworksLock, NULL);
-}
-
-Supplicant::~Supplicant() {
- delete mServiceManager;
- if (mInterfaceName)
- free(mInterfaceName);
-}
-
-int Supplicant::start() {
-
- if (setupConfig()) {
- ALOGW("Unable to setup supplicant.conf");
- }
-
- if (mServiceManager->start(SUPPLICANT_SERVICE_NAME)) {
- ALOGE("Error starting supplicant (%s)", strerror(errno));
- return -1;
- }
-
- wpa_ctrl_cleanup();
- if (connectToSupplicant()) {
- ALOGE("Error connecting to supplicant (%s)\n", strerror(errno));
- return -1;
- }
-
- if (retrieveInterfaceName()) {
- ALOGE("Error retrieving interface name (%s)\n", strerror(errno));
- return -1;
- }
-
- return 0;
-}
-
-int Supplicant::stop() {
-
- if (mListener->stopListener()) {
- ALOGW("Unable to stop supplicant listener (%s)", strerror(errno));
- return -1;
- }
-
- if (mServiceManager->stop(SUPPLICANT_SERVICE_NAME)) {
- ALOGW("Error stopping supplicant (%s)", strerror(errno));
- }
-
- if (mCtrl) {
- wpa_ctrl_close(mCtrl);
- mCtrl = NULL;
- }
- if (mMonitor) {
- wpa_ctrl_close(mMonitor);
- mMonitor = NULL;
- }
-
- return 0;
-}
-
-bool Supplicant::isStarted() {
- return mServiceManager->isRunning(SUPPLICANT_SERVICE_NAME);
-}
-
-int Supplicant::sendCommand(const char *cmd, char *reply, size_t *reply_len) {
-
- if (!mCtrl) {
- errno = ENOTCONN;
- return -1;
- }
-
-// ALOGD("sendCommand(): -> '%s'", cmd);
-
- int rc;
- memset(reply, 0, *reply_len);
- if ((rc = wpa_ctrl_request(mCtrl, cmd, strlen(cmd), reply, reply_len, NULL)) == -2) {
- errno = ETIMEDOUT;
- return -1;
- } else if (rc < 0 || !strncmp(reply, "FAIL", 4)) {
- strcpy(reply, "FAIL");
- errno = EIO;
- return -1;
- }
-
- // ALOGD("sendCommand(): <- '%s'", reply);
- return 0;
-}
-SupplicantStatus *Supplicant::getStatus() {
- char *reply;
- size_t len = 4096;
-
- if (!(reply = (char *) malloc(len))) {
- errno = ENOMEM;
- return NULL;
- }
-
- if (sendCommand("STATUS", reply, &len)) {
- free(reply);
- return NULL;
- }
-
- SupplicantStatus *ss = SupplicantStatus::createStatus(reply, len);
-
- free (reply);
- return ss;
-}
-
-/*
- * Retrieves the list of networks from Supplicant
- * and merge them into our current list
- */
-int Supplicant::refreshNetworkList() {
- char *reply;
- size_t len = 4096;
-
- if (!(reply = (char *) malloc(len))) {
- errno = ENOMEM;
- return -1;
- }
-
- if (sendCommand("LIST_NETWORKS", reply, &len)) {
- free(reply);
- return -1;
- }
-
- char *linep;
- char *linep_next = NULL;
-
- if (!strtok_r(reply, "\n", &linep_next)) {
- ALOGW("Malformatted network list\n");
- free(reply);
- errno = EIO;
- return -1;
- }
-
- PropertyManager *pm = NetworkManager::Instance()->getPropMngr();
- pthread_mutex_lock(&mNetworksLock);
-
- int num_added = 0;
- int num_refreshed = 0;
- int num_removed = 0;
- while((linep = strtok_r(NULL, "\n", &linep_next))) {
- // TODO: Move the decode into a static method so we
- // don't create new_wn when we don't have to.
- WifiNetwork *new_wn = new WifiNetwork(mController, this, linep);
- WifiNetwork *merge_wn;
-
- if ((merge_wn = this->lookupNetwork_UNLOCKED(new_wn->getNetworkId()))) {
- num_refreshed++;
- if (merge_wn->refresh()) {
- ALOGW("Error refreshing network %d (%s)",
- merge_wn->getNetworkId(), strerror(errno));
- }
- delete new_wn;
- } else {
- num_added++;
- char new_ns[20];
- snprintf(new_ns, sizeof(new_ns), "wifi.net.%d", new_wn->getNetworkId());
- new_wn->attachProperties(pm, new_ns);
- mNetworks->push_back(new_wn);
- if (new_wn->refresh()) {
- ALOGW("Unable to refresh network id %d (%s)",
- new_wn->getNetworkId(), strerror(errno));
- }
- }
- }
-
- if (!mNetworks->empty()) {
- // TODO: Add support for detecting removed networks
- WifiNetworkCollection::iterator i;
-
- for (i = mNetworks->begin(); i != mNetworks->end(); ++i) {
- if (0) {
- num_removed++;
- char del_ns[20];
- snprintf(del_ns, sizeof(del_ns), "wifi.net.%d", (*i)->getNetworkId());
- (*i)->detachProperties(pm, del_ns);
- delete (*i);
- i = mNetworks->erase(i);
- }
- }
- }
-
-
- ALOGD("Networks added %d, refreshed %d, removed %d\n",
- num_added, num_refreshed, num_removed);
- pthread_mutex_unlock(&mNetworksLock);
-
- free(reply);
- return 0;
-}
-
-int Supplicant::connectToSupplicant() {
- if (!isStarted())
- ALOGW("Supplicant service not running");
-
- mCtrl = wpa_ctrl_open("tiwlan0"); // XXX:
- if (mCtrl == NULL) {
- ALOGE("Unable to open connection to supplicant on \"%s\": %s",
- "tiwlan0", strerror(errno));
- return -1;
- }
- mMonitor = wpa_ctrl_open("tiwlan0");
- if (mMonitor == NULL) {
- wpa_ctrl_close(mCtrl);
- mCtrl = NULL;
- return -1;
- }
- if (wpa_ctrl_attach(mMonitor) != 0) {
- wpa_ctrl_close(mMonitor);
- wpa_ctrl_close(mCtrl);
- mCtrl = mMonitor = NULL;
- return -1;
- }
-
- mListener = new SupplicantListener(mHandlers, mMonitor);
-
- if (mListener->startListener()) {
- ALOGE("Error - unable to start supplicant listener");
- stop();
- return -1;
- }
- return 0;
-}
-
-int Supplicant::setScanMode(bool active) {
- char reply[255];
- size_t len = sizeof(reply);
-
- if (sendCommand((active ? "DRIVER SCAN-ACTIVE" : "DRIVER SCAN-PASSIVE"),
- reply, &len)) {
- ALOGW("triggerScan(%d): Error setting scan mode (%s)", active,
- strerror(errno));
- return -1;
- }
- return 0;
-}
-
-int Supplicant::triggerScan() {
- char reply[255];
- size_t len = sizeof(reply);
-
- if (sendCommand("SCAN", reply, &len)) {
- ALOGW("triggerScan(): Error initiating scan");
- return -1;
- }
- return 0;
-}
-
-int Supplicant::getRssi(int *buffer) {
- char reply[64];
- size_t len = sizeof(reply);
-
- if (sendCommand("DRIVER RSSI", reply, &len)) {
- ALOGW("Failed to get RSSI (%s)", strerror(errno));
- return -1;
- }
-
- char *next = reply;
- char *s;
- for (int i = 0; i < 3; i++) {
- if (!(s = strsep(&next, " "))) {
- ALOGE("Error parsing RSSI");
- errno = EIO;
- return -1;
- }
- }
- *buffer = atoi(s);
- return 0;
-}
-
-int Supplicant::getLinkSpeed() {
- char reply[64];
- size_t len = sizeof(reply);
-
- if (sendCommand("DRIVER LINKSPEED", reply, &len)) {
- ALOGW("Failed to get LINKSPEED (%s)", strerror(errno));
- return -1;
- }
-
- char *next = reply;
- char *s;
-
- if (!(s = strsep(&next, " "))) {
- ALOGE("Error parsing LINKSPEED");
- errno = EIO;
- return -1;
- }
-
- if (!(s = strsep(&next, " "))) {
- ALOGE("Error parsing LINKSPEED");
- errno = EIO;
- return -1;
- }
- return atoi(s);
-}
-
-int Supplicant::stopDriver() {
- char reply[64];
- size_t len = sizeof(reply);
-
- ALOGD("stopDriver()");
-
- if (sendCommand("DRIVER STOP", reply, &len)) {
- ALOGW("Failed to stop driver (%s)", strerror(errno));
- return -1;
- }
- return 0;
-}
-
-int Supplicant::startDriver() {
- char reply[64];
- size_t len = sizeof(reply);
-
- ALOGD("startDriver()");
- if (sendCommand("DRIVER START", reply, &len)) {
- ALOGW("Failed to start driver (%s)", strerror(errno));
- return -1;
- }
- return 0;
-}
-
-WifiNetwork *Supplicant::createNetwork() {
- char reply[255];
- size_t len = sizeof(reply) -1;
-
- if (sendCommand("ADD_NETWORK", reply, &len))
- return NULL;
-
- if (reply[strlen(reply) -1] == '\n')
- reply[strlen(reply) -1] = '\0';
-
- WifiNetwork *wn = new WifiNetwork(mController, this, atoi(reply));
- PropertyManager *pm = NetworkManager::Instance()->getPropMngr();
- pthread_mutex_lock(&mNetworksLock);
- char new_ns[20];
- snprintf(new_ns, sizeof(new_ns), "wifi.net.%d", wn->getNetworkId());
- wn->attachProperties(pm, new_ns);
- mNetworks->push_back(wn);
- pthread_mutex_unlock(&mNetworksLock);
- return wn;
-}
-
-int Supplicant::removeNetwork(WifiNetwork *wn) {
- char req[64];
-
- sprintf(req, "REMOVE_NETWORK %d", wn->getNetworkId());
- char reply[32];
- size_t len = sizeof(reply) -1;
-
- if (sendCommand(req, reply, &len))
- return -1;
-
- pthread_mutex_lock(&mNetworksLock);
- WifiNetworkCollection::iterator it;
- for (it = mNetworks->begin(); it != mNetworks->end(); ++it) {
- if ((*it) == wn) {
- mNetworks->erase(it);
- break;
- }
- }
- pthread_mutex_unlock(&mNetworksLock);
- return 0;
-}
-
-WifiNetwork *Supplicant::lookupNetwork(int networkId) {
- pthread_mutex_lock(&mNetworksLock);
- WifiNetwork *wn = lookupNetwork_UNLOCKED(networkId);
- pthread_mutex_unlock(&mNetworksLock);
- return wn;
-}
-
-WifiNetwork *Supplicant::lookupNetwork_UNLOCKED(int networkId) {
- WifiNetworkCollection::iterator it;
- for (it = mNetworks->begin(); it != mNetworks->end(); ++it) {
- if ((*it)->getNetworkId() == networkId) {
- return *it;
- }
- }
- errno = ENOENT;
- return NULL;
-}
-
-WifiNetworkCollection *Supplicant::createNetworkList() {
- WifiNetworkCollection *d = new WifiNetworkCollection();
- WifiNetworkCollection::iterator i;
-
- pthread_mutex_lock(&mNetworksLock);
- for (i = mNetworks->begin(); i != mNetworks->end(); ++i)
- d->push_back((*i)->clone());
-
- pthread_mutex_unlock(&mNetworksLock);
- return d;
-}
-
-int Supplicant::setupConfig() {
- char buf[2048];
- int srcfd, destfd;
- int nread;
-
- if (access(SUPP_CONFIG_FILE, R_OK|W_OK) == 0) {
- return 0;
- } else if (errno != ENOENT) {
- ALOGE("Cannot access \"%s\": %s", SUPP_CONFIG_FILE, strerror(errno));
- return -1;
- }
-
- srcfd = open(SUPP_CONFIG_TEMPLATE, O_RDONLY);
- if (srcfd < 0) {
- ALOGE("Cannot open \"%s\": %s", SUPP_CONFIG_TEMPLATE, strerror(errno));
- return -1;
- }
-
- destfd = open(SUPP_CONFIG_FILE, O_CREAT|O_WRONLY, 0660);
- if (destfd < 0) {
- close(srcfd);
- ALOGE("Cannot create \"%s\": %s", SUPP_CONFIG_FILE, strerror(errno));
- return -1;
- }
-
- while ((nread = read(srcfd, buf, sizeof(buf))) != 0) {
- if (nread < 0) {
- ALOGE("Error reading \"%s\": %s", SUPP_CONFIG_TEMPLATE, strerror(errno));
- close(srcfd);
- close(destfd);
- unlink(SUPP_CONFIG_FILE);
- return -1;
- }
- write(destfd, buf, nread);
- }
-
- close(destfd);
- close(srcfd);
-
- if (chown(SUPP_CONFIG_FILE, AID_SYSTEM, AID_WIFI) < 0) {
- ALOGE("Error changing group ownership of %s to %d: %s",
- SUPP_CONFIG_FILE, AID_WIFI, strerror(errno));
- unlink(SUPP_CONFIG_FILE);
- return -1;
- }
- return 0;
-}
-
-int Supplicant::setNetworkVar(int networkId, const char *var, const char *val) {
- char reply[255];
- size_t len = sizeof(reply) -1;
-
- ALOGD("netid %d, var '%s' = '%s'", networkId, var, val);
- char *tmp;
- asprintf(&tmp, "SET_NETWORK %d %s %s", networkId, var, val);
- if (sendCommand(tmp, reply, &len)) {
- free(tmp);
- return -1;
- }
- free(tmp);
-
- len = sizeof(reply) -1;
- if (sendCommand("SAVE_CONFIG", reply, &len)) {
- ALOGE("Error saving config after %s = %s", var, val);
- return -1;
- }
- return 0;
-}
-
-const char *Supplicant::getNetworkVar(int networkId, const char *var,
- char *buffer, size_t max) {
- size_t len = max - 1;
- char *tmp;
-
- asprintf(&tmp, "GET_NETWORK %d %s", networkId, var);
- if (sendCommand(tmp, buffer, &len)) {
- free(tmp);
- return NULL;
- }
- free(tmp);
- return buffer;
-}
-
-int Supplicant::enableNetwork(int networkId, bool enabled) {
- char req[64];
-
- if (enabled)
- sprintf(req, "ENABLE_NETWORK %d", networkId);
- else
- sprintf(req, "DISABLE_NETWORK %d", networkId);
-
- char reply[16];
- size_t len = sizeof(reply) -1;
-
- if (sendCommand(req, reply, &len))
- return -1;
- return 0;
-}
-
-int Supplicant::enablePacketFilter() {
- char req[128];
- char reply[16];
- size_t len;
- int i;
-
- for (i = 0; i <=3; i++) {
- snprintf(req, sizeof(req), "DRIVER RXFILTER-ADD %d", i);
- len = sizeof(reply);
- if (sendCommand(req, reply, &len))
- return -1;
- }
-
- len = sizeof(reply);
- if (sendCommand("DRIVER RXFILTER-START", reply, &len))
- return -1;
- return 0;
-}
-
-int Supplicant::disablePacketFilter() {
- char req[128];
- char reply[16];
- size_t len;
- int i;
-
- len = sizeof(reply);
- if (sendCommand("DRIVER RXFILTER-STOP", reply, &len))
- return -1;
-
- for (i = 3; i >=0; i--) {
- snprintf(req, sizeof(req), "DRIVER RXFILTER-REMOVE %d", i);
- len = sizeof(reply);
- if (sendCommand(req, reply, &len))
- return -1;
- }
- return 0;
-}
-
-int Supplicant::enableBluetoothCoexistenceScan() {
- char req[128];
- char reply[16];
- size_t len;
- int i;
-
- len = sizeof(reply);
- if (sendCommand("DRIVER BTCOEXSCAN-START", reply, &len))
- return -1;
- return 0;
-}
-
-int Supplicant::disableBluetoothCoexistenceScan() {
- char req[128];
- char reply[16];
- size_t len;
- int i;
-
- len = sizeof(reply);
- if (sendCommand("DRIVER BTCOEXSCAN-STOP", reply, &len))
- return -1;
- return 0;
-}
-
-int Supplicant::setBluetoothCoexistenceMode(int mode) {
- char req[64];
-
- sprintf(req, "DRIVER BTCOEXMODE %d", mode);
-
- char reply[16];
- size_t len = sizeof(reply) -1;
-
- if (sendCommand(req, reply, &len))
- return -1;
- return 0;
-}
-
-int Supplicant::setApScanMode(int mode) {
- char req[64];
-
-// ALOGD("setApScanMode(%d)", mode);
- sprintf(req, "AP_SCAN %d", mode);
-
- char reply[16];
- size_t len = sizeof(reply) -1;
-
- if (sendCommand(req, reply, &len))
- return -1;
- return 0;
-}
-
-
-int Supplicant::retrieveInterfaceName() {
- char reply[255];
- size_t len = sizeof(reply) -1;
-
- if (sendCommand("INTERFACES", reply, &len))
- return -1;
-
- reply[strlen(reply)-1] = '\0';
- mInterfaceName = strdup(reply);
- return 0;
-}
-
-int Supplicant::reconnect() {
- char req[128];
- char reply[16];
- size_t len;
- int i;
-
- len = sizeof(reply);
- if (sendCommand("RECONNECT", reply, &len))
- return -1;
- return 0;
-}
-
-int Supplicant::disconnect() {
- char req[128];
- char reply[16];
- size_t len;
- int i;
-
- len = sizeof(reply);
- if (sendCommand("DISCONNECT", reply, &len))
- return -1;
- return 0;
-}
-
-int Supplicant::getNetworkCount() {
- pthread_mutex_lock(&mNetworksLock);
- int cnt = mNetworks->size();
- pthread_mutex_unlock(&mNetworksLock);
- return cnt;
-}
diff --git a/nexus/Supplicant.h b/nexus/Supplicant.h
deleted file mode 100644
index 3900f4f..0000000
--- a/nexus/Supplicant.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SUPPLICANT_H
-#define _SUPPLICANT_H
-
-struct wpa_ctrl;
-class SupplicantListener;
-class ServiceManager;
-class Controller;
-class WifiController;
-class SupplicantStatus;
-
-#include <pthread.h>
-
-#include "WifiNetwork.h"
-#include "ISupplicantEventHandler.h"
-
-class Supplicant {
- struct wpa_ctrl *mCtrl;
- struct wpa_ctrl *mMonitor;
- SupplicantListener *mListener;
- ServiceManager *mServiceManager;
- WifiController *mController;
- char *mInterfaceName;
-
- WifiNetworkCollection *mNetworks;
- pthread_mutex_t mNetworksLock;
- ISupplicantEventHandler *mHandlers;
-
-public:
- Supplicant(WifiController *wc, ISupplicantEventHandler *handlers);
- virtual ~Supplicant();
-
- int start();
- int stop();
- bool isStarted();
-
- int setScanMode(bool active);
- int triggerScan();
-
- WifiNetwork *createNetwork();
- WifiNetwork *lookupNetwork(int networkId);
- int removeNetwork(WifiNetwork *net);
- WifiNetworkCollection *createNetworkList();
- int refreshNetworkList();
-
- int setNetworkVar(int networkId, const char *var, const char *value);
- const char *getNetworkVar(int networkid, const char *var, char *buffer,
- size_t max);
- int enableNetwork(int networkId, bool enabled);
-
- int disconnect();
- int reconnect();
- int reassociate();
- int setApScanMode(int mode);
- int enablePacketFilter();
- int disablePacketFilter();
- int setBluetoothCoexistenceMode(int mode);
- int enableBluetoothCoexistenceScan();
- int disableBluetoothCoexistenceScan();
- int stopDriver();
- int startDriver();
- int getRssi(int *buffer);
- int getLinkSpeed();
- int getNetworkCount();
-
- SupplicantStatus *getStatus();
-
- Controller *getController() { return (Controller *) mController; }
- const char *getInterfaceName() { return mInterfaceName; }
-
- int sendCommand(const char *cmd, char *reply, size_t *reply_len);
-
-private:
- int connectToSupplicant();
- int setupConfig();
- int retrieveInterfaceName();
- WifiNetwork *lookupNetwork_UNLOCKED(int networkId);
-};
-
-#endif
diff --git a/nexus/SupplicantAssociatedEvent.cpp b/nexus/SupplicantAssociatedEvent.cpp
deleted file mode 100644
index e40411e..0000000
--- a/nexus/SupplicantAssociatedEvent.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-
-#define LOG_TAG "SupplicantAssociatedEvent"
-#include <cutils/log.h>
-
-#include "SupplicantAssociatedEvent.h"
-
-SupplicantAssociatedEvent::SupplicantAssociatedEvent(int level, char *event,
- size_t len) :
- SupplicantEvent(SupplicantEvent::EVENT_ASSOCIATED,
- level) {
- char *p = event;
-
- // "00:13:46:40:40:aa"
- mBssid = (char *) malloc(18);
- strncpy(mBssid, p, 17);
- mBssid[17] = '\0';
-}
-
-SupplicantAssociatedEvent::~SupplicantAssociatedEvent() {
- if (mBssid)
- free(mBssid);
-}
-
diff --git a/nexus/SupplicantAssociatedEvent.h b/nexus/SupplicantAssociatedEvent.h
deleted file mode 100644
index aa33c59..0000000
--- a/nexus/SupplicantAssociatedEvent.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SupplicantAssociatedEvent_H
-#define _SupplicantAssociatedEvent_H
-
-#include "SupplicantEvent.h"
-
-class SupplicantAssociatedEvent : public SupplicantEvent {
- char *mBssid;
- char *mSsid;
- int mFreq;
-
-public:
- SupplicantAssociatedEvent(int level, char *event, size_t len);
- virtual ~SupplicantAssociatedEvent();
-
- const char *getBssid() { return mBssid; }
-};
-
-#endif
diff --git a/nexus/SupplicantAssociatingEvent.cpp b/nexus/SupplicantAssociatingEvent.cpp
deleted file mode 100644
index 8fe502e..0000000
--- a/nexus/SupplicantAssociatingEvent.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-
-#define LOG_TAG "SupplicantAssociatingEvent"
-#include <cutils/log.h>
-
-#include "SupplicantAssociatingEvent.h"
-
-SupplicantAssociatingEvent::SupplicantAssociatingEvent(int level, char *event,
- size_t len) :
- SupplicantEvent(SupplicantEvent::EVENT_ASSOCIATING,
- level) {
- char *p = event;
-
- mBssid = NULL;
- mSsid = NULL;
- mFreq = -1;
-
- // SSID 'default'
- // OR
- // "00:13:46:40:40:aa (SSID='default' freq=2437 MHz)"
-
- if (strncmp(event, "SSID", 4)) {
- mBssid = (char *) malloc(18);
- strncpy(mBssid, p, 17);
- mBssid[17] = '\0';
- p += 25;
-
- // "00:13:46:40:40:aa (SSID='default' freq=2437 MHz)"
- // ^
- // p
- char *q = index(p, '\'');
- if (!q) {
- ALOGE("Unable to decode SSID (p = {%s})\n", p);
- return;
- }
- mSsid = (char *) malloc((q - p) +1);
- strncpy(mSsid, p, q-p);
- mSsid[q-p] = '\0';
-
- p = q + 7;
-
- // "00:13:46:40:40:aa (SSID='default' freq=2437 MHz)"
- // ^
- // p
- if (!(q = index(p, ' '))) {
- ALOGE("Unable to decode frequency\n");
- return;
- }
- *q = '\0';
- mFreq = atoi(p);
- } else {
- p+= 6;
-
- // SSID 'default'
- // ^
- // p
-
- char *q = index(p, '\'');
- if (!q) {
- ALOGE("Unable to decode SSID (p = {%s})\n", p);
- return;
- }
- mSsid = (char *) malloc((q - p) +1);
- strncpy(mSsid, p, q-p);
- mSsid[q-p] = '\0';
- }
-}
-
-SupplicantAssociatingEvent::SupplicantAssociatingEvent(const char *bssid,
- const char *ssid,
- int freq) :
- SupplicantEvent(SupplicantEvent::EVENT_ASSOCIATING, -1) {
- mBssid = strdup(bssid);
- mSsid= strdup(ssid);
- mFreq = freq;
-}
-
-SupplicantAssociatingEvent::~SupplicantAssociatingEvent() {
- if (mBssid)
- free(mBssid);
- if (mSsid)
- free(mSsid);
-}
-
diff --git a/nexus/SupplicantAssociatingEvent.h b/nexus/SupplicantAssociatingEvent.h
deleted file mode 100644
index d3a4d5c..0000000
--- a/nexus/SupplicantAssociatingEvent.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SupplicantAssociatingEvent_H
-#define _SupplicantAssociatingEvent_H
-
-#include "SupplicantEvent.h"
-
-class SupplicantAssociatingEvent : public SupplicantEvent {
- char *mBssid;
- char *mSsid;
- int mFreq;
-
-public:
- SupplicantAssociatingEvent(int level, char *event, size_t len);
- SupplicantAssociatingEvent(const char *bssid, const char *ssid, int freq);
- virtual ~SupplicantAssociatingEvent();
-
- const char *getBssid() { return mBssid; }
- const char *getSsid() { return mSsid; }
- int getFreq() { return mFreq;}
-};
-
-#endif
diff --git a/nexus/SupplicantConnectedEvent.cpp b/nexus/SupplicantConnectedEvent.cpp
deleted file mode 100644
index 107c766..0000000
--- a/nexus/SupplicantConnectedEvent.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "SupplicantConnectedEvent"
-#include <cutils/log.h>
-
-#include "SupplicantConnectedEvent.h"
-
-SupplicantConnectedEvent::SupplicantConnectedEvent(int level, char *event,
- size_t len) :
- SupplicantEvent(SupplicantEvent::EVENT_CONNECTED,
- level) {
- char *p;
-
- // "- Connection to 00:13:46:40:40:aa completed (auth) [id=1 id_str=], 89"
-
- if ((p = index(event + 2, ' ')) && (++p = index(p, ' '))) {
- mBssid = (char *) malloc(18);
- strncpy(mBssid, ++p, 17);
- mBssid[17] = '\0';
-
- // "- Connection to 00:13:46:40:40:aa completed (auth) [id=1 id_str=], 89"
- // ^
- // p
-
- if ((p = index(p, ' ')) && ((++p = index(p, ' ')))) {
- if (!strncmp(++p, "(auth)", 6))
- mReassociated = false;
- else
- mReassociated = true;
- } else
- ALOGE("Unable to decode re-assocation");
- } else
- ALOGE("Unable to decode event");
-}
-
-SupplicantConnectedEvent::SupplicantConnectedEvent(const char *bssid,
- bool reassocated) :
- SupplicantEvent(SupplicantEvent::EVENT_CONNECTED, -1) {
- mBssid = strdup(bssid);
- mReassociated = reassocated;
-}
-
-SupplicantConnectedEvent::~SupplicantConnectedEvent() {
- if (mBssid)
- free(mBssid);
-}
-
diff --git a/nexus/SupplicantConnectedEvent.h b/nexus/SupplicantConnectedEvent.h
deleted file mode 100644
index 03e9842..0000000
--- a/nexus/SupplicantConnectedEvent.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SupplicantConnectedEvent_H
-#define _SupplicantConnectedEvent_H
-
-#include "SupplicantEvent.h"
-
-class SupplicantConnectedEvent : public SupplicantEvent {
-private:
- char *mBssid;
- bool mReassociated;
-
-public:
- SupplicantConnectedEvent(int level, char *event, size_t len);
- SupplicantConnectedEvent(const char *bssid, bool reassicated);
- virtual ~SupplicantConnectedEvent();
-
- const char *getBssid() { return mBssid; }
- bool getReassociated() { return mReassociated; }
-};
-
-#endif
diff --git a/nexus/SupplicantConnectionTimeoutEvent.cpp b/nexus/SupplicantConnectionTimeoutEvent.cpp
deleted file mode 100644
index 8b8a7d7..0000000
--- a/nexus/SupplicantConnectionTimeoutEvent.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "SupplicantConnectionTimeoutEvent"
-#include <cutils/log.h>
-
-#include "SupplicantConnectionTimeoutEvent.h"
-
-SupplicantConnectionTimeoutEvent::SupplicantConnectionTimeoutEvent(int level, char *event,
- size_t len) :
- SupplicantEvent(SupplicantEvent::EVENT_CONNECTIONTIMEOUT,
- level) {
- // 00:13:46:40:40:aa timed out.'
- mBssid = (char *) malloc(18);
- strncpy(mBssid, event, 17);
- mBssid[17] = '\0';
-}
-
-SupplicantConnectionTimeoutEvent::~SupplicantConnectionTimeoutEvent() {
- if (mBssid)
- free(mBssid);
-}
-
diff --git a/nexus/SupplicantConnectionTimeoutEvent.h b/nexus/SupplicantConnectionTimeoutEvent.h
deleted file mode 100644
index 0d2606d..0000000
--- a/nexus/SupplicantConnectionTimeoutEvent.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SupplicantConnectionTimeoutEvent_H
-#define _SupplicantConnectionTimeoutEvent_H
-
-#include "SupplicantEvent.h"
-
-class SupplicantConnectionTimeoutEvent : public SupplicantEvent {
-private:
- char *mBssid;
- bool mReassociated;
-
-public:
- SupplicantConnectionTimeoutEvent(int level, char *event, size_t len);
- virtual ~SupplicantConnectionTimeoutEvent();
-
- const char *getBssid() { return mBssid; }
-};
-
-#endif
diff --git a/nexus/SupplicantDisconnectedEvent.cpp b/nexus/SupplicantDisconnectedEvent.cpp
deleted file mode 100644
index 11e499d..0000000
--- a/nexus/SupplicantDisconnectedEvent.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "SupplicantDisconnectedEvent"
-#include <cutils/log.h>
-
-#include "SupplicantDisconnectedEvent.h"
-
-SupplicantDisconnectedEvent::SupplicantDisconnectedEvent(int level, char *event,
- size_t len) :
- SupplicantEvent(SupplicantEvent::EVENT_DISCONNECTED,
- level) {
-}
-
-SupplicantDisconnectedEvent::SupplicantDisconnectedEvent() :
- SupplicantEvent(SupplicantEvent::EVENT_DISCONNECTED, -1) {
-}
-
-SupplicantDisconnectedEvent::~SupplicantDisconnectedEvent() {
-}
diff --git a/nexus/SupplicantDisconnectedEvent.h b/nexus/SupplicantDisconnectedEvent.h
deleted file mode 100644
index c09ec62..0000000
--- a/nexus/SupplicantDisconnectedEvent.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SupplicantDisconnectedEvent_H
-#define _SupplicantDisconnectedEvent_H
-
-#include "SupplicantEvent.h"
-
-class SupplicantDisconnectedEvent : public SupplicantEvent {
-
-public:
- SupplicantDisconnectedEvent(int level, char *event, size_t len);
- SupplicantDisconnectedEvent();
- virtual ~SupplicantDisconnectedEvent();
-};
-
-#endif
diff --git a/nexus/SupplicantEvent.cpp b/nexus/SupplicantEvent.cpp
deleted file mode 100644
index faf7b45..0000000
--- a/nexus/SupplicantEvent.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-
-#define LOG_TAG "SupplicantEvent"
-#include <cutils/log.h>
-
-#include "SupplicantEvent.h"
-
-#include "libwpa_client/wpa_ctrl.h"
-
-SupplicantEvent::SupplicantEvent(int type, int level) {
- mType = type;
- mLevel = level;
-}
diff --git a/nexus/SupplicantEvent.h b/nexus/SupplicantEvent.h
deleted file mode 100644
index 9d7cbd9..0000000
--- a/nexus/SupplicantEvent.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SUPPLICANT_EVENT_H
-#define _SUPPLICANT_EVENT_H
-
-#include <sys/types.h>
-
-class SupplicantEvent {
-private:
- int mType;
- int mLevel;
-
-public:
- static const int EVENT_UNKNOWN = 0;
- static const int EVENT_CONNECTED = 1;
- static const int EVENT_DISCONNECTED = 2;
- static const int EVENT_TERMINATING = 3;
- static const int EVENT_PASSWORD_CHANGED = 4;
- static const int EVENT_EAP_NOTIFICATION = 5;
- static const int EVENT_EAP_STARTED = 6;
- static const int EVENT_EAP_METHOD = 7;
- static const int EVENT_EAP_SUCCESS = 8;
- static const int EVENT_EAP_FAILURE = 9;
- static const int EVENT_SCAN_RESULTS = 10;
- static const int EVENT_STATE_CHANGE = 11;
- static const int EVENT_LINK_SPEED = 12;
- static const int EVENT_DRIVER_STATE = 13;
- static const int EVENT_ASSOCIATING = 14;
- static const int EVENT_ASSOCIATED = 15;
- static const int EVENT_CONNECTIONTIMEOUT = 16;
-
-public:
- SupplicantEvent(int type, int level);
- virtual ~SupplicantEvent() {}
-
- int getType() { return mType; }
- int getLevel() { return mLevel; }
-};
-
-#endif
diff --git a/nexus/SupplicantEventFactory.cpp b/nexus/SupplicantEventFactory.cpp
deleted file mode 100644
index f91db15..0000000
--- a/nexus/SupplicantEventFactory.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-
-#define LOG_TAG "SupplicantEventFactory"
-#include <cutils/log.h>
-
-#include "SupplicantEvent.h"
-#include "SupplicantEventFactory.h"
-#include "SupplicantAssociatingEvent.h"
-#include "SupplicantAssociatedEvent.h"
-#include "SupplicantConnectedEvent.h"
-#include "SupplicantStateChangeEvent.h"
-#include "SupplicantScanResultsEvent.h"
-#include "SupplicantConnectionTimeoutEvent.h"
-#include "SupplicantDisconnectedEvent.h"
-#if 0
-#include "SupplicantTerminatingEvent.h"
-#include "SupplicantPasswordChangedEvent.h"
-#include "SupplicantEapNotificationEvent.h"
-#include "SupplicantEapStartedEvent.h"
-#include "SupplicantEapMethodEvent.h"
-#include "SupplicantEapSuccessEvent.h"
-#include "SupplicantEapFailureEvent.h"
-#include "SupplicantLinkSpeedEvent.h"
-#include "SupplicantDriverStateEvent.h"
-#endif
-
-#include "libwpa_client/wpa_ctrl.h"
-
-SupplicantEventFactory::SupplicantEventFactory() {
-}
-
-SupplicantEvent *SupplicantEventFactory::createEvent(char *event, size_t len) {
- int level = 0;
-
- if (event[0] == '<') {
- char *match = strchr(event, '>');
- if (match) {
- char tmp[16];
-
- strncpy(tmp, &event[1], (match - event));
- level = atoi(tmp);
- event += (match - event) + 1;
- } else
- ALOGW("Unclosed level brace in event");
- } else
- ALOGW("No level specified in event");
-
- /*
- * <N>CTRL-EVENT-XXX
- * ^
- * +---- event
- */
-
- if (!strncmp(event, "Authentication with ", 20)) {
- if (!strcmp(event + strlen(event) - strlen(" timed out."),
- " timed out.")) {
- return new SupplicantConnectionTimeoutEvent(level,
- event + 20,
- len);
- } else
- return NULL;
-
- } else if (!strncmp(event, "Associated with ", 16))
- return new SupplicantAssociatedEvent(level, event + 16, len);
- else if (!strncmp(event, "Trying to associate with ", 25))
- return new SupplicantAssociatingEvent(level, event + 25, len);
- else if (!strncmp(event, WPA_EVENT_CONNECTED, strlen(WPA_EVENT_CONNECTED))) {
- return new SupplicantConnectedEvent(level,
- event + strlen(WPA_EVENT_CONNECTED),
- len);
- } else if (!strncmp(event, WPA_EVENT_SCAN_RESULTS, strlen(WPA_EVENT_SCAN_RESULTS))) {
- return new SupplicantScanResultsEvent(level,
- event + strlen(WPA_EVENT_SCAN_RESULTS),
- len);
- } else if (!strncmp(event, WPA_EVENT_STATE_CHANGE, strlen(WPA_EVENT_STATE_CHANGE))) {
- return new SupplicantStateChangeEvent(level,
- event + strlen(WPA_EVENT_STATE_CHANGE),
- len);
- }
- else if (!strncmp(event, WPA_EVENT_DISCONNECTED, strlen(WPA_EVENT_DISCONNECTED)))
- return new SupplicantDisconnectedEvent(level, event, len);
-#if 0
- else if (!strncmp(event, WPA_EVENT_TERMINATING, strlen(WPA_EVENT_TERMINATING)))
- return new SupplicantTerminatingEvent(event, len);
- else if (!strncmp(event, WPA_EVENT_PASSWORD_CHANGED, strlen(WPA_EVENT_PASSWORD_CHANGED)))
- return new SupplicantPasswordChangedEvent(event, len);
- else if (!strncmp(event, WPA_EVENT_EAP_NOTIFICATION, strlen(WPA_EVENT_EAP_NOTIFICATION)))
- return new SupplicantEapNotificationEvent(event, len);
- else if (!strncmp(event, WPA_EVENT_EAP_STARTED, strlen(WPA_EVENT_EAP_STARTED)))
- return new SupplicantEapStartedEvent(event, len);
- else if (!strncmp(event, WPA_EVENT_EAP_METHOD, strlen(WPA_EVENT_EAP_METHOD)))
- return new SupplicantEapMethodEvent(event, len);
- else if (!strncmp(event, WPA_EVENT_EAP_SUCCESS, strlen(WPA_EVENT_EAP_SUCCESS)))
- return new SupplicantEapSuccessEvent(event, len);
- else if (!strncmp(event, WPA_EVENT_EAP_FAILURE, strlen(WPA_EVENT_EAP_FAILURE)))
- return new SupplicantEapFailureEvent(event, len);
- else if (!strncmp(event, WPA_EVENT_LINK_SPEED, strlen(WPA_EVENT_LINK_SPEED)))
- return new SupplicantLinkSpeedEvent(event, len);
- else if (!strncmp(event, WPA_EVENT_DRIVER_STATE, strlen(WPA_EVENT_DRIVER_STATE)))
- return new SupplicantDriverStateEvent(event, len);
-#endif
- return NULL;
-}
diff --git a/nexus/SupplicantEventFactory.h b/nexus/SupplicantEventFactory.h
deleted file mode 100644
index 22e5707..0000000
--- a/nexus/SupplicantEventFactory.h
+++ /dev/null
@@ -1,31 +0,0 @@
-
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SupplicantEventFactory_H
-#define _SupplicantEventFactory_H
-
-class SupplicantEvent;
-
-class SupplicantEventFactory {
-public:
- SupplicantEventFactory();
- virtual ~SupplicantEventFactory() {}
-
- SupplicantEvent *createEvent(char *event, size_t len);
-};
-
-#endif
diff --git a/nexus/SupplicantListener.cpp b/nexus/SupplicantListener.cpp
deleted file mode 100644
index 421d84d..0000000
--- a/nexus/SupplicantListener.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <errno.h>
-#include <sys/types.h>
-#include <pthread.h>
-
-#define LOG_TAG "SupplicantListener"
-#include <cutils/log.h>
-
-#include "libwpa_client/wpa_ctrl.h"
-
-#include "SupplicantListener.h"
-#include "ISupplicantEventHandler.h"
-#include "SupplicantEventFactory.h"
-#include "SupplicantEvent.h"
-#include "SupplicantAssociatingEvent.h"
-#include "SupplicantAssociatedEvent.h"
-#include "SupplicantConnectedEvent.h"
-#include "SupplicantScanResultsEvent.h"
-#include "SupplicantStateChangeEvent.h"
-
-SupplicantListener::SupplicantListener(ISupplicantEventHandler *handlers,
- struct wpa_ctrl *monitor) :
- SocketListener(wpa_ctrl_get_fd(monitor), false) {
- mHandlers = handlers;
- mMonitor = monitor;
- mFactory = new SupplicantEventFactory();
-}
-
-bool SupplicantListener::onDataAvailable(SocketClient *cli) {
- char buf[255];
- size_t buflen = sizeof(buf);
- int rc;
- size_t nread = buflen - 1;
-
- if ((rc = wpa_ctrl_recv(mMonitor, buf, &nread))) {
- ALOGE("wpa_ctrl_recv failed (%s)", strerror(errno));
- return false;
- }
-
- buf[nread] = '\0';
- if (!rc && !nread) {
- ALOGD("Received EOF on supplicant socket\n");
- strncpy(buf, WPA_EVENT_TERMINATING " - signal 0 received", buflen-1);
- buf[buflen-1] = '\0';
- return false;
- }
-
- SupplicantEvent *evt = mFactory->createEvent(buf, nread);
-
- if (!evt) {
- ALOGW("Dropping unknown supplicant event '%s'", buf);
- return true;
- }
-
- // Call the appropriate handler
- if (evt->getType() == SupplicantEvent::EVENT_ASSOCIATING)
- mHandlers->onAssociatingEvent((SupplicantAssociatingEvent *) evt);
- else if (evt->getType() == SupplicantEvent::EVENT_ASSOCIATED)
- mHandlers->onAssociatedEvent((SupplicantAssociatedEvent *) evt);
- else if (evt->getType() == SupplicantEvent::EVENT_CONNECTED)
- mHandlers->onConnectedEvent((SupplicantConnectedEvent *) evt);
- else if (evt->getType() == SupplicantEvent::EVENT_SCAN_RESULTS)
- mHandlers->onScanResultsEvent((SupplicantScanResultsEvent *) evt);
- else if (evt->getType() == SupplicantEvent::EVENT_STATE_CHANGE)
- mHandlers->onStateChangeEvent((SupplicantStateChangeEvent *) evt);
- else if (evt->getType() == SupplicantEvent::EVENT_CONNECTIONTIMEOUT)
- mHandlers->onConnectionTimeoutEvent((SupplicantConnectionTimeoutEvent *) evt);
- else if (evt->getType() == SupplicantEvent::EVENT_DISCONNECTED)
- mHandlers->onDisconnectedEvent((SupplicantDisconnectedEvent *) evt);
- else
- ALOGW("Whoops - no handler available for event '%s'\n", buf);
-#if 0
- else if (evt->getType() == SupplicantEvent::EVENT_TERMINATING)
- mHandlers->onTerminatingEvent(evt);
- else if (evt->getType() == SupplicantEvent::EVENT_PASSWORD_CHANGED)
- mHandlers->onPasswordChangedEvent(evt);
- else if (evt->getType() == SupplicantEvent::EVENT_EAP_NOTIFICATION)
- mHandlers->onEapNotificationEvent(evt);
- else if (evt->getType() == SupplicantEvent::EVENT_EAP_STARTED)
- mHandlers->onEapStartedEvent(evt);
- else if (evt->getType() == SupplicantEvent::EVENT_EAP_SUCCESS)
- mHandlers->onEapSuccessEvent(evt);
- else if (evt->getType() == SupplicantEvent::EVENT_EAP_FAILURE)
- mHandlers->onEapFailureEvent(evt);
- else if (evt->getType() == SupplicantEvent::EVENT_LINK_SPEED)
- mHandlers->onLinkSpeedEvent(evt);
- else if (evt->getType() == SupplicantEvent::EVENT_DRIVER_STATE)
- mHandlers->onDriverStateEvent(evt);
-#endif
-
- delete evt;
-
- return true;
-}
diff --git a/nexus/SupplicantListener.h b/nexus/SupplicantListener.h
deleted file mode 100644
index a1da773..0000000
--- a/nexus/SupplicantListener.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SUPPLICANTLISTENER_H__
-#define _SUPPLICANTLISTENER_H__
-
-#include <sysutils/SocketListener.h>
-
-struct wpa_ctrl;
-class Supplicant;
-class SocketClient;
-class ISupplicantEventHandler;
-class SupplicantEventFactory;
-
-class SupplicantListener: public SocketListener {
- struct wpa_ctrl *mMonitor;
- ISupplicantEventHandler *mHandlers;
- SupplicantEventFactory *mFactory;
-
-public:
- SupplicantListener(ISupplicantEventHandler *handlers,
- struct wpa_ctrl *monitor);
- virtual ~SupplicantListener() {}
-
- struct wpa_ctrl *getMonitor() { return mMonitor; }
-
-protected:
- virtual bool onDataAvailable(SocketClient *c);
-};
-
-#endif
diff --git a/nexus/SupplicantScanResultsEvent.cpp b/nexus/SupplicantScanResultsEvent.cpp
deleted file mode 100644
index c53adad..0000000
--- a/nexus/SupplicantScanResultsEvent.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "SupplicantScanResultsEvent"
-#include <cutils/log.h>
-
-#include "SupplicantScanResultsEvent.h"
-
-SupplicantScanResultsEvent::SupplicantScanResultsEvent(int level, char *event,
- size_t len) :
- SupplicantEvent(SupplicantEvent::EVENT_SCAN_RESULTS,
- level) {
-}
-
-SupplicantScanResultsEvent::SupplicantScanResultsEvent() :
- SupplicantEvent(SupplicantEvent::EVENT_SCAN_RESULTS, -1) {
-}
-
-SupplicantScanResultsEvent::~SupplicantScanResultsEvent() {
-}
-
diff --git a/nexus/SupplicantScanResultsEvent.h b/nexus/SupplicantScanResultsEvent.h
deleted file mode 100644
index 5f82041..0000000
--- a/nexus/SupplicantScanResultsEvent.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SupplicantScanResultsEvent_H
-#define _SupplicantScanResultsEvent_H
-
-#include "SupplicantEvent.h"
-
-class SupplicantScanResultsEvent : public SupplicantEvent {
-
-public:
- SupplicantScanResultsEvent(int level, char *event, size_t len);
- SupplicantScanResultsEvent();
- virtual ~SupplicantScanResultsEvent();
-};
-
-#endif
diff --git a/nexus/SupplicantState.cpp b/nexus/SupplicantState.cpp
deleted file mode 100644
index 2815430..0000000
--- a/nexus/SupplicantState.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-
-#define LOG_TAG "SupplicantState"
-#include <cutils/log.h>
-
-#include "SupplicantState.h"
-
-char *SupplicantState::toString(int val, char *buffer, int max) {
- if (val == SupplicantState::UNKNOWN)
- strncpy(buffer, "UNKNOWN", max);
- else if (val == SupplicantState::DISCONNECTED)
- strncpy(buffer, "DISCONNECTED", max);
- else if (val == SupplicantState::INACTIVE)
- strncpy(buffer, "INACTIVE", max);
- else if (val == SupplicantState::SCANNING)
- strncpy(buffer, "SCANNING", max);
- else if (val == SupplicantState::ASSOCIATING)
- strncpy(buffer, "ASSOCIATING", max);
- else if (val == SupplicantState::ASSOCIATED)
- strncpy(buffer, "ASSOCIATED", max);
- else if (val == SupplicantState::FOURWAY_HANDSHAKE)
- strncpy(buffer, "FOURWAY_HANDSHAKE", max);
- else if (val == SupplicantState::GROUP_HANDSHAKE)
- strncpy(buffer, "GROUP_HANDSHAKE", max);
- else if (val == SupplicantState::COMPLETED)
- strncpy(buffer, "COMPLETED", max);
- else if (val == SupplicantState::IDLE)
- strncpy(buffer, "IDLE", max);
- else
- strncpy(buffer, "(internal error)", max);
-
- return buffer;
-}
diff --git a/nexus/SupplicantState.h b/nexus/SupplicantState.h
deleted file mode 100644
index 6882f0c..0000000
--- a/nexus/SupplicantState.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SUPPLICANT_STATE_H
-#define _SUPPLICANT_STATE_H
-
-class SupplicantState {
-public:
- static const int UNKNOWN = -1;
- static const int DISCONNECTED = 0;
- static const int INACTIVE = 1;
- static const int SCANNING = 2;
- static const int ASSOCIATING = 3;
- static const int ASSOCIATED = 4;
- static const int FOURWAY_HANDSHAKE = 5;
- static const int GROUP_HANDSHAKE = 6;
- static const int COMPLETED = 7;
- static const int IDLE = 8;
-
- static char *toString(int val, char *buffer, int max);
-};
-
-#endif
diff --git a/nexus/SupplicantStateChangeEvent.cpp b/nexus/SupplicantStateChangeEvent.cpp
deleted file mode 100644
index fd9233a..0000000
--- a/nexus/SupplicantStateChangeEvent.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-
-#define LOG_TAG "SupplicantStateChangeEvent"
-#include <cutils/log.h>
-
-#include "SupplicantStateChangeEvent.h"
-
-SupplicantStateChangeEvent::SupplicantStateChangeEvent(int level, char *event,
- size_t len) :
- SupplicantEvent(SupplicantEvent::EVENT_STATE_CHANGE,
- level) {
- // XXX: move this stuff into a static creation method
- char *p = index(event, ' ');
- if (!p) {
- ALOGW("Bad event '%s'\n", event);
- return;
- }
-
- mState = atoi(p + strlen("state=") + 1);
-}
-
-SupplicantStateChangeEvent::SupplicantStateChangeEvent(int state) :
- SupplicantEvent(SupplicantEvent::EVENT_STATE_CHANGE, -1) {
- mState = state;
-}
-
-SupplicantStateChangeEvent::~SupplicantStateChangeEvent() {
-}
-
diff --git a/nexus/SupplicantStateChangeEvent.h b/nexus/SupplicantStateChangeEvent.h
deleted file mode 100644
index 77bff65..0000000
--- a/nexus/SupplicantStateChangeEvent.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SupplicantStateChangeEvent_H
-#define _SupplicantStateChangeEvent_H
-
-#include "SupplicantEvent.h"
-
-class SupplicantStateChangeEvent : public SupplicantEvent {
-private:
- int mState;
-
-public:
- SupplicantStateChangeEvent(int level, char *event, size_t len);
- SupplicantStateChangeEvent(int state);
- virtual ~SupplicantStateChangeEvent();
-
- int getState() { return mState; }
-};
-
-#endif
diff --git a/nexus/SupplicantStatus.cpp b/nexus/SupplicantStatus.cpp
deleted file mode 100644
index 8f28abe..0000000
--- a/nexus/SupplicantStatus.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#define LOG_TAG "SupplicantStatus"
-#include <cutils/log.h>
-
-#include "SupplicantStatus.h"
-#include "SupplicantState.h"
-
-SupplicantStatus::SupplicantStatus() {
- mWpaState = SupplicantState::UNKNOWN;
- mId = -1;
- mBssid = NULL;
- mSsid = NULL;
-}
-
-SupplicantStatus::SupplicantStatus(int state, int id, char *bssid, char *ssid) :
- mWpaState(state), mId(id), mBssid(bssid), mSsid(ssid) {
-
-LOGD("state %d, id %d, bssid %p, ssid %p\n", mWpaState, mId, mBssid, mSsid);
-}
-
-SupplicantStatus::~SupplicantStatus() {
- if (mBssid)
- free(mBssid);
- if (mSsid)
- free(mSsid);
-}
-
-SupplicantStatus *SupplicantStatus::createStatus(char *data, int len) {
- char *bssid = NULL;
- char *ssid = NULL;
- int id = -1;
- int state = SupplicantState::UNKNOWN;
-
- char *next = data;
- char *line;
- while((line = strsep(&next, "\n"))) {
- char *line_next = line;
- char *token = strsep(&line_next, "=");
- char *value = strsep(&line_next, "=");
- if (!strcmp(token, "bssid"))
- bssid = strdup(value);
- else if (!strcmp(token, "ssid"))
- ssid = strdup(value);
- else if (!strcmp(token, "id"))
- id = atoi(value);
- else if (!strcmp(token, "wpa_state")) {
- if (!strcmp(value, "DISCONNECTED"))
- state = SupplicantState::DISCONNECTED;
- else if (!strcmp(value, "INACTIVE"))
- state = SupplicantState::INACTIVE;
- else if (!strcmp(value, "SCANNING"))
- state = SupplicantState::SCANNING;
- else if (!strcmp(value, "ASSOCIATING"))
- state = SupplicantState::ASSOCIATING;
- else if (!strcmp(value, "ASSOCIATED"))
- state = SupplicantState::ASSOCIATED;
- else if (!strcmp(value, "FOURWAY_HANDSHAKE"))
- state = SupplicantState::FOURWAY_HANDSHAKE;
- else if (!strcmp(value, "GROUP_HANDSHAKE"))
- state = SupplicantState::GROUP_HANDSHAKE;
- else if (!strcmp(value, "COMPLETED"))
- state = SupplicantState::COMPLETED;
- else if (!strcmp(value, "IDLE"))
- state = SupplicantState::IDLE;
- else
- ALOGE("Unknown supplicant state '%s'", value);
- } else
- ALOGD("Ignoring unsupported status token '%s'", token);
- }
-
- return new SupplicantStatus(state, id, bssid, ssid);
-
-}
diff --git a/nexus/SupplicantStatus.h b/nexus/SupplicantStatus.h
deleted file mode 100644
index ef01841..0000000
--- a/nexus/SupplicantStatus.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _SupplicantStatus_H
-#define _SupplicantStatus_H
-
-class SupplicantStatus {
-private:
- int mWpaState;
- int mId;
- char *mBssid;
- char *mSsid;
-
-private:
- SupplicantStatus();
- SupplicantStatus(int state, int id, char *bssid, char *ssid);
-
-public:
- virtual ~SupplicantStatus();
- static SupplicantStatus *createStatus(char *data, int len);
-
- int getWpaState() { return mWpaState; }
- int getId() { return mId; }
- const char *getBssid() { return mBssid; }
- const char *getSsid() { return mSsid; }
-
-};
-
-#endif
diff --git a/nexus/TiwlanEventListener.cpp b/nexus/TiwlanEventListener.cpp
deleted file mode 100644
index fde3a44..0000000
--- a/nexus/TiwlanEventListener.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <errno.h>
-#include <pthread.h>
-#include <sys/types.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#define LOG_TAG "TiwlanEventListener"
-#include <cutils/log.h>
-
-#include "TiwlanEventListener.h"
-
-TiwlanEventListener::TiwlanEventListener(int socket) :
- SocketListener(socket, false) {
-}
-
-bool TiwlanEventListener::onDataAvailable(SocketClient *cli) {
- struct ipc_ev_data *data;
-
- if (!(data = (struct ipc_ev_data *) malloc(sizeof(struct ipc_ev_data)))) {
- ALOGE("Failed to allocate packet (out of memory)");
- return true;
- }
-
- if (recv(cli->getSocket(), data, sizeof(struct ipc_ev_data), 0) < 0) {
- ALOGE("recv failed (%s)", strerror(errno));
- goto out;
- }
-
- if (data->event_type == IPC_EVENT_LINK_SPEED) {
- uint32_t *spd = (uint32_t *) data->buffer;
- *spd /= 2;
-// ALOGD("Link speed = %u MB/s", *spd);
- } else if (data->event_type == IPC_EVENT_LOW_SNR) {
- ALOGW("Low signal/noise ratio");
- } else if (data->event_type == IPC_EVENT_LOW_RSSI) {
- ALOGW("Low RSSI");
- } else {
-// ALOGD("Dropping unhandled driver event %d", data->event_type);
- }
-
- // TODO: Tell WifiController about the event
-out:
- free(data);
- return true;
-}
diff --git a/nexus/TiwlanEventListener.h b/nexus/TiwlanEventListener.h
deleted file mode 100644
index 052d6b1..0000000
--- a/nexus/TiwlanEventListener.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _TIWLAN_EVENT_LISTENER_H__
-#define _TIWLAN_EVENT_LISTENER_H__
-
-#include <sysutils/SocketListener.h>
-
-struct wpa_ctrl;
-class SocketClient;
-class ITiwlanEventHandler;
-class TiwlanEventFactory;
-
-class TiwlanEventListener: public SocketListener {
-
-public:
- TiwlanEventListener(int sock);
- virtual ~TiwlanEventListener() {}
-
-protected:
- virtual bool onDataAvailable(SocketClient *c);
-};
-
-// TODO: Move all this crap into a factory
-#define TI_DRIVER_MSG_PORT 9001
-
-#define IPC_EVENT_LINK_SPEED 2
-#define IPC_EVENT_LOW_SNR 13
-#define IPC_EVENT_LOW_RSSI 14
-
-struct ipc_ev_data {
- uint32_t event_type;
- void *event_id;
- uint32_t process_id;
- uint32_t delivery_type;
- uint32_t user_param;
- void *event_callback;
- uint32_t bufferSize;
- uint8_t buffer[2048];
-};
-
-#endif
diff --git a/nexus/TiwlanWifiController.cpp b/nexus/TiwlanWifiController.cpp
deleted file mode 100644
index 76b6a2e..0000000
--- a/nexus/TiwlanWifiController.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-
-#include <cutils/properties.h>
-#define LOG_TAG "TiwlanWifiController"
-#include <cutils/log.h>
-
-#include "PropertyManager.h"
-#include "TiwlanWifiController.h"
-#include "TiwlanEventListener.h"
-
-#define DRIVER_PROP_NAME "wlan.driver.status"
-
-extern "C" int sched_yield(void);
-
-TiwlanWifiController::TiwlanWifiController(PropertyManager *propmngr,
- IControllerHandler *handlers,
- char *modpath, char *modname,
- char *modargs) :
- WifiController(propmngr, handlers, modpath, modname,
- modargs) {
- mEventListener = NULL;
- mListenerSock = -1;
-}
-
-int TiwlanWifiController::powerUp() {
- return 0; // Powerup is currently done when the driver is loaded
-}
-
-int TiwlanWifiController::powerDown() {
- if (mEventListener) {
- delete mEventListener;
- shutdown(mListenerSock, SHUT_RDWR);
- close(mListenerSock);
- mListenerSock = -1;
- mEventListener = NULL;
- }
-
- return 0; // Powerdown is currently done when the driver is unloaded
-}
-
-bool TiwlanWifiController::isPoweredUp() {
- return isKernelModuleLoaded(getModuleName());
-}
-
-int TiwlanWifiController::loadFirmware() {
- char driver_status[PROPERTY_VALUE_MAX];
- int count = 100;
-
- property_set("ctl.start", "wlan_loader");
- sched_yield();
-
- // Wait for driver to be ready
- while (count-- > 0) {
- if (property_get(DRIVER_PROP_NAME, driver_status, NULL)) {
- if (!strcmp(driver_status, "ok")) {
- ALOGD("Firmware loaded OK");
-
- if (startDriverEventListener()) {
- ALOGW("Failed to start driver event listener (%s)",
- strerror(errno));
- }
-
- return 0;
- } else if (!strcmp(DRIVER_PROP_NAME, "failed")) {
- ALOGE("Firmware load failed");
- return -1;
- }
- }
- usleep(200000);
- }
- property_set(DRIVER_PROP_NAME, "timeout");
- ALOGE("Firmware load timed out");
- return -1;
-}
-
-int TiwlanWifiController::startDriverEventListener() {
- struct sockaddr_in addr;
-
- if (mListenerSock != -1) {
- ALOGE("Listener already started!");
- errno = EBUSY;
- return -1;
- }
-
- if ((mListenerSock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
- ALOGE("socket failed (%s)", strerror(errno));
- return -1;
- }
-
- memset(&addr, 0, sizeof(addr));
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = htonl(INADDR_ANY);
- addr.sin_port = htons(TI_DRIVER_MSG_PORT);
-
- if (bind(mListenerSock,
- (struct sockaddr *) &addr,
- sizeof(addr)) < 0) {
- ALOGE("bind failed (%s)", strerror(errno));
- goto out_err;
- }
-
- mEventListener = new TiwlanEventListener(mListenerSock);
-
- if (mEventListener->startListener()) {
- ALOGE("Error starting driver listener (%s)", strerror(errno));
- goto out_err;
- }
- return 0;
-out_err:
- if (mEventListener) {
- delete mEventListener;
- mEventListener = NULL;
- }
- if (mListenerSock != -1) {
- shutdown(mListenerSock, SHUT_RDWR);
- close(mListenerSock);
- mListenerSock = -1;
- }
- return -1;
-}
-
-bool TiwlanWifiController::isFirmwareLoaded() {
- // Always load the firmware
- return false;
-}
diff --git a/nexus/TiwlanWifiController.h b/nexus/TiwlanWifiController.h
deleted file mode 100644
index 583be71..0000000
--- a/nexus/TiwlanWifiController.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _TIWLAN_WIFI_CONTROLLER_H
-#define _TIWLAN_WIFI_CONTROLLER_H
-
-#include "PropertyManager.h"
-#include "WifiController.h"
-
-class IControllerHandler;
-class TiwlanEventListener;
-
-class TiwlanWifiController : public WifiController {
- int mListenerSock;
- TiwlanEventListener *mEventListener;
-
-public:
- TiwlanWifiController(PropertyManager *propmngr, IControllerHandler *handlers, char *modpath, char *modname, char *modargs);
- virtual ~TiwlanWifiController() {}
-
- virtual int powerUp();
- virtual int powerDown();
- virtual bool isPoweredUp();
- virtual int loadFirmware();
- virtual bool isFirmwareLoaded();
-
-private:
- int startDriverEventListener();
-};
-#endif
diff --git a/nexus/VpnController.cpp b/nexus/VpnController.cpp
deleted file mode 100644
index 015710f..0000000
--- a/nexus/VpnController.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include "PropertyManager.h"
-#include "VpnController.h"
-
-VpnController::VpnController(PropertyManager *propmngr,
- IControllerHandler *handlers) :
- Controller("vpn", propmngr, handlers) {
- mEnabled = false;
-
- mStaticProperties.propEnabled = new VpnEnabledProperty(this);
- mDynamicProperties.propGateway = new IPV4AddressPropertyHelper("Gateway",
- false,
- &mGateway);
-}
-
-int VpnController::start() {
- mPropMngr->attachProperty("vpn", mStaticProperties.propEnabled);
- return 0;
-}
-
-int VpnController::stop() {
- mPropMngr->detachProperty("vpn", mStaticProperties.propEnabled);
- return 0;
-}
-
-VpnController::VpnIntegerProperty::VpnIntegerProperty(VpnController *c,
- const char *name,
- bool ro,
- int elements) :
- IntegerProperty(name, ro, elements) {
- mVc = c;
-}
-
-VpnController::VpnStringProperty::VpnStringProperty(VpnController *c,
- const char *name,
- bool ro, int elements) :
- StringProperty(name, ro, elements) {
- mVc = c;
-}
-
-VpnController::VpnIPV4AddressProperty::VpnIPV4AddressProperty(VpnController *c,
- const char *name,
- bool ro, int elements) :
- IPV4AddressProperty(name, ro, elements) {
- mVc = c;
-}
-
-VpnController::VpnEnabledProperty::VpnEnabledProperty(VpnController *c) :
- VpnIntegerProperty(c, "Enabled", false, 1) {
-}
-int VpnController::VpnEnabledProperty::get(int idx, int *buffer) {
- *buffer = mVc->mEnabled;
- return 0;
-}
-int VpnController::VpnEnabledProperty::set(int idx, int value) {
- int rc;
- if (!value) {
- mVc->mPropMngr->detachProperty("vpn", mVc->mDynamicProperties.propGateway);
- rc = mVc->disable();
- } else {
- rc = mVc->enable();
- if (!rc) {
- mVc->mPropMngr->attachProperty("vpn", mVc->mDynamicProperties.propGateway);
- }
- }
- if (!rc)
- mVc->mEnabled = value;
- return rc;
-}
diff --git a/nexus/VpnController.h b/nexus/VpnController.h
deleted file mode 100644
index 4bd86b5..0000000
--- a/nexus/VpnController.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _VPN_CONTROLLER_H
-#define _VPN_CONTROLLER_H
-
-#include <netinet/in.h>
-
-#include "Controller.h"
-
-class IControllerHandler;
-
-class VpnController : public Controller {
- class VpnIntegerProperty : public IntegerProperty {
- protected:
- VpnController *mVc;
- public:
- VpnIntegerProperty(VpnController *c, const char *name, bool ro,
- int elements);
- virtual ~VpnIntegerProperty() {}
- virtual int set(int idx, int value) = 0;
- virtual int get(int idx, int *buffer) = 0;
- };
- friend class VpnController::VpnIntegerProperty;
-
- class VpnStringProperty : public StringProperty {
- protected:
- VpnController *mVc;
- public:
- VpnStringProperty(VpnController *c, const char *name, bool ro,
- int elements);
- virtual ~VpnStringProperty() {}
- virtual int set(int idx, const char *value) = 0;
- virtual int get(int idx, char *buffer, size_t max) = 0;
- };
- friend class VpnController::VpnStringProperty;
-
- class VpnIPV4AddressProperty : public IPV4AddressProperty {
- protected:
- VpnController *mVc;
- public:
- VpnIPV4AddressProperty(VpnController *c, const char *name, bool ro,
- int elements);
- virtual ~VpnIPV4AddressProperty() {}
- virtual int set(int idx, struct in_addr *value) = 0;
- virtual int get(int idx, struct in_addr *buffer) = 0;
- };
- friend class VpnController::VpnIPV4AddressProperty;
-
- class VpnEnabledProperty : public VpnIntegerProperty {
- public:
- VpnEnabledProperty(VpnController *c);
- virtual ~VpnEnabledProperty() {};
- int set(int idx, int value);
- int get(int idx, int *buffer);
- };
-
- bool mEnabled;
- /*
- * Gateway of the VPN server to connect to
- */
- struct in_addr mGateway;
-
- struct {
- VpnEnabledProperty *propEnabled;
- } mStaticProperties;
-
- struct {
- IPV4AddressPropertyHelper *propGateway;
- } mDynamicProperties;
-
-public:
- VpnController(PropertyManager *propmngr, IControllerHandler *handlers);
- virtual ~VpnController() {}
-
- virtual int start();
- virtual int stop();
-
-protected:
- virtual int enable() = 0;
- virtual int disable() = 0;
-};
-
-#endif
diff --git a/nexus/WifiController.cpp b/nexus/WifiController.cpp
deleted file mode 100644
index cedd013..0000000
--- a/nexus/WifiController.cpp
+++ /dev/null
@@ -1,819 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#define LOG_TAG "WifiController"
-#include <cutils/log.h>
-
-#include "Supplicant.h"
-#include "WifiController.h"
-#include "NetworkManager.h"
-#include "ResponseCode.h"
-#include "WifiNetwork.h"
-#include "ISupplicantEventHandler.h"
-#include "SupplicantState.h"
-#include "SupplicantStatus.h"
-#include "SupplicantAssociatingEvent.h"
-#include "SupplicantAssociatedEvent.h"
-#include "SupplicantConnectedEvent.h"
-#include "SupplicantScanResultsEvent.h"
-#include "SupplicantStateChangeEvent.h"
-#include "SupplicantConnectionTimeoutEvent.h"
-#include "SupplicantDisconnectedEvent.h"
-#include "WifiStatusPoller.h"
-
-WifiController::WifiController(PropertyManager *mPropMngr,
- IControllerHandler *handlers,
- char *modpath, char *modname, char *modargs) :
- Controller("wifi", mPropMngr, handlers) {
- strncpy(mModulePath, modpath, sizeof(mModulePath));
- strncpy(mModuleName, modname, sizeof(mModuleName));
- strncpy(mModuleArgs, modargs, sizeof(mModuleArgs));
-
- mLatestScanResults = new ScanResultCollection();
- pthread_mutex_init(&mLatestScanResultsLock, NULL);
-
- pthread_mutex_init(&mLock, NULL);
-
- mSupplicant = new Supplicant(this, this);
- mActiveScan = false;
- mEnabled = false;
- mScanOnly = false;
- mPacketFilter = false;
- mBluetoothCoexScan = false;
- mBluetoothCoexMode = 0;
- mCurrentlyConnectedNetworkId = -1;
- mStatusPoller = new WifiStatusPoller(this);
- mRssiEventThreshold = 5;
- mLastLinkSpeed = 0;
-
- mSupplicantState = SupplicantState::UNKNOWN;
-
- mStaticProperties.propEnabled = new WifiEnabledProperty(this);
- mStaticProperties.propScanOnly = new WifiScanOnlyProperty(this);
- mStaticProperties.propAllowedChannels = new WifiAllowedChannelsProperty(this);
-
- mStaticProperties.propRssiEventThreshold =
- new IntegerPropertyHelper("RssiEventThreshold", false, &mRssiEventThreshold);
-
- mDynamicProperties.propSupplicantState = new WifiSupplicantStateProperty(this);
- mDynamicProperties.propActiveScan = new WifiActiveScanProperty(this);
- mDynamicProperties.propInterface = new WifiInterfaceProperty(this);
- mDynamicProperties.propSearching = new WifiSearchingProperty(this);
- mDynamicProperties.propPacketFilter = new WifiPacketFilterProperty(this);
- mDynamicProperties.propBluetoothCoexScan = new WifiBluetoothCoexScanProperty(this);
- mDynamicProperties.propBluetoothCoexMode = new WifiBluetoothCoexModeProperty(this);
- mDynamicProperties.propCurrentNetwork = new WifiCurrentNetworkProperty(this);
-
- mDynamicProperties.propRssi = new IntegerPropertyHelper("Rssi", true, &mLastRssi);
- mDynamicProperties.propLinkSpeed = new IntegerPropertyHelper("LinkSpeed", true, &mLastLinkSpeed);
-
- mDynamicProperties.propSuspended = new WifiSuspendedProperty(this);
- mDynamicProperties.propNetCount = new WifiNetCountProperty(this);
- mDynamicProperties.propTriggerScan = new WifiTriggerScanProperty(this);
-}
-
-int WifiController::start() {
- mPropMngr->attachProperty("wifi", mStaticProperties.propEnabled);
- mPropMngr->attachProperty("wifi", mStaticProperties.propScanOnly);
- mPropMngr->attachProperty("wifi", mStaticProperties.propAllowedChannels);
- mPropMngr->attachProperty("wifi", mStaticProperties.propRssiEventThreshold);
- return 0;
-}
-
-int WifiController::stop() {
- mPropMngr->detachProperty("wifi", mStaticProperties.propEnabled);
- mPropMngr->detachProperty("wifi", mStaticProperties.propScanOnly);
- mPropMngr->detachProperty("wifi", mStaticProperties.propAllowedChannels);
- mPropMngr->detachProperty("wifi", mStaticProperties.propRssiEventThreshold);
- return 0;
-}
-
-int WifiController::enable() {
-
- if (!isPoweredUp()) {
- ALOGI("Powering up");
- sendStatusBroadcast("Powering up WiFi hardware");
- if (powerUp()) {
- ALOGE("Powerup failed (%s)", strerror(errno));
- return -1;
- }
- }
-
- if (mModuleName[0] != '\0' && !isKernelModuleLoaded(mModuleName)) {
- ALOGI("Loading driver");
- sendStatusBroadcast("Loading WiFi driver");
- if (loadKernelModule(mModulePath, mModuleArgs)) {
- ALOGE("Kernel module load failed (%s)", strerror(errno));
- goto out_powerdown;
- }
- }
-
- if (!isFirmwareLoaded()) {
- ALOGI("Loading firmware");
- sendStatusBroadcast("Loading WiFI firmware");
- if (loadFirmware()) {
- ALOGE("Firmware load failed (%s)", strerror(errno));
- goto out_powerdown;
- }
- }
-
- if (!mSupplicant->isStarted()) {
- ALOGI("Starting WPA Supplicant");
- sendStatusBroadcast("Starting WPA Supplicant");
- if (mSupplicant->start()) {
- ALOGE("Supplicant start failed (%s)", strerror(errno));
- goto out_unloadmodule;
- }
- }
-
- if (Controller::bindInterface(mSupplicant->getInterfaceName())) {
- ALOGE("Error binding interface (%s)", strerror(errno));
- goto out_unloadmodule;
- }
-
- if (mSupplicant->refreshNetworkList())
- ALOGW("Error getting list of networks (%s)", strerror(errno));
-
- ALOGW("TODO: Set # of allowed regulatory channels!");
-
- mPropMngr->attachProperty("wifi", mDynamicProperties.propSupplicantState);
- mPropMngr->attachProperty("wifi", mDynamicProperties.propActiveScan);
- mPropMngr->attachProperty("wifi", mDynamicProperties.propInterface);
- mPropMngr->attachProperty("wifi", mDynamicProperties.propSearching);
- mPropMngr->attachProperty("wifi", mDynamicProperties.propPacketFilter);
- mPropMngr->attachProperty("wifi", mDynamicProperties.propBluetoothCoexScan);
- mPropMngr->attachProperty("wifi", mDynamicProperties.propBluetoothCoexMode);
- mPropMngr->attachProperty("wifi", mDynamicProperties.propCurrentNetwork);
- mPropMngr->attachProperty("wifi", mDynamicProperties.propRssi);
- mPropMngr->attachProperty("wifi", mDynamicProperties.propLinkSpeed);
- mPropMngr->attachProperty("wifi", mDynamicProperties.propSuspended);
- mPropMngr->attachProperty("wifi", mDynamicProperties.propNetCount);
- mPropMngr->attachProperty("wifi", mDynamicProperties.propTriggerScan);
-
- ALOGI("Enabled successfully");
- return 0;
-
-out_unloadmodule:
- if (mModuleName[0] != '\0' && !isKernelModuleLoaded(mModuleName)) {
- if (unloadKernelModule(mModuleName)) {
- ALOGE("Unable to unload module after failure!");
- }
- }
-
-out_powerdown:
- if (powerDown()) {
- ALOGE("Unable to powerdown after failure!");
- }
- return -1;
-}
-
-bool WifiController::getSuspended() {
- pthread_mutex_lock(&mLock);
- bool r = mSuspended;
- pthread_mutex_unlock(&mLock);
- return r;
-}
-
-int WifiController::setSuspend(bool suspend) {
-
- pthread_mutex_lock(&mLock);
- if (suspend == mSuspended) {
- ALOGW("Suspended state already = %d", suspend);
- pthread_mutex_unlock(&mLock);
- return 0;
- }
-
- if (suspend) {
- mHandlers->onControllerSuspending(this);
-
- char tmp[80];
- ALOGD("Suspending from supplicant state %s",
- SupplicantState::toString(mSupplicantState,
- tmp,
- sizeof(tmp)));
-
- if (mSupplicantState != SupplicantState::IDLE) {
- ALOGD("Forcing Supplicant disconnect");
- if (mSupplicant->disconnect()) {
- ALOGW("Error disconnecting (%s)", strerror(errno));
- }
- }
-
- ALOGD("Stopping Supplicant driver");
- if (mSupplicant->stopDriver()) {
- ALOGE("Error stopping driver (%s)", strerror(errno));
- pthread_mutex_unlock(&mLock);
- return -1;
- }
- } else {
- ALOGD("Resuming");
-
- if (mSupplicant->startDriver()) {
- ALOGE("Error resuming driver (%s)", strerror(errno));
- pthread_mutex_unlock(&mLock);
- return -1;
- }
- // XXX: set regulatory max channels
- if (mScanOnly)
- mSupplicant->triggerScan();
- else
- mSupplicant->reconnect();
-
- mHandlers->onControllerResumed(this);
- }
-
- mSuspended = suspend;
- pthread_mutex_unlock(&mLock);
- ALOGD("Suspend / Resume completed");
- return 0;
-}
-
-void WifiController::sendStatusBroadcast(const char *msg) {
- NetworkManager::Instance()->
- getBroadcaster()->
- sendBroadcast(ResponseCode::UnsolicitedInformational, msg, false);
-}
-
-int WifiController::disable() {
-
- mPropMngr->detachProperty("wifi", mDynamicProperties.propSupplicantState);
- mPropMngr->detachProperty("wifi", mDynamicProperties.propActiveScan);
- mPropMngr->detachProperty("wifi", mDynamicProperties.propInterface);
- mPropMngr->detachProperty("wifi", mDynamicProperties.propSearching);
- mPropMngr->detachProperty("wifi", mDynamicProperties.propPacketFilter);
- mPropMngr->detachProperty("wifi", mDynamicProperties.propBluetoothCoexScan);
- mPropMngr->detachProperty("wifi", mDynamicProperties.propBluetoothCoexMode);
- mPropMngr->detachProperty("wifi", mDynamicProperties.propCurrentNetwork);
- mPropMngr->detachProperty("wifi", mDynamicProperties.propRssi);
- mPropMngr->detachProperty("wifi", mDynamicProperties.propLinkSpeed);
- mPropMngr->detachProperty("wifi", mDynamicProperties.propSuspended);
- mPropMngr->detachProperty("wifi", mDynamicProperties.propNetCount);
-
- if (mSupplicant->isStarted()) {
- sendStatusBroadcast("Stopping WPA Supplicant");
- if (mSupplicant->stop()) {
- ALOGE("Supplicant stop failed (%s)", strerror(errno));
- return -1;
- }
- } else
- ALOGW("disable(): Supplicant not running?");
-
- if (mModuleName[0] != '\0' && isKernelModuleLoaded(mModuleName)) {
- sendStatusBroadcast("Unloading WiFi driver");
- if (unloadKernelModule(mModuleName)) {
- ALOGE("Unable to unload module (%s)", strerror(errno));
- return -1;
- }
- }
-
- if (isPoweredUp()) {
- sendStatusBroadcast("Powering down WiFi hardware");
- if (powerDown()) {
- ALOGE("Powerdown failed (%s)", strerror(errno));
- return -1;
- }
- }
- return 0;
-}
-
-int WifiController::loadFirmware() {
- return 0;
-}
-
-int WifiController::triggerScan() {
- pthread_mutex_lock(&mLock);
- if (verifyNotSuspended()) {
- pthread_mutex_unlock(&mLock);
- return -1;
- }
-
- switch (mSupplicantState) {
- case SupplicantState::DISCONNECTED:
- case SupplicantState::INACTIVE:
- case SupplicantState::SCANNING:
- case SupplicantState::IDLE:
- break;
- default:
- // Switch to scan only mode
- mSupplicant->setApScanMode(2);
- break;
- }
-
- int rc = mSupplicant->triggerScan();
- pthread_mutex_unlock(&mLock);
- return rc;
-}
-
-int WifiController::setActiveScan(bool active) {
- pthread_mutex_lock(&mLock);
- if (mActiveScan == active) {
- pthread_mutex_unlock(&mLock);
- return 0;
- }
- mActiveScan = active;
-
- int rc = mSupplicant->setScanMode(active);
- pthread_mutex_unlock(&mLock);
- return rc;
-}
-
-WifiNetwork *WifiController::createNetwork() {
- pthread_mutex_lock(&mLock);
- WifiNetwork *wn = mSupplicant->createNetwork();
- pthread_mutex_unlock(&mLock);
- return wn;
-}
-
-int WifiController::removeNetwork(int networkId) {
- pthread_mutex_lock(&mLock);
- WifiNetwork *wn = mSupplicant->lookupNetwork(networkId);
-
- if (!wn) {
- pthread_mutex_unlock(&mLock);
- return -1;
- }
- int rc = mSupplicant->removeNetwork(wn);
- pthread_mutex_unlock(&mLock);
- return rc;
-}
-
-ScanResultCollection *WifiController::createScanResults() {
- ScanResultCollection *d = new ScanResultCollection();
- ScanResultCollection::iterator i;
-
- pthread_mutex_lock(&mLatestScanResultsLock);
- for (i = mLatestScanResults->begin(); i != mLatestScanResults->end(); ++i)
- d->push_back((*i)->clone());
-
- pthread_mutex_unlock(&mLatestScanResultsLock);
- return d;
-}
-
-WifiNetworkCollection *WifiController::createNetworkList() {
- return mSupplicant->createNetworkList();
-}
-
-int WifiController::setPacketFilter(bool enable) {
- int rc;
-
- pthread_mutex_lock(&mLock);
- if (enable)
- rc = mSupplicant->enablePacketFilter();
- else
- rc = mSupplicant->disablePacketFilter();
-
- if (!rc)
- mPacketFilter = enable;
- pthread_mutex_unlock(&mLock);
- return rc;
-}
-
-int WifiController::setBluetoothCoexistenceScan(bool enable) {
- int rc;
-
- pthread_mutex_lock(&mLock);
-
- if (enable)
- rc = mSupplicant->enableBluetoothCoexistenceScan();
- else
- rc = mSupplicant->disableBluetoothCoexistenceScan();
-
- if (!rc)
- mBluetoothCoexScan = enable;
- pthread_mutex_unlock(&mLock);
- return rc;
-}
-
-int WifiController::setScanOnly(bool scanOnly) {
- pthread_mutex_lock(&mLock);
- int rc = mSupplicant->setApScanMode((scanOnly ? 2 : 1));
- if (!rc)
- mScanOnly = scanOnly;
- if (!mSuspended) {
- if (scanOnly)
- mSupplicant->disconnect();
- else
- mSupplicant->reconnect();
- }
- pthread_mutex_unlock(&mLock);
- return rc;
-}
-
-int WifiController::setBluetoothCoexistenceMode(int mode) {
- pthread_mutex_lock(&mLock);
- int rc = mSupplicant->setBluetoothCoexistenceMode(mode);
- if (!rc)
- mBluetoothCoexMode = mode;
- pthread_mutex_unlock(&mLock);
- return rc;
-}
-
-void WifiController::onAssociatingEvent(SupplicantAssociatingEvent *evt) {
- ALOGD("onAssociatingEvent(%s, %s, %d)",
- (evt->getBssid() ? evt->getBssid() : "n/a"),
- (evt->getSsid() ? evt->getSsid() : "n/a"),
- evt->getFreq());
-}
-
-void WifiController::onAssociatedEvent(SupplicantAssociatedEvent *evt) {
- ALOGD("onAssociatedEvent(%s)", evt->getBssid());
-}
-
-void WifiController::onConnectedEvent(SupplicantConnectedEvent *evt) {
- ALOGD("onConnectedEvent(%s, %d)", evt->getBssid(), evt->getReassociated());
- SupplicantStatus *ss = mSupplicant->getStatus();
- WifiNetwork *wn;
-
- if (ss->getWpaState() != SupplicantState::COMPLETED) {
- char tmp[32];
-
- ALOGW("onConnected() with SupplicantState = %s!",
- SupplicantState::toString(ss->getWpaState(), tmp,
- sizeof(tmp)));
- return;
- }
-
- if (ss->getId() == -1) {
- ALOGW("onConnected() with id = -1!");
- return;
- }
-
- mCurrentlyConnectedNetworkId = ss->getId();
- if (!(wn = mSupplicant->lookupNetwork(ss->getId()))) {
- ALOGW("Error looking up connected network id %d (%s)",
- ss->getId(), strerror(errno));
- return;
- }
-
- delete ss;
- mHandlers->onInterfaceConnected(this);
-}
-
-void WifiController::onScanResultsEvent(SupplicantScanResultsEvent *evt) {
- char *reply;
-
- if (!(reply = (char *) malloc(4096))) {
- ALOGE("Out of memory");
- return;
- }
-
- mNumScanResultsSinceLastStateChange++;
- if (mNumScanResultsSinceLastStateChange >= 3)
- mIsSupplicantSearching = false;
-
- size_t len = 4096;
-
- if (mSupplicant->sendCommand("SCAN_RESULTS", reply, &len)) {
- ALOGW("onScanResultsEvent: Error getting scan results (%s)",
- strerror(errno));
- free(reply);
- return;
- }
-
- pthread_mutex_lock(&mLatestScanResultsLock);
- if (!mLatestScanResults->empty()) {
- ScanResultCollection::iterator i;
-
- for (i = mLatestScanResults->begin();
- i !=mLatestScanResults->end(); ++i) {
- delete *i;
- }
- mLatestScanResults->clear();
- }
-
- char *linep;
- char *linep_next = NULL;
-
- if (!strtok_r(reply, "\n", &linep_next)) {
- free(reply);
- pthread_mutex_unlock(&mLatestScanResultsLock);
- return;
- }
-
- while((linep = strtok_r(NULL, "\n", &linep_next)))
- mLatestScanResults->push_back(new ScanResult(linep));
-
- // Switch handling of scan results back to normal mode
- mSupplicant->setApScanMode(1);
-
- char *tmp;
- asprintf(&tmp, "Scan results ready (%d)", mLatestScanResults->size());
- NetworkManager::Instance()->getBroadcaster()->
- sendBroadcast(ResponseCode::ScanResultsReady,
- tmp, false);
- free(tmp);
- pthread_mutex_unlock(&mLatestScanResultsLock);
- free(reply);
-}
-
-void WifiController::onStateChangeEvent(SupplicantStateChangeEvent *evt) {
- char tmp[32];
- char tmp2[32];
-
- if (evt->getState() == mSupplicantState)
- return;
-
- ALOGD("onStateChangeEvent(%s -> %s)",
- SupplicantState::toString(mSupplicantState, tmp, sizeof(tmp)),
- SupplicantState::toString(evt->getState(), tmp2, sizeof(tmp2)));
-
- if (evt->getState() != SupplicantState::SCANNING) {
- mIsSupplicantSearching = true;
- mNumScanResultsSinceLastStateChange = 0;
- }
-
- char *tmp3;
- asprintf(&tmp3,
- "Supplicant state changed from %d (%s) -> %d (%s)",
- mSupplicantState, tmp, evt->getState(), tmp2);
-
- mSupplicantState = evt->getState();
-
- if (mSupplicantState == SupplicantState::COMPLETED) {
- mStatusPoller->start();
- } else if (mStatusPoller->isStarted()) {
- mStatusPoller->stop();
- }
-
- NetworkManager::Instance()->getBroadcaster()->
- sendBroadcast(ResponseCode::SupplicantStateChange,
- tmp3, false);
- free(tmp3);
-}
-
-void WifiController::onConnectionTimeoutEvent(SupplicantConnectionTimeoutEvent *evt) {
- ALOGD("onConnectionTimeoutEvent(%s)", evt->getBssid());
-}
-
-void WifiController::onDisconnectedEvent(SupplicantDisconnectedEvent *evt) {
- mCurrentlyConnectedNetworkId = -1;
- mHandlers->onInterfaceDisconnected(this);
-}
-
-#if 0
-void WifiController::onTerminatingEvent(SupplicantEvent *evt) {
- ALOGD("onTerminatingEvent(%s)", evt->getEvent());
-}
-
-void WifiController::onPasswordChangedEvent(SupplicantEvent *evt) {
- ALOGD("onPasswordChangedEvent(%s)", evt->getEvent());
-}
-
-void WifiController::onEapNotificationEvent(SupplicantEvent *evt) {
- ALOGD("onEapNotificationEvent(%s)", evt->getEvent());
-}
-
-void WifiController::onEapStartedEvent(SupplicantEvent *evt) {
- ALOGD("onEapStartedEvent(%s)", evt->getEvent());
-}
-
-void WifiController::onEapMethodEvent(SupplicantEvent *evt) {
- ALOGD("onEapMethodEvent(%s)", evt->getEvent());
-}
-
-void WifiController::onEapSuccessEvent(SupplicantEvent *evt) {
- ALOGD("onEapSuccessEvent(%s)", evt->getEvent());
-}
-
-void WifiController::onEapFailureEvent(SupplicantEvent *evt) {
- ALOGD("onEapFailureEvent(%s)", evt->getEvent());
-}
-
-void WifiController::onLinkSpeedEvent(SupplicantEvent *evt) {
- ALOGD("onLinkSpeedEvent(%s)", evt->getEvent());
-}
-
-void WifiController::onDriverStateEvent(SupplicantEvent *evt) {
- ALOGD("onDriverStateEvent(%s)", evt->getEvent());
-}
-#endif
-
-void WifiController::onStatusPollInterval() {
- pthread_mutex_lock(&mLock);
- int rssi;
- if (mSupplicant->getRssi(&rssi)) {
- ALOGE("Failed to get rssi (%s)", strerror(errno));
- pthread_mutex_unlock(&mLock);
- return;
- }
-
- if (abs(mLastRssi - rssi) > mRssiEventThreshold) {
- char *tmp3;
- asprintf(&tmp3, "RSSI changed from %d -> %d",
- mLastRssi, rssi);
- mLastRssi = rssi;
- NetworkManager::Instance()->getBroadcaster()->
- sendBroadcast(ResponseCode::RssiChange,
- tmp3, false);
- free(tmp3);
- }
-
- int linkspeed = mSupplicant->getLinkSpeed();
- if (linkspeed != mLastLinkSpeed) {
- char *tmp3;
- asprintf(&tmp3, "Link speed changed from %d -> %d",
- mLastLinkSpeed, linkspeed);
- mLastLinkSpeed = linkspeed;
- NetworkManager::Instance()->getBroadcaster()->
- sendBroadcast(ResponseCode::LinkSpeedChange,
- tmp3, false);
- free(tmp3);
-
- }
- pthread_mutex_unlock(&mLock);
-}
-
-int WifiController::verifyNotSuspended() {
- if (mSuspended) {
- errno = ESHUTDOWN;
- return -1;
- }
- return 0;
-}
-
-/*
- * Property inner classes
- */
-
-WifiController::WifiIntegerProperty::WifiIntegerProperty(WifiController *c,
- const char *name,
- bool ro,
- int elements) :
- IntegerProperty(name, ro, elements) {
- mWc = c;
-}
-
-WifiController::WifiStringProperty::WifiStringProperty(WifiController *c,
- const char *name,
- bool ro, int elements) :
- StringProperty(name, ro, elements) {
- mWc = c;
-}
-
-WifiController::WifiEnabledProperty::WifiEnabledProperty(WifiController *c) :
- WifiIntegerProperty(c, "Enabled", false, 1) {
-}
-
-int WifiController::WifiEnabledProperty::get(int idx, int *buffer) {
- *buffer = mWc->mEnabled;
- return 0;
-}
-int WifiController::WifiEnabledProperty::set(int idx, int value) {
- int rc = (value ? mWc->enable() : mWc->disable());
- if (!rc)
- mWc->mEnabled = value;
- return rc;
-}
-
-WifiController::WifiScanOnlyProperty::WifiScanOnlyProperty(WifiController *c) :
- WifiIntegerProperty(c, "ScanOnly", false, 1) {
-}
-int WifiController::WifiScanOnlyProperty::get(int idx, int *buffer) {
- *buffer = mWc->mScanOnly;
- return 0;
-}
-int WifiController::WifiScanOnlyProperty::set(int idx, int value) {
- return mWc->setScanOnly(value == 1);
-}
-
-WifiController::WifiAllowedChannelsProperty::WifiAllowedChannelsProperty(WifiController *c) :
- WifiIntegerProperty(c, "AllowedChannels", false, 1) {
-}
-int WifiController::WifiAllowedChannelsProperty::get(int idx, int *buffer) {
- *buffer = mWc->mNumAllowedChannels;
- return 0;
-}
-int WifiController::WifiAllowedChannelsProperty::set(int idx, int value) {
- // XXX: IMPL
- errno = ENOSYS;
- return -1;
-}
-
-WifiController::WifiSupplicantStateProperty::WifiSupplicantStateProperty(WifiController *c) :
- WifiStringProperty(c, "SupplicantState", true, 1) {
-}
-int WifiController::WifiSupplicantStateProperty::get(int idx, char *buffer, size_t max) {
- if (!SupplicantState::toString(mWc->mSupplicantState, buffer, max))
- return -1;
- return 0;
-}
-
-WifiController::WifiActiveScanProperty::WifiActiveScanProperty(WifiController *c) :
- WifiIntegerProperty(c, "ActiveScan", false, 1) {
-}
-int WifiController::WifiActiveScanProperty::get(int idx, int *buffer) {
- *buffer = mWc->mActiveScan;
- return 0;
-}
-int WifiController::WifiActiveScanProperty::set(int idx, int value) {
- return mWc->setActiveScan(value);
-}
-
-WifiController::WifiInterfaceProperty::WifiInterfaceProperty(WifiController *c) :
- WifiStringProperty(c, "Interface", true, 1) {
-}
-int WifiController::WifiInterfaceProperty::get(int idx, char *buffer, size_t max) {
- strncpy(buffer, (mWc->getBoundInterface() ? mWc->getBoundInterface() : "none"), max);
- return 0;
-}
-
-WifiController::WifiSearchingProperty::WifiSearchingProperty(WifiController *c) :
- WifiIntegerProperty(c, "Searching", true, 1) {
-}
-int WifiController::WifiSearchingProperty::get(int idx, int *buffer) {
- *buffer = mWc->mIsSupplicantSearching;
- return 0;
-}
-
-WifiController::WifiPacketFilterProperty::WifiPacketFilterProperty(WifiController *c) :
- WifiIntegerProperty(c, "PacketFilter", false, 1) {
-}
-int WifiController::WifiPacketFilterProperty::get(int idx, int *buffer) {
- *buffer = mWc->mPacketFilter;
- return 0;
-}
-int WifiController::WifiPacketFilterProperty::set(int idx, int value) {
- return mWc->setPacketFilter(value);
-}
-
-WifiController::WifiBluetoothCoexScanProperty::WifiBluetoothCoexScanProperty(WifiController *c) :
- WifiIntegerProperty(c, "BluetoothCoexScan", false, 1) {
-}
-int WifiController::WifiBluetoothCoexScanProperty::get(int idx, int *buffer) {
- *buffer = mWc->mBluetoothCoexScan;
- return 0;
-}
-int WifiController::WifiBluetoothCoexScanProperty::set(int idx, int value) {
- return mWc->setBluetoothCoexistenceScan(value == 1);
-}
-
-WifiController::WifiBluetoothCoexModeProperty::WifiBluetoothCoexModeProperty(WifiController *c) :
- WifiIntegerProperty(c, "BluetoothCoexMode", false, 1) {
-}
-int WifiController::WifiBluetoothCoexModeProperty::get(int idx, int *buffer) {
- *buffer = mWc->mBluetoothCoexMode;
- return 0;
-}
-int WifiController::WifiBluetoothCoexModeProperty::set(int idx, int value) {
- return mWc->setBluetoothCoexistenceMode(value);
-}
-
-WifiController::WifiCurrentNetworkProperty::WifiCurrentNetworkProperty(WifiController *c) :
- WifiIntegerProperty(c, "CurrentlyConnectedNetworkId", true, 1) {
-}
-int WifiController::WifiCurrentNetworkProperty::get(int idx, int *buffer) {
- *buffer = mWc->mCurrentlyConnectedNetworkId;
- return 0;
-}
-
-WifiController::WifiSuspendedProperty::WifiSuspendedProperty(WifiController *c) :
- WifiIntegerProperty(c, "Suspended", false, 1) {
-}
-int WifiController::WifiSuspendedProperty::get(int idx, int *buffer) {
- *buffer = mWc->getSuspended();
- return 0;
-}
-int WifiController::WifiSuspendedProperty::set(int idx, int value) {
- return mWc->setSuspend(value == 1);
-}
-
-WifiController::WifiNetCountProperty::WifiNetCountProperty(WifiController *c) :
- WifiIntegerProperty(c, "NetCount", true, 1) {
-}
-int WifiController::WifiNetCountProperty::get(int idx, int *buffer) {
- pthread_mutex_lock(&mWc->mLock);
- *buffer = mWc->mSupplicant->getNetworkCount();
- pthread_mutex_unlock(&mWc->mLock);
- return 0;
-}
-
-WifiController::WifiTriggerScanProperty::WifiTriggerScanProperty(WifiController *c) :
- WifiIntegerProperty(c, "TriggerScan", false, 1) {
-}
-int WifiController::WifiTriggerScanProperty::get(int idx, int *buffer) {
- // XXX: Need action type
- *buffer = 0;
- return 0;
-}
-
-int WifiController::WifiTriggerScanProperty::set(int idx, int value) {
- return mWc->triggerScan();
-}
-
diff --git a/nexus/WifiController.h b/nexus/WifiController.h
deleted file mode 100644
index b1524f6..0000000
--- a/nexus/WifiController.h
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _WIFI_CONTROLLER_H
-#define _WIFI_CONTROLLER_H
-
-#include <sys/types.h>
-
-#include "Controller.h"
-#include "ScanResult.h"
-#include "WifiNetwork.h"
-#include "ISupplicantEventHandler.h"
-#include "IWifiStatusPollerHandler.h"
-
-class NetInterface;
-class Supplicant;
-class SupplicantAssociatingEvent;
-class SupplicantAssociatedEvent;
-class SupplicantConnectedEvent;
-class SupplicantScanResultsEvent;
-class SupplicantStateChangeEvent;
-class SupplicantDisconnectedEvent;
-class WifiStatusPoller;
-
-class WifiController : public Controller,
- public ISupplicantEventHandler,
- public IWifiStatusPollerHandler {
-
- class WifiIntegerProperty : public IntegerProperty {
- protected:
- WifiController *mWc;
- public:
- WifiIntegerProperty(WifiController *c, const char *name, bool ro,
- int elements);
- virtual ~WifiIntegerProperty() {}
- virtual int set(int idx, int value) = 0;
- virtual int get(int idx, int *buffer) = 0;
- };
- friend class WifiController::WifiIntegerProperty;
-
- class WifiStringProperty : public StringProperty {
- protected:
- WifiController *mWc;
- public:
- WifiStringProperty(WifiController *c, const char *name, bool ro,
- int elements);
- virtual ~WifiStringProperty() {}
- virtual int set(int idx, const char *value) = 0;
- virtual int get(int idx, char *buffer, size_t max) = 0;
- };
- friend class WifiController::WifiStringProperty;
-
- class WifiEnabledProperty : public WifiIntegerProperty {
- public:
- WifiEnabledProperty(WifiController *c);
- virtual ~WifiEnabledProperty() {}
- int set(int idx, int value);
- int get(int idx, int *buffer);
- };
-
- class WifiScanOnlyProperty : public WifiIntegerProperty {
- public:
- WifiScanOnlyProperty(WifiController *c);
- virtual ~WifiScanOnlyProperty() {}
- int set(int idx, int value);
- int get(int idx, int *buffer);
- };
-
- class WifiAllowedChannelsProperty : public WifiIntegerProperty {
- public:
- WifiAllowedChannelsProperty(WifiController *c);
- virtual ~WifiAllowedChannelsProperty() {}
- int set(int idx, int value);
- int get(int idx, int *buffer);
- };
-
- class WifiActiveScanProperty : public WifiIntegerProperty {
- public:
- WifiActiveScanProperty(WifiController *c);
- virtual ~WifiActiveScanProperty() {}
- int set(int idx, int value);
- int get(int idx, int *buffer);
- };
-
- class WifiSearchingProperty : public WifiIntegerProperty {
- public:
- WifiSearchingProperty(WifiController *c);
- virtual ~WifiSearchingProperty() {}
- int set(int idx, int value) { return -1; }
- int get(int idx, int *buffer);
- };
-
- class WifiPacketFilterProperty : public WifiIntegerProperty {
- public:
- WifiPacketFilterProperty(WifiController *c);
- virtual ~WifiPacketFilterProperty() {}
- int set(int idx, int value);
- int get(int idx, int *buffer);
- };
-
- class WifiBluetoothCoexScanProperty : public WifiIntegerProperty {
- public:
- WifiBluetoothCoexScanProperty(WifiController *c);
- virtual ~WifiBluetoothCoexScanProperty() {}
- int set(int idx, int value);
- int get(int idx, int *buffer);
- };
-
- class WifiBluetoothCoexModeProperty : public WifiIntegerProperty {
- public:
- WifiBluetoothCoexModeProperty(WifiController *c);
- virtual ~WifiBluetoothCoexModeProperty() {}
- int set(int idx, int value);
- int get(int idx, int *buffer);
- };
-
- class WifiCurrentNetworkProperty : public WifiIntegerProperty {
- public:
- WifiCurrentNetworkProperty(WifiController *c);
- virtual ~WifiCurrentNetworkProperty() {}
- int set(int idx, int value) { return -1; }
- int get(int idx, int *buffer);
- };
-
- class WifiSuspendedProperty : public WifiIntegerProperty {
- public:
- WifiSuspendedProperty(WifiController *c);
- virtual ~WifiSuspendedProperty() {}
- int set(int idx, int value);
- int get(int idx, int *buffer);
- };
-
- class WifiNetCountProperty : public WifiIntegerProperty {
- public:
- WifiNetCountProperty(WifiController *c);
- virtual ~WifiNetCountProperty() {}
- int set(int idx, int value) { return -1; }
- int get(int idx, int *buffer);
- };
-
- class WifiTriggerScanProperty : public WifiIntegerProperty {
- public:
- WifiTriggerScanProperty(WifiController *c);
- virtual ~WifiTriggerScanProperty() {}
- int set(int idx, int value);
- int get(int idx, int *buffer);
- };
-
- class WifiSupplicantStateProperty : public WifiStringProperty {
- public:
- WifiSupplicantStateProperty(WifiController *c);
- virtual ~WifiSupplicantStateProperty() {}
- int set(int idx, const char *value) { return -1; }
- int get(int idx, char *buffer, size_t max);
- };
-
- class WifiInterfaceProperty : public WifiStringProperty {
- public:
- WifiInterfaceProperty(WifiController *c);
- virtual ~WifiInterfaceProperty() {}
- int set(int idx, const char *value) { return -1; }
- int get(int idx, char *buffer, size_t max);
- };
-
- Supplicant *mSupplicant;
- char mModulePath[255];
- char mModuleName[64];
- char mModuleArgs[255];
-
- int mSupplicantState;
- bool mActiveScan;
- bool mScanOnly;
- bool mPacketFilter;
- bool mBluetoothCoexScan;
- int mBluetoothCoexMode;
- int mCurrentlyConnectedNetworkId;
- bool mSuspended;
- int mLastRssi;
- int mRssiEventThreshold;
- int mLastLinkSpeed;
- int mNumAllowedChannels;
-
- ScanResultCollection *mLatestScanResults;
- pthread_mutex_t mLatestScanResultsLock;
- pthread_mutex_t mLock;
- WifiStatusPoller *mStatusPoller;
-
- struct {
- WifiEnabledProperty *propEnabled;
- WifiScanOnlyProperty *propScanOnly;
- WifiAllowedChannelsProperty *propAllowedChannels;
- IntegerPropertyHelper *propRssiEventThreshold;
- } mStaticProperties;
-
- struct {
- WifiActiveScanProperty *propActiveScan;
- WifiSearchingProperty *propSearching;
- WifiPacketFilterProperty *propPacketFilter;
- WifiBluetoothCoexScanProperty *propBluetoothCoexScan;
- WifiBluetoothCoexModeProperty *propBluetoothCoexMode;
- WifiCurrentNetworkProperty *propCurrentNetwork;
- IntegerPropertyHelper *propRssi;
- IntegerPropertyHelper *propLinkSpeed;
- WifiSuspendedProperty *propSuspended;
- WifiNetCountProperty *propNetCount;
- WifiSupplicantStateProperty *propSupplicantState;
- WifiInterfaceProperty *propInterface;
- WifiTriggerScanProperty *propTriggerScan;
- } mDynamicProperties;
-
- // True if supplicant is currently searching for a network
- bool mIsSupplicantSearching;
- int mNumScanResultsSinceLastStateChange;
-
- bool mEnabled;
-
-public:
- WifiController(PropertyManager *propmngr, IControllerHandler *handlers, char *modpath, char *modname, char *modargs);
- virtual ~WifiController() {}
-
- int start();
- int stop();
-
- WifiNetwork *createNetwork();
- int removeNetwork(int networkId);
- WifiNetworkCollection *createNetworkList();
-
- ScanResultCollection *createScanResults();
-
- char *getModulePath() { return mModulePath; }
- char *getModuleName() { return mModuleName; }
- char *getModuleArgs() { return mModuleArgs; }
-
- Supplicant *getSupplicant() { return mSupplicant; }
-
-protected:
- // Move this crap into a 'driver'
- virtual int powerUp() = 0;
- virtual int powerDown() = 0;
- virtual int loadFirmware();
-
- virtual bool isFirmwareLoaded() = 0;
- virtual bool isPoweredUp() = 0;
-
-private:
- void sendStatusBroadcast(const char *msg);
- int setActiveScan(bool active);
- int triggerScan();
- int enable();
- int disable();
- int setSuspend(bool suspend);
- bool getSuspended();
- int setBluetoothCoexistenceScan(bool enable);
- int setBluetoothCoexistenceMode(int mode);
- int setPacketFilter(bool enable);
- int setScanOnly(bool scanOnly);
-
- // ISupplicantEventHandler methods
- void onAssociatingEvent(SupplicantAssociatingEvent *evt);
- void onAssociatedEvent(SupplicantAssociatedEvent *evt);
- void onConnectedEvent(SupplicantConnectedEvent *evt);
- void onScanResultsEvent(SupplicantScanResultsEvent *evt);
- void onStateChangeEvent(SupplicantStateChangeEvent *evt);
- void onConnectionTimeoutEvent(SupplicantConnectionTimeoutEvent *evt);
- void onDisconnectedEvent(SupplicantDisconnectedEvent *evt);
-#if 0
- virtual void onTerminatingEvent(SupplicantEvent *evt);
- virtual void onPasswordChangedEvent(SupplicantEvent *evt);
- virtual void onEapNotificationEvent(SupplicantEvent *evt);
- virtual void onEapStartedEvent(SupplicantEvent *evt);
- virtual void onEapMethodEvent(SupplicantEvent *evt);
- virtual void onEapSuccessEvent(SupplicantEvent *evt);
- virtual void onEapFailureEvent(SupplicantEvent *evt);
- virtual void onLinkSpeedEvent(SupplicantEvent *evt);
- virtual void onDriverStateEvent(SupplicantEvent *evt);
-#endif
-
- void onStatusPollInterval();
-
- int verifyNotSuspended();
-};
-
-#endif
diff --git a/nexus/WifiNetwork.cpp b/nexus/WifiNetwork.cpp
deleted file mode 100644
index 0197b64..0000000
--- a/nexus/WifiNetwork.cpp
+++ /dev/null
@@ -1,970 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/types.h>
-
-#define LOG_TAG "WifiNetwork"
-#include <cutils/log.h>
-
-#include "NetworkManager.h"
-#include "WifiNetwork.h"
-#include "Supplicant.h"
-#include "WifiController.h"
-
-WifiNetwork::WifiNetwork() {
- // This is private to restrict copy constructors
-}
-
-WifiNetwork::WifiNetwork(WifiController *c, Supplicant *suppl, const char *data) {
- mController = c;
- mSuppl = suppl;
-
- char *tmp = strdup(data);
- char *next = tmp;
- char *id;
- char *ssid;
- char *bssid;
- char *flags;
-
- if (!(id = strsep(&next, "\t")))
- ALOGE("Failed to extract network id");
- if (!(ssid = strsep(&next, "\t")))
- ALOGE("Failed to extract ssid");
- if (!(bssid = strsep(&next, "\t")))
- ALOGE("Failed to extract bssid");
- if (!(flags = strsep(&next, "\t")))
- ALOGE("Failed to extract flags");
-
- // ALOGD("id '%s', ssid '%s', bssid '%s', flags '%s'", id, ssid, bssid,
- // flags ? flags :"null");
-
- if (id)
- mNetid = atoi(id);
- if (ssid)
- mSsid = strdup(ssid);
- if (bssid)
- mBssid = strdup(bssid);
-
- mPsk = NULL;
- memset(mWepKeys, 0, sizeof(mWepKeys));
- mDefaultKeyIndex = -1;
- mPriority = -1;
- mHiddenSsid = NULL;
- mKeyManagement = KeyManagementMask::UNKNOWN;
- mProtocols = 0;
- mAuthAlgorithms = 0;
- mPairwiseCiphers = 0;
- mGroupCiphers = 0;
- mEnabled = true;
-
- if (flags && flags[0] != '\0') {
- if (!strcmp(flags, "[DISABLED]"))
- mEnabled = false;
- else
- ALOGW("Unsupported flags '%s'", flags);
- }
-
- free(tmp);
- createProperties();
-}
-
-WifiNetwork::WifiNetwork(WifiController *c, Supplicant *suppl, int networkId) {
- mController = c;
- mSuppl = suppl;
- mNetid = networkId;
- mSsid = NULL;
- mBssid = NULL;
- mPsk = NULL;
- memset(mWepKeys, 0, sizeof(mWepKeys));
- mDefaultKeyIndex = -1;
- mPriority = -1;
- mHiddenSsid = NULL;
- mKeyManagement = 0;
- mProtocols = 0;
- mAuthAlgorithms = 0;
- mPairwiseCiphers = 0;
- mGroupCiphers = 0;
- mEnabled = false;
- createProperties();
-}
-
-WifiNetwork *WifiNetwork::clone() {
- WifiNetwork *r = new WifiNetwork();
-
- r->mSuppl = mSuppl;
- r->mNetid = mNetid;
-
- if (mSsid)
- r->mSsid = strdup(mSsid);
- if (mBssid)
- r->mBssid = strdup(mBssid);
- if (mPsk)
- r->mPsk = strdup(mPsk);
-
- r->mController = mController;
- memcpy(r->mWepKeys, mWepKeys, sizeof(mWepKeys));
- r->mDefaultKeyIndex = mDefaultKeyIndex;
- r->mPriority = mPriority;
- if (mHiddenSsid)
- r->mHiddenSsid = strdup(mHiddenSsid);
- r->mKeyManagement = mKeyManagement;
- r->mProtocols = mProtocols;
- r->mAuthAlgorithms = mAuthAlgorithms;
- r->mPairwiseCiphers = mPairwiseCiphers;
- r->mGroupCiphers = mGroupCiphers;
- return r;
-}
-
-void WifiNetwork::createProperties() {
- asprintf(&mPropNamespace, "wifi.net.%d", mNetid);
-
- mStaticProperties.propEnabled = new WifiNetworkEnabledProperty(this);
- mStaticProperties.propSsid = new WifiNetworkSsidProperty(this);
- mStaticProperties.propBssid = new WifiNetworkBssidProperty(this);
- mStaticProperties.propPsk = new WifiNetworkPskProperty(this);
- mStaticProperties.propWepKey = new WifiNetworkWepKeyProperty(this);
- mStaticProperties.propDefKeyIdx = new WifiNetworkDefaultKeyIndexProperty(this);
- mStaticProperties.propPriority = new WifiNetworkPriorityProperty(this);
- mStaticProperties.propKeyManagement = new WifiNetworkKeyManagementProperty(this);
- mStaticProperties.propProtocols = new WifiNetworkProtocolsProperty(this);
- mStaticProperties.propAuthAlgorithms = new WifiNetworkAuthAlgorithmsProperty(this);
- mStaticProperties.propPairwiseCiphers = new WifiNetworkPairwiseCiphersProperty(this);
- mStaticProperties.propGroupCiphers = new WifiNetworkGroupCiphersProperty(this);
- mStaticProperties.propHiddenSsid = new WifiNetworkHiddenSsidProperty(this);
-}
-
-WifiNetwork::~WifiNetwork() {
- if (mPropNamespace)
- free(mPropNamespace);
- if (mSsid)
- free(mSsid);
- if (mBssid)
- free(mBssid);
- if (mPsk)
- free(mPsk);
- for (int i = 0; i < 4; i++) {
- if (mWepKeys[i])
- free(mWepKeys[i]);
- }
-
- if (mHiddenSsid)
- free(mHiddenSsid);
-
- delete mStaticProperties.propEnabled;
- delete mStaticProperties.propSsid;
- delete mStaticProperties.propBssid;
- delete mStaticProperties.propPsk;
- delete mStaticProperties.propWepKey;
- delete mStaticProperties.propDefKeyIdx;
- delete mStaticProperties.propPriority;
- delete mStaticProperties.propKeyManagement;
- delete mStaticProperties.propProtocols;
- delete mStaticProperties.propAuthAlgorithms;
- delete mStaticProperties.propPairwiseCiphers;
- delete mStaticProperties.propGroupCiphers;
- delete mStaticProperties.propHiddenSsid;
-}
-
-int WifiNetwork::refresh() {
- char buffer[255];
- size_t len;
- uint32_t mask;
-
- len = sizeof(buffer);
- if (mSuppl->getNetworkVar(mNetid, "psk", buffer, len))
- mPsk = strdup(buffer);
-
- for (int i = 0; i < 4; i++) {
- char *name;
-
- asprintf(&name, "wep_key%d", i);
- len = sizeof(buffer);
- if (mSuppl->getNetworkVar(mNetid, name, buffer, len))
- mWepKeys[i] = strdup(buffer);
- free(name);
- }
-
- len = sizeof(buffer);
- if (mSuppl->getNetworkVar(mNetid, "wep_tx_keyidx", buffer, len))
- mDefaultKeyIndex = atoi(buffer);
-
- len = sizeof(buffer);
- if (mSuppl->getNetworkVar(mNetid, "priority", buffer, len))
- mPriority = atoi(buffer);
-
- len = sizeof(buffer);
- if (mSuppl->getNetworkVar(mNetid, "scan_ssid", buffer, len))
- mHiddenSsid = strdup(buffer);
-
- len = sizeof(buffer);
- if (mSuppl->getNetworkVar(mNetid, "key_mgmt", buffer, len)) {
- if (WifiNetwork::parseKeyManagementMask(buffer, &mask)) {
- ALOGE("Error parsing key_mgmt (%s)", strerror(errno));
- } else {
- mKeyManagement = mask;
- }
- }
-
- len = sizeof(buffer);
- if (mSuppl->getNetworkVar(mNetid, "proto", buffer, len)) {
- if (WifiNetwork::parseProtocolsMask(buffer, &mask)) {
- ALOGE("Error parsing proto (%s)", strerror(errno));
- } else {
- mProtocols = mask;
- }
- }
-
- len = sizeof(buffer);
- if (mSuppl->getNetworkVar(mNetid, "auth_alg", buffer, len)) {
- if (WifiNetwork::parseAuthAlgorithmsMask(buffer, &mask)) {
- ALOGE("Error parsing auth_alg (%s)", strerror(errno));
- } else {
- mAuthAlgorithms = mask;
- }
- }
-
- len = sizeof(buffer);
- if (mSuppl->getNetworkVar(mNetid, "pairwise", buffer, len)) {
- if (WifiNetwork::parsePairwiseCiphersMask(buffer, &mask)) {
- ALOGE("Error parsing pairwise (%s)", strerror(errno));
- } else {
- mPairwiseCiphers = mask;
- }
- }
-
- len = sizeof(buffer);
- if (mSuppl->getNetworkVar(mNetid, "group", buffer, len)) {
- if (WifiNetwork::parseGroupCiphersMask(buffer, &mask)) {
- ALOGE("Error parsing group (%s)", strerror(errno));
- } else {
- mGroupCiphers = mask;
- }
- }
-
- return 0;
-out_err:
- ALOGE("Refresh failed (%s)",strerror(errno));
- return -1;
-}
-
-int WifiNetwork::setSsid(const char *ssid) {
- char tmp[255];
- snprintf(tmp, sizeof(tmp), "\"%s\"", ssid);
- if (mSuppl->setNetworkVar(mNetid, "ssid", tmp))
- return -1;
- if (mSsid)
- free(mSsid);
- mSsid = strdup(ssid);
- return 0;
-}
-
-int WifiNetwork::setBssid(const char *bssid) {
- if (mSuppl->setNetworkVar(mNetid, "bssid", bssid))
- return -1;
- if (mBssid)
- free(mBssid);
- mBssid = strdup(bssid);
- return 0;
-}
-
-int WifiNetwork::setPsk(const char *psk) {
- char tmp[255];
- snprintf(tmp, sizeof(tmp), "\"%s\"", psk);
- if (mSuppl->setNetworkVar(mNetid, "psk", tmp))
- return -1;
-
- if (mPsk)
- free(mPsk);
- mPsk = strdup(psk);
- return 0;
-}
-
-int WifiNetwork::setWepKey(int idx, const char *key) {
- char *name;
-
- asprintf(&name, "wep_key%d", idx);
- int rc = mSuppl->setNetworkVar(mNetid, name, key);
- free(name);
-
- if (rc)
- return -1;
-
- if (mWepKeys[idx])
- free(mWepKeys[idx]);
- mWepKeys[idx] = strdup(key);
- return 0;
-}
-
-int WifiNetwork::setDefaultKeyIndex(int idx) {
- char val[16];
- sprintf(val, "%d", idx);
- if (mSuppl->setNetworkVar(mNetid, "wep_tx_keyidx", val))
- return -1;
-
- mDefaultKeyIndex = idx;
- return 0;
-}
-
-int WifiNetwork::setPriority(int priority) {
- char val[16];
- sprintf(val, "%d", priority);
- if (mSuppl->setNetworkVar(mNetid, "priority", val))
- return -1;
-
- mPriority = priority;
- return 0;
-}
-
-int WifiNetwork::setHiddenSsid(const char *ssid) {
- if (mSuppl->setNetworkVar(mNetid, "scan_ssid", ssid))
- return -1;
-
- if (mHiddenSsid)
- free(mHiddenSsid);
- mHiddenSsid = strdup(ssid);
- return 0;
-}
-
-int WifiNetwork::setKeyManagement(uint32_t mask) {
- char accum[64] = {'\0'};
-
- if (mask == KeyManagementMask::NONE)
- strcpy(accum, "NONE");
- else {
- if (mask & KeyManagementMask::WPA_PSK)
- strcat(accum, "WPA-PSK");
- if (mask & KeyManagementMask::WPA_EAP) {
- if (accum[0] != '\0')
- strcat(accum, " ");
- strcat(accum, "WPA-EAP");
- }
- if (mask & KeyManagementMask::IEEE8021X) {
- if (accum[0] != '\0')
- strcat(accum, " ");
- strcat(accum, "IEEE8021X");
- }
- }
-
- if (mSuppl->setNetworkVar(mNetid, "key_mgmt", accum))
- return -1;
- mKeyManagement = mask;
- return 0;
-}
-
-int WifiNetwork::setProtocols(uint32_t mask) {
- char accum[64];
-
- accum[0] = '\0';
-
- if (mask & SecurityProtocolMask::WPA)
- strcpy(accum, "WPA ");
-
- if (mask & SecurityProtocolMask::RSN)
- strcat(accum, "RSN");
-
- if (mSuppl->setNetworkVar(mNetid, "proto", accum))
- return -1;
- mProtocols = mask;
- return 0;
-}
-
-int WifiNetwork::setAuthAlgorithms(uint32_t mask) {
- char accum[64];
-
- accum[0] = '\0';
-
- if (mask == 0)
- strcpy(accum, "");
-
- if (mask & AuthenticationAlgorithmMask::OPEN)
- strcpy(accum, "OPEN ");
-
- if (mask & AuthenticationAlgorithmMask::SHARED)
- strcat(accum, "SHARED ");
-
- if (mask & AuthenticationAlgorithmMask::LEAP)
- strcat(accum, "LEAP ");
-
- if (mSuppl->setNetworkVar(mNetid, "auth_alg", accum))
- return -1;
-
- mAuthAlgorithms = mask;
- return 0;
-}
-
-int WifiNetwork::setPairwiseCiphers(uint32_t mask) {
- char accum[64];
-
- accum[0] = '\0';
-
- if (mask == PairwiseCiphersMask::NONE)
- strcpy(accum, "NONE");
- else {
- if (mask & PairwiseCiphersMask::TKIP)
- strcat(accum, "TKIP ");
- if (mask & PairwiseCiphersMask::CCMP)
- strcat(accum, "CCMP ");
- }
-
- if (mSuppl->setNetworkVar(mNetid, "pairwise", accum))
- return -1;
-
- mPairwiseCiphers = mask;
- return 0;
-}
-
-int WifiNetwork::setGroupCiphers(uint32_t mask) {
- char accum[64];
-
- accum[0] = '\0';
-
- if (mask & GroupCiphersMask::WEP40)
- strcat(accum, "WEP40 ");
- if (mask & GroupCiphersMask::WEP104)
- strcat(accum, "WEP104 ");
- if (mask & GroupCiphersMask::TKIP)
- strcat(accum, "TKIP ");
- if (mask & GroupCiphersMask::CCMP)
- strcat(accum, "CCMP ");
-
- if (mSuppl->setNetworkVar(mNetid, "group", accum))
- return -1;
- mGroupCiphers = mask;
- return 0;
-}
-
-int WifiNetwork::setEnabled(bool enabled) {
-
- if (enabled) {
- if (getPriority() == -1) {
- ALOGE("Cannot enable network when priority is not set");
- errno = EAGAIN;
- return -1;
- }
- if (getKeyManagement() == KeyManagementMask::UNKNOWN) {
- ALOGE("Cannot enable network when KeyManagement is not set");
- errno = EAGAIN;
- return -1;
- }
- }
-
- if (mSuppl->enableNetwork(mNetid, enabled))
- return -1;
-
- mEnabled = enabled;
- return 0;
-}
-
-int WifiNetwork::attachProperties(PropertyManager *pm, const char *nsName) {
- pm->attachProperty(nsName, mStaticProperties.propSsid);
- pm->attachProperty(nsName, mStaticProperties.propBssid);
- pm->attachProperty(nsName, mStaticProperties.propPsk);
- pm->attachProperty(nsName, mStaticProperties.propWepKey);
- pm->attachProperty(nsName, mStaticProperties.propDefKeyIdx);
- pm->attachProperty(nsName, mStaticProperties.propPriority);
- pm->attachProperty(nsName, mStaticProperties.propKeyManagement);
- pm->attachProperty(nsName, mStaticProperties.propProtocols);
- pm->attachProperty(nsName, mStaticProperties.propAuthAlgorithms);
- pm->attachProperty(nsName, mStaticProperties.propPairwiseCiphers);
- pm->attachProperty(nsName, mStaticProperties.propGroupCiphers);
- pm->attachProperty(nsName, mStaticProperties.propHiddenSsid);
- pm->attachProperty(nsName, mStaticProperties.propEnabled);
- return 0;
-}
-
-int WifiNetwork::detachProperties(PropertyManager *pm, const char *nsName) {
- pm->detachProperty(nsName, mStaticProperties.propEnabled);
- pm->detachProperty(nsName, mStaticProperties.propSsid);
- pm->detachProperty(nsName, mStaticProperties.propBssid);
- pm->detachProperty(nsName, mStaticProperties.propPsk);
- pm->detachProperty(nsName, mStaticProperties.propWepKey);
- pm->detachProperty(nsName, mStaticProperties.propDefKeyIdx);
- pm->detachProperty(nsName, mStaticProperties.propPriority);
- pm->detachProperty(nsName, mStaticProperties.propKeyManagement);
- pm->detachProperty(nsName, mStaticProperties.propProtocols);
- pm->detachProperty(nsName, mStaticProperties.propAuthAlgorithms);
- pm->detachProperty(nsName, mStaticProperties.propPairwiseCiphers);
- pm->detachProperty(nsName, mStaticProperties.propGroupCiphers);
- pm->detachProperty(nsName, mStaticProperties.propHiddenSsid);
- return 0;
-}
-
-int WifiNetwork::parseKeyManagementMask(const char *buffer, uint32_t *mask) {
- bool none = false;
- char *v_tmp = strdup(buffer);
- char *v_next = v_tmp;
- char *v_token;
-
-// ALOGD("parseKeyManagementMask(%s)", buffer);
- *mask = 0;
-
- while((v_token = strsep(&v_next, " "))) {
- if (!strcasecmp(v_token, "NONE")) {
- *mask = KeyManagementMask::NONE;
- none = true;
- } else if (!none) {
- if (!strcasecmp(v_token, "WPA-PSK"))
- *mask |= KeyManagementMask::WPA_PSK;
- else if (!strcasecmp(v_token, "WPA-EAP"))
- *mask |= KeyManagementMask::WPA_EAP;
- else if (!strcasecmp(v_token, "IEEE8021X"))
- *mask |= KeyManagementMask::IEEE8021X;
- else {
- ALOGW("Invalid KeyManagementMask value '%s'", v_token);
- errno = EINVAL;
- free(v_tmp);
- return -1;
- }
- } else {
- ALOGW("KeyManagementMask value '%s' when NONE", v_token);
- errno = EINVAL;
- free(v_tmp);
- return -1;
- }
- }
- free(v_tmp);
- return 0;
-}
-
-int WifiNetwork::parseProtocolsMask(const char *buffer, uint32_t *mask) {
- bool none = false;
- char *v_tmp = strdup(buffer);
- char *v_next = v_tmp;
- char *v_token;
-
-// ALOGD("parseProtocolsMask(%s)", buffer);
- *mask = 0;
- while((v_token = strsep(&v_next, " "))) {
- if (!strcasecmp(v_token, "WPA"))
- *mask |= SecurityProtocolMask::WPA;
- else if (!strcasecmp(v_token, "RSN"))
- *mask |= SecurityProtocolMask::RSN;
- else {
- ALOGW("Invalid ProtocolsMask value '%s'", v_token);
- errno = EINVAL;
- free(v_tmp);
- return -1;
- }
- }
-
- free(v_tmp);
- return 0;
-}
-
-int WifiNetwork::parseAuthAlgorithmsMask(const char *buffer, uint32_t *mask) {
- bool none = false;
- char *v_tmp = strdup(buffer);
- char *v_next = v_tmp;
- char *v_token;
-
-// ALOGD("parseAuthAlgorithmsMask(%s)", buffer);
-
- *mask = 0;
- if (buffer[0] == '\0')
- return 0;
-
- while((v_token = strsep(&v_next, " "))) {
- if (!strcasecmp(v_token, "OPEN"))
- *mask |= AuthenticationAlgorithmMask::OPEN;
- else if (!strcasecmp(v_token, "SHARED"))
- *mask |= AuthenticationAlgorithmMask::SHARED;
- else if (!strcasecmp(v_token, "LEAP"))
- *mask |= AuthenticationAlgorithmMask::LEAP;
- else {
- ALOGW("Invalid AuthAlgorithmsMask value '%s'", v_token);
- errno = EINVAL;
- free(v_tmp);
- return -1;
- }
- }
- free(v_tmp);
- return 0;
-}
-
-int WifiNetwork::parsePairwiseCiphersMask(const char *buffer, uint32_t *mask) {
- bool none = false;
- char *v_tmp = strdup(buffer);
- char *v_next = v_tmp;
- char *v_token;
-
-// ALOGD("parsePairwiseCiphersMask(%s)", buffer);
-
- *mask = 0;
- while((v_token = strsep(&v_next, " "))) {
- if (!strcasecmp(v_token, "NONE")) {
- *mask = PairwiseCiphersMask::NONE;
- none = true;
- } else if (!none) {
- if (!strcasecmp(v_token, "TKIP"))
- *mask |= PairwiseCiphersMask::TKIP;
- else if (!strcasecmp(v_token, "CCMP"))
- *mask |= PairwiseCiphersMask::CCMP;
- else {
- ALOGW("PairwiseCiphersMask value '%s' when NONE", v_token);
- errno = EINVAL;
- free(v_tmp);
- return -1;
- }
- } else {
- ALOGW("Invalid PairwiseCiphersMask value '%s'", v_token);
- errno = EINVAL;
- free(v_tmp);
- return -1;
- }
- }
- free(v_tmp);
- return 0;
-}
-
-int WifiNetwork::parseGroupCiphersMask(const char *buffer, uint32_t *mask) {
- bool none = false;
- char *v_tmp = strdup(buffer);
- char *v_next = v_tmp;
- char *v_token;
-
-// ALOGD("parseGroupCiphersMask(%s)", buffer);
-
- *mask = 0;
- while((v_token = strsep(&v_next, " "))) {
- if (!strcasecmp(v_token, "WEP40"))
- *mask |= GroupCiphersMask::WEP40;
- else if (!strcasecmp(v_token, "WEP104"))
- *mask |= GroupCiphersMask::WEP104;
- else if (!strcasecmp(v_token, "TKIP"))
- *mask |= GroupCiphersMask::TKIP;
- else if (!strcasecmp(v_token, "CCMP"))
- *mask |= GroupCiphersMask::CCMP;
- else {
- ALOGW("Invalid GroupCiphersMask value '%s'", v_token);
- errno = EINVAL;
- free(v_tmp);
- return -1;
- }
- }
- free(v_tmp);
- return 0;
-}
-
-WifiNetwork::WifiNetworkIntegerProperty::WifiNetworkIntegerProperty(WifiNetwork *wn,
- const char *name,
- bool ro,
- int elements) :
- IntegerProperty(name, ro, elements) {
- mWn = wn;
-}
-
-WifiNetwork::WifiNetworkStringProperty::WifiNetworkStringProperty(WifiNetwork *wn,
- const char *name,
- bool ro, int elements) :
- StringProperty(name, ro, elements) {
- mWn = wn;
-}
-
-WifiNetwork::WifiNetworkEnabledProperty::WifiNetworkEnabledProperty(WifiNetwork *wn) :
- WifiNetworkIntegerProperty(wn, "Enabled", false, 1) {
-}
-
-int WifiNetwork::WifiNetworkEnabledProperty::get(int idx, int *buffer) {
- *buffer = mWn->mEnabled;
- return 0;
-}
-int WifiNetwork::WifiNetworkEnabledProperty::set(int idx, int value) {
- return mWn->setEnabled(value == 1);
-}
-
-WifiNetwork::WifiNetworkSsidProperty::WifiNetworkSsidProperty(WifiNetwork *wn) :
- WifiNetworkStringProperty(wn, "Ssid", false, 1) {
-}
-
-int WifiNetwork::WifiNetworkSsidProperty::get(int idx, char *buffer, size_t max) {
- strncpy(buffer,
- mWn->getSsid() ? mWn->getSsid() : "none",
- max);
- return 0;
-}
-int WifiNetwork::WifiNetworkSsidProperty::set(int idx, const char *value) {
- return mWn->setSsid(value);
-}
-
-WifiNetwork::WifiNetworkBssidProperty::WifiNetworkBssidProperty(WifiNetwork *wn) :
- WifiNetworkStringProperty(wn, "Bssid", false, 1) {
-}
-int WifiNetwork::WifiNetworkBssidProperty::get(int idx, char *buffer, size_t max) {
- strncpy(buffer,
- mWn->getBssid() ? mWn->getBssid() : "none",
- max);
- return 0;
-}
-int WifiNetwork::WifiNetworkBssidProperty::set(int idx, const char *value) {
- return mWn->setBssid(value);
-}
-
-WifiNetwork::WifiNetworkPskProperty::WifiNetworkPskProperty(WifiNetwork *wn) :
- WifiNetworkStringProperty(wn, "Psk", false, 1) {
-}
-int WifiNetwork::WifiNetworkPskProperty::get(int idx, char *buffer, size_t max) {
- strncpy(buffer,
- mWn->getPsk() ? mWn->getPsk() : "none",
- max);
- return 0;
-}
-int WifiNetwork::WifiNetworkPskProperty::set(int idx, const char *value) {
- return mWn->setPsk(value);
-}
-
-WifiNetwork::WifiNetworkWepKeyProperty::WifiNetworkWepKeyProperty(WifiNetwork *wn) :
- WifiNetworkStringProperty(wn, "WepKey", false, 4) {
-}
-
-int WifiNetwork::WifiNetworkWepKeyProperty::get(int idx, char *buffer, size_t max) {
- const char *key = mWn->getWepKey(idx);
-
- strncpy(buffer, (key ? key : "none"), max);
- return 0;
-}
-int WifiNetwork::WifiNetworkWepKeyProperty::set(int idx, const char *value) {
- return mWn->setWepKey(idx, value);
-}
-
-WifiNetwork::WifiNetworkDefaultKeyIndexProperty::WifiNetworkDefaultKeyIndexProperty(WifiNetwork *wn) :
- WifiNetworkIntegerProperty(wn, "DefaultKeyIndex", false, 1) {
-}
-int WifiNetwork::WifiNetworkDefaultKeyIndexProperty::get(int idx, int *buffer) {
- *buffer = mWn->getDefaultKeyIndex();
- return 0;
-}
-int WifiNetwork::WifiNetworkDefaultKeyIndexProperty::set(int idx, int value) {
- return mWn->setDefaultKeyIndex(value);
-}
-
-WifiNetwork::WifiNetworkPriorityProperty::WifiNetworkPriorityProperty(WifiNetwork *wn) :
- WifiNetworkIntegerProperty(wn, "Priority", false, 1) {
-}
-int WifiNetwork::WifiNetworkPriorityProperty::get(int idx, int *buffer) {
- *buffer = mWn->getPriority();
- return 0;
-}
-int WifiNetwork::WifiNetworkPriorityProperty::set(int idx, int value) {
- return mWn->setPriority(value);
-}
-
-WifiNetwork::WifiNetworkKeyManagementProperty::WifiNetworkKeyManagementProperty(WifiNetwork *wn) :
- WifiNetworkStringProperty(wn, "KeyManagement", false, 1) {
-}
-int WifiNetwork::WifiNetworkKeyManagementProperty::get(int idx, char *buffer, size_t max) {
-
- if (mWn->getKeyManagement() == KeyManagementMask::NONE)
- strncpy(buffer, "NONE", max);
- else {
- char tmp[80] = { '\0' };
-
- if (mWn->getKeyManagement() & KeyManagementMask::WPA_PSK)
- strcat(tmp, "WPA-PSK");
- if (mWn->getKeyManagement() & KeyManagementMask::WPA_EAP) {
- if (tmp[0] != '\0')
- strcat(tmp, " ");
- strcat(tmp, "WPA-EAP");
- }
- if (mWn->getKeyManagement() & KeyManagementMask::IEEE8021X) {
- if (tmp[0] != '\0')
- strcat(tmp, " ");
- strcat(tmp, "IEEE8021X");
- }
- if (tmp[0] == '\0') {
- strncpy(buffer, "(internal error)", max);
- errno = ENOENT;
- return -1;
- }
- if (tmp[strlen(tmp)] == ' ')
- tmp[strlen(tmp)] = '\0';
-
- strncpy(buffer, tmp, max);
- }
- return 0;
-}
-int WifiNetwork::WifiNetworkKeyManagementProperty::set(int idx, const char *value) {
- uint32_t mask;
- if (mWn->parseKeyManagementMask(value, &mask))
- return -1;
- return mWn->setKeyManagement(mask);
-}
-
-WifiNetwork::WifiNetworkProtocolsProperty::WifiNetworkProtocolsProperty(WifiNetwork *wn) :
- WifiNetworkStringProperty(wn, "Protocols", false, 1) {
-}
-int WifiNetwork::WifiNetworkProtocolsProperty::get(int idx, char *buffer, size_t max) {
- char tmp[80] = { '\0' };
-
- if (mWn->getProtocols() & SecurityProtocolMask::WPA)
- strcat(tmp, "WPA");
- if (mWn->getProtocols() & SecurityProtocolMask::RSN) {
- if (tmp[0] != '\0')
- strcat(tmp, " ");
- strcat(tmp, "RSN");
- }
-
- if (tmp[0] == '\0') {
- strncpy(buffer, "(internal error)", max);
- errno = ENOENT;
- return NULL;
- }
- if (tmp[strlen(tmp)] == ' ')
- tmp[strlen(tmp)] = '\0';
-
- strncpy(buffer, tmp, max);
- return 0;
-}
-int WifiNetwork::WifiNetworkProtocolsProperty::set(int idx, const char *value) {
- uint32_t mask;
- if (mWn->parseProtocolsMask(value, &mask))
- return -1;
- return mWn->setProtocols(mask);
-}
-
-WifiNetwork::WifiNetworkAuthAlgorithmsProperty::WifiNetworkAuthAlgorithmsProperty(WifiNetwork *wn) :
- WifiNetworkStringProperty(wn, "AuthAlgorithms", false, 1) {
-}
-int WifiNetwork::WifiNetworkAuthAlgorithmsProperty::get(int idx, char *buffer, size_t max) {
- char tmp[80] = { '\0' };
-
- if (mWn->getAuthAlgorithms() == 0) {
- strncpy(buffer, "NONE", max);
- return 0;
- }
-
- if (mWn->getAuthAlgorithms() & AuthenticationAlgorithmMask::OPEN)
- strcat(tmp, "OPEN");
- if (mWn->getAuthAlgorithms() & AuthenticationAlgorithmMask::SHARED) {
- if (tmp[0] != '\0')
- strcat(tmp, " ");
- strcat(tmp, "SHARED");
- }
- if (mWn->getAuthAlgorithms() & AuthenticationAlgorithmMask::LEAP) {
- if (tmp[0] != '\0')
- strcat(tmp, " ");
- strcat(tmp, "LEAP");
- }
-
- if (tmp[0] == '\0') {
- strncpy(buffer, "(internal error)", max);
- errno = ENOENT;
- return NULL;
- }
- if (tmp[strlen(tmp)] == ' ')
- tmp[strlen(tmp)] = '\0';
-
- strncpy(buffer, tmp, max);
- return 0;
-}
-int WifiNetwork::WifiNetworkAuthAlgorithmsProperty::set(int idx, const char *value) {
- uint32_t mask;
- if (mWn->parseAuthAlgorithmsMask(value, &mask))
- return -1;
- return mWn->setAuthAlgorithms(mask);
-}
-
-WifiNetwork::WifiNetworkPairwiseCiphersProperty::WifiNetworkPairwiseCiphersProperty(WifiNetwork *wn) :
- WifiNetworkStringProperty(wn, "PairwiseCiphers", false, 1) {
-}
-int WifiNetwork::WifiNetworkPairwiseCiphersProperty::get(int idx, char *buffer, size_t max) {
- if (mWn->getPairwiseCiphers() == PairwiseCiphersMask::NONE)
- strncpy(buffer, "NONE", max);
- else {
- char tmp[80] = { '\0' };
-
- if (mWn->getPairwiseCiphers() & PairwiseCiphersMask::TKIP)
- strcat(tmp, "TKIP");
- if (mWn->getPairwiseCiphers() & PairwiseCiphersMask::CCMP) {
- if (tmp[0] != '\0')
- strcat(tmp, " ");
- strcat(tmp, "CCMP");
- }
- if (tmp[0] == '\0') {
- strncpy(buffer, "(internal error)", max);
- errno = ENOENT;
- return NULL;
- }
- if (tmp[strlen(tmp)] == ' ')
- tmp[strlen(tmp)] = '\0';
-
- strncpy(buffer, tmp, max);
- }
- return 0;
-}
-int WifiNetwork::WifiNetworkPairwiseCiphersProperty::set(int idx, const char *value) {
- uint32_t mask;
- if (mWn->parsePairwiseCiphersMask(value, &mask))
- return -1;
- return mWn->setPairwiseCiphers(mask);
-}
-
-WifiNetwork::WifiNetworkGroupCiphersProperty::WifiNetworkGroupCiphersProperty(WifiNetwork *wn) :
- WifiNetworkStringProperty(wn, "GroupCiphers", false, 1) {
-}
-int WifiNetwork::WifiNetworkGroupCiphersProperty::get(int idx, char *buffer, size_t max) {
- char tmp[80] = { '\0' };
-
- if (mWn->getGroupCiphers() & GroupCiphersMask::WEP40)
- strcat(tmp, "WEP40");
- if (mWn->getGroupCiphers() & GroupCiphersMask::WEP104) {
- if (tmp[0] != '\0')
- strcat(tmp, " ");
- strcat(tmp, "WEP104");
- }
- if (mWn->getGroupCiphers() & GroupCiphersMask::TKIP) {
- if (tmp[0] != '\0')
- strcat(tmp, " ");
- strcat(tmp, "TKIP");
- }
- if (mWn->getGroupCiphers() & GroupCiphersMask::CCMP) {
- if (tmp[0] != '\0')
- strcat(tmp, " ");
- strcat(tmp, "CCMP");
- }
-
- if (tmp[0] == '\0') {
- strncpy(buffer, "(internal error)", max);
- errno = ENOENT;
- return -1;
- }
- if (tmp[strlen(tmp)] == ' ')
- tmp[strlen(tmp)] = '\0';
-
- strncpy(buffer, tmp, max);
- return 0;
-}
-int WifiNetwork::WifiNetworkGroupCiphersProperty::set(int idx, const char *value) {
- uint32_t mask;
- if (mWn->parseGroupCiphersMask(value, &mask))
- return -1;
- return mWn->setGroupCiphers(mask);
-}
-
-WifiNetwork::WifiNetworkHiddenSsidProperty::WifiNetworkHiddenSsidProperty(WifiNetwork *wn) :
- WifiNetworkStringProperty(wn, "HiddenSsid", false, 1) {
-}
-int WifiNetwork::WifiNetworkHiddenSsidProperty::get(int idx, char *buffer, size_t max) {
- const char *scan_ssid = mWn->getHiddenSsid();
-
- strncpy(buffer, (scan_ssid ? scan_ssid : "none"), max);
- return 0;
-}
-int WifiNetwork::WifiNetworkHiddenSsidProperty::set(int idx, const char *value) {
- return mWn->setHiddenSsid(value);
-}
diff --git a/nexus/WifiNetwork.h b/nexus/WifiNetwork.h
deleted file mode 100644
index 15ec647..0000000
--- a/nexus/WifiNetwork.h
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _WIFI_NETWORK_H
-#define _WIFI_NETWORK_H
-
-#include <sys/types.h>
-
-#include <utils/List.h>
-
-#include "Property.h"
-
-class PropertyManager;
-
-class KeyManagementMask {
-public:
- static const uint32_t UNKNOWN = 0;
- static const uint32_t NONE = 0x01;
- static const uint32_t WPA_PSK = 0x02;
- static const uint32_t WPA_EAP = 0x04;
- static const uint32_t IEEE8021X = 0x08;
- static const uint32_t ALL = WPA_PSK | WPA_EAP | IEEE8021X;
-};
-
-class SecurityProtocolMask {
-public:
- static const uint32_t WPA = 0x01;
- static const uint32_t RSN = 0x02;
-};
-
-class AuthenticationAlgorithmMask {
-public:
- static const uint32_t OPEN = 0x01;
- static const uint32_t SHARED = 0x02;
- static const uint32_t LEAP = 0x04;
-};
-
-class PairwiseCiphersMask {
-public:
- static const uint32_t NONE = 0x00;
- static const uint32_t TKIP = 0x01;
- static const uint32_t CCMP = 0x02;
-};
-
-class GroupCiphersMask {
-public:
- static const uint32_t WEP40 = 0x01;
- static const uint32_t WEP104 = 0x02;
- static const uint32_t TKIP = 0x04;
- static const uint32_t CCMP = 0x08;
-};
-
-class Supplicant;
-class Controller;
-class WifiController;
-
-class WifiNetwork {
- class WifiNetworkIntegerProperty : public IntegerProperty {
- protected:
- WifiNetwork *mWn;
- public:
- WifiNetworkIntegerProperty(WifiNetwork *wn, const char *name, bool ro,
- int elements);
- virtual ~WifiNetworkIntegerProperty() {}
- virtual int set(int idx, int value) = 0;
- virtual int get(int idx, int *buffer) = 0;
- };
- friend class WifiNetwork::WifiNetworkIntegerProperty;
-
- class WifiNetworkStringProperty : public StringProperty {
- protected:
- WifiNetwork *mWn;
- public:
- WifiNetworkStringProperty(WifiNetwork *wn, const char *name, bool ro,
- int elements);
- virtual ~WifiNetworkStringProperty() {}
- virtual int set(int idx, const char *value) = 0;
- virtual int get(int idx, char *buffer, size_t max) = 0;
- };
- friend class WifiNetwork::WifiNetworkStringProperty;
-
- class WifiNetworkEnabledProperty : public WifiNetworkIntegerProperty {
- public:
- WifiNetworkEnabledProperty(WifiNetwork *wn);
- virtual ~WifiNetworkEnabledProperty() {};
- int set(int idx, int value);
- int get(int idx, int *buffer);
- };
-
- class WifiNetworkPriorityProperty : public WifiNetworkIntegerProperty {
- public:
- WifiNetworkPriorityProperty(WifiNetwork *wn);
- virtual ~WifiNetworkPriorityProperty() {};
- int set(int idx, int value);
- int get(int idx, int *buffer);
- };
-
- class WifiNetworkDefaultKeyIndexProperty : public WifiNetworkIntegerProperty {
- public:
- WifiNetworkDefaultKeyIndexProperty(WifiNetwork *wn);
- virtual ~WifiNetworkDefaultKeyIndexProperty() {};
- int set(int idx, int value);
- int get(int idx, int *buffer);
- };
-
- class WifiNetworkSsidProperty : public WifiNetworkStringProperty {
- public:
- WifiNetworkSsidProperty(WifiNetwork *wn);
- virtual ~WifiNetworkSsidProperty() {};
- int set(int idx, const char *value);
- int get(int idx, char *buffer, size_t max);
- };
-
- class WifiNetworkBssidProperty : public WifiNetworkStringProperty {
- public:
- WifiNetworkBssidProperty(WifiNetwork *wn);
- virtual ~WifiNetworkBssidProperty() {};
- int set(int idx, const char *value);
- int get(int idx, char *buffer, size_t max);
- };
-
- class WifiNetworkPskProperty : public WifiNetworkStringProperty {
- public:
- WifiNetworkPskProperty(WifiNetwork *wn);
- virtual ~WifiNetworkPskProperty() {};
- int set(int idx, const char *value);
- int get(int idx, char *buffer, size_t max);
- };
-
- class WifiNetworkKeyManagementProperty : public WifiNetworkStringProperty {
- public:
- WifiNetworkKeyManagementProperty(WifiNetwork *wn);
- virtual ~WifiNetworkKeyManagementProperty() {};
- int set(int idx, const char *value);
- int get(int idx, char *buffer, size_t max);
- };
-
- class WifiNetworkAuthAlgorithmsProperty : public WifiNetworkStringProperty {
- public:
- WifiNetworkAuthAlgorithmsProperty(WifiNetwork *wn);
- virtual ~WifiNetworkAuthAlgorithmsProperty() {};
- int set(int idx, const char *value);
- int get(int idx, char *buffer, size_t max);
- };
-
- class WifiNetworkProtocolsProperty : public WifiNetworkStringProperty {
- public:
- WifiNetworkProtocolsProperty(WifiNetwork *wn);
- virtual ~WifiNetworkProtocolsProperty() {};
- int set(int idx, const char *value);
- int get(int idx, char *buffer, size_t max);
- };
-
- class WifiNetworkWepKeyProperty : public WifiNetworkStringProperty {
- public:
- WifiNetworkWepKeyProperty(WifiNetwork *wn);
- virtual ~WifiNetworkWepKeyProperty() {};
- int set(int idx, const char *value);
- int get(int idx, char *buffer, size_t max);
- };
-
- class WifiNetworkPairwiseCiphersProperty : public WifiNetworkStringProperty {
- public:
- WifiNetworkPairwiseCiphersProperty(WifiNetwork *wn);
- virtual ~WifiNetworkPairwiseCiphersProperty() {};
- int set(int idx, const char *value);
- int get(int idx, char *buffer, size_t max);
- };
-
- class WifiNetworkGroupCiphersProperty : public WifiNetworkStringProperty {
- public:
- WifiNetworkGroupCiphersProperty(WifiNetwork *wn);
- virtual ~WifiNetworkGroupCiphersProperty() {};
- int set(int idx, const char *value);
- int get(int idx, char *buffer, size_t max);
- };
-
- class WifiNetworkHiddenSsidProperty : public WifiNetworkStringProperty {
- public:
- WifiNetworkHiddenSsidProperty(WifiNetwork *wn);
- virtual ~WifiNetworkHiddenSsidProperty() {};
- int set(int idx, const char *value);
- int get(int idx, char *buffer, size_t max);
- };
-
-private:
- Supplicant *mSuppl;
- WifiController *mController;
-
- /*
- * Unique network id - normally provided by supplicant
- */
- int mNetid;
-
- /*
- * The networks' SSID. Can either be an ASCII string,
- * which must be enclosed in double quotation marks
- * (ie: "MyNetwork"), or a string of hex digits which
- * are not enclosed in quotes (ie: 01ab7893)
- */
- char *mSsid;
-
- /*
- * When set, this entry should only be used
- * when associating with the AP having the specified
- * BSSID. The value is a string in the format of an
- * Ethernet MAC address
- */
- char *mBssid;
-
- /*
- * Pre-shared key for use with WPA-PSK
- */
- char *mPsk;
-
- /*
- * Up to four WEP keys. Either in ASCII string enclosed in
- * double quotes, or a string of hex digits
- */
- char *mWepKeys[4];
-
- /*
- * Default WEP key index, ranging from 0 -> NUM_WEP_KEYS -1
- */
- int mDefaultKeyIndex;
-
- /*
- * Priority determines the preference given to a network by
- * supplicant when choosing an access point with which
- * to associate
- */
- int mPriority;
-
- /*
- * This is a network that does not broadcast it's SSID, so an
- * SSID-specific probe request must be used for scans.
- */
- char *mHiddenSsid;
-
- /*
- * The set of key management protocols supported by this configuration.
- */
- uint32_t mKeyManagement;
-
- /*
- * The set of security protocols supported by this configuration.
- */
- uint32_t mProtocols;
-
- /*
- * The set of authentication protocols supported by this configuration.
- */
- uint32_t mAuthAlgorithms;
-
- /*
- * The set of pairwise ciphers for WPA supported by this configuration.
- */
- uint32_t mPairwiseCiphers;
-
- /*
- * The set of group ciphers for WPA supported by this configuration.
- */
- uint32_t mGroupCiphers;
-
- /*
- * Set if this Network is enabled
- */
- bool mEnabled;
-
- char *mPropNamespace;
- struct {
- WifiNetworkEnabledProperty *propEnabled;
- WifiNetworkSsidProperty *propSsid;
- WifiNetworkBssidProperty *propBssid;
- WifiNetworkPskProperty *propPsk;
- WifiNetworkWepKeyProperty *propWepKey;
- WifiNetworkDefaultKeyIndexProperty *propDefKeyIdx;
- WifiNetworkPriorityProperty *propPriority;
- WifiNetworkKeyManagementProperty *propKeyManagement;
- WifiNetworkProtocolsProperty *propProtocols;
- WifiNetworkAuthAlgorithmsProperty *propAuthAlgorithms;
- WifiNetworkPairwiseCiphersProperty *propPairwiseCiphers;
- WifiNetworkGroupCiphersProperty *propGroupCiphers;
- WifiNetworkHiddenSsidProperty *propHiddenSsid;
- } mStaticProperties;
-private:
- WifiNetwork();
-
-public:
- WifiNetwork(WifiController *c, Supplicant *suppl, int networkId);
- WifiNetwork(WifiController *c, Supplicant *suppl, const char *data);
-
- virtual ~WifiNetwork();
-
- WifiNetwork *clone();
- int attachProperties(PropertyManager *pm, const char *nsName);
- int detachProperties(PropertyManager *pm, const char *nsName);
-
- int getNetworkId() { return mNetid; }
- const char *getSsid() { return mSsid; }
- const char *getBssid() { return mBssid; }
- const char *getPsk() { return mPsk; }
- const char *getWepKey(int idx) { return mWepKeys[idx]; }
- int getDefaultKeyIndex() { return mDefaultKeyIndex; }
- int getPriority() { return mPriority; }
- const char *getHiddenSsid() { return mHiddenSsid; }
- uint32_t getKeyManagement() { return mKeyManagement; }
- uint32_t getProtocols() { return mProtocols; }
- uint32_t getAuthAlgorithms() { return mAuthAlgorithms; }
- uint32_t getPairwiseCiphers() { return mPairwiseCiphers; }
- uint32_t getGroupCiphers() { return mGroupCiphers; }
- bool getEnabled() { return mEnabled; }
- Controller *getController() { return (Controller *) mController; }
-
- int setEnabled(bool enabled);
- int setSsid(const char *ssid);
- int setBssid(const char *bssid);
- int setPsk(const char *psk);
- int setWepKey(int idx, const char *key);
- int setDefaultKeyIndex(int idx);
- int setPriority(int pri);
- int setHiddenSsid(const char *ssid);
- int setKeyManagement(uint32_t mask);
- int setProtocols(uint32_t mask);
- int setAuthAlgorithms(uint32_t mask);
- int setPairwiseCiphers(uint32_t mask);
- int setGroupCiphers(uint32_t mask);
-
- // XXX:Should this really be exposed?.. meh
- int refresh();
-
-private:
- int parseKeyManagementMask(const char *buffer, uint32_t *mask);
- int parseProtocolsMask(const char *buffer, uint32_t *mask);
- int parseAuthAlgorithmsMask(const char *buffer, uint32_t *mask);
- int parsePairwiseCiphersMask(const char *buffer, uint32_t *mask);
- int parseGroupCiphersMask(const char *buffer, uint32_t *mask);
- void createProperties();
-};
-
-typedef android::List<WifiNetwork *> WifiNetworkCollection;
-
-#endif
diff --git a/nexus/WifiScanner.cpp b/nexus/WifiScanner.cpp
deleted file mode 100644
index 4c956ac..0000000
--- a/nexus/WifiScanner.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-#include <sys/socket.h>
-#include <sys/select.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <errno.h>
-#include <pthread.h>
-
-#define LOG_TAG "WifiScanner"
-#include <cutils/log.h>
-
-#include "WifiScanner.h"
-#include "Supplicant.h"
-
-extern "C" int pthread_cancel(pthread_t thread);
-
-WifiScanner::WifiScanner(Supplicant *suppl, int period) {
- mSuppl = suppl;
- mPeriod = period;
- mActive = false;
-}
-
-int WifiScanner::start(bool active) {
- mActive = active;
-
- if(pipe(mCtrlPipe))
- return -1;
-
- if (pthread_create(&mThread, NULL, WifiScanner::threadStart, this))
- return -1;
- return 0;
-}
-
-void *WifiScanner::threadStart(void *obj) {
- WifiScanner *me = reinterpret_cast<WifiScanner *>(obj);
- me->run();
- pthread_exit(NULL);
- return NULL;
-}
-
-int WifiScanner::stop() {
- char c = 0;
-
- if (write(mCtrlPipe[1], &c, 1) != 1) {
- ALOGE("Error writing to control pipe (%s)", strerror(errno));
- return -1;
- }
-
- void *ret;
- if (pthread_join(mThread, &ret)) {
- ALOGE("Error joining to scanner thread (%s)", strerror(errno));
- return -1;
- }
-
- close(mCtrlPipe[0]);
- close(mCtrlPipe[1]);
- return 0;
-}
-
-void WifiScanner::run() {
- ALOGD("Starting wifi scanner (active = %d)", mActive);
-
- while(1) {
- fd_set read_fds;
- struct timeval to;
- int rc = 0;
-
- to.tv_usec = 0;
- to.tv_sec = mPeriod;
-
- FD_ZERO(&read_fds);
- FD_SET(mCtrlPipe[0], &read_fds);
-
- if (mSuppl->triggerScan(mActive)) {
- ALOGW("Error triggering scan (%s)", strerror(errno));
- }
-
- if ((rc = select(mCtrlPipe[0] + 1, &read_fds, NULL, NULL, &to)) < 0) {
- ALOGE("select failed (%s) - sleeping for one scanner period", strerror(errno));
- sleep(mPeriod);
- continue;
- } else if (!rc) {
- } else if (FD_ISSET(mCtrlPipe[0], &read_fds))
- break;
- } // while
- ALOGD("Stopping wifi scanner");
-}
diff --git a/nexus/WifiScanner.h b/nexus/WifiScanner.h
deleted file mode 100644
index 92822e9..0000000
--- a/nexus/WifiScanner.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _WIFISCANNER_H
-#define _WIFISCANNER_H
-
-#include <pthread.h>
-
-class Supplicant;
-
-class WifiScanner {
- pthread_t mThread;
- int mCtrlPipe[2];
- Supplicant *mSuppl;
- int mPeriod;
- bool mActive;
-
-
-public:
- WifiScanner(Supplicant *suppl, int period);
- virtual ~WifiScanner() {}
-
- int getPeriod() { return mPeriod; }
-
- int start(bool active);
- int stop();
-
-private:
- static void *threadStart(void *obj);
-
- void run();
-};
-
-#endif
diff --git a/nexus/WifiStatusPoller.cpp b/nexus/WifiStatusPoller.cpp
deleted file mode 100644
index 015af5d..0000000
--- a/nexus/WifiStatusPoller.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <sys/socket.h>
-#include <sys/select.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/un.h>
-
-#define LOG_TAG "WifiStatusPoller"
-#include <cutils/log.h>
-
-#include "WifiStatusPoller.h"
-#include "IWifiStatusPollerHandler.h"
-
-
-WifiStatusPoller::WifiStatusPoller(IWifiStatusPollerHandler *handler) :
- mHandlers(handler) {
- mPollingInterval = 5;
- mStarted = false;
-}
-
-int WifiStatusPoller::start() {
-
- if (pipe(mCtrlPipe))
- return -1;
-
- if (pthread_create(&mThread, NULL, WifiStatusPoller::threadStart, this))
- return -1;
-
- return 0;
-}
-
-int WifiStatusPoller::stop() {
- char c = 0;
-
- if (write(mCtrlPipe[1], &c, 1) != 1) {
- ALOGE("Error writing to control pipe (%s)", strerror(errno));
- return -1;
- }
-
- void *ret;
- if (pthread_join(mThread, &ret)) {
- ALOGE("Error joining to listener thread (%s)", strerror(errno));
- return -1;
- }
- close(mCtrlPipe[0]);
- close(mCtrlPipe[1]);
- return 0;
-}
-
-void *WifiStatusPoller::threadStart(void *obj) {
- WifiStatusPoller *me = reinterpret_cast<WifiStatusPoller *>(obj);
-
- me->mStarted = true;
- ALOGD("Starting");
- me->run();
- me->mStarted = false;
- ALOGD("Stopping");
- pthread_exit(NULL);
- return NULL;
-}
-
-void WifiStatusPoller::run() {
-
- while(1) {
- struct timeval to;
- fd_set read_fds;
- int rc = 0;
- int max = 0;
-
- FD_ZERO(&read_fds);
- to.tv_usec = 0;
- to.tv_sec = mPollingInterval;
-
- FD_SET(mCtrlPipe[0], &read_fds);
- max = mCtrlPipe[0];
-
- if ((rc = select(max + 1, &read_fds, NULL, NULL, &to)) < 0) {
- ALOGE("select failed (%s)", strerror(errno));
- sleep(1);
- continue;
- } else if (!rc) {
- mHandlers->onStatusPollInterval();
- }
- if (FD_ISSET(mCtrlPipe[0], &read_fds))
- break;
- }
-}
diff --git a/nexus/WifiStatusPoller.h b/nexus/WifiStatusPoller.h
deleted file mode 100644
index 202bbbf..0000000
--- a/nexus/WifiStatusPoller.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _WIFI_STATUS_POLLER_H
-#define _WIFI_STATUS_POLLER_H
-
-#include <pthread.h>
-
-class IWifiStatusPollerHandler;
-
-class WifiStatusPoller {
- pthread_t mThread;
- int mCtrlPipe[2];
- int mPollingInterval;
- IWifiStatusPollerHandler *mHandlers;
- bool mStarted;
-
-public:
- WifiStatusPoller(IWifiStatusPollerHandler *handler);
- virtual ~WifiStatusPoller() {}
-
- int start();
- int stop();
- bool isStarted() { return mStarted; }
-
- void setPollingInterval(int interval);
- int getPollingInterval() { return mPollingInterval; }
-
-private:
- static void *threadStart(void *obj);
- void run();
-};
-
-#endif
diff --git a/nexus/main.cpp b/nexus/main.cpp
deleted file mode 100644
index 7d2af02..0000000
--- a/nexus/main.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdlib.h>
-#include <errno.h>
-
-#define LOG_TAG "Nexus"
-
-#include "cutils/log.h"
-#include "NetworkManager.h"
-#include "CommandListener.h"
-
-#include "LoopController.h"
-#include "OpenVpnController.h"
-#include "TiwlanWifiController.h"
-
-int main() {
- ALOGI("Nexus version 0.1 firing up");
-
- CommandListener *cl = new CommandListener();
-
- NetworkManager *nm;
- if (!(nm = NetworkManager::Instance())) {
- ALOGE("Unable to create NetworkManager");
- exit (-1);
- };
-
- nm->setBroadcaster((SocketListener *) cl);
-
- nm->attachController(new LoopController(nm->getPropMngr(), nm));
- nm->attachController(new TiwlanWifiController(nm->getPropMngr(), nm, "/system/lib/modules/wlan.ko", "wlan", ""));
-// nm->attachController(new AndroidL2TPVpnController(nm->getPropMngr(), nm));
- nm->attachController(new OpenVpnController(nm->getPropMngr(), nm));
-
-
- if (NetworkManager::Instance()->run()) {
- ALOGE("Unable to Run NetworkManager (%s)", strerror(errno));
- exit (1);
- }
-
- if (cl->startListener()) {
- ALOGE("Unable to start CommandListener (%s)", strerror(errno));
- exit (1);
- }
-
- // XXX: we'll use the main thread for the NetworkManager eventually
-
- while(1) {
- sleep(1000);
- }
-
- ALOGI("Nexus exiting");
- exit(0);
-}
diff --git a/nexus/nexctl.c b/nexus/nexctl.c
deleted file mode 100644
index 8e1d90c..0000000
--- a/nexus/nexctl.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <signal.h>
-#include <errno.h>
-#include <fcntl.h>
-
-#include <sys/socket.h>
-#include <sys/select.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/un.h>
-
-#include <cutils/sockets.h>
-#include <private/android_filesystem_config.h>
-
-static void usage(char *progname);
-static int do_monitor(int sock, int stop_after_cmd);
-static int do_cmd(int sock, int argc, char **argv);
-
-int main(int argc, char **argv) {
- int sock;
-
- if (argc < 2)
- usage(argv[0]);
-
- if ((sock = socket_local_client("nexus",
- ANDROID_SOCKET_NAMESPACE_RESERVED,
- SOCK_STREAM)) < 0) {
- fprintf(stderr, "Error connecting (%s)\n", strerror(errno));
- exit(4);
- }
-
- if (!strcmp(argv[1], "monitor"))
- exit(do_monitor(sock, 0));
- exit(do_cmd(sock, argc, argv));
-}
-
-static int do_cmd(int sock, int argc, char **argv) {
- char final_cmd[255] = { '\0' };
- int i;
-
- for (i = 1; i < argc; i++) {
- char *cmp;
-
- if (!index(argv[i], ' '))
- asprintf(&cmp, "%s%s", argv[i], (i == (argc -1)) ? "" : " ");
- else
- asprintf(&cmp, "\"%s\"%s", argv[i], (i == (argc -1)) ? "" : " ");
-
- strcat(final_cmd, cmp);
- free(cmp);
- }
-
- if (write(sock, final_cmd, strlen(final_cmd) + 1) < 0) {
- perror("write");
- return errno;
- }
-
- return do_monitor(sock, 1);
-}
-
-static int do_monitor(int sock, int stop_after_cmd) {
- char *buffer = malloc(4096);
-
- if (!stop_after_cmd)
- printf("[Connected to Nexus]\n");
-
- while(1) {
- fd_set read_fds;
- struct timeval to;
- int rc = 0;
-
- to.tv_sec = 10;
- to.tv_usec = 0;
-
- FD_ZERO(&read_fds);
- FD_SET(sock, &read_fds);
-
- if ((rc = select(sock +1, &read_fds, NULL, NULL, &to)) < 0) {
- fprintf(stderr, "Error in select (%s)\n", strerror(errno));
- free(buffer);
- return errno;
- } else if (!rc) {
- continue;
- fprintf(stderr, "[TIMEOUT]\n");
- return ETIMEDOUT;
- } else if (FD_ISSET(sock, &read_fds)) {
- memset(buffer, 0, 4096);
- if ((rc = read(sock, buffer, 4096)) <= 0) {
- if (rc == 0)
- fprintf(stderr, "Lost connection to Nexus - did it crash?\n");
- else
- fprintf(stderr, "Error reading data (%s)\n", strerror(errno));
- free(buffer);
- if (rc == 0)
- return ECONNRESET;
- return errno;
- }
-
- int offset = 0;
- int i = 0;
-
- for (i = 0; i < rc; i++) {
- if (buffer[i] == '\0') {
- int code;
- char tmp[4];
-
- strncpy(tmp, buffer + offset, 3);
- tmp[3] = '\0';
- code = atoi(tmp);
-
- printf("%s\n", buffer + offset);
- if (stop_after_cmd) {
- if (code >= 200 && code < 600)
- return 0;
- }
- offset = i + 1;
- }
- }
- }
- }
- free(buffer);
- return 0;
-}
-
-static void usage(char *progname) {
- fprintf(stderr, "Usage: %s <monitor>|<cmd> [arg1] [arg2...]\n", progname);
- exit(1);
-}
-