| /* |
| * Copyright (C) 2012-2013 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include <arpa/inet.h> |
| #include <dirent.h> |
| #include <errno.h> |
| #include <fcntl.h> |
| #include <netinet/in.h> |
| #include <string.h> |
| #include <stdlib.h> |
| #include <sys/socket.h> |
| #include <sys/types.h> |
| |
| #include <sysutils/SocketClient.h> |
| #include <private/android_filesystem_config.h> |
| |
| #include "CommandListener.h" |
| |
| CommandListener::CommandListener(LogBuffer *buf, LogReader * /*reader*/, |
| LogListener * /*swl*/) |
| : FrameworkListener("logd") |
| , mBuf(*buf) { |
| // registerCmd(new ShutdownCmd(buf, writer, swl)); |
| registerCmd(new ClearCmd(buf)); |
| registerCmd(new GetBufSizeCmd(buf)); |
| registerCmd(new GetBufSizeUsedCmd(buf)); |
| } |
| |
| CommandListener::ShutdownCmd::ShutdownCmd(LogBuffer *buf, LogReader *reader, |
| LogListener *swl) |
| : LogCommand("shutdown") |
| , mBuf(*buf) |
| , mReader(*reader) |
| , mSwl(*swl) |
| { } |
| |
| int CommandListener::ShutdownCmd::runCommand(SocketClient * /*cli*/, |
| int /*argc*/, |
| char ** /*argv*/) { |
| mSwl.stopListener(); |
| mReader.stopListener(); |
| exit(0); |
| } |
| |
| CommandListener::ClearCmd::ClearCmd(LogBuffer *buf) |
| : LogCommand("clear") |
| , mBuf(*buf) |
| { } |
| |
| int CommandListener::ClearCmd::runCommand(SocketClient *cli, |
| int argc, char **argv) { |
| if ((cli->getUid() != AID_ROOT) |
| && (cli->getGid() != AID_ROOT) |
| && (cli->getGid() != AID_LOG)) { |
| cli->sendMsg("Permission Denied"); |
| return 0; |
| } |
| |
| if (argc < 2) { |
| cli->sendMsg("Missing Argument"); |
| return 0; |
| } |
| |
| int id = atoi(argv[1]); |
| if ((id < LOG_ID_MIN) || (id >= LOG_ID_MAX)) { |
| cli->sendMsg("Range Error"); |
| return 0; |
| } |
| |
| mBuf.clear((log_id_t) id); |
| cli->sendMsg("success"); |
| return 0; |
| } |
| |
| |
| CommandListener::GetBufSizeCmd::GetBufSizeCmd(LogBuffer *buf) |
| : LogCommand("getLogSize") |
| , mBuf(*buf) |
| { } |
| |
| int CommandListener::GetBufSizeCmd::runCommand(SocketClient *cli, |
| int argc, char **argv) { |
| if (argc < 2) { |
| cli->sendMsg("Missing Argument"); |
| return 0; |
| } |
| |
| int id = atoi(argv[1]); |
| if ((id < LOG_ID_MIN) || (id >= LOG_ID_MAX)) { |
| cli->sendMsg("Range Error"); |
| return 0; |
| } |
| |
| unsigned long size = mBuf.getSize((log_id_t) id); |
| char buf[512]; |
| snprintf(buf, sizeof(buf), "%lu", size); |
| cli->sendMsg(buf); |
| return 0; |
| } |
| |
| CommandListener::GetBufSizeUsedCmd::GetBufSizeUsedCmd(LogBuffer *buf) |
| : LogCommand("getLogSizeUsed") |
| , mBuf(*buf) |
| { } |
| |
| int CommandListener::GetBufSizeUsedCmd::runCommand(SocketClient *cli, |
| int argc, char **argv) { |
| if (argc < 2) { |
| cli->sendMsg("Missing Argument"); |
| return 0; |
| } |
| |
| int id = atoi(argv[1]); |
| if ((id < LOG_ID_MIN) || (id >= LOG_ID_MAX)) { |
| cli->sendMsg("Range Error"); |
| return 0; |
| } |
| |
| unsigned long size = mBuf.getSizeUsed((log_id_t) id); |
| char buf[512]; |
| snprintf(buf, sizeof(buf), "%lu", size); |
| cli->sendMsg(buf); |
| return 0; |
| } |