forked from auracaster/openocd
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
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user