tools: start implementing data interface

The host must provide multiple data interfaces.  Each data interface is
responsible for configuring its data pathway and sending the contents
via this pathway, as well as any flow control.

Change-Id: If856519536d01043e69c45044fcd0ad525592486
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/tools/interface.hpp b/tools/interface.hpp
new file mode 100644
index 0000000..39f3fb8
--- /dev/null
+++ b/tools/interface.hpp
@@ -0,0 +1,22 @@
+#pragma once
+
+#include <cstdint>
+#include <string>
+
+class DataInterface
+{
+  public:
+    virtual ~DataInterface() = default;
+
+    /**
+     * Given an open session to either /flash/image, /flash/tarball, or
+     * /flash/hash, this method will configure, and send the data, but not close
+     * the session.
+     *
+     * @param[in] input - path to file to send.
+     * @param[in] session - the session ID to use.
+     * @return bool on success.
+     */
+    virtual bool sendContents(const std::string& input,
+                              std::uint16_t session) = 0;
+};