Add port clearing support to daemonctl 02/174802/3
authorIgor Kotrasinski <i.kotrasinsk@partner.samsung.com>
Fri, 15 Dec 2017 12:38:30 +0000 (13:38 +0100)
committerTomasz Swierczek <t.swierczek@samsung.com>
Thu, 12 Apr 2018 07:02:03 +0000 (07:02 +0000)
Change-Id: I09d10fe9287db9a7ffca5685f6353726e682ff9a
Signed-off-by: Igor Kotrasinski <i.kotrasinsk@partner.samsung.com>
simulatordaemon/daemonctl/inc/ControlCommand.h
simulatordaemon/daemonctl/src/handlers/DebugPortHandler.cpp
simulatordaemon/src/ControlConnectionHandler.cpp

index 0eb416e47c1207c8238906605bdd745e0715bdb2..a77cd477ef54930d620de8d846e2b8fef81253da 100644 (file)
@@ -41,6 +41,7 @@ enum ControlReplyStatus : uint32_t {
 
 struct __attribute__((packed)) SetPortControlCommand {
        TEEC_UUID uuid;
+       bool clear;
        uint32_t port;
 };
 
index 2d7bb0fc25b3172d8f2513cc7547a70f6173989a..8260cded6e57cd227bc9350ac9c0b2e91d67e509 100644 (file)
@@ -46,9 +46,10 @@ DebugPortHandler::DebugPortHandler()
        m_desc.add_options()
                ("help,h", "Display this help message")
                ("uuid,u", boost::program_options::value<std::string>(),
-                "TA UUID to set port for")
+                "TA UUID to set / clear port for")
                ("port,p", boost::program_options::value<int32_t>(),
-                "Port number");
+                "Set debug port number")
+               ("clear,c", "Clear debug port number");
 }
 
 void DebugPortHandler::readOptions(int argc, char *argv[]) {
@@ -70,7 +71,7 @@ void DebugPortHandler::readOptionsPermissively(int argc, char *argv[])
 
 void DebugPortHandler::checkExactlyOneMainFlag()
 {
-       std::vector<std::string> mainOptions = { "port" };
+       std::vector<std::string> mainOptions = { "port", "clear" };
        auto optionCount = [this](std::string &s) { return m_opts.count(s) > 0; };
        bool mainOptionCount = std::count_if(mainOptions.begin(),
                                             mainOptions.end(),
@@ -107,7 +108,11 @@ bool DebugPortHandler::handleCommandlineArgs(
                return false;
        }
 
-       if (m_opts.count("port")) {
+       if (m_opts.count("clear")) {
+               cmd.clear = true;
+               cmd.port = 0;
+       } else if (m_opts.count("port")) {
+               cmd.clear = false;
                cmd.port = m_opts["port"].as<int32_t>();
                if (cmd.port < 0)
                        throw boost::program_options::error(
index 6c3732548284e8a30179c1e62a9126797f4c5a38..f768e7f6108e8ea3e8ef42c17015b19e1da55aba 100644 (file)
@@ -90,8 +90,13 @@ void ControlConnectionHandler::handleSetPortCommand(std::vector<char> &data)
        }
 
        std::memcpy(&cmd, data.data(), sizeof(cmd));
-       (*UUIDConfig)[cmd.uuid]->setDebugPort(cmd.port);
-
+       if (cmd.clear)
+               (*UUIDConfig)[cmd.uuid]->clearDebugPort();
+       else
+               (*UUIDConfig)[cmd.uuid]->setDebugPort(cmd.port);
+       LOGI(SIM_DAEMON, "%s debug port of UUID %s",
+                        cmd.clear ? "Cleared" : "Set",
+                        UUIDToString(cmd.uuid).c_str());
        reply.status = CTL_REPLY_SUCCESS;
        m_writer->write(CTL_SET_PORT_REPLY, (char *) &reply, sizeof(reply));
 }