buffet: Start privet logic

Initialize privetd::Manager from buffet::Manager.
Added flag disable_privet to disable local APIs.
CloudDelegate still uses D-Bus to communicate with buffet.

BUG=brillo:1161
TEST=`FEATURES=test emerge-gizmo buffet`

Change-Id: Ic5d687f0e45d9be3c487a2f2b2de354f4b437441
Reviewed-on: https://chromium-review.googlesource.com/276602
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/main.cc b/buffet/main.cc
index c7d44d0..3971abb 100644
--- a/buffet/main.cc
+++ b/buffet/main.cc
@@ -9,6 +9,7 @@
 #include <chromeos/dbus/exported_object_manager.h>
 #include <chromeos/daemons/dbus_daemon.h>
 #include <chromeos/flag_helper.h>
+#include <chromeos/strings/string_utils.h>
 #include <chromeos/syslog_logging.h>
 
 #include "buffet/dbus_constants.h"
@@ -23,31 +24,20 @@
 
 class Daemon final : public DBusServiceDaemon {
  public:
-  Daemon(const base::FilePath& config_path,
-         const base::FilePath& state_path,
-         const base::FilePath& test_definitions_path,
-         bool enable_xmpp)
-      : DBusServiceDaemon(kServiceName, kRootServicePath),
-        config_path_{config_path},
-        state_path_{state_path},
-        test_definitions_path_{test_definitions_path},
-        enable_xmpp_{enable_xmpp} {}
+  explicit Daemon(const buffet::Manager::Options& options)
+      : DBusServiceDaemon(kServiceName, kRootServicePath), options_{options} {}
 
  protected:
   void RegisterDBusObjectsAsync(AsyncEventSequencer* sequencer) override {
     manager_.reset(new buffet::Manager(object_manager_->AsWeakPtr()));
-    manager_->Start(
-        config_path_, state_path_, test_definitions_path_, enable_xmpp_,
-        sequencer->GetHandler("Manager.RegisterAsync() failed.", true));
+    manager_->Start(options_, sequencer);
   }
 
- private:
-  std::unique_ptr<buffet::Manager> manager_;
-  const base::FilePath config_path_;
-  const base::FilePath state_path_;
-  const base::FilePath test_definitions_path_;
-  const bool enable_xmpp_;
+  void OnShutdown(int* return_code) override { manager_->Stop(); }
 
+ private:
+  buffet::Manager::Options options_;
+  std::unique_ptr<buffet::Manager> manager_;
   DISALLOW_COPY_AND_ASSIGN(Daemon);
 };
 
@@ -71,6 +61,12 @@
                 "and state definitions.  For use in test only.");
   DEFINE_bool(enable_xmpp, true,
               "Connect to GCD via a persistent XMPP connection.");
+  DEFINE_bool(disable_privet, false, "disable Privet protocol");
+  DEFINE_bool(disable_security, false, "disable Privet security for tests");
+  DEFINE_bool(enable_ping, false, "enable test HTTP handler at /privet/ping");
+  DEFINE_string(device_whitelist, "",
+                "Comma separated list of network interfaces to monitor for "
+                "connectivity (an empty list enables all interfaces).");
   chromeos::FlagHelper::Init(argc, argv, "Privet protocol handler daemon");
   if (FLAGS_config_path.empty())
     FLAGS_config_path = kDefaultConfigFilePath;
@@ -81,9 +77,20 @@
     flags |= chromeos::kLogToStderr;
   chromeos::InitLog(flags);
 
-  buffet::Daemon daemon{base::FilePath{FLAGS_config_path},
-                        base::FilePath{FLAGS_state_path},
-                        base::FilePath{FLAGS_test_definitions_path},
-                        FLAGS_enable_xmpp};
+  auto device_whitelist =
+      chromeos::string_utils::Split(FLAGS_device_whitelist, ",", true, true);
+
+  buffet::Manager::Options options;
+  options.config_path = base::FilePath{FLAGS_config_path};
+  options.state_path = base::FilePath{FLAGS_state_path};
+  options.test_definitions_path = base::FilePath{FLAGS_test_definitions_path};
+  options.xmpp_enabled = FLAGS_enable_xmpp;
+  options.privet.disable_privet = FLAGS_disable_privet;
+  options.privet.disable_security = FLAGS_disable_security;
+  options.privet.enable_ping = FLAGS_enable_ping;
+  options.privet.device_whitelist.insert(device_whitelist.begin(),
+                                         device_whitelist.end());
+
+  buffet::Daemon daemon{options};
   return daemon.Run();
 }