main.cc revision d42e09d85b2bc48028edd79993bfd30631b9e475
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> 8cd478bb44404d3cdafdf47b9aaa9fd1f27bbd503Vitaly Buka#include <chromeos/daemons/dbus_daemon.h> 924e5f5d44b25c1ad61e5f07f951467e3c2870871Alex Vakulenko#include <chromeos/dbus/async_event_sequencer.h> 1024e5f5d44b25c1ad61e5f07f951467e3c2870871Alex Vakulenko#include <chromeos/dbus/exported_object_manager.h> 11357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley#include <chromeos/flag_helper.h> 1284fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka#include <chromeos/strings/string_utils.h> 1379e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko#include <chromeos/syslog_logging.h> 145bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa 15becd461462f428f136cd5368c664a951935222e9Vitaly Buka#include "buffet/buffet_config.h" 169485896e8a842f523867cca2154607a9704586bfAlex Vakulenko#include "buffet/dbus_constants.h" 174b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley#include "buffet/manager.h" 185bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa 1968c07ccd298fb44bd0965ccbe0479ea2bc1c129bChristopher Wileyusing chromeos::dbus_utils::AsyncEventSequencer; 2079e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenkousing chromeos::DBusServiceDaemon; 21cf92c66d1aa30678beaa64501c9febc3933c23a9Robert Gindausing buffet::dbus_constants::kServiceName; 22cf92c66d1aa30678beaa64501c9febc3933c23a9Robert Gindausing buffet::dbus_constants::kRootServicePath; 2354028f99aaa6917511102fc0572549a966257a8aChristopher Wiley 2479e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenkonamespace buffet { 255bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa 261e3a66b4603e5eecc9a0791ee91bd72a7a93ffb3Alex Vakulenkoclass Daemon final : public DBusServiceDaemon { 2779e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko public: 2858a288b5b10aec975c7bc4fbfdcbcb80d5899c12Vitaly Buka Daemon(const weave::Device::Options& options, 29becd461462f428f136cd5368c664a951935222e9Vitaly Buka const BuffetConfigPaths& paths, 3058a288b5b10aec975c7bc4fbfdcbcb80d5899c12Vitaly Buka const std::set<std::string>& device_whitelist) 3158a288b5b10aec975c7bc4fbfdcbcb80d5899c12Vitaly Buka : DBusServiceDaemon(kServiceName, kRootServicePath), 3258a288b5b10aec975c7bc4fbfdcbcb80d5899c12Vitaly Buka options_{options}, 33becd461462f428f136cd5368c664a951935222e9Vitaly Buka paths_(paths), 3458a288b5b10aec975c7bc4fbfdcbcb80d5899c12Vitaly Buka device_whitelist_{device_whitelist} {} 35ea6456d3db72097b2d5ad071202cfd01c05b288aChris Sosa 3679e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko protected: 3779e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko void RegisterDBusObjectsAsync(AsyncEventSequencer* sequencer) override { 3879e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko manager_.reset(new buffet::Manager(object_manager_->AsWeakPtr())); 39becd461462f428f136cd5368c664a951935222e9Vitaly Buka manager_->Start(options_, paths_, device_whitelist_, sequencer); 405bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa } 415bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa 4284fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka void OnShutdown(int* return_code) override { manager_->Stop(); } 4384fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka 4479e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko private: 450c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka weave::Device::Options options_; 46becd461462f428f136cd5368c664a951935222e9Vitaly Buka BuffetConfigPaths paths_; 4758a288b5b10aec975c7bc4fbfdcbcb80d5899c12Vitaly Buka std::set<std::string> device_whitelist_; 4858a288b5b10aec975c7bc4fbfdcbcb80d5899c12Vitaly Buka 4979e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko std::unique_ptr<buffet::Manager> manager_; 5079e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko DISALLOW_COPY_AND_ASSIGN(Daemon); 5179e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko}; 5254028f99aaa6917511102fc0572549a966257a8aChristopher Wiley 5379e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko} // namespace buffet 545bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa 55357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wileynamespace { 56357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley 578e34636ec3a3ff33b041a30805b310e17ec3c8efAlex Vakulenkoconst char kDefaultConfigFilePath[] = "/etc/weaved/weaved.conf"; 58d42e09d85b2bc48028edd79993bfd30631b9e475Alex Vakulenkoconst char kDefaultStateFilePath[] = "/data/misc/weaved/device_reg_info"; 59357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley 60357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley} // namespace 61357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley 625bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosaint main(int argc, char* argv[]) { 63b12e995d8771e4970ff349cd9759b16e1d386696Vitaly Buka DEFINE_bool(log_to_stderr, false, "log trace messages to stderr as well"); 64357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley DEFINE_string(config_path, kDefaultConfigFilePath, 65357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley "Path to file containing config information."); 66357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley DEFINE_string(state_path, kDefaultStateFilePath, 67357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley "Path to file containing state information."); 681d35ecce32826b7a8aeb4a040a8621ddc95f4eb9Christopher Wiley DEFINE_bool(enable_xmpp, true, 691d35ecce32826b7a8aeb4a040a8621ddc95f4eb9Christopher Wiley "Connect to GCD via a persistent XMPP connection."); 7049c36eecb39618ee15ec212cd31235645d1ffea2Alex Vakulenko DEFINE_bool(disable_privet, false, "disable Privet protocol"); 7184fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka DEFINE_bool(enable_ping, false, "enable test HTTP handler at /privet/ping"); 7284fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka DEFINE_string(device_whitelist, "", 7384fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka "Comma separated list of network interfaces to monitor for " 7484fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka "connectivity (an empty list enables all interfaces)."); 758b511e9ecab910d0b6db30dc2a8a08733ac7e90eVitaly Buka 768b511e9ecab910d0b6db30dc2a8a08733ac7e90eVitaly Buka DEFINE_bool(disable_security, false, 778b511e9ecab910d0b6db30dc2a8a08733ac7e90eVitaly Buka "disable Privet security for tests. For test only."); 788b511e9ecab910d0b6db30dc2a8a08733ac7e90eVitaly Buka DEFINE_string(test_privet_ssid, "", 798b511e9ecab910d0b6db30dc2a8a08733ac7e90eVitaly Buka "Fixed SSID for WiFi bootstrapping. For test only."); 808b511e9ecab910d0b6db30dc2a8a08733ac7e90eVitaly Buka DEFINE_string(test_definitions_path, "", 818b511e9ecab910d0b6db30dc2a8a08733ac7e90eVitaly Buka "Path to directory containing additional command " 828b511e9ecab910d0b6db30dc2a8a08733ac7e90eVitaly Buka "and state definitions. For test only."); 838b511e9ecab910d0b6db30dc2a8a08733ac7e90eVitaly Buka 844a4be07dd0e87377be7726f033456ef483c61718Aaron Kemp chromeos::FlagHelper::Init(argc, argv, "Privet protocol handler daemon"); 85357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley if (FLAGS_config_path.empty()) 86357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley FLAGS_config_path = kDefaultConfigFilePath; 87357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley if (FLAGS_state_path.empty()) 88357deca5ddee619afb0d6fe24ab8bdeed6c3c43eChristopher Wiley FLAGS_state_path = kDefaultStateFilePath; 89b12e995d8771e4970ff349cd9759b16e1d386696Vitaly Buka int flags = chromeos::kLogToSyslog | chromeos::kLogHeader; 90b12e995d8771e4970ff349cd9759b16e1d386696Vitaly Buka if (FLAGS_log_to_stderr) 91b12e995d8771e4970ff349cd9759b16e1d386696Vitaly Buka flags |= chromeos::kLogToStderr; 92b12e995d8771e4970ff349cd9759b16e1d386696Vitaly Buka chromeos::InitLog(flags); 93b12e995d8771e4970ff349cd9759b16e1d386696Vitaly Buka 9484fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka auto device_whitelist = 9584fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka chromeos::string_utils::Split(FLAGS_device_whitelist, ",", true, true); 9684fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka 97becd461462f428f136cd5368c664a951935222e9Vitaly Buka buffet::BuffetConfigPaths paths; 98becd461462f428f136cd5368c664a951935222e9Vitaly Buka paths.defaults = base::FilePath{FLAGS_config_path}; 99becd461462f428f136cd5368c664a951935222e9Vitaly Buka paths.settings = base::FilePath{FLAGS_state_path}; 1008e34636ec3a3ff33b041a30805b310e17ec3c8efAlex Vakulenko paths.definitions = base::FilePath{"/etc/weaved"}; 101becd461462f428f136cd5368c664a951935222e9Vitaly Buka paths.test_definitions = base::FilePath{FLAGS_test_definitions_path}; 102becd461462f428f136cd5368c664a951935222e9Vitaly Buka 1030c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka weave::Device::Options options; 10484fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka options.xmpp_enabled = FLAGS_enable_xmpp; 1050c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka options.disable_privet = FLAGS_disable_privet; 1060c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka options.disable_security = FLAGS_disable_security; 1070c6dcd2dacc3d4f0024973d938f0537bb93773a4Vitaly Buka options.enable_ping = FLAGS_enable_ping; 1088b511e9ecab910d0b6db30dc2a8a08733ac7e90eVitaly Buka options.test_privet_ssid = FLAGS_test_privet_ssid; 10984fd6dd850ac58a0f17f8d30a683b1f983e52435Vitaly Buka 1107b9ebeea8658473ec823ff5ff6521e7e641bc2ebVitaly Buka buffet::Daemon daemon{ 111becd461462f428f136cd5368c664a951935222e9Vitaly Buka options, paths, 1127b9ebeea8658473ec823ff5ff6521e7e641bc2ebVitaly Buka std::set<std::string>{device_whitelist.begin(), device_whitelist.end()}}; 11379e6a281e95a1226c90ff90084415df13fd858dbAlex Vakulenko return daemon.Run(); 1145bac949c8339cd271a11b5b3bc5e16f7e8a0f2fChris Sosa} 115