main: cleanup command handling

Change-Id: I7b07bb13948607b40365411c16510073d33ba57b
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/ipmi.cpp b/ipmi.cpp
index b9a8943..fad2049 100644
--- a/ipmi.cpp
+++ b/ipmi.cpp
@@ -20,6 +20,27 @@
 #include "flash-ipmi.hpp"
 #include "ipmi.hpp"
 
+IpmiFlashHandler getCommandHandler(FlashSubCmds command)
+{
+    static const std::unordered_map<FlashSubCmds, IpmiFlashHandler>
+        subHandlers = {
+            {FlashSubCmds::flashStartTransfer, startTransfer},
+            {FlashSubCmds::flashDataBlock, dataBlock},
+            {FlashSubCmds::flashDataFinish, dataFinish},
+            {FlashSubCmds::flashStartHash, startHash},
+            {FlashSubCmds::flashHashData, hashBlock},
+            {FlashSubCmds::flashHashFinish, hashFinish},
+        };
+
+    auto results = subHandlers.find(command);
+    if (results == subHandlers.end())
+    {
+        return nullptr;
+    }
+
+    return results->second;
+}
+
 bool validateRequestLength(FlashSubCmds command, size_t requestLen)
 {
     static const std::unordered_map<FlashSubCmds, size_t> minimumLengths = {