diff options
author | Vernon Mauery <vernon.mauery@linux.intel.com> | 2018-10-26 10:26:01 -0700 |
---|---|---|
committer | Vernon Mauery <vernon.mauery@linux.intel.com> | 2019-02-04 16:30:42 -0800 |
commit | 7f268e4daa41598610fbd0926b44a3584f527479 (patch) | |
tree | 54cf270635ea8a42b18ffe4144ca13177d7c003f /message_handler.cpp | |
parent | 6f353e868d6fef90e35ef13da7c7ae912becb97a (diff) | |
download | phosphor-net-ipmid-7f268e4daa41598610fbd0926b44a3584f527479.tar.gz phosphor-net-ipmid-7f268e4daa41598610fbd0926b44a3584f527479.zip |
netipmid: consolidate message-related things in message.hpp
The message::Handler class was directly manipulating a bunch of stuff
on behalf of the message::Message class. This change moves more of the
changes into the message::Message class so it can manage its own data.
Change-Id: I5d31f6c3c5760207408238d048853e36a60c73e0
Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
Diffstat (limited to 'message_handler.cpp')
-rw-r--r-- | message_handler.cpp | 91 |
1 files changed, 2 insertions, 89 deletions
diff --git a/message_handler.cpp b/message_handler.cpp index e98955b..58630d9 100644 --- a/message_handler.cpp +++ b/message_handler.cpp @@ -47,49 +47,11 @@ std::shared_ptr<Message> Handler::receive() return message; } -template <> -std::shared_ptr<Message> Handler::createResponse<PayloadType::IPMI>( - std::vector<uint8_t>& output, std::shared_ptr<Message> inMessage) -{ - auto outMessage = std::make_shared<Message>(); - outMessage->payloadType = PayloadType::IPMI; - - outMessage->payload.resize(sizeof(LAN::header::Response) + output.size() + - sizeof(LAN::trailer::Response)); - - auto reqHeader = - reinterpret_cast<LAN::header::Request*>(inMessage->payload.data()); - auto respHeader = - reinterpret_cast<LAN::header::Response*>(outMessage->payload.data()); - - // Add IPMI LAN Message Response Header - respHeader->rqaddr = reqHeader->rqaddr; - respHeader->netfn = reqHeader->netfn | 0x04; - respHeader->cs = crc8bit(&(respHeader->rqaddr), 2); - respHeader->rsaddr = reqHeader->rsaddr; - respHeader->rqseq = reqHeader->rqseq; - respHeader->cmd = reqHeader->cmd; - - auto assembledSize = sizeof(LAN::header::Response); - - // Copy the output by the execution of the command - std::copy(output.begin(), output.end(), - outMessage->payload.begin() + assembledSize); - assembledSize += output.size(); - - // Add the IPMI LAN Message Trailer - auto trailer = reinterpret_cast<LAN::trailer::Response*>( - outMessage->payload.data() + assembledSize); - trailer->checksum = crc8bit(&respHeader->rsaddr, assembledSize - 3); - - return outMessage; -} - std::shared_ptr<Message> Handler::executeCommand(std::shared_ptr<Message> inMessage) { // Get the CommandID to map into the command table - auto command = getCommand(inMessage); + auto command = inMessage->getCommand(); std::vector<uint8_t> output{}; if (inMessage->payloadType == PayloadType::IPMI) @@ -112,56 +74,7 @@ std::shared_ptr<Message> output = std::get<command::Table&>(singletonPool) .executeCommand(command, inMessage->payload, *this); } - - std::shared_ptr<Message> outMessage = nullptr; - - switch (inMessage->payloadType) - { - case PayloadType::IPMI: - outMessage = createResponse<PayloadType::IPMI>(output, inMessage); - break; - case PayloadType::OPEN_SESSION_REQUEST: - outMessage = createResponse<PayloadType::OPEN_SESSION_RESPONSE>( - output, inMessage); - break; - case PayloadType::RAKP1: - outMessage = createResponse<PayloadType::RAKP2>(output, inMessage); - break; - case PayloadType::RAKP3: - outMessage = createResponse<PayloadType::RAKP4>(output, inMessage); - break; - case PayloadType::SOL: - return outMessage; - break; - default: - break; - } - - outMessage->isPacketEncrypted = inMessage->isPacketEncrypted; - outMessage->isPacketAuthenticated = inMessage->isPacketAuthenticated; - outMessage->rcSessionID = inMessage->rcSessionID; - outMessage->bmcSessionID = inMessage->bmcSessionID; - - return outMessage; -} - -uint32_t Handler::getCommand(std::shared_ptr<Message> message) -{ - uint32_t command = 0; - - command |= (static_cast<uint8_t>(message->payloadType) << 16); - if (message->payloadType == PayloadType::IPMI) - { - command |= - ((reinterpret_cast<LAN::header::Request*>(message->payload.data())) - ->netfn) - << 8; - command |= - (reinterpret_cast<LAN::header::Request*>(message->payload.data())) - ->cmd; - } - - return command; + return inMessage->createResponse(output); } void Handler::send(std::shared_ptr<Message> outMessage) |