1d18304287dbabc7835be771400b85d4ae8b63de6San Mehat/*
2d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * Copyright (C) 2008 The Android Open Source Project
3d18304287dbabc7835be771400b85d4ae8b63de6San Mehat *
4d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * Licensed under the Apache License, Version 2.0 (the "License");
5d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * you may not use this file except in compliance with the License.
6d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * You may obtain a copy of the License at
7d18304287dbabc7835be771400b85d4ae8b63de6San Mehat *
8d18304287dbabc7835be771400b85d4ae8b63de6San Mehat *      http://www.apache.org/licenses/LICENSE-2.0
9d18304287dbabc7835be771400b85d4ae8b63de6San Mehat *
10d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * Unless required by applicable law or agreed to in writing, software
11d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * distributed under the License is distributed on an "AS IS" BASIS,
12d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * See the License for the specific language governing permissions and
14d18304287dbabc7835be771400b85d4ae8b63de6San Mehat * limitations under the License.
15d18304287dbabc7835be771400b85d4ae8b63de6San Mehat */
16d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
17d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#ifndef _COMMANDLISTENER_H__
18d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#define _COMMANDLISTENER_H__
19d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
20d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include <sysutils/FrameworkListener.h>
21e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti#include "utils/RWLock.h"
229ff78fb7da7158f5bd7c86d89a842691820259cfSan Mehat
23d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include "NetdCommand.h"
24e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti#include "NetdConstants.h"
25a0efaece8c05370f201efe099a537ceb014c6fdfSzymon Jakubczak#include "NetworkController.h"
269d10b341a0ba46f108cb96e46691197d778cbc06San Mehat#include "TetherController.h"
279ff78fb7da7158f5bd7c86d89a842691820259cfSan Mehat#include "NatController.h"
28d5573d34c8fac49e16b20cf144486125bf940086San Mehat#include "PppController.h"
294a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall#include "BandwidthController.h"
300031cead820149e2fe3ccb3cc2fe05758a3cb5c2JP Abgrall#include "IdletimerController.h"
312eab1f762badb7ba46b95716e62ea4548a979903Dmitry Shmidt#include "InterfaceController.h"
3289c1e975f0c03997808d35c7be10b244c5309f9fMattias Falk#include "ResolverController.h"
33d8c64026aaae5a9987151b719bd840ec7d68747aJeff Sharkey#include "FirewallController.h"
340da73fcecc30140439f856118056df8908609627Daniel Drown#include "ClatdController.h"
35fbe497fcd808e4317572ad48c42545105309a347Jeff Sharkey#include "StrictController.h"
36d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
377035f228d17e925116b1b64a7c917b3196ab8818Lorenzo Colittinamespace android {
387035f228d17e925116b1b64a7c917b3196ab8818Lorenzo Colittinamespace net {
397035f228d17e925116b1b64a7c917b3196ab8818Lorenzo Colitti
40d18304287dbabc7835be771400b85d4ae8b63de6San Mehatclass CommandListener : public FrameworkListener {
41d18304287dbabc7835be771400b85d4ae8b63de6San Mehatpublic:
42a0efaece8c05370f201efe099a537ceb014c6fdfSzymon Jakubczak    CommandListener();
43d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    virtual ~CommandListener() {}
44d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
45d18304287dbabc7835be771400b85d4ae8b63de6San Mehatprivate:
46ddf2d5bc87fe6de7cae2b73a17dbaf35033565caLorenzo Colitti    void registerLockingCmd(FrameworkCommand *cmd, android::RWLock& lock);
47e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti    void registerLockingCmd(FrameworkCommand *cmd) {
48ddf2d5bc87fe6de7cae2b73a17dbaf35033565caLorenzo Colitti        registerLockingCmd(cmd, android::net::gBigNetdLock);
49e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti    }
50e4d626ea35b7a402388b524e2feafc81e6387697Lorenzo Colitti
515c1b8af16dbbc20c89aaca2f93e725e12b16d055San Mehat    class InterfaceCmd : public NetdCommand {
52d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    public:
535c1b8af16dbbc20c89aaca2f93e725e12b16d055San Mehat        InterfaceCmd();
545c1b8af16dbbc20c89aaca2f93e725e12b16d055San Mehat        virtual ~InterfaceCmd() {}
55d18304287dbabc7835be771400b85d4ae8b63de6San Mehat        int runCommand(SocketClient *c, int argc, char ** argv);
56d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    };
57d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
58d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    class IpFwdCmd : public NetdCommand {
59d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    public:
60d18304287dbabc7835be771400b85d4ae8b63de6San Mehat        IpFwdCmd();
61d18304287dbabc7835be771400b85d4ae8b63de6San Mehat        virtual ~IpFwdCmd() {}
62d18304287dbabc7835be771400b85d4ae8b63de6San Mehat        int runCommand(SocketClient *c, int argc, char ** argv);
63d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    };
64d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
65d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    class TetherCmd : public NetdCommand {
66d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    public:
67d18304287dbabc7835be771400b85d4ae8b63de6San Mehat        TetherCmd();
68d18304287dbabc7835be771400b85d4ae8b63de6San Mehat        virtual ~TetherCmd() {}
69d18304287dbabc7835be771400b85d4ae8b63de6San Mehat        int runCommand(SocketClient *c, int argc, char ** argv);
70d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    };
71d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
72d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    class NatCmd : public NetdCommand {
73d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    public:
74d18304287dbabc7835be771400b85d4ae8b63de6San Mehat        NatCmd();
75d18304287dbabc7835be771400b85d4ae8b63de6San Mehat        virtual ~NatCmd() {}
76d18304287dbabc7835be771400b85d4ae8b63de6San Mehat        int runCommand(SocketClient *c, int argc, char ** argv);
77d18304287dbabc7835be771400b85d4ae8b63de6San Mehat    };
78d5573d34c8fac49e16b20cf144486125bf940086San Mehat
79d5573d34c8fac49e16b20cf144486125bf940086San Mehat    class ListTtysCmd : public NetdCommand {
80d5573d34c8fac49e16b20cf144486125bf940086San Mehat    public:
81d5573d34c8fac49e16b20cf144486125bf940086San Mehat        ListTtysCmd();
82d5573d34c8fac49e16b20cf144486125bf940086San Mehat        virtual ~ListTtysCmd() {}
83d5573d34c8fac49e16b20cf144486125bf940086San Mehat        int runCommand(SocketClient *c, int argc, char ** argv);
84d5573d34c8fac49e16b20cf144486125bf940086San Mehat    };
85d5573d34c8fac49e16b20cf144486125bf940086San Mehat
86d5573d34c8fac49e16b20cf144486125bf940086San Mehat    class PppdCmd : public NetdCommand {
87d5573d34c8fac49e16b20cf144486125bf940086San Mehat    public:
88d5573d34c8fac49e16b20cf144486125bf940086San Mehat        PppdCmd();
89d5573d34c8fac49e16b20cf144486125bf940086San Mehat        virtual ~PppdCmd() {}
90d5573d34c8fac49e16b20cf144486125bf940086San Mehat        int runCommand(SocketClient *c, int argc, char ** argv);
91d5573d34c8fac49e16b20cf144486125bf940086San Mehat    };
921bdac9e98c1ef37ba568b6cf23bfbc09cfe6bf15San Mehat
934a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall    class BandwidthControlCmd : public NetdCommand {
944a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall    public:
954a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall        BandwidthControlCmd();
964a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall        virtual ~BandwidthControlCmd() {}
974a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall        int runCommand(SocketClient *c, int argc, char ** argv);
98db7da58e8d2aa021060098057f944ef754be06e3JP Abgrall    protected:
99db7da58e8d2aa021060098057f944ef754be06e3JP Abgrall        void sendGenericOkFail(SocketClient *cli, int cond);
100db7da58e8d2aa021060098057f944ef754be06e3JP Abgrall        void sendGenericOpFailed(SocketClient *cli, const char *errMsg);
101db7da58e8d2aa021060098057f944ef754be06e3JP Abgrall        void sendGenericSyntaxError(SocketClient *cli, const char *usageMsg);
1024a5f5ca3c9e07fc3e6feca2afde07f41a8a64f11JP Abgrall    };
1033c8cc74f81d0f81204bd827076889bb51143dff8Robert Greenwalt
1040031cead820149e2fe3ccb3cc2fe05758a3cb5c2JP Abgrall    class IdletimerControlCmd : public NetdCommand {
1050031cead820149e2fe3ccb3cc2fe05758a3cb5c2JP Abgrall    public:
1060031cead820149e2fe3ccb3cc2fe05758a3cb5c2JP Abgrall        IdletimerControlCmd();
1070031cead820149e2fe3ccb3cc2fe05758a3cb5c2JP Abgrall        virtual ~IdletimerControlCmd() {}
1080031cead820149e2fe3ccb3cc2fe05758a3cb5c2JP Abgrall        int runCommand(SocketClient *c, int argc, char ** argv);
1090031cead820149e2fe3ccb3cc2fe05758a3cb5c2JP Abgrall    };
1100031cead820149e2fe3ccb3cc2fe05758a3cb5c2JP Abgrall
11189c1e975f0c03997808d35c7be10b244c5309f9fMattias Falk    class ResolverCmd : public NetdCommand {
11289c1e975f0c03997808d35c7be10b244c5309f9fMattias Falk    public:
11389c1e975f0c03997808d35c7be10b244c5309f9fMattias Falk        ResolverCmd();
11489c1e975f0c03997808d35c7be10b244c5309f9fMattias Falk        virtual ~ResolverCmd() {}
11589c1e975f0c03997808d35c7be10b244c5309f9fMattias Falk        int runCommand(SocketClient *c, int argc, char ** argv);
11612f6baf16328cdeea8f079616c2c44ac28f82496Pierre Imai
11712f6baf16328cdeea8f079616c2c44ac28f82496Pierre Imai    private:
11812f6baf16328cdeea8f079616c2c44ac28f82496Pierre Imai        bool parseAndExecuteSetNetDns(int netId, int argc, const char** argv);
11989c1e975f0c03997808d35c7be10b244c5309f9fMattias Falk    };
120d8c64026aaae5a9987151b719bd840ec7d68747aJeff Sharkey
121d8c64026aaae5a9987151b719bd840ec7d68747aJeff Sharkey    class FirewallCmd: public NetdCommand {
122d8c64026aaae5a9987151b719bd840ec7d68747aJeff Sharkey    public:
123d8c64026aaae5a9987151b719bd840ec7d68747aJeff Sharkey        FirewallCmd();
124d8c64026aaae5a9987151b719bd840ec7d68747aJeff Sharkey        virtual ~FirewallCmd() {}
125d8c64026aaae5a9987151b719bd840ec7d68747aJeff Sharkey        int runCommand(SocketClient *c, int argc, char ** argv);
126d8c64026aaae5a9987151b719bd840ec7d68747aJeff Sharkey    protected:
127d8c64026aaae5a9987151b719bd840ec7d68747aJeff Sharkey        int sendGenericOkFail(SocketClient *cli, int cond);
128d8c64026aaae5a9987151b719bd840ec7d68747aJeff Sharkey        static FirewallRule parseRule(const char* arg);
129390e4ea8106f9e741bc80fb962aaee94d5b28cbbAmith Yamasani        static FirewallType parseFirewallType(const char* arg);
1301cdfa9adfa584029cb6d9ac13a2896786001b3a1Xiaohui Chen        static ChildChain parseChildChain(const char* arg);
131d8c64026aaae5a9987151b719bd840ec7d68747aJeff Sharkey    };
1320da73fcecc30140439f856118056df8908609627Daniel Drown
1330da73fcecc30140439f856118056df8908609627Daniel Drown    class ClatdCmd : public NetdCommand {
1340da73fcecc30140439f856118056df8908609627Daniel Drown    public:
1350da73fcecc30140439f856118056df8908609627Daniel Drown        ClatdCmd();
1360da73fcecc30140439f856118056df8908609627Daniel Drown        virtual ~ClatdCmd() {}
1370da73fcecc30140439f856118056df8908609627Daniel Drown        int runCommand(SocketClient *c, int argc, char ** argv);
1380da73fcecc30140439f856118056df8908609627Daniel Drown    };
139d736d4b327bf35afc59b5cec110491fcdb9e2cbbSreeram Ramachandran
140fbe497fcd808e4317572ad48c42545105309a347Jeff Sharkey    class StrictCmd : public NetdCommand {
141fbe497fcd808e4317572ad48c42545105309a347Jeff Sharkey    public:
142fbe497fcd808e4317572ad48c42545105309a347Jeff Sharkey        StrictCmd();
143fbe497fcd808e4317572ad48c42545105309a347Jeff Sharkey        virtual ~StrictCmd() {}
144fbe497fcd808e4317572ad48c42545105309a347Jeff Sharkey        int runCommand(SocketClient *c, int argc, char ** argv);
145fbe497fcd808e4317572ad48c42545105309a347Jeff Sharkey    protected:
146fbe497fcd808e4317572ad48c42545105309a347Jeff Sharkey        int sendGenericOkFail(SocketClient *cli, int cond);
147fbe497fcd808e4317572ad48c42545105309a347Jeff Sharkey        static StrictPenalty parsePenalty(const char* arg);
148fbe497fcd808e4317572ad48c42545105309a347Jeff Sharkey    };
149fbe497fcd808e4317572ad48c42545105309a347Jeff Sharkey
1505c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran    class NetworkCommand : public NetdCommand {
151d736d4b327bf35afc59b5cec110491fcdb9e2cbbSreeram Ramachandran    public:
1525c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran        NetworkCommand();
1535c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran        virtual ~NetworkCommand() {}
1545c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran        int runCommand(SocketClient* client, int argc, char** argv);
155d736d4b327bf35afc59b5cec110491fcdb9e2cbbSreeram Ramachandran    private:
156d736d4b327bf35afc59b5cec110491fcdb9e2cbbSreeram Ramachandran        int syntaxError(SocketClient* cli, const char* message);
157f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran        int operationError(SocketClient* cli, const char* message, int ret);
1585c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran        int success(SocketClient* cli);
159d736d4b327bf35afc59b5cec110491fcdb9e2cbbSreeram Ramachandran    };
160d18304287dbabc7835be771400b85d4ae8b63de6San Mehat};
161d18304287dbabc7835be771400b85d4ae8b63de6San Mehat
1627035f228d17e925116b1b64a7c917b3196ab8818Lorenzo Colitti}  // namespace net
1637035f228d17e925116b1b64a7c917b3196ab8818Lorenzo Colitti}  // namespace android
1647035f228d17e925116b1b64a7c917b3196ab8818Lorenzo Colitti
165d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#endif
166