From 118faa58f6e706fd99922f8ddb775e05dcb0ed1e Mon Sep 17 00:00:00 2001 From: Marek Blaha Date: Fri, 7 May 2021 15:24:21 +0200 Subject: [PATCH] Add API to get message path and message destination (#167) * Add API to get message path * Add API to get message destination * Handle NULL message fields interface and member Functions sd_bus_message_get_interface() and sd_bus_message_get_member() can return null in case the message does not use those fields or does not have them set. --- include/sdbus-c++/Message.h | 2 ++ src/Message.cpp | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/include/sdbus-c++/Message.h b/include/sdbus-c++/Message.h index 9d9c26e..7a48bf9 100644 --- a/include/sdbus-c++/Message.h +++ b/include/sdbus-c++/Message.h @@ -131,6 +131,8 @@ namespace sdbus { std::string getInterfaceName() const; std::string getMemberName() const; std::string getSender() const; + std::string getPath() const; + std::string getDestination() const; void peekType(std::string& type, std::string& contents) const; bool isValid() const; bool isEmpty() const; diff --git a/src/Message.cpp b/src/Message.cpp index f54273c..5f89fe0 100644 --- a/src/Message.cpp +++ b/src/Message.cpp @@ -583,12 +583,14 @@ void Message::rewind(bool complete) std::string Message::getInterfaceName() const { - return sd_bus_message_get_interface((sd_bus_message*)msg_); + auto interface = sd_bus_message_get_interface((sd_bus_message*)msg_); + return interface != nullptr ? interface : ""; } std::string Message::getMemberName() const { - return sd_bus_message_get_member((sd_bus_message*)msg_); + auto member = sd_bus_message_get_member((sd_bus_message*)msg_); + return member != nullptr ? member : ""; } std::string Message::getSender() const @@ -596,6 +598,18 @@ std::string Message::getSender() const return sd_bus_message_get_sender((sd_bus_message*)msg_); } +std::string Message::getPath() const +{ + auto path = sd_bus_message_get_path((sd_bus_message*)msg_); + return path != nullptr ? path : ""; +} + +std::string Message::getDestination() const +{ + auto destination = sd_bus_message_get_destination((sd_bus_message*)msg_); + return destination != nullptr ? destination : ""; +} + void Message::peekType(std::string& type, std::string& contents) const { char typeSig;