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.
If a client TCP connection connects, EPOLLOUT remains enabled so epoll_wait()
always returns immediately causing a loop until there is other data traffic.
This fix is to enable EPOLLIN and disable EPOLLOUT if COAP_SOCKET_WANT_WRITE
is not set at point of connection successful.
Make sure that gnutls_priority_set_direct() is called after
gnutls_priority_set().
Output alert information if an alert occurred.
Handle valgrind slowing things down, causing packet retries.
All this is handled by libcoap with coap-client having the ability to define
an initial Hop Count value for testing. No other application support is
required.
Incoming requests are checked for the Hop Limit option - if found, the value
is decremented in the PDU before passing it up to the application. If it
decrements to 0, a 5.08 response is generated.
coap_add_option() checks if this is a Proxy option for a request. If so, and
Hop Limit option does not exist, then the Hop Limit option is inserted into
the PDU with the default value (16).
coap_send() checks if it is a 5.08 response and if so, prepends the diagnostic
data with the IP address of the transmitting interface. If the IP address
already exists, then the PDU is dropped as the return path for the 5.08 response
is looping. An alternative method for return path looping check is also
used by initially setting, then testing and then decrementing the Hop Limit
value as response packets pass back through the proxies. If a proxy does not
copy the Hop Limit options when returning the 5.08 response, then the IP address
duplication is used.
Makefile.am:
Hide the coap_insert_option(), coap_update_option and coap_pdu_check_resize()
function from applications.
README.md:
Add in RFC8768 is supported by libcoap.
examples/client.c:
Add in the -H hoplimit option.
include/coap2/pdu.h:
Add in the default Hop-Limit: option COAP_OPTION_HOP_LIMIT.
Re-organize the COAP_OPTION_ descriptions to include
the C, U, N, R, E, I and U flags.
Expose the internal coap_pdu_check_resize() function so src/net.c can use it.
Define the two new internal functions coap_insert_option() and
coap_update_option() and expose them so that the test suites can use them.
man/coap-client.txt.in:
Document the new -H hoplimit option.
man/coap.txt.in:
Include the new RFC8768.
man/coap_pdu_setup.txt.in:
Update documentation for the CoAP options.
src/coap_debug.c:
Add in support for printing out COAP_OPTION_HOP_LIMIT.
src/net.c:
Make sure that COAP_OPTION_HOP_LIMIT is not returned in an error response.
Decrement received Hop-limit in handle_request() and generate 5.08 response
if appropriate.
Update coap_send() to prepend IP in 5.08 response.
Support COAP_OPTION_HOP_LIMIT being used in the 5.08 response message.
src/pdu.c:
Report on CoAP options that are repeated, but not defined as repeatable.
Define new (5.08) Hop Limit Reached error response.
Add in new internal coap_insert_option() function. This now means that
callers of coap_add_option() no longer have to have the options in the
correct order.
Add in new internal coap_update_option() function that updates the value of
an option.
Make coap_pdu_check_resize() non-static.
tests/test_pdu.c:
Check that options are getting inserted in the correct order when using
coap_insert_option(), even though they are provided in a random order.
Test the coap_update_option() function.
Support observe for both GET and FETCH.
Correct coap-client programatic addition of observe establish option which
"happened" to work previously because COAP_OBSERVE_ESTABLISH was 0.
coap_add_token() can error for multiple reasons when building the response
PDU - but then the response PDU is not deleted on error if it exists.
The PDU is now deleted on coap_add_token() error.
libtool marks functions included in the Makefile.am CTAGS_IGNORE list as
nm type 't' in .so library files so that they are not globally visible.
This means that tests/testdriver is unable to access these functions.
However, when building .a files, these functions remain as nm type 'T', so
are globally available.
This change causes tests/testdriver to always be be built with the .a
library file.
configure.ac:
Always enable --enable-static if --enable-tests is set.
Include this --enable-static requirement in the help information.
tests.Makefile.am
Change the default library type to always be .a and re-order parameters.
Add in a new PKI_KEY type for PKCS11 URI to get the PKI information from a
smart card or HSM device.
Currently only OpenSSL and GnuTLS are supported.
Makefile.am:
Do not expose coap_dtls_shutdown() function.
examples/client.c:
examples/coap-server.c:
Add in support for using pkcs11: URIs for defining the Certificates and
Private Keys.
include/coap2/coap_dtls.h:
Add in COAP_PKI_KEY_PKCS11 Key type.
man/coap-client.txt.in:
man/coap-server.txt.in:
Update documentation for supporting PKCS11.
man/coap_encryption.txt.in:
Add in documentation for COAP_PKI_KEY_PKCS11.
Correct some typos.
HOWTO.dual.gnutls (new):
HOWTO.dual.openssl (new):
HOWTO.dual.softhsm2 (new):
HOWTO.pkcs11 (new):
HowTo information.
src/coap_gnutls.c:
src/coap_openssl.c:
Add in PKCS11 support.
src/coap_mbedtls.c:
PKCS11 not yet supported.
Add in no-op coap_dtls_shutdown() function.
src/coap_notls.c:
src/coap_tinydtls.c:
Add in no-op coap_dtls_shutdown() function.
src/net.c:
Invoke coap_dtls_shutdown() function in coap_cleanup().
NOTE: There are memory leaks after cleanly closing down. These are not within
libcoap as far as can be determined. These leaks are a work in progress.
If the initial coap_send() PDU initiates a TCP/TLS connection, the PDU is
delayed until the CSM packets are exchanged. If the initial PDU contains
a BLOCK1 or BLOCK2 option, the PDU gets dropped as Block-Wise-Transfer in the
CSM has not been seen yet. Seen if '-b X' option is used for coap-client.
The check is now only when the session has fully established and the
situation only logged and the PDU Not dropped.
These are fixed memory sizes, but applications can ask for a bigger size
which will lead to memory corruption.
src/option.c:
src/str.c:
Check the requesting size to verify that it is within limits. Contiki
properly checks the sizes. Return NULL if too large with a logged varning.