Files
openocd/src/server/telnet_server.h
Jan Matyas 0c6fe74351 server: Make "exit" command behave consistently
Before this fix, the "exit" command behaved differently
depending on where it was called from:

- "exit" in a telnet session: Session disconnected.
- "exit" in a Tcl session: Empty response sent but the
  session remained connected.
- "exit" in a script (outside of Telnet or Tcl): OpenOCD
  exited with code 0. Based on the help and documentation
  "exit" was apparently not intended for these cases.
  What's more, if "exit" is allowed in Tcl scripts,
  user may confuse it with the Tcl's native "exit"
  command that is not available in OpenOCD (it is
  shadowed with this OpenOCD's "exit" command).

This fix makes the behavior of "exit" consistent:

- "exit" in a telnet session: Session disconnected
  (no change).
- "exit" in a Tcl session: Session disconnected
  (same as for telnet).
- "exit" in a script: Notify the user that "exit"
  is deprecated outside of telnet/tcl but
  still shut down OpenOCD (to preserve the original
  behavior).

Update the documentation to make it very clear to users
when to use "exit" vs. "shutdown".

Change-Id: I790495330e1fa705b34097a1347fdc57aaa86de1
Signed-off-by: Jan Matyas <jan.matyas@codasip.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/9380
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Tested-by: jenkins
2026-03-08 10:13:45 +00:00

60 lines
1.8 KiB
C

/* SPDX-License-Identifier: GPL-2.0-or-later */
/***************************************************************************
* Copyright (C) 2005 by Dominic Rath *
* Dominic.Rath@gmx.de *
* *
* Copyright (C) 2007,2008 Øyvind Harboe *
* oyvind.harboe@zylin.com *
* *
* Copyright (C) 2008 by Spencer Oliver *
* spen@spen-soft.co.uk *
***************************************************************************/
#ifndef OPENOCD_SERVER_TELNET_SERVER_H
#define OPENOCD_SERVER_TELNET_SERVER_H
#include <server/server.h>
#define TELNET_BUFFER_SIZE (10*1024)
#define TELNET_LINE_HISTORY_SIZE (128)
#define TELNET_LINE_MAX_SIZE (10*256)
enum telnet_states {
TELNET_STATE_DATA,
TELNET_STATE_IAC,
TELNET_STATE_SB,
TELNET_STATE_SE,
TELNET_STATE_WILL,
TELNET_STATE_WONT,
TELNET_STATE_DO,
TELNET_STATE_DONT,
TELNET_STATE_ESCAPE,
};
struct telnet_connection {
char *prompt;
bool prompt_visible;
enum telnet_states state;
char line[TELNET_LINE_MAX_SIZE];
size_t line_size;
size_t line_cursor;
char last_escape;
char *history[TELNET_LINE_HISTORY_SIZE];
size_t next_history;
size_t current_history;
bool closed;
};
struct telnet_service {
char *banner;
};
int telnet_init(char *banner);
int telnet_register_commands(struct command_context *command_context);
void telnet_service_free(void);
bool telnet_is_from_telnet_session(struct command_context *cmd_ctx);
#endif /* OPENOCD_SERVER_TELNET_SERVER_H */