Line data Source code
1 : /*
2 : *
3 : *
4 : * Distributed under the OpenDDS License.
5 : * See: http://www.opendds.org/license.html
6 : */
7 :
8 : #include "DCPS/DdsDcps_pch.h" //Only the _pch include should start with DCPS/
9 :
10 : #include "Qos_Helper.h"
11 : #if !defined (__ACE_INLINE__)
12 : #include "Qos_Helper.inl"
13 : #endif /* __ACE_INLINE__ */
14 :
15 : #include "debug.h"
16 : #include "DCPS_Utils.h"
17 :
18 : OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL
19 :
20 : namespace OpenDDS {
21 : namespace DCPS {
22 :
23 0 : bool Qos_Helper::valid(const DDS::DomainParticipantQos& qos)
24 : {
25 0 : if (!valid(qos.user_data)) {
26 0 : if (log_level >= LogLevel::Notice) {
27 0 : ACE_ERROR((LM_NOTICE,
28 : "(%P|%t) NOTICE: Qos_Helper::valid::DomainParticipantQos, invalid user_data qos.\n"));
29 : }
30 0 : return false;
31 : }
32 :
33 0 : if (!valid(qos.entity_factory)) {
34 0 : if (log_level >= LogLevel::Notice) {
35 0 : ACE_ERROR((LM_NOTICE,
36 : "(%P|%t) NOTICE: Qos_Helper::valid::DomainParticipantQos, invalid entity_factory qos.\n"));
37 : }
38 0 : return false;
39 : }
40 :
41 0 : if (!valid(qos.property)) {
42 0 : if (log_level >= LogLevel::Notice) {
43 0 : ACE_ERROR((LM_NOTICE,
44 : "(%P|%t) NOTICE: Qos_Helper::valid::DomainParticipantQos, invalid property qos.\n"));
45 : }
46 0 : return false;
47 : }
48 :
49 0 : return true;
50 : }
51 :
52 0 : bool Qos_Helper::valid(const DDS::TopicQos& qos)
53 : {
54 0 : if (!valid(qos.topic_data)) {
55 0 : if (log_level >= LogLevel::Notice) {
56 0 : ACE_ERROR((LM_NOTICE,
57 : "(%P|%t) NOTICE: Qos_Helper::valid::TopicQos, invalid topic_data qos.\n"));
58 : }
59 0 : return false;
60 : }
61 :
62 0 : if (!valid(qos.durability)) {
63 0 : if (log_level >= LogLevel::Notice) {
64 0 : ACE_ERROR((LM_NOTICE,
65 : "(%P|%t) NOTICE: Qos_Helper::valid::TopicQos, invalid durability qos.\n"));
66 : }
67 0 : return false;
68 : }
69 :
70 : #ifndef OPENDDS_NO_PERSISTENCE_PROFILE
71 0 : if (!valid(qos.durability_service)) {
72 0 : if (log_level >= LogLevel::Notice) {
73 0 : ACE_ERROR((LM_NOTICE,
74 : "(%P|%t) NOTICE: Qos_Helper::valid::TopicQos, invalid durability_service qos.\n"));
75 : }
76 0 : return false;
77 : }
78 : #endif
79 :
80 0 : if (!valid(qos.deadline)) {
81 0 : if (log_level >= LogLevel::Notice) {
82 0 : ACE_ERROR((LM_NOTICE,
83 : "(%P|%t) NOTICE: Qos_Helper::valid::TopicQos, invalid deadline qos.\n"));
84 : }
85 0 : return false;
86 : }
87 :
88 0 : if (!valid(qos.latency_budget)) {
89 0 : if (log_level >= LogLevel::Notice) {
90 0 : ACE_ERROR((LM_NOTICE,
91 : "(%P|%t) NOTICE: Qos_Helper::valid::TopicQos, invalid latency_budget qos.\n"));
92 : }
93 0 : return false;
94 : }
95 :
96 0 : if (!valid(qos.liveliness)) {
97 0 : if (log_level >= LogLevel::Notice) {
98 0 : ACE_ERROR((LM_NOTICE,
99 : "(%P|%t) NOTICE: Qos_Helper::valid::TopicQos, invalid liveliness qos.\n"));
100 : }
101 0 : return false;
102 : }
103 :
104 0 : if (!valid(qos.destination_order)) {
105 0 : if (log_level >= LogLevel::Notice) {
106 0 : ACE_ERROR((LM_NOTICE,
107 : "(%P|%t) NOTICE: Qos_Helper::valid::TopicQos, invalid destination_order qos.\n"));
108 : }
109 0 : return false;
110 : }
111 :
112 0 : if (!valid(qos.history)) {
113 0 : if (log_level >= LogLevel::Notice) {
114 0 : ACE_ERROR((LM_NOTICE,
115 : "(%P|%t) NOTICE: Qos_Helper::valid::TopicQos, invalid history qos.\n"));
116 : }
117 0 : return false;
118 : }
119 :
120 0 : if (!valid(qos.resource_limits)) {
121 0 : if (log_level >= LogLevel::Notice) {
122 0 : ACE_ERROR((LM_NOTICE,
123 : "(%P|%t) NOTICE: Qos_Helper::valid::TopicQos, invalid resource_limits qos.\n"));
124 : }
125 0 : return false;
126 : }
127 :
128 0 : if (!valid(qos.transport_priority)) {
129 0 : if (log_level >= LogLevel::Notice) {
130 0 : ACE_ERROR((LM_NOTICE,
131 : "(%P|%t) NOTICE: Qos_Helper::valid::TopicQos, invalid transport_priority qos.\n"));
132 : }
133 0 : return false;
134 : }
135 :
136 0 : if (!valid(qos.lifespan)) {
137 0 : if (log_level >= LogLevel::Notice) {
138 0 : ACE_ERROR((LM_NOTICE,
139 : "(%P|%t) NOTICE: Qos_Helper::valid::TopicQos, invalid lifespan qos.\n"));
140 : }
141 0 : return false;
142 : }
143 :
144 0 : if (!valid(qos.ownership)) {
145 0 : if (log_level >= LogLevel::Notice) {
146 0 : ACE_ERROR((LM_NOTICE,
147 : "(%P|%t) NOTICE: Qos_Helper::valid::TopicQos, invalid ownership qos.\n"));
148 : }
149 0 : return false;
150 : }
151 :
152 0 : if (!valid(qos.representation)) {
153 0 : if (log_level >= LogLevel::Notice) {
154 0 : ACE_ERROR((LM_NOTICE,
155 : "(%P|%t) NOTICE: Qos_Helper::valid::TopicQos, invalid representation qos.\n"));
156 : }
157 0 : return false;
158 : }
159 :
160 0 : return true;
161 : }
162 :
163 0 : bool Qos_Helper::valid(const DDS::DataWriterQos& qos)
164 : {
165 0 : if (!valid(qos.durability)) {
166 0 : if (log_level >= LogLevel::Notice) {
167 0 : ACE_ERROR((LM_NOTICE,
168 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid durability qos.\n"));
169 : }
170 0 : return false;
171 : }
172 :
173 : #ifndef OPENDDS_NO_PERSISTENCE_PROFILE
174 0 : if (!valid(qos.durability_service)) {
175 0 : if (log_level >= LogLevel::Notice) {
176 0 : ACE_ERROR((LM_NOTICE,
177 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid durability_service qos.\n"));
178 : }
179 0 : return false;
180 : }
181 : #endif
182 :
183 0 : if (!valid(qos.deadline)) {
184 0 : if (log_level >= LogLevel::Notice) {
185 0 : ACE_ERROR((LM_NOTICE,
186 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid deadline qos.\n"));
187 : }
188 0 : return false;
189 : }
190 :
191 0 : if (!valid(qos.latency_budget)) {
192 0 : if (log_level >= LogLevel::Notice) {
193 0 : ACE_ERROR((LM_NOTICE,
194 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid latency_budget qos.\n"));
195 : }
196 0 : return false;
197 : }
198 :
199 0 : if (!valid(qos.liveliness)) {
200 0 : if (log_level >= LogLevel::Notice) {
201 0 : ACE_ERROR((LM_NOTICE,
202 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid liveliness qos.\n"));
203 : }
204 0 : return false;
205 : }
206 :
207 0 : if (!valid(qos.destination_order)) {
208 0 : if (log_level >= LogLevel::Notice) {
209 0 : ACE_ERROR((LM_NOTICE,
210 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid destination_order qos.\n"));
211 : }
212 0 : return false;
213 : }
214 :
215 0 : if (!valid(qos.history)) {
216 0 : if (log_level >= LogLevel::Notice) {
217 0 : ACE_ERROR((LM_NOTICE,
218 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid history qos.\n"));
219 : }
220 0 : return false;
221 : }
222 :
223 0 : if (!valid(qos.resource_limits)) {
224 0 : if (log_level >= LogLevel::Notice) {
225 0 : ACE_ERROR((LM_NOTICE,
226 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid resource_limits qos.\n"));
227 : }
228 0 : return false;
229 : }
230 :
231 0 : if (!valid(qos.transport_priority)) {
232 0 : if (log_level >= LogLevel::Notice) {
233 0 : ACE_ERROR((LM_NOTICE,
234 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid transport_priority qos.\n"));
235 : }
236 0 : return false;
237 : }
238 :
239 0 : if (!valid(qos.lifespan)) {
240 0 : if (log_level >= LogLevel::Notice) {
241 0 : ACE_ERROR((LM_NOTICE,
242 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid lifespan qos.\n"));
243 : }
244 0 : return false;
245 : }
246 :
247 0 : if (!valid(qos.user_data)) {
248 0 : if (log_level >= LogLevel::Notice) {
249 0 : ACE_ERROR((LM_NOTICE,
250 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid user_data qos.\n"));
251 : }
252 0 : return false;
253 : }
254 :
255 0 : if (!valid(qos.ownership)) {
256 0 : if (log_level >= LogLevel::Notice) {
257 0 : ACE_ERROR((LM_NOTICE,
258 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid ownership qos.\n"));
259 : }
260 0 : return false;
261 : }
262 :
263 : #ifndef OPENDDS_NO_OWNERSHIP_KIND_EXCLUSIVE
264 0 : if (!valid(qos.ownership_strength)) {
265 0 : if (log_level >= LogLevel::Notice) {
266 0 : ACE_ERROR((LM_NOTICE,
267 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid ownership_strength qos.\n"));
268 : }
269 0 : return false;
270 : }
271 : #endif
272 :
273 0 : if (!valid(qos.writer_data_lifecycle)) {
274 0 : if (log_level >= LogLevel::Notice) {
275 0 : ACE_ERROR((LM_NOTICE,
276 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid writer_data_lifecycle qos.\n"));
277 : }
278 0 : return false;
279 : }
280 :
281 0 : if (!valid(qos.representation)) {
282 0 : if (log_level >= LogLevel::Notice) {
283 0 : ACE_ERROR((LM_NOTICE,
284 : "(%P|%t) NOTICE: Qos_Helper::valid::DataWriterQos, invalid data representation qos.\n"));
285 : }
286 0 : return false;
287 : }
288 :
289 0 : return true;
290 : }
291 :
292 0 : bool Qos_Helper::valid(const DDS::PublisherQos& qos)
293 : {
294 :
295 0 : if (!valid(qos.presentation)) {
296 0 : if (log_level >= LogLevel::Notice) {
297 0 : ACE_ERROR((LM_NOTICE,
298 : "(%P|%t) NOTICE: Qos_Helper::valid::PublisherQos, invalid presentation qos.\n"));
299 : }
300 0 : return false;
301 : }
302 :
303 0 : if (!valid(qos.partition)) {
304 0 : if (log_level >= LogLevel::Notice) {
305 0 : ACE_ERROR((LM_NOTICE,
306 : "(%P|%t) NOTICE: Qos_Helper::valid::PublisherQos, invalid partition qos.\n"));
307 : }
308 0 : return false;
309 : }
310 :
311 0 : if (!valid(qos.group_data)) {
312 0 : if (log_level >= LogLevel::Notice) {
313 0 : ACE_ERROR((LM_NOTICE,
314 : "(%P|%t) NOTICE: Qos_Helper::valid::PublisherQos, invalid group_data qos.\n"));
315 : }
316 0 : return false;
317 : }
318 :
319 0 : if (!valid(qos.entity_factory)) {
320 0 : if (log_level >= LogLevel::Notice) {
321 0 : ACE_ERROR((LM_NOTICE,
322 : "(%P|%t) NOTICE: Qos_Helper::valid::PublisherQos, sinvalid entity_factory qos.\n"));
323 : }
324 0 : return false;
325 : }
326 :
327 0 : return true;
328 : }
329 :
330 0 : bool Qos_Helper::valid(const DDS::DataReaderQos& qos)
331 : {
332 0 : if (!valid(qos.durability)) {
333 0 : if (log_level >= LogLevel::Notice) {
334 0 : ACE_ERROR((LM_NOTICE,
335 : "(%P|%t) NOTICE: Qos_Helper::valid::DataReaderQos, invalid durability qos.\n"));
336 : }
337 0 : return false;
338 : }
339 :
340 0 : if (!valid(qos.deadline)) {
341 0 : if (log_level >= LogLevel::Notice) {
342 0 : ACE_ERROR((LM_NOTICE,
343 : "(%P|%t) NOTICE: Qos_Helper::valid::DataReaderQos, invalid deadline qos.\n"));
344 : }
345 0 : return false;
346 : }
347 :
348 0 : if (!valid(qos.latency_budget)) {
349 0 : if (log_level >= LogLevel::Notice) {
350 0 : ACE_ERROR((LM_NOTICE,
351 : "(%P|%t) NOTICE: Qos_Helper::valid::DataReaderQos, invalid latency_budget qos.\n"));
352 : }
353 0 : return false;
354 : }
355 :
356 0 : if (!valid(qos.liveliness)) {
357 0 : if (log_level >= LogLevel::Notice) {
358 0 : ACE_ERROR((LM_NOTICE,
359 : "(%P|%t) NOTICE: Qos_Helper::valid::DataReaderQos, invalid liveliness qos.\n"));
360 : }
361 0 : return false;
362 : }
363 :
364 0 : if (!valid(qos.reliability)) {
365 0 : if (log_level >= LogLevel::Notice) {
366 0 : ACE_ERROR((LM_NOTICE,
367 : "(%P|%t) NOTICE: Qos_Helper::valid::DataReaderQos, invalid reliability qos.\n"));
368 : }
369 0 : return false;
370 : }
371 :
372 0 : if (!valid(qos.destination_order)) {
373 0 : if (log_level >= LogLevel::Notice) {
374 0 : ACE_ERROR((LM_NOTICE,
375 : "(%P|%t) NOTICE: Qos_Helper::valid::DataReaderQos, invalid destination_order qos.\n"));
376 : }
377 0 : return false;
378 : }
379 :
380 0 : if (!valid(qos.history)) {
381 0 : if (log_level >= LogLevel::Notice) {
382 0 : ACE_ERROR((LM_NOTICE,
383 : "(%P|%t) NOTICE: Qos_Helper::valid::DataReaderQos, invalid history qos.\n"));
384 : }
385 0 : return false;
386 : }
387 :
388 0 : if (!valid(qos.resource_limits)) {
389 0 : if (log_level >= LogLevel::Notice) {
390 0 : ACE_ERROR((LM_NOTICE,
391 : "(%P|%t) NOTICE: Qos_Helper::valid::DataReaderQos, invalid resource_limits qos.\n"));
392 : }
393 0 : return false;
394 : }
395 :
396 0 : if (!valid(qos.user_data)) {
397 0 : if (log_level >= LogLevel::Notice) {
398 0 : ACE_ERROR((LM_NOTICE,
399 : "(%P|%t) NOTICE: Qos_Helper::valid::DataReaderQos, invalid user_data qos.\n"));
400 : }
401 0 : return false;
402 : }
403 :
404 0 : if (!valid(qos.time_based_filter)) {
405 0 : if (log_level >= LogLevel::Notice) {
406 0 : ACE_ERROR((LM_NOTICE,
407 : "(%P|%t) NOTICE: Qos_Helper::valid::DataReaderQos, invalid time_based_filter qos.\n"));
408 : }
409 0 : return false;
410 : }
411 :
412 0 : if (!valid(qos.reader_data_lifecycle)) {
413 0 : if (log_level >= LogLevel::Notice) {
414 0 : ACE_ERROR((LM_NOTICE,
415 : "(%P|%t) NOTICE: Qos_Helper::valid::DataReaderQos, invalid reader_data_lifecycle qos.\n"));
416 : }
417 0 : return false;
418 : }
419 :
420 0 : if (!valid(qos.ownership)) {
421 0 : if (log_level >= LogLevel::Notice) {
422 0 : ACE_ERROR((LM_NOTICE,
423 : "(%P|%t) NOTICE: Qos_Helper::valid::DataReaderQos, invalid ownership qos.\n"));
424 : }
425 0 : return false;
426 : }
427 :
428 0 : if (!valid(qos.representation)) {
429 0 : if (log_level >= LogLevel::Notice) {
430 0 : ACE_ERROR((LM_NOTICE,
431 : "(%P|%t) NOTICE: Qos_Helper::valid::DataReaderQos, invalid representation qos.\n"));
432 : }
433 0 : return false;
434 : }
435 :
436 0 : return true;
437 : }
438 :
439 0 : bool Qos_Helper::valid(const DDS::SubscriberQos& qos)
440 : {
441 0 : if (!valid(qos.presentation)) {
442 0 : if (log_level >= LogLevel::Notice) {
443 0 : ACE_ERROR((LM_NOTICE,
444 : "(%P|%t) NOTICE: Qos_Helper::valid::SubscriberQos, invalid presentation qos.\n"));
445 : }
446 0 : return false;
447 : }
448 :
449 0 : if (!valid(qos.partition)) {
450 0 : if (log_level >= LogLevel::Notice) {
451 0 : ACE_ERROR((LM_NOTICE,
452 : "(%P|%t) NOTICE: Qos_Helper::valid::SubscriberQos, invalid partition qos.\n"));
453 : }
454 0 : return false;
455 : }
456 :
457 0 : if (!valid(qos.group_data)) {
458 0 : if (log_level >= LogLevel::Notice) {
459 0 : ACE_ERROR((LM_NOTICE,
460 : "(%P|%t) NOTICE: Qos_Helper::valid::SubscriberQos, invalid group_data qos.\n"));
461 : }
462 0 : return false;
463 : }
464 :
465 0 : if (!valid(qos.entity_factory)) {
466 0 : if (log_level >= LogLevel::Notice) {
467 0 : ACE_ERROR((LM_NOTICE,
468 : "(%P|%t) NOTICE: Qos_Helper::valid::SubscriberQos, invalid entity_factory qos.\n"));
469 : }
470 0 : return false;
471 : }
472 :
473 0 : return true;
474 : }
475 :
476 0 : bool Qos_Helper::valid(const DDS::DomainParticipantFactoryQos& qos)
477 : {
478 0 : if (!valid(qos.entity_factory)) {
479 0 : if (log_level >= LogLevel::Notice) {
480 0 : ACE_ERROR((LM_NOTICE,
481 : "(%P|%t) NOTICE: Qos_Helper::valid::DomainParticipantFactoryQos, invalid entity_factory qos.\n"));
482 : }
483 0 : return false;
484 : }
485 :
486 0 : return true;
487 : }
488 :
489 2 : DataWriterQosBuilder::DataWriterQosBuilder(DDS::Publisher_var publisher)
490 : {
491 2 : const DDS::ReturnCode_t ret = publisher->get_default_datawriter_qos(qos_);
492 2 : if (ret != DDS::RETCODE_OK && log_level >= LogLevel::Warning) {
493 1 : ACE_ERROR((LM_WARNING,
494 : ACE_TEXT("(%P|%t) WARNING: DataWriterQosBuilder: ")
495 : ACE_TEXT("could not get_default_datawriter_qos: %C\n"),
496 : retcode_to_string(ret)));
497 : }
498 2 : }
499 :
500 2 : DataWriterQosBuilder::DataWriterQosBuilder(DDS::Topic_var topic,
501 2 : DDS::Publisher_var publisher)
502 : {
503 2 : DDS::TopicQos tqos;
504 2 : DDS::ReturnCode_t ret = topic->get_qos(tqos);
505 2 : if (ret != DDS::RETCODE_OK && log_level >= LogLevel::Warning) {
506 1 : ACE_ERROR((LM_WARNING,
507 : ACE_TEXT("(%P|%t) WARNING: DataWriterQosBuilder: ")
508 : ACE_TEXT("could not get_qos on topic: %C\n"),
509 : retcode_to_string(ret)));
510 : }
511 2 : ret = publisher->get_default_datawriter_qos(qos_);
512 2 : if (ret != DDS::RETCODE_OK && log_level >= LogLevel::Warning) {
513 1 : ACE_ERROR((LM_WARNING,
514 : ACE_TEXT("(%P|%t) WARNING: DataWriterQosBuilder: ")
515 : ACE_TEXT("could not get_default_datawriter_qos: %C\n"),
516 : retcode_to_string(ret)));
517 : }
518 2 : ret = publisher->copy_from_topic_qos(qos_, tqos);
519 2 : if (ret != DDS::RETCODE_OK && log_level >= LogLevel::Warning) {
520 1 : ACE_ERROR((LM_WARNING,
521 : ACE_TEXT("(%P|%t) WARNING: DataWriterQosBuilder: ")
522 : ACE_TEXT("could not copy_from_topic: %C\n"),
523 : retcode_to_string(ret)));
524 : }
525 2 : }
526 :
527 2 : DataReaderQosBuilder::DataReaderQosBuilder(DDS::Subscriber_var subscriber)
528 : {
529 2 : const DDS::ReturnCode_t ret = subscriber->get_default_datareader_qos(qos_);
530 2 : if (ret != DDS::RETCODE_OK && log_level >= LogLevel::Warning) {
531 1 : ACE_ERROR((LM_WARNING,
532 : ACE_TEXT("(%P|%t) WARNING: DataReaderQosBuilder: ")
533 : ACE_TEXT("could not get_default_datareader_qos: %C\n"),
534 : retcode_to_string(ret)));
535 : }
536 2 : }
537 :
538 2 : DataReaderQosBuilder::DataReaderQosBuilder(DDS::Topic_var topic,
539 2 : DDS::Subscriber_var subscriber)
540 : {
541 2 : DDS::TopicQos tqos;
542 2 : DDS::ReturnCode_t ret = topic->get_qos(tqos);
543 2 : if (ret != DDS::RETCODE_OK && log_level >= LogLevel::Warning) {
544 1 : ACE_ERROR((LM_WARNING,
545 : ACE_TEXT("(%P|%t) WARNING: DataReaderQosBuilder: ")
546 : ACE_TEXT("could not get_qos on topic: %C\n"),
547 : retcode_to_string(ret)));
548 : }
549 2 : ret = subscriber->get_default_datareader_qos(qos_);
550 2 : if (ret != DDS::RETCODE_OK && log_level >= LogLevel::Warning) {
551 1 : ACE_ERROR((LM_WARNING,
552 : ACE_TEXT("(%P|%t) WARNING: DataReaderQosBuilder: ")
553 : ACE_TEXT("could not get_default_datareader_qos: %C\n"),
554 : retcode_to_string(ret)));
555 : }
556 2 : ret = subscriber->copy_from_topic_qos(qos_, tqos);
557 2 : if (ret != DDS::RETCODE_OK && log_level >= LogLevel::Warning) {
558 1 : ACE_ERROR((LM_WARNING,
559 : ACE_TEXT("(%P|%t) WARNING: DataReaderQosBuilder: ")
560 : ACE_TEXT("could not copy_from_topic: %C\n"),
561 : retcode_to_string(ret)));
562 : }
563 2 : }
564 :
565 : } // namespace DCPS
566 : } // namespace OpenDDS
567 :
568 : OPENDDS_END_VERSIONED_NAMESPACE_DECL
|