On systems where read() is declared with the attribute
warn_unused_result, a cast to void is not sufficient to suppress the
resulting warning. This change therefore checks the result explicitly.
coap_opt_length() must be called next_option_safe() to avoid
out-of-bound reads for malformed options.
Thanks to Marten Geuking for providing a detailed bug report.
See https://sourceforge.net/p/libcoap/mailman/message/37039434/
Works for
Computer: Windows 10 64 bit & CYGWIN_NT-10.0 x86_64
Cygwin: 3.1.5-1
OpenSSL: 1.1.1g
gcc:9.3.0
and gcc-10.2.0 + openssl1.1.1f
configure.ac:
Support cygwin build environment. If so, set -D_CYGWIN_ENV in CFLAGS.
libtool: warning: undefined symbols not allowed in x86_64-pc-cygwin shared libraries; building static only
still to be fixed.
.gitignore:
Ignore *.exe filenames
src/coap_io.c:
define ipi_spec_dst as ipi_addr if _CYGWIN_ENV
examples/client.c:
examples/coap-rd.c:
examples/coap-server.c:
examples/etsi_iot_01.c
man/examples-code-check.c:
src/coap_io.c:
src/coap_tcp.c:
Fix compiler warnings.
sizeof(socklen_t) != sizeof(size_t) [-Wsign-compare]
isdigit() etc. complain about byte size array subscripts [-Wchar-subscripts]
snprintf size checks [-Wformat-truncation=]
Update
The technical lower bound of COAP_DEBUG_BUF_SIZE in the code is 5.
Sensible values should be significantly larger than 32 to ensure that
information can be displayed through this buffer.
There are 2 output buffers - outbuf[] and buf[]. buf[] is limited in size
but used for printing out the data portion of the PDU before getting included
in outbuf[].
Make the printing of the data portion of the PDU go straight into outbuf[] to
get around the buf[] limitation.
Now the maximium amount of the printing out of the PDU can be controlled by
CPPFLAGS="-DCOAP_DEBUG_BUF_SIZE=xxxx" as a parameter to ./configure, where
xxxx is the output buffer size (e.g. use 4096).
examples/client.c:
Add in -w option to add in a NL at end of receiving data - including after
re-assembling a BLOCK2 set of data.
man/coap-client.txt.in:
Document -w option.
Request raised by Issue #473.
Add code to better support the Proxy-Uri: and Proxy-Scheme: CoAP Options.
examples/client.c:
Make sure that the Proxy-Uri: option is added (if set) when clearing down an
observation (fixes#112).
Check that Proxy-Uri: option has a maximum data length of 1034 bytes.
Handle user defined Proxy-Scheme: option correctly.
Update -P option to include scheme to be used when connecting to the proxy.
examples/coap-server.c:
Add in hnd_proxy_uri() handler function. This has support for a direct or ongoing
proxy connection for the coap* protocols. The ongoing connection is set up as a
different CoAP session and is assocated with the incoming session for relaying
requests / responses.
Internal functions taken from client.c are used where appropriate.
Proxy support code has a SERVER_CAN_PROXY wrapper, so footprint can easily be
reduced if required.
New -P and -u options added to support ongoing connections.
include/coap2/net.h:
Add in tracking the proxy uri handler into coap_context_t.
include/coap2/resource.h:
Track whether a resource definition is for Proxy-Uri:/Proxy-Scheme:.
Define the coap_resource_proxy_uri_init() function for handling the Proxy-Uri:
option or Proxy-Scheme: option in an incoming request.
include/coap2/uri.h:
Add in COAP_URI_SCHEME_HTTP and COAP_URI_SCHEME_HTTPS as valid Proxy-Uri:
schemes.
Define the coap_split_proxy_uri() function (similar to coap_split_uri() but
supports the proxy extras. Both now use a common sub function internally.
libcoap-2.map:
libcoap-2.sym:
Expose the new coap_resource_proxy_uri_init() and coap_split_proxy_uri()
functions.
man/Makefile.am:
Handle coap_resource_get_userdata(3) now being over the 10 definition limit
in man/coap_resource.txt.in.
man/coap-client.txt.in:
Update documentation for the -P option.
man/coap-server.txt.in:
Document the new -P proxy option.
Document the new -u user option.
man/coap_resource.txt.in:
Include documentation for coap_resource_proxy_uri_init().
src/coap_debug.c:
Output the Proxy-Scheme: Option as text.
src/net.c:
Sanity check and handle COAP_OPTION_PROXY_URI and COAP_OPTION_PROXY_SCHEME
in handle_request().
src/resource.c:
Add in coap_resource_proxy_uri_init() function.
Handle the addition of a proxy uri handler in coap_add_resource().
src/uri.c:
Rename coap_split_uri() to coap_split_uri_sub() and add in extra proxy
handling support based on input parameters.
Create new coap_split_uri() and coap_split_proxy_uri() which call
coap_split_uri_sub() appropriately.
TODO:
Remove reference to Proxy support required
src/coap_gnutls.c:
Fix a double deallocate found during testing
src/coap_asn1.c: (New)
include/coap2/coap_asn1_internal.h: (New)
Created and common asn1 functions added in
Makefile.am:
include/coap2/coap_internal.h:
Reference the new files.
src/coap_gnutls.c:
src/coap_tinydtls.c:
Updated to use new common asn1 functions.
Support of COAP_PKI_KEY_PEM requires reading files which may not be supported
in libcoap running in a non Posix environment.
Remove RPK support when using PKI key type COAP_PKI_KEY_PEM. Update
coap-server and coap-client to read the optional .pem files into memory and
use PKI key type COAP_PKI_KEY_PEM_BUF instead.
Currently OpenSSL and MBedTLS do not support RFC7250. See
https://en.wikipedia.org/wiki/Comparison_of_TLS_implementations#Extensions
last column.
GnuTLS >= 3.6.6 required.
TinyDTLS update required.
New option is_rpk_not_cert added to PKI setup structure which is enabled
in coap-client and coap-server by the -M option and the use of a PUBLIC KEY
instead of a CERTIFICATE in the cert file. If file is EC PRIVATE KEY, then
it can be used for both the public and private key files.
man/coap-client.txt.in:
man/coap-server.txt.in:
Document -M option.
man/coap_encryption.txt.in:
man/coap-server.txt.in:
man/coap_context.txt.in:
Add in documentation for RPK.
examples/client.c:
examples/coap-server.c:
Add in support for is_rpk_not_cert and -M option.
Stop sending ::1 for SNI - use localhost instead.
include/coap2/coap_dtls.h:
Add in is_rpk_not_cert option.
include/coap2/str.h:
src/str.c:
libcoap-2.map:
libcoap-2.sym:
Add in coap_new_binary() and coap_delete_binary() functions.
src/coap_openssl.c:
Report RPK is not supported if invoked.
Check that all received data is used up for error recovery.
src/coap_mbedtls.c:
Report RPK is not supported if invoked.
Handle more MbedTLS generated errors.
Check that all received data is used up for error recovery.
src/coap_gnutls.c:
Add in support for RPK.
Add in sending Hello Verify if not cookie match in Client Hello
Check that all received data is used up for error recovery.
src/coap_tinydtls.c:
Add in support for RPK.
HOWTO.pkcs11:
Update for use with RPK.
Use .der file for '-C ca_file' definitions as later GnuTLS needs CA
to be trusted in HSM.
PR #476 added in coap_insert_option() which could be called by
coap_add_option() with with a coap_log() message set to LOG_DEBUG.
When PR #539 was merged in, this upped the logging level to LOG_WARNING which
now causes test/testdriver to report unecessary messages.
Logging level reverted to LOG_DEBUG.
This updates the initial work done for adding in cache support
include/coap2/coap_cache.h: (new)
include/coap2/coap_cache_internal.h: (new)
src/coap_cache.c: (new)
New files to support cache support.
CMakeLists.txt:
Makefile.amMakefile.am:
Makefile.libcoap:
configure.ac:
examples/lwip/Makefile:
include/coap2/coap.h.in:
include/coap2/coap.h.windows:
win32/libcoap.vcxproj:
win32/libcoap.vcxproj.filters:
Add in the new files.
examples/client.c:
Fix valgrind reported memory leak.
examples/coap-server.c:
Add in new example_data resource that uses the new caching logic.
Update hnd_put() to use the new cache logic for BLOCK1 PUTs.
include/coap2/coap_forward_decls.h:
include/coap2/coap_internal.h:
include/coap2/coap_session.h:
include/coap2/net.h:
Add in new cache support.
libcoap-2.map:
libcoap-2.sym:
Include the new functions.
man/Makefile.am:
man/coap.txt.in:
man/coap_cache.txt.in: (new)
Update documentation.
src/coap_io.c:
Idle timeout cache entries.
src/coap_session.c:
Delete cache entry when session is deleted.
src/net.c:
Delete cache entries when context is freed off.
src/coap_gnutls.c:
src/coap_mbedtls.c:
src/coap_notls.c:
src/coap_openssl.c:
src/coap_tinydtls.c:
Add in SHA256 digest support.
Add in coap_new_binary() and coap_delete_binary() functions which operate
in the same way as coap_new_string() and coap_delete_string() but work on
coap_binary_t objects.
include/coap2/str.h:
src/str.c:
Add in the coap_new_binary(), coap_resize_binary() and coap_delete_binary()
functions.
configure.ac:
man/Makefile.am:
man/coap.txt.in:
man/coap_string.txt.in: (new)
Add in documentation for the coap_string functions.
libcoap-2.map:
libcoap-2.sym:
Update with new functions.
coap_config.h.contiki:
include/coap2/lwippools.h:
include/coap2/mem.h:
src/mem.c:
Add support for fixed memory allocations for Cacke-Key and Cache-Entry
include/coap2/pdu.h:
src/pdu.c:
tests/test_pdu.c:
Change parameter max_delta to max_opt to better reflect actual usage.
include/coap2/pdu.h:
src/pdu.c:
Remove unneeded COAP_OPT_LONG and COAP_OPT_END definitions.
Remove unused function coap_add_option_later().
src/pdu.c:
Update coap_pdu_parse_opt() to sanity check the valid lengths of all the
known options.
src/coap_io_lwip.c:
src/net.c:
Ignore packets < 4 bytes
Send back a RST for UDP/DTLS if malformed PDU.
src/option.c:
Clean up coap_option_filter_get() documentation.