Commit Graph
1405 Commits
Author SHA1 Message Date
Jean-Claude Michelou 01b2ec78fd examples: Add missing stat macro for win32. 2018-09-24 15:54:11 +02:00
jcmichelou 949d32da86 net.h: Fix documentation of coap_context_set_keepalive() 2018-09-24 15:53:45 +02:00
jcmichelou f0a85e2278 build: Rebuild symbols list 2018-09-24 15:53:07 +02:00
jcmichelou 48d304e7ac io, net: Pong response may have same timestamp as ping.
Because of time accuracy of COAP_TICKS_PER_SECOND (usually 1000
ticks per second on platform POSIX), the pong response may have
the same timestamp as the ping request. To be reliable, the pong
timestamp must be tracked separately from the general last RX/TX
timestamp.
2018-09-24 15:51:13 +02:00
jcmichelou 460c7248bb resource.c: Return 0 if there is no observer to notify.
According to documentation, coap_resource_notify_observers() must return 0 if
no observer will be notified. This can help an application release resources
associated to that resource for observation.
2018-09-24 15:42:40 +02:00
jcmichelou 4e73052872 session: Improve event reporting, add auto-ping and csm timeout.
Add new event types to report the TCP connection status and CSM exchange
status to the application. Add optional auto send of ping messages for
reliable client sessions. Add default timeout of 30s for receiving a CSM
message from the remote host after connect.
2018-09-24 15:42:40 +02:00
Olaf Bergmann c090fa96dc pdu.h: Added Content-Formats from RFC 8428 (SenML) 2018-09-06 12:20:06 +02:00
Olaf Bergmann b7772e8dd5 .gitignore: updated to include gcov files
All files ending in .gcda, .gcno, and .gcov are now ignored.
2018-08-01 20:33:34 +02:00
Olaf Bergmann ed2d9acd1a Makefile.am: added target for cleaning gcov files
Calling 'make clean' now deleted all files ending on .gcda, .gcno,
and .gcov. This requires the find utility to be present.
2018-08-01 20:31:42 +02:00
Olaf Bergmann 7dc5c9d822 configure.ac: add option for gcov flags
Gcov[1] is a tool to investigate test code coverage. To collect
runtime statistics, certain compiler options must be set, i.e.
-fprofile-arcs, -ftest-coverage, and --coverage. Currently, only
the Gnu C Compiler is known to support the gcov instrumentation.

This change adds the configure option --enable-gcov that checks if
the compiler supports the aforementioned compiler flags and enables
these.

[1] https://gcc.gnu.org/onlinedocs/gcc/Gcov.html
2018-08-01 20:31:08 +02:00
Olaf Bergmann 4980971dce oss-fuzz: pass libFuzzingEngine in LDLIBS 2018-08-01 15:47:25 +02:00
Olaf Bergmann 1cef78ebda coap-server.c: check if data is present in PUT request
This change change fixes coverity CID 1472105.
2018-07-31 11:26:33 +02:00
Olaf Bergmann 57ee5eb55c coap-server.c: fix NULL-pointer dereference in example server
When realloc() returns NULL, hnd_put() must be left immediately
after setting the response code.

This change fixes coverity CID 1472106.
2018-07-31 11:23:04 +02:00
Olaf Bergmann 87761373e4 coap_session.c: fix possible NULL-pointer dereference
Re-arrange checks in coap_new_client_session_pki() to prevent possible
dereference of setup_data before checking for NULL.

This fixes coverity CID 1472107.
2018-07-31 11:16:51 +02:00
obgm 2213e021b4 Merge pull request #232 from mrdeep1/delayqueue
Rename coap_session_t sendqueue variable to delayqueue
2018-07-31 10:55:16 +02:00
obgm 95d1aa6951 Merge pull request #221 from mrdeep1/issue-197
coap_io.c,net.c: Fix head of node queue re-transmit timeouts
2018-07-31 10:52:31 +02:00
Olaf Bergmann 57c78e40dd Makefile.oss-fuzz: Wrapper Makefile for OSS Fuzzer
This Makefile will be invoked from the OSS Fuzzer to create the
fuzzing executables. Invocation:

  make -C tests/oss-fuzz -f Makefile.oss-fuzz

This change closes issue #231 [1].

[1] https://github.com/obgm/libcoap/issues/231
2018-07-30 14:53:19 +02:00
Olaf Bergmann 248a27518d Makefile.ci.in: Add make targets for OSS fuzzer
This change extends the continuous integration Makefile.ci with
new rules for creating the executables for OSS-Fuzz [1].

Object files and linked executables are now created in the directory
$OUT which is set to '.' by default.

[1] https://github.com/google/oss-fuzz
2018-07-30 14:47:44 +02:00
Olaf Bergmann 15a45f6f24 str.h: fix coap_make_str_const macro for C++
As C++ forbides returning a pointer to a temporary object, the
creation of a coap_str_const_t to wrap the character-array and
size done in coap_make_str_const() does not work.

This change therefore creates a C++ class CoAPStrConst in namespace
libcoap in a way that allows the default constructor to be used with
aggregate initialization.

This commit closes issue #233 [2].

[1] https://en.cppreference.com/w/cpp/language/aggregate_initialization
[2] https://github.com/obgm/libcoap/issues/233
2018-07-27 16:23:57 +02:00
obgm ccb01d0257 Merge pull request #204 from mrdeep1/coap_string_t
Replace str with coap_string_t.  Make tokens coap_binary_t
2018-07-27 16:20:21 +02:00
Jon Shallow 06f57978de Replace str with coap_string_t. Make tokens coap_binary_t
New struct coap_binary_t - same as coap_string_t, used for tokens

Deprecate struct str with the intent of removing it downstream as it
polutes namespace.

Make end of coap_string_t data a NUL.

Updated coap_make_str_const(), removing .length= and .s= to keep upstream
compilers happy.

Update Doxygen for str.h

Files:
examples/client.c
examples/coap-rd.c
examples/coap-server.c
examples/contiki/server.c
examples/etsi_iot_01.c
include/coap/resource.h
include/coap/str.h
include/coap/subscribe.h
man/coap_observe.txt.in
src/net.c
src/resource.c
src/str.c
src/uri.c
tests/test_options.c

Update
2018-07-26 15:45:38 +01:00
Jon Shallow a0f94fe2de Rename coap_session_t sendqueue variable to delayqueue
This better describes what is going on here (as they are created by
coap_session_delay_pdu() and are only released off this queue when
either the session becomes established, or the outstanding CON requests
falls below COAP_DEFAULT_NSTART (a value of 1).

This is to remove confusion with the use of coap_context_t sendqueue
which is used for retransmitting data after no response detected for a
CON request.

include/coap/coap_session.h
src/coap_io.c
src/coap_session.c
src/net.c
2018-07-26 14:06:37 +01:00
obgm e1491dee77 Merge pull request #226 from mrdeep1/logging-doc
New coap_logging(3) and updated Doxygen comments for logging
2018-07-26 14:08:25 +02:00
obgm 38246dd41d Merge pull request #230 from mrdeep1/sendqueue-cleanup
net.c: Flush out session->sendqueue when PDU is delayed
2018-07-26 14:02:36 +02:00
Olaf Bergmann e83d0ede27 pdu_parse_target.c: fix include path for coap.h 2018-07-26 13:02:33 +02:00
Olaf Bergmann 93f9ee61b3 build.sh: integrate OSS-Fuzz syntax checks in CI build 2018-07-26 12:35:27 +02:00
Olaf Bergmann 315067add0 configure.ac: add creation of tests/oss-fuzz/Makefile.ci 2018-07-26 12:29:13 +02:00
Olaf Bergmann f0f614897e Makefile.ci.in: Continuous integration checks for OSS-Fuzz
The sub-directory tests/oss-fuzz contains single files that are
used from the Open Source Software Fuzzer [1]. This change provides
a template Makefile with the proper flags for compiling libcoap
applications in a continuous integration environment such as travis.

Intended usage from top_srcdir is:

  make -C test/oss-fuzz -f Makefile.ci check clean

[1] https://github.com/google/oss-fuzz/
2018-07-26 12:22:35 +02:00
Jon Shallow a5cd7dcbd9 net.c,coap_session.c: Flush out session->sendqueue when PDU is delayed
Delayed PDUs (found by the limiting of 1 CON request outstanding) are
added to session->sendqueue by coap_session_delay_pdu().
The session->sendqueue is only flushed out when a session becomes established
by calling coap_session_connected().

This fix now calls coap_session_connected() whenever the current CON count
is decremented.

Additionally, CON tracking now only tracks UDP & DTLS sessions.

coap_session_connected() is updated to not sent out more than one CON
request.
2018-07-26 08:20:34 +01:00
obgm 733628c3d2 Merge pull request #229 from mrdeep1/con-active
Missing case for #201 to close down con_active
2018-07-25 18:01:06 +02:00
obgm ea97fbb835 Merge pull request #228 from mrdeep1/loss-level-restore
src/debug.c: Allow loss level of 0% to restore full flow
2018-07-25 17:53:00 +02:00
Jon Shallow 0a36832bd3 Missing case for #201 to close down con_active
The RST to a CoAP Ping was not decrementing the con_active count, so
all new CON requests were waiting for the Ping to expire.
2018-07-25 14:49:25 +01:00
Jon Shallow 4eeda95ac7 src/debug.c: Allow loss level of 0% to restore full flow
If a loss level is configured using coap_debug_set_packet_loss(), it
is not possible to restore full flow using 0% - as 0 is rejected as
being invalid.  This fix allows 0% to restore full traffic flows again.
2018-07-25 11:47:00 +01:00
obgm 9184a75a21 Merge pull request #225 from mrdeep1/dynamic-resource-server
coap-server: Support for being able to create dynamic resources on the fly
2018-07-25 11:17:16 +02:00
Jon Shallow 224153c206 coap-server: Support for being able to create dynamic resources on the fly
Add in -d max option, which then causes coap_resource_unknown_init() to get
called.

Number of dynamic resoures is limited by 'max'.  The current set of resources
can be determined by using .well-known/core

If max is reached, 4.06 is returned.

Fixed typo in man coap_resource(3) in example for unknown resources
2018-07-25 10:12:14 +01:00
Jon Shallow c695dea7cd New coap_logging(3) and updated Doxygen comments for logging
Documentation changes/updates only - no code changes.

configure.ac
include/coap/coap_dtls.h
include/coap/coap_session.h
include/coap/debug.h
man/Makefile.am
man/coap.txt.in
man/coap_context.txt.in
man/coap_logging.txt.in (new)
2018-07-25 09:48:02 +01:00
obgm 6bb40d5af3 Merge pull request #179 from mrdeep1/tcp-setup
coap_openssl tidy up, fix first PSK fails if both PSK and PKI are enabled on server
2018-07-25 10:18:54 +02:00
Jon Shallow bb0b19546f examples/coap-server.c, examples/client.c Support new coap_dtls_pki_t
Updated to support the new coap_dtls_pki_t.

Add in new -C and -R options to support / test PKI mutual authentication

Make sure time resource is triggered no more frequently than once a sec.
2018-07-25 09:16:00 +01:00
Jon Shallow 95fb280d58 Makefile.am: Exclude coap_dtls_context_set_pki_root_cas
Also, exclude coap_endpoint_new_dtls_session() as it is an internal function
2018-07-24 14:49:13 +01:00
Jon Shallow e2c3571598 libcoap-2.{map|sym}: Add in coap_context_set_pki_root_cas()
Also, remove coap_endpoint_new_dtls_session() as it is an internal function
2018-07-24 14:49:13 +01:00
Jon Shallow 9a1f0ab475 man pages: New coap_encryption(3) and coap_session(3)
Split out old coap_context(3) into coap_context(3), coap_encryption(3) and
coap_session(3) with coap_encryption(3) primarily updated to reflect the
updated PKI configuration options.

coap-client.txt.in
coap-server.txt.in

Update with new options making use of updated PKI interface
2018-07-24 14:49:04 +01:00
Jon Shallow bfa24d499f {coap_session|net}.c: Update internal coap_dtls_context_set_*() functions
Update calls to coap_dtls_context_set_*() functions
"\n" terminate coap_log() calls

src/coap_session.c:
coap_session_disconnected() Report the session disconnected reason

Warn if coap_new_client_session_psk() called without both key and
identity defined (OpenSSL cannot handle this)

src/net.c:
coap_context_set_pki_root_cas(): New function
2018-07-23 11:17:45 +01:00
Jon Shallow 340a3d03b4 {coap_notls|/coap_tinydtls}.c: Update internal coap_dtls_context_set_*() functions
coap_dtls_context_set_pki_root_cas(): New function
coap_dtls_context_set_psk(): Remove unused parameters, add in server parameter
coap_dtls_context_set_pki(): Add in server parameter
coap_dtls_context_check_keys_enabled(): Add in UNUSED

src/coap_tinydtls.c:
coap_dtls_free_session() set coap_session->tls = NULL
2018-07-23 11:17:44 +01:00
Jon Shallow 0355821afe {coap_dtls|net}.h: New coap_context_set_pki_root_cas(), updated coap_dtls_pki_t
coap_context_set_pki_root_cas(): New
coap_dtls_context_set_psk(): remove unused parameters, add in server parameter
coap_dtls_context_set_pki(): add in server parameter

coap_dtls_pki_t: Additional configuration parameters
coap_dtls_security_setup_t: Updated
coap_dtls_cn_callback_t: New
coap_dtls_sni_callback_t: New
coap_pki_key_t: New
coap_pki_key_pem_t: New
coap_pki_key_asn1_t: New
coap_dtls_sni_t: New

Comments tidy up.

Better Doxygen comments for coap_dtls.h and net.h

Doxygen fix for debug.h (introduced by #219 merge)
Doxygen update coap_endpoint_new_dtls_session() for in coap_session.h
2018-07-23 11:14:22 +01:00
Jon Shallow d7373da99d src/coap_openssl.c: Fix broken ASN1 setup in coap_dtls_context_set_pki()
coap_dtls_pki_t struct has been enhanced to have more configuration options.
These configuruation options then tell libcoap what needs to get checked by
the underlying OpenSSL library rather than the user application has to do it.
There still is support for the user application to do all the Certificate
checking etc.

A late change to the PKI Pull request got missed for the TLS case
in coap_dtls_context_set_pki() for the mapping of private key types to
the OpenSSL version.  Have now pulled common DTLS and TLS code into a seperate
function

Fixed coap_(d)tls_free_session to not shut down a session that is not yet
fully started, as well as calling SSL_shutdown() twice if appropriate
The ssl parameter is set to NULL after closedown

Made coap_dtls_context_set_psk() smarter in what was updated, depending on
whether called by a client or server

Make sure that coap_dtls_psk_client_callback is defined in
coap_dtls_context_set_psk() in case coap_dtls_context_set_pki() was called
first.  This fixes the first time issue after startup where a PSK client
was unable to establish a DTLS session - subsequent times were successful

Added in a set of callbacks, invoked from coap_dtls_context_set_pki(), so that
a server can differentiate between an incoming PSK or PKI connection request.
These are only invoked if no full_call_back was defined in the setup_data

Add in a set of user definable callbacs for checking CN and SNI provided
information

Add in support for the generation and detection of ALPN externsion

Output error message if PKI or PSK was not set up before a server endpoint was
set up and (D)TLS is being used.

Allow a client to talk to a server that is PKI enabled without the need for
a PreShared Key or PKI Certificate

Set the SSL information at the SSL, not the CTX level when it is a client
2018-07-23 10:26:05 +01:00
Jon Shallow c9763dbe8c src/coap_io.c: Add in TCP Keepalive to socket
To enable early detection of a TCP connection failure.

Tidy up linelength of some surrounding functions.
2018-07-23 10:26:05 +01:00
obgm 668c45e527 Merge pull request #219 from mrdeep1/coap-show-pdu
debug.c: Make coap_show_pdu() use fprintf() or coap_log() for output
2018-07-23 11:13:25 +02:00
Jon Shallow fd421dd119 debug.c: Make coap_show_pdu() use coap_log() or fprintf()
coap_show_pdu()'s API is now coap_show_pdu(coap_log_t, coap_pdu_t*)
New function void coap_set_show_pdu_output(int use_fprintf)
Default is use fprintf() instead of coap_log()

The output buffer size can be configuring -DCOAP_DEBUG_BUF_SIZE

Output COAP_OPTION_SIZE2 option as well

For binary data, output ascii readable equivalent immediately under the
hex output for ease of debugging.

include/coap/debug.h
src/debug.c

Update coap_show_pdu() API
New function coap_set_show_pdu_output()
Update coap_show_pdu() code

include/coap/pdu.h

Define the coap debug output debug buffer size
COAP_DEBUG_BUF_SIZE

examples/client.c
examples/contiki/coap-observer.c
src/net.c
tests/test_wellknown.c
tests/test_pdu.c

Update coap_show_pdu() calls

libcoap-2.map
libcoap-2.sym

New function coap_set_show_pdu_output()
2018-07-20 18:58:55 +01:00
obgm 30da5299ef Merge pull request #223 from mrdeep1/observe-leak
src/resource.c: Handle subscriber leak if app is not handling duplicates
2018-07-20 18:39:40 +02:00
Jon Shallow df665114c6 src/resource.c: Handle subscriber leak if app is not handling duplicates
If multiple GET requests for the same URI + QUERY with different tokens and
Observe =0 is set, then for each GET there is an increment of the
subscriptions.

Currently, if the application is not clearing out the duplicate subscribers,
then the subscriber list gets large and eventually runs out of memory.

This fix stops duplicate subscriptions for the same session with the same
URI + QUERY, deleting the original entry and replacing it with a new
subscription.
2018-07-20 17:02:50 +01:00