aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2020-01-28 13:13:36 +0100
committerPau Espin Pedrol <pespin@sysmocom.de>2020-01-28 13:18:36 +0100
commit7f8e0502e2b5692441fb8c281ef5556172591883 (patch)
tree1dc70e9e13ef3e4e57a6f2dacf0fb4da7681c61f
parent6326e8ff85a176edd5235f6e2e718e7577cfacd6 (diff)
stream: Add new WAIT_RECONNECT cli state
It's not really needed right now from logic point of view, since we reused NONE for that. But it makes logging and logic clearer, and will make it easier if we decide to move it to FSMs at a later point in time. Other state value_string names are also modified with its whitespace removed since anyway we'd need to change them to match WAIT_RECONNECT length. Let's drop the space because imho it's not that useful and anyway if we move to FSMs at some point then we won't have them anyway. Change-Id: I7b9a6da87081c418b0d14bab5f34369c5eca6fe8
-rw-r--r--src/stream.c16
-rw-r--r--tests/stream/stream_test.err8
2 files changed, 14 insertions, 10 deletions
diff --git a/src/stream.c b/src/stream.c
index c47ae3e..8a063f2 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -129,16 +129,18 @@ static int setsockopt_nodelay(int fd, int proto, int on)
*/
enum osmo_stream_cli_state {
- STREAM_CLI_STATE_NONE = 0, /* No fd associated, may have timer active to try to connect again */
- STREAM_CLI_STATE_CONNECTING = 1, /* Fd associated, but connection not yet confirmed by peer or lower layers */
- STREAM_CLI_STATE_CONNECTED = 2, /* Fd associated and connection is established */
+ STREAM_CLI_STATE_NONE, /* No fd associated, no timer active */
+ STREAM_CLI_STATE_WAIT_RECONNECT, /* No fd associated, has timer active to try to connect again */
+ STREAM_CLI_STATE_CONNECTING, /* Fd associated, but connection not yet confirmed by peer or lower layers */
+ STREAM_CLI_STATE_CONNECTED, /* Fd associated and connection is established */
STREAM_CLI_STATE_MAX
};
static const struct value_string stream_cli_state_names[] = {
- { STREAM_CLI_STATE_NONE, " NONE" },
- { STREAM_CLI_STATE_CONNECTING, "CONNECTING" },
- { STREAM_CLI_STATE_CONNECTED, " CONNECTED" },
+ { STREAM_CLI_STATE_NONE, "NONE" },
+ { STREAM_CLI_STATE_WAIT_RECONNECT, "WAIT_RECONNECT" },
+ { STREAM_CLI_STATE_CONNECTING, "CONNECTING" },
+ { STREAM_CLI_STATE_CONNECTED, "CONNECTED" },
{ 0, NULL }
};
@@ -187,6 +189,7 @@ void osmo_stream_cli_reconnect(struct osmo_stream_cli *cli)
return;
}
+ cli->state = STREAM_CLI_STATE_WAIT_RECONNECT;
LOGSCLI(cli, LOGL_INFO, "retrying in %d seconds...\n",
cli->reconnect_timeout);
osmo_timer_schedule(&cli->timer, cli->reconnect_timeout, 0);
@@ -669,6 +672,7 @@ int osmo_stream_cli_open(struct osmo_stream_cli *cli)
return 0;
error_close_socket:
+ cli->state = STREAM_CLI_STATE_NONE;
close(cli->ofd.fd);
cli->ofd.fd = -1;
return -EIO;
diff --git a/tests/stream/stream_test.err b/tests/stream/stream_test.err
index 04bfcfe..69a0b85 100644
--- a/tests/stream/stream_test.err
+++ b/tests/stream/stream_test.err
@@ -12,8 +12,8 @@
{2.000006} autoreconnecting test step 6 [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...
+[CONNECTED] osmo_stream_cli_recv(): connection closed with srv
+[WAIT_RECONNECT] osmo_stream_cli_reconnect(): retrying in 9 seconds...
{11.000008} autoreconnecting test step 4 [client OK, server OK], FD reg 0
@@ -37,7 +37,7 @@ connection closed with srv
{11.000017} non-reconnecting test step 2 [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.
+[CONNECTED] osmo_stream_cli_recv(): connection closed with srv
+[NONE] osmo_stream_cli_reconnect(): not reconnecting, disabled.
{20.000019} non-reconnecting test step 0 [client OK, server OK], FD reg 0