From 4712d0a1e0a5fecd38f1dfbf5152d1fe3e776b9c Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Sun, 25 Feb 2018 18:15:59 +0100 Subject: [PATCH] lib-program-client: test-program-client-net: Match client input handling code with test-program-client-unix. --- .../test-program-client-net.c | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/src/lib-program-client/test-program-client-net.c b/src/lib-program-client/test-program-client-net.c index f546d28ca5..a716cca11f 100644 --- a/src/lib-program-client/test-program-client-net.c +++ b/src/lib-program-client/test-program-client-net.c @@ -134,7 +134,11 @@ test_program_input_handle(struct test_client *client, const char *line) switch(o_stream_send_istream(client->os_body, client->in)) { case OSTREAM_SEND_ISTREAM_RESULT_ERROR_OUTPUT: + i_panic("Cannot write to ostream-temp: %s", + o_stream_get_error(client->os_body)); case OSTREAM_SEND_ISTREAM_RESULT_ERROR_INPUT: + i_warning("Client stream error: %s", + i_stream_get_error(client->in)); return -1; case OSTREAM_SEND_ISTREAM_RESULT_WAIT_INPUT: break; @@ -190,34 +194,36 @@ static void test_program_input(struct test_client *client) const char *line = ""; int ret = 0; - if (client->state == CLIENT_STATE_BODY) { - if (test_program_input_handle(client, NULL)==0 && - !client->in->eof) - return; - } else { - while((line = i_stream_read_next_line(client->in)) != NULL) { - ret = test_program_input_handle(client, line); - if (client->state == CLIENT_STATE_BODY) - ret = test_program_input_handle(client, NULL); - if (ret != 0) break; + while (ret >= 0) { + if (client->state == CLIENT_STATE_BODY) { + ret = test_program_input_handle(client, NULL); + break; + } + while (client->state != CLIENT_STATE_BODY) { + line = i_stream_read_next_line(client->in); + if (line == NULL) { + ret = 0; + break; + } + if ((ret=test_program_input_handle(client, line)) < 0) { + i_warning("Client sent invalid line: %s", line); + break; + } } - - if ((line == NULL && !client->in->eof) || - (line != NULL && ret == 0)) - return; } - /* incur short delay to make sure the client did not disconnect - prematurely */ + if (ret < 0 || client->in->stream_errno != 0) + return; + if (!client->in->eof) + return; + + if (client->state != CLIENT_STATE_BODY) + i_warning("Client prematurely disconnected"); + io_remove(&client->io); + /* incur slight delay to check if the connection gets + prematurely closed */ test_globals.to = timeout_add_short(100, test_program_run, client); - - if (client->state != CLIENT_STATE_BODY) { - if (client->in->eof) - i_warning("Client prematurely disconnected"); - else - i_warning("Client sent invalid line: %s", line); - } } static void test_program_connected(struct test_server *server) -- 2.47.3