Commit Graph
1847 Commits
Author SHA1 Message Date
obgm 4c299ddc95 Merge pull request #444 from mrdeep1/sign-conversion
Windows C4267 errors: Fix size_t conversion warnings in windows builds
2020-05-04 17:49:45 +02:00
obgm 3758a424bd Merge pull request #498 from mrdeep1/observe_delete_404
resource.c: Send out a 4.04 to any observer when deleting resource
2020-05-04 17:48:35 +02:00
Jon Shallow 3989ca5dba resource.c: Send out a 4.04 to any observer when deleting resource
As per RFC7641:

However, in the event that the state of a resource changes in
a way that would cause a normal GET request at that time to return a
non-2.xx response (for example, when the resource is deleted), the
server SHOULD notify the client by sending a notification with an
appropriate response code (such as 4.04 Not Found) and subsequently
MUST remove the associated entry from the list of observers of the
resource.

src/resource.c:

Send out a 4.04 response to all observers of a resource when deleting it.
2020-05-04 16:24:36 +01:00
obgm 708b577e5c Merge pull request #480 from mrdeep1/get_observe
net.c: Restrict subscriptions to only GET/FETCH requests
2020-05-04 16:53:31 +02:00
Olaf Bergmann 4d7f047f29 configure.ac: increase micro version to beta
In preparation of release 4.3.0, the micro version suffix has been
changed from alpha to beta.
2020-05-04 16:49:37 +02:00
obgm 6212bd3c7f Merge pull request #442 from mrdeep1/examples_code_check
Man examples: Add in support to check that the man example's code compiles
2020-05-04 16:48:06 +02:00
Jon Shallow 7812efb1eb Man examples: Add in support to check that the man example's code compiles
There needs to be an easy way to validate that the examples provided in the
man pages compile without errors.

This PR provides a new executable examples-code-check that can be run against
the .txt.in files that are in the man directory.  It abstracts the code for
each example and then runs the compiler against that stub code reporting errors
and warnings as appropriate for subsequent fixing in the man page.

.gitignore:

Ignore the new executable and the files it generates.

Makefile.am:
configure.ac:

Remove MAN_DIR and hard code in the man directory so that examples-code-check
is always built.

autogen.sh:

Make sure that all the temporary stub code files are cleaned up.

man/Makefile.am:

Support building and clean-up of the new examples-code-check.

man/examples-code-check.c: (new)

The code that parses the man pages, looking for examples and the gets
the examples compiled, testing for errors.
The function definitions in the SYNOPSIS section are also included in the
compilation of the examples.

scripts/build.sh:

If WITH_TESTS is set, check that the man page examples compile.

man/coap_encryption.txt.in:
man/coap_io.txt.in:
man/coap_observe.txt.in:
man/coap_pdu_setup.txt.in:
man/coap_resource.txt.in:
man/coap_session.txt.in:

Correct the SYNOPSIS function definitions.
2020-05-04 14:47:36 +01:00
obgm 1e9900de60 Merge pull request #443 from mrdeep1/man_fix
Remove man page coap_session_str definition duplications
2020-05-04 13:40:30 +02:00
Olaf Bergmann 35b16cef5a README: added CMake status badge
The status badge refers to the default branch (= develop).
2020-05-04 12:41:54 +02:00
obgm 9f604e7006 Merge pull request #441 from mrdeep1/observe_fix
coap-server: Make sure observe updates are sent off asap
2020-05-04 12:40:55 +02:00
Jon Shallow 21e045bb8f coap-server: Make sure observe updates are sent off asap
examples/coap-server.c:

Track time spent in the epoll branch for the select() and coap_io_process()
calls to correctly adjust wait_ms.

Adjust wait_ms to be the remaining amount in the current second, so that
any 'time' observers get the updated time just after the new second starts.

include/coap2/net.h:

Add in support to track that an observe is pending transmission - primarily
a saving of needing to look up if a observe needs to be sent.

include/coap2/resource.h:

Add in support to track the context that 'owns' a resource.

src/resource.c:

Track the context that 'owns' a resource in coap_add_resource().

Track the fact that when we are making a resource partially dirty by recording
that an observe is pending in coap_notify_observers().

In the epoll case, make sure that timerfd triggers immediately when a pending
observe is set so that the application will return immediately from any select()
etc. call to process the libcoap outstanding activity (in particular pending
observes) in coap_resource_notify_observers().

Only call coap_notify_observers() in coap_check_notify if there are any
observes pending.

man/coap_observe.txt.in:

