1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 2008 The Android Open Source Project
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Licensed under the Apache License, Version 2.0 (the "License");
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * you may not use this file except in compliance with the License.
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * You may obtain a copy of the License at
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *      http://www.apache.org/licenses/LICENSE-2.0
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Unless required by applicable law or agreed to in writing, software
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distributed under the License is distributed on an "AS IS" BASIS,
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * See the License for the specific language governing permissions and
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * limitations under the License.
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef _COMMANDLISTENER_H__
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _COMMANDLISTENER_H__
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <sysutils/FrameworkListener.h>
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "NetdCommand.h"
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "NetworkController.h"
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "TetherController.h"
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "NatController.h"
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "PppController.h"
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "SoftapController.h"
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "BandwidthController.h"
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "IdletimerController.h"
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "InterfaceController.h"
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "ResolverController.h"
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "FirewallController.h"
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "ClatdController.h"
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass CommandListener : public FrameworkListener {
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    static TetherController *sTetherCtrl;
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    static NatController *sNatCtrl;
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    static PppController *sPppCtrl;
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    static SoftapController *sSoftapCtrl;
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    static BandwidthController *sBandwidthCtrl;
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    static IdletimerController *sIdletimerCtrl;
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    static InterfaceController *sInterfaceCtrl;
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    static ResolverController *sResolverCtrl;
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    static FirewallController *sFirewallCtrl;
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    static ClatdController *sClatdCtrl;
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpublic:
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    static NetworkController *sNetCtrl;
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    CommandListener();
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    virtual ~CommandListener() {}
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgprivate:
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    class SoftapCmd : public NetdCommand {
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public:
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        SoftapCmd();
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        virtual ~SoftapCmd() {}
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int runCommand(SocketClient *c, int argc, char ** argv);
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    };
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    class InterfaceCmd : public NetdCommand {
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public:
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        InterfaceCmd();
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        virtual ~InterfaceCmd() {}
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int runCommand(SocketClient *c, int argc, char ** argv);
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    };
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    class IpFwdCmd : public NetdCommand {
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public:
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        IpFwdCmd();
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        virtual ~IpFwdCmd() {}
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int runCommand(SocketClient *c, int argc, char ** argv);
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    };
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    class TetherCmd : public NetdCommand {
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public:
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        TetherCmd();
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        virtual ~TetherCmd() {}
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int runCommand(SocketClient *c, int argc, char ** argv);
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    };
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    class NatCmd : public NetdCommand {
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public:
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        NatCmd();
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        virtual ~NatCmd() {}
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int runCommand(SocketClient *c, int argc, char ** argv);
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    };
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    class ListTtysCmd : public NetdCommand {
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public:
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        ListTtysCmd();
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        virtual ~ListTtysCmd() {}
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int runCommand(SocketClient *c, int argc, char ** argv);
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    };
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    class PppdCmd : public NetdCommand {
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public:
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PppdCmd();
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        virtual ~PppdCmd() {}
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int runCommand(SocketClient *c, int argc, char ** argv);
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    };
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    class BandwidthControlCmd : public NetdCommand {
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public:
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        BandwidthControlCmd();
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        virtual ~BandwidthControlCmd() {}
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int runCommand(SocketClient *c, int argc, char ** argv);
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    protected:
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        void sendGenericOkFail(SocketClient *cli, int cond);
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        void sendGenericOpFailed(SocketClient *cli, const char *errMsg);
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        void sendGenericSyntaxError(SocketClient *cli, const char *usageMsg);
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    };
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    class IdletimerControlCmd : public NetdCommand {
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public:
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        IdletimerControlCmd();
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        virtual ~IdletimerControlCmd() {}
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int runCommand(SocketClient *c, int argc, char ** argv);
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    };
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    class ResolverCmd : public NetdCommand {
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public:
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        ResolverCmd();
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        virtual ~ResolverCmd() {}
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int runCommand(SocketClient *c, int argc, char ** argv);
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    };
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    class FirewallCmd: public NetdCommand {
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public:
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        FirewallCmd();
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        virtual ~FirewallCmd() {}
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int runCommand(SocketClient *c, int argc, char ** argv);
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    protected:
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int sendGenericOkFail(SocketClient *cli, int cond);
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        static FirewallRule parseRule(const char* arg);
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    };
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    class ClatdCmd : public NetdCommand {
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public:
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        ClatdCmd();
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        virtual ~ClatdCmd() {}
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int runCommand(SocketClient *c, int argc, char ** argv);
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    };
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    class NetworkCommand : public NetdCommand {
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public:
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        NetworkCommand();
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        virtual ~NetworkCommand() {}
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int runCommand(SocketClient* client, int argc, char** argv);
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    private:
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int syntaxError(SocketClient* cli, const char* message);
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int operationError(SocketClient* cli, const char* message, int ret);
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        int success(SocketClient* cli);
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    };
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org