* Copyright (C) 2005 by Dominic Rath *
* Dominic.Rath@gmx.de *
* *
- * Copyright (C) 2007,2008 Øyvind Harboe *
+ * Copyright (C) 2007,2008 Øyvind Harboe *
* oyvind.harboe@zylin.com *
* *
* Copyright (C) 2008 by Spencer Oliver *
#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, command_context_t *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);
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))
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;
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))
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);
int server_loop(command_context_t *command_context)
{
- service_t *service;
+ struct service *service;
/* used in select() */
fd_set read_fds;
if (service->connections)
{
- connection_t *c;
+ struct connection *c;
for (c = service->connections; c; c = c->next)
{
/* handle activity on connections */
if (service->connections)
{
- connection_t *c;
+ struct connection *c;
for (c = service->connections; c;)
{
{
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 */
return ERROR_OK;
}
+/* tell the server we want to shut down */
+COMMAND_HANDLER(handle_shutdown_command)
+{
+ shutdown_openocd = 1;
+
+ return ERROR_COMMAND_CLOSE_CONNECTION;
+}
+
int server_register_commands(command_context_t *context)
{
- register_command(context, NULL, "shutdown", handle_shutdown_command,
- COMMAND_ANY, "shut the server down");
+ register_command(context, NULL, "shutdown",
+ handle_shutdown_command, COMMAND_ANY,
+ "shut the server down");
return ERROR_OK;
}
-/* tell the server we want to shut down */
-int handle_shutdown_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
-{
- shutdown_openocd = 1;
- return ERROR_COMMAND_CLOSE_CONNECTION;
+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;
}