OpenDDS  Snapshot(2021/08/12-21:42)
RTPS/Logging.cpp
Go to the documentation of this file.
1 /*
2  *
3  *
4  * Distributed under the OpenDDS License.
5  * See: http://www.opendds.org/license.html
6  */
7 
8 #include "Logging.h"
9 
10 #include "BaseMessageUtils.h"
11 #include "MessageTypes.h"
12 
14 
16 
17 namespace OpenDDS {
18 
19 namespace DCPS {
20 
21 void vwrite(ValueWriter& vw, const GuidPrefix_t& prefix)
22 {
23  vw.begin_array();
24  for (size_t idx = 0; idx != sizeof(prefix); ++idx) {
25  vw.write_byte(prefix[idx]);
26  }
27  vw.end_array();
28 }
29 
30 }
31 
32 namespace RTPS {
33 
34 void log_message(const char* format,
35  const DCPS::GuidPrefix_t& prefix,
36  bool send,
37  const Message& message)
38 {
39 #if OPENDDS_HAS_JSON_VALUE_WRITER
40  DCPS::JsonValueWriter<> jvw;
41  jvw.begin_struct();
42  jvw.begin_struct_member("guidPrefix");
43  vwrite(jvw, prefix);
44  jvw.end_struct_member();
45  jvw.begin_struct_member("send");
46  jvw.write_boolean(send);
47  jvw.end_struct_member();
48  jvw.begin_struct_member("message");
49  vwrite(jvw, message);
50  jvw.end_struct_member();
51  jvw.end_struct();
52  ACE_DEBUG((LM_DEBUG, format, jvw.buffer().GetString()));
53 #else
54  ACE_UNUSED_ARG(format);
55  ACE_UNUSED_ARG(prefix);
56  ACE_UNUSED_ARG(send);
57  ACE_UNUSED_ARG(message);
58  ACE_DEBUG((LM_DEBUG, "ERROR: OpenDDS lacks JSON serialization support, can't log RTPS messages\n"));
59 #endif
60 }
61 
62 void parse_submessages(Message& message,
63  const ACE_Message_Block& mb)
64 {
65  MessageParser mp(mb);
66  DCPS::Serializer& ser = mp.serializer();
67 
68  while (mp.parseSubmessageHeader()) {
69  switch (mp.submessageHeader().submessageId) {
70  case RTPS::INFO_DST: {
72  ser >> sm;
73  append_submessage(message, sm);
74  break;
75  }
76  case RTPS::INFO_TS: {
78  ser >> sm;
79  append_submessage(message, sm);
80  break;
81  }
82  case RTPS::DATA: {
84  ser >> sm;
85  append_submessage(message, sm);
86  break;
87  }
88  case RTPS::DATA_FRAG: {
90  ser >> sm;
91  append_submessage(message, sm);
92  break;
93  }
94  default:
96  ACE_TEXT("(%P|%t) ERROR: parse_submessages() - ")
97  ACE_TEXT("unhandle submessageId %d\n"), mp.submessageHeader().submessageId));
98  break;
99  }
101  }
102 }
103 
104 } // namespace RTPS
105 } // namespace OpenDDS
106 
#define ACE_DEBUG(X)
#define ACE_ERROR(X)
virtual void end_array()
Definition: ValueWriter.h:50
Class to serialize and deserialize data for DDS.
Definition: Serializer.h:346
DCPS::Serializer & serializer()
void parse_submessages(Message &message, const ACE_Message_Block &mb)
void append_submessage(RTPS::Message &message, const RTPS::InfoDestinationSubmessage &submessage)
LM_DEBUG
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
void log_message(const char *format, const DCPS::GuidPrefix_t &prefix, bool send, const Message &message)
Log a serialized RTPS message.
void vwrite(ValueWriter &vw, const Observer::Sample &sample)
Definition: Observer.cpp:49
ACE_TEXT("TCP_Factory")
virtual void begin_array()
Definition: ValueWriter.h:49
SubmessageHeader submessageHeader() const
LM_ERROR
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:27
virtual void write_byte(ACE_CDR::Octet)=0
octet GuidPrefix_t[12]
Definition: DdsDcpsGuid.idl:19