X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fserver%2Ftelnet_server.c;h=420f5d70a05e407c27807caad310fadbeff4a00d;hb=6c137a2fc0bf53b9c0b8eda51e6f5361552b0112;hp=94c89431b977faf5e466e82955688d61b8f554cd;hpb=f68dff66904321392c3137db7eb40e8633c2e507;p=fw%2Fopenocd diff --git a/src/server/telnet_server.c b/src/server/telnet_server.c index 94c89431b..420f5d70a 100644 --- a/src/server/telnet_server.c +++ b/src/server/telnet_server.c @@ -2,7 +2,7 @@ * Copyright (C) 2005 by Dominic Rath * * Dominic.Rath@gmx.de * * * - * Copyright (C) 2007,2008 Øyvind Harboe * + * Copyright (C) 2007-2010 Øyvind Harboe * * oyvind.harboe@zylin.com * * * * Copyright (C) 2008 by Spencer Oliver * @@ -30,7 +30,7 @@ #include "telnet_server.h" #include -static unsigned short telnet_port = 4444; +static const char *telnet_port; static char *negotiate = "\xFF\xFB\x03" /* IAC WILL Suppress Go Ahead */ @@ -44,13 +44,14 @@ static char *negotiate = * we write to it, we will fail. Subsequent write operations will * succeed. Shudder! */ -int telnet_write(struct connection *connection, const void *data, int len) +static int telnet_write(struct connection *connection, const void *data, + int len) { struct telnet_connection *t_con = connection->priv; if (t_con->closed) return ERROR_SERVER_REMOTE_CLOSED; - if (write_socket(connection->fd, data, len) == len) + if (connection_write(connection, data, len) == len) { return ERROR_OK; } @@ -58,14 +59,14 @@ int telnet_write(struct connection *connection, const void *data, int len) return ERROR_SERVER_REMOTE_CLOSED; } -int telnet_prompt(struct connection *connection) +static int telnet_prompt(struct connection *connection) { struct telnet_connection *t_con = connection->priv; return telnet_write(connection, t_con->prompt, strlen(t_con->prompt)); } -int telnet_outputline(struct connection *connection, const char *line) +static int telnet_outputline(struct connection *connection, const char *line) { int len; @@ -93,14 +94,14 @@ int telnet_outputline(struct connection *connection, const char *line) return ERROR_OK; } -int telnet_output(struct command_context *cmd_ctx, const char* line) +static int telnet_output(struct command_context *cmd_ctx, const char* line) { struct connection *connection = cmd_ctx->output_handler_priv; return telnet_outputline(connection, line); } -void telnet_log_callback(void *priv, const char *file, unsigned line, +static void telnet_log_callback(void *priv, const char *file, unsigned line, const char *function, const char *string) { struct connection *connection = priv; @@ -132,7 +133,7 @@ void telnet_log_callback(void *priv, const char *file, unsigned line, telnet_write(connection, "\b", 1); } -int telnet_new_connection(struct connection *connection) +static int telnet_new_connection(struct connection *connection) { struct telnet_connection *telnet_connection = malloc(sizeof(struct telnet_connection)); struct telnet_service *telnet_service = connection->service->priv; @@ -177,7 +178,8 @@ int telnet_new_connection(struct connection *connection) return ERROR_OK; } -void telnet_clear_line(struct connection *connection, struct telnet_connection *t_con) +static void telnet_clear_line(struct connection *connection, + struct telnet_connection *t_con) { /* move to end of line */ if (t_con->line_cursor < t_con->line_size) @@ -194,7 +196,7 @@ void telnet_clear_line(struct connection *connection, struct telnet_connection * t_con->line_cursor = 0; } -int telnet_input(struct connection *connection) +static int telnet_input(struct connection *connection) { int bytes_read; unsigned char buffer[TELNET_BUFFER_SIZE]; @@ -202,7 +204,7 @@ int telnet_input(struct connection *connection) struct telnet_connection *t_con = connection->priv; struct command_context *command_context = connection->cmd_ctx; - bytes_read = read_socket(connection->fd, buffer, TELNET_BUFFER_SIZE); + bytes_read = connection_read(connection, buffer, TELNET_BUFFER_SIZE); if (bytes_read == 0) return ERROR_SERVER_REMOTE_CLOSED; @@ -540,7 +542,7 @@ int telnet_input(struct connection *connection) return ERROR_OK; } -int telnet_connection_closed(struct connection *connection) +static int telnet_connection_closed(struct connection *connection) { struct telnet_connection *t_con = connection->priv; int i; @@ -578,32 +580,19 @@ int telnet_connection_closed(struct connection *connection) return ERROR_OK; } -int telnet_set_prompt(struct connection *connection, char *prompt) -{ - struct telnet_connection *t_con = connection->priv; - - if (t_con->prompt != NULL) - free(t_con->prompt); - - t_con->prompt = strdup(prompt); - - return ERROR_OK; -} - int telnet_init(char *banner) { - struct telnet_service *telnet_service = malloc(sizeof(struct telnet_service)); - - if (telnet_port == 0) + if (strcmp(telnet_port, "disabled") == 0) { - LOG_INFO("telnet port disabled"); - free(telnet_service); + LOG_INFO("telnet server disabled"); return ERROR_OK; } + struct telnet_service *telnet_service = malloc(sizeof(struct telnet_service)); + telnet_service->banner = banner; - add_service("telnet", CONNECTION_TCP, telnet_port, 1, telnet_new_connection, telnet_input, telnet_connection_closed, telnet_service); + add_service_pipe("telnet", telnet_port, 1, telnet_new_connection, telnet_input, telnet_connection_closed, telnet_service); return ERROR_OK; } @@ -611,7 +600,7 @@ int telnet_init(char *banner) /* daemon configuration command telnet_port */ COMMAND_HANDLER(handle_telnet_port_command) { - return CALL_COMMAND_HANDLER(server_port_command, &telnet_port); + return CALL_COMMAND_HANDLER(server_pipe_command, &telnet_port); } COMMAND_HANDLER(handle_exit_command) @@ -640,5 +629,6 @@ static const struct command_registration telnet_command_handlers[] = { int telnet_register_commands(struct command_context *cmd_ctx) { + telnet_port = strdup("4444"); return register_commands(cmd_ctx, NULL, telnet_command_handlers); }