set up data handler mechanism

Data that comes from outside of the IPMI packet will leverage a data
interface implementation.  Only the IPMI blocktransfer (or really KCS)
will not use this external interface.

Change-Id: I7806da04c070dc3d6a79070ea563aeec63221dca
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/data_handler.hpp b/data_handler.hpp
index 07101f7..79e228f 100644
--- a/data_handler.hpp
+++ b/data_handler.hpp
@@ -1,5 +1,8 @@
 #pragma once
 
+#include <cstdint>
+#include <vector>
+
 namespace blobs
 {
 
@@ -10,6 +13,20 @@
 {
   public:
     virtual ~DataInterface() = default;
+
+    /**
+     * Copy bytes from external interface (blocking call).
+     *
+     * @param[in] length - number of bytes to copy
+     * @return the bytes read
+     */
+    virtual std::vector<std::uint8_t> copyFrom(std::uint32_t length) = 0;
+};
+
+struct DataHandlerPack
+{
+    std::uint16_t bitmask;
+    DataInterface* handler;
 };
 
 } // namespace blobs