1/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef _VPN_CONTROLLER_H
18#define _VPN_CONTROLLER_H
19
20#include <netinet/in.h>
21
22#include "Controller.h"
23
24class IControllerHandler;
25
26class VpnController : public Controller {
27    class VpnIntegerProperty : public IntegerProperty {
28    protected:
29        VpnController *mVc;
30    public:
31        VpnIntegerProperty(VpnController *c, const char *name, bool ro,
32                            int elements);
33        virtual ~VpnIntegerProperty() {}
34        virtual int set(int idx, int value) = 0;
35        virtual int get(int idx, int *buffer) = 0;
36    };
37    friend class VpnController::VpnIntegerProperty;
38
39    class VpnStringProperty : public StringProperty {
40    protected:
41        VpnController *mVc;
42    public:
43        VpnStringProperty(VpnController *c, const char *name, bool ro,
44                            int elements);
45        virtual ~VpnStringProperty() {}
46        virtual int set(int idx, const char *value) = 0;
47        virtual int get(int idx, char *buffer, size_t max) = 0;
48    };
49    friend class VpnController::VpnStringProperty;
50
51    class VpnIPV4AddressProperty : public IPV4AddressProperty {
52    protected:
53        VpnController *mVc;
54    public:
55        VpnIPV4AddressProperty(VpnController *c, const char *name, bool ro,
56                          int elements);
57        virtual ~VpnIPV4AddressProperty() {}
58        virtual int set(int idx, struct in_addr *value) = 0;
59        virtual int get(int idx, struct in_addr *buffer) = 0;
60    };
61    friend class VpnController::VpnIPV4AddressProperty;
62
63    class VpnEnabledProperty : public VpnIntegerProperty {
64    public:
65        VpnEnabledProperty(VpnController *c);
66        virtual ~VpnEnabledProperty() {};
67        int set(int idx, int value);
68        int get(int idx, int *buffer);
69    };
70
71    bool           mEnabled;
72    /*
73     * Gateway of the VPN server to connect to
74     */
75    struct in_addr mGateway;
76
77    struct {
78        VpnEnabledProperty *propEnabled;
79    } mStaticProperties;
80
81    struct {
82        IPV4AddressPropertyHelper *propGateway;
83    } mDynamicProperties;
84
85public:
86    VpnController(PropertyManager *propmngr, IControllerHandler *handlers);
87    virtual ~VpnController() {}
88
89    virtual int start();
90    virtual int stop();
91
92protected:
93    virtual int enable() = 0;
94    virtual int disable() = 0;
95};
96
97#endif
98