1*64b3dec8STom Joseph #include <phosphor-logging/log.hpp>
2*64b3dec8STom Joseph #include "main.hpp"
3*64b3dec8STom Joseph #include "sol/sol_context.hpp"
4*64b3dec8STom Joseph #include "sol/sol_manager.hpp"
5*64b3dec8STom Joseph #include "sol_cmds.hpp"
6*64b3dec8STom Joseph 
7*64b3dec8STom Joseph namespace sol
8*64b3dec8STom Joseph {
9*64b3dec8STom Joseph 
10*64b3dec8STom Joseph namespace command
11*64b3dec8STom Joseph {
12*64b3dec8STom Joseph 
13*64b3dec8STom Joseph using namespace phosphor::logging;
14*64b3dec8STom Joseph 
15*64b3dec8STom Joseph std::vector<uint8_t> payloadHandler(std::vector<uint8_t>& inPayload,
16*64b3dec8STom Joseph                                     const message::Handler& handler)
17*64b3dec8STom Joseph {
18*64b3dec8STom Joseph     auto request = reinterpret_cast<Payload*>(inPayload.data());
19*64b3dec8STom Joseph 
20*64b3dec8STom Joseph     auto solDataSize = inPayload.size() - sizeof(Payload);
21*64b3dec8STom Joseph 
22*64b3dec8STom Joseph     Buffer charData(solDataSize);
23*64b3dec8STom Joseph     if( solDataSize > 0)
24*64b3dec8STom Joseph     {
25*64b3dec8STom Joseph         std::copy_n(inPayload.data() + sizeof(Payload),
26*64b3dec8STom Joseph                     solDataSize,
27*64b3dec8STom Joseph                     charData.begin());
28*64b3dec8STom Joseph     }
29*64b3dec8STom Joseph 
30*64b3dec8STom Joseph     try
31*64b3dec8STom Joseph     {
32*64b3dec8STom Joseph         auto& context = std::get<sol::Manager&>(singletonPool).
33*64b3dec8STom Joseph                 getContext(handler.sessionID);
34*64b3dec8STom Joseph 
35*64b3dec8STom Joseph         context.processInboundPayload(request->packetSeqNum,
36*64b3dec8STom Joseph                                       request->packetAckSeqNum,
37*64b3dec8STom Joseph                                       request->acceptedCharCount,
38*64b3dec8STom Joseph                                       request->inOperation.ack,
39*64b3dec8STom Joseph                                       charData);
40*64b3dec8STom Joseph     }
41*64b3dec8STom Joseph     catch (std::exception& e)
42*64b3dec8STom Joseph     {
43*64b3dec8STom Joseph         log<level::ERR>(e.what());
44*64b3dec8STom Joseph         return std::vector<uint8_t>();
45*64b3dec8STom Joseph     }
46*64b3dec8STom Joseph 
47*64b3dec8STom Joseph     return std::vector<uint8_t>();
48*64b3dec8STom Joseph }
49*64b3dec8STom Joseph 
50*64b3dec8STom Joseph } // namespace command
51*64b3dec8STom Joseph 
52*64b3dec8STom Joseph } // namespace sol
53