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