Skip to content

Commit 428366b

Browse files
Add has_more_replies to WriteParams and SampleInfo (#5898)
* Refs #23365. Rule of zero in SampleIdentity. Signed-off-by: Miguel Company <[email protected]> * Refs #23365. Add new filed to SampleIdentity. Signed-off-by: Miguel Company <[email protected]> * Refs #23365. Add (de)serializatrion of new field. Signed-off-by: Miguel Company <[email protected]> * Refs #23365. Move new filed to WriteParams. Signed-off-by: Miguel Company <[email protected]> * Refs #23365. Return new field in SampleInfo. Signed-off-by: Miguel Company <[email protected]> * Refs #23365. Use new field when sending reply. Signed-off-by: Miguel Company <[email protected]> * Refs #23365. Add blackbox test. Signed-off-by: Miguel Company <[email protected]> * Refs #23365. Make transmission of new flag independent of related_sample_identity. Signed-off-by: Miguel Company <[email protected]> * Refs #23365. Update versions.md Signed-off-by: Miguel Company <[email protected]> --------- Signed-off-by: Miguel Company <[email protected]>
1 parent de7e952 commit 428366b

File tree

12 files changed

+188
-56
lines changed

12 files changed

+188
-56
lines changed

include/fastdds/dds/core/policy/ParameterTypes.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,9 @@ enum ParameterId_t : uint16_t
184184
PID_RTPS_RELIABLE_READER = 0x8201,
185185
PID_READER_RESOURCE_LIMITS = 0x8202,
186186
/* Participant specific */
187-
PID_WIREPROTOCOL_CONFIG = 0x8300
187+
PID_WIREPROTOCOL_CONFIG = 0x8300,
188+
/* RPC specific */
189+
PID_RPC_MORE_REPLIES = 0x8400
188190
};
189191

190192
/*!

include/fastdds/dds/subscriber/SampleInfo.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ struct SampleInfo
8787
//!Related Sample Identity (Extension for RPC)
8888
rtps::SampleIdentity related_sample_identity;
8989

90+
//!Flag to indicate if there are more replies (Extension for RPC)
91+
bool has_more_replies = false;
92+
9093
};
9194

9295
} // namespace dds

include/fastdds/rtps/common/SampleIdentity.hpp

Lines changed: 2 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -34,57 +34,6 @@ class FASTDDS_EXPORTED_API SampleIdentity
3434
{
3535
public:
3636

37-
/*!
38-
* @brief Default constructor. Constructs an unknown SampleIdentity.
39-
*/
40-
SampleIdentity()
41-
: writer_guid_(GUID_t::unknown())
42-
, sequence_number_(SequenceNumber_t::unknown())
43-
{
44-
}
45-
46-
/*!
47-
* @brief Copy constructor.
48-
*/
49-
SampleIdentity(
50-
const SampleIdentity& sample_id)
51-
: writer_guid_(sample_id.writer_guid_)
52-
, sequence_number_(sample_id.sequence_number_)
53-
{
54-
}
55-
56-
/*!
57-
* @brief Move constructor.
58-
*/
59-
SampleIdentity(
60-
SampleIdentity&& sample_id)
61-
: writer_guid_(std::move(sample_id.writer_guid_))
62-
, sequence_number_(std::move(sample_id.sequence_number_))
63-
{
64-
}
65-
66-
/*!
67-
* @brief Assignment operator.
68-
*/
69-
SampleIdentity& operator =(
70-
const SampleIdentity& sample_id)
71-
{
72-
writer_guid_ = sample_id.writer_guid_;
73-
sequence_number_ = sample_id.sequence_number_;
74-
return *this;
75-
}
76-
77-
/*!
78-
* @brief Move constructor.
79-
*/
80-
SampleIdentity& operator =(
81-
SampleIdentity&& sample_id)
82-
{
83-
writer_guid_ = std::move(sample_id.writer_guid_);
84-
sequence_number_ = std::move(sample_id.sequence_number_);
85-
return *this;
86-
}
87-
8837
/*!
8938
* @brief
9039
*/
@@ -171,9 +120,9 @@ class FASTDDS_EXPORTED_API SampleIdentity
171120

172121
private:
173122

174-
GUID_t writer_guid_;
123+
GUID_t writer_guid_ = GUID_t::unknown();
175124

176-
SequenceNumber_t sequence_number_;
125+
SequenceNumber_t sequence_number_ = SequenceNumber_t::unknown();
177126

178127
friend std::istream& operator >>(
179128
std::istream& input,

include/fastdds/rtps/common/WriteParams.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,18 @@ class FASTDDS_EXPORTED_API WriteParams
219219
return *this;
220220
}
221221

222+
bool has_more_replies() const
223+
{
224+
return has_more_replies_;
225+
}
226+
227+
WriteParams& has_more_replies(
228+
bool more_replies)
229+
{
230+
has_more_replies_ = more_replies;
231+
return *this;
232+
}
233+
222234
static WriteParams WRITE_PARAM_DEFAULT;
223235

