xref: /openbmc/boost-dbus/include/dbus/message.hpp (revision 60cf6bcc)
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