CommandListener.cpp revision d18304287dbabc7835be771400b85d4ae8b63de6
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#include <stdlib.h> 18d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include <sys/socket.h> 19d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include <sys/types.h> 20d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include <netinet/in.h> 21d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include <arpa/inet.h> 22d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include <dirent.h> 23d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include <errno.h> 24d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 25d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#define LOG_TAG "CommandListener" 26d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include <cutils/log.h> 27d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 28d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include <sysutils/SocketClient.h> 29d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 30d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include "CommandListener.h" 31d18304287dbabc7835be771400b85d4ae8b63de6San Mehat#include "ResponseCode.h" 32d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 33d18304287dbabc7835be771400b85d4ae8b63de6San MehatCommandListener::CommandListener() : 34d18304287dbabc7835be771400b85d4ae8b63de6San Mehat FrameworkListener("netd") { 35d18304287dbabc7835be771400b85d4ae8b63de6San Mehat registerCmd(new ListInterfacesCmd()); 36d18304287dbabc7835be771400b85d4ae8b63de6San Mehat registerCmd(new IpFwdCmd()); 37d18304287dbabc7835be771400b85d4ae8b63de6San Mehat registerCmd(new TetherCmd()); 38d18304287dbabc7835be771400b85d4ae8b63de6San Mehat registerCmd(new NatCmd()); 39d18304287dbabc7835be771400b85d4ae8b63de6San Mehat} 40d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 41d18304287dbabc7835be771400b85d4ae8b63de6San MehatCommandListener::ListInterfacesCmd::ListInterfacesCmd() : 42d18304287dbabc7835be771400b85d4ae8b63de6San Mehat NetdCommand("list_interfaces") { 43d18304287dbabc7835be771400b85d4ae8b63de6San Mehat} 44d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 45d18304287dbabc7835be771400b85d4ae8b63de6San Mehatint CommandListener::ListInterfacesCmd::runCommand(SocketClient *cli, 46d18304287dbabc7835be771400b85d4ae8b63de6San Mehat int argc, char **argv) { 47d18304287dbabc7835be771400b85d4ae8b63de6San Mehat cli->sendMsg(ResponseCode::CommandOkay, "Interfaces listed.", false); 48d18304287dbabc7835be771400b85d4ae8b63de6San Mehat return 0; 49d18304287dbabc7835be771400b85d4ae8b63de6San Mehat} 50d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 51d18304287dbabc7835be771400b85d4ae8b63de6San MehatCommandListener::IpFwdCmd::IpFwdCmd() : 52d18304287dbabc7835be771400b85d4ae8b63de6San Mehat NetdCommand("ipfwd") { 53d18304287dbabc7835be771400b85d4ae8b63de6San Mehat} 54d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 55d18304287dbabc7835be771400b85d4ae8b63de6San Mehatint CommandListener::IpFwdCmd::runCommand(SocketClient *cli, 56d18304287dbabc7835be771400b85d4ae8b63de6San Mehat int argc, char **argv) { 57d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 58d18304287dbabc7835be771400b85d4ae8b63de6San Mehat return 0; 59d18304287dbabc7835be771400b85d4ae8b63de6San Mehat} 60d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 61d18304287dbabc7835be771400b85d4ae8b63de6San MehatCommandListener::TetherCmd::TetherCmd() : 62d18304287dbabc7835be771400b85d4ae8b63de6San Mehat NetdCommand("tether") { 63d18304287dbabc7835be771400b85d4ae8b63de6San Mehat} 64d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 65d18304287dbabc7835be771400b85d4ae8b63de6San Mehatint CommandListener::TetherCmd::runCommand(SocketClient *cli, 66d18304287dbabc7835be771400b85d4ae8b63de6San Mehat int argc, char **argv) { 67d18304287dbabc7835be771400b85d4ae8b63de6San Mehat if (argc < 2) { 68d18304287dbabc7835be771400b85d4ae8b63de6San Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, "Missing argument", false); 69d18304287dbabc7835be771400b85d4ae8b63de6San Mehat return 0; 70d18304287dbabc7835be771400b85d4ae8b63de6San Mehat } 71d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 72d18304287dbabc7835be771400b85d4ae8b63de6San Mehat if (!strcmp(argv[1], "start")) { 73d18304287dbabc7835be771400b85d4ae8b63de6San Mehat } else if (!strcmp(argv[1], "stop")) { 74d18304287dbabc7835be771400b85d4ae8b63de6San Mehat } else if (!strcmp(argv[1], "status")) { 75d18304287dbabc7835be771400b85d4ae8b63de6San Mehat } else if (!strcmp(argv[1], "interface")) { 76d18304287dbabc7835be771400b85d4ae8b63de6San Mehat } else if (!strcmp(argv[1], "dns")) { 77d18304287dbabc7835be771400b85d4ae8b63de6San Mehat } else { 78d18304287dbabc7835be771400b85d4ae8b63de6San Mehat cli->sendMsg(ResponseCode::CommandSyntaxError, "Unknown tether cmd", false); 79d18304287dbabc7835be771400b85d4ae8b63de6San Mehat return 0; 80d18304287dbabc7835be771400b85d4ae8b63de6San Mehat } 81d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 82d18304287dbabc7835be771400b85d4ae8b63de6San Mehat return 0; 83d18304287dbabc7835be771400b85d4ae8b63de6San Mehat} 84d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 85d18304287dbabc7835be771400b85d4ae8b63de6San MehatCommandListener::NatCmd::NatCmd() : 86d18304287dbabc7835be771400b85d4ae8b63de6San Mehat NetdCommand("nat") { 87d18304287dbabc7835be771400b85d4ae8b63de6San Mehat} 88d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 89d18304287dbabc7835be771400b85d4ae8b63de6San Mehatint CommandListener::NatCmd::runCommand(SocketClient *cli, 90d18304287dbabc7835be771400b85d4ae8b63de6San Mehat int argc, char **argv) { 91d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 92d18304287dbabc7835be771400b85d4ae8b63de6San Mehat return 0; 93d18304287dbabc7835be771400b85d4ae8b63de6San Mehat} 94d18304287dbabc7835be771400b85d4ae8b63de6San Mehat 95