1 #ifndef DBUS_MESSAGE_HPP 2 #define DBUS_MESSAGE_HPP 3 4 #include <dbus/dbus.h> 5 #include <dbus/element.hpp> 6 7 8 namespace dbus { 9 10 class message 11 { 12 DBusMessage *message_; 13 public: 14 uint32 serial; 15 16 /// Create a method call message 17 static message new_call( 18 const string& process_name, 19 const string& object_path, 20 const string& interface_name, 21 const string& method_name); 22 23 /// Create a method return message 24 static message new_return(); 25 26 /// Create an error message 27 static message new_error(); 28 29 /// Create a signal message 30 static message new_signal(); 31 32 message() {} 33 34 message(const message& m) 35 : message_(dbus_message_ref(m.message_)) 36 { 37 } 38 39 message(DBusMessage *m) 40 : message_(dbus_message_ref(m)) 41 { 42 } 43 44 ~message() 45 { 46 dbus_message_unref(message_); 47 } 48 49 operator DBusMessage *() 50 { 51 return message_; 52 } 53 54 operator const DBusMessage *() const 55 { 56 return message_; 57 } 58 59 string get_path() 60 { 61 return dbus_message_get_path(message_); 62 } 63 64 string get_interface() 65 { 66 return dbus_message_get_interface(message_); 67 } 68 69 string get_member() 70 { 71 return dbus_message_get_member(message_); 72 } 73 74 string get_destination() 75 { 76 return dbus_message_get_destination(message_); 77 } 78 79 80 struct packer 81 { 82 DBusMessageIter iter_; 83 template<typename Element> packer& pack(const Element&); 84 template<typename Element> packer& pack_array(const Element*, size_t); 85 }; 86 struct unpacker 87 { 88 DBusMessageIter iter_; 89 /// return type code of the next element in line for unpacking 90 int code(); 91 template<typename Element> unpacker& unpack(Element&); 92 int array_code(); 93 template<typename Element> unpacker& unpack_array(Element*&, size_t); 94 }; 95 96 template<typename Element> packer pack(const Element&); 97 template<typename Element> unpacker unpack(Element&); 98 99 }; 100 101 } // namespace dbus 102 103 #include <dbus/impl/packer.ipp> 104 #include <dbus/impl/unpacker.ipp> 105 #include <dbus/impl/message.ipp> 106 107 #endif // DBUS_MESSAGE_HPP 108