diff --git a/RemoteCommand.cpp b/RemoteCommand.cpp index 143895c..20db947 100644 --- a/RemoteCommand.cpp +++ b/RemoteCommand.cpp @@ -22,6 +22,10 @@ #include "Log.h" #include +#include +#include + +const unsigned int BUFFER_LENGTH = 100U; int main(int argc, char** argv) { @@ -67,6 +71,9 @@ int CRemoteCommand::send(const std::string& command) { sockaddr_storage addr; unsigned int addrLen; + char buffer[BUFFER_LENGTH]; + int retStatus = 0; + if (CUDPSocket::lookup("127.0.0.1", m_port, addr, addrLen) != 0) { LogError("Unable to resolve the address of the host"); return 1; @@ -86,7 +93,19 @@ int CRemoteCommand::send(const std::string& command) LogMessage("Command sent: \"%s\" to port: %u", command.c_str(), m_port); + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + + int len = socket.read((unsigned char*)&buffer[0], BUFFER_LENGTH, addr, addrLen); + if (len > 0) { + buffer[len] = '\0'; + LogMessage("%s", buffer); + } + else + { + retStatus = 1; + } + socket.close(); - return 0; + return retStatus; } diff --git a/RemoteControl.cpp b/RemoteControl.cpp index b42718f..5274829 100644 --- a/RemoteControl.cpp +++ b/RemoteControl.cpp @@ -55,7 +55,8 @@ REMOTE_COMMAND CRemoteControl::getCommand() m_args.clear(); char command[BUFFER_LENGTH]; - char buffer[BUFFER_LENGTH]; + char buffer[BUFFER_LENGTH * 2]; + std::string replyStr = "OK"; sockaddr_storage address; unsigned int addrlen; int ret = m_socket.read((unsigned char*)buffer, BUFFER_LENGTH, address, addrlen); @@ -89,6 +90,8 @@ REMOTE_COMMAND CRemoteControl::getCommand() m_command = RCD_MODE_P25; else if (m_args.at(1U) == "nxdn") m_command = RCD_MODE_NXDN; + else + replyStr = "KO"; } else if (m_args.at(0U) == "enable" && m_args.size() >= ENABLE_ARGS) { if (m_args.at(1U) == "dstar") m_command = RCD_ENABLE_DSTAR; @@ -102,6 +105,8 @@ REMOTE_COMMAND CRemoteControl::getCommand() m_command = RCD_ENABLE_NXDN; else if (m_args.at(1U) == "fm") m_command = RCD_ENABLE_FM; + else + replyStr = "KO"; } else if (m_args.at(0U) == "disable" && m_args.size() >= DISABLE_ARGS) { if (m_args.at(1U) == "dstar") m_command = RCD_DISABLE_DSTAR; @@ -115,6 +120,8 @@ REMOTE_COMMAND CRemoteControl::getCommand() m_command = RCD_DISABLE_NXDN; else if (m_args.at(1U) == "fm") m_command = RCD_DISABLE_FM; + else + replyStr = "KO"; } else if (m_args.at(0U) == "page" && m_args.size() >= PAGE_ARGS) { // Page command is in the form of "page " m_command = RCD_PAGE; @@ -125,13 +132,18 @@ REMOTE_COMMAND CRemoteControl::getCommand() // Reload command is in the form of "reload" m_command = RCD_RELOAD; } + else + replyStr = "KO"; + ::snprintf(buffer, BUFFER_LENGTH * 2, "%s remote command of \"%s\" received", ((m_command == RCD_NONE) ? "Invalid" : "Valid"), command); if (m_command == RCD_NONE) { m_args.clear(); - LogWarning("Invalid remote command of \"%s\" received", command); + LogWarning(buffer); } else { - LogMessage("Valid remote command of \"%s\" received", command); + LogMessage(buffer); } + + m_socket.write((unsigned char*)replyStr.c_str(), replyStr.length(), address, addrlen); } return m_command;