blob: cb8882b4687ab868a6017bef1ea2c08aa027837f [file] [log] [blame]
#pragma once
#include <sdbusplus/bus.hpp>
#include <sdbusplus/server/object.hpp>
#include <string>
#include "xyz/openbmc_project/Network/Client/server.hpp"
namespace phosphor
{
namespace rsyslog_config
{
using NetworkClient = sdbusplus::xyz::openbmc_project::Network::server::Client;
using Iface = sdbusplus::server::object::object<NetworkClient>;
/** @class Server
* @brief Configuration for rsyslog server
* @details A concrete implementation of the
* xyz.openbmc_project.Network.Client API, in order to
* provide remote rsyslog server's address and port.
*/
class Server : public Iface
{
public:
Server() = delete;
Server(const Server&) = delete;
Server& operator=(const Server&) = delete;
Server(Server&&) = delete;
Server& operator=(Server&&) = delete;
virtual ~Server() = default;
/** @brief Constructor to put object onto bus at a dbus path.
* @param[in] bus - Bus to attach to.
* @param[in] path - Path to attach at.
* @param[in] filePath - rsyslog remote logging config file
*/
Server(sdbusplus::bus::bus& bus,
const std::string& path,
const char* filePath) :
Iface(bus, path.c_str()),
configFilePath(filePath)
{
}
using NetworkClient::address;
using NetworkClient::port;
/** @brief Override that updates rsyslog config file as well
* @param[in] value - remote server address
* @returns value of changed address
*/
virtual std::string address(std::string value) override;
/** @brief Override that updates rsyslog config file as well
* @param[in] value - remote server port
* @returns value of changed port
*/
virtual uint16_t port(uint16_t value) override;
private:
/** @brief Update remote server address and port in
* rsyslog config file.
* @param[in] serverAddress - remote server address
* @param[in] serverPort - remote server port
* @param[in] filePath - rsyslog config file path
*/
void writeConfig(
const std::string& serverAddress,
uint16_t serverPort,
const char* filePath);
std::string configFilePath{};
};
} // namespace rsyslog_config
} // namespace phosphor