log: improve log_callback_fn signature
[fw/openocd] / src / server / telnet_server.c
index ef22348a9b7cd282cb9ed1caf498d1f4ba279370..b77deff139bcaa203611b298bb8849619292180d 100644 (file)
@@ -2,7 +2,7 @@
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
- *   Copyright (C) 2007,2008 Øyvind Harboe                                 *
+ *   Copyright (C) 2007,2008 Øyvind Harboe                                 *
  *   oyvind.harboe@zylin.com                                               *
  *                                                                         *
  *   Copyright (C) 2008 by Spencer Oliver                                  *
 #include "config.h"
 #endif
 
-#include "replacements.h"
-
 #include "telnet_server.h"
-
-#include "server.h"
-#include "log.h"
-#include "command.h"
-#include "target.h"
 #include "target_request.h"
 
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <ctype.h>
-
-static unsigned short telnet_port = 0;
-
-int handle_exit_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-int handle_telnet_port_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-
-static int telnet_async()
-{
-       return jim_global_long("telnet_async_state");
-}
+static unsigned short telnet_port = 4444;
 
 static char *negotiate =
                "\xFF\xFB\x03"          /* IAC WILL Suppress Go Ahead */
@@ -104,7 +83,7 @@ int telnet_outputline(connection_t *connection, const char *line)
                if (line_end)
                {
                        telnet_write(connection, "\r\n", 2);
-                       line += len+1;
+                       line += len + 1;
                }
                else
                {
@@ -122,7 +101,7 @@ int telnet_output(struct command_context_s *cmd_ctx, const char* line)
        return telnet_outputline(connection, line);
 }
 
-void telnet_log_callback(void *priv, const char *file, int line,
+void telnet_log_callback(void *priv, const char *file, unsigned line,
                const char *function, const char *string)
 {
        connection_t *connection = priv;
@@ -138,8 +117,8 @@ void telnet_log_callback(void *priv, const char *file, int 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, "                ", 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);
 
        /* output the message */
@@ -148,7 +127,7 @@ void telnet_log_callback(void *priv, const char *file, int line,
        /* put the command line to its previous state */
        telnet_prompt(connection);
        telnet_write(connection, t_con->line, t_con->line_size);
-       for (i=t_con->line_size; i>t_con->line_cursor; i--)
+       for (i = t_con->line_size; i > t_con->line_cursor; i--)
                telnet_write(connection, "\b", 1);
 }
 
@@ -191,10 +170,7 @@ int telnet_new_connection(connection_t *connection)
        telnet_connection->next_history = 0;
        telnet_connection->current_history = 0;
 
-       if (telnet_async())
-               log_add_callback(telnet_log_callback, connection);
-
-
+       log_add_callback(telnet_log_callback, connection);
 
        return ERROR_OK;
 }
@@ -348,14 +324,8 @@ int telnet_input(connection_t *connection)
 
                                                        t_con->line_cursor = -1; /* to supress prompt in log callback during command execution */
 
-                                                       if (!telnet_async())
-                                                               log_add_callback(telnet_log_callback, connection);
-
                                                        retval = command_run_line(command_context, t_con->line);
 
-                                                       if (!telnet_async())
-                                                               log_remove_callback(telnet_log_callback, connection);
-
                                                        t_con->line_cursor = 0;
 
                                                        if (retval == ERROR_COMMAND_CLOSE_CONNECTION)
@@ -623,40 +593,42 @@ int telnet_init(char *banner)
 
        if (telnet_port == 0)
        {
-               LOG_WARNING("no telnet port specified, using default port 4444");
-               telnet_port = 4444;
+               LOG_INFO("telnet port disabled");
+               free(telnet_service);
+               return ERROR_OK;
        }
 
        telnet_service->banner = banner;
 
-       add_service("telnet", CONNECTION_TELNET, telnet_port, 1, telnet_new_connection, telnet_input, telnet_connection_closed, telnet_service);
+       add_service("telnet", CONNECTION_TCP, telnet_port, 1, telnet_new_connection, telnet_input, telnet_connection_closed, telnet_service);
 
        return ERROR_OK;
 }
 
-int telnet_register_commands(command_context_t *command_context)
+/* daemon configuration command telnet_port */
+static int handle_telnet_port_command(struct command_context_s *cmd_ctx,
+               char *cmd, char **args, int argc)
 {
-       register_command(command_context, NULL, "exit", handle_exit_command,
-                                        COMMAND_EXEC, "exit telnet session");
-
-       register_command(command_context, NULL, "telnet_port", handle_telnet_port_command,
-                                        COMMAND_CONFIG, "port on which to listen for incoming telnet connections");
+       return server_port_command(cmd_ctx, cmd, args, argc, &telnet_port);
+}
 
-       return ERROR_OK;
+static int handle_exit_command(struct command_context_s *cmd_ctx,
+               char *cmd, char **args, int argc)
+{
+       return ERROR_COMMAND_CLOSE_CONNECTION;
 }
 
-/* daemon configuration command telnet_port */
-int handle_telnet_port_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+int telnet_register_commands(command_context_t *command_context)
 {
-       if (argc == 0)
-               return ERROR_OK;
+       register_command(command_context, NULL, "exit",
+                       &handle_exit_command, COMMAND_EXEC,
+                       "exit telnet session");
 
-       telnet_port = strtoul(args[0], NULL, 0);
+       register_command(command_context, NULL, "telnet_port",
+                       &handle_telnet_port_command, COMMAND_ANY,
+                       "port on which to listen for incoming telnet connections");
 
        return ERROR_OK;
 }
 
-int handle_exit_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
-{
-       return ERROR_COMMAND_CLOSE_CONNECTION;
-}
+