OpenOCD
server.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 /***************************************************************************
4  * Copyright (C) 2005 by Dominic Rath *
5  * Dominic.Rath@gmx.de *
6  * *
7  * Copyright (C) 2007,2008 Øyvind Harboe *
8  * oyvind.harboe@zylin.com *
9  * *
10  * Copyright (C) 2008 by Spencer Oliver *
11  * spen@spen-soft.co.uk *
12  ***************************************************************************/
13 
14 #ifndef OPENOCD_SERVER_SERVER_H
15 #define OPENOCD_SERVER_SERVER_H
16 
17 #ifdef HAVE_CONFIG_H
18 #include "config.h"
19 #endif
20 
21 #include <helper/log.h>
22 #include <helper/replacements.h>
23 
24 #ifdef HAVE_NETINET_IN_H
25 #include <netinet/in.h>
26 #endif
27 
32 };
33 
34 #define CONNECTION_LIMIT_UNLIMITED (-1)
35 
36 struct connection {
37  int fd;
38  int fd_out; /* When using pipes we're writing to a different fd */
39  struct sockaddr_in sin;
41  struct service *service;
43  void *priv;
44  struct connection *next;
45 };
46 
49  const char *name;
63  COMMAND_HELPER((*service_info_handler), const struct service *service);
68 };
69 
70 struct service {
71  char *name;
72  enum connection_type type;
77  char *port;
79  unsigned short portnumber;
80  int fd;
81  struct sockaddr_in sin;
86  int (*input)(struct connection *connection);
87  void (*service_dtor)(struct service *service);
88  COMMAND_HELPER((*service_info), const struct service *service);
91  void *priv;
92  struct service *next;
93 };
94 
95 int add_service(const struct service_driver *driver, const char *port,
96  int max_connections, void *priv);
97 int remove_service(const char *name, const char *port);
98 
99 int server_host_os_entry(void);
100 int server_host_os_close(void);
101 
102 int server_preinit(void);
103 int server_init(struct command_context *cmd_ctx);
104 void server_quit(void);
105 void server_free(void);
106 int exit_on_signal(int sig);
107 
108 void server_keep_clients_alive(void);
109 
111 bool server_terminated_by_signal(void);
113 uint8_t server_get_exit_status_code(void);
114 
115 int server_register_commands(struct command_context *context);
116 
117 int connection_write(struct connection *connection, const void *data, int len);
118 int connection_read(struct connection *connection, void *data, int len);
119 
120 bool openocd_is_shutdown_pending(void);
121 
128 COMMAND_HELPER(server_pipe_command, char **out);
129 
130 COMMAND_HELPER(server_port_command, unsigned short *out);
131 
132 #define ERROR_SERVER_REMOTE_CLOSED (-400)
133 #define ERROR_CONNECTION_REJECTED (-401)
134 #define ERROR_SERVER_INTERRUPTED (-402)
135 
136 #endif /* OPENOCD_SERVER_SERVER_H */
const char * name
Definition: armv4_5.c:75
static struct esp_usb_jtag * priv
Definition: esp_usb_jtag.c:219
int connection_write(struct connection *connection, const void *data, int len)
Definition: server.c:772
int server_get_last_signal_number(void)
Definition: server.c:628
int server_preinit(void)
Definition: server.c:702
int connection_read(struct connection *connection, void *data, int len)
Definition: server.c:784
uint8_t server_get_exit_status_code(void)
Definition: server.c:637
COMMAND_HELPER(server_pipe_command, char **out)
Defines an extended command handler function declaration to enable access to (and manipulation of) th...
Definition: server.c:999
int server_host_os_close(void)
Definition: server.c:694
void server_free(void)
Definition: server.c:749
int server_register_commands(struct command_context *context)
Definition: server.c:963
bool server_terminated_by_signal(void)
Definition: server.c:623
int server_host_os_entry(void)
Definition: server.c:674
int exit_on_signal(int sig)
Definition: server.c:759
void server_keep_clients_alive(void)
Definition: server.c:429
bool openocd_is_shutdown_pending(void)
Definition: server.c:792
int remove_service(const char *name, const char *port)
Definition: server.c:382
void server_loop(struct command_context *command_context)
Definition: server.c:437
connection_type
Definition: server.h:28
@ CONNECTION_PIPE
Definition: server.h:30
@ CONNECTION_STDINOUT
Definition: server.h:31
@ CONNECTION_TCP
Definition: server.h:29
int add_service(const struct service_driver *driver, const char *port, int max_connections, void *priv)
Definition: server.c:211
int server_init(struct command_context *cmd_ctx)
Definition: server.c:722
void server_quit(void)
Definition: server.c:739
struct sockaddr_in sin
Definition: server.h:39
struct command_context * cmd_ctx
Definition: server.h:40
void * priv
Definition: server.h:43
int fd_out
Definition: server.h:38
int fd
Definition: server.h:37
struct service * service
Definition: server.h:41
struct connection * next
Definition: server.h:44
bool input_pending
Definition: server.h:42
void(* service_dtor_handler)(struct service *service)
Definition: server.h:61
const char * name
the name of the server
Definition: server.h:49
int(* connection_closed_handler)(struct connection *connection)
callback to tear down the connection
Definition: server.h:65
void(* keep_client_alive_handler)(struct connection *connection)
called periodically to send keep-alive messages on the connection
Definition: server.h:67
int(* new_connection_handler)(struct connection *connection)
complete code to accept a new connection.
Definition: server.h:58
int(* new_connection_during_keep_alive_handler)(struct connection *connection)
optional minimal setup to accept a connection during keep-alive
Definition: server.h:51
int(* input_handler)(struct connection *connection)
callback to handle incoming data
Definition: server.h:60
COMMAND_HELPER((*service_info_handler), const struct service *service)
Callback to provide more details for the services command.
Definition: server.h:70
struct service * next
Definition: server.h:92
int fd
Definition: server.h:80
void(* service_dtor)(struct service *service)
Definition: server.h:87
void * priv
Definition: server.h:91
int max_connections
Definition: server.h:82
int(* new_connection_during_keep_alive)(struct connection *connection)
Definition: server.h:84
struct sockaddr_in sin
Definition: server.h:81
struct connection * connections
Definition: server.h:83
int(* input)(struct connection *connection)
Definition: server.h:86
char * name
Definition: server.h:71
char * port
The 'port', which can be an integer for TCP, or 'disabled', 'pipe' (stdin/out) or a FIFO path.
Definition: server.h:77
int(* connection_closed)(struct connection *connection)
Definition: server.h:89
unsigned short portnumber
If port is an integer it is parsed and saved here.
Definition: server.h:79
void(* keep_client_alive)(struct connection *connection)
Definition: server.h:90
COMMAND_HELPER((*service_info), const struct service *service)
enum connection_type type
Definition: server.h:72
int(* new_connection)(struct connection *connection)
Definition: server.h:85