main.cc revision 1d35ecce32826b7a8aeb4a040a8621ddc95f4eb9
15bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa// Copyright 2014 The Chromium OS Authors. All rights reserved.
25bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa// Use of this source code is governed by a BSD-style license that can be
35bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa// found in the LICENSE file.
45bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa
55bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa#include <string>
65bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa
7357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley#include <base/files/file_path.h>
824e5f5d44b25c1ad61e5f07f951467e3c2870871Alex Vakulenko#include <chromeos/dbus/async_event_sequencer.h>
924e5f5d44b25c1ad61e5f07f951467e3c2870871Alex Vakulenko#include <chromeos/dbus/exported_object_manager.h>
1079e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko#include <chromeos/daemons/dbus_daemon.h>
11357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley#include <chromeos/flag_helper.h>
1279e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko#include <chromeos/syslog_logging.h>
135bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa
149485896e8a842f523867cca2154607a9704586bfAlex Vakulenko#include "buffet/dbus_constants.h"
154b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley#include "buffet/manager.h"
165bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa
1768c07ccd298fb44bd0965ccbe0479ea2bc1c129bChristopher Wileyusing chromeos::dbus_utils::AsyncEventSequencer;
1879e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenkousing chromeos::DBusServiceDaemon;
1979e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenkousing buffet::dbus_constants::kServiceName;
2079e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenkousing buffet::dbus_constants::kRootServicePath;
2154028f99aaa6917511102fc0572549a966257a8aChristopher Wiley
2279e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenkonamespace buffet {
235bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa
2479e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenkoclass Daemon : public DBusServiceDaemon {
2579e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko public:
26357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  Daemon(const base::FilePath& config_path,
27c39f4a34ab6c1b47e1efcec698b18cfd6b9d1c72Christopher Wiley         const base::FilePath& state_path,
281d35ecce32826b7a8aeb4a040a8621ddc95f4eb9Christopher Wiley         const base::FilePath& test_definitions_path,
291d35ecce32826b7a8aeb4a040a8621ddc95f4eb9Christopher Wiley         bool enable_xmpp)
30357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley      : DBusServiceDaemon(kServiceName, kRootServicePath),
31357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley        config_path_{config_path},
32c39f4a34ab6c1b47e1efcec698b18cfd6b9d1c72Christopher Wiley        state_path_{state_path},
331d35ecce32826b7a8aeb4a040a8621ddc95f4eb9Christopher Wiley        test_definitions_path_{test_definitions_path},
341d35ecce32826b7a8aeb4a040a8621ddc95f4eb9Christopher Wiley        enable_xmpp_{enable_xmpp} {}
35ea6456d3db72097b2d5ad071202cfd01c05b288aChris Sosa
3679e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko protected:
3779e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko  void RegisterDBusObjectsAsync(AsyncEventSequencer* sequencer) override {
3879e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko    manager_.reset(new buffet::Manager(object_manager_->AsWeakPtr()));
3979e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko    manager_->RegisterAsync(
40357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley        config_path_,
41357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley        state_path_,
42c39f4a34ab6c1b47e1efcec698b18cfd6b9d1c72Christopher Wiley        test_definitions_path_,
431d35ecce32826b7a8aeb4a040a8621ddc95f4eb9Christopher Wiley        enable_xmpp_,
4479e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko        sequencer->GetHandler("Manager.RegisterAsync() failed.", true));
455bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa  }
465bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa
4779e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko private:
48b024ca97e47b61da95c0b4cefa616329ff9ae2daChristopher Wiley  BuffetConfig config_;
4979e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko  std::unique_ptr<buffet::Manager> manager_;
50357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  const base::FilePath config_path_;
51357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  const base::FilePath state_path_;
52c39f4a34ab6c1b47e1efcec698b18cfd6b9d1c72Christopher Wiley  const base::FilePath test_definitions_path_;
531d35ecce32826b7a8aeb4a040a8621ddc95f4eb9Christopher Wiley  const bool enable_xmpp_;
545bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa
5579e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko  DISALLOW_COPY_AND_ASSIGN(Daemon);
5679e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko};
5754028f99aaa6917511102fc0572549a966257a8aChristopher Wiley
5879e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko}  // namespace buffet
595bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa
60357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wileynamespace {
61357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley
62357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wileyconst char kDefaultConfigFilePath[] = "/etc/buffet/buffet.conf";
63357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wileyconst char kDefaultStateFilePath[] = "/var/lib/buffet/device_reg_info";
64357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley
65357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley}  // namespace
66357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley
675bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosaint main(int argc, char* argv[]) {
68b12e995d8771e4970ff349cd9759b16e1d386696Vitaly Buka  DEFINE_bool(log_to_stderr, false, "log trace messages to stderr as well");
69357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  DEFINE_string(config_path, kDefaultConfigFilePath,
70357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley                "Path to file containing config information.");
71357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  DEFINE_string(state_path, kDefaultStateFilePath,
72357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley                "Path to file containing state information.");
73c39f4a34ab6c1b47e1efcec698b18cfd6b9d1c72Christopher Wiley  DEFINE_string(test_definitions_path, "",
74c39f4a34ab6c1b47e1efcec698b18cfd6b9d1c72Christopher Wiley                "Path to directory containing additional command "
75c39f4a34ab6c1b47e1efcec698b18cfd6b9d1c72Christopher Wiley                "and state definitions.  For use in test only.");
761d35ecce32826b7a8aeb4a040a8621ddc95f4eb9Christopher Wiley  DEFINE_bool(enable_xmpp, true,
771d35ecce32826b7a8aeb4a040a8621ddc95f4eb9Christopher Wiley              "Connect to GCD via a persistent XMPP connection.");
784a4be07dd0e87377be7726f033456ef483c61718Aaron Kemp  chromeos::FlagHelper::Init(argc, argv, "Privet protocol handler daemon");
79357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  if (FLAGS_config_path.empty())
80357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley    FLAGS_config_path = kDefaultConfigFilePath;
81357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  if (FLAGS_state_path.empty())
82357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley    FLAGS_state_path = kDefaultStateFilePath;
83b12e995d8771e4970ff349cd9759b16e1d386696Vitaly Buka  int flags = chromeos::kLogToSyslog | chromeos::kLogHeader;
84b12e995d8771e4970ff349cd9759b16e1d386696Vitaly Buka  if (FLAGS_log_to_stderr)
85b12e995d8771e4970ff349cd9759b16e1d386696Vitaly Buka    flags |= chromeos::kLogToStderr;
86b12e995d8771e4970ff349cd9759b16e1d386696Vitaly Buka  chromeos::InitLog(flags);
87b12e995d8771e4970ff349cd9759b16e1d386696Vitaly Buka
88357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  buffet::Daemon daemon{base::FilePath{FLAGS_config_path},
89c39f4a34ab6c1b47e1efcec698b18cfd6b9d1c72Christopher Wiley                        base::FilePath{FLAGS_state_path},
901d35ecce32826b7a8aeb4a040a8621ddc95f4eb9Christopher Wiley                        base::FilePath{FLAGS_test_definitions_path},
911d35ecce32826b7a8aeb4a040a8621ddc95f4eb9Christopher Wiley                        FLAGS_enable_xmpp};
9279e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko  return daemon.Run();
935bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa}
94