Refactor various methods to get session or blob handler
Use a single method to fetch the handler, if it can be found using
session ID.
Signed-off-by: Kun Yi <kunyi731@gmail.com>
Change-Id: I648cbc48ebfae479f63d34e8f2465d2c8cbe9d64
diff --git a/manager.cpp b/manager.cpp
index dcc223e..684f20c 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -155,31 +155,6 @@
return nullptr;
}
-GenericBlobInterface* BlobManager::getHandler(uint16_t session)
-{
- auto item = sessions.find(session);
- if (item == sessions.end())
- {
- return nullptr;
- }
-
- return item->second.handler;
-}
-
-SessionInfo* BlobManager::getSessionInfo(uint16_t session)
-{
- auto item = sessions.find(session);
- if (item == sessions.end())
- {
- return nullptr;
- }
-
- /* If we go to multi-threaded, this pointer can be invalidated and this
- * method will need to change.
- */
- return &item->second;
-}
-
std::string BlobManager::getPath(uint16_t session) const
{
auto item = sessions.find(session);
@@ -207,69 +182,40 @@
bool BlobManager::stat(uint16_t session, BlobMeta* meta)
{
- /* meta should never be NULL. */
- GenericBlobInterface* handler = getHandler(session);
-
- /* No handler found. */
- if (!handler)
+ if (auto handler = getActionHandle(session))
{
- return false;
+ return handler->stat(session, meta);
}
-
- return handler->stat(session, meta);
+ return false;
}
bool BlobManager::commit(uint16_t session, const std::vector<uint8_t>& data)
{
- GenericBlobInterface* handler = getHandler(session);
-
- /* No handler found. */
- if (!handler)
+ if (auto handler = getActionHandle(session))
{
- return false;
+ return handler->commit(session, data);
}
-
- return handler->commit(session, data);
+ return false;
}
bool BlobManager::close(uint16_t session)
{
- GenericBlobInterface* handler = getHandler(session);
-
- /* No handler found. */
- if (!handler)
+ if (auto handler = getActionHandle(session))
{
- return false;
+ if (!handler->close(session))
+ {
+ return false;
+ }
+ sessions.erase(session);
+ decrementOpen(getPath(session));
+ return true;
}
-
- /* Handler returns failure */
- if (!handler->close(session))
- {
- return false;
- }
-
- sessions.erase(session);
- decrementOpen(getPath(session));
- return true;
+ return false;
}
std::vector<uint8_t> BlobManager::read(uint16_t session, uint32_t offset,
uint32_t requestedSize)
{
- SessionInfo* info = getSessionInfo(session);
-
- /* No session found. */
- if (!info)
- {
- return std::vector<uint8_t>();
- }
-
- /* Check flags. */
- if (!(info->flags & OpenFlags::read))
- {
- return std::vector<uint8_t>();
- }
-
/* TODO: Currently, configure_ac isn't finding libuserlayer, w.r.t the
* symbols I need.
*/
@@ -284,30 +230,22 @@
*/
// uint32_t maxTransportSize = ipmi::getChannelMaxTransferSize(ipmiChannel);
- /* Try reading from it. */
- return info->handler->read(session, offset,
- std::min(maximumReadSize, requestedSize));
+ if (auto handler = getActionHandle(session, OpenFlags::read))
+ {
+ return handler->read(session, offset,
+ std::min(maximumReadSize, requestedSize));
+ }
+ return {};
}
bool BlobManager::write(uint16_t session, uint32_t offset,
const std::vector<uint8_t>& data)
{
- SessionInfo* info = getSessionInfo(session);
-
- /* No session found. */
- if (!info)
+ if (auto handler = getActionHandle(session, OpenFlags::write))
{
- return false;
+ return handler->write(session, offset, data);
}
-
- /* Check flags. */
- if (!(info->flags & OpenFlags::write))
- {
- return false;
- }
-
- /* Try writing to it. */
- return info->handler->write(session, offset, data);
+ return {};
}
bool BlobManager::deleteBlob(const std::string& path)
@@ -333,16 +271,11 @@
bool BlobManager::writeMeta(uint16_t session, uint32_t offset,
const std::vector<uint8_t>& data)
{
- SessionInfo* info = getSessionInfo(session);
-
- /* No session found. */
- if (!info)
+ if (auto handler = getActionHandle(session))
{
- return false;
+ return handler->writeMeta(session, offset, data);
}
-
- /* Try writing metadata to it. */
- return info->handler->writeMeta(session, offset, data);
+ return false;
}
bool BlobManager::getSession(uint16_t* sess)