X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fserver%2Fserver.c;h=92292eb59b7ee605727e16211d224c88833210f8;hb=0a9daddc2e20d9ff5053a9faf3e1ec11fd600c73;hp=d2596112151058082132d82a6784114406b917f0;hpb=8b994145b849c40b0a195c3fb332b9770b2f9097;p=openocd.git diff --git a/src/server/server.c b/src/server/server.c index d259611215..92292eb59b 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -29,6 +29,7 @@ #include "server.h" #include "target.h" +#include "openocd.h" #include @@ -37,23 +38,22 @@ #endif -service_t *services = NULL; +struct service *services = NULL; /* shutdown_openocd == 1: exit the main event loop, and quit the debugger */ static int shutdown_openocd = 0; -int handle_shutdown_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); /* set when using pipes rather than tcp */ int server_use_pipes = 0; -int add_connection(service_t *service, command_context_t *cmd_ctx) +int add_connection(struct service *service, struct command_context *cmd_ctx) { socklen_t address_size; - connection_t *c, **p; + struct connection *c, **p; int retval; int flag = 1; - c = malloc(sizeof(connection_t)); + c = malloc(sizeof(struct connection)); c->fd = -1; memset(&c->sin, 0, sizeof(c->sin)); c->cmd_ctx = copy_command_context(cmd_ctx); @@ -110,10 +110,10 @@ int add_connection(service_t *service, command_context_t *cmd_ctx) return ERROR_OK; } -int remove_connection(service_t *service, connection_t *connection) +int remove_connection(struct service *service, struct connection *connection) { - connection_t **p = &service->connections; - connection_t *c; + struct connection **p = &service->connections; + struct connection *c; /* find connection */ while ((c = *p)) @@ -142,10 +142,10 @@ int remove_connection(service_t *service, connection_t *connection) int add_service(char *name, enum connection_type type, unsigned short 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) { - service_t *c, **p; + struct service *c, **p; int so_reuseaddr_option = 1; - c = malloc(sizeof(service_t)); + c = malloc(sizeof(struct service)); c->name = strdup(name); c->type = type; @@ -233,8 +233,8 @@ int add_service(char *name, enum connection_type type, unsigned short port, int int remove_service(unsigned short port) { - service_t **p = &services; - service_t *c; + struct service **p = &services; + struct service *c; /* find service */ while ((c = *p)) @@ -261,12 +261,12 @@ int remove_service(unsigned short port) int remove_services(void) { - service_t *c = services; + struct service *c = services; /* loop service */ while (c) { - service_t *next = c->next; + struct service *next = c->next; if (c->name) free(c->name); @@ -286,12 +286,9 @@ int remove_services(void) return ERROR_OK; } -extern void openocd_sleep_prelude(void); -extern void openocd_sleep_postlude(void); - -int server_loop(command_context_t *command_context) +int server_loop(struct command_context *command_context) { - service_t *service; + struct service *service; /* used in select() */ fd_set read_fds; @@ -330,7 +327,7 @@ int server_loop(command_context_t *command_context) if (service->connections) { - connection_t *c; + struct connection *c; for (c = service->connections; c; c = c->next) { @@ -424,7 +421,7 @@ int server_loop(command_context_t *command_context) /* handle activity on connections */ if (service->connections) { - connection_t *c; + struct connection *c; for (c = service->connections; c;) { @@ -432,7 +429,7 @@ int server_loop(command_context_t *command_context) { if ((retval = service->input(c)) != ERROR_OK) { - connection_t *next = c->next; + struct connection *next = c->next; if (service->type == CONNECTION_PIPE) { /* if connection uses a pipe then shutdown openocd on error */ @@ -534,18 +531,39 @@ int server_quit(void) return ERROR_OK; } -int server_register_commands(command_context_t *context) +/* tell the server we want to shut down */ +COMMAND_HANDLER(handle_shutdown_command) { - register_command(context, NULL, "shutdown", handle_shutdown_command, - COMMAND_ANY, "shut the server down"); + shutdown_openocd = 1; - return ERROR_OK; + return ERROR_COMMAND_CLOSE_CONNECTION; } -/* tell the server we want to shut down */ -int handle_shutdown_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +int server_register_commands(struct command_context *context) { - shutdown_openocd = 1; + register_command(context, NULL, "shutdown", + handle_shutdown_command, COMMAND_ANY, + "shut the server down"); - return ERROR_COMMAND_CLOSE_CONNECTION; + return ERROR_OK; +} + + +SERVER_PORT_COMMAND() +{ + switch (argc) { + case 0: + command_print(cmd_ctx, "%d", *out); + break; + case 1: + { + uint16_t port; + COMMAND_PARSE_NUMBER(u16, args[0], port); + *out = port; + break; + } + default: + return ERROR_INVALID_ARGUMENTS; + } + return ERROR_OK; }