1b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko// Copyright 2014 The Chromium OS Authors. All rights reserved. 2b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko// Use of this source code is governed by a BSD-style license that can be 3b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko// found in the LICENSE file. 4b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko 5fed60b0c640828b320f56293c8bebc43fd2b1da8Alex Vakulenko#ifndef LIBBRILLO_BRILLO_DBUS_UTILS_H_ 6fed60b0c640828b320f56293c8bebc43fd2b1da8Alex Vakulenko#define LIBBRILLO_BRILLO_DBUS_UTILS_H_ 7b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko 8b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko#include <memory> 9b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko#include <string> 10b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko 119ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenko#include <brillo/brillo_export.h> 129ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenko#include <brillo/errors/error.h> 13b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko#include <dbus/exported_object.h> 14b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko#include <dbus/message.h> 151363ed6670b25ab10003dbeb0f31c5aa63077642Alex Vakulenko#include <dbus/scoped_dbus_error.h> 16b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko 179ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenkonamespace brillo { 18b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenkonamespace dbus_utils { 19b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko 20b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko// A helper function to create a D-Bus error response object as unique_ptr<>. 219ed0cab99f18acb3570a35e9408f24355f6b8324Alex VakulenkoBRILLO_EXPORT std::unique_ptr<dbus::Response> CreateDBusErrorResponse( 22b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko dbus::MethodCall* method_call, 23f437e3b367869af7cb5a53153284566164b48a7cAlex Vakulenko const std::string& error_name, 24f437e3b367869af7cb5a53153284566164b48a7cAlex Vakulenko const std::string& error_message); 25b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko 269ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenko// Create a D-Bus error response object from brillo::Error. If the last 27b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko// error in the error chain belongs to "dbus" error domain, its error code 28b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko// and message are directly translated to D-Bus error code and message. 29b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko// Any inner errors are formatted as "domain/code:message" string and appended 30b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko// to the D-Bus error message, delimited by semi-colons. 319ed0cab99f18acb3570a35e9408f24355f6b8324Alex VakulenkoBRILLO_EXPORT std::unique_ptr<dbus::Response> GetDBusError( 32847b871c166235af441bd59572dd9aabcd8ae976Alex Vakulenko dbus::MethodCall* method_call, 339ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenko const brillo::Error* error); 34b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko 3500ceab8b84907509eaec878e1ae11ea36c18d441Alex Vakulenko// AddDBusError() is the opposite of GetDBusError(). It de-serializes the Error 3600ceab8b84907509eaec878e1ae11ea36c18d441Alex Vakulenko// object received over D-Bus. 379ed0cab99f18acb3570a35e9408f24355f6b8324Alex VakulenkoBRILLO_EXPORT void AddDBusError(brillo::ErrorPtr* error, 389ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenko const std::string& dbus_error_name, 399ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenko const std::string& dbus_error_message); 4000ceab8b84907509eaec878e1ae11ea36c18d441Alex Vakulenko 41b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko} // namespace dbus_utils 429ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenko} // namespace brillo 43b381365edadcac463c07d045ad29b43ef96099a1Alex Vakulenko 44fed60b0c640828b320f56293c8bebc43fd2b1da8Alex Vakulenko#endif // LIBBRILLO_BRILLO_DBUS_UTILS_H_ 45