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