/* * Copyright 2016 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. */ #ifndef __VTS_SHELL_DRIVER_H_ #define __VTS_SHELL_DRIVER_H_ #include <string> #include "test/vts/proto/VtsDriverControlMessage.pb.h" using namespace std; namespace android { namespace vts { struct CommandResult { string stdout; string stderr; int exit_code; }; class VtsShellDriver { public: VtsShellDriver() { socket_address_.clear(); } explicit VtsShellDriver(const char* socket_address) : socket_address_(socket_address) {} ~VtsShellDriver() { if (!this->socket_address_.empty()) { Close(); } } // closes the sockets. int Close(); // start shell driver server on unix socket int StartListen(); private: // socket address string socket_address_; /* * execute a given shell command and return the output file descriptor * Please remember to call close_output after usage. */ int ExecShellCommand(const string& command, VtsDriverControlResponseMessage* respond_message); /* * Handles a socket connection. Will execute a received shell command * and send back the output text. */ int HandleShellCommandConnection(int connection_fd); /* * Execute a shell command using popen and return a CommandResult object. */ CommandResult* ExecShellCommandPopen(const string& command); /* * Execute a shell command using nohup and return a CommandResult object. */ CommandResult* ExecShellCommandNohup(const string& command); /* * Helper method to get the size of the given file. */ long GetFileSize(const char* filename); }; } // namespace vts } // namespace android #endif // __VTS_SHELL_DRIVER_H_