main.cc revision 357deca5ddee619afb0d6fe24ab8bdeed6c3c43e
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,
27357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley         const base::FilePath& state_path)
28357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley      : DBusServiceDaemon(kServiceName, kRootServicePath),
29357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley        config_path_{config_path},
30357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley        state_path_{state_path} {}
31ea6456d3db72097b2d5ad071202cfd01c05b288aChris Sosa
3279e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko protected:
3379e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko  void RegisterDBusObjectsAsync(AsyncEventSequencer* sequencer) override {
3479e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko    manager_.reset(new buffet::Manager(object_manager_->AsWeakPtr()));
3579e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko    manager_->RegisterAsync(
36357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley        config_path_,
37357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley        state_path_,
3879e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko        sequencer->GetHandler("Manager.RegisterAsync() failed.", true));
395bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa  }
405bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa
4179e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko private:
4279e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko  std::unique_ptr<buffet::Manager> manager_;
43357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  const base::FilePath config_path_;
44357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  const base::FilePath state_path_;
455bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa
4679e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko  DISALLOW_COPY_AND_ASSIGN(Daemon);
4779e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko};
4854028f99aaa6917511102fc0572549a966257a8aChristopher Wiley
4979e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko}  // namespace buffet
505bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa
51357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wileynamespace {
52357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley
53357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wileyconst char kDefaultConfigFilePath[] = "/etc/buffet/buffet.conf";
54357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wileyconst char kDefaultStateFilePath[] = "/var/lib/buffet/device_reg_info";
55357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley
56357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley}  // namespace
57357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley
585bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosaint main(int argc, char* argv[]) {
59357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  DEFINE_string(config_path, kDefaultConfigFilePath,
60357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley                "Path to file containing config information.");
61357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  DEFINE_string(state_path, kDefaultStateFilePath,
62357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley                "Path to file containing state information.");
63357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  if (FLAGS_config_path.empty())
64357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley    FLAGS_config_path = kDefaultConfigFilePath;
65357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  if (FLAGS_state_path.empty())
66357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley    FLAGS_state_path = kDefaultStateFilePath;
67357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  chromeos::FlagHelper::Init(argc, argv, "Privet protocol handler daemon");
6879e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko  chromeos::InitLog(chromeos::kLogToSyslog | chromeos::kLogHeader);
69357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley  buffet::Daemon daemon{base::FilePath{FLAGS_config_path},
70357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley                        base::FilePath{FLAGS_state_path}};
7179e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko  return daemon.Run();
725bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa}
73