blob: 1ec298824c84c4b74009da1824d8fce8e8eb5da9 [file] [log] [blame]
// Copyright (c) 2010 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.
#include "login_manager/upstart_signal_emitter.h"
#include <string>
#include <vector>
#include <base/logging.h>
#include <dbus/message.h>
#include <dbus/object_proxy.h>
namespace login_manager {
const char UpstartSignalEmitter::kServiceName[] = "com.ubuntu.Upstart";
const char UpstartSignalEmitter::kPath[] = "/com/ubuntu/Upstart";
const char UpstartSignalEmitter::kInterface[] = "com.ubuntu.Upstart0_6";
const char UpstartSignalEmitter::kMethodName[] = "EmitEvent";
UpstartSignalEmitter::UpstartSignalEmitter(dbus::ObjectProxy* proxy)
: upstart_dbus_proxy_(proxy) {
}
UpstartSignalEmitter::~UpstartSignalEmitter() {}
scoped_ptr<dbus::Response> UpstartSignalEmitter::EmitSignal(
const std::string& signal_name,
const std::vector<std::string>& args_keyvals) {
DLOG(INFO) << "Emitting " << signal_name << " Upstart signal";
dbus::MethodCall method_call(UpstartSignalEmitter::kInterface,
UpstartSignalEmitter::kMethodName);
dbus::MessageWriter writer(&method_call);
writer.AppendString(signal_name);
writer.AppendArrayOfStrings(args_keyvals);
writer.AppendBool(true);
return upstart_dbus_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT);
}
} // namespace login_manager