summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Venture <venture@google.com>2019-05-06 10:30:55 -0700
committerPatrick Venture <venture@google.com>2019-05-06 10:32:18 -0700
commit17186aef0f34373c0da0832de6525e67d1bc1b09 (patch)
tree8f66a10bbb5f4924aee4793c6e11101e5d3708a1
parent16a99a62d1946ef65175b34614e6037ce55a7d11 (diff)
downloadipmi-blob-tool-17186aef0f34373c0da0832de6525e67d1bc1b09.tar.gz
ipmi-blob-tool-17186aef0f34373c0da0832de6525e67d1bc1b09.zip
squash getStat variations into one underlying method
Squash the getStat(name) and getStat(session) into one underlying method. Change-Id: I6c00b9f4128a64e3d1a918c8a9d1eaf252de32bc Signed-off-by: Patrick Venture <venture@google.com>
-rw-r--r--src/ipmiblob/blob_handler.cpp42
-rw-r--r--src/ipmiblob/blob_handler.hpp11
2 files changed, 25 insertions, 28 deletions
diff --git a/src/ipmiblob/blob_handler.cpp b/src/ipmiblob/blob_handler.cpp
index 0d31b3f..8ec3f9c 100644
--- a/src/ipmiblob/blob_handler.cpp
+++ b/src/ipmiblob/blob_handler.cpp
@@ -212,17 +212,15 @@ std::vector<std::string> BlobHandler::getBlobList()
return list;
}
-StatResponse BlobHandler::getStat(const std::string& id)
+StatResponse BlobHandler::statGeneric(BlobOEMCommands command,
+ const std::vector<std::uint8_t>& request)
{
StatResponse meta;
- std::vector<std::uint8_t> name, resp;
-
- std::copy(id.begin(), id.end(), std::back_inserter(name));
- name.push_back(0x00); /* need to add nul-terminator. */
+ std::vector<std::uint8_t> resp;
try
{
- resp = sendIpmiPayload(BlobOEMCommands::bmcBlobStat, name);
+ resp = sendIpmiPayload(command, request);
}
catch (const BlobException& b)
{
@@ -242,35 +240,23 @@ StatResponse BlobHandler::getStat(const std::string& id)
return meta;
}
+StatResponse BlobHandler::getStat(const std::string& id)
+{
+ std::vector<std::uint8_t> name;
+ std::copy(id.begin(), id.end(), std::back_inserter(name));
+ name.push_back(0x00); /* need to add nul-terminator. */
+
+ return statGeneric(BlobOEMCommands::bmcBlobStat, name);
+}
+
StatResponse BlobHandler::getStat(std::uint16_t session)
{
- StatResponse meta;
- std::vector<std::uint8_t> resp;
std::vector<std::uint8_t> request;
auto addrSession = reinterpret_cast<const std::uint8_t*>(&session);
std::copy(addrSession, addrSession + sizeof(session),
std::back_inserter(request));
- try
- {
- resp = sendIpmiPayload(BlobOEMCommands::bmcBlobSessionStat, request);
- }
- catch (const BlobException& b)
- {
- throw;
- }
-
- std::memcpy(&meta.blob_state, &resp[0], sizeof(meta.blob_state));
- std::memcpy(&meta.size, &resp[sizeof(meta.blob_state)], sizeof(meta.size));
- int offset = sizeof(meta.blob_state) + sizeof(meta.size);
- std::uint8_t len = resp[offset];
- if (len > 0)
- {
- std::copy(&resp[offset + 1], &resp[resp.size()],
- std::back_inserter(meta.metadata));
- }
-
- return meta;
+ return statGeneric(BlobOEMCommands::bmcBlobSessionStat, request);
}
std::uint16_t BlobHandler::openBlob(const std::string& id,
diff --git a/src/ipmiblob/blob_handler.hpp b/src/ipmiblob/blob_handler.hpp
index a663b63..bc3ebdc 100644
--- a/src/ipmiblob/blob_handler.hpp
+++ b/src/ipmiblob/blob_handler.hpp
@@ -107,6 +107,17 @@ class BlobHandler : public BlobInterface
std::uint32_t offset,
const std::vector<std::uint8_t>& bytes);
+ /**
+ * Generic stat reader.
+ *
+ * @param[in] command - the command associated with this write.
+ * @param[in] request - the bytes of the request
+ * @return the metadata StatResponse
+ * @throws BlobException on failure.
+ */
+ StatResponse statGeneric(BlobOEMCommands command,
+ const std::vector<std::uint8_t>& request);
+
IpmiInterface* ipmi;
};
OpenPOWER on IntegriCloud