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 fb93e62..5185d55 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); @@ -91,6 +92,8 @@ REMOTE_COMMAND CRemoteControl::getCommand() m_command = RCD_MODE_NXDN; else if (m_args.at(1U) == "m17") m_command = RCD_MODE_M17; + 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; @@ -108,6 +111,8 @@ REMOTE_COMMAND CRemoteControl::getCommand() m_command = RCD_ENABLE_FM; else if (m_args.at(1U) == "ax25") m_command = RCD_ENABLE_AX25; + 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; @@ -125,6 +130,8 @@ REMOTE_COMMAND CRemoteControl::getCommand() m_command = RCD_DISABLE_FM; else if (m_args.at(1U) == "ax25") m_command = RCD_DISABLE_AX25; + 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; @@ -135,13 +142,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;