summaryrefslogtreecommitdiffstats
path: root/command/sol_cmds.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'command/sol_cmds.cpp')
-rw-r--r--command/sol_cmds.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/command/sol_cmds.cpp b/command/sol_cmds.cpp
new file mode 100644
index 0000000..8f5b0c6
--- /dev/null
+++ b/command/sol_cmds.cpp
@@ -0,0 +1,52 @@
+#include <phosphor-logging/log.hpp>
+#include "main.hpp"
+#include "sol/sol_context.hpp"
+#include "sol/sol_manager.hpp"
+#include "sol_cmds.hpp"
+
+namespace sol
+{
+
+namespace command
+{
+
+using namespace phosphor::logging;
+
+std::vector<uint8_t> payloadHandler(std::vector<uint8_t>& inPayload,
+ const message::Handler& handler)
+{
+ auto request = reinterpret_cast<Payload*>(inPayload.data());
+
+ auto solDataSize = inPayload.size() - sizeof(Payload);
+
+ Buffer charData(solDataSize);
+ if( solDataSize > 0)
+ {
+ std::copy_n(inPayload.data() + sizeof(Payload),
+ solDataSize,
+ charData.begin());
+ }
+
+ try
+ {
+ auto& context = std::get<sol::Manager&>(singletonPool).
+ getContext(handler.sessionID);
+
+ context.processInboundPayload(request->packetSeqNum,
+ request->packetAckSeqNum,
+ request->acceptedCharCount,
+ request->inOperation.ack,
+ charData);
+ }
+ catch (std::exception& e)
+ {
+ log<level::ERR>(e.what());
+ return std::vector<uint8_t>();
+ }
+
+ return std::vector<uint8_t>();
+}
+
+} // namespace command
+
+} // namespace sol
OpenPOWER on IntegriCloud