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(); //TODO 25 26 /// Create an error message 27 static message new_error(); //TODO 28 29 /// Create a signal message 30 static message new_signal(); //TODO 31 32 message() {} 33 34 message(const message& m) 35 : message_(dbus_message_ref(m.message_)) 36 { 37 } 38 39 ~message() 40 { 41 dbus_message_unref(message_); 42 } 43 44 /// Wrap an existing DBusMessage * 45 explicit message(DBusMessage *m) 46 : message_(m) 47 { 48 } 49 50 operator DBusMessage *() 51 { 52 return message_; 53 } 54 55 struct packer 56 { 57 DBusMessageIter iter_; 58 template<typename Element> packer& pack(Element&); 59 template<typename Element> packer& pack_array(Element*, size_t); 60 //TODO: add open/close container 61 }; 62 struct unpacker 63 { 64 DBusMessageIter iter_; 65 template<typename Element> unpacker& unpack(Element&); 66 template<typename Element> unpacker& unpack_array(Element*&, size_t); //? 67 }; 68 69 template<typename Element> packer pack(Element&); 70 template<typename Element> unpacker unpack(Element&); 71 72 }; 73 74 } // namespace dbus 75 76 #include <dbus/impl/packer.ipp> 77 #include <dbus/impl/unpacker.ipp> 78 #include <dbus/impl/message.ipp> 79 80 #endif // DBUS_MESSAGE_HPP 81