telnet: fix strage blank spaces at beginning of telnet lines
authorØyvind Harboe <oyvind.harboe@zylin.com>
Thu, 21 Jan 2010 15:41:54 +0000 (16:41 +0100)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Sun, 31 Jan 2010 14:06:02 +0000 (15:06 +0100)
Sometimes we saw two strange blank spaces at the beginning
of the telnet lines.

progress
  ogress
>

This patch fixes this problem:

progress
progress
>

The code changes are *reasonably* clean, but perhaps it could be
made a bit more elegant, but I didn't want to change things after
I finished diagnosis/testing & submitting the patch.

The problem was that logging can send the text and the newline
separately in two different requests and the telnet code would
incorrectly remove the prompt from the end of a line.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
src/server/telnet_server.c

index 6f26f0ac3ca29fee55a276ade1e5cec26809c15b..94c89431b977faf5e466e82955688d61b8f554cd 100644 (file)
@@ -62,7 +62,6 @@ int telnet_prompt(struct connection *connection)
 {
        struct telnet_connection *t_con = connection->priv;
 
-       telnet_write(connection, "\r", 1); /* the prompt is always placed at the line beginning */
        return telnet_write(connection, t_con->prompt, strlen(t_con->prompt));
 }
 
@@ -116,10 +115,12 @@ void telnet_log_callback(void *priv, const char *file, unsigned line,
        }
 
        /* clear the command line */
-       telnet_write(connection, "\r", 1);
+       for (i = strlen(t_con->prompt) + t_con->line_size; i > 0; i -= 16)
+               telnet_write(connection, "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b", i > 16 ? 16 : i);
        for (i = strlen(t_con->prompt) + t_con->line_size; i > 0; i -= 16)
                telnet_write(connection, "                ", i > 16 ? 16 : i);
-       telnet_write(connection, "\r", 1);
+       for (i = strlen(t_con->prompt) + t_con->line_size; i > 0; i -= 16)
+               telnet_write(connection, "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b", i > 16 ? 16 : i);
 
        /* output the message */
        telnet_outputline(connection, string);
@@ -160,6 +161,7 @@ int telnet_new_connection(struct connection *connection)
                telnet_write(connection, "\r\n", 2);
        }
 
+       telnet_write(connection, "\r", 1); /* the prompt is always placed at the line beginning */
        telnet_prompt(connection);
 
        /* initialize history */
@@ -331,6 +333,7 @@ int telnet_input(struct connection *connection)
                                                        if (retval == ERROR_COMMAND_CLOSE_CONNECTION)
                                                                return ERROR_SERVER_REMOTE_CLOSED;
 
+                                                       telnet_write(connection, "\r", 1); /* the prompt is always placed at the line beginning */
                                                        retval = telnet_prompt(connection);
                                                        if (retval == ERROR_SERVER_REMOTE_CLOSED)
                                                                return ERROR_SERVER_REMOTE_CLOSED;