From: Stephan Bosch Date: Sun, 25 Feb 2018 17:15:59 +0000 (+0100) Subject: lib-program-client: test-program-client-net: Match client input handling code with... X-Git-Tag: 2.3.9~2097 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4712d0a1e0a5fecd38f1dfbf5152d1fe3e776b9c;p=thirdparty%2Fdovecot%2Fcore.git lib-program-client: test-program-client-net: Match client input handling code with test-program-client-unix. --- 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)