summaryrefslogtreecommitdiffstats
path: root/apphandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'apphandler.cpp')
-rw-r--r--apphandler.cpp37
1 files changed, 31 insertions, 6 deletions
diff --git a/apphandler.cpp b/apphandler.cpp
index 8f11a8c..43cddd7 100644
--- a/apphandler.cpp
+++ b/apphandler.cpp
@@ -974,6 +974,7 @@ uint8_t getTotalSessionCount()
* This function validates the request data and retrive request session id,
* session handle.
*
+ * @param[in] ctx - context of current session.
* @param[in] sessionIndex - request session index
* @param[in] payload - input payload
* @param[in] reqSessionId - unpacked session Id will be asigned
@@ -982,20 +983,43 @@ uint8_t getTotalSessionCount()
* @return success completion code if request data is valid
* else return the correcponding error completion code.
**/
-uint8_t getSessionInfoRequestData(const uint8_t sessionIndex,
+uint8_t getSessionInfoRequestData(const ipmi::Context::ptr ctx,
+ const uint8_t sessionIndex,
ipmi::message::Payload& payload,
uint32_t& reqSessionId,
uint8_t& reqSessionHandle)
{
- if (sessionIndex == session::sessionZero ||
- ((sessionIndex > session::maxSessionCountPerChannel) &&
- (sessionIndex < session::searchSessionByHandle)))
+ if ((sessionIndex > session::maxSessionCountPerChannel) &&
+ (sessionIndex < session::searchSessionByHandle))
{
return ipmi::ccInvalidFieldRequest;
}
switch (sessionIndex)
{
+ case session::searchCurrentSession:
+
+ ipmi::ChannelInfo chInfo;
+ ipmi::getChannelInfo(ctx->channel, chInfo);
+
+ if (static_cast<ipmi::EChannelMediumType>(chInfo.mediumType) !=
+ ipmi::EChannelMediumType::lan8032)
+ {
+ return ipmi::ccInvalidFieldRequest;
+ }
+
+ if (!payload.fullyUnpacked())
+ {
+ return ipmi::ccReqDataLenInvalid;
+ }
+ // Check if current sessionId is 0, sessionId 0 is reserved.
+ if (ctx->sessionId == session::sessionZero)
+ {
+ return session::ccInvalidSessionId;
+ }
+ reqSessionId = ctx->sessionId;
+ break;
+
case session::searchSessionByHandle:
if ((payload.unpack(reqSessionHandle)) ||
@@ -1120,7 +1144,8 @@ ipmi::RspType<
std::array<uint8_t, macAddrLen>, // mac address
uint16_t // remote port
>>>
- ipmiAppGetSessionInfo(uint8_t sessionIndex, ipmi::message::Payload& payload)
+ ipmiAppGetSessionInfo(ipmi::Context::ptr ctx, uint8_t sessionIndex,
+ ipmi::message::Payload& payload)
{
uint32_t reqSessionId = 0;
uint8_t reqSessionHandle = session::defaultSessionHandle;
@@ -1128,7 +1153,7 @@ ipmi::RspType<
uint8_t state = 0xFF;
uint8_t completionCode = getSessionInfoRequestData(
- sessionIndex, payload, reqSessionId, reqSessionHandle);
+ ctx, sessionIndex, payload, reqSessionId, reqSessionHandle);
if (completionCode)
{
OpenPOWER on IntegriCloud