Qpid Proton C++  0.17.0
message.hpp
1 #ifndef PROTON_MESSAGE_HPP
2 #define PROTON_MESSAGE_HPP
3 
4 /*
5  *
6  * Licensed to the Apache Software Foundation (ASF) under one
7  * or more contributor license agreements. See the NOTICE file
8  * distributed with this work for additional information
9  * regarding copyright ownership. The ASF licenses this file
10  * to you under the Apache License, Version 2.0 (the
11  * "License"); you may not use this file except in compliance
12  * with the License. You may obtain a copy of the License at
13  *
14  * http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing,
17  * software distributed under the License is distributed on an
18  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19  * KIND, either express or implied. See the License for the
20  * specific language governing permissions and limitations
21  * under the License.
22  *
23  */
24 
25 #include "./fwd.hpp"
26 #include "./internal/export.hpp"
27 #include "./duration.hpp"
28 #include "./timestamp.hpp"
29 #include "./value.hpp"
30 
31 #include "./internal/cached_map.hpp"
32 #include "./internal/pn_unique_ptr.hpp"
33 
34 #include <proton/type_compat.h>
35 
36 #include <string>
37 #include <vector>
38 
39 struct pn_message_t;
40 
41 namespace proton {
42 
47 class message {
48  public:
51  class property_map : public internal::cached_map<std::string, scalar> {};
52 
55  class annotation_map : public internal::cached_map<annotation_key, value> {};
56 
58  PN_CPP_EXTERN message();
59 
61  PN_CPP_EXTERN message(const message&);
62 
64  PN_CPP_EXTERN message& operator=(const message&);
65 
66 #if PN_CPP_HAS_RVALUE_REFERENCES
67  PN_CPP_EXTERN message(message&&);
69 
71  PN_CPP_EXTERN message& operator=(message&&);
72 #endif
73 
76  PN_CPP_EXTERN message(const value& x);
77 
78  PN_CPP_EXTERN ~message();
79 
82 
84  PN_CPP_EXTERN void clear();
85 
90  PN_CPP_EXTERN void id(const message_id& id);
91 
93  PN_CPP_EXTERN message_id id() const;
94 
96  PN_CPP_EXTERN void user(const std::string &user);
97 
99  PN_CPP_EXTERN std::string user() const;
100 
103  PN_CPP_EXTERN void encode(std::vector<char> &bytes) const;
104 
106  PN_CPP_EXTERN std::vector<char> encode() const;
107 
109  PN_CPP_EXTERN void decode(const std::vector<char> &bytes);
110 
112 
115 
117  PN_CPP_EXTERN void to(const std::string &addr);
118 
120  PN_CPP_EXTERN std::string to() const;
121 
124  PN_CPP_EXTERN void address(const std::string &addr);
125  PN_CPP_EXTERN std::string address() const;
127 
129  PN_CPP_EXTERN void reply_to(const std::string &addr);
130 
132  PN_CPP_EXTERN std::string reply_to() const;
133 
135  PN_CPP_EXTERN void correlation_id(const message_id&);
136 
138  PN_CPP_EXTERN message_id correlation_id() const;
139 
141 
144 
146  PN_CPP_EXTERN void body(const value& x);
147 
149  PN_CPP_EXTERN const value& body() const;
150 
152  PN_CPP_EXTERN value& body();
153 
155  PN_CPP_EXTERN void subject(const std::string &s);
156 
158  PN_CPP_EXTERN std::string subject() const;
159 
161  PN_CPP_EXTERN void content_type(const std::string &s);
162 
164  PN_CPP_EXTERN std::string content_type() const;
165 
167  PN_CPP_EXTERN void content_encoding(const std::string &s);
168 
170  PN_CPP_EXTERN std::string content_encoding() const;
171 
173  PN_CPP_EXTERN void expiry_time(timestamp t);
174 
176  PN_CPP_EXTERN timestamp expiry_time() const;
177 
179  PN_CPP_EXTERN void creation_time(timestamp t);
180 
182  PN_CPP_EXTERN timestamp creation_time() const;
183 
193  PN_CPP_EXTERN bool inferred() const;
194 
196  PN_CPP_EXTERN void inferred(bool);
197 
199 
202 
207  PN_CPP_EXTERN bool durable() const;
208 
210  PN_CPP_EXTERN void durable(bool);
211 
219  PN_CPP_EXTERN duration ttl() const;
220 
222  PN_CPP_EXTERN void ttl(duration);
223 
231  PN_CPP_EXTERN uint8_t priority() const;
232 
234  PN_CPP_EXTERN void priority(uint8_t);
235 
244 
245  // XXX The triple-not in the last sentence above is confusing.
246 
247  PN_CPP_EXTERN bool first_acquirer() const;
248 
250  PN_CPP_EXTERN void first_acquirer(bool);
251 
256  PN_CPP_EXTERN uint32_t delivery_count() const;
257 
259  PN_CPP_EXTERN void delivery_count(uint32_t);
260 
262 
265 
267  PN_CPP_EXTERN void group_id(const std::string &s);
268 
270  PN_CPP_EXTERN std::string group_id() const;
271 
273  PN_CPP_EXTERN void reply_to_group_id(const std::string &s);
274 
276  PN_CPP_EXTERN std::string reply_to_group_id() const;
277 
283  PN_CPP_EXTERN int32_t group_sequence() const;
284 
286  PN_CPP_EXTERN void group_sequence(int32_t);
287 
289 
292 
295  PN_CPP_EXTERN property_map& properties();
296 
299  PN_CPP_EXTERN const property_map& properties() const;
300 
303  PN_CPP_EXTERN annotation_map& message_annotations();
304 
307  PN_CPP_EXTERN const annotation_map& message_annotations() const;
308 
311  PN_CPP_EXTERN annotation_map& delivery_annotations();
312 
315  PN_CPP_EXTERN const annotation_map& delivery_annotations() const;
316 
318 
320  PN_CPP_EXTERN static const uint8_t default_priority;
321 
323  private:
324  pn_message_t *pn_msg() const;
325 
326  mutable pn_message_t *pn_msg_;
327  mutable internal::value_ref body_;
328  mutable property_map application_properties_;
329  mutable annotation_map message_annotations_;
330  mutable annotation_map delivery_annotations_;
331 
333  void decode(proton::delivery);
334 
335  PN_CPP_EXTERN friend void swap(message&, message&);
336  friend class messaging_adapter;
338 };
339 
340 } // proton
341 
342 #endif // PROTON_MESSAGE_HPP
duration ttl() const
Get the TTL.
An AMQP message.
Definition: message.hpp:47
message_id id() const
Get the message ID.
std::string to() const
Get the destination address.
std::string subject() const
Get the subject.
std::string user() const
Get the user name or ID.
A span of time in milliseconds.
Definition: duration.hpp:36
message_id correlation_id() const
Get the ID for matching related messages.
Experimental - A map of AMQP annotation keys and AMQP values.
Definition: message.hpp:55
void decode(const std::vector< char > &bytes)
Decode from string data into the message.
timestamp expiry_time() const
Get the expiration time.
annotation_map & message_annotations()
Experimental - Get the message annotations map.
annotation_map & delivery_annotations()
Experimental - Get the delivery annotations map.
A received message.
Definition: delivery.hpp:36
Experimental - A map of string keys and AMQP scalar values.
Definition: message.hpp:51
uint32_t delivery_count() const
Get the delivery count.
std::string reply_to_group_id() const
Get the reply-to group ID.
timestamp creation_time() const
Get the creation time.
std::string reply_to() const
Get the address for replies.
A 64-bit timestamp in milliseconds since the Unix epoch.
Definition: timestamp.hpp:32
bool durable() const
Get the durable flag.
A holder for any AMQP value, simple or complex.
Definition: value.hpp:55
message & operator=(const message &)
Copy a message.
void clear()
Clear the message content and properties.
uint8_t priority() const
Get the priority.
bool inferred() const
Get the inferred flag.
std::string content_encoding() const
Get the content encoding of the body.
static const uint8_t default_priority
Default priority assigned to new messages.
Definition: message.hpp:320
int32_t group_sequence() const
Get the group sequence.
std::string group_id() const
Get the message group ID.
property_map & properties()
Experimental - Get the application properties map.
std::vector< char > encode() const
Return encoded message as a byte vector.
bool first_acquirer() const
Get the first acquirer flag.
The main Proton namespace.
Definition: annotation_key.hpp:30
const value & body() const
Get the body.
An AMQP message ID.
Definition: message_id.hpp:44
std::string content_type() const
Get the content type of the body.
message()
Create an empty message.