This change increases DOT_GRAPH_MAX_NODES to 100. With the default
value 50, the following error message occured:
error: Included by graph for 'coap_internal.h' not generated, too many nodes (51), threshold is 50. Consider increasing DOT_GRAPH_MAX_NODES.
See https://core-wg.github.io/oscore/test-spec5.html
Add in new test server oscore-interop-server to provide the necessary
functionality.
Add in script and configuration files to run the tests locally.
Based on work done in https://gitlab.informatik.uni-bremen.de/obergman/libcoap
New directories with files
include/oscore
src/oscore
New files
include/coap3/coap_oscore.h
include/coap3/coap_crypto_internal.h
include/coap3/coap_oscore_internal.h
man/coap-oscore-conf.txt.in
man/coap_oscore.txt.in
src/coap_oscore.c
tests/test_oscore.c
tests/test_oscore.h
Supported by new option (enabled by default)
./configure --enable-oscore
cmake .. -DENABLE_OSCORE=ON
Requires a TLS library configured to do the OSCORE encryption and hashing.
If COAP_RESOURCE_MAX_SUBSCRIBER is > 0
coap_add_observer() now checks and returns NULL
if COAP_RESOURCE_MAX_SUBSCRIBER is exceeded.
net.c then detects this and respond.
Per RFC7641 4.1. Request:
A server that is unable or unwilling to add a new entry to the list
of observers of a resource MAY silently ignore the registration
request and process the GET request as usual. The resulting response
MUST NOT include an Observe Option, the absence of which signals to
the client that it will not be notified of changes to the resource
and, e.g., needs to poll the resource for its state instead.
Useful for constrained systems that wants to support
observers but need to be mindful of memory usage.
The use of coap_malloc() and coap_free() does not work with environments
that have their own memory managers (e.g. LwIP).
Convert coap_malloc() to coap_malloc_type(COAP_STRING,) and coap_free()
to coap_free_type(COAP_STRING,) in the library.
Drop the use of syslog LOG_DEBUG etc. for coap_log() and use the
coap_log_debug() etc. macros which make use of COAP_LOG_DEBUG etc.
Application examples updated, as well as the man page examples.
Reliable code expects type to be CON and can get confused by NON.
Having random values for mid for reliable sessions makes no sense as
the mid is not in the packet..
Only send out RST if non-reliable session.
The modline entries for Vim were not correct, various options get
declared by a space in between, and also no special character at the end
of the line are allowed.
The modline entries for Vim were not correct, various options get
declared by a space in between, and also no special character at the end
of the line are allowed.
Assemble all the blocks before checking for Observe registration
or de-registration.
Track all the tokens used for the large FETCH registration and
re-use them for the de-registration as the server can elect to use
any of them when re-assembling the body for the registration Token.
If multiple requests (apart from DELETE) are sent at the same time to
the same resource, and the responses need to make use of the Block2 option,
there is no way for the server to differentiate between which block set a
request (if there is a resource content change) is for unless a Request-Tag
is used.
Disable this functionality by setting COAP_BLOCK_NO_PREEMPTIVE_RTAG when
calling coap_context_set_block_mode(). Request-Tag will still be sent
with any request that includes Block1 option.
coap_io_process_with_fds() can lock up a mutex for a long time for
stack constrained systems.
If 2 threads (in embedded system) provide client and server functionality
using separate coap_context_t, then there will be random delays on the other
thread while the first is waiting having called coap_io_process() or
coap_io_process_with_fds().
No thread should lock up a mutex for a long time. Moved the (mutex protected)
variables into coap_context_t so there is no need to use a mutex.
Extend coap_option_check_critical() for repeating options that are not
repeatable, so 4.02 error code can be returned.
https://www.rfc-editor.org/rfc/rfc7252#section-5.4.5
Check for option Proxy-Scheme and return 4.02 if option Uri-Host is
not present.
Clear M bit for option Block2 in a request as it must be ingnored on reception.
https://datatracker.ietf.org/doc/html/rfc7959#section-2.2
check_repeatable() now is coap_option_check_repeatable() (still internal).
Correct documented return values from changes back in 2015 for option filter
checking (option numbers could only be 1 byte then).
Correct code in coap_option_next() that assumed one of the defunct return
values.
Fix issues thrown up with ubuntu-latest moving to ubuntu-22.04.
clang 14+ generates dwarf-5 code which valgrind does not currently support
so downgrade to output dwarf-4.
Use ./autogen.sh for tinydtls builds rather than 'autorecond --force --install'
Remove some spurios } in the workflow
If the request handler returns an error code to an observe request
then following the deletion of the observe, no longer refer to the
now deleted object.
Clean up / simplify conditions for breaking out of the main coap_io_process()
loop. ready is no longer required here.
Handle mcast Observe requests by continuing to track the token
Make sure that all of the Observe (potentially blocked) response is received
before closing down.
Remove unecessary code.
coap_io_pending() checks to see if there are any PDUs pending transmission,
whether there are any large (block) transmissions in progress, whether
there are still expected response packets(client) or expected request
packets(server), and whether the client is expecting further observe
responses. If any of this is true, then it returns 1, else 0.
coap_io_pending() also invokes coap_io_process() to check that all that can
be transmitted is, as well as processes any impending input packets.
This takes coap_can_exit() a step further who only checks the transmit state.
coap_handle_response_get_block() has been updated to release the current
lg_crcv if all the fragmented body of a large transfer have been received.
Documentation updated.
Set up coap_log_t as an enum, using syslog variable names prefixed by
COAP_.
Add function coap_dtls_log() for logging information from (D)TLS libraries.
Update the log output to have use Lower-case variants for the logging levels to
indicate that output is from the (D)TLS library instead of the CoAP library.
(D)TLS libraries updated to be consistent in the usage of
coap_dtls_set_log_level()/coap_dtls_get_log_level().
Add in coap_log_emerg(), coap_log_alert() etc. as wrappers to reduce the line
length required for log entries. Updating all the coap_log() functions to
no longer use syslog variants will be a part of a separate PR.
Added in the "-V" option to the examples, with an initial default of
COAP_LOG_ERR, separating out the CoAP and (D)TLS logging levels.
Note: TinyDTLS log output will be consistent when built against a TinyDTLS
version that contains support for an external logging handler.
As well as adding in the DTLS_PSK wrappers in the appropriate place. add in
coap_dtls_psk_is_supported(), coap_dtls_pki_is_supported(),
coap_dtls_pkcs11_is_supported() and coap_dtls_rpk_is_supported() functions
to support better granularity of what capabilities are available in the
(D)TLS libraries.
Update coap_string_tls_support() to use these new functions.
Uppdated documentation for these new functions.
If NSTART > 1, any retransmit timeouts are reported on the difference in
time with an earlier entry in the transmit queue, rather than the actual
delay before the node entry gets retransmitted.
This change reports on the actual delay for a node before it gets retransmitted,
which more accurately records when the node will get retransmitted.
OpenSSL 3.0+ has removed the SSL_OP_LEGACY_SERVER_CONNECT option from the
default set list meaning that a OpenSSL 3.0+ client is unable to set up a
session with a TinyDTLS server.
This fix adds back in SSL_OP_LEGACY_SERVER_CONNECT to the set list of
options.
This removes the message that reports the failure
"unsafe legacy renegotiation disabled"
that causes the session set up to fail.
There is debate as to whether RFC 5746 is appropriate for DTLS sessions,
which is what OpenSSL 3.0+ now enforces unless SSL_OP_LEGACY_SERVER_CONNECT
is set.
The dtls versions of the server and client are built as
server-dtls and client-dtls.
Add in flexible option support for server and client. These are
a subset of the coap-server and coap-client options.