Minor clarifications in the examples.
2020-05-04 11:04:23 +01:00
obgm 3ba85d51c1 Merge pull request #497 from mrdeep1/fix_travis_builds
travis: Fix cmake builds
2020-05-04 11:59:39 +02:00
Jon Shallow ef0903adce travis: Fix cmake builds
Make sure that "apt-get update" is called before "apt-get install".
2020-05-04 10:29:49 +01:00
obgm df13ff7e0f Merge pull request #492 from mrdeep1/user_friendly
Report on old usage of COAP_RUN_BLOCK and COAP_RUN_NO_BLOCK
2020-04-29 16:36:37 +02:00
Jon Shallow 893b5626e1 Report on old usage of COAP_RUN_BLOCK and COAP_RUN_NO_BLOCK
Give a hint in the compiler error message about using deprecated
COAP_RUN_BLOCK and COAP_RUN_NO_BLOCK and what they are replaced with.
2020-04-29 08:41:59 +01:00
Olaf Bergmann 0fccf2e713 LICENSE: Include information on uthash and MbedTLS 2020-04-28 09:09:01 +02:00
obgm 17957e1e68 Merge pull request #430 from gocarlos/develop
add cmake support to libcoap
2020-04-24 20:42:04 +02:00
Carlos Gomes Martinho b35fe5408d style: add new line in gitignore 2020-04-24 15:20:44 +02:00
Carlos Gomes Martinho 7e9a7fb3e6 ci: run github ci on PR 2020-04-24 15:20:28 +02:00
obgm c4f7851462 Merge pull request #463 from mrdeep1/coap_io_process
coap_io_process: Fix 1ms busy loop and indefinite sleep
2020-04-24 12:17:28 +02:00
Carlos Gomes Martinho e191e2d726 build: add cmake support 2020-04-22 17:07:24 +02:00
Jon Shallow 21e364206d net.c: Restrict subscriptions to only GET/FETCH requests
Check PDU code before setting up Observe subscription.

https://tools.ietf.org/html/rfc7641#section-4.1 only refers to GET.
https://tools.ietf.org/html/rfc8132#section-2.4 adds in FETCH

Check observe action is one of 0 or 1 to add or delete
subscriber appropriately as per RFC7641.
2020-04-06 12:15:24 +01:00
Olaf Bergmann 357a0f6b7a README.md: Updated CI status badge 2020-04-01 15:11:54 +02:00
Jon Shallow 9db0ff3568 Remove man page coap_session_str definition duplications
coap_session_str(3) is defined in both coap_session.txt.in and
coap_logging.txt.in.  This fix removes the duplicate so that it is
only part of coap_logging.txt.in.

Other minor corrections and including definition for coap_is_tcp_supported.

man/Makefile.am:

Correct EXTRA_PAGES definition.

man/coap_session.txt.in:

Remove references to coap_session_str definitions.
Add in coap_is_tcp_supported() definition.

man/coap_tls_library.txt.in:

Correct some typos.
2020-03-11 09:35:37 +00:00
Olaf Bergmann bbc6b24abd unit tests: Make global variables static
As of gcc 10, -fno-common is default to check for multiple
definitions of global variables at link time. This change makes
the global variables in the unit test files static to avoid
error messages caused by this.

Fixes #464
2020-02-26 12:49:38 +01:00
Jon Shallow afefd95ceb coap_io_process: Fix 1ms busy loop and indefinite sleep
Replace COAP_RUN_BLOCK with COAP_IO_WAIT and COAP_RUN_NOBLOCK with
COAP_IO_NO_WAIT for naming clarity.

Instead of COAP_IO_NO_WAIT being 1, make it -1 to fix 1ms busy loop.
Handle the case when coap_io_prepare_io returns 0 to prevent indefinite
select() wait.

include/coap2/net.h:

Make the timeout_ms parameter uint32_t in coap_io_process*() functions to
make sure special case of COAP_IO_NO_BLOCK is correctly handled on different
architectures.
Update COAP_IO_NO_BLOCK to -1.

src/coap_io.c:

Fix the 1ms busy loop and potential infinite wait in the non epoll case.

man/coap_io.txt.in:

Update documentation to reflect the changes.

examples/coap-server.c:
examples/contiki/server.c:

