aboutsummaryrefslogtreecommitdiff
path: root/src/server/server.h
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2022-01-30 18:42:33 +0100
committerAntonio Borneo <borneo.antonio@gmail.com>2022-03-19 09:05:27 +0000
commit99c77806fea2625dfa2b5a3234267634d0342388 (patch)
treef9ff271c8c349cdf4b75d77b97e5751841663edf /src/server/server.h
parent36e29f49e1582c4fe32e3e02600c8a49129551e5 (diff)
downloadriscv-openocd-99c77806fea2625dfa2b5a3234267634d0342388.zip
riscv-openocd-99c77806fea2625dfa2b5a3234267634d0342388.tar.gz
riscv-openocd-99c77806fea2625dfa2b5a3234267634d0342388.tar.bz2
server: change prototype of add_service()
To easily add new methods to a service, pass all the methods through a struct. While there, drop the typedef for the methods and add currently unused new methods to support keep-alive and connections during keep-alive. No change in functionality. Change-Id: I2b5e7140db95021f6e7201e9d631ee340c60b453 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/6838 Reviewed-by: Tomas Vanek <vanekt@fbl.cz> Tested-by: jenkins
Diffstat (limited to 'src/server/server.h')
-rw-r--r--src/server/server.h36
1 files changed, 26 insertions, 10 deletions
diff --git a/src/server/server.h b/src/server/server.h
index bacd111..00f1a42 100644
--- a/src/server/server.h
+++ b/src/server/server.h
@@ -55,9 +55,25 @@ struct connection {
struct connection *next;
};
-typedef int (*new_connection_handler_t)(struct connection *connection);
-typedef int (*input_handler_t)(struct connection *connection);
-typedef int (*connection_closed_handler_t)(struct connection *connection);
+struct service_driver {
+ /** the name of the server */
+ const char *name;
+ /** optional minimal setup to accept a connection during keep-alive */
+ int (*new_connection_during_keep_alive_handler)(struct connection *connection);
+ /**
+ * complete code to accept a new connection.
+ * If 'new_connection_during_keep_alive_handler' above is present, this can be
+ * either called alone during the server_loop, or after the function above.
+ * Check the implementation in gdb_server.
+ * */
+ int (*new_connection_handler)(struct connection *connection);
+ /** callback to handle incoming data */
+ int (*input_handler)(struct connection *connection);
+ /** callback to tear down the connection */
+ int (*connection_closed_handler)(struct connection *connection);
+ /** called periodically to send keep-alive messages on the connection */
+ void (*keep_client_alive_handler)(struct connection *connection);
+};
struct service {
char *name;
@@ -68,17 +84,17 @@ struct service {
struct sockaddr_in sin;
int max_connections;
struct connection *connections;
- new_connection_handler_t new_connection;
- input_handler_t input;
- connection_closed_handler_t connection_closed;
+ int (*new_connection_during_keep_alive)(struct connection *connection);
+ int (*new_connection)(struct connection *connection);
+ int (*input)(struct connection *connection);
+ int (*connection_closed)(struct connection *connection);
+ void (*keep_client_alive)(struct connection *connection);
void *priv;
struct service *next;
};
-int add_service(char *name, const char *port,
- int max_connections, new_connection_handler_t new_connection_handler,
- input_handler_t in_handler, connection_closed_handler_t close_handler,
- void *priv);
+int add_service(const struct service_driver *driver, const char *port,
+ int max_connections, void *priv);
int remove_service(const char *name, const char *port);
int server_host_os_entry(void);