7 #ifndef EVS_MESSAGE2_HPP
8 #define EVS_MESSAGE2_HPP
12 #include "gcomm/view.hpp"
15 #include "evs_seqno.hpp"
17 #include "gu_datetime.hpp"
18 #include "gu_convert.hpp"
25 std::ostream& operator<<(std::ostream&,
const MessageNode&);
26 class MessageNodeList;
28 std::ostream& operator<<(std::ostream&,
const Message&);
30 class AggregateMessage;
31 std::ostream& operator<<(std::ostream&,
const AggregateMessage&);
32 class DelegateMessage;
50 const bool suspected =
false,
51 const SegmentId segment = 0,
52 const seqno_t leave_seq = -1,
54 const seqno_t safe_seq = -1,
56 operational_(operational),
57 suspected_ (suspected ),
59 leave_seq_ (leave_seq ),
61 safe_seq_ (safe_seq ),
67 operational_ (mn.operational_),
68 suspected_ (mn.suspected_ ),
69 segment_ (mn.segment_ ),
70 leave_seq_ (mn.leave_seq_ ),
71 view_id_ (mn.view_id_ ),
72 safe_seq_ (mn.safe_seq_ ),
73 im_range_ (mn.im_range_ )
76 bool operational()
const {
return operational_ ; }
77 bool suspected()
const {
return suspected_ ; }
78 bool leaving()
const {
return (leave_seq_ != -1) ; }
79 seqno_t leave_seq()
const {
return leave_seq_ ; }
80 const ViewId& view_id()
const {
return view_id_ ; }
81 seqno_t safe_seq()
const {
return safe_seq_ ; }
82 Range im_range()
const {
return im_range_ ; }
83 SegmentId segment()
const {
return segment_ ; }
87 return (operational_ == cmp.operational_ &&
88 suspected_ == cmp.suspected_ &&
89 leave_seq_ == cmp.leave_seq_ &&
90 view_id_ == cmp.view_id_ &&
91 safe_seq_ == cmp.safe_seq_ &&
92 im_range_ == cmp.im_range_);
95 size_t serialize(gu::byte_t* buf,
size_t buflen,
size_t offset)
const;
96 size_t unserialize(
const gu::byte_t* buf,
size_t buflen,
size_t offset);
97 static size_t serial_size();
101 F_OPERATIONAL = 1 << 0,
145 static const uint8_t F_COMMIT = 0x10;
146 static const uint8_t
F_BC = 0x20;
184 Order
order()
const {
return order_; }
191 seqno_t
seq()
const {
return seq_; }
212 uint8_t
flags()
const {
return flags_; }
240 const gcomm::ViewId& install_view_id()
const {
return install_view_id_; }
274 gu::datetime::Date
tstamp()
const {
return tstamp_; }
276 size_t unserialize(
const gu::byte_t* buf,
size_t buflen,
size_t offset);
278 bool operator==(
const Message& cmp)
const;
285 version_ (msg.version_),
287 user_type_ (msg.user_type_),
290 seq_range_ (msg.seq_range_),
291 aru_seq_ (msg.aru_seq_),
292 fifo_seq_ (msg.fifo_seq_),
294 source_ (msg.source_),
295 source_view_id_ (msg.source_view_id_),
296 install_view_id_ (msg.install_view_id_),
297 range_uuid_ (msg.range_uuid_),
299 tstamp_ (msg.tstamp_),
300 node_list_ (msg.node_list_)
305 version_ = msg.version_;
307 user_type_ = msg.user_type_;
310 seq_range_ = msg.seq_range_;
311 aru_seq_ = msg.aru_seq_;
312 fifo_seq_ = msg.fifo_seq_;
314 source_ = msg.source_;
315 source_view_id_ = msg.source_view_id_;
316 install_view_id_ = msg.install_view_id_;
317 range_uuid_ = msg.range_uuid_;
319 tstamp_ = msg.tstamp_;
320 node_list_ = msg.node_list_;
334 const Order
order = O_DROP,
336 const seqno_t
seq = -1,
339 const uint8_t
flags = 0,
354 install_view_id_ (install_view_id),
357 tstamp_ (gu::datetime::Date::now()),
363 size_t serialize(gu::byte_t* buf,
size_t buflen,
size_t offset)
const;
365 size_t serial_size()
const;
381 gu::datetime::Date tstamp_;
396 const seqno_t
seq = -1,
399 const Order
order = O_SAFE,
402 const uint8_t
flags = 0) :
419 void set_aru_seq(
const seqno_t as) { aru_seq_ = as; }
421 size_t serialize(gu::byte_t* buf,
size_t buflen,
size_t offset)
const;
422 size_t unserialize(
const gu::byte_t* buf,
size_t buflen,
size_t offset,
423 bool skip_header =
false);
424 size_t serial_size()
const;
433 const size_t len = 0,
434 const uint8_t user_type = 0xff)
436 flags_ (gu::convert(flags, uint8_t(0))),
437 user_type_(user_type),
438 len_ (gu::convert(len, uint16_t(0)))
441 int flags()
const {
return flags_; }
442 size_t len()
const {
return len_; }
443 uint8_t user_type()
const {
return user_type_; }
445 size_t serialize(gu::byte_t* buf,
size_t buflen,
size_t offset)
const;
446 size_t unserialize(
const gu::byte_t* buf,
size_t buflen,
size_t offset);
447 size_t serial_size()
const;
450 return (flags_ == cmp.flags_ && len_ == cmp.len_ && user_type_ == cmp.user_type_);
459 inline std::ostream& gcomm::evs::operator<<(std::ostream& os,
const AggregateMessage& am)
461 return (os <<
"{flags=" << am.flags() <<
",len=" << am.len() <<
"}");
481 size_t serialize(gu::byte_t* buf,
size_t buflen,
size_t offset)
const;
482 size_t unserialize(
const gu::byte_t* buf,
size_t buflen,
size_t offset,
483 bool skip_header =
false);
484 size_t serial_size()
const;
493 const seqno_t
seq = -1,
498 const uint8_t
flags = 0) :
514 size_t serialize(gu::byte_t* buf,
size_t buflen,
size_t offset)
const;
515 size_t unserialize(
const gu::byte_t* buf,
size_t buflen,
size_t offset,
516 bool skip_header =
false);
517 size_t serial_size()
const;
526 const seqno_t
seq = -1,
546 size_t serialize(gu::byte_t* buf,
size_t buflen,
size_t offset)
const;
547 size_t unserialize(
const gu::byte_t* buf,
size_t buflen,
size_t offset,
548 bool skip_header =
false);
549 size_t serial_size()
const;
559 const seqno_t
seq = -1,
579 size_t serialize(gu::byte_t* buf,
size_t buflen,
size_t offset)
const;
580 size_t unserialize(
const gu::byte_t* buf,
size_t buflen,
size_t offset,
581 bool skip_header =
false);
582 size_t serial_size()
const;
591 const seqno_t
seq = -1,
594 const uint8_t
flags = 0) :
608 size_t serialize(gu::byte_t* buf,
size_t buflen,
size_t offset)
const;
609 size_t unserialize(
const gu::byte_t* buf,
size_t buflen,
size_t offset,
610 bool skip_header =
false);
611 size_t serial_size()
const;
620 const bool operational,
625 operational_ (operational),
629 void operator()(
const MessageNodeList::value_type& vt)
const
631 const MessageNode& node(MessageNodeList::value(vt));
632 if ((view_id_ ==
ViewId() ||
633 node.view_id() == view_id_ ) &&
634 ((operational_ ==
true &&
635 leaving_ ==
true ) ||
636 (node.operational() == operational_ &&
637 node.leaving() == leaving_ ) ) )
640 nl_.insert_unique(vt);
646 bool const operational_;
654 bool operator()(
const MessageNodeList::value_type& a,
655 const MessageNodeList::value_type& b)
const
658 MessageNodeList::value(b).view_id());
659 return (MessageNodeList::value(a).im_range().lu() <
660 MessageNodeList::value(b).im_range().lu());
667 bool operator()(
const MessageNodeList::value_type& a,
668 const MessageNodeList::value_type& b)
const
671 MessageNodeList::value(b).view_id());
672 return (MessageNodeList::value(a).im_range().hs() <
673 MessageNodeList::value(b).im_range().hs());
678 #endif // EVS_MESSAGE2_HPP
gu::datetime::Date tstamp() const
Definition: evs_message2.hpp:274
Definition: evs_message2.hpp:132
static const uint8_t F_AGGREGATE
Definition: evs_message2.hpp:144
Message(const uint8_t version=0, const Type type=T_NONE, const UUID &source=UUID::nil(), const ViewId &source_view_id=ViewId(), const ViewId &install_view_id=ViewId(), const uint8_t user_type=0xff, const Order order=O_DROP, const int64_t fifo_seq=-1, const seqno_t seq=-1, const seqno_t seq_range=-1, const seqno_t aru_seq=-1, const uint8_t flags=0, const UUID &range_uuid=UUID(), const Range range=Range(), const MessageNodeList &node_list=MessageNodeList())
Definition: evs_message2.hpp:328
uint8_t user_type() const
Definition: evs_message2.hpp:177
Definition: evs_seqno.hpp:31
Order order() const
Definition: evs_message2.hpp:184
Definition: evs_message2.hpp:429
Definition: evs_message2.hpp:520
Definition: evs_message2.hpp:131
Definition: evs_message2.hpp:465
Definition: evs_message2.hpp:127
void set_source(const UUID &uuid)
Definition: evs_message2.hpp:219
Definition: evs_message2.hpp:128
Definition: evs_message2.hpp:552
Message order type enumeration.
static const uint8_t F_MSG_MORE
Definition: evs_message2.hpp:136
Type type() const
Definition: evs_message2.hpp:159
Definition: evs_message2.hpp:585
Definition: evs_message2.hpp:664
Definition: evs_message2.hpp:130
const UUID & range_uuid() const
Definition: evs_message2.hpp:247
Definition: evs_message2.hpp:615
static const uint8_t F_RETRANS
Definition: evs_message2.hpp:137
seqno_t seq_range() const
Definition: evs_message2.hpp:198
Range range() const
Definition: evs_message2.hpp:254
Definition: evs_message2.hpp:390
const gcomm::ViewId & source_view_id() const
Definition: evs_message2.hpp:238
Definition: evs_message2.hpp:129
uint8_t flags() const
Definition: evs_message2.hpp:212
const UUID & source() const
Definition: evs_message2.hpp:230
uint8_t version() const
Definition: evs_message2.hpp:152
Definition: evs_message2.hpp:487
Definition: evs_message2.hpp:46
seqno_t aru_seq() const
Definition: evs_message2.hpp:205
bool is_membership() const
Definition: evs_message2.hpp:166
static const uint8_t F_SOURCE
Message source has been set explicitly via set_source()
Definition: evs_message2.hpp:142
Definition: evs_message2.hpp:113
Message(const Message &msg)
Definition: evs_message2.hpp:284
seqno_t seq() const
Definition: evs_message2.hpp:191
#define gcomm_assert(cond_)
Definition: exception.hpp:21
static const uint8_t F_BC
Definition: evs_message2.hpp:146
Definition: evs_message2.hpp:121
Definition: evs_message2.hpp:651
const MessageNodeList & node_list() const
Definition: evs_message2.hpp:269
Type
Definition: evs_message2.hpp:124
int64_t fifo_seq() const
Definition: evs_message2.hpp:262