dbus-cxx
message.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-3.0-or-later OR BSD-3-Clause
2/***************************************************************************
3 * Copyright (C) 2007,2009,2010 by Rick L. Vinyard, Jr. *
4 * rvinyard@cs.nmsu.edu *
5 * *
6 * This file is part of the dbus-cxx library. *
7 ***************************************************************************/
8#include <stdint.h>
9#include <dbus-cxx/error.h>
12#include <memory>
13#include <string>
14#include "enums.h"
15
16#include <dbus-cxx/variant.h>
17
18#ifndef DBUSCXX_MESSAGE_H
19#define DBUSCXX_MESSAGE_H
20
21#define DBUSCXX_MESSAGE_NO_REPLY_EXPECTED 0x01
22#define DBUSCXX_MESSAGE_NO_AUTO_START_FLAG 0x02
23// This is set in CallMessage only.
24#define DBUSCXX_MESSAGE_ALLOW_INTERACTIVE_AUTHORIZATION 0x04
25
26namespace DBus {
27class ReturnMessage;
28
45class Message {
46protected:
47
48 Message();
49
50public:
51
52 virtual ~Message();
53
54 bool operator == ( const Message& other );
55
56 bool is_valid() const;
57
58 void invalidate();
59
60 operator bool() const;
61
62 uint32_t serial() const;
63
64 virtual MessageType type() const = 0;
65
66 void set_auto_start( bool auto_start );
67
74 bool auto_start();
75
83 bool set_destination( const std::string& s );
84
85 std::string destination() const;
86
87 std::string sender() const;
88
89 Signature signature() const;
90
91 template <typename T>
93 MessageIterator iter = this->begin();
94 iter >> value;
95 return iter;
96 }
97
98 template <typename T>
100 MessageAppendIterator aiter( *this );
101 aiter << value;
102 return aiter;
103 }
104
105 MessageIterator begin() const;
106
107 MessageIterator end() const;
108
110
121 bool serialize_to_vector( std::vector<uint8_t>* vec, uint32_t serial ) const;
122
131
136 uint8_t flags() const;
137
146
147 Endianess endianess() const;
148
149 const std::vector<int>& filedescriptors() const;
150
151 static std::shared_ptr<Message> create_from_data( uint8_t* data, uint32_t data_len, std::vector<int> fds = std::vector<int>() );
152
153protected:
154
155 void append_signature( std::string toappend );
156
160 void clear_sig_and_data();
161
162 void set_flags( uint8_t flags );
163
164private:
165 std::vector<uint8_t>* body();
166 const std::vector<uint8_t>* body() const;
167 void add_filedescriptor( int fd );
168 uint32_t filedescriptors_size() const;
169 int filedescriptor_at_location( int location ) const;
170
171private:
172 class priv_data;
173
174 DBUS_CXX_PROPAGATE_CONST( std::unique_ptr<priv_data> ) m_priv;
175
177 friend class MessageIterator;
178 friend std::ostream& operator<<( std::ostream& os, const DBus::Message* msg );
179
180};
181
182
183template <typename T>
184inline
185DBus::MessageIterator operator>>( std::shared_ptr<const DBus::Message> ptr, T& value ) {
186 if( !ptr ) { throw DBus::ErrorInvalidSharedPtr(); }
187
188 return ( *ptr ) >> value;
189}
190
191template <typename T>
192inline
193DBus::MessageAppendIterator operator<<( std::shared_ptr<DBus::Message> ptr, const T& value ) {
194 if( !ptr ) { throw DBus::ErrorInvalidSharedPtr(); }
195
196 return ( *ptr ) << value;
197}
198
199}
200
201#endif
Definition: error.h:402
Insertion iterator allow values to be appended to a message.
Definition: messageappenditerator.h:38
Extraction iterator allowing values to be retrieved from a message.
Definition: messageiterator.h:56
This class represents a basic DBus message and also serves as a base class for the specialized messag...
Definition: message.h:45
Variant header_field(MessageHeaderFields field) const
Returns the given header field(if it exists), otherwise returns a default constructed variant.
Definition: message.cpp:378
Signature signature() const
Definition: message.cpp:162
bool set_destination(const std::string &s)
Set the destination of this message.
Definition: message.cpp:123
virtual ~Message()
Definition: message.cpp:52
bool operator==(const Message &other)
Definition: message.cpp:59
MessageIterator operator>>(T &value) const
Definition: message.h:92
virtual MessageType type() const =0
std::string sender() const
Definition: message.cpp:140
int filedescriptor_at_location(int location) const
Definition: message.cpp:439
std::vector< uint8_t > * body()
Definition: message.cpp:416
uint8_t flags() const
The message flags, as the marshaled byte.
Definition: message.cpp:400
std::string destination() const
Definition: message.cpp:130
static std::shared_ptr< Message > create_from_data(uint8_t *data, uint32_t data_len, std::vector< int > fds=std::vector< int >())
Definition: message.cpp:261
void clear_sig_and_data()
Clears the signature and the data, so you can re-append data.
Definition: message.cpp:389
uint32_t serial() const
Definition: message.cpp:101
void set_flags(uint8_t flags)
Definition: message.cpp:404
DBUS_CXX_PROPAGATE_CONST(std::unique_ptr< priv_data >) m_priv
bool serialize_to_vector(std::vector< uint8_t > *vec, uint32_t serial) const
Serialize this message to the given vector.
Definition: message.cpp:172
bool auto_start()
Returns true if the bus is allowed to start an owner for this message's destination if it is not runn...
Definition: message.cpp:119
MessageAppendIterator operator<<(const T &value)
Definition: message.h:99
bool is_valid() const
Definition: message.cpp:87
void add_filedescriptor(int fd)
Definition: message.cpp:424
Endianess endianess() const
Definition: message.cpp:435
MessageIterator end() const
Definition: message.cpp:154
uint32_t filedescriptors_size() const
Definition: message.cpp:431
const std::vector< int > & filedescriptors() const
Definition: message.cpp:448
Message()
Definition: message.cpp:48
void append_signature(std::string toappend)
Definition: message.cpp:365
MessageAppendIterator append()
Definition: message.cpp:158
MessageIterator begin() const
Definition: message.cpp:150
void set_auto_start(bool auto_start)
Definition: message.cpp:111
void invalidate()
Definition: message.cpp:93
Variant set_header_field(MessageHeaderFields field, Variant value)
Set the given header field.
Definition: message.cpp:408
Represents a DBus signature.
Definition: signature.h:78
A Variant is a type-safe union for DBus operations.
Definition: variant.h:42
Global DBus namespace, where everything happens.
Definition: callmessage.cpp:18
MessageHeaderFields
Definition: enums.h:140
std::shared_ptr< DBus::Connection > operator<<(std::shared_ptr< DBus::Connection > ptr, std::shared_ptr< DBus::Message > msg)
Definition: connection.h:449
MessageType
Definition: enums.h:81
DBus::MessageIterator operator>>(std::shared_ptr< const DBus::Message > ptr, T &value)
Definition: message.h:185
Endianess
Definition: enums.h:114
int value
Definition: uv-caller.cpp:11