Update to use COAP_IO WAIT and COAP_IO_NO_WAIT as appropriate.
2020-02-25 22:03:46 +00:00
obgm 66e6fca48e Merge pull request #460 from mrdeep1/without_tcp_split_uri_fix
DISABLE_TCP: Make TCP enabled code checking more rigorous
2020-02-24 13:49:34 +01:00
obgm af6b76590a Merge pull request #457 from mrdeep1/remove_defines
pdu.h: Remove unneeded backward compatible #defines from 2011
2020-02-24 11:23:54 +01:00
obgm 78ad0c2dd7 Merge pull request #458 from mrdeep1/esp-idf_mbedtls_fix
coap_mbedtls.c: Fix esp-idf build warning if client only
2020-02-24 11:20:53 +01:00
Olaf Bergmann 620e6fe2d4 coap_debug.c: Use length returned by print_timestamp()
In theory, print_timestamp() could omit the terminating null byte when
the buffer passed as argument is too small or if snprintf() returns -1.
To make coap_log_impl() more robust against unforeseen out-of-bounds
access, the length returned by print_timestamp() now is passed to
fprintf() explicitly.
2020-02-24 11:17:35 +01:00
obgm a9d5f07661 Merge pull request #437 from mrdeep1/debug_timing
coap_debug.c: Extend date+time to include millisecs reporting
2020-02-24 11:07:35 +01:00
Jon Shallow 4b072cd706 DISABLE_TCP: Make TCP enabled code checking more rigorous
In the same way that coap_split_uri() allows coaps:// scheme even if DTLS is
not available, it should allow coap+tcp:// and coaps+tcp:// scheme and let
other functions check whether TCP/TLS is available or not.

examples/client.c:

Verify if TCP is supported for scheme coap+tcp://.

src/coap_session.c:

Verify that the underlying CoAP transport protocol is supported in
coap_session_create_client().
Add verify for TCP protocol in coap_new_endpoint(), as well as always check
if TLS is supported.

src/uri.c:

Always allow coap+tcp:// and coaps+tcp:// in coap_split_uri() as a parsed
scheme in same way that coaps:// is always allowed.

Makefile.libcoap:

Include coap_tcp.c to include coap_tcp_is_supported() function.

examples/lwip/Makefile:

Include coap_tcp.o to include coap_tcp_is_supported() function.
2020-02-24 09:58:14 +00:00
obgm 249fb860e5 Merge pull request #455 from biodranik/openssl-self-signed-certificate-depth-0
OpenSSL: Support self-signed certificates at depth 0
2020-02-24 10:46:26 +01:00
Jon Shallow bb38e995bc Windows C4267 errors: Fix size_t conversion warnings in windows builds
examples/client.c:
examples/coap-rd.c:
examples/coap-server.c:
include/coap2/block.h:
include/coap2/coap_hashkey.h:
src/block.c:
src/coap_debug.c:
src/coap_hashkey.c:
src/coap_io.c:
src/coap_openssl.c:
src/net.c:

Fix C4267 windows compilation warnings when using Visual Studio where
size_t variable parameters are being converted  in both size and sign.

There still are some C4116 warnings to fix.
2020-02-21 17:28:11 +00:00
Jon Shallow c3be323749 pdu.h: Remove unneeded backward compatible #defines from 2011
The # COAP_RESPONSE_nnn entries were introduced to handle a response change
introduced by draft-ietf-core-coap-04 in 2011.  These are no longer used
and can cause confusion - e.g.
 define COAP_RESPONSE_304      COAP_RESPONSE_CODE(203)  /* 2.03 Valid */
as raised in #456.  Entries now removed.
2020-02-21 17:27:48 +00:00
Jon Shallow bf18aad751 coap_mbedtls.c: Fix esp-idf build warning if client only
Only include psk_sni_callback() if appropriate.
2020-02-21 17:26:46 +00:00
Olaf Bergmann 636a4df2b5 .travis.yml: Cleanup
* Remove deprecated option `sudo`
* Explicitly set `os` to `linux`
2020-02-21 17:57:44 +01:00
Olaf Bergmann fb92c07ae4 .travis.yml: eliminate concurring build options
Eliminate the matrix description which overides the jobs.
If both keywords are present, matrix takes precedence. This made
subsequent stages specified in the jobs section to be ignored.

Fixes #452
2020-02-21 17:44:16 +01:00
Alexander Borsuk 52a9d2ad07 OpenSSL: Support self-signed certificates at depth 0
When libcoap config allows self-signed certificates (*) the library should
also accept self-signed certificates at depth 0. This is achieved by allowing
X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT [1].

(*) coap_dtls_pki_t.allow_self_signed == 1
[1] https://www.openssl.org/docs/man1.1.0/man3/X509_STORE_CTX_get_error_depth.html
2020-02-18 04:42:59 +01:00
Jon Shallow f342f8a4c6 coap_debug.c: Extend date+time to include millisecs reporting
This helps to debug timing issues such as DTLS retransmits.
2020-02-14 11:31:48 +00:00
obgm ef4c01df04 Merge pull request #419 from mrdeep1/coap_run_once
Rename coap_run_once() to coap_io_process()
2020-02-14 10:26:35 +01:00
Jon Shallow 9cf4f10b35 Rename coap_run_once() to coap_io_process()
coap_read(), coap_write() and coap_run_once() are confusing in their names
and do not really describe what they do.

