blob: d9ee971c9fa29efaeb43ba3923b8c4a94c1f8209 [file] [log] [blame]
San Mehatdc266072009-05-06 11:16:52 -07001/*
San Mehat8d3fc3f2009-05-12 14:36:32 -07002 * Copyright (C) ErrorCode::CommandOkay8 The Android Open Source Project
San Mehatdc266072009-05-06 11:16:52 -07003 *
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#include <stdlib.h>
17#include <errno.h>
18
19#define LOG_TAG "CommandListener"
20#include <cutils/log.h>
21
San Mehat1441e762009-05-07 11:37:10 -070022#include <sysutils/SocketClient.h>
23
San Mehatdc266072009-05-06 11:16:52 -070024#include "CommandListener.h"
25#include "Controller.h"
26#include "NetworkManager.h"
27#include "WifiController.h"
San Mehat8d3fc3f2009-05-12 14:36:32 -070028#include "ErrorCode.h"
San Mehatdc266072009-05-06 11:16:52 -070029
San Mehat1441e762009-05-07 11:37:10 -070030CommandListener::CommandListener() :
San Mehatdc266072009-05-06 11:16:52 -070031 FrameworkListener("nexus") {
San Mehat1441e762009-05-07 11:37:10 -070032 registerCmd(new WifiEnableCmd());
33 registerCmd(new WifiDisableCmd());
34 registerCmd(new WifiScanCmd());
35 registerCmd(new WifiScanResultsCmd());
San Mehat82a21162009-05-12 17:26:28 -070036 registerCmd(new WifiListNetworksCmd());
37 registerCmd(new WifiAddNetworkCmd());
38 registerCmd(new WifiRemoveNetworkCmd());
39 registerCmd(new WifiSetVarCmd());
40 registerCmd(new WifiGetVarCmd());
San Mehatdc266072009-05-06 11:16:52 -070041
San Mehat1441e762009-05-07 11:37:10 -070042 registerCmd(new VpnEnableCmd());
43 registerCmd(new VpnDisableCmd());
San Mehatdc266072009-05-06 11:16:52 -070044}
45
46/* -------------
47 * Wifi Commands
48 * ------------ */
49
San Mehat1441e762009-05-07 11:37:10 -070050CommandListener::WifiEnableCmd::WifiEnableCmd() :
51 NexusCommand("wifi_enable") {
San Mehatdc266072009-05-06 11:16:52 -070052}
53
San Mehat1441e762009-05-07 11:37:10 -070054int CommandListener::WifiEnableCmd::runCommand(SocketClient *cli, char *data) {
55 Controller *c = NetworkManager::Instance()->findController("WIFI");
San Mehatdc266072009-05-06 11:16:52 -070056
San Mehat69772dc2009-05-10 09:27:07 -070057 if (c->enable())
San Mehat8d3fc3f2009-05-12 14:36:32 -070058 cli->sendMsg(ErrorCode::OperationFailed, "Failed to enable wifi", true);
San Mehat69772dc2009-05-10 09:27:07 -070059 else
San Mehat8d3fc3f2009-05-12 14:36:32 -070060 cli->sendMsg(ErrorCode::CommandOkay, "Wifi Enabled", false);
San Mehatdc266072009-05-06 11:16:52 -070061 return 0;
62}
63
San Mehat1441e762009-05-07 11:37:10 -070064CommandListener::WifiDisableCmd::WifiDisableCmd() :
65 NexusCommand("wifi_disable") {
San Mehatdc266072009-05-06 11:16:52 -070066}
67
San Mehat1441e762009-05-07 11:37:10 -070068int CommandListener::WifiDisableCmd::runCommand(SocketClient *cli, char *data) {
69 Controller *c = NetworkManager::Instance()->findController("WIFI");
San Mehatdc266072009-05-06 11:16:52 -070070
San Mehat69772dc2009-05-10 09:27:07 -070071 if (c->disable())
San Mehat8d3fc3f2009-05-12 14:36:32 -070072 cli->sendMsg(ErrorCode::OperationFailed, "Failed to disable wifi", true);
San Mehat69772dc2009-05-10 09:27:07 -070073 else
San Mehat8d3fc3f2009-05-12 14:36:32 -070074 cli->sendMsg(ErrorCode::CommandOkay, "Wifi Disabled", false);
San Mehatdc266072009-05-06 11:16:52 -070075 return 0;
76}
77
San Mehat82a21162009-05-12 17:26:28 -070078CommandListener::WifiAddNetworkCmd::WifiAddNetworkCmd() :
79 NexusCommand("wifi_add_network") {
80}
81
82int CommandListener::WifiAddNetworkCmd::runCommand(SocketClient *cli, char *data) {
83 NetworkManager *nm = NetworkManager::Instance();
84 WifiController *wc = (WifiController *) nm->findController("WIFI");
85 int networkId;
86
87 if ((networkId = wc->addNetwork()) < 0)
88 cli->sendMsg(ErrorCode::OperationFailed, "Failed to add network", true);
89 else {
90 char tmp[128];
91 sprintf(tmp, "Added network id %d.", networkId);
92 cli->sendMsg(ErrorCode::CommandOkay, tmp, false);
93 }
94 return 0;
95}
96
97CommandListener::WifiRemoveNetworkCmd::WifiRemoveNetworkCmd() :
98 NexusCommand("wifi_remove_network") {
99}
100
101int CommandListener::WifiRemoveNetworkCmd::runCommand(SocketClient *cli, char *data) {
102 NetworkManager *nm = NetworkManager::Instance();
103 WifiController *wc = (WifiController *) nm->findController("WIFI");
104
105 if (wc->removeNetwork(atoi(data)))
106 cli->sendMsg(ErrorCode::OperationFailed, "Failed to remove network", true);
107 else {
108 cli->sendMsg(ErrorCode::CommandOkay, "Network removed.", false);
109 }
110 return 0;
111}
112
San Mehat1441e762009-05-07 11:37:10 -0700113CommandListener::WifiScanCmd::WifiScanCmd() :
114 NexusCommand("wifi_scan") {
San Mehatdc266072009-05-06 11:16:52 -0700115}
116
San Mehat1441e762009-05-07 11:37:10 -0700117int CommandListener::WifiScanCmd::runCommand(SocketClient *cli, char *data) {
San Mehat1441e762009-05-07 11:37:10 -0700118 WifiController *wc = (WifiController *) NetworkManager::Instance()->findController("WIFI");
119
San Mehat8d3fc3f2009-05-12 14:36:32 -0700120 if (wc->setScanMode(atoi(data)))
121 cli->sendMsg(ErrorCode::OperationFailed, "Failed to set scan mode", true);
San Mehat69772dc2009-05-10 09:27:07 -0700122 else
San Mehat8d3fc3f2009-05-12 14:36:32 -0700123 cli->sendMsg(ErrorCode::CommandOkay, "Scan mode set", false);
San Mehat69772dc2009-05-10 09:27:07 -0700124
San Mehat1441e762009-05-07 11:37:10 -0700125 return 0;
126}
127
128CommandListener::WifiScanResultsCmd::WifiScanResultsCmd() :
129 NexusCommand("wifi_scan_results") {
130}
131
132int CommandListener::WifiScanResultsCmd::runCommand(SocketClient *cli, char *data) {
133 NetworkManager *nm = NetworkManager::Instance();
San Mehat1441e762009-05-07 11:37:10 -0700134 WifiController *wc = (WifiController *) nm->findController("WIFI");
135
136 ScanResultCollection *src = wc->createScanResults();
137 ScanResultCollection::iterator it;
138 char buffer[256];
139
140 for(it = src->begin(); it != src->end(); ++it) {
San Mehat69772dc2009-05-10 09:27:07 -0700141 sprintf(buffer, "%s:%u:%d:%s:%s",
San Mehat1441e762009-05-07 11:37:10 -0700142 (*it)->getBssid(), (*it)->getFreq(), (*it)->getLevel(),
143 (*it)->getFlags(), (*it)->getSsid());
San Mehat82a21162009-05-12 17:26:28 -0700144 cli->sendMsg(ErrorCode::WifiScanResult, buffer, false);
San Mehat1441e762009-05-07 11:37:10 -0700145 delete (*it);
146 it = src->erase(it);
147 }
148
149 delete src;
San Mehat8d3fc3f2009-05-12 14:36:32 -0700150 cli->sendMsg(ErrorCode::CommandOkay, "Scan results complete", false);
San Mehatdc266072009-05-06 11:16:52 -0700151 return 0;
152}
153
San Mehat82a21162009-05-12 17:26:28 -0700154CommandListener::WifiListNetworksCmd::WifiListNetworksCmd() :
155 NexusCommand("wifi_list_networks") {
156}
157
158int CommandListener::WifiListNetworksCmd::runCommand(SocketClient *cli, char *data) {
159 NetworkManager *nm = NetworkManager::Instance();
160 WifiController *wc = (WifiController *) nm->findController("WIFI");
161
162 WifiNetworkCollection *src = wc->createNetworkList();
163 WifiNetworkCollection::iterator it;
164 char buffer[256];
165
166 for(it = src->begin(); it != src->end(); ++it) {
167 sprintf(buffer, "%d:%s", (*it)->getNetworkId(), (*it)->getSsid());
168 cli->sendMsg(ErrorCode::WifiNetworkList, buffer, false);
169 delete (*it);
170 it = src->erase(it);
171 }
172
173 delete src;
174 cli->sendMsg(ErrorCode::CommandOkay, "Network listing complete.", false);
175 return 0;
176}
177
178CommandListener::WifiSetVarCmd::WifiSetVarCmd() :
179 NexusCommand("wifi_setvar") {
180}
181
182int CommandListener::WifiSetVarCmd::runCommand(SocketClient *cli, char *data) {
183 WifiController *wc = (WifiController *) NetworkManager::Instance()->findController("WIFI");
184
185 char *bword;
186 char *last;
187 char varname[32];
188 char val[250];
189 int networkId;
190
191 if (!(bword = strtok_r(data, ":", &last)))
192 goto out_inval;
193
194 networkId = atoi(bword);
195
196 if (!(bword = strtok_r(NULL, ":", &last)))
197 goto out_inval;
198
199 strncpy(varname, bword, sizeof(varname));
200
201 if (!(bword = strtok_r(NULL, ":", &last)))
202 goto out_inval;
203
204 strncpy(val, bword, sizeof(val));
205
206 LOGD("Network id %d, varname '%s', value '%s'", networkId, varname, val);
207
208 return 0;
209
210out_inval:
211 errno = EINVAL;
212 cli->sendMsg(ErrorCode::CommandParameterError, "Failed to set variable.", true);
213 return 0;
214}
215
216CommandListener::WifiGetVarCmd::WifiGetVarCmd() :
217 NexusCommand("wifi_getvar") {
218}
219
220int CommandListener::WifiGetVarCmd::runCommand(SocketClient *cli, char *data) {
221 WifiController *wc = (WifiController *) NetworkManager::Instance()->findController("WIFI");
222
223 char *bword;
224 char *last;
225 char varname[32];
226 int networkId;
227
228 if (!(bword = strtok_r(data, ":", &last)))
229 goto out_inval;
230
231 networkId = atoi(bword);
232
233 if (!(bword = strtok_r(NULL, ":", &last)))
234 goto out_inval;
235
236 strncpy(varname, bword, sizeof(varname));
237
238 LOGD("networkId = %d, varname '%s'", networkId, varname);
239
240 return 0;
241out_inval:
242 errno = EINVAL;
243 cli->sendMsg(ErrorCode::CommandParameterError, "Failed to get variable.", true);
244 return 0;
245}
246
San Mehatdc266072009-05-06 11:16:52 -0700247/* ------------
248 * Vpn Commands
249 * ------------ */
San Mehat1441e762009-05-07 11:37:10 -0700250CommandListener::VpnEnableCmd::VpnEnableCmd() :
251 NexusCommand("vpn_enable") {
San Mehatdc266072009-05-06 11:16:52 -0700252}
253
San Mehat1441e762009-05-07 11:37:10 -0700254int CommandListener::VpnEnableCmd::runCommand(SocketClient *cli, char *data) {
255 Controller *c = NetworkManager::Instance()->findController("VPN");
San Mehatdc266072009-05-06 11:16:52 -0700256
San Mehat69772dc2009-05-10 09:27:07 -0700257 if (c->enable())
San Mehat8d3fc3f2009-05-12 14:36:32 -0700258 cli->sendMsg(ErrorCode::OperationFailed, "Failed to enable VPN", true);
San Mehat69772dc2009-05-10 09:27:07 -0700259 else
San Mehat8d3fc3f2009-05-12 14:36:32 -0700260 cli->sendMsg(ErrorCode::CommandOkay, "VPN enabled", false);
San Mehatdc266072009-05-06 11:16:52 -0700261 return 0;
262}
263
San Mehat1441e762009-05-07 11:37:10 -0700264CommandListener::VpnDisableCmd::VpnDisableCmd() :
265 NexusCommand("vpn_disable") {
San Mehatdc266072009-05-06 11:16:52 -0700266}
267
San Mehat1441e762009-05-07 11:37:10 -0700268int CommandListener::VpnDisableCmd::runCommand(SocketClient *cli, char *data) {
269 Controller *c = NetworkManager::Instance()->findController("VPN");
San Mehatdc266072009-05-06 11:16:52 -0700270
San Mehat69772dc2009-05-10 09:27:07 -0700271 if (c->disable())
San Mehat8d3fc3f2009-05-12 14:36:32 -0700272 cli->sendMsg(ErrorCode::OperationFailed, "Failed to disable VPN", true);
San Mehat69772dc2009-05-10 09:27:07 -0700273 else
San Mehat8d3fc3f2009-05-12 14:36:32 -0700274 cli->sendMsg(ErrorCode::CommandOkay, "VPN disabled", false);
San Mehatdc266072009-05-06 11:16:52 -0700275 return 0;
276}