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(DBusMessage *m) 35 : message_(dbus_message_ref(m)) 36 { 37 } 38 39 ~message() 40 { 41 dbus_message_unref(message_); 42 } 43 44 operator DBusMessage *() 45 { 46 return message_; 47 } 48 49 operator const DBusMessage *() const 50 { 51 return message_; 52 } 53 54 struct packer 55 { 56 DBusMessageIter iter_; 57 template<typename Element> packer& pack(const Element&); 58 template<typename Element> packer& pack_array(const Element*, size_t); 59 }; 60 struct unpacker 61 { 62 DBusMessageIter iter_; 63 /// return type code of the next element in line for unpacking 64 int code(); 65 template<typename Element> unpacker& unpack(Element&); 66 int array_code(); 67 template<typename Element> unpacker& unpack_array(Element*&, size_t); 68 }; 69 70 template<typename Element> packer pack(const Element&); 71 template<typename Element> unpacker unpack(Element&); 72 73 }; 74 75 } // namespace dbus 76 77 #include <dbus/impl/packer.ipp> 78 #include <dbus/impl/unpacker.ipp> 79 #include <dbus/impl/message.ipp> 80 81 #endif // DBUS_MESSAGE_HPP 82