#include "ShellExecPlugin.h" #include "ISmsTransceiver.h" #include "Sms.h" #include "Util.h" #include "ConfigFile.h" #include ShellExecPlugin::ShellExecPlugin(std::map args) : Plugin("", "") { _command = args["trigger"]; _exeCommand = args["cmd"]; _description = std::string("ShellExec: ")+_exeCommand; std::string allowParms = args["allowparms"]; std::string returnOutput = args["returnoutput"]; if (_command == "" || _exeCommand == "" || allowParms == "" || returnOutput == "") throw std::runtime_error("Usage: plugin = shellexec trigger=; cmd=; allowparms=<0|1>; returnoutput=<0|1>"); _allowParameters = ( ConfigHelper::StringToInt(allowParms) == 1); _returnOutput = ( ConfigHelper::StringToInt(returnOutput) == 1); } void ShellExecPlugin::Execute(ISmsTransceiver& modem, SMS& sms) { std::string command = _exeCommand; if (_allowParameters) { std::string parameters = sms.ExtractParameters(); parameters = Util::str_replace(parameters, "||"); parameters = Util::str_replace(parameters, "&&"); parameters = Util::str_replace(parameters, ";"); parameters = Util::str_replace(parameters, "'"); parameters = Util::str_replace(parameters, "\""); command += " "; command += parameters; } std::string output; std::string* out_p = 0; if (_returnOutput) out_p = &output; int retval = Util::my_system( command.c_str(), out_p ); std::string message; if (retval == -1) message = "Error"; else { if (_returnOutput) message = output; else message = "OK"; } modem.SendSms(sms.GetSender(), message, false ); }