/src/Fast-DDS/src/cpp/rtps/messages/submessages/GapMsg.hpp
Line | Count | Source |
1 | | // Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima). |
2 | | // |
3 | | // Licensed under the Apache License, Version 2.0 (the "License"); |
4 | | // you may not use this file except in compliance with the License. |
5 | | // You may obtain a copy of the License at |
6 | | // |
7 | | // http://www.apache.org/licenses/LICENSE-2.0 |
8 | | // |
9 | | // Unless required by applicable law or agreed to in writing, software |
10 | | // distributed under the License is distributed on an "AS IS" BASIS, |
11 | | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
12 | | // See the License for the specific language governing permissions and |
13 | | // limitations under the License. |
14 | | |
15 | | /* |
16 | | * GapMsg.hpp |
17 | | * |
18 | | */ |
19 | | |
20 | | namespace eprosima { |
21 | | namespace fastdds { |
22 | | namespace rtps { |
23 | | |
24 | | bool RTPSMessageCreator::addMessageGap( |
25 | | CDRMessage_t* msg, |
26 | | const GuidPrefix_t& guidprefix, |
27 | | const GuidPrefix_t& remoteGuidPrefix, |
28 | | const SequenceNumber_t& seqNumFirst, |
29 | | const SequenceNumberSet_t& seqNumList, |
30 | | const EntityId_t& readerId, |
31 | | const EntityId_t& writerId) |
32 | 0 | { |
33 | 0 | RTPSMessageCreator::addHeader(msg, guidprefix); |
34 | 0 | RTPSMessageCreator::addSubmessageInfoDST(msg, remoteGuidPrefix); |
35 | 0 | RTPSMessageCreator::addSubmessageInfoTS_Now(msg, false); |
36 | 0 | RTPSMessageCreator::addSubmessageGap(msg, seqNumFirst, seqNumList, readerId, writerId); |
37 | 0 | return true; |
38 | 0 | } |
39 | | |
40 | | bool RTPSMessageCreator::addSubmessageGap( |
41 | | CDRMessage_t* msg, |
42 | | const SequenceNumber_t& seqNumFirst, |
43 | | const SequenceNumberSet_t& seqNumList, |
44 | | const EntityId_t& readerId, |
45 | | const EntityId_t& writerId) |
46 | 0 | { |
47 | 0 | octet flags = 0x0; |
48 | 0 | Endianness_t old_endianess = msg->msg_endian; |
49 | | #if FASTDDS_IS_BIG_ENDIAN_TARGET |
50 | | msg->msg_endian = BIGEND; |
51 | | #else |
52 | 0 | flags = flags | BIT(0); |
53 | 0 | msg->msg_endian = LITTLEEND; |
54 | 0 | #endif // if FASTDDS_IS_BIG_ENDIAN_TARGET |
55 | | |
56 | | // Submessage header. |
57 | 0 | CDRMessage::addOctet(msg, GAP); |
58 | 0 | CDRMessage::addOctet(msg, flags); |
59 | 0 | uint32_t submessage_size_pos = msg->pos; |
60 | 0 | uint16_t submessage_size = 0; |
61 | 0 | CDRMessage::addUInt16(msg, submessage_size); |
62 | 0 | uint32_t position_size_count_size = msg->pos; |
63 | |
|
64 | 0 | CDRMessage::addEntityId(msg, &readerId); |
65 | 0 | CDRMessage::addEntityId(msg, &writerId); |
66 | | //Add Sequence Number |
67 | 0 | CDRMessage::addSequenceNumber(msg, &seqNumFirst); |
68 | 0 | CDRMessage::addSequenceNumberSet(msg, &seqNumList); |
69 | | |
70 | | //TODO(Ricardo) Improve. |
71 | 0 | submessage_size = uint16_t(msg->pos - position_size_count_size); |
72 | 0 | octet* o = reinterpret_cast<octet*>(&submessage_size); |
73 | 0 | if (msg->msg_endian == DEFAULT_ENDIAN) |
74 | 0 | { |
75 | 0 | msg->buffer[submessage_size_pos] = *(o); |
76 | 0 | msg->buffer[submessage_size_pos + 1] = *(o + 1); |
77 | 0 | } |
78 | 0 | else |
79 | 0 | { |
80 | 0 | msg->buffer[submessage_size_pos] = *(o + 1); |
81 | 0 | msg->buffer[submessage_size_pos + 1] = *(o); |
82 | 0 | } |
83 | |
|
84 | 0 | msg->msg_endian = old_endianess; |
85 | |
|
86 | 0 | return true; |
87 | 0 | } |
88 | | |
89 | | } // namespace rtps |
90 | | } // namespace fastdds |
91 | | } // namespace eprosima |