Initial Download manager

This is the basic download manager that implements
xyz/openbmc_project/Common/TFTP.interface.yaml

Change-Id: I429b0f2fbce3864dee5051af727b88b3a3fe1227
Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
diff --git a/.gitignore b/.gitignore
index 7f0412d..6b00353 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,6 +42,7 @@
 /config.log
 /config.status
 /phosphor-version-software-manager
+/phosphor-download-manager
 Makefile
 .deps
 *-libtool
diff --git a/Makefile.am b/Makefile.am
index 1527ac8..92a318e 100755
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,14 +1,21 @@
 AM_DEFAULT_SOURCE_EXT = .cpp
 
 sbin_PROGRAMS = \
-	phosphor-version-software-manager
+	phosphor-version-software-manager \
+	phosphor-download-manager
 
 phosphor_version_software_manager_SOURCES = \
 	version_software_manager.cpp \
 	version_software_manager_main.cpp
 
+phosphor_download_manager_SOURCES = \
+	download_manager.cpp \
+	download_manager_main.cpp
+
 generic_cxxflags = $(SYSTEMD_CFLAGS) $(PHOSPHOR_DBUS_INTERFACES_CFLAGS) $(SDBUSPLUS_CFLAGS)
 generic_ldflags = $(SYSTEMD_LIBS) $(PHOSPHOR_DBUS_INTERFACES_LIBS) $(SDBUSPLUS_LIBS)
 
 phosphor_version_software_manager_CXXFLAGS = $(generic_cxxflags)
 phosphor_version_software_manager_LDFLAGS = $(generic_ldflags)
+phosphor_download_manager_CXXFLAGS = $(generic_cxxflags)
+phosphor_download_manager_LDFLAGS = $(generic_ldflags)
diff --git a/configure.ac b/configure.ac
index 6b2a5e1..af227ae 100755
--- a/configure.ac
+++ b/configure.ac
@@ -32,6 +32,11 @@
 AS_IF([test "x$SOFTWARE_OBJPATH" == "x"], [SOFTWARE_OBJPATH="/xyz/openbmc_project/software"])
 AC_DEFINE_UNQUOTED([SOFTWARE_OBJPATH], ["$SOFTWARE_OBJPATH"], [The version software manager Dbus root])
 
+AC_ARG_VAR(DOWNLOAD_BUSNAME, [The Dbus busname to own])
+AS_IF([test "x$DOWNLOAD_BUSNAME" == "x"],
+    [DOWNLOAD_BUSNAME="xyz.openbmc_project.Software.Download"])
+AC_DEFINE_UNQUOTED([DOWNLOAD_BUSNAME], ["$DOWNLOAD_BUSNAME"], [The DBus busname to own])
+
 # Check for header files.
 AC_CHECK_HEADER(systemd/sd-bus.h, ,[AC_MSG_ERROR([Could not find systemd/sd-bus.h...systemd developement package required])])
 AC_CHECK_HEADER(sdbusplus/server.hpp, ,[AC_MSG_ERROR([Could not find sdbusplus/server.hpp...openbmc/sdbusplus package required])])
diff --git a/download_manager.cpp b/download_manager.cpp
new file mode 100644
index 0000000..c4c2cd3
--- /dev/null
+++ b/download_manager.cpp
@@ -0,0 +1,19 @@
+#include "download_manager.hpp"
+
+namespace phosphor
+{
+namespace software
+{
+namespace manager
+{
+
+void Download::downloadViaTFTP(const  std::string fileName,
+                               const  std::string serverAddress)
+{
+    return;
+}
+
+} // namespace manager
+} // namespace software
+} // namespace phosphor
+
diff --git a/download_manager.hpp b/download_manager.hpp
new file mode 100644
index 0000000..b78dc4b
--- /dev/null
+++ b/download_manager.hpp
@@ -0,0 +1,46 @@
+#pragma once
+
+#include <sdbusplus/bus.hpp>
+#include "xyz/openbmc_project/Common/TFTP/server.hpp"
+
+namespace phosphor
+{
+namespace software
+{
+namespace manager
+{
+
+using DownloadInherit = sdbusplus::server::object::object<
+    sdbusplus::xyz::openbmc_project::Common::server::TFTP>;
+
+/** @class Download
+ *  @brief OpenBMC download software management implementation.
+ *  @details A concrete implementation for xyz.openbmc_project.Common.TFTP
+ *  DBus API.
+ */
+class Download : public DownloadInherit
+{
+    public:
+        /** @brief Constructs Download Software Manager
+         *
+         * @param[in] bus       - The Dbus bus object
+         * @param[in] objPath   - The Dbus object path
+         */
+        Download(sdbusplus::bus::bus& bus,
+                const std::string& objPath) : DownloadInherit(
+                    bus, (objPath).c_str()) {};
+
+        /**
+         * @brief Download the specified image via TFTP
+         *
+         * @param[in] fileName      - The name of the file to transfer.
+         * @param[in] serverAddress - The TFTP Server IP Address.
+         **/
+        void downloadViaTFTP(const std::string fileName,
+                             const std::string serverAddress) override;
+};
+
+} // namespace manager
+} // namespace software
+} // namespace phosphor
+
diff --git a/download_manager_main.cpp b/download_manager_main.cpp
new file mode 100644
index 0000000..e32e8c8
--- /dev/null
+++ b/download_manager_main.cpp
@@ -0,0 +1,24 @@
+#include <sdbusplus/bus.hpp>
+#include "config.h"
+#include "download_manager.hpp"
+
+int main(int argc, char* argv[])
+{
+    auto bus = sdbusplus::bus::new_default();
+
+    // Add sdbusplus ObjectManager.
+    sdbusplus::server::manager::manager objManager(bus,
+            SOFTWARE_OBJPATH);
+
+    phosphor::software::manager::Download manager(bus,
+            SOFTWARE_OBJPATH);
+
+    bus.request_name(DOWNLOAD_BUSNAME);
+
+    while (true)
+    {
+        bus.process_discard();
+        bus.wait();
+    }
+    return 0;
+}