Commit Graph
1987 Commits
Author SHA1 Message Date
obgm 33ba0fc261 Merge pull request #538 from mrdeep1/endpoint_t
coap_endpoint_t: Update usage of struct coap_endpoint_t to coap_endpoint_t
2020-11-11 20:12:40 +01:00
obgm d80f53e7f9 Merge pull request #511 from mrdeep1/proxy_support
Proxy: Update Proxy support for Proxy-Uri: CoAP option
2020-11-11 20:08:20 +01:00
Jon Shallow 9083189f95 Proxy: Update Proxy support for Proxy-Uri: CoAP option
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
2020-11-11 17:46:17 +00:00
obgm 5c23771267 Merge pull request #560 from dismirlian/reconnect
Update interface index with received packet's index when getting session
2020-11-03 11:50:19 +01:00
Diego Ismirlian 2ab713f3ca Update interface index with received packet's index when getting session 2020-10-28 16:55:45 -03:00
Jon Shallow 8d2a788c1c coap_endpoint_t: Update usage of struct coap_endpoint_t to coap_endpoint_t
Use 'coap_endpoint_t' instead of 'struct coap_endpoint_t' in library source
files where possible.

Remove unnecessary 'struct xxx_t;' forward declarations.

Remove unnecessary 'void coap_free_endpoint(coap_endpoint_t *ep);'
2020-10-22 13:37:47 +01:00
obgm db4c9da2f7 Merge pull request #510 from mrdeep1/rpk_support
RPK RFC7250: Add in support
2020-10-22 14:00:44 +02:00
Jon Shallow cd56fa9902 README.md: Update which libraries support RPK 2020-10-22 12:21:37 +01:00
Jon Shallow e5d052cd57 RPK: Move common asn1 code into separate file
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.
2020-10-22 12:21:37 +01:00
Jon Shallow 25fbb26c60 RPK: Do not support PKI key type COAP_PKI_KEY_PEM
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.
2020-10-22 12:21:30 +01:00
Jon Shallow d40f2d6a3f RPK RFC7250: Add in support
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.
2020-10-21 15:54:20 +01:00
obgm f9535b9690 Merge pull request #558 from mrdeep1/option_update
Update libcoap.{map|sym} files
2020-10-20 21:56:07 +02:00
Olaf Bergmann 610c3f6bf2 .github: removed consistently failing github workflow
The github workflow fails very often due to broken setup or timeouts,
therefore it has been disabled for now.
2020-10-20 21:08:47 +02:00
Jon Shallow 8bdd4afaa9 Update libcoap.{map|sym} files
Missed from commit 605f990e.

Also fixes a compiler warning now that coap_opt_length() returns uin32_t.
2020-10-20 15:24:13 +01:00
Olaf Bergmann 94e84dbf91 [unit tests] replace coap_opt_delta()
Commit 605f990e has remove the function coap_opt_delta() which
was still used in the unit tests. This now has been replaced
by coap_opt_parse().
2020-10-20 15:14:48 +02:00
obgm fd33471010 Merge pull request #556 from mrdeep1/gnutls_alert_close_notify
coap_gnutls.c: Report Close notify at LOG_DEBUG, not LOG_WARNING
2020-10-20 14:47:14 +02:00
obgm 336caecf55 Merge pull request #555 from mrdeep1/coap_add_option
coap_add_option: Fix code rebase logging level issue
2020-10-20 14:46:47 +02:00
obgm b8c66fb401 Merge pull request #537 from mrdeep1/deprecated_warnings
Deprecated: Replace deprecated functions in library
2020-10-20 14:46:04 +02:00
Olaf Bergmann 605f990ef6 option.[hc]: remove unused function coap_opt_delta() 2020-10-20 13:16:19 +02:00
Olaf Bergmann b1ee9c8912 options: fix integer overflow in option parser
As the numeric range of CoAP option codes is [0..65804], the data
type for representing these codes must be uint32_t rather than
uint16_t.

Fixes OSS-Fuzz 26371. [1]