224236
/**
@@ -259,6 +271,8 @@ class FASTDDS_EXPORTED_API WriteParams
259271
Time_t source_timestamp_{ -1, TIME_T_INFINITE_NANOSECONDS };
260272
/// User write data
261273
UserWriteDataPtr user_write_data_{nullptr};
274+
/// Flag to indicate if there are more replies
275+
bool has_more_replies_ = false;
262276
};
263277

264278
} // namespace rtps

src/cpp/fastdds/core/policy/ParameterList.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,19 @@ bool ParameterList::updateCacheChangeFromInlineQos(
9999
break;
100100
}
101101

102+
case PID_RPC_MORE_REPLIES:
103+
{
104+
// Ignore custom PID when coming from other vendors
105+
if (rtps::c_VendorId_eProsima != change.vendor_id)
106+
{
107+
return true;
108+
}
109+
110+
change.write_params.has_more_replies(true);
111+
112+
break;
113+
}
114+
102115
case PID_STATUS_INFO:
103116
{
104117
ParameterStatusInfo_t p(pid, plength);

src/cpp/fastdds/core/policy/ParameterSerializer.hpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,9 @@ class ParameterSerializer<Parameter_t>
155155
rtps::CDRMessage_t* cdr_message,
156156
const rtps::SampleIdentity& sample_id)
157157
{
158-
if (cdr_message->pos + 28 > cdr_message->max_size)
158+
uint32_t required_size = 24 + 4; // 24 for the sample identity and 4 for the PID and length
159+
160+
if (cdr_message->pos + required_size > cdr_message->max_size)
159161
{
160162
return false;
161163
}
@@ -168,6 +170,7 @@ class ParameterSerializer<Parameter_t>
168170
sample_id.writer_guid().entityId.value, rtps::EntityId_t::size);
169171
rtps::CDRMessage::addInt32(cdr_message, sample_id.sequence_number().high);
170172
rtps::CDRMessage::addUInt32(cdr_message, sample_id.sequence_number().low);
173+
171174
return true;
172175
}
173176

@@ -198,6 +201,19 @@ class ParameterSerializer<Parameter_t>
198201
return true;
199202
}
200203

204+
static inline bool add_parameter_more_replies(
205+
rtps::CDRMessage_t* cdr_message)
206+
{
207+
if (cdr_message->pos + 4 > cdr_message->max_size)
208+
{
209+
return false;
210+
}
211+
212+
rtps::CDRMessage::addUInt16(cdr_message, dds::PID_RPC_MORE_REPLIES);
213+
rtps::CDRMessage::addUInt16(cdr_message, 0);
214+
return true;
215+
}
216+
201217
static inline uint32_t cdr_serialized_size(
202218
const fastcdr::string_255& str)
203219
{
@@ -846,6 +862,7 @@ inline bool ParameterSerializer<ParameterSampleIdentity_t>::read_content_from_cd
846862
parameter.sample_id.writer_guid().entityId.value, rtps::EntityId_t::size);
847863
valid &= rtps::CDRMessage::readInt32(cdr_message, &parameter.sample_id.sequence_number().high);
848864
valid &= rtps::CDRMessage::readUInt32(cdr_message, &parameter.sample_id.sequence_number().low);
865+
849866
return valid;
850867
}
851868

src/cpp/fastdds/rpc/ReplierImpl.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ ReturnCode_t ReplierImpl::send_reply(
121121

122122
rtps::WriteParams wparams;
123123
wparams.related_sample_identity(info.related_sample_identity);
124+
wparams.has_more_replies(info.has_more_replies);
124125

125126
return replier_writer_->write(data, wparams);
126127
}

src/cpp/fastdds/subscriber/DataReaderImpl/ReadTakeCommand.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ struct ReadTakeCommand
247247
info.sample_identity.writer_guid(item->writerGUID);
248248
info.sample_identity.sequence_number(item->sequenceNumber);
249249
info.related_sample_identity = item->write_params.sample_identity();
250+
info.has_more_replies = item->write_params.has_more_replies();
250251

251252
info.valid_data = true;
252253

src/cpp/rtps/history/WriterHistory.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,10 @@ void WriterHistory::set_fragments(
475475
{
476476
inline_qos_size += (2 * fastdds::dds::ParameterSerializer<Parameter_t>::PARAMETER_SAMPLE_IDENTITY_SIZE);
477477
}
478+
if (change->write_params.has_more_replies())
479+
{
480+
inline_qos_size += 4u;
481+
}
478482
if (ChangeKind_t::ALIVE != change->kind && TopicKind_t::WITH_KEY == mp_writer->getAttributes().topicKind)
479483
{
480484
inline_qos_size += fastdds::dds::ParameterSerializer<Parameter_t>::PARAMETER_KEY_SIZE;

src/cpp/rtps/messages/submessages/DataMsg.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ struct DataMsgUtils
4747
(nullptr != inlineQos) ||
4848
((WITH_KEY == topicKind) &&
4949
(!change->writerGUID.is_builtin() || expectsInlineQos || change->kind != ALIVE)) ||
50-
(change->write_params.related_sample_identity() != SampleIdentity::unknown());
50+
(change->write_params.related_sample_identity() != SampleIdentity::unknown()) ||
51+
(change->write_params.has_more_replies());
5152

5253
dataFlag = ALIVE == change->kind &&
5354
change->serializedPayload.length > 0 && nullptr != change->serializedPayload.data;
@@ -134,6 +135,11 @@ struct DataMsgUtils
134135
change->write_params.related_sample_identity());
135136
}
136137

138+
if (change->write_params.has_more_replies())
139+
{
140+
fastdds::dds::ParameterSerializer<fastdds::dds::Parameter_t>::add_parameter_more_replies(msg);
141+
}
142+
137143
if (WITH_KEY == topicKind && (!change->writerGUID.is_builtin() || expectsInlineQos || ALIVE != change->kind))
138144
{
139145
fastdds::dds::ParameterSerializer<fastdds::dds::Parameter_t>::add_parameter_key(msg,

0 commit comments

Comments
 (0)