1c87c5fbaSopenharmony_ci// -*- mode:doc; -*-
2c87c5fbaSopenharmony_ci// vim: set syntax=asciidoc tw=0
3c87c5fbaSopenharmony_ci
4c87c5fbaSopenharmony_cicoap_logging(3)
5c87c5fbaSopenharmony_ci===============
6c87c5fbaSopenharmony_ci:doctype: manpage
7c87c5fbaSopenharmony_ci:man source:   coap_logging
8c87c5fbaSopenharmony_ci:man version:  @PACKAGE_VERSION@
9c87c5fbaSopenharmony_ci:man manual:   libcoap Manual
10c87c5fbaSopenharmony_ci
11c87c5fbaSopenharmony_ciNAME
12c87c5fbaSopenharmony_ci----
13c87c5fbaSopenharmony_cicoap_logging,
14c87c5fbaSopenharmony_cicoap_log,
15c87c5fbaSopenharmony_cicoap_log_emerg,
16c87c5fbaSopenharmony_cicoap_log_alert,
17c87c5fbaSopenharmony_cicoap_log_crit,
18c87c5fbaSopenharmony_cicoap_log_err,
19c87c5fbaSopenharmony_cicoap_log_warn,
20c87c5fbaSopenharmony_cicoap_log_info,
21c87c5fbaSopenharmony_cicoap_log_notice,
22c87c5fbaSopenharmony_cicoap_log_debug,
23c87c5fbaSopenharmony_cicoap_log_oscore,
24c87c5fbaSopenharmony_cicoap_get_log_level,
25c87c5fbaSopenharmony_cicoap_set_log_level,
26c87c5fbaSopenharmony_cicoap_dtls_log,
27c87c5fbaSopenharmony_cicoap_dtls_get_log_level,
28c87c5fbaSopenharmony_cicoap_dtls_set_log_level,
29c87c5fbaSopenharmony_cicoap_set_log_handler,
30c87c5fbaSopenharmony_cicoap_package_name,
31c87c5fbaSopenharmony_cicoap_package_version,
32c87c5fbaSopenharmony_cicoap_package_build,
33c87c5fbaSopenharmony_cicoap_set_show_pdu_output,
34c87c5fbaSopenharmony_cicoap_show_pdu,
35c87c5fbaSopenharmony_cicoap_endpoint_str,
36c87c5fbaSopenharmony_cicoap_session_str,
37c87c5fbaSopenharmony_cicoap_print_addr,
38c87c5fbaSopenharmony_cicoap_print_ip_addr
39c87c5fbaSopenharmony_ci- Work with CoAP logging
40c87c5fbaSopenharmony_ci
41c87c5fbaSopenharmony_ciSYNOPSIS
42c87c5fbaSopenharmony_ci--------
43c87c5fbaSopenharmony_ci*#include <coap@LIBCOAP_API_VERSION@/coap.h>*
44c87c5fbaSopenharmony_ci
45c87c5fbaSopenharmony_ci*void coap_log(coap_log_t _level_, const char *_format_, _..._);*
46c87c5fbaSopenharmony_ci
47c87c5fbaSopenharmony_ci*void coap_log_emerg(const char *_format_, _..._);*
48c87c5fbaSopenharmony_ci
49c87c5fbaSopenharmony_ci*void coap_log_alert(const char *_format_, _..._);*
50c87c5fbaSopenharmony_ci
51c87c5fbaSopenharmony_ci*void coap_log_crit(const char *_format_, _..._);*
52c87c5fbaSopenharmony_ci
53c87c5fbaSopenharmony_ci*void coap_log_err(const char *_format_, _..._);*
54c87c5fbaSopenharmony_ci
55c87c5fbaSopenharmony_ci*void coap_log_warn(const char *_format_, _..._);*
56c87c5fbaSopenharmony_ci
57c87c5fbaSopenharmony_ci*void coap_log_info(const char *_format_, _..._);*
58c87c5fbaSopenharmony_ci
59c87c5fbaSopenharmony_ci*void coap_log_notice(const char *_format_, _..._);*
60c87c5fbaSopenharmony_ci
61c87c5fbaSopenharmony_ci*void coap_log_debug(const char *_format_, _..._);*
62c87c5fbaSopenharmony_ci
63c87c5fbaSopenharmony_ci*void coap_log_oscore(const char *_format_, _..._);*
64c87c5fbaSopenharmony_ci
65c87c5fbaSopenharmony_ci*void coap_set_log_level(coap_log_t _level_);*
66c87c5fbaSopenharmony_ci
67c87c5fbaSopenharmony_ci*coap_log_t coap_get_log_level(void);*
68c87c5fbaSopenharmony_ci
69c87c5fbaSopenharmony_ci*void coap_dtls_log(coap_log_t _level_, const char *_format_, _..._);*
70c87c5fbaSopenharmony_ci
71c87c5fbaSopenharmony_ci*void coap_dtls_set_log_level(coap_log_t _level_);*
72c87c5fbaSopenharmony_ci
73c87c5fbaSopenharmony_ci*coap_log_t coap_dtls_get_log_level(void);*
74c87c5fbaSopenharmony_ci
75c87c5fbaSopenharmony_ci*void coap_set_log_handler(coap_log_handler_t _handler_);*
76c87c5fbaSopenharmony_ci
77c87c5fbaSopenharmony_ci*const char *coap_package_name(void);*
78c87c5fbaSopenharmony_ci
79c87c5fbaSopenharmony_ci*const char *coap_package_version(void);*
80c87c5fbaSopenharmony_ci
81c87c5fbaSopenharmony_ci*const char *coap_package_build(void);*
82c87c5fbaSopenharmony_ci
83c87c5fbaSopenharmony_ci*void coap_set_show_pdu_output(int _use_fprintf_);*
84c87c5fbaSopenharmony_ci
85c87c5fbaSopenharmony_ci*void coap_show_pdu(coap_log_t _level_, const coap_pdu_t *_pdu_);*
86c87c5fbaSopenharmony_ci
87c87c5fbaSopenharmony_ci*const char *coap_endpoint_str(const coap_endpoint_t *_endpoint_);*
88c87c5fbaSopenharmony_ci
89c87c5fbaSopenharmony_ci*const char *coap_session_str(const coap_session_t *_session_);*
90c87c5fbaSopenharmony_ci
91c87c5fbaSopenharmony_ci*size_t coap_print_addr(const coap_address_t *_address_,
92c87c5fbaSopenharmony_ciunsigned char *_buffer_, size_t _length_);*
93c87c5fbaSopenharmony_ci
94c87c5fbaSopenharmony_ci*const char *coap_print_ip_addr(const coap_address_t *_address_,
95c87c5fbaSopenharmony_cichar *_buffer_, size_t _length_);*
96c87c5fbaSopenharmony_ci
97c87c5fbaSopenharmony_ciFor specific (D)TLS library support, link with
98c87c5fbaSopenharmony_ci*-lcoap-@LIBCOAP_API_VERSION@-notls*, *-lcoap-@LIBCOAP_API_VERSION@-gnutls*,
99c87c5fbaSopenharmony_ci*-lcoap-@LIBCOAP_API_VERSION@-openssl*, *-lcoap-@LIBCOAP_API_VERSION@-mbedtls*
100c87c5fbaSopenharmony_cior *-lcoap-@LIBCOAP_API_VERSION@-tinydtls*.   Otherwise, link with
101c87c5fbaSopenharmony_ci*-lcoap-@LIBCOAP_API_VERSION@* to get the default (D)TLS library support.
102c87c5fbaSopenharmony_ci
103c87c5fbaSopenharmony_ciDESCRIPTION
104c87c5fbaSopenharmony_ci-----------
105c87c5fbaSopenharmony_ciThe logging sub-system supports logging at different levels, and depending on
106c87c5fbaSopenharmony_cithe selected logging level, outputs the appropriate information.
107c87c5fbaSopenharmony_ci
108c87c5fbaSopenharmony_ciLogging by default is to stderr or stdout depending on the logging level of
109c87c5fbaSopenharmony_cithe log entry.  It ia possible to send the logging information to an
110c87c5fbaSopenharmony_ciapplication logging callback handler for processing by the application.
111c87c5fbaSopenharmony_ci
112c87c5fbaSopenharmony_ciLogging levels (*coap_log_t*) are defined as follows (based on the *syslog*()
113c87c5fbaSopenharmony_cinames and values):
114c87c5fbaSopenharmony_ci
115c87c5fbaSopenharmony_ci*COAP_LOG_EMERG*::
116c87c5fbaSopenharmony_ciEmergency level (0).
117c87c5fbaSopenharmony_ci
118c87c5fbaSopenharmony_ci*COAP_LOG_ALERT*::
119c87c5fbaSopenharmony_ciAlert level (1).
120c87c5fbaSopenharmony_ci
121c87c5fbaSopenharmony_ci*COAP_LOG_CRIT*::
122c87c5fbaSopenharmony_ciCritical level (2).
123c87c5fbaSopenharmony_ci
124c87c5fbaSopenharmony_ci*COAP_LOG_ERR*::
125c87c5fbaSopenharmony_ciError level (3).
126c87c5fbaSopenharmony_ci
127c87c5fbaSopenharmony_ci*COAP_LOG_WARN*::
128c87c5fbaSopenharmony_ciWarning level (the default) (4).
129c87c5fbaSopenharmony_ci
130c87c5fbaSopenharmony_ci*COAP_LOG_NOTICE*::
131c87c5fbaSopenharmony_ciNotice level (5).
132c87c5fbaSopenharmony_ci
133c87c5fbaSopenharmony_ci*COAP_LOG_INFO*::
134c87c5fbaSopenharmony_ciInformation level (6).
135c87c5fbaSopenharmony_ci
136c87c5fbaSopenharmony_ci*COAP_LOG_DEBUG*::
137c87c5fbaSopenharmony_ciDebug level (7).
138c87c5fbaSopenharmony_ci
139c87c5fbaSopenharmony_ciWith additional level:
140c87c5fbaSopenharmony_ci
141c87c5fbaSopenharmony_ci*COAP_LOG_OSCORE*::
142c87c5fbaSopenharmony_ciDebug OSCORE information (8).
143c87c5fbaSopenharmony_ci
144c87c5fbaSopenharmony_ci*NOTE:* The maximum logging level in the libcoap library may have been updated
145c87c5fbaSopenharmony_ciby the use of './configure --enable-max-logging-level=X' (where X is 0 to 8 inclusive)
146c87c5fbaSopenharmony_ciwhich may disable some of the higher logging levels to save code space.
147c87c5fbaSopenharmony_ci
148c87c5fbaSopenharmony_ciFUNCTIONS
149c87c5fbaSopenharmony_ci---------
150c87c5fbaSopenharmony_ci
151c87c5fbaSopenharmony_ci*Function: coap_log()*
152c87c5fbaSopenharmony_ci
153c87c5fbaSopenharmony_ciThe *coap_log*() function is used to log information at the appropriate _level_.
154c87c5fbaSopenharmony_ciThe rest of the parameters follow the standard *printf*() function format.
155c87c5fbaSopenharmony_ciWhere possible, the coap_log_*() functions should be used instead.
156c87c5fbaSopenharmony_ci
157c87c5fbaSopenharmony_ci*Function: coap_log_emerg()*
158c87c5fbaSopenharmony_ci
159c87c5fbaSopenharmony_ciThe *coap_log_emerg*() function provides a wrapper to the *coap_log*() function
160c87c5fbaSopenharmony_ciwith _level_ set to COAP_LOG_EMERG.
161c87c5fbaSopenharmony_ciThe parameters follow the standard *printf*() function format.
162c87c5fbaSopenharmony_ci
163c87c5fbaSopenharmony_ci*Function: coap_log_alert()*
164c87c5fbaSopenharmony_ci
165c87c5fbaSopenharmony_ciThe *coap_log_alert*() function provides a wrapper to the *coap_log*() function
166c87c5fbaSopenharmony_ciwith _level_ set to COAP_LOG_ALERT.
167c87c5fbaSopenharmony_ciThe parameters follow the standard *printf*() function format.
168c87c5fbaSopenharmony_ci
169c87c5fbaSopenharmony_ci*Function: coap_log_crit()*
170c87c5fbaSopenharmony_ci
171c87c5fbaSopenharmony_ciThe *coap_log_crit*() function provides a wrapper to the *coap_log*() function
172c87c5fbaSopenharmony_ciwith _level_ set to COAP_LOG_CRIT.
173c87c5fbaSopenharmony_ciThe parameters follow the standard *printf*() function format.
174c87c5fbaSopenharmony_ci
175c87c5fbaSopenharmony_ci*Function: coap_log_err()*
176c87c5fbaSopenharmony_ci
177c87c5fbaSopenharmony_ciThe *coap_log_err*() function provides a wrapper to the *coap_log*() function
178c87c5fbaSopenharmony_ciwith _level_ set to COAP_LOG_ERR.
179c87c5fbaSopenharmony_ciThe parameters follow the standard *printf*() function format.
180c87c5fbaSopenharmony_ci
181c87c5fbaSopenharmony_ci*Function: coap_log_warn()*
182c87c5fbaSopenharmony_ci
183c87c5fbaSopenharmony_ciThe *coap_log_warn*() function provides a wrapper to the *coap_log*() function
184c87c5fbaSopenharmony_ciwith _level_ set to COAP_LOG_WARN.
185c87c5fbaSopenharmony_ciThe parameters follow the standard *printf*() function format.
186c87c5fbaSopenharmony_ci
187c87c5fbaSopenharmony_ci*Function: coap_log_notice()*
188c87c5fbaSopenharmony_ci
189c87c5fbaSopenharmony_ciThe *coap_log_notice*() function provides a wrapper to the *coap_log*() function
190c87c5fbaSopenharmony_ciwith _level_ set to COAP_LOG_NOTICE.
191c87c5fbaSopenharmony_ciThe parameters follow the standard *printf*() function format.
192c87c5fbaSopenharmony_ci
193c87c5fbaSopenharmony_ci*Function: coap_log_info()*
194c87c5fbaSopenharmony_ci
195c87c5fbaSopenharmony_ciThe *coap_log_info*() function provides a wrapper to the *coap_log*() function
196c87c5fbaSopenharmony_ciwith _level_ set to COAP_LOG_INFO.
197c87c5fbaSopenharmony_ciThe parameters follow the standard *printf*() function format.
198c87c5fbaSopenharmony_ci
199c87c5fbaSopenharmony_ci*Function: coap_log_debug()*
200c87c5fbaSopenharmony_ci
201c87c5fbaSopenharmony_ciThe *coap_log_debug*() function provides a wrapper to the *coap_log*() function
202c87c5fbaSopenharmony_ciwith _level_ set to COAP_LOG_DEBUG.
203c87c5fbaSopenharmony_ciThe parameters follow the standard *printf*() function format.
204c87c5fbaSopenharmony_ci
205c87c5fbaSopenharmony_ci*Function: coap_log_oscore()*
206c87c5fbaSopenharmony_ci
207c87c5fbaSopenharmony_ciThe *coap_log_oscore*() function provides a wrapper to the *coap_log*() function
208c87c5fbaSopenharmony_ciwith _level_ set to COAP_LOG_OSCORE.
209c87c5fbaSopenharmony_ciThe parameters follow the standard *printf*() function format.
210c87c5fbaSopenharmony_ci
211c87c5fbaSopenharmony_ci*Function: coap_set_log_level()*
212c87c5fbaSopenharmony_ci
213c87c5fbaSopenharmony_ciThe *coap_set_log_level*() function is used to set the current logging _level_
214c87c5fbaSopenharmony_cifor output by any subsequent *coap_log*() calls.  Output is only logged if the
215c87c5fbaSopenharmony_ci*coap_log*() _level_ definition is smaller than or equal to the current logging
216c87c5fbaSopenharmony_ci_level_.
217c87c5fbaSopenharmony_ci
218c87c5fbaSopenharmony_ci*Function: coap_get_log_level()*
219c87c5fbaSopenharmony_ci
220c87c5fbaSopenharmony_ciThe *coap_get_log_level*() function is used to get the current logging level.
221c87c5fbaSopenharmony_ci
222c87c5fbaSopenharmony_ci*Function: coap_dtls_log()*
223c87c5fbaSopenharmony_ci
224c87c5fbaSopenharmony_ciThe *coap_dtls_log*() function is used to log (D)TLS library information at the
225c87c5fbaSopenharmony_ciappropriate _level_.  The rest of the parameters follow the standard *printf*()
226c87c5fbaSopenharmony_cifunction format.
227c87c5fbaSopenharmony_ci
228c87c5fbaSopenharmony_ci*Function: coap_dtls_set_log_level()*
229c87c5fbaSopenharmony_ci
230c87c5fbaSopenharmony_ciThe *coap_dtls_set_log_level*() function is used to set the current logging
231c87c5fbaSopenharmony_ci_level_ for output by any subsequent *coap_dtls_log*() calls.  Output is only
232c87c5fbaSopenharmony_cilogged if the *coap_dtls_log*() _level_ definition is smaller than or equal to
233c87c5fbaSopenharmony_cithe current DTLS logging _level_.
234c87c5fbaSopenharmony_ci
235c87c5fbaSopenharmony_ci*Function: coap_dtls_get_log_level()*
236c87c5fbaSopenharmony_ci
237c87c5fbaSopenharmony_ciThe *coap_dtls_get_log_level*() function is used to get the current logging
238c87c5fbaSopenharmony_cilevel for the DTLS library.
239c87c5fbaSopenharmony_ci
240c87c5fbaSopenharmony_ci*Function: coap_set_log_handler()*
241c87c5fbaSopenharmony_ci
242c87c5fbaSopenharmony_ciThe *coap_set_log_handler*()* function can be used to define an alternative
243c87c5fbaSopenharmony_cilogging handler for processing any logging messages.  The logging handler
244c87c5fbaSopenharmony_ciprototype is defined as:
245c87c5fbaSopenharmony_ci
246c87c5fbaSopenharmony_ci[source, c]
247c87c5fbaSopenharmony_ci----
248c87c5fbaSopenharmony_citypedef void (*coap_log_handler_t) (coap_log_t level, const char *message);
249c87c5fbaSopenharmony_ci----
250c87c5fbaSopenharmony_ci
251c87c5fbaSopenharmony_ci*Function: coap_package_name()*
252c87c5fbaSopenharmony_ci
253c87c5fbaSopenharmony_ciThe *coap_package_name*() function returns the name of this library.
254c87c5fbaSopenharmony_ci
255c87c5fbaSopenharmony_ci*Function: coap_package_version()*
256c87c5fbaSopenharmony_ci
257c87c5fbaSopenharmony_ciThe *coap_package_version*() function returns the version of this library.
258c87c5fbaSopenharmony_ci
259c87c5fbaSopenharmony_ci*Function: coap_package_build()*
260c87c5fbaSopenharmony_ci
261c87c5fbaSopenharmony_ciThe *coap_package_build*() function returns the git information (as in
262c87c5fbaSopenharmony_ci"git describe --tags") for the build of this library or version of this
263c87c5fbaSopenharmony_cilibrary if git is not used.
264c87c5fbaSopenharmony_ci
265c87c5fbaSopenharmony_ci*Function: coap_set_show_pdu_output()*
266c87c5fbaSopenharmony_ci
267c87c5fbaSopenharmony_ciThe *coap_set_show_pdu_output*() function defines whether the output from
268c87c5fbaSopenharmony_ci*coap_show_pdu*() is to be either sent to stdout/stderr, or output using
269c87c5fbaSopenharmony_ci*coap_log*().  _use_fprintf_ is set to 1 for stdout/stderr (the default), and
270c87c5fbaSopenharmony_ci_use_fprintf_ is set to 0 for *coap_log*().
271c87c5fbaSopenharmony_ci
272c87c5fbaSopenharmony_ci*Function: coap_show_pdu()*
273c87c5fbaSopenharmony_ci
274c87c5fbaSopenharmony_ciThe *coap_show_pdu*() function is used to decode the _pdu_, outputting as
275c87c5fbaSopenharmony_ciappropriate for logging _level_.  Where the output goes is dependent on
276c87c5fbaSopenharmony_ci*coap_set_show_pdu_output*().
277c87c5fbaSopenharmony_ci
278c87c5fbaSopenharmony_ci*NOTE:* If _pdu_ has not been associated with a CoAP session (i.e. not a
279c87c5fbaSopenharmony_cireceived PDU or coap_send() not yet called), then the output assumes that
280c87c5fbaSopenharmony_cithis _pdu_ is of type unreliable.
281c87c5fbaSopenharmony_ci
282c87c5fbaSopenharmony_ci*Function: coap_endpoint_str()*
283c87c5fbaSopenharmony_ci
284c87c5fbaSopenharmony_ciThe *coap_endpoint_str*() function returns a description string of the
285c87c5fbaSopenharmony_ci_endpoint_.
286c87c5fbaSopenharmony_ci
287c87c5fbaSopenharmony_ci*Function: coap_session_str()*
288c87c5fbaSopenharmony_ci
289c87c5fbaSopenharmony_ciThe *coap_session_str*() function is used to get a string containing the
290c87c5fbaSopenharmony_ciinformation about the _session_.
291c87c5fbaSopenharmony_ci
292c87c5fbaSopenharmony_ci*Function: coap_print_addr()*
293c87c5fbaSopenharmony_ci
294c87c5fbaSopenharmony_ciThe *coap_print_addr*() function returns the length of the  description string
295c87c5fbaSopenharmony_cicontaining the IP address and port from _address_, updating _buffer_ which has a
296c87c5fbaSopenharmony_cimaximum length _length_.
297c87c5fbaSopenharmony_ci
298c87c5fbaSopenharmony_ci*Function: coap_print_ip_addr()*
299c87c5fbaSopenharmony_ci
300c87c5fbaSopenharmony_ciThe *coap_print_ip_addr*() function returns a description string of the
301c87c5fbaSopenharmony_ciIP address only for _address_. _buffer_ is updated, which has a maximum length of
302c87c5fbaSopenharmony_ci_length_.
303c87c5fbaSopenharmony_ci
304c87c5fbaSopenharmony_ciRETURN VALUES
305c87c5fbaSopenharmony_ci-------------
306c87c5fbaSopenharmony_ci
307c87c5fbaSopenharmony_ci*coap_package_name*(), *coap_package_version*() and
308c87c5fbaSopenharmony_ci*coap_package_build*() return the appropriate zero-terminated character
309c87c5fbaSopenharmony_cistring.
310c87c5fbaSopenharmony_ci
311c87c5fbaSopenharmony_ci*coap_get_log_level*() returns the current logging level.
312c87c5fbaSopenharmony_ci
313c87c5fbaSopenharmony_ci*coap_dtls_get_log_level*() returns the current logging level
314c87c5fbaSopenharmony_cifor the DTLS library specifics.
315c87c5fbaSopenharmony_ci
316c87c5fbaSopenharmony_ci*coap_endpoint_str*() returns a description string of the
317c87c5fbaSopenharmony_ci_endpoint_.
318c87c5fbaSopenharmony_ci
319c87c5fbaSopenharmony_ci*coap_session_str*() returns a description string of the
320c87c5fbaSopenharmony_ci_session_.
321c87c5fbaSopenharmony_ci
322c87c5fbaSopenharmony_ci*coap_print_addr*() returns the length of _buffer_ that has been
323c87c5fbaSopenharmony_ciupdated with an ascii readable IP address and port for _address_.
324c87c5fbaSopenharmony_ci
325c87c5fbaSopenharmony_ci*coap_print_ip_addr*() returns a pointer to the ascii readable
326c87c5fbaSopenharmony_ciIP address only for _address_.
327c87c5fbaSopenharmony_ci
328c87c5fbaSopenharmony_ciSEE ALSO
329c87c5fbaSopenharmony_ci--------
330c87c5fbaSopenharmony_ci*coap_context*(3) and *coap_session*(3)
331c87c5fbaSopenharmony_ci
332c87c5fbaSopenharmony_ciFURTHER INFORMATION
333c87c5fbaSopenharmony_ci-------------------
334c87c5fbaSopenharmony_ciSee
335c87c5fbaSopenharmony_ci
336c87c5fbaSopenharmony_ci"https://rfc-editor.org/rfc/rfc7252[RFC7252: The Constrained Application Protocol (CoAP)]"
337c87c5fbaSopenharmony_ci
338c87c5fbaSopenharmony_cifor further information.
339c87c5fbaSopenharmony_ci
340c87c5fbaSopenharmony_ciBUGS
341c87c5fbaSopenharmony_ci----
342c87c5fbaSopenharmony_ciPlease report bugs on the mailing list for libcoap:
343c87c5fbaSopenharmony_cilibcoap-developers@lists.sourceforge.net or raise an issue on GitHub at
344c87c5fbaSopenharmony_cihttps://github.com/obgm/libcoap/issues
345c87c5fbaSopenharmony_ci
346c87c5fbaSopenharmony_ciAUTHORS
347c87c5fbaSopenharmony_ci-------
348c87c5fbaSopenharmony_ciThe libcoap project <libcoap-developers@lists.sourceforge.net>
349