| // Copyright 2014 The Chromium OS Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | // This is a sample daemon that "handles" Buffet commands. | 
 | // It just prints the information about the command received to stdout and | 
 | // marks the command as processed. | 
 |  | 
 | #include <string> | 
 | #include <sysexits.h> | 
 |  | 
 | #include <base/bind.h> | 
 | #include <base/command_line.h> | 
 | #include <base/format_macros.h> | 
 | #include <chromeos/daemons/dbus_daemon.h> | 
 | #include <chromeos/map_utils.h> | 
 | #include <chromeos/strings/string_utils.h> | 
 | #include <chromeos/syslog_logging.h> | 
 |  | 
 | #include "buffet/libbuffet/command.h" | 
 | #include "buffet/libbuffet/command_listener.h" | 
 |  | 
 | class Daemon : public chromeos::DBusDaemon { | 
 |  public: | 
 |   Daemon() = default; | 
 |  | 
 |  protected: | 
 |   int OnInit() override; | 
 |   void OnShutdown(int* return_code) override; | 
 |  | 
 |  private: | 
 |   buffet::CommandListener command_listener_; | 
 |  | 
 |   void OnBuffetCommand(scoped_ptr<buffet::Command> command); | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(Daemon); | 
 | }; | 
 |  | 
 | int Daemon::OnInit() { | 
 |   int return_code = chromeos::DBusDaemon::OnInit(); | 
 |   if (return_code != EX_OK) | 
 |     return return_code; | 
 |  | 
 |   if (!command_listener_.Init(bus_, base::Bind(&Daemon::OnBuffetCommand, | 
 |                                                base::Unretained(this)))) { | 
 |     return EX_SOFTWARE; | 
 |   } | 
 |  | 
 |   printf("Waiting for commands...\n"); | 
 |   return EX_OK; | 
 | } | 
 |  | 
 | void Daemon::OnShutdown(int* return_code) { | 
 |   printf("Shutting down...\n"); | 
 | } | 
 |  | 
 | void Daemon::OnBuffetCommand(scoped_ptr<buffet::Command> command) { | 
 |   printf("================================================\n"); | 
 |   printf("Command received: %s\n", command->GetName().c_str()); | 
 |   printf("        category: %s\n", command->GetCategory().c_str()); | 
 |   printf("              ID: %s\n", command->GetID().c_str()); | 
 |   printf("          status: %s\n", command->GetStatus().c_str()); | 
 |   printf(" # of parameters: %" PRIuS "\n", command->GetParameters().size()); | 
 |   auto set = chromeos::GetMapKeys(command->GetParameters()); | 
 |   std::string param_names = chromeos::string_utils::Join( | 
 |       ", ", std::vector<std::string>(set.begin(), set.end())); | 
 |   printf(" parameter names: %s\n", param_names.c_str()); | 
 |   command->Done(); | 
 | } | 
 |  | 
 | int main(int argc, char* argv[]) { | 
 |   CommandLine::Init(argc, argv); | 
 |   chromeos::InitLog(chromeos::kLogToSyslog | | 
 |                     chromeos::kLogToStderr | | 
 |                     chromeos::kLogHeader); | 
 |   Daemon daemon; | 
 |   return daemon.Run(); | 
 | } |