aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TODO-RELEASE2
-rw-r--r--debian/changelog10
-rw-r--r--debian/control12
-rw-r--r--debian/libosmonetif8.install (renamed from debian/libosmonetif6.install)0
-rw-r--r--include/osmocom/netif/stream.h1
-rw-r--r--src/Makefile.am2
-rw-r--r--src/stream.c15
-rw-r--r--tests/stream/stream_test.c41
-rw-r--r--tests/stream/stream_test.err38
-rw-r--r--tests/stream/stream_test.ok78
10 files changed, 122 insertions, 77 deletions
diff --git a/TODO-RELEASE b/TODO-RELEASE
index 45ebb75..d0852fc 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -7,5 +7,3 @@
# If any interfaces have been added since the last public release: c:r:a + 1.
# If any interfaces have been removed or changed since the last public release: c:r:0.
#library what description / commit summary line
-libosmo-netif Add new field to struct osmux_out_handle Breaks ABI with older versions
-libosmo-netif Add new API osmux_xfrm_output_init2 Deprecates old osmux_xfrm_output_init
diff --git a/debian/changelog b/debian/changelog
index e3b19c9..b3aba59 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,13 @@
+libosmo-netif (0.6.0) unstable; urgency=medium
+
+ [ Pau Espin Pedrol ]
+ * osmux: Extend osmux_out_handle and add new API to set rtp payload_type
+
+ [ Oliver Smith ]
+ * contrib/jenkins.sh: run "make maintainer-clean"
+
+ -- Pau Espin Pedrol <pespin@sysmocom.de> Wed, 07 Aug 2019 20:59:51 +0200
+
libosmo-netif (0.5.0) unstable; urgency=medium
[ Max ]
diff --git a/debian/control b/debian/control
index a9a486d..e1b2096 100644
--- a/debian/control
+++ b/debian/control
@@ -11,8 +11,8 @@ Build-Depends: debhelper (>= 9),
libdpkg-perl,
git,
doxygen,
- libosmocore-dev,
- libosmo-abis-dev,
+ libosmocore-dev (>= 1.0.0),
+ libosmo-abis-dev (>= 0.6.0),
pkg-config,
libpcap0.8-dev,
libsctp-dev,
@@ -22,7 +22,7 @@ Vcs-Browser: http://git.osmocom.org/libosmo-netif/
Vcs-Git: git://git.osmocom.org/libosmo-netif.git
Homepage: https://projects.osmocom.org/projects/libosmo-netif
-Package: libosmonetif6
+Package: libosmonetif8
Section: libs
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
@@ -39,7 +39,7 @@ Architecture: any
Depends: ${misc:Depends},
libosmocore-dev,
libosmocore,
- libosmonetif6 (= ${binary:Version})
+ libosmonetif8 (= ${binary:Version})
Multi-Arch: same
Description: Development headers for Osmocom network interface
The libosmo-netif library is one of the libraries needed by the
@@ -53,7 +53,7 @@ Package: libosmo-netif-doc
Architecture: all
Section: doc
Depends: ${misc:Depends},
- libosmonetif6,
+ libosmonetif8,
libjs-jquery
Description: Documentation for the Osmo network interface library
The libosmo-netif library is one of the libraries needed by the
@@ -66,7 +66,7 @@ Package: libosmo-netif-dbg
Section: debug
Architecture: any
Priority: extra
-Depends: libosmonetif6 (= ${binary:Version}), ${misc:Depends}
+Depends: libosmonetif8 (= ${binary:Version}), ${misc:Depends}
Multi-Arch: same
Description: Debug symbols for Osmocom network interface library
The libosmo-netif library is one of the libraries needed by the
diff --git a/debian/libosmonetif6.install b/debian/libosmonetif8.install
index 7a36b86..7a36b86 100644
--- a/debian/libosmonetif6.install
+++ b/debian/libosmonetif8.install
diff --git a/include/osmocom/netif/stream.h b/include/osmocom/netif/stream.h
index f1c160c..3427df5 100644
--- a/include/osmocom/netif/stream.h
+++ b/include/osmocom/netif/stream.h
@@ -67,6 +67,7 @@ void osmo_stream_cli_set_connect_cb(struct osmo_stream_cli *cli, int (*connect_c
void osmo_stream_cli_set_disconnect_cb(struct osmo_stream_cli *cli, int (*disconnect_cb)(struct osmo_stream_cli *cli));
void osmo_stream_cli_set_read_cb(struct osmo_stream_cli *cli, int (*read_cb)(struct osmo_stream_cli *cli));
void osmo_stream_cli_reconnect(struct osmo_stream_cli *cli);
+bool osmo_stream_cli_is_connected(struct osmo_stream_cli *cli);
struct osmo_stream_cli *osmo_stream_cli_create(void *ctx);
void osmo_stream_cli_destroy(struct osmo_stream_cli *cli);
diff --git a/src/Makefile.am b/src/Makefile.am
index 4d8b900..7acbd79 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,6 +1,6 @@
# This is _NOT_ the library release version, it's an API version.
# Please read Chapter 6 "Library interface versions" of the libtool documentation before making any modification
-LIBVERSION=7:0:1
+LIBVERSION=8:0:0
AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)
AM_CFLAGS= -fPIC -Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOABIS_CFLAGS) $(COVERAGE_CFLAGS) $(LIBSCTP_CFLAGS)
diff --git a/src/stream.c b/src/stream.c
index 3d0b665..e9307a5 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -184,6 +184,14 @@ void osmo_stream_cli_reconnect(struct osmo_stream_cli *cli)
cli->state = STREAM_CLI_STATE_CONNECTING;
}
+/*! \brief Check if Osmocom Stream Client is in connected state
+ * \param[in] cli Osmocom Stream Client
+ */
+bool osmo_stream_cli_is_connected(struct osmo_stream_cli *cli)
+{
+ return cli->state == STREAM_CLI_STATE_CONNECTED;
+}
+
/*! \brief Close an Osmocom Stream Client
* \param[in] cli Osmocom Stream Client to be closed
* We unregister the socket fd from the osmocom select() loop
@@ -275,7 +283,12 @@ static int osmo_stream_cli_fd_cb(struct osmo_fd *ofd, unsigned int what)
osmo_stream_cli_reconnect(cli);
return 0;
}
- ofd->when &= ~BSC_FD_WRITE;
+
+ /* If messages got enqueued while 'connecting', keep WRITE flag
+ up to dispatch them upon next main loop step */
+ if (llist_empty(&cli->tx_queue))
+ cli->ofd.when &= ~BSC_FD_WRITE;
+
LOGSCLI(cli, LOGL_DEBUG, "connection done.\n");
cli->state = STREAM_CLI_STATE_CONNECTED;
if (cli->proto == IPPROTO_SCTP) {
diff --git a/tests/stream/stream_test.c b/tests/stream/stream_test.c
index 439ea1a..b4846bc 100644
--- a/tests/stream/stream_test.c
+++ b/tests/stream/stream_test.c
@@ -19,9 +19,12 @@
#include <osmocom/core/msgb.h>
#include <osmocom/core/logging.h>
#include <osmocom/core/application.h>
+#include <osmocom/core/timer.h>
#include <osmocom/netif/stream.h>
+#define RECONNECT_TIMEOUT_SECS 9
+
#define DSTREAMTEST 0
struct log_info_cat osmo_stream_test_cat[] = {
[DSTREAMTEST] = {
@@ -54,8 +57,12 @@ static struct msgb *make_msgb(const char *m)
#define ASTR(rec) ((rec) ? "autoreconnecting" : "non-reconnecting")
/* client defs */
-#define LOGCLI(cli, fmt, args...) \
- printf("[%s] Client's %s(): " fmt, osmo_stream_cli_get_data(cli) ? "OK" : "NA", __func__, ##args)
+#define LOGCLI(cli, fmt, args...) do { \
+ struct timeval tv; \
+ osmo_gettimeofday(&tv, NULL); \
+ printf("{%lu.%06lu} [%s] Client's %s(): " fmt, tv.tv_sec, tv.tv_usec, \
+ osmo_stream_cli_get_data(cli) ? "OK" : "NA", __func__, ##args); \
+ } while (0)
#define CLI_SND(cli, m) do { \
struct msgb *msg = make_msgb(m); \
@@ -100,6 +107,7 @@ static int read_cb_cli(struct osmo_stream_cli *cli)
/* N. B: normally receiving 0 bytes means that we should close the connection and re-establish it
but to test autoreconnection logic we ignore it in here to let the test run till completion */
LOGCLI(cli, "0-byte read, auto-reconnect will be triggered if enabled\n");
+ osmo_gettimeofday_override_add(RECONNECT_TIMEOUT_SECS, 0);
}
if (!cli_data) {
@@ -116,7 +124,7 @@ static int read_cb_cli(struct osmo_stream_cli *cli)
static struct osmo_stream_cli *init_client_reconnection(struct osmo_stream_cli *cli, bool autoreconnect)
{
/* setting negative timeout ensures that we disable reconnection logic */
- osmo_stream_cli_set_reconnect_timeout(cli, autoreconnect ? 9 : -1);
+ osmo_stream_cli_set_reconnect_timeout(cli, autoreconnect ? RECONNECT_TIMEOUT_SECS : -1);
if (osmo_stream_cli_open(cli) < 0) {
LOGCLI(cli, "unable to open client\n");
@@ -224,9 +232,14 @@ static struct osmo_stream_cli *make_client(void *ctx, const char *host, unsigned
#define LOGLNK(lnk, fmt, args...) \
printf("[%s] Server's %s(): " fmt, osmo_stream_srv_link_get_data(lnk) ? "OK" : "NA", __func__, ##args)
-#define LOGSRV(srv, fmt, args...) \
- printf("[%s|%s] Server's %s(): " fmt, osmo_stream_srv_get_data(srv) ? "OK" : "NA", \
- osmo_stream_srv_link_get_data(osmo_stream_srv_get_master(srv)) ? "OK" : "NA", __func__, ##args)
+#define LOGSRV(srv, fmt, args...) do { \
+ struct timeval tv; \
+ osmo_gettimeofday(&tv, NULL); \
+ printf("{%lu.%06lu} [%s|%s] Server's %s(): " fmt, tv.tv_sec, tv.tv_usec, \
+ osmo_stream_srv_get_data(srv) ? "OK" : "NA", \
+ osmo_stream_srv_link_get_data(osmo_stream_srv_get_master(srv)) ? "OK" : "NA", \
+ __func__, ##args); \
+ } while (0)
#define SRV_SND(srv, m) do { \
struct msgb *msg = make_msgb(m); \
@@ -318,6 +331,7 @@ static int accept_cb_srv(struct osmo_stream_srv_link *lnk, int fd)
static void test_recon(void *ctx, const char *host, unsigned port, unsigned steps, struct osmo_stream_srv_link *lnk,
bool autoreconnect)
{
+ struct timeval tv;
struct osmo_stream_cli *cli = make_client(ctx, host, port, autoreconnect);
if (!cli)
return;
@@ -329,20 +343,24 @@ static void test_recon(void *ctx, const char *host, unsigned port, unsigned step
osmo_stream_srv_link_set_data(lnk, ctx);
while(steps--) {
+ osmo_gettimeofday_override_add(0, 1); /* small increment to easily spot iterations */
osmo_select_main(0);
- fprintf(stderr, "\n%s test step %u [client %s, server %s], FD reg %u\n", ASTR(autoreconnect), steps,
+ osmo_gettimeofday(&tv, NULL);
+ fprintf(stderr, "\n{%lu.%06lu} %s test step %u [client %s, server %s], FD reg %u\n",
+ tv.tv_sec, tv.tv_usec, ASTR(autoreconnect), steps,
osmo_stream_cli_get_data(cli) ? "OK" : "NA",
osmo_stream_srv_link_get_data(lnk) ? "OK" : "NA",
osmo_fd_is_registered(osmo_stream_cli_get_ofd(cli)));
if (test_stop_requested(lnk)) {
- printf("Server requested test termination\n");
+ printf("{%lu.%06lu} Server requested test termination\n",
+ tv.tv_sec, tv.tv_usec);
steps = 0;
}
}
osmo_stream_cli_destroy(cli);
- printf("%s test complete.\n\n", ASTR(autoreconnect));
+ printf("{%lu.%06lu} %s test complete.\n\n", tv.tv_sec, tv.tv_usec, ASTR(autoreconnect));
}
@@ -352,6 +370,11 @@ int main(void)
char *host = "127.0.0.11";
unsigned port = 1111;
void *tall_test = talloc_named_const(NULL, 1, "osmo_stream_test");
+
+ osmo_gettimeofday_override = true;
+ osmo_gettimeofday_override_time.tv_sec = 2;
+ osmo_gettimeofday_override_time.tv_usec = 0;
+
msgb_talloc_ctx_init(tall_test, 0);
osmo_init_logging2(tall_test, &osmo_stream_test_log_info);
log_set_log_level(osmo_stderr_target, LOGL_INFO);
diff --git a/tests/stream/stream_test.err b/tests/stream/stream_test.err
index 07cc7b0..04bfcfe 100644
--- a/tests/stream/stream_test.err
+++ b/tests/stream/stream_test.err
@@ -1,43 +1,43 @@
-autoreconnecting test step 11 [client NA, server OK], FD reg 1
+{2.000001} autoreconnecting test step 11 [client NA, server OK], FD reg 1
-autoreconnecting test step 10 [client NA, server OK], FD reg 1
+{2.000002} autoreconnecting test step 10 [client NA, server OK], FD reg 1
-autoreconnecting test step 9 [client NA, server OK], FD reg 1
+{2.000003} autoreconnecting test step 9 [client NA, server OK], FD reg 1
-autoreconnecting test step 8 [client NA, server OK], FD reg 1
+{2.000004} autoreconnecting test step 8 [client NA, server OK], FD reg 1
-autoreconnecting test step 7 [client OK, server OK], FD reg 1
+{2.000005} autoreconnecting test step 7 [client OK, server OK], FD reg 1
-autoreconnecting test step 6 [client OK, server OK], FD reg 1
+{2.000006} autoreconnecting test step 6 [client OK, server OK], FD reg 1
-autoreconnecting test step 5 [client OK, server OK], FD reg 1
+{2.000007} autoreconnecting test step 5 [client OK, server OK], FD reg 1
[ CONNECTED] osmo_stream_cli_recv(): connection closed with srv
[ NONE] osmo_stream_cli_reconnect(): retrying in 9 seconds...
-autoreconnecting test step 4 [client OK, server OK], FD reg 0
+{11.000008} autoreconnecting test step 4 [client OK, server OK], FD reg 0
-autoreconnecting test step 3 [client OK, server OK], FD reg 1
+{11.000009} autoreconnecting test step 3 [client OK, server OK], FD reg 1
-autoreconnecting test step 2 [client OK, server OK], FD reg 0
+{11.000010} autoreconnecting test step 2 [client OK, server OK], FD reg 0
connection closed with srv
-autoreconnecting test step 1 [client OK, server NA], FD reg 0
+{11.000011} autoreconnecting test step 1 [client OK, server NA], FD reg 0
-non-reconnecting test step 7 [client NA, server OK], FD reg 1
+{11.000012} non-reconnecting test step 7 [client NA, server OK], FD reg 1
-non-reconnecting test step 6 [client NA, server OK], FD reg 1
+{11.000013} non-reconnecting test step 6 [client NA, server OK], FD reg 1
-non-reconnecting test step 5 [client NA, server OK], FD reg 1
+{11.000014} non-reconnecting test step 5 [client NA, server OK], FD reg 1
-non-reconnecting test step 4 [client NA, server OK], FD reg 1
+{11.000015} non-reconnecting test step 4 [client NA, server OK], FD reg 1
-non-reconnecting test step 3 [client OK, server OK], FD reg 1
+{11.000016} non-reconnecting test step 3 [client OK, server OK], FD reg 1
-non-reconnecting test step 2 [client OK, server OK], FD reg 1
+{11.000017} non-reconnecting test step 2 [client OK, server OK], FD reg 1
-non-reconnecting test step 1 [client OK, server OK], FD reg 1
+{11.000018} non-reconnecting test step 1 [client OK, server OK], FD reg 1
[ CONNECTED] osmo_stream_cli_recv(): connection closed with srv
[ NONE] osmo_stream_cli_reconnect(): not reconnecting, disabled.
-non-reconnecting test step 0 [client OK, server OK], FD reg 0
+{20.000019} non-reconnecting test step 0 [client OK, server OK], FD reg 0
diff --git a/tests/stream/stream_test.ok b/tests/stream/stream_test.ok
index 7b6fb95..2106295 100644
--- a/tests/stream/stream_test.ok
+++ b/tests/stream/stream_test.ok
@@ -3,49 +3,49 @@ Prepare autoreconnecting stream client...
=======================================
Client/Server entering autoreconnecting event loop...
=======================================
-[NA] Client's connect_cb_cli(): callback triggered <initial>
-[NA] Client's connect_cb_cli(): sent 29 bytes message: 48 69 21 20 66 72 6f 6d 20 63 6f 6e 6e 65 63 74 20 63 61 6c 6c 62 61 63 6b 20 3a 2d 50
-[NA|OK] Server's read_cb_srv(): callback triggered
-[NA|OK] Server's read_cb_srv(): received 29(29) bytes: 48 69 21 20 66 72 6f 6d 20 63 6f 6e 6e 65 63 74 20 63 61 6c 6c 62 61 63 6b 20 3a 2d 50
-[NA|OK] Server's read_cb_srv(): sent 11 bytes message: 72 65 61 64 5f 63 62 5f 73 72 76
-[OK|OK] Server's read_cb_srv(): keep initial client connection
-[NA] Client's read_cb_cli(): callback triggered
-[NA] Client's read_cb_cli(): received 11(11) bytes: 72 65 61 64 5f 63 62 5f 73 72 76
-[NA] Client's read_cb_cli(): initial read, contacting server
-[OK] Client's read_cb_cli(): sent 29 bytes message: 44 6f 68 2c 20 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 73 65 72 76 65 72 20 3a 2d 44
-[OK|OK] Server's read_cb_srv(): callback triggered
-[OK|OK] Server's read_cb_srv(): received 29(29) bytes: 44 6f 68 2c 20 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 73 65 72 76 65 72 20 3a 2d 44
-[OK|OK] Server's read_cb_srv(): sent 11 bytes message: 72 65 61 64 5f 63 62 5f 73 72 76
-[OK|OK] Server's read_cb_srv(): force client disconnect on subsequent call
-[OK] Client's read_cb_cli(): callback triggered
-[OK] Client's read_cb_cli(): 0-byte read, auto-reconnect will be triggered if enabled
-[OK] Client's connect_cb_cli(): callback triggered <reconnected>
-[OK] Client's connect_cb_cli(): closing connection
-[NA|OK] Server's read_cb_srv(): callback triggered
-[NA|OK] Server's read_cb_srv(): client have already closed connection
-Server requested test termination
-autoreconnecting test complete.
+{2.000001} [NA] Client's connect_cb_cli(): callback triggered <initial>
+{2.000001} [NA] Client's connect_cb_cli(): sent 29 bytes message: 48 69 21 20 66 72 6f 6d 20 63 6f 6e 6e 65 63 74 20 63 61 6c 6c 62 61 63 6b 20 3a 2d 50
+{2.000003} [NA|OK] Server's read_cb_srv(): callback triggered
+{2.000003} [NA|OK] Server's read_cb_srv(): received 29(29) bytes: 48 69 21 20 66 72 6f 6d 20 63 6f 6e 6e 65 63 74 20 63 61 6c 6c 62 61 63 6b 20 3a 2d 50
+{2.000003} [NA|OK] Server's read_cb_srv(): sent 11 bytes message: 72 65 61 64 5f 63 62 5f 73 72 76
+{2.000003} [OK|OK] Server's read_cb_srv(): keep initial client connection
+{2.000005} [NA] Client's read_cb_cli(): callback triggered
+{2.000005} [NA] Client's read_cb_cli(): received 11(11) bytes: 72 65 61 64 5f 63 62 5f 73 72 76
+{2.000005} [NA] Client's read_cb_cli(): initial read, contacting server
+{2.000005} [OK] Client's read_cb_cli(): sent 29 bytes message: 44 6f 68 2c 20 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 73 65 72 76 65 72 20 3a 2d 44
+{2.000007} [OK|OK] Server's read_cb_srv(): callback triggered
+{2.000007} [OK|OK] Server's read_cb_srv(): received 29(29) bytes: 44 6f 68 2c 20 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 73 65 72 76 65 72 20 3a 2d 44
+{2.000007} [OK|OK] Server's read_cb_srv(): sent 11 bytes message: 72 65 61 64 5f 63 62 5f 73 72 76
+{2.000007} [OK|OK] Server's read_cb_srv(): force client disconnect on subsequent call
+{2.000008} [OK] Client's read_cb_cli(): callback triggered
+{2.000008} [OK] Client's read_cb_cli(): 0-byte read, auto-reconnect will be triggered if enabled
+{11.000010} [OK] Client's connect_cb_cli(): callback triggered <reconnected>
+{11.000010} [OK] Client's connect_cb_cli(): closing connection
+{11.000011} [NA|OK] Server's read_cb_srv(): callback triggered
+{11.000011} [NA|OK] Server's read_cb_srv(): client have already closed connection
+{11.000011} Server requested test termination
+{11.000011} autoreconnecting test complete.
Prepare non-reconnecting stream client...
=======================================
Client/Server entering non-reconnecting event loop...
=======================================
-[NA] Client's connect_cb_cli(): callback triggered <initial>
-[NA] Client's connect_cb_cli(): sent 29 bytes message: 48 69 21 20 66 72 6f 6d 20 63 6f 6e 6e 65 63 74 20 63 61 6c 6c 62 61 63 6b 20 3a 2d 50
-[NA|OK] Server's read_cb_srv(): callback triggered
-[NA|OK] Server's read_cb_srv(): received 29(29) bytes: 48 69 21 20 66 72 6f 6d 20 63 6f 6e 6e 65 63 74 20 63 61 6c 6c 62 61 63 6b 20 3a 2d 50
-[NA|OK] Server's read_cb_srv(): sent 11 bytes message: 72 65 61 64 5f 63 62 5f 73 72 76
-[OK|OK] Server's read_cb_srv(): keep initial client connection
-[NA] Client's read_cb_cli(): callback triggered
-[NA] Client's read_cb_cli(): received 11(11) bytes: 72 65 61 64 5f 63 62 5f 73 72 76
-[NA] Client's read_cb_cli(): initial read, contacting server
-[OK] Client's read_cb_cli(): sent 29 bytes message: 44 6f 68 2c 20 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 73 65 72 76 65 72 20 3a 2d 44
-[OK|OK] Server's read_cb_srv(): callback triggered
-[OK|OK] Server's read_cb_srv(): received 29(29) bytes: 44 6f 68 2c 20 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 73 65 72 76 65 72 20 3a 2d 44
-[OK|OK] Server's read_cb_srv(): sent 11 bytes message: 72 65 61 64 5f 63 62 5f 73 72 76
-[OK|OK] Server's read_cb_srv(): force client disconnect on subsequent call
-[OK] Client's read_cb_cli(): callback triggered
-[OK] Client's read_cb_cli(): 0-byte read, auto-reconnect will be triggered if enabled
-non-reconnecting test complete.
+{11.000012} [NA] Client's connect_cb_cli(): callback triggered <initial>
+{11.000012} [NA] Client's connect_cb_cli(): sent 29 bytes message: 48 69 21 20 66 72 6f 6d 20 63 6f 6e 6e 65 63 74 20 63 61 6c 6c 62 61 63 6b 20 3a 2d 50
+{11.000014} [NA|OK] Server's read_cb_srv(): callback triggered
+{11.000014} [NA|OK] Server's read_cb_srv(): received 29(29) bytes: 48 69 21 20 66 72 6f 6d 20 63 6f 6e 6e 65 63 74 20 63 61 6c 6c 62 61 63 6b 20 3a 2d 50
+{11.000014} [NA|OK] Server's read_cb_srv(): sent 11 bytes message: 72 65 61 64 5f 63 62 5f 73 72 76
+{11.000014} [OK|OK] Server's read_cb_srv(): keep initial client connection
+{11.000016} [NA] Client's read_cb_cli(): callback triggered
+{11.000016} [NA] Client's read_cb_cli(): received 11(11) bytes: 72 65 61 64 5f 63 62 5f 73 72 76
+{11.000016} [NA] Client's read_cb_cli(): initial read, contacting server
+{11.000016} [OK] Client's read_cb_cli(): sent 29 bytes message: 44 6f 68 2c 20 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 73 65 72 76 65 72 20 3a 2d 44
+{11.000018} [OK|OK] Server's read_cb_srv(): callback triggered
+{11.000018} [OK|OK] Server's read_cb_srv(): received 29(29) bytes: 44 6f 68 2c 20 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 73 65 72 76 65 72 20 3a 2d 44
+{11.000018} [OK|OK] Server's read_cb_srv(): sent 11 bytes message: 72 65 61 64 5f 63 62 5f 73 72 76
+{11.000018} [OK|OK] Server's read_cb_srv(): force client disconnect on subsequent call
+{11.000019} [OK] Client's read_cb_cli(): callback triggered
+{11.000019} [OK] Client's read_cb_cli(): 0-byte read, auto-reconnect will be triggered if enabled
+{20.000019} non-reconnecting test complete.
Stream tests completed