OpenDDS  Snapshot(2022/02/28-16:04)
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  rapidjson::StringBuffer buffer;
41  rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
42  DCPS::JsonValueWriter<rapidjson::Writer<rapidjson::StringBuffer> > jvw(writer);
43  jvw.begin_struct();
44  jvw.begin_struct_member("guidPrefix");
45  vwrite(jvw, prefix);
46  jvw.end_struct_member();
47  jvw.begin_struct_member("send");
48  jvw.write_boolean(send);
49  jvw.end_struct_member();
50  jvw.begin_struct_member("message");
51  vwrite(jvw, message);
52  jvw.end_struct_member();
53  jvw.end_struct();
54  writer.Flush();
55  ACE_DEBUG((LM_DEBUG, format, buffer.GetString()));
56 #else
57  ACE_UNUSED_ARG(format);
58  ACE_UNUSED_ARG(prefix);
59  ACE_UNUSED_ARG(send);
60  ACE_UNUSED_ARG(message);
61  ACE_DEBUG((LM_DEBUG, "ERROR: OpenDDS lacks JSON serialization support, can't log RTPS messages\n"));
62 #endif
63 }
64 
65 void parse_submessages(Message& message,
66  const ACE_Message_Block& mb)
67 {
68  MessageParser mp(mb);
69  DCPS::Serializer& ser = mp.serializer();
70 
71  while (mp.parseSubmessageHeader()) {
72  switch (mp.submessageHeader().submessageId) {
73  case RTPS::INFO_DST: {
75  ser >> sm;
76  append_submessage(message, sm);
77  break;
78  }
79  case RTPS::INFO_TS: {
81  ser >> sm;
82  append_submessage(message, sm);
83  break;
84  }
85  case RTPS::DATA: {
87  ser >> sm;
88  append_submessage(message, sm);
89  break;
90  }
91  case RTPS::DATA_FRAG: {
93  ser >> sm;
94  append_submessage(message, sm);
95  break;
96  }
97  default:
99  ACE_TEXT("(%P|%t) ERROR: parse_submessages() - ")
100  ACE_TEXT("unhandle submessageId %d\n"), mp.submessageHeader().submessageId));
101  break;
102  }
104  }
105 }
106 
107 } // namespace RTPS
108 } // namespace OpenDDS
109 
#define ACE_DEBUG(X)
#define ACE_ERROR(X)
SubmessageHeader submessageHeader() const
void parse_submessages(Message &message, const ACE_Message_Block &mb)
octet GuidPrefix_t[12]
Definition: DdsDcpsGuid.idl:19
Class to serialize and deserialize data for DDS.
Definition: Serializer.h:353
virtual void begin_array()
Definition: ValueWriter.h:54
LM_DEBUG
virtual void end_array()
Definition: ValueWriter.h:55
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
ACE_TEXT("TCP_Factory")
void vwrite(ValueWriter &vw, const Observer::Sample &sample)
Definition: Observer.cpp:49
void append_submessage(RTPS::Message &message, const RTPS::InfoDestinationSubmessage &submessage)
void log_message(const char *format, const DCPS::GuidPrefix_t &prefix, bool send, const Message &message)
Log a serialized RTPS message.
LM_ERROR
DCPS::Serializer & serializer()
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28
virtual void write_byte(ACE_CDR::Octet)=0