#ifdef HAVE_CONFIG_H #include #endif #include "echo-server.h" #include #include #include #include #include static const char *ECHO_SERVER_NAME = "org.freedesktop.DBus.Examples.Echo"; static const char *ECHO_SERVER_PATH = "/org/freedesktop/DBus/Examples/Echo"; EchoServer::EchoServer(DBus::Connection &connection) : DBus::ObjectAdaptor(connection, ECHO_SERVER_PATH) { } int32_t EchoServer::Random() { return rand(); } std::string EchoServer::Hello(const std::string &name) { return "Hello " + name + "!"; } DBus::Variant EchoServer::Echo(const DBus::Variant &value) { this->Echoed(value); return value; } std::vector< uint8_t > EchoServer::Cat(const std::string &file) { FILE *handle = fopen(file.c_str(), "rb"); if (!handle) throw DBus::Error("org.freedesktop.DBus.EchoDemo.ErrorFileNotFound", "file not found"); uint8_t buff[1024]; size_t nread = fread(buff, 1, sizeof(buff), handle); fclose(handle); return std::vector< uint8_t > (buff, buff + nread); } int32_t EchoServer::Sum(const std::vector& ints) { int32_t sum = 0; for (size_t i = 0; i < ints.size(); ++i) sum += ints[i]; return sum; } std::map< std::string, std::string > EchoServer::Info() { std::map< std::string, std::string > info; char hostname[HOST_NAME_MAX]; gethostname(hostname, sizeof(hostname)); info["hostname"] = hostname; info["username"] = getlogin(); return info; } DBus::BusDispatcher dispatcher; void niam(int sig) { dispatcher.leave(); } int main() { signal(SIGTERM, niam); signal(SIGINT, niam); DBus::default_dispatcher = &dispatcher; DBus::Connection conn = DBus::Connection::SessionBus(); conn.request_name(ECHO_SERVER_NAME); EchoServer server(conn); dispatcher.enter(); return 0; }