mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-08-13 02:45:23 +00:00
For stream-based protocols (TCP), adding less data than requested ("short write") is generally not a problem - the rest of data can be sent in the next packet. So, make net_pkt_append() return length of written data instead of just bool flag, which makes it closer to the behavior of POSIX send()/write() calls. There're many users of older net_pkt_append() in the codebase however, so net_pkt_append_all() convenience function is added which keeps returning a boolean flag. All current users were converted to this function, except for two: samples/net/http_server/src/ssl_utils.c samples/net/mbedtls_sslclient/src/tcp.c Both are related to TLS and implement mbedTLS "tx callback", which follows POSIX short-write semantics. Both cases also had a code to workaround previous boolean-only behavior of net_pkt_append() - after calling it, they measured length of the actual data added (but only in case of successful return of net_pkt_append(), so that didn't really help). So, these 2 cases are already improved. Jira: ZEP-1984 Change-Id: Ibaf7c029b15e91b516d73dab3612eed190ee982b Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org> |
||
---|---|---|
.. | ||
src | ||
Makefile | ||
prj_arduino_101.conf | ||
prj_qemu_x86.conf | ||
README.rst | ||
testcase.ini |
.. _mbedtls-dtls-client-sample: mbedTLS DTLS client #################### Overview ******** This sample code shows a simple DTLS client using mbed TLS on top of Zephyr Building and running ******************** Follow the steps for testing :ref:`networking with Qemu <networking_with_qemu>`. Obtain the mbed TLS code from: https://tls.mbed.org/download/start/mbedtls-2.3.0-apache.tgz and put it in a well known directory on your Linux machine, this will be your server. change to that directory and compile the mbedTLS on your host machine: .. code-block:: console $ tar -xvzf mbedtls-2.3.0-apache.tgz $ cd mbedtls-2.3.0 $ CFLAGS="-I$PWD/configs -DMBEDTLS_CONFIG_FILE='<config-thread.h>'" make Assign the server IP address and start the DTLS server. .. code-block:: console $ sudo ip addr add 192.0.2.2/24 dev tap0 $ ./programs/ssl/ssl_server2 dtls=1 ecjpake_pw=passwd .. code-block:: console . Seeding the random number generator... ok . Bind on udp://*:4433/ ... ok . Setting up the SSL/TLS structure... ok . Waiting for a remote connection ... To stop the server use Ctrl-C and repeat steps described in f) every time QEMU gets terminated, due the Netwrok interface (tap) being restarted. From the application directory type .. code-block:: console $ make run This will result in Qemu running with the following output: .. code-block:: console . Seeding the random number generator... ok . Setting up the DTLS structure... ok . Connecting to udp 192.0.2.2:4433... ok . Setting up ecjpake password ... ok . Performing the SSL/TLS handshake... ok > Write to server: ok . Closing the connection... done On the server side you should see this .. code-block:: console . Performing the SSL/TLS handshake... hello verification requested . Waiting for a remote connection ... ok . Performing the SSL/TLS handshake... ok [ Protocol is DTLSv1.2 ] [ Ciphersuite is TLS-ECJPAKE-WITH-AES-128-CCM-8 ] [ Record expansion is 29 ] [ Maximum fragment length is 16384 ] < Read from client: 18 bytes read GET / HTTP/1.0 > Write to client: 143 bytes written in 1 fragments HTTP/1.0 200 OK Content-Type: text/html <h2>mbed TLS Test Server</h2> <p>Successful connection using: TLS-ECJPAKE-WITH-AES-128-CCM-8</p> . Closing the connection... done . Waiting for a remote connection ... ok . Performing the SSL/TLS handshake... failed ! mbedtls_ssl_handshake returned -0x7900 . Waiting for a remote connection ... Disregard the last handshake failed message, due the closing connection. If the server does not receive the messages, use a network traffic analyzer, like Wireshark. Reset the board. References ********** - https://tls.mbed.org/