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:
@@ -205,13 +205,8 @@ static void free_service(struct service *c)
|
||||
free(c);
|
||||
}
|
||||
|
||||
int add_service(char *name,
|
||||
const char *port,
|
||||
int max_connections,
|
||||
new_connection_handler_t new_connection_handler,
|
||||
input_handler_t input_handler,
|
||||
connection_closed_handler_t connection_closed_handler,
|
||||
void *priv)
|
||||
int add_service(const struct service_driver *driver, const char *port,
|
||||
int max_connections, void *priv)
|
||||
{
|
||||
struct service *c, **p;
|
||||
struct hostent *hp;
|
||||
@@ -219,14 +214,16 @@ int add_service(char *name,
|
||||
|
||||
c = malloc(sizeof(struct service));
|
||||
|
||||
c->name = strdup(name);
|
||||
c->name = strdup(driver->name);
|
||||
c->port = strdup(port);
|
||||
c->max_connections = 1; /* Only TCP/IP ports can support more than one connection */
|
||||
c->fd = -1;
|
||||
c->connections = NULL;
|
||||
c->new_connection = new_connection_handler;
|
||||
c->input = input_handler;
|
||||
c->connection_closed = connection_closed_handler;
|
||||
c->new_connection_during_keep_alive = driver->new_connection_during_keep_alive_handler;
|
||||
c->new_connection = driver->new_connection_handler;
|
||||
c->input = driver->input_handler;
|
||||
c->connection_closed = driver->connection_closed_handler;
|
||||
c->keep_client_alive = driver->keep_client_alive_handler;
|
||||
c->priv = priv;
|
||||
c->next = NULL;
|
||||
long portnumber;
|
||||
@@ -278,7 +275,7 @@ int add_service(char *name,
|
||||
c->sin.sin_port = htons(c->portnumber);
|
||||
|
||||
if (bind(c->fd, (struct sockaddr *)&c->sin, sizeof(c->sin)) == -1) {
|
||||
LOG_ERROR("couldn't bind %s to socket on port %d: %s", name, c->portnumber, strerror(errno));
|
||||
LOG_ERROR("couldn't bind %s to socket on port %d: %s", c->name, c->portnumber, strerror(errno));
|
||||
close_socket(c->fd);
|
||||
free_service(c);
|
||||
return ERROR_FAIL;
|
||||
@@ -309,7 +306,7 @@ int add_service(char *name,
|
||||
socklen_t addr_in_size = sizeof(addr_in);
|
||||
if (getsockname(c->fd, (struct sockaddr *)&addr_in, &addr_in_size) == 0)
|
||||
LOG_INFO("Listening on port %hu for %s connections",
|
||||
ntohs(addr_in.sin_port), name);
|
||||
ntohs(addr_in.sin_port), c->name);
|
||||
} else if (c->type == CONNECTION_STDINOUT) {
|
||||
c->fd = fileno(stdin);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user