#endif
#include "telnet_server.h"
-#include "target_request.h"
+#include <target/target_request.h>
static unsigned short telnet_port = 4444;
{
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));
}
}
/* 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);
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 */
int telnet_input(struct connection *connection)
{
int bytes_read;
- char buffer[TELNET_BUFFER_SIZE];
- char *buf_p;
+ unsigned char buffer[TELNET_BUFFER_SIZE];
+ unsigned char *buf_p;
struct telnet_connection *t_con = connection->priv;
struct command_context *command_context = connection->cmd_ctx;
switch (t_con->state)
{
case TELNET_STATE_DATA:
- if (*buf_p == '\xff')
+ if (*buf_p == 0xff)
{
t_con->state = TELNET_STATE_IAC;
}
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;
case TELNET_STATE_IAC:
switch (*buf_p)
{
- case '\xfe':
+ case 0xfe:
t_con->state = TELNET_STATE_DONT;
break;
- case '\xfd':
+ case 0xfd:
t_con->state = TELNET_STATE_DO;
break;
- case '\xfc':
+ case 0xfc:
t_con->state = TELNET_STATE_WONT;
break;
- case '\xfb':
+ case 0xfb:
t_con->state = TELNET_STATE_WILL;
break;
}
static const struct command_registration telnet_command_handlers[] = {
{
.name = "exit",
- .handler = &handle_exit_command,
+ .handler = handle_exit_command,
.mode = COMMAND_EXEC,
.help = "exit telnet session",
},
{
.name = "telnet_port",
- .handler = &handle_telnet_port_command,
+ .handler = handle_telnet_port_command,
.mode = COMMAND_ANY,
- .help = "port on which to listen "
- "for incoming telnet connections",
- .usage = "<port>",
+ .help = "Specify port on which to listen "
+ "for incoming telnet connections. "
+ "No arguments reports telnet port; zero disables.",
+ .usage = "[port_num]",
},
COMMAND_REGISTRATION_DONE
};