| /* |
| * 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 |