Mercurial > hg > orthanc
diff OrthancServer/ServerContext.cpp @ 1065:921532f67770
Lua scripts can invoke system commands, with CallSystem()
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 25 Jul 2014 16:59:33 +0200 |
parents | 160dfe770618 |
children | bb82e5e818e9 |
line wrap: on
line diff
--- a/OrthancServer/ServerContext.cpp Fri Jul 25 16:13:36 2014 +0200 +++ b/OrthancServer/ServerContext.cpp Fri Jul 25 16:59:33 2014 +0200 @@ -44,6 +44,7 @@ #include <dcmtk/dcmdata/dcfilefo.h> +#include "Scheduler/CallSystemCommand.h" #include "Scheduler/DeleteInstanceCommand.h" #include "Scheduler/ModifyInstanceCommand.h" #include "Scheduler/StoreScuCommand.h" @@ -160,6 +161,47 @@ return command.release(); } + if (operation == "call-system") + { + LOG(INFO) << "Lua script to call system command on " << parameters["Instance"].asString(); + + const Json::Value& argsIn = parameters["Arguments"]; + if (argsIn.type() != Json::arrayValue) + { + throw OrthancException(ErrorCode_BadParameterType); + } + + std::vector<std::string> args; + args.reserve(argsIn.size()); + for (Json::Value::ArrayIndex i = 0; i < argsIn.size(); ++i) + { + // http://jsoncpp.sourceforge.net/namespace_json.html#7d654b75c16a57007925868e38212b4e + switch (argsIn[i].type()) + { + case Json::stringValue: + args.push_back(argsIn[i].asString()); + break; + + case Json::intValue: + args.push_back(boost::lexical_cast<std::string>(argsIn[i].asInt())); + break; + + case Json::uintValue: + args.push_back(boost::lexical_cast<std::string>(argsIn[i].asUInt())); + break; + + case Json::realValue: + args.push_back(boost::lexical_cast<std::string>(argsIn[i].asFloat())); + break; + + default: + throw OrthancException(ErrorCode_BadParameterType); + } + } + + return new CallSystemCommand(context, parameters["Command"].asString(), args); + } + throw OrthancException(ErrorCode_ParameterOutOfRange); }