tools: blob: implement get blob stat command

The firmware update process requires implementing the stat command, so
that one can verify the firmware mechanism requested is available.

Change-Id: I582f344124767975ee305c420657f991d2223889
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/tools/blob_handler.cpp b/tools/blob_handler.cpp
index e05da90..a30eb9e 100644
--- a/tools/blob_handler.cpp
+++ b/tools/blob_handler.cpp
@@ -149,3 +149,23 @@
 
     return list;
 }
+
+StatResponse BlobHandler::getStat(const std::string& id)
+{
+    StatResponse meta;
+    std::vector<std::uint8_t> name;
+    std::copy(id.begin(), id.end(), std::back_inserter(name));
+
+    auto resp = sendIpmiPayload(BlobOEMCommands::bmcBlobStat, name);
+    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;
+}