From: Jason Cooper <cyanogen at lakedaemon.net> Signed-off-by: Jason Cooper <cyanogen at lakedaemon.net> --- nexus/Android.mk | 1 + nexus/OpenConnectController.cpp | 89 +++++++++++++++++++++++++++++++++++++++ nexus/OpenConnectController.h | 60 ++++++++++++++++++++++++++ nexus/main.cpp | 2 + 4 files changed, 152 insertions(+), 0 deletions(-) create mode 100644 nexus/OpenConnectController.cpp create mode 100644 nexus/OpenConnectController.h diff --git a/nexus/Android.mk b/nexus/Android.mk index f9f7110..7403066 100644 --- a/nexus/Android.mk +++ b/nexus/Android.mk @@ -34,6 +34,7 @@ LOCAL_SRC_FILES:= \ SupplicantDisconnectedEvent.cpp \ SupplicantStatus.cpp \ OpenVpnController.cpp \ + OpenConnectController.cpp \ VpnController.cpp \ LoopController.cpp \ DhcpClient.cpp DhcpListener.cpp \ diff --git a/nexus/OpenConnectController.cpp b/nexus/OpenConnectController.cpp new file mode 100644 index 0000000..c8012c5 --- /dev/null +++ b/nexus/OpenConnectController.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2011 Jason Cooper <cyanogen at lakedaemon.net> + * + * 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. + */ + +/* + * copied from OpenVpnController.cpp which was (same license): + * + * 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 "OpenConnectController" +#include <cutils/log.h> +#include <cutils/properties.h> + +#include <sysutils/ServiceManager.h> + +#include "OpenConnectController.h" +#include "PropertyManager.h" + +#define DAEMON_PROP_NAME "vpn.openconnect.status" +#define DAEMON_CONFIG_FILE "/data/misc/openconnect/openconnect.conf" + +OpenConnectController::OpenConnectController(PropertyManager *propmngr, + IControllerHandler *handlers) : + VpnController(propmngr, handlers) { + mServiceManager = new ServiceManager(); +} + +OpenConnectController::~OpenConnectController() { + delete mServiceManager; +} + +int OpenConnectController::start() { + return VpnController::start(); +} + +int OpenConnectController::stop() { + return VpnController::stop(); +} + +int OpenConnectController::enable() { + char svc[PROPERTY_VALUE_MAX]; + char tmp[64]; + + if (!mPropMngr->get("vpn.gateway", tmp, sizeof(tmp))) { + LOGE("Error reading property 'vpn.gateway' (%s)", strerror(errno)); + return -1; + } + snprintf(svc, sizeof(svc), "openconnect: https://%s", tmp); + + if (mServiceManager->start(svc)) + return -1; + + return 0; +} + +int OpenConnectController::disable() { + if (mServiceManager->stop("openconnect")) + return -1; + return 0; +} diff --git a/nexus/OpenConnectController.h b/nexus/OpenConnectController.h new file mode 100644 index 0000000..5906038 --- /dev/null +++ b/nexus/OpenConnectController.h @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2011 Jason Cooper <cyanogen at lakedaemon.net> + * + * 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. + */ + +/* + * copied from OpenVpnController.h which was (same license): + * + * 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_CONNECT_CONTROLLER_H +#define _OPEN_CONNECT_CONTROLLER_H + +#include "PropertyManager.h" +#include "VpnController.h" + +class ServiceManager; +class IControllerHandler; + +class OpenConnectController : public VpnController { +private: + ServiceManager *mServiceManager; + +public: + OpenConnectController(PropertyManager *propmngr, IControllerHandler *handlers); + virtual ~OpenConnectController(); + + int start(); + int stop(); + +private: + int enable(); + int disable(); +}; + +#endif diff --git a/nexus/main.cpp b/nexus/main.cpp index 936d33f..97afcbf 100644 --- a/nexus/main.cpp +++ b/nexus/main.cpp @@ -25,6 +25,7 @@ #include "LoopController.h" #include "OpenVpnController.h" +#include "OpenConnectController.h" #include "TiwlanWifiController.h" int main() { @@ -44,6 +45,7 @@ int main() { 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)); + nm->attachController(new OpenConnectController(nm->getPropMngr(), nm)); if (NetworkManager::Instance()->run()) { -- 1.7.0.4