Coverage Report

Created: 2026-10-28 07:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/Fast-DDS/src/cpp/rtps/messages/RTPSMessageCreator.cpp
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
 * @file CDRMessageCreator.cpp
17
 *
18
 */
19
20
#include <rtps/messages/RTPSMessageCreator.hpp>
21
22
#include <fastdds/core/policy/ParameterList.hpp>
23
#include <fastdds/dds/log/Log.hpp>
24
#include <fastdds/rtps/common/VendorId_t.hpp>
25
26
using ParameterList = eprosima::fastdds::dds::ParameterList;
27
28
namespace eprosima {
29
namespace fastdds {
30
namespace rtps {
31
32
bool RTPSMessageCreator::addHeader(
33
        CDRMessage_t* msg,
34
        const GuidPrefix_t& guidPrefix,
35
        const ProtocolVersion_t& version,
36
        const fastdds::rtps::VendorId_t& vendorId)
37
0
{
38
0
    CDRMessage::addOctet(msg, 'R');
39
0
    CDRMessage::addOctet(msg, 'T');
40
0
    CDRMessage::addOctet(msg, 'P');
41
0
    CDRMessage::addOctet(msg, 'S');
42
43
0
    CDRMessage::addOctet(msg, version.m_major);
44
0
    CDRMessage::addOctet(msg, version.m_minor);
45
46
0
    CDRMessage::addOctet(msg, vendorId[0]);
47
0
    CDRMessage::addOctet(msg, vendorId[1]);
48
49
0
    CDRMessage::addData(msg, guidPrefix.value, 12);
50
0
    msg->length = msg->pos;
51
52
0
    return true;
53
0
}
54
55
bool RTPSMessageCreator::addHeader(
56
        CDRMessage_t* msg,
57
        const GuidPrefix_t& guidPrefix)
58
0
{
59
0
    return RTPSMessageCreator::addHeader(msg, guidPrefix, c_ProtocolVersion, c_VendorId_eProsima);
60
0
}
61
62
bool RTPSMessageCreator::addCustomContent(
63
        CDRMessage_t* msg,
64
        const octet* content,
65
        const size_t contentSize)
66
0
{
67
0
    CDRMessage::addData(msg, content, static_cast<uint32_t>(contentSize));
68
0
    msg->length = msg->pos;
69
70
0
    return true;
71
0
}
72
73
bool RTPSMessageCreator::addSubmessageHeader(
74
        CDRMessage_t* msg,
75
        octet id,
76
        octet flags,
77
        uint16_t size)
78
0
{
79
#if FASTDDS_IS_BIG_ENDIAN_TARGET
80
    msg->msg_endian = BIGEND;
81
#else
82
0
    flags = flags | BIT(0);
83
0
    msg->msg_endian = LITTLEEND;
84
0
#endif // if FASTDDS_IS_BIG_ENDIAN_TARGET
85
86
0
    CDRMessage::addOctet(msg, id);
87
0
    CDRMessage::addOctet(msg, flags);
88
0
    CDRMessage::addUInt16(msg, size);
89
0
    msg->length = msg->pos;
90
91
0
    return true;
92
0
}
93
94
bool RTPSMessageCreator::addSubmessageInfoTS(
95
        CDRMessage_t* msg,
96
        const Time_t& time,
97
        bool invalidateFlag)
98
0
{
99
0
    octet flags = 0x0;
100
0
    uint16_t size = 8;
101
#if FASTDDS_IS_BIG_ENDIAN_TARGET
102
    msg->msg_endian = BIGEND;
103
#else
104
0
    flags = flags | BIT(0);
105
0
    msg->msg_endian  = LITTLEEND;
106
0
#endif // if FASTDDS_IS_BIG_ENDIAN_TARGET
107
108
0
    if (invalidateFlag)
109
0
    {
110
0
        flags = flags | BIT(1);
111
0
        size = 0;
112
0
    }
113
114
0
    CDRMessage::addOctet(msg, INFO_TS);
115
0
    CDRMessage::addOctet(msg, flags);
116
0
    CDRMessage::addUInt16(msg, size);
117
0
    if (!invalidateFlag)
118
0
    {
119
0
        CDRMessage::addInt32(msg, time.seconds());
120
0
        CDRMessage::addUInt32(msg, time.fraction());
121
0
    }
122
123
0
    return true;
124
0
}
125
126
bool RTPSMessageCreator::addSubmessageInfoSRC(
127
        CDRMessage_t* msg,
128
        const ProtocolVersion_t& version,
129
        const fastdds::rtps::VendorId_t& vendorId,
130
        const GuidPrefix_t& guidPrefix)
131
0
{
132
0
    octet flags = 0x0;
133
0
    uint16_t size = 20;
134
#if FASTDDS_IS_BIG_ENDIAN_TARGET
135
    msg->msg_endian = BIGEND;
136
#else
137
0
    flags = flags | BIT(0);
138
0
    msg->msg_endian = LITTLEEND;
139
0
#endif // if FASTDDS_IS_BIG_ENDIAN_TARGET
140
141
0
    CDRMessage::addOctet(msg, INFO_SRC);
142
0
    CDRMessage::addOctet(msg, flags);
143
0
    CDRMessage::addUInt16(msg, size);
144
0
    CDRMessage::addUInt32(msg, 0);
145
0
    CDRMessage::addOctet(msg, version.m_major);
146
0
    CDRMessage::addOctet(msg, version.m_minor);
147
148
0
    CDRMessage::addOctet(msg, vendorId[0]);
149
0
    CDRMessage::addOctet(msg, vendorId[1]);
150
151
0
    CDRMessage::addData(msg, guidPrefix.value, 12);
152
153
0
    return true;
154
0
}
155
156
bool RTPSMessageCreator::addSubmessageInfoDST(
157
        CDRMessage_t* msg,
158
        const GuidPrefix_t& guidP)
159
0
{
160
0
    octet flags = 0x0;
161
0
    uint16_t size = 12;
162
#if FASTDDS_IS_BIG_ENDIAN_TARGET
163
    msg->msg_endian = BIGEND;
164
#else
165
0
    flags = flags | BIT(0);
166
0
    msg->msg_endian  = LITTLEEND;
167
0
#endif // if FASTDDS_IS_BIG_ENDIAN_TARGET
168
169
0
    CDRMessage::addOctet(msg, INFO_DST);
170
0
    CDRMessage::addOctet(msg, flags);
171
0
    CDRMessage::addUInt16(msg, size);
172
0
    CDRMessage::addData(msg, guidP.value, 12);
173
174
0
    return true;
175
0
}
176
177
bool RTPSMessageCreator::addSubmessageInfoTS_Now(
178
        CDRMessage_t* msg,
179
        bool invalidateFlag)
180
0
{
181
0
    Time_t time_now;
182
0
    Time_t::now(time_now);
183
0
    return RTPSMessageCreator::addSubmessageInfoTS(msg, time_now, invalidateFlag);
184
0
}
185
186
} // namespace rtps
187
} /* namespace rtps */
188
} /* namespace eprosima */
189
190
191
#include <rtps/messages/submessages/DataMsg.hpp>
192
#include <rtps/messages/submessages/HeartbeatMsg.hpp>
193
#include <rtps/messages/submessages/AckNackMsg.hpp>
194
#include <rtps/messages/submessages/GapMsg.hpp>