[1] https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=26371
2020-10-20 13:16:00 +02:00
Jon Shallow 2f81b94603 coap_gnutls.c: Report Close notify at LOG_DEBUG, not LOG_WARNING
Reduce the level of reporting of Close notify alerts for default logging levels.
2020-10-16 05:32:04 -04:00
Jon Shallow f52ef9adaa coap_add_option: Fix code rebase logging level issue
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.
2020-10-16 05:16:57 -04:00
obgm 4ca959ca53 Merge pull request #499 from mrdeep1/coap_cache
coap_cache: Add in Cache Key and Cache Entry support
2020-10-14 16:32:35 +02:00
Jon Shallow 1a349d5cb4 coap_cache: Add in Cache Key and Cache Entry support
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.
2020-10-14 10:04:12 -04:00
obgm aba6646852 Merge pull request #539 from mrdeep1/option_checks
Options: Sanity check CoAP options in the PDU
2020-10-14 16:03:57 +02:00
Olaf Bergmann 0b142f9eda coap_cache: initial caching code 2020-10-14 09:33:37 -04:00
Jon Shallow e0a6593728 memory: Add in support for creating coap_binary_t objects
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
2020-10-14 09:33:37 -04:00
Jon Shallow 4d039eb01d Options: Sanity check CoAP options in the PDU
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.
2020-10-14 09:26:27 -04:00
Olaf Bergmann e581813a55 [tinydtls] update to latest version
libcoap now includes tinydtls commit 290c48d
2020-10-14 15:05:53 +02:00
Olaf Bergmann c7c416b8a0 Doxyfile.in: updated to version 1.8.20
The Doxyfile template has been updated to version 1.8.20 to get of
warnings due to deprecated features that were still referenced.
2020-10-14 14:41:40 +02:00
obgm 10db554d3e Merge pull request #523 from mrdeep1/doxygen_warnings
Doxygen: Clean up documentation errors
2020-10-14 13:35:36 +02:00
obgm 45df1c083a Merge pull request #551 from mrdeep1/epoll_spin
epoll: Stop spin between TCP connect and received data
2020-09-23 09:25:45 +02:00
Jon Shallow 8c635e709b epoll: Stop spin between TCP connect and received data
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.
2020-09-21 12:47:31 +01:00
Olaf Bergmann f00be554cc net.c: Fix fail_cnt reset on empty ACK
coap_touch_observer() must be called on empty ACKs before leaving the
dispatch function.

Fixes #550 [1]

[1] https://github.com/obgm/libcoap/issues/550
2020-09-15 10:10:11 +02:00
obgm af067703a0 Merge pull request #521 from mrdeep1/lwip_strings
LwIP: Check memory allocation sizes for COAP_OPTLIST and COAP_STRING
2020-09-10 18:44:51 +02:00
obgm 9ee4895797 Merge pull request #540 from mrdeep1/fetch_observe
Observe: Support FETCH
2020-09-10 18:08:46 +02:00
obgm c42c97044d Merge pull request #483 from mrdeep1/dtls_handshake
DTLS: Sessions unnecessarily being re-handshaked
2020-09-10 18:00:47 +02:00
obgm 24ce7425b9 Merge pull request #513 from mrdeep1/gnutls_fix
coap_gnutls.c: Fix issues found with interoperability testing
2020-09-09 17:24:55 +02:00
Jon Shallow ce4c26608f coap_gnutls.c: Fix issues found with interoperability testing
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.
2020-09-09 14:41:33 +01:00
Jon Shallow 26cd2446a8 Deprecated: Replace deprecated functions in library
examples/contiki/coap-observer.c:
examples/etsi_iot_01.c:
include/coap2/coap_prng.h:
include/coap2/net.h:
src/coap_debug.c:
src/coap_openssl.c:
src/coap_session.c:
src/net.c:
src/option.c:
tests/test_error_response.c:
tests/test_options.c:

prng -> coap_prng
prng_init -> coap_prng_init
coap_option_setb -> coap_option_filter_set
coap_option_clrb -> coap_option_filter_unset
coap_option_getb -> coap_option_filter_get

include/coap2/coap.h.windows:
win32/libcoap.vcxproj:
win32/libcoap.vcxproj.filters:

prng.h -> coap_prng.h

include/coap2/option.h:

Add in COAP_DEPRECATED in deprecated functions.
2020-09-08 17:21:34 +01:00
obgm ffc1979b6b Merge pull request #476 from mrdeep1/rfc_8768
RFC8768: Add in support for CoAP Option Hop Limit loop detection
2020-09-08 18:08:59 +02:00
Jon Shallow 7033555d29 RFC8768: Add in support for CoAP Option Hop Limit loop detection
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.
2020-09-07 12:34:04 +01:00
Jon Shallow e85e3abb82 Observe: Support FETCH
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.
2020-08-19 11:24:08 +01:00
obgm 1739507a1e Merge pull request #536 from mrdeep1/bad_tcp
net.c: memory leak in handle_request if error input
2020-08-12 17:26:00 +02:00
Olaf Bergmann 1b63deb3c3 Updated tinydtls to latest develop HEAD
Tinydtls builds have failed due to [1].

[1] https://github.com/eclipse/tinydtls/pull/44
2020-08-12 17:23:11 +02:00
Jon Shallow b3eacf2eac net.c: memory leak in handle_request if error input
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.
2020-08-12 15:32:54 +01:00
obgm cbc3430ade Merge pull request #532 from mrdeep1/cmake_build
cmake: Fix builds with new TinyDTLS
2020-08-12 14:36:37 +02:00
Jon Shallow 63665a620e cmake: Fix builds with new TinyDTLS
Use autoreconf instead of autoconf
2020-07-23 14:30:19 +01:00
Olaf Bergmann e74fc73d8d configure.ac: show library type to be built in summary
The configure summary now shows whether libcoap is built as shared or
static library.
2020-07-23 12:09:55 +02:00
obgm b373aeca57 Merge pull request #525 from mrdeep1/testdriver
testdriver: Add in support for access to libcoap internal functions
2020-07-23 12:04:15 +02:00