For example, coap_read() does both reading and writing, coap_write() may
do some writing, but primarily is used to determine what should be monitored
and for how long to wait in the following select() or epoll_wait() calls.

coap_run_once() implies that the code is only to be run once - again confusing.

By renaming coap_read() to coap_io_do_io(), this better describes what this
function does.

By renaming coap_write() to coap_io_prepare_io() this better describes what this
function does.

By renaming coap_run_once() to coap_io_process(), this better describes what
this function does.

By renaming coap_io_do_events() to coap_io_do_epoll(), this better describes what
this function does and is associated with.

A wrapper function coap_io_prepare_epoll() has been created, using
coap_io_prepare_io() with some preset values to simplify function usage.

include/coap2/net.h:

Update with the new function names, and deprecate the old functions.  Also
document the fact that coap_io_prepare_io(), coap_io_do_io(),
coap_io_prepare_epoll(), and coap_io_do_epoll() are really internal functions.

Create app_io module for Doxygen.

libcoap-2.map:
libcoap-2.sym:

Expose the new functions to applications.

examples/client.c:
examples/coap-rd.c:
examples/coap-server.c:
examples/contiki/coap-observer.c:
examples/contiki/server.c:
examples/etsi_iot_01.c:
man/coap_io.txt.in:
man/coap_observe.txt.in:
src/coap_io.c:
src/coap_io_lwip.c:
src/net.c:
src/pdu.c:

Update using the new function names.

Setting the etimer has been moved out of coap_io_process() into
coap_io_do_epoll(), making the logic easier for applications to use
coap_io_do_epoll() should they need to.  This also gets rid of a
potential timing window where a pending etimer event gets missed.

coap_io_do_epoll() now calls coap_io_prepare_epoll() if the etimer has
triggered removing the need for applications using coap_io_do_epoll() to
set up their own loops if etimer is triggered.
2020-02-13 19:54:48 +00:00
Olaf Bergmann fca966385e coap-server.c: Immediate exit when no endpoints defined
get_context() creates a new context object and adds coap_endpoint_t
objects for all listen addresses. The function now clears the
context object and returns NULL when no endpoint was created,
causing the server to exit immediately.
2020-02-12 13:28:39 +01:00
obgm af841d3a91 Merge pull request #451 from nmeum/coap-server-segfault
coap_free_endpoint: fix segfault with incorrect -A argument
2020-02-12 13:24:26 +01:00
Sören Tempel 605d56eb8d coap_free_endpoint: fix segfault with incorrect -A argument
`coap-server(1)` segfaults when invoked as:

	$ coap-server -A '2001:db8::1'
	Feb 09 18:28:49 WARN coap_socket_bind_udp: bind: Address not available
	Segmentation fault

In this case, the `ep->context->endpoint` is NULL but
`coap_free_endpoint` still attempts to access it. To prevent this
invocation from causing a segmentation fault, check if
`ep->context->endpoint` is NULL before accessing it.
2020-02-09 18:39:07 +01:00
obgm 978b228f5f Merge pull request #447 from mrdeep1/missing_no_tcp_openssl
coap_openssl.c: OpenSSL < 1.1.1 fails to build with --disable-tcp
2020-02-06 14:42:28 +01:00
obgm a52cce58af Merge pull request #450 from mrdeep1/con_active_fix
net.c: Correct setting of con_active if error
2020-02-06 14:40:11 +01:00
Jon Shallow 591c130276 net.c: Correct setting of con_active if error
Only update con_active if PDU has been successfully sent
2020-02-06 12:01:09 +00:00
Jon Shallow 15f9cf568a coap_openssl.c: OpenSSL < 1.1.1 fails to build with --disable-tcp
Missing COAP_DISABLE_TCP wrapper in OpenSSL 1.1.0 - 1.1.1 specific code

doc/main.md:

Update Copyright year.

include/coap2/coap_tcp_internal.h:

Update documentation for the internal TCP functions

src/coap_session.c
src/coap_tinydtls.c

Delete trailing space
2020-02-04 10:30:16 +00:00
obgm 69dd4426c5 Merge pull request #449 from mrdeep1/coap_request_enum
Make COAP_REQUEST_* enum for clarity
2020-02-03 12:38:29 +01:00