From 0dde525a4601ec01aa330cd4aaa51a311edb4c19 Mon Sep 17 00:00:00 2001 From: marschap Date: Fri, 28 Nov 2008 18:34:10 +0000 Subject: [PATCH] first steps towards supporting the "bye" command --- server/client.c | 4 ++-- server/client.h | 8 +++++++- server/commands/client_commands.c | 14 ++++++++------ server/commands/menu_commands.c | 10 +++++----- server/commands/screen_commands.c | 10 +++++----- server/commands/server_commands.c | 6 +++--- server/commands/widget_commands.c | 6 +++--- 7 files changed, 33 insertions(+), 25 deletions(-) diff --git a/server/client.c b/server/client.c index 2596022..f39af65 100644 --- a/server/client.c +++ b/server/client.c @@ -53,7 +53,7 @@ Client *client_create(int sock) return NULL; } - c->ack = 0; + c->state = NEW; c->name = NULL; c->menu = NULL; @@ -110,7 +110,7 @@ client_destroy(Client *c) input_release_client_keys(c); /* Free client's other data */ - c->ack = 0; + c->state = GONE; /* Clean up the name...*/ if (c->name) diff --git a/server/client.h b/server/client.h index ee3e663..d59a5ec 100644 --- a/server/client.h +++ b/server/client.h @@ -23,9 +23,15 @@ #define CLIENT_NAME_SIZE 256 +typedef enum _clientstate { + NEW, + ACTIVE, + GONE +} ClientState; + typedef struct Client { char *name; - int ack; + ClientState state; int sock; int backlight; int heartbeat; diff --git a/server/commands/client_commands.c b/server/commands/client_commands.c index 4a0bd25..79878c6 100644 --- a/server/commands/client_commands.c +++ b/server/commands/client_commands.c @@ -34,6 +34,7 @@ #include "client.h" #include "input.h" + /*************************************************************** * Debugging only.. prints out a list of arguments it receives */ @@ -73,7 +74,7 @@ hello_func(Client *c, int argc, char **argv) display_props->cellwidth, display_props->cellheight); /* make note that client has sent hello */ - c->ack = 1; + c->state = ACTIVE; return 0; } @@ -91,6 +92,7 @@ bye_func(Client *c, int argc, char **argv) if (c != NULL) { debug(RPT_INFO, "Bye, %s!", (c->name != NULL) ? c->name : "unknown client"); + c->state = GONE; sock_send_error(c->sock, "\"bye\" is currently ignored\n"); } return 0; @@ -106,7 +108,7 @@ client_set_func(Client *c, int argc, char **argv) { int i; - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc != 3) { @@ -164,7 +166,7 @@ client_add_key_func(Client *c, int argc, char **argv) int exclusively = 0; int argnr; - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc < 2) { @@ -206,7 +208,7 @@ client_del_key_func(Client *c, int argc, char **argv) { int argnr; - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc < 2) { @@ -230,7 +232,7 @@ client_del_key_func(Client *c, int argc, char **argv) int backlight_func(Client *c, int argc, char **argv) { - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc != 2) { @@ -276,7 +278,7 @@ backlight_func(Client *c, int argc, char **argv) int info_func(Client *c, int argc, char **argv) { - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc > 1) { diff --git a/server/commands/menu_commands.c b/server/commands/menu_commands.c index 7d84fe5..f197a0b 100644 --- a/server/commands/menu_commands.c +++ b/server/commands/menu_commands.c @@ -97,7 +97,7 @@ menu_add_item_func(Client *c, int argc, char **argv) debug(RPT_DEBUG, "%s(Client [%d], %s, %s)", __FUNCTION__, c->sock, argv[1], argv[2]); - if (!c->ack) + if (c->state != ACTIVE) return 1; if (c->name == NULL) { @@ -237,7 +237,7 @@ menu_del_item_func(Client *c, int argc, char **argv) char *menu_id; char *item_id; - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc != 3) { @@ -443,7 +443,7 @@ menu_set_item_func(Client *c, int argc, char **argv) debug(RPT_DEBUG, "%s(Client [%d]: %s)", __FUNCTION__, c->sock, argv2string(argc, argv)); - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc < 4) { @@ -726,7 +726,7 @@ menu_goto_func(Client * c, int argc, char **argv) debug(RPT_DEBUG, "%s(Client [%d], %s, %s)", __FUNCTION__, c->sock, ((argc > 1) ? argv[1] : ""), ((argc > 2) ? argv[2] : "")); - if (!c->ack) + if (c->state != ACTIVE) return 1; if ((argc < 2) || (argc > 3)) { @@ -845,7 +845,7 @@ menu_set_main_func(Client *c, int argc, char **argv) debug(RPT_DEBUG, "%s(Client [%d], %s, %s)", __FUNCTION__, c->sock, ((argc > 1) ? argv[1] : ""), ((argc > 2) ? argv[2] : "")); - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc != 2) { diff --git a/server/commands/screen_commands.c b/server/commands/screen_commands.c index 7cd4b0e..b9cd185 100644 --- a/server/commands/screen_commands.c +++ b/server/commands/screen_commands.c @@ -44,7 +44,7 @@ screen_add_func(Client *c, int argc, char **argv) int err = 0; Screen *s; - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc != 2) { @@ -88,7 +88,7 @@ screen_del_func(Client *c, int argc, char **argv) int err = 0; Screen *s; - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc != 2) { @@ -139,7 +139,7 @@ screen_set_func(Client *c, int argc, char **argv) char *id; Screen * s; - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc == 1) { @@ -424,7 +424,7 @@ screen_add_key_func(Client *c, int argc, char **argv) char *id; /* Screen ID */ char *keys; /* Keys wanted */ - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc != 3) { @@ -500,7 +500,7 @@ screen_del_key_func(Client *c, int argc, char **argv) char *id; /* Screen ID */ char *keys; /* Keys wanted */ - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc != 3) { diff --git a/server/commands/server_commands.c b/server/commands/server_commands.c index ff54fc6..bc637e3 100644 --- a/server/commands/server_commands.c +++ b/server/commands/server_commands.c @@ -43,7 +43,7 @@ int output_func(Client *c, int argc, char **argv) { - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc != 2) { @@ -110,7 +110,7 @@ sleep_func(Client *c, int argc, char **argv) #define MAX_SECS 60 #define MIN_SECS 1 - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc != 2) { @@ -170,7 +170,7 @@ sleep_func(Client *c, int argc, char **argv) int noop_func(Client *c, int argc, char **argv) { - if (!c->ack) + if (c->state != ACTIVE) return 1; sock_send_string(c->sock, "noop complete\n"); diff --git a/server/commands/widget_commands.c b/server/commands/widget_commands.c index 635b08a..e953684 100644 --- a/server/commands/widget_commands.c +++ b/server/commands/widget_commands.c @@ -51,7 +51,7 @@ widget_add_func(Client *c, int argc, char **argv) Screen * s; Widget * w; - if (!c->ack) + if (c->state != ACTIVE) return 1; if ((argc < 4) || (argc > 6)) { @@ -137,7 +137,7 @@ widget_del_func(Client *c, int argc, char **argv) Screen *s; Widget *w; - if (!c->ack) + if (c->state != ACTIVE) return 1; if (argc != 3) { @@ -194,7 +194,7 @@ widget_set_func(Client *c, int argc, char **argv) Screen *s; Widget *w; - if (!c->ack) + if (c->state != ACTIVE) return 1; /* If there weren't enough parameters...