Commit Graph
299 Commits
Author SHA1 Message Date
Jon Shallow c216a8801d Update the etsi test cases in the examples directory
examples/etsi_coaptest.sh
examples/etsi_testcases.sh

Minor corrections to the scripts to get them working
2018-12-07 20:22:56 +00:00
Jon Shallow 78c59ff300 Add in support for building coap-etsi_iot_01 and coap-tiny examples
examples/Makefile.am

Support building the additional examples using 'make check'.

.gitignore

Ignore the new examples executables.
2018-12-07 20:22:56 +00:00
Jon Shallow 157985cb95 Update examples/tiny.c to use the new API
Update all the coap_ calls to use the new API, and the updated structures.
Introduce using session instead of context.
Correct all the compiler warnings.
2018-12-07 20:22:45 +00:00
Jon Shallow 37e7a974a6 Update examples/etsi_iot_01.c to use the new API
Update all the coap_ calls to use the new API, and the updated structures.
Introduce using session instead of context.
Correct all the compiler warnings.
Keep the payload in the resource rather than separately.
2018-12-07 20:14:40 +00:00
Olaf Bergmann bac6b61a4e client.c, coap-server.c: updated copyright information 2018-12-01 09:27:24 +01:00
obgm ea4bca7335 Merge pull request #277 from nmeum/fix-U-option
coap-client: The -U option doesn't expect an argument
2018-11-28 13:15:11 +01:00
Sören Tempel 1c789a7beb coap-client: The -U option doesn't expect an argument
Thus it must not be postfixed with a colon character in the optstring.
While at it move the option to the beginning of the opstring to the
other options which don't expect an argument.

Without this commit the -U option is unusable.
2018-11-28 13:00:33 +01:00
obgm 47fc7a8bb8 Merge pull request #271 from mrdeep1/block1
Fix packet recovery support for BLOCK1 option in examples for lossy connections
2018-11-28 13:00:26 +01:00
Jon Shallow ad383aa3b2 Replace signal() with sigaction() in examples
examples/coap-server.c:
examples/etsi_iot_01.c:

Replace signal() with sigaction() for handling SIGINT or SIGTERM

examples/client.c:

Include sigaction() for catching SIGINT or SIGTERM for a clean shutdown.
2018-11-27 15:33:53 +00:00
Jon Shallow cbfa1790d3 Update examples to include using coap_string_tls_version() in usage()
examples/client.c
examples/coap-rd.c
examples/coap-server.c

Add in call to coap_string_tls_version() in usage().
2018-11-27 11:42:21 +00:00
Carsten Schoenert 32eea645b1 spelling: fix compatability -> compatibility 2018-11-24 13:59:34 +01:00
Jon Shallow a1be686921 Fix packet recovery support for BLOCK1 option in examples for lossy connections
examples/client.c
 examples/coap-server.c

For the client, the next block to transmit is always now the last acknowledged
block plus one.

If the client receives a duplicate BLOCK1 ACK, the duplicate ACK is ignored by
checking the message ids.

For the server, it no longer rejectes a duplicate BLOCK1 request, but does
still object if there is a gap in the provided data due to a missing block.
In otherwords, the blocks must arrive sequentially from the client.
2018-11-11 13:30:42 +00:00
Jon Shallow 04ced3e5e5 Replace debug(), info() & warn() macros with appropriate coap_log()
This then removes the need for name polution/confict of debug(), info() and
warn() when building other projects that use libcoap and need to #include the
libcoap header files

Updated:
 examples/client.c
 examples/contiki/coap-observer.c
 examples/etsi_iot_01.c
 include/coap2/debug.h
 src/async.c
 src/block.c
 src/coap_io.c
 src/coap_openssl.c
 src/coap_session.c
 src/coap_tinydtls.c
 src/debug.c
 src/mem.c
 src/net.c
 src/option.c
 src/pdu.c
 src/resource.c
 src/uri.c

If the debug() etc. macros are still required, then the change to
include/coap2/debug.h just needs to be reverted.

There are also a couple of space changes - to cause log output to be columnar
e.g "ERR" was padded to "ERR ", so that "EMRG" or "ERR " log output output was
aligned in the same way.

This is a replacement for PR#51, and partially deals with name polution issues
raised in Issue #50.

Parameter re-aligned some long strings, splitting strings across multiple lines
2018-11-10 20:27:50 +00:00
Olaf Bergmann 839bdc5418 Revert "examples/Makefile.am: remove $(DTLS_LIBS) variable"
This reverts commit 91bfd5b103 because
it introduced a wrong variable substitution:

The problem here is that top_srcdir is . in the top-level Makefile, so
the link command ends up having this:

  [...]   ../.libs/libcoap-2-tinydtls.a -L./ext/tinydtls -ltinydtls

Whereas, in examples/Makefile.am, top_srcdir is .., so using DTLS_LIBS
would be correctly replaced by

          ../.libs/libcoap-2-tinydtls.a -L../ext/tinydtls -ltinydtls

The same holds for the Makefile in the subdirectory tests.
2018-11-08 11:24:04 +01:00
Carsten Schoenert 91bfd5b103 examples/Makefile.am: remove $(DTLS_LIBS) variable
Using the variable $(DTLS_LIBS) in the *_LDADD isn't correct, for
controlling the linker flags the *.la file is normally holding all the
required information.

This was introduced by 5687681d71 and is
partially removed by this commit.
2018-11-06 17:37:55 +01:00
Olaf Bergmann 726a0f74cf lwip/Makefile: fix include path
need to use include/coap2 after API number increment
2018-10-04 14:27:00 +02:00
Jean-Claude Michelou 79542ff4f0 examples: fixes the missing macro S_ISDIR
The Windows build need the S_ISDIR macro here.
2018-10-04 12:43:00 +02:00
Carsten Schoenert 6dde2bc9a8 examples: use the coap2 folder for including coap.h
Due the changed installation folder we need to adjust the source path to
coap.h for the files within the files of the examples.
2018-10-04 12:23:14 +02:00
Jon Shallow f5367ef3de Delete trailing spaces from files, replace TAB with 8*SPACE
"git diff -w" shows no differences

TAB left alone in files that are not C based files or documentation
2018-09-28 17:34:07 +01:00
obgm ee5cee6e6b Merge pull request #248 from mrdeep1/block2
BLOCK option support in coap-server
2018-09-28 18:24:24 +02:00
obgm 6ea51c8a03 Merge pull request #242 from mrdeep1/tls13
Add in support for OpenSSL 1.1.1 to support TLS1.3 (RFC8446)
2018-09-28 17:47:33 +02:00
Jon Shallow 469357b824 BLOCK option support in coap-server
hashkey.[ch] files restored (now prefixed with coap_)
LWIP and Contiki builds now include these files

block.[ch]:
New function coap_add_data_blocked_response() to simplify GET
responses and handle adding in BLOCK2 options as appropriate.
Needs coap_hash() to generate ETag option.

net.c:
Determine if Block2 is in use, and add to coap_add_observer().

resource.[ch]:
Include Block2 request in coap_add_observer().

subscribe.h:
Include Block2 definition in coap_subscriber_t for using during
observe responses.

pdu.h:
Update comment.

coap-client.c:
No longer causes duplicate calls to coap_show_pdu()
(one in library, one in coap-client for the same PDU).

If a block'ed response received and observing, now observing continues.
(Fixes #166).

Send Observe Cancel with Block2 option if -b defined

coap-server.c:
Replaced all option setting, data addition etc. with new
coap_add_data_blocked_response() function in the GET handlers.
(Fixes #246 Issue 2).

Support PUT with BLOCK1.
(Fixes #246 Issue 1).

Add in -N option to send observe responses as non-confirmable.

Handle small wait_ms values correctly (after being decremented) for testing
whether observe should be triggered or not.

Refresh time every second by making COAP_RESOURCE_CHECK_TIME 1

Manuals:
Add in new function coap_add_data_blocked_response()
Update coap_observe with coap_delete_observer(s) functions

Correct example typo and use new function in hnd_get_time().

Add in -N option to coap-server(5)

Be more specific about COAP_RESOURCE_FLAGS_NOTIFY_NON and
COAP_RESOURCE_FLAGS_NOTIFY_CON usage for observe.

Files:
Makefile.am
Makefile.libcoap
examples/client.c
examples/coap-server.c
examples/lwip/Makefile
include/coap/block.h
include/coap/coap_hashkey.h
include/coap/pdu.h
include/coap/resource.h
include/coap/subscribe.h
libcoap-2.map
libcoap-2.sym
man/Makefile.am
man/coap-server.txt.in
man/coap_handler.txt.in
man/coap_observe.txt.in
man/coap_pdu_setup.txt.in
man/coap_resource.txt.in
src/block.c
src/coap_hashkey.c
src/net.c
src/resource.c
2018-09-24 20:49:57 +01:00
obgm 2501ff92c9 Merge pull request #208 from mrdeep1/build-lwip
Update code to build LwIP and Contiki from the examples directory
2018-09-24 16:19:15 +02:00
Jean-Claude Michelou ecfcd37f0c client: Sort options alphabetically, ping is TCP only. 2018-09-24 15:55:57 +02:00
Jean-Claude Michelou 01b2ec78fd examples: Add missing stat macro for win32. 2018-09-24 15:54:11 +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
Jon Shallow 45731f1c0e Add in support for OpenSSL 1.1.1 to support TLS1.3 (RFC8446)
OpenSSL 1.1.0 has support for making decisions during receipt of
the Client Hello - the call back function is set up using
SSL_CTX_set_tlsext_servername_callback() which is called later in the
Client Hello processing - but called every Client Hello.
Certificates and Preshared Keys have to be set up in the SSL CTX before
SSL_Accept() is called, making the code messy to decide whether this is a
PKI or PSK incoming request to handle things accordingly if both are
defined.  SNI has to create a new SSL CTX to handle different server names
with different crtificates.

OpenSSL 1.1.1 introduces a new function SSL_CTX_set_client_hello_cb().
The call back is invoked early on in the Client Hello processing giving
the ability to easily use different Preshared Keys, Certificates etc.
Certificates do not have to be set up in the SSL CTX before SSL_Accept is
called.
Later in the Client Hello code, the callback for
SSL_CTX_set_tlsext_servername_callback() is still called, but only if SNI
is being used by the client, so cannot be used for doing things the
OpenSSL 1.1.0 way.

OpenSSL 1.1.1 supports TLS1.3.

Consequently, this code has to have compile time options to include /
exclude code based on whether compiled against 1.1.0 or 1.1.1, as well as
have additional run time checks.

Updated:
examples/client.c
examples/coap-server.c
include/coap/coap_dtls.h
man/coap_context.txt.in
man/coap_encryption.txt.in
man/coap_session.txt.in
src/coap_openssl.c

In addition, the callback app_override_tls_setup_call_back has been removed
from coap_dtls_pki_t and replaced with additional_tls_setup_call_back
as app_override_tls_setup_call_back became very messy with 2 versions
of OpenSSL.  If the application now wants to make additional checks/
changes etc., app_override_tls_setup_call_back will get invoked after
the defined configuration checks are done.

SNI has been added into coap-client for testing / demonstration
2018-08-21 11:09:59 +01: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
Jon Shallow d766f9d8ee Update code to build LwIP and Contiki from the examples directory
Update code to use new APIs
[Some code changes modelled on PR #202, some code being moved between files]
Remove #ifdef WITH_LWIP from coap_io.c as file is not used
Add in resource time to lwip
Update for Travis build
Report on Contiki memory allocate failures to ease debugging
Make the different memory type counts configurable by using the -D option
included in a CFLAGS definition to the ./configure command line

.travis.yml
BUILDING
Makefile.libcoap
examples/contiki/Makefile
examples/contiki/README     new
examples/contiki/server.c
examples/contiki/.gitignore (new)
examples/lwip/Makefile
examples/lwip/README
examples/lwip/lwipopts.h
examples/lwip/server-coap.c
examples/lwip/server.c
include/coap/address.h
include/coap/coap_io.h
include/coap/lwippools.h
include/coap/pdu.h
scripts/build.sh
src/address.c
src/coap_io.c
src/coap_io_lwip.c
src/coap_session.c
src/mem.c
src/net.c
src/pdu.c
2018-07-27 15:30:37 +01: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 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 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 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
Jon Shallow bf5dd5a82f coap-{client|server}: Add in PKI Support. Tidy up Usage output
examples/client.c

Add in support for using PKI certificates

examples/coap-server.c

Add in support for using PKI certificates
remove default PSK key
Add in '-h hint' option

Make Usage reflect actual options available to use

man/coap-client.txt.in

Include the missing options
Update -A option to be a single entity
Sort the options into ascending order as reported by Usage

man/coap-server.txt.in

Include the missing options
Add in '-h hint' option
2018-07-03 15:06:17 +01:00
Olaf Bergmann 0f8a3b334f coap-rd.c: remove type cast from RD_ROOT_STR
To ensure correct use of RD_ROOT_STR in coap_make_str_const() the
type cast to const uint8_t * has been removed.
This change addresses CID 1469634.
2018-06-06 16:49:12 +02:00
Olaf Bergmann df7b36edd5 client.c: explicitly restrict URI port number to 16 bits
To document that uri.port input to coap_encode_var_safe() never
has more than 16 bits, an explicit bit mask has been added. This
change is supposed to avoid the false positive CID 1469635.
2018-06-06 16:42:47 +02:00
Olaf Bergmann ec9bf6eb4a client.c: fix bug in Accept option parser
cmdline_content_type() treated option numbers as 8-bit integers and
therefore could not parse values >255. Now, option numbers are
represented as uint16_t to allow for numbers between 0 and 65535.

Moreover, as RFC 7252 has made the Accept option non-repeatable,
cmdline_content_type() now will only add a single Accept option.
2018-06-06 16:30:40 +02:00
Olaf Bergmann 171f25e123 client.c: fix -Wstringop-overflow warning in cmdline_token()
Calling strncpy() on the variable (and erroneous) calculated token
length in cmdline_token() has caused stringop-overflow warning by
GCC 8. This change fixes the error and replaces strncpy() by
memcpy() to quieten the compiler.
2018-06-05 12:28:40 +02:00
Jon Shallow c7e9359f02 Make coap_encode_var_bytes() by replacing with coap_encode_var_safe()
Update code / examples / man pages with the updated function.

include/coap/libcoap.h:
Add in new define COAP_DEPRECATED to generate compiler warnings when used

include/coap/encode.h
New coap_encode_var_safe() function that includes the size of the output
buffer as a parameter.

Make coap_encode_var_bytes() a wrapper for coap_encode_var_safe() and
mark it as COAP_DEPRECATED for backwards compatability

src/encode.c:
New coap_encode_var_safe() function that includes the size of the output
buffer as a parameter.

examples/coap-server.c:
examples/contiki/server.c:
Make the ticks resource consistent in case
2018-06-05 09:41:58 +01:00
obgm 60f699d535 Merge pull request #189 from mrdeep1/optlist-mem-leak
options: Fix subtle memory leak in coap_add_optlist_pdu()
2018-06-04 14:05:01 +02:00
Olaf Bergmann 8e446e732a client.c: Remove unused function set_timeout()
The function is not used because most of the timer handling has
been moved to coap_run_once().

This change avoids clang to emit a warning due to -Wunused-function.
2018-05-31 11:12:01 +02:00
obgm 4cfc722bf1 Merge pull request #181 from mrdeep1/coap-server-crash
coap-server: Sanity check of input to hnd_put_time() to prevent crashes
2018-05-31 10:24:32 +02:00
Jon Shallow 9fa448e439 options: Fix subtle memory leak in coap_add_optlist_pdu()
coap_add_optlist_pdu() sorted the options for insertion, but did not update
the coap_optlist_t head (whch may then no longer point to the first entry in the
sorted chain) and so when coap_delete_optlist() was called, the first few
entries of the sorted chain may not get deleted.
Fixed by making it
 coap_add_optlist_pdu(coap_pdu_t *pdu, coap_optlist_t** optlist_chain)
instead of
 coap_add_optlist_pdu(coap_pdu_t *pdu, coap_optlist_t* optlist_chain)

Additionally deleted options_start() and options_next() as they are not
required - Issue #184.

examples/client.c:
Fix coap_add_optlist_pdu() call

include/coap/options.h:
Fix coap_add_optlist_pdu() call

libcoap-2.{map|sym}:
Delete options_start()

man/coap_observe.txt.in:
man/coap_pdu_setup.txt.in:

Update docmentation

src/option.c:
Update coap_add_optlist_pdu()

tests/test_pdu.c:
New tests for checkout out coap_insert_optlist() and coap_add_optlist_pdu()
functions
2018-05-30 11:38:50 +01:00
Jon Shallow 7dc16ed184 tests/*.c, examples/*.c: Remove cast-qual compiler warnings
Created new 'CU_ASSERT_PTR_EQUAL_C(actual, expected)' to handle const variable matching

Where appropriate

Replace 'unsigned char' with 'const uint8_t'
Replace 'str' with 'coap_str_c_t'
Replace 'str' with 'coap_string_t'
Prefix with 'const' some type casts
Update coap_add_attr() calls inline with updated API
Update coap_resource_init() calls inline with updated API
Make use of coap_make_str_const() for defining parameters

tests*/.c
Update code to stop memory leaks (as found by valgrind)

examples/coap-rd.c
Track the fact that uri_path in coap_resource_t is now a pointer
2018-05-25 14:11:04 +01:00
Olaf Bergmann a2d263356e configure.ac: enable -Wwrite-strings
As discussed in bug #185 [1], const strings should be protected
from being overwritten. This change adds -Wwrite-strings to the
compiler warning flags and fixes resulting warnings by making
static strings const.

[1] https://github.com/obgm/libcoap/issues/185
2018-05-19 09:27:50 +02:00
Jon Shallow 828967bb43 examples/coap-server.c: Sanity check of input to hnd_put_time to prevent core
The input value for time in hnd_put_time() is not sanity checked for the
upper limit.  If too large, gmtime() etc. functions will return a failure
(errno is EOVERFLOW).

Validate the input value to hnd_put_time().  Return 4.00 if failure

Verify return from gmtime() in hnd_get_time() before trying to convert to
ascii readable string. Return 4.04 if failure.
[Time may just be valid when updated in hnd_put_time(), but then
increments to be too large - hence check also in hnd_get_time()]
2018-05-18 15:10:09 +01:00
Jon Shallow 02195e13a6 examples/coap_list.[ch]: Document that these files are DEPRECATED
/*
 * examples/coap_list.[ch] are DEPRECATED.  You should be using
 * struct coap_optlist_t instead with the following functions which are a part
 * of libcoap.
 *
 * coap_new_optlist()
 * coap_insert_optlist()
 * coap_delete_optlist()
 * coap_add_optlist_pdu()
 *
 * See 'man coap_pdu_setup' for further information.
 *
 * examples/coap_list.[ch] files will be removed in a future release
 * They are left here to support building backward compatability of old versions
 * of coap-client
 */
2018-05-17 19:02:21 +01:00
Jon Shallow 89f2f68ddf examples/coap-server.c: Replace debug() with coap_log(LOG_DEBUG, )
Replace debug() with coap_log(LOG_DEBUG, )
Remove unneeded include files
Remove compiler optimizer warnings for ntohs(htons())
Fix compiler warning about unused options
2018-05-17 18:45:07 +01:00
Jon Shallow 032a46fcb3 examples/coap-rd.c: Replace debug() with coap_log(LOG_DEBUG, ) 2018-05-17 18:45:07 +01:00