From c8fc08f6e30ee69692ee232063ebe4df297e09e5 Mon Sep 17 00:00:00 2001 From: robijn Date: Sun, 14 Jul 2002 20:30:33 +0000 Subject: [PATCH] Reporting cleaned up and levels made more consistent. --- server/client.c | 87 ++++++++++++----------------- server/client.h | 2 +- server/clients.c | 22 ++++---- server/commands/client_commands.c | 2 +- server/commands/menu_commands.c | 1 + server/commands/screen_commands.c | 6 +- server/driver.c | 22 +++++--- server/drivers.c | 56 ++++++------------- server/drivers.h | 3 - server/input.c | 64 ++++++++++----------- server/main.c | 53 ++++++------------ server/menu.c | 44 ++++++++++++--- server/menuitem.c | 50 ++++++++--------- server/menuscreens.c | 20 +++++-- server/parse.c | 7 ++- server/render.c | 17 +++--- server/screen.c | 34 ++++-------- server/screenlist.c | 26 +++++---- server/sock.c | 92 ++++++++----------------------- server/sock.h | 1 - server/widget.c | 8 +-- shared/report.c | 11 ++-- shared/report.h | 49 ++++++++-------- shared/sockets.c | 3 +- 24 files changed, 305 insertions(+), 375 deletions(-) diff --git a/server/client.c b/server/client.c index 7220772..62aa24e 100644 --- a/server/client.c +++ b/server/client.c @@ -29,12 +29,12 @@ Client * client_create (int sock) { Client *c; - debug (RPT_DEBUG, "new_client(%i)", sock); + debug (RPT_DEBUG, "%s( sock=%i )", __FUNCTION__, sock); /* Allocate new client...*/ c = malloc (sizeof (Client)); if (!c) { - report (RPT_ERR, "client_create: Error allocating"); + report (RPT_ERR, "%s: Error allocating", __FUNCTION__); return NULL; } /* Init struct members*/ @@ -46,7 +46,7 @@ Client * client_create (int sock) /*Set up message list...*/ c->messages = LL_new (); if (!c->messages) { - report (RPT_ERR, "client_create: Error allocating"); + report (RPT_ERR, "%s: Error allocating", __FUNCTION__); free (c); return NULL; } @@ -58,7 +58,7 @@ Client * client_create (int sock) c->screenlist = LL_new(); if (!c->screenlist) { - report( RPT_ERR, "client_create: Error allocating"); + report( RPT_ERR, "%s: Error allocating", __FUNCTION__); return NULL; } return c; @@ -67,18 +67,25 @@ Client * client_create (int sock) int client_destroy (Client * c) { - //int err; Screen *s; - - debug (RPT_INFO, "client_destroy()"); + char * str; if (!c) return -1; - client_close_sock (c); + debug (RPT_DEBUG, "%s( c=[%d] )", __FUNCTION__, c->sock ); + + /* Close the socket */ + close (c->sock); + + /* Eat messages */ + while ((str = client_get_message (c))) { + free (str); + } + LL_Destroy( c->messages ); /* Clean up the screenlist...*/ - debug( RPT_DEBUG, "client_data_destroy: Cleaning screenlist"); + debug( RPT_DEBUG, "%s: Cleaning screenlist", __FUNCTION__); for( s=LL_GetFirst (c->screenlist); s; s=LL_GetNext(c->screenlist) ) { /* Free its memory...*/ @@ -93,6 +100,7 @@ client_destroy (Client * c) if (c->menu) { menuscreen_inform_item_destruction (c->menu); menu_remove_item (c->menu->parent, c->menu); + menuscreen_inform_item_modified (c->menu->parent); menuitem_destroy (c->menu); } @@ -109,34 +117,10 @@ client_destroy (Client * c) /* Remove structure */ free (c); + debug( RPT_DEBUG, "%s: Client data removed", __FUNCTION__); return 0; } -void client_close_sock (Client * c) -{ - char *str; - - if (c->sock == EOF ) - return; - - /*Eat the rest of the incoming requests...*/ - debug (RPT_DEBUG, "client_destroy: get_messages"); - while ((str = client_get_message (c))) { - if (str) { - debug (RPT_DEBUG, "client_destroy: kill message %s", str); - free (str); - } - } - - /*close socket...*/ - if (c->sock) { - /*sock_send_string (c->sock, "bye\n");*/ - close(c->sock); - report(RPT_NOTICE, "closed socket for #%d", c->sock); - } - c->sock = EOF; -} - /*Add and remove messages from the client's queue...*/ int client_add_message (Client * c, char *message) @@ -145,38 +129,31 @@ client_add_message (Client * c, char *message) char *dup; char *str, *cp; char delimiters[] = "\n\r\0"; -/* int len;*/ - debug(RPT_DEBUG, "client_add_message(%s)", message); + debug(RPT_DEBUG, "%s( c=[%d], message=\"%s\" )", __FUNCTION__, c->sock, message); if (!c) return -1; if (!message) return -1; -/* len = strlen(message); - * if(len < 1) return 0; - */ - /* Copy the string to avoid overwriting the original...*/ dup = strdup (message); if (!dup) { - report(RPT_ERR, "client_add_message: Error allocating"); + report(RPT_ERR, "%s: Error allocating", __FUNCTION__); return -1; } /* Now split the string into lines and enqueue each one...*/ for (str = strtok (dup, delimiters); str; str = strtok (NULL, delimiters)) { cp = strdup (str); - debug (RPT_DEBUG, "client_add_message: %s", cp); + debug (RPT_DEBUG, "%s: Queued message: \"%s\"", __FUNCTION__, cp); err += LL_Enqueue (c->messages, (void *) cp); } - /*debug(RPT_DEBUG, "client_add_message(%s): %i errors", message, err);*/ - free (dup); /* Fixed memory leak...*/ + free (dup); /* Err is the number of errors encountered...*/ return err; - } /* Woo-hoo! A simple function. :)*/ @@ -185,15 +162,13 @@ client_get_message (Client * c) { char *str; - debug(RPT_DEBUG, "client_get_message()"); + debug(RPT_DEBUG, "%s( c=[%d] )", __FUNCTION__, c->sock); if (!c) return NULL; str = (char *) LL_Dequeue (c->messages); - /*debug(RPT_DEBUG, "client_get_message: \"%s\"", str);*/ - return str; } @@ -208,13 +183,13 @@ client_find_screen (Client * c, char *id) if (!id) return NULL; - debug (RPT_INFO, "client_find_screen(%s)", id); + debug (RPT_DEBUG, "%s( c=[%d], id=\"%s\" )", __FUNCTION__, c->sock, id); LL_Rewind (c->screenlist); do { s = LL_Get (c->screenlist); if ((s) && (0 == strcmp (s->id, id))) { - debug (RPT_DEBUG, "client_find_screen: Found %s", id); + debug (RPT_DEBUG, "%s: Found %s", __FUNCTION__, id); return s; } } while (LL_Next (c->screenlist) == 0); @@ -225,7 +200,13 @@ client_find_screen (Client * c, char *id) int client_add_screen (Client * c, Screen * s) { - /* TODO: Check for errors here?*/ + if (!c) + return -1; + if (!s) + return -1; + + debug (RPT_DEBUG, "%s( c=[%d], s=[%s] )", __FUNCTION__, c->sock, s->id); + LL_Push (c->screenlist, (void *) s); /* Now, add it to the screenlist...*/ @@ -245,13 +226,15 @@ client_remove_screen (Client * c, Screen * s) if (!s) return -1; + debug (RPT_DEBUG, "%s( c=[%d], s=[%s] )", __FUNCTION__, c->sock, s->id); + /* TODO: Check for errors here?*/ LL_Remove (c->screenlist, (void *) s); /* Now, remove it from the screenlist...*/ if (screenlist_remove_all (s) < 0) { /* Not a serious error..*/ - report (RPT_ERR, "client_remove_screen: Error dequeueing screen"); + report (RPT_ERR, "%s: Error dequeueing screen", __FUNCTION__); return 0; } return 0; diff --git a/server/client.h b/server/client.h index 4cfedb6..80f3df4 100644 --- a/server/client.h +++ b/server/client.h @@ -27,10 +27,10 @@ typedef struct Client { char *name; int ack; int sock; - char addr[64]; int backlight; int heartbeat; + /* Messages that the client generated */ LinkedList *messages; /* The list of screens */ diff --git a/server/clients.c b/server/clients.c index 0fb9475..b85dc2e 100644 --- a/server/clients.c +++ b/server/clients.c @@ -31,11 +31,11 @@ LinkedList *clientlist; int clients_init () { - debug(RPT_INFO, "client_init()"); + debug(RPT_DEBUG, "%s()", __FUNCTION__); clientlist = LL_new (); if (!clientlist) { - report( RPT_ERR, "client_init: Unable to create client list"); + report( RPT_ERR, "%s: Unable to create client list", __FUNCTION__); return -1; } @@ -47,27 +47,27 @@ clients_shutdown () { Client *c; - debug (RPT_INFO, "clients_shutdown()"); + debug (RPT_DEBUG, "%s()", __FUNCTION__); /* Free all client structures... */ for (c=LL_GetFirst (clientlist); c; c=LL_GetNext (clientlist) ) { - debug (RPT_DEBUG, "clients_shutdown: ..."); + debug (RPT_DEBUG, "%s: ...", __FUNCTION__); if (c) { - debug (RPT_DEBUG, "clients_shutdown: ... %i ...", c->sock); + debug (RPT_DEBUG, "%s: ... %i ...", __FUNCTION__, c->sock); if (client_destroy (c) != 0) { - report (RPT_ERR, "clients_shutdown: Error freeing client"); + report (RPT_ERR, "%s: Error freeing client", __FUNCTION__); } else { - debug (RPT_DEBUG, "clients_shutdown: Freed client..."); + debug (RPT_DEBUG, "%s: Freed client...", __FUNCTION__); } } else { - debug (RPT_DEBUG, "clients_shutdown: No client!"); + debug (RPT_DEBUG, "%s: No client!", __FUNCTION__); } } /* Then, free the list...*/ LL_Destroy (clientlist); - debug (RPT_DEBUG, "clients_shutdown: done"); + debug (RPT_DEBUG, "%s: done", __FUNCTION__); return 0; } @@ -114,7 +114,7 @@ clients_find_client_by_sock (int sock) { Client *c; - debug(RPT_INFO, "clients_find_client_by_sock(%i)", sock); + debug(RPT_DEBUG, "%s( sock=%i )", __FUNCTION__, sock); for( c=LL_GetFirst(clientlist); c; c=LL_GetNext(clientlist) ) { if (c->sock == sock) { @@ -122,7 +122,7 @@ clients_find_client_by_sock (int sock) } } - debug (RPT_ERR, "client_find_sock: failed"); + debug (RPT_ERR, "%s: failed", __FUNCTION__); return NULL; } diff --git a/server/commands/client_commands.c b/server/commands/client_commands.c index ba8205c..15e78ce 100644 --- a/server/commands/client_commands.c +++ b/server/commands/client_commands.c @@ -44,7 +44,7 @@ test_func_func (Client * c, int argc, char **argv) char str[256]; for (i = 0; i < argc; i++) { - snprintf (str, sizeof(str), "test_func_func: %i -> %s\n", i, argv[i]); + snprintf (str, sizeof(str), "%s: %i -> %s\n", __FUNCTION__, i, argv[i]); report (RPT_INFO, str); sock_send_string (c->sock, str); } diff --git a/server/commands/menu_commands.c b/server/commands/menu_commands.c index 8c4f5dc..ddbcf3a 100644 --- a/server/commands/menu_commands.c +++ b/server/commands/menu_commands.c @@ -89,6 +89,7 @@ menu_add_item_func (Client * c, int argc, char **argv) /* Does the client have a menu already ? */ if (!c->menu) { /* We need to create it */ + report( RPT_INFO, "Client [%d] is using the menu", c->sock ); c->menu = menu_create ("_client_menu_", menu_commands_handler, c->name, c); menu_add_item (main_menu, c->menu); } diff --git a/server/commands/screen_commands.c b/server/commands/screen_commands.c index 37d99b7..4405212 100644 --- a/server/commands/screen_commands.c +++ b/server/commands/screen_commands.c @@ -82,7 +82,7 @@ screen_add_func (Client * c, int argc, char **argv) report(RPT_WARNING, "screen_add_func: Error adding screen"); sock_send_string (c->sock, "huh? Failed to add screen\n"); } - report(RPT_NOTICE, "added a screen (%s) to the display", s->id); + report(RPT_INFO, "Client on socket %d added added screen \"%s\"", c->sock, s->id); return 0; } @@ -125,7 +125,9 @@ screen_del_func (Client * c, int argc, char **argv) } else sock_send_string (c->sock, "huh? Unknown screen id\n"); - report(RPT_NOTICE, "removed a screen (%s) from the display", argv[1]); + report(RPT_INFO, "Client on socket %d removed screen \"%s\"", c->sock, s->id); + + screen_destroy(s); return 0; } diff --git a/server/driver.c b/server/driver.c index c3d517c..8a17796 100644 --- a/server/driver.c +++ b/server/driver.c @@ -90,7 +90,7 @@ driver_load( char * name, char * filename, char * args ) Driver * driver = NULL; int res; - report( RPT_INFO, "driver_load( name=\"%.40s\", filename=\"%.80s\", args=\"%.80s\")", name, filename, args ); + report( RPT_DEBUG, "%s( name=\"%.40s\", filename=\"%.80s\", args=\"%.80s\")", __FUNCTION__, name, filename, args ); /* Allocate memory for new driver struct */ driver = malloc( sizeof( Driver )); @@ -122,7 +122,7 @@ driver_load( char * name, char * filename, char * args ) } /* Call the init function */ - debug( RPT_DEBUG, "Calling driver [%.40s] init function", driver->name ); + debug( RPT_DEBUG, "%s: Calling driver [%.40s] init function", __FUNCTION__, driver->name ); res = driver->init( driver, args ); if( res < 0 ) { report( RPT_ERR, "Driver [%.40s] init failed, return code < 0", driver->name ); @@ -156,7 +156,7 @@ driver_unload( Driver * driver ) free( driver->filename ); free( driver->name ); free( driver ); - debug( RPT_DEBUG, "Driver unloaded" ); + debug( RPT_DEBUG, "%s: Driver unloaded", __FUNCTION__ ); return 0; } @@ -168,10 +168,12 @@ driver_bind_module( Driver * driver ) int i; int missing_symbols = 0; + debug( RPT_DEBUG, "%s( driver=[%.40s] )", __FUNCTION__, driver->name ); + /* Load the module */ driver->module_handle = dlopen( driver->filename, RTLD_NOW ); if( driver->module_handle == NULL ) { - report( RPT_ERR, "Could not dlopen driver module %.40s: %s", driver->filename, dlerror() ); + report( RPT_ERR, "Could not open driver module %.40s: %s", driver->filename, dlerror() ); return -1; } @@ -186,23 +188,23 @@ driver_bind_module( Driver * driver ) char *s = malloc( strlen( *(driver->symbol_prefix) ) + strlen( driver_symbols[i].name ) + 1 ); strcpy( s, *(driver->symbol_prefix) ) ; strcat( s, driver_symbols[i].name ); - debug( RPT_DEBUG, "finding symbol: %s", s ); + debug( RPT_DEBUG, "%s: finding symbol: %s", __FUNCTION__, s ); *p = dlsym( driver->module_handle, s ); free( s ); } /* Retrieve the symbol */ if( !*p ) { - debug( RPT_DEBUG, "finding symbol: %s", driver_symbols[i].name ); + debug( RPT_DEBUG, "%s: finding symbol: %s", __FUNCTION__, driver_symbols[i].name ); *p = dlsym( driver->module_handle, driver_symbols[i].name ); } if( *p ) { - debug( RPT_DEBUG, "found symbol at: %p", *p ); + debug( RPT_DEBUG, "%s: found symbol at: %p", __FUNCTION__, *p ); } /* Was the symbol required but not found ? */ if( !*p && driver_symbols[i].required ) { - report( RPT_ERR, "Module [%.40s] does not have required symbol: %s", driver->name, driver_symbols[i].name ); + report( RPT_ERR, "Driver [%.40s] does not have required symbol: %s", driver->name, driver_symbols[i].name ); missing_symbols = 1; } } @@ -242,6 +244,8 @@ driver_bind_module( Driver * driver ) int driver_unbind_module( Driver * driver ) { + debug( RPT_DEBUG, "%s( driver=[%.40s] )", __FUNCTION__, driver->name ); + dlclose( driver->module_handle ); return 0; @@ -284,7 +288,7 @@ driver_supports_multiple( Driver * driver ) static int driver_store_private_ptr(Driver * driver, void * private_data) { - report( RPT_INFO, "driver_store_private_ptr( driver=%p, ptr=%p )", driver, private_data ); + debug( RPT_DEBUG, "%s( driver=[%.40s], ptr=%p )", __FUNCTION__, driver->name, private_data ); driver->private_data = private_data; return 0; diff --git a/server/drivers.c b/server/drivers.c index 846a701..467d7e2 100644 --- a/server/drivers.c +++ b/server/drivers.c @@ -48,7 +48,7 @@ drivers_load_driver( char * name ) char * filename; char * args; - report( RPT_INFO, "drivers_load_driver( name=\"%.40s\")", name ); + debug( RPT_DEBUG, "%s( name=\"%.40s\")", __FUNCTION__, name ); /* First driver ? */ if( !loaded_drivers ) { @@ -138,7 +138,7 @@ drivers_unload_all() { Driver * driver; - report( RPT_INFO, "unload_all_driver()"); + debug( RPT_DEBUG, "%s()", __FUNCTION__); while( (driver = LL_Pop( loaded_drivers )) != NULL ) { driver_unload( driver ); @@ -153,7 +153,7 @@ drivers_get_info() { Driver *drv; - report( RPT_INFO, "drivers_getinfo()" ); + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); ForAllDrivers(drv) { if( drv->get_info ) { @@ -169,7 +169,7 @@ drivers_clear() { Driver *drv; - report( RPT_INFO, "drivers_clear()" ); + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); ForAllDrivers(drv) { if( drv->clear ) @@ -183,7 +183,7 @@ drivers_flush() { Driver *drv; - report( RPT_INFO, "drivers_flush()" ); + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); ForAllDrivers(drv) { if( drv->flush ) @@ -197,7 +197,7 @@ drivers_string( int x, int y, char * string ) { Driver *drv; - report( RPT_INFO, "drivers_string( x=%d, y=%d, string=\"%.40s\" )", x, y, string ); + debug( RPT_DEBUG, "%s( x=%d, y=%d, string=\"%.40s\" )", __FUNCTION__, x, y, string ); ForAllDrivers(drv) { if( drv->string ) @@ -211,7 +211,7 @@ drivers_chr( int x, int y, char c ) { Driver *drv; - report( RPT_INFO, "drivers_chr( x=%d, y=%d, c='%c' )", x, y, c ); + debug( RPT_DEBUG, "%s( x=%d, y=%d, c='%c' )", __FUNCTION__, x, y, c ); ForAllDrivers(drv) { if( drv->chr ) @@ -225,7 +225,7 @@ drivers_vbar( int x, int y, int len, int promille, int pattern ) { Driver *drv; - report( RPT_INFO, "drivers_vbar( x=%d, y=%d, len=%d, promille=%d, pattern=%d )", x, y, len, promille, pattern ); + debug( RPT_DEBUG, "%s( x=%d, y=%d, len=%d, promille=%d, pattern=%d )", __FUNCTION__, x, y, len, promille, pattern ); /* NEW FUNCTIONS * @@ -247,7 +247,7 @@ drivers_hbar( int x, int y, int len, int promille, int pattern ) { Driver *drv; - report( RPT_INFO, "drivers_hbar( x=%d, y=%d, len=%d, promille=%d, pattern=%d )", x, y, len, promille, pattern ); + debug( RPT_DEBUG, "%s( x=%d, y=%d, len=%d, promille=%d, pattern=%d )", __FUNCTION__, x, y, len, promille, pattern ); ForAllDrivers(drv) { if( drv->hbar ) @@ -263,7 +263,7 @@ drivers_num( int x, int num ) { Driver *drv; - report( RPT_INFO, "drivers_num( x=%d, num=%d )", x, num ); + debug( RPT_DEBUG, "%s( x=%d, num=%d )", __FUNCTION__, x, num ); ForAllDrivers(drv) { if( drv->num ) @@ -279,7 +279,7 @@ drivers_heartbeat( int state ) { Driver *drv; - report( RPT_INFO, "drivers_heartbeat( state=%d )", state ); + debug( RPT_DEBUG, "%s( state=%d )", __FUNCTION__, state ); ForAllDrivers(drv) { if( drv->heartbeat ) @@ -295,7 +295,7 @@ drivers_icon( int x, int y, int icon ) { Driver *drv; - report( RPT_INFO, "drivers_icon( x=%d, y=%d, icon=ICON_%s )", x, y, widget_icon_to_iconname (icon) ); + debug( RPT_DEBUG, "%s( x=%d, y=%d, icon=ICON_%s )", __FUNCTION__, x, y, widget_icon_to_iconname (icon) ); ForAllDrivers(drv) { /* Does the driver have the icon function ? */ @@ -317,7 +317,7 @@ drivers_cursor( int x, int y, int state ) { Driver *drv; - report( RPT_INFO, "drivers_cursor( x=%d, y=%d, state=%d )", x, y, state ); + debug( RPT_DEBUG, "%s( x=%d, y=%d, state=%d )", __FUNCTION__, x, y, state ); ForAllDrivers(drv) { if( drv->cursor ) @@ -332,7 +332,7 @@ drivers_backlight( int brightness ) { Driver *drv; - report( RPT_INFO, "drivers_backlight( brightness=%d )", brightness ); + debug( RPT_DEBUG, "%s( brightness=%d )", __FUNCTION__, brightness ); ForAllDrivers(drv) { if( drv->backlight ) @@ -346,7 +346,7 @@ drivers_output( int state ) { Driver *drv; - report( RPT_INFO, "drivers_output( state=%d )", state ); + debug( RPT_DEBUG, "%s( state=%d )", __FUNCTION__, state ); ForAllDrivers(drv) { if( drv->output ) @@ -362,7 +362,7 @@ drivers_get_key() Driver *drv; char * keystroke; - report( RPT_INFO, "drivers_get_key()" ); + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); ForAllDrivers(drv) { if( drv->get_key ) { @@ -376,27 +376,3 @@ drivers_get_key() return NULL; } - -char -drivers_getkey() /* TO BE REMOVED AS SOON AS INPUT ROUTINES ACCEPT STRINGS */ -{ - Driver *drv; - char * s; - char ch; - - report( RPT_INFO, "drivers_getkey()" ); - - ForAllDrivers(drv) { - if( drv->get_key ) { - s = drv->get_key(drv); - if( s ) - return s[0]; /* It returns the first char only ! a hack ! */ - } - else if( drv->getkey ) { - ch = drv->getkey(drv); - if( ch ) - return ch; - } - } - return 0; -} diff --git a/server/drivers.h b/server/drivers.h index bd7bbee..a186eeb 100644 --- a/server/drivers.h +++ b/server/drivers.h @@ -101,9 +101,6 @@ drivers_output( int state ); char * drivers_get_key(); -char -drivers_getkey(); - extern LinkedList * loaded_drivers; /* Please don't read this list except using the following functions */ diff --git a/server/input.c b/server/input.c index b863a95..094f404 100644 --- a/server/input.c +++ b/server/input.c @@ -30,14 +30,14 @@ int server_input (int key); void input_send_to_client (Client * c, char * key); -void input_internal_key (KeyReservation * kr); +void input_internal_key (char * key); LinkedList * keylist; int init_input() { - report (RPT_INFO, "%s()", __FUNCTION__ ); + debug (RPT_DEBUG, "%s()", __FUNCTION__ ); keylist = LL_new(); @@ -48,35 +48,35 @@ int handle_input () { char * key; - Client * c; + Client * current_client; + Client * target; KeyReservation * kr; - report (RPT_INFO, "%s()", __FUNCTION__ ); + debug (RPT_DEBUG, "%s()", __FUNCTION__ ); - c = screenlist_current()->client; + current_client = screenlist_current()->client; /* Handle all keypresses */ while ((key = drivers_get_key ()) != NULL ) { /* Find what client wants the key */ - kr = input_find_key (key, c); + kr = input_find_key (key, current_client); if (kr) { /* A hit ! */ - if (kr->client == NULL) { - report (RPT_DEBUG, "%s: key for internal client: [%.40s]", __FUNCTION__, key ); - input_internal_key (kr); - } - else { - /* It's an external client */ - report (RPT_DEBUG, "%s: key for external client: [%.40s]", __FUNCTION__, key ); - input_send_to_client (c, key); - } + report (RPT_DEBUG, "%s: reserved key: \"%.40s\"", __FUNCTION__, key ); + target = kr->client; + } else { + report (RPT_DEBUG, "%s: left over key: \"%.40s\"", __FUNCTION__, key ); + /*target = current_client;*/ + target = NULL; /* left-over keys are always for internal client */ } - else { - /* What do we do with left-over keys ? */ - report (RPT_INFO, "%s: left over key: [%.40s]", __FUNCTION__, key ); - - /* Well... nothing ! */ + if (target == NULL) { + report (RPT_DEBUG, "%s: key is for internal client", __FUNCTION__ ); + input_internal_key (key); + } else { + /* It's an external client */ + report (RPT_DEBUG, "%s: key is for external client on socket %d", __FUNCTION__, target->sock ); + input_send_to_client (current_client, key); } } return 0; @@ -86,7 +86,7 @@ void input_send_to_client (Client * c, char * key) { char * s; - debug (RPT_DEBUG, "%s( client=%p, key=\"%.40s\" )", __FUNCTION__, c, key); + debug (RPT_DEBUG, "%s( client=[%d], key=\"%.40s\" )", __FUNCTION__, c->sock, key); /* Allocate just as much as we need */ s = malloc (strlen(key) + strlen("key \n") + 1); @@ -96,10 +96,10 @@ void input_send_to_client (Client * c, char * key) } void -input_internal_key (KeyReservation * kr) +input_internal_key (char * key) { - if (kr->exclusive || screenlist_current() == menuscreen) { - menuscreen_key_handler (kr->key); + if (is_menu_key(key) || screenlist_current() == menuscreen) { + menuscreen_key_handler (key); } else { /* TODO: give keys to server screen */ @@ -111,7 +111,7 @@ input_internal_key (KeyReservation * kr) int server_input (int key) { - report(RPT_INFO, "%s( key='%c' )", __FUNCTION__, (char) key); + debug(RPT_DEBUG, "%s( key='%c' )", __FUNCTION__, (char) key); switch ((char) key) { case INPUT_PAUSE_KEY: @@ -145,7 +145,7 @@ int input_reserve_key (char * key, bool exclusive, Client * client) { KeyReservation * kr; - debug (RPT_DEBUG, "%s( key=\"%.40s\", exclusive=%d, client=%p )", __FUNCTION__, key, exclusive, client); + debug (RPT_DEBUG, "%s( key=\"%.40s\", exclusive=%d, client=[%d] )", __FUNCTION__, key, exclusive, (client?client->sock:-1)); /* Find out if this key is already reserved in a way that interferes * with the new reservation. @@ -166,7 +166,7 @@ int input_reserve_key (char * key, bool exclusive, Client * client) kr->client = client; LL_Push(keylist, kr); - report (RPT_INFO, "%s: key [%.40s] is now reserved in %s mode", __FUNCTION__, key, (exclusive?"exclusive":"shared")); + report (RPT_INFO, "Key \"%.40s\" is now reserved in %s mode by client [%d]", key, (exclusive?"exclusive":"shared"), (client?client->sock:-1)); return 0; } @@ -175,15 +175,15 @@ void input_release_key (char * key, Client * client) { KeyReservation * kr; - debug (RPT_DEBUG, "%s( key=\"%.40s\", client=%p )", __FUNCTION__, key, client); + debug (RPT_DEBUG, "%s( key=\"%.40s\", client=[%d] )", __FUNCTION__, key, (client?client->sock:-1)); for (kr=LL_GetFirst(keylist); kr; kr=LL_GetNext(keylist)) { if (kr->client == client && strcmp (kr->key, key) == 0) { - report (RPT_INFO, "%s: key [%.40s] is being released from %s mode", __FUNCTION__, key, (kr->exclusive?"exclusive":"shared")); free (kr->key); free (kr); LL_DeleteNode (keylist); + report (RPT_INFO, "Key \"%.40s\" was reserved in %s mode by client [%d] and is now released", key, (kr->exclusive?"exclusive":"shared"), (client?client->sock:-1)); return; } } @@ -193,12 +193,12 @@ void input_release_client_keys (Client * client) { KeyReservation * kr; - debug (RPT_DEBUG, "%s( client=%p )", __FUNCTION__, client); + debug (RPT_DEBUG, "%s( client=[%d] )", __FUNCTION__, (client?client->sock:-1)); kr=LL_GetFirst(keylist); while (kr) { if (kr->client == client) { - report (RPT_INFO, "%s: key [%.40s] is now released from %s mode", __FUNCTION__, kr->key, (kr->exclusive?"exclusive":"shared")); + report (RPT_INFO, "Key \"%.40s\" was reserved in %s mode by client [%d] and is now released", kr->key, (kr->exclusive?"exclusive":"shared"), (client?client->sock:-1)); free (kr->key); free (kr); LL_DeleteNode (keylist); @@ -213,7 +213,7 @@ KeyReservation * input_find_key (char * key, Client * client) { KeyReservation * kr; - debug (RPT_DEBUG, "%s( key=\"%.40s\", client=%p )", __FUNCTION__, key, client); + debug (RPT_DEBUG, "%s( key=\"%.40s\", client=[%d] )", __FUNCTION__, key, (client?client->sock:-1)); for (kr=LL_GetFirst(keylist); kr; kr=LL_GetNext(keylist)) { if (strcmp (kr->key, key) == 0) { diff --git a/server/main.c b/server/main.c index d1c9284..f6557ac 100644 --- a/server/main.c +++ b/server/main.c @@ -90,10 +90,6 @@ char *build_date = __DATE__; #define UNSET_INT -1 #define UNSET_STR "\01" -/* int debug_level; for compatibility with MtxOrb and joy drivers. - * I was about to remove the comment in front of this. - * Now how do we become compatible WITHOUT this debug_level ?*/ - int lcd_port = UNSET_INT; char bind_addr[64]; /* Do not preinit these strings as they will occupy */ char configfile[256]; /* a lot of space in the executable. */ @@ -188,9 +184,8 @@ main (int argc, char **argv) set_default_settings(); /* Set reporting values*/ - /*debug_level = reportLevel; */ ESSENTIAL( set_reporting( "LCDd", reportLevel, (reportToSyslog?RPT_DEST_SYSLOG:RPT_DEST_STDERR) ) ); - report( RPT_NOTICE, "Set report level to %d, output to %s", reportLevel, (reportToSyslog?"syslog":"stderr") ); + report( RPT_INFO, "Set report level to %d, output to %s", reportLevel, (reportToSyslog?"syslog":"stderr") ); /* Startup the server*/ ESSENTIAL( init_drivers() ); @@ -206,11 +201,11 @@ main (int argc, char **argv) #ifndef DEBUG /* Now, go into daemon mode...*/ if (daemon_mode) { - report(RPT_NOTICE, "Server forking to background"); + report(RPT_INFO, "Server forking to background"); ESSENTIAL( daemonize() ); } else { output_GPL_notice(); - report(RPT_NOTICE, "Server running in foreground"); + report(RPT_INFO, "Server running in foreground"); } #endif @@ -226,7 +221,7 @@ clear_settings () { int i; - /*report( RPT_INFO, "clear_settings()" );*/ + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); lcd_port = UNSET_INT; strncpy( bind_addr, UNSET_STR, sizeof(bind_addr) ); @@ -254,7 +249,7 @@ process_command_line (int argc, char **argv) { signed char c; - /*report( RPT_INFO, "process_command_line()" );*/ + debug( RPT_DEBUG, "%s( argc=%d, argv=...)", __FUNCTION__, argc ); /* analyze options here..*/ while ((c = getopt(argc, argv, "a:p:d:hfib:w:c:u:sr:")) > 0) { @@ -345,7 +340,7 @@ process_configfile ( char *configfile ) char * s; /*char buf[64];*/ - /*report( RPT_INFO, "process_configfile()" );*/ + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); /* Read server settings*/ @@ -449,7 +444,7 @@ process_configfile ( char *configfile ) void set_default_settings() { - /*report( RPT_INFO, "set_default_settings()" );*/ + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); /* Set defaults into unfilled variables....*/ @@ -517,7 +512,7 @@ daemonize() { int child; - report( RPT_INFO, "daemonize()" ); + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); switch ((child = fork ()) ) { case -1: @@ -545,7 +540,7 @@ daemonize() int init_sockets () { - report( RPT_INFO, "init_sockets()" ); + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); if (sock_create_server (&bind_addr, lcd_port) <= 0) { report(RPT_ERR, "Error opening socket"); @@ -569,7 +564,7 @@ init_drivers() int output_loaded = 0; - report( RPT_INFO, "init_drivers()" ); + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); for (i = 0; i < num_drivers; i++) { @@ -609,7 +604,7 @@ int drop_privs(char *user) { struct passwd *pwent; - report( RPT_INFO, "drop_privs()" ); + debug( RPT_DEBUG, "%s( user=\"%.40s\" )", __FUNCTION__, user ); if (getuid() == 0 || geteuid() == 0) { if ((pwent = getpwnam(user)) == NULL) { @@ -629,7 +624,7 @@ int drop_privs(char *user) int init_screens () { - report( RPT_INFO, "init_screens()" ); + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); if (screenlist_init () < 0) { report(RPT_ERR, "Error initializing screen list"); @@ -658,7 +653,7 @@ do_mainloop () Screen *s = NULL; char *message=NULL; - report( RPT_INFO, "do_mainloop()" ); + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); /*char buf[64];*/ @@ -675,21 +670,6 @@ do_mainloop () timer++; - /*if (s == NULL) - * s = screenlist_current(); - - * this is here because s is getting overwritten... - *if (s != screenlist_current()) { - * report(RPT_DEBUG, "internal error! s was found overwritten at main.c:637"); - * s = screenlist_current(); - *} - */ - - /*TODO: THIS MUST BE FIXED..... WHY is s getting overwritten? - * s is a local, it is never passed or assigned to anywhere. - * So SOMETHING is going haywire and clobbering memory.... - */ - if (s && (timer >= s->duration)) screenlist_next (); @@ -758,7 +738,7 @@ exit_program (int val) { char buf[64]; - report( RPT_INFO, "exit_program()" ); + debug( RPT_DEBUG, "%s( val=%d )", __FUNCTION__, val ); /* TODO: These things shouldn't be so interdependent. The order * things are shut down in shouldn't matter... @@ -781,7 +761,7 @@ exit_program (int val) if( reportLevel == UNSET_INT ) reportLevel = DEFAULT_REPORTLEVEL; if( reportToSyslog == UNSET_INT ) - reportLevel = DEFAULT_REPORTLEVEL; + reportToSyslog = DEFAULT_REPORTTOSYSLOG; set_reporting( "LCDd", reportLevel, (reportToSyslog?RPT_DEST_SYSLOG:RPT_DEST_STDERR) ); goodbye_screen (); /* display goodbye screen on LCD display */ @@ -791,7 +771,6 @@ exit_program (int val) if( serverStarted ) { clients_shutdown (); /* shutdown clients (must come first) */ screenlist_shutdown (); /* shutdown screens (must come after client_shutdown) */ - sock_close_all (); /* close all open sockets (must come after client_shutdown) */ } exit (0); @@ -804,7 +783,7 @@ HelpScreen () /* Help screen is printed to stdout on purpose. No reason to have * this in syslog... */ - report( RPT_INFO, "HelpScreen()" ); + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); fprintf (stdout, "\nLCDd: LCDproc Server Daemon, %s\n", version); fprintf (stdout, "Copyright (c) 1999 Scott Scriven, William Ferrell, and misc contributors\n"); diff --git a/server/menu.c b/server/menu.c index 2e7c2aa..33af5be 100644 --- a/server/menu.c +++ b/server/menu.c @@ -53,7 +53,7 @@ menu_create (char *id, MenuEventFunc(*event_func), void menu_destroy (Menu *menu) { - debug (RPT_DEBUG, "%s( menu=\"%s\" )", __FUNCTION__, menu->id); + debug (RPT_DEBUG, "%s( menu=[%s] )", __FUNCTION__, menu->id); menu_destroy_all_items (menu); LL_Destroy (menu->data.menu.contents); @@ -65,7 +65,7 @@ menu_destroy (Menu *menu) void menu_add_item (Menu *menu, MenuItem *item) { - debug (RPT_DEBUG, "%s( menu=\"%s\", item=\"%s\" )", __FUNCTION__, menu->id, item->id); + debug (RPT_DEBUG, "%s( menu=[%s], item=[%s] )", __FUNCTION__, menu->id, item->id); if (!menu) return; @@ -77,9 +77,25 @@ menu_add_item (Menu *menu, MenuItem *item) void menu_remove_item (Menu *menu, MenuItem *item) { - debug (RPT_DEBUG, "%s( menu=\"%s\", item=\"%s\" )", __FUNCTION__, menu->id, item->id); + int i; + MenuItem * item2; - LL_Remove (menu->data.menu.contents, item); + debug (RPT_DEBUG, "%s( menu=[%s], item=[%s] )", __FUNCTION__, menu->id, item->id); + + /* Find the item */ + for (item2=LL_GetFirst(menu->data.menu.contents), i=0; + item2; + item2=LL_GetNext(menu->data.menu.contents), i++ ) { + if (item==item2) { + LL_DeleteNode (menu->data.menu.contents); + if (menu->data.menu.selector_pos>=i) { + menu->data.menu.selector_pos--; + if (menu->data.menu.scroll > 0) + menu->data.menu.scroll--; + } + return; + } + } } void @@ -87,7 +103,7 @@ menu_destroy_all_items (Menu *menu) { MenuItem * item; - debug (RPT_DEBUG, "%s( menu=\"%s\" )", __FUNCTION__, menu->id); + debug (RPT_DEBUG, "%s( menu=[%s] )", __FUNCTION__, menu->id); for( item = menu_getfirst_item(menu); item; item = menu_getfirst_item(menu) ) { menuitem_destroy (item); @@ -99,7 +115,7 @@ MenuItem *menu_find_item (Menu *menu, char *id, bool recursive) { MenuItem * item; - debug (RPT_DEBUG, "%s( menu=\"%s\", id=\"%s\" )", __FUNCTION__, menu->id, id); + debug (RPT_DEBUG, "%s( menu=[%s], id=\"%s\", recursive=%d )", __FUNCTION__, menu->id, id, recursive); for( item = menu_getfirst_item(menu); item; item = menu_getnext_item(menu) ) { if ( strcmp(item->id, id) == 0 ) { @@ -118,6 +134,8 @@ MenuItem *menu_find_item (Menu *menu, char *id, bool recursive) void menu_reset (Menu *menu) { + debug (RPT_DEBUG, "%s( menu=[%s] )", __FUNCTION__, menu->id); + menu->data.menu.selector_pos = 0; menu->data.menu.scroll = 0; } @@ -128,7 +146,7 @@ void menu_build_screen (MenuItem *menu, Screen *s) MenuItem * subitem; int itemnr; - debug (RPT_DEBUG, "%s( menu=\"%s\", screen=\"%s\" )", __FUNCTION__, menu->id, s->id); + debug (RPT_DEBUG, "%s( menu=[%s], screen=[%s] )", __FUNCTION__, menu->id, s->id); /* TODO: Put menu in a frame to do easy scrolling */ /* Problem: frames are not handled correctly by renderer */ @@ -176,6 +194,14 @@ void menu_build_screen (MenuItem *menu, Screen *s) w->text = malloc (display_props->width); break; case MENUITEM_MENU: + /* Limit string length */ + w->text = malloc( strlen(subitem->text) + 4 ); + strcpy( w->text, subitem->text ); + strcat( w->text, " >" ); + if (strlen(subitem->text) >= display_props->width-1) { + (w->text)[display_props->width-1] = 0; + } + break; case MENUITEM_ACTION: case MENUITEM_SLIDER: case MENUITEM_NUMERIC: @@ -217,7 +243,7 @@ void menu_update_screen (MenuItem *menu, Screen *s) MenuItem * subitem; int itemnr; - debug (RPT_INFO, "%s( menu=\"%s\", screen=\"%s\" )", __FUNCTION__, menu->id, s->id); + debug (RPT_DEBUG, "%s( menu=[%s], screen=[%s] )", __FUNCTION__, menu->id, s->id); /* Update widgets for the title */ w = screen_find_widget (s, "title"); @@ -328,7 +354,7 @@ MenuResult menu_process_input (Menu *menu, MenuToken token, char * key) { MenuItem *subitem; - debug (RPT_DEBUG, "%s( menu=\"%s\", token=%d, key=\"%s\" )", __FUNCTION__, menu->id, token, key); + debug (RPT_DEBUG, "%s( menu=[%s], token=%d, key=\"%s\" )", __FUNCTION__, menu->id, token, key); switch (token) { case MENUTOKEN_MENU: diff --git a/server/menuitem.c b/server/menuitem.c index cba5751..4601332 100644 --- a/server/menuitem.c +++ b/server/menuitem.c @@ -146,7 +146,7 @@ MenuItem *menuitem_create_action (char *id, MenuEventFunc(*event_func), { MenuItem *new_item; - debug (RPT_DEBUG, "%s( id=\"%s\", event_func=%p, text=\"%s\", close_menu=%d )", + debug (RPT_DEBUG, "%s( id=[%s], event_func=%p, text=\"%s\", close_menu=%d )", __FUNCTION__, id, event_func, text, menu_result); new_item = menuitem_create (MENUITEM_ACTION, id, event_func, text); @@ -160,7 +160,7 @@ MenuItem *menuitem_create_checkbox (char *id, MenuEventFunc(*event_func), { MenuItem *new_item; - debug (RPT_DEBUG, "%s( id=\"%s\", event_func=%p, text=\"%s\", allow_gray=%d, value=%d )", + debug (RPT_DEBUG, "%s( id=[%s], event_func=%p, text=\"%s\", allow_gray=%d, value=%d )", __FUNCTION__, id, event_func, text, allow_gray, value); new_item = menuitem_create (MENUITEM_CHECKBOX, id, event_func, text); @@ -175,7 +175,7 @@ MenuItem *menuitem_create_ring (char *id, MenuEventFunc(*event_func), { MenuItem *new_item; - debug (RPT_DEBUG, "%s( id=\"%s\", event_func=%p, text=\"%s\", strings=\"%s\", value=%d )", + debug (RPT_DEBUG, "%s( id=[%s], event_func=%p, text=\"%s\", strings=\"%s\", value=%d )", __FUNCTION__, id, event_func, text, strings, value); new_item = menuitem_create (MENUITEM_RING, id, event_func, text); @@ -191,7 +191,7 @@ MenuItem *menuitem_create_slider (char *id, MenuEventFunc(*event_func), { MenuItem *new_item; - debug (RPT_DEBUG, "%s( id=\"%s\", event_func=%p, text=\"%s\", mintext=\"%s\", maxtext=\"%s\", minvalue=%d, maxvalue=%d, stepsize=%d, value=%d )", + debug (RPT_DEBUG, "%s( id=[%s], event_func=%p, text=\"%s\", mintext=\"%s\", maxtext=\"%s\", minvalue=%d, maxvalue=%d, stepsize=%d, value=%d )", __FUNCTION__, id, event_func, text, mintext, maxtext, minvalue, maxvalue, stepsize, value); new_item = menuitem_create (MENUITEM_SLIDER, id, event_func, text); @@ -210,7 +210,7 @@ MenuItem *menuitem_create_numeric (char *id, MenuEventFunc(*event_func), { MenuItem *new_item; - debug (RPT_DEBUG, "%s( id=\"%s\", event_func=%p, text=\"%s\", minvalue=%d, maxvalue=%d, value=%d )", + debug (RPT_DEBUG, "%s( id=[%s], event_func=%p, text=\"%s\", minvalue=%d, maxvalue=%d, value=%d )", __FUNCTION__, id, event_func, text, minvalue, minvalue, value); new_item = menuitem_create (MENUITEM_NUMERIC, id, event_func, text); @@ -256,7 +256,7 @@ void menuitem_destroy (MenuItem *item) { void (*destructor) (MenuItem *); - debug (RPT_DEBUG, "%s( item=\"%s\" )", __FUNCTION__, item->id); + debug (RPT_DEBUG, "%s( item=[%s] )", __FUNCTION__, item->id); /* First destroy type specific data */ destructor = destructor_table[item->type]; @@ -275,7 +275,7 @@ void menuitem_destroy_ring (MenuItem *item) { char * s; - debug (RPT_DEBUG, "%s( item=\"%s\" )", __FUNCTION__, item->id); + debug (RPT_DEBUG, "%s( item=[%s] )", __FUNCTION__, item->id); /* deallocate the strings */ for (s = LL_GetFirst(item->data.ring.strings); s; s = LL_GetNext(item->data.ring.strings)) { @@ -287,7 +287,7 @@ void menuitem_destroy_ring (MenuItem *item) void menuitem_destroy_slider (MenuItem *item) { - debug (RPT_DEBUG, "%s( item=\"%s\" )", __FUNCTION__, item->id); + debug (RPT_DEBUG, "%s( item=[%s] )", __FUNCTION__, item->id); /* These strings should always be allocated */ free (item->data.slider.mintext); @@ -296,7 +296,7 @@ void menuitem_destroy_slider (MenuItem *item) void menuitem_destroy_numeric (MenuItem *item) { - debug (RPT_DEBUG, "%s( item=\"%s\" )", __FUNCTION__, item->id); + debug (RPT_DEBUG, "%s( item=[%s] )", __FUNCTION__, item->id); /* This string should always be allocated */ free (item->data.alpha.edit_str); @@ -304,7 +304,7 @@ void menuitem_destroy_numeric (MenuItem *item) void menuitem_destroy_alpha (MenuItem *item) { - debug (RPT_DEBUG, "%s( item=\"%s\" )", __FUNCTION__, item->id); + debug (RPT_DEBUG, "%s( item=[%s] )", __FUNCTION__, item->id); /* These strings should always be allocated */ free (item->data.alpha.allowed_extra); @@ -318,7 +318,7 @@ void menuitem_reset (MenuItem *item) { void (*func) (MenuItem *); - debug (RPT_DEBUG, "%s( item=\"%s\" )", __FUNCTION__, item->id); + debug (RPT_DEBUG, "%s( item=[%s] )", __FUNCTION__, item->id); /* First destroy type specific data */ func = reset_table[item->type]; @@ -328,7 +328,7 @@ void menuitem_reset (MenuItem *item) void menuitem_reset_numeric (MenuItem *item) { - debug (RPT_DEBUG, "%s( item=\"%s\" )", __FUNCTION__, item->id); + debug (RPT_DEBUG, "%s( item=[%s] )", __FUNCTION__, item->id); item->data.numeric.edit_pos = 0; memset ( item->data.numeric.edit_str, 0, MAX_NUMERIC_LEN); @@ -341,7 +341,7 @@ void menuitem_reset_numeric (MenuItem *item) void menuitem_reset_alpha (MenuItem *item) { - debug (RPT_DEBUG, "%s( item=\"%s\" )", __FUNCTION__, item->id); + debug (RPT_DEBUG, "%s( item=[%s] )", __FUNCTION__, item->id); item->data.alpha.edit_pos = 0; memset (item->data.alpha.edit_str, 0, item->data.alpha.maxlength+1); @@ -356,7 +356,7 @@ void menuitem_rebuild_screen (MenuItem *item, Screen *s) Widget * w; void (*build_screen) (MenuItem *item, Screen *s); - debug (RPT_DEBUG, "%s( item=\"%s\", screen=\"%s\" )", __FUNCTION__, item->id, s->id); + debug (RPT_DEBUG, "%s( item=[%s], screen=[%s] )", __FUNCTION__, item->id, s->id); if (!display_props) { /* Nothing to build if no display size is known */ @@ -390,7 +390,7 @@ void menuitem_rebuild_screen_slider (MenuItem *item, Screen *s) { Widget * w; - debug (RPT_DEBUG, "%s( item=\"%s\", screen=\"%s\" )", __FUNCTION__, item->id, s->id); + debug (RPT_DEBUG, "%s( item=[%s], screen=[%s] )", __FUNCTION__, item->id, s->id); if (display_props->height >= 2 ) { /* Only add a title if enough space... */ @@ -438,7 +438,7 @@ void menuitem_rebuild_screen_numeric (MenuItem *item, Screen *s) { Widget * w; - debug (RPT_DEBUG, "%s( item=\"%s\", screen=\"%s\" )", __FUNCTION__, item->id, s->id); + debug (RPT_DEBUG, "%s( item=[%s], screen=[%s] )", __FUNCTION__, item->id, s->id); if (display_props->height >= 2 ) { /* Only add a title if enough space... */ @@ -469,7 +469,7 @@ void menuitem_rebuild_screen_alpha (MenuItem *item, Screen *s) { Widget * w; - debug (RPT_DEBUG, "%s( item=\"%s\", screen=\"%s\" )", __FUNCTION__, item->id, s->id); + debug (RPT_DEBUG, "%s( item=[%s], screen=[%s] )", __FUNCTION__, item->id, s->id); if (display_props->height >= 2 ) { /* Only add a title if enough space... */ @@ -502,7 +502,7 @@ void menuitem_update_screen (MenuItem *item, Screen *s) { void (*update_screen) (MenuItem *item, Screen *s); - debug (RPT_DEBUG, "%s( item=\"%s\", screen=\"%s\" )", __FUNCTION__, item->id, s->id); + debug (RPT_DEBUG, "%s( item=[%s], screen=[%s] )", __FUNCTION__, item->id, s->id); /* Disable the cursor by default */ s->cursor = CURSOR_OFF; @@ -522,7 +522,7 @@ void menuitem_update_screen_slider (MenuItem *item, Screen *s) Widget * w; int min_len, max_len; - debug (RPT_DEBUG, "%s( item=\"%s\", screen=\"%s\" )", __FUNCTION__, item->id, s->id); + debug (RPT_DEBUG, "%s( item=[%s], screen=[%s] )", __FUNCTION__, item->id, s->id); /* Calculate the bar position and length by filling buffers */ min_len = strlen (item->data.slider.mintext); @@ -559,7 +559,7 @@ void menuitem_update_screen_numeric (MenuItem *item, Screen *s) { Widget * w; - debug (RPT_DEBUG, "%s( item=\"%s\", screen=\"%s\" )", __FUNCTION__, item->id, s->id); + debug (RPT_DEBUG, "%s( item=[%s], screen=[%s] )", __FUNCTION__, item->id, s->id); w = screen_find_widget (s, "value"); strcpy (w->text, item->data.numeric.edit_str); @@ -580,7 +580,7 @@ void menuitem_update_screen_alpha (MenuItem *item, Screen *s) { Widget * w; - debug (RPT_DEBUG, "%s( item=\"%s\", screen=\"%s\" )", __FUNCTION__, item->id, s->id); + debug (RPT_DEBUG, "%s( item=[%s], screen=[%s] )", __FUNCTION__, item->id, s->id); w = screen_find_widget (s, "value"); if (item->data.alpha.password_char == 0) { @@ -608,7 +608,7 @@ MenuResult menuitem_process_input (MenuItem *item, MenuToken token, char * key) { MenuResult (*process_input) (MenuItem *item, MenuToken token, char * key); - debug (RPT_DEBUG, "%s( item=\"%s\", token=%d, key=\"%s\" )", __FUNCTION__, item->id, token, key); + debug (RPT_DEBUG, "%s( item=[%s], token=%d, key=\"%s\" )", __FUNCTION__, item->id, token, key); /* Call type specific screen building function */ process_input = process_input_table [item->type]; @@ -622,7 +622,7 @@ MenuResult menuitem_process_input (MenuItem *item, MenuToken token, char * key) MenuResult menuitem_process_input_slider (MenuItem *item, MenuToken token, char * key) { - debug (RPT_DEBUG, "%s( item=\"%s\", token=%d, key=\"%s\" )", __FUNCTION__, item->id, token, key); + debug (RPT_DEBUG, "%s( item=[%s], token=%d, key=\"%s\" )", __FUNCTION__, item->id, token, key); switch (token) { case MENUTOKEN_MENU: @@ -659,7 +659,7 @@ MenuResult menuitem_process_input_numeric (MenuItem *item, MenuToken token, char int pos = item->data.numeric.edit_pos; int allow_signed = (item->data.numeric.minvalue < 0); - debug (RPT_DEBUG, "%s( item=\"%s\", token=%d, key=\"%s\" )", __FUNCTION__, item->id, token, key); + debug (RPT_DEBUG, "%s( item=[%s], token=%d, key=\"%s\" )", __FUNCTION__, item->id, token, key); if (allow_signed) { format_str = "%+d"; @@ -790,7 +790,7 @@ MenuResult menuitem_process_input_alpha (MenuItem *item, MenuToken token, char * char *str = item->data.alpha.edit_str; int pos = item->data.alpha.edit_pos; - debug (RPT_DEBUG, "%s( item=\"%s\", token=%d, key=\"%s\" )", __FUNCTION__, item->id, token, key); + debug (RPT_DEBUG, "%s( item=[%s], token=%d, key=\"%s\" )", __FUNCTION__, item->id, token, key); /* Create list of allowed chars */ chars = realloc (chars, 26 + 26 + 10 + strlen(item->data.alpha.allowed_extra) + 1); diff --git a/server/menuscreens.c b/server/menuscreens.c index 659a40a..63360db 100644 --- a/server/menuscreens.c +++ b/server/menuscreens.c @@ -84,6 +84,8 @@ void menuscreen_inform_item_destruction (MenuItem * item) { MenuItem * i; + debug (RPT_DEBUG, "%s( item=[%s] )", __FUNCTION__, item->id); + /* Are we currently in (a subitem of) the given item ? */ for( i = active_menuitem; i; i = i->parent ) { if( i == item ) { @@ -94,6 +96,10 @@ void menuscreen_inform_item_destruction (MenuItem * item) void menuscreen_inform_item_modified (MenuItem * item) { + debug (RPT_DEBUG, "%s( item=[%s] )", __FUNCTION__, item->id); + + if( !active_menuitem ) return; + /* Are we currently in the item or the parent of the item ? */ if( active_menuitem == item || active_menuitem == item->parent ) { menuitem_rebuild_screen( active_menuitem, menuscreen ); @@ -116,6 +122,8 @@ void menuscreen_switch_item (MenuItem * new_menuitem) { MenuItem * old_menuitem = active_menuitem; + debug (RPT_DEBUG, "%s( item=[%s] )", __FUNCTION__, new_menuitem?new_menuitem->id:NULL); + /* First we do the switch */ active_menuitem = new_menuitem; @@ -295,7 +303,7 @@ void menuscreen_create_menu () MenuEventFunc (heartbeat_handler) { - debug (RPT_DEBUG, "%s( item=%s, event=%d )", __FUNCTION__, item->id, event); + debug (RPT_DEBUG, "%s( item=[%s], event=%d )", __FUNCTION__, item->id, event); if (event == MENUEVENT_UPDATE) { /* Set heartbeat setting */ @@ -308,7 +316,7 @@ MenuEventFunc (heartbeat_handler) MenuEventFunc (backlight_handler) { - debug (RPT_DEBUG, "%s( item=%s, event=%d )", __FUNCTION__, item->id, event); + debug (RPT_DEBUG, "%s( item=[%s], event=%d )", __FUNCTION__, item->id, event); if (event == MENUEVENT_UPDATE) { @@ -322,7 +330,7 @@ MenuEventFunc (backlight_handler) MenuEventFunc (contrast_handler) { - debug (RPT_DEBUG, "%s( item=%s, event=%d )", __FUNCTION__, item->id, event); + debug (RPT_DEBUG, "%s( item=[%s], event=%d )", __FUNCTION__, item->id, event); /* This function can be called by one of several drivers that * support contrast ! @@ -342,7 +350,7 @@ MenuEventFunc (contrast_handler) MenuEventFunc (brightness_handler) { - debug (RPT_DEBUG, "%s( item=%s, event=%d )", __FUNCTION__, item->id, event); + debug (RPT_DEBUG, "%s( item=[%s], event=%d )", __FUNCTION__, item->id, event); /* This function can be called by one of several drivers that * support contrast ! @@ -368,7 +376,7 @@ menuscreen_add_screen (Screen * s) Menu * m; MenuItem * mi; - debug (RPT_DEBUG, "%s( Screen=\"%s\" )", __FUNCTION__, s->id); + debug (RPT_DEBUG, "%s( s=[%s] )", __FUNCTION__, s->id); if (!screens_menu) return; /* When screens have not been created ... */ @@ -399,7 +407,7 @@ menuscreen_remove_screen (Screen * s) { Menu * m; - debug (RPT_DEBUG, "%s( Screen=\"%s\" )", __FUNCTION__, s->id); + debug (RPT_DEBUG, "%s( s=[%s] )", __FUNCTION__, s->id); m = menu_find_item (screens_menu, s->id, false); menu_remove_item (screens_menu, m); diff --git a/server/parse.c b/server/parse.c index 41de962..0338d93 100644 --- a/server/parse.c +++ b/server/parse.c @@ -191,7 +191,7 @@ parse_all_client_messages () Client * c; char * str; - debug( RPT_DEBUG, "parse_all_client_messages()" ); + debug( RPT_DEBUG, "%s()", __FUNCTION__ ); for( c=clients_getfirst(); c; c=clients_getnext()) { @@ -230,6 +230,8 @@ int parse_message (char * str, Client * c) argpos = 0; } + debug( RPT_DEBUG, "%s( str=\"%.120s\", client=[%d] )", __FUNCTION__, str, c->sock ); + arg_space = malloc(strlen(str)+1); argv[0] = arg_space; /* We will create a new string that is shorter or equally long as @@ -339,6 +341,7 @@ int parse_message (char * str, Client * c) argv[argc] = NULL; if (error) { snprintf (errmsg, sizeof(errmsg), "huh? Could not parse command\n"); + report( RPT_WARNING, "Could not parse command from client on socket %d: %s", __FUNCTION__, c->sock, str ); sock_send_string (c->sock, errmsg); free( arg_space ); return 0; @@ -356,10 +359,12 @@ int parse_message (char * str, Client * c) if (error == 1) { snprintf (errmsg, sizeof(errmsg), "huh? Invalid command \"%.40s\"\n", argv[0]); sock_send_string (c->sock, errmsg); + report( RPT_WARNING, "Invalid command from client on socket %d: %s", __FUNCTION__, c->sock, str ); } else if (error) { snprintf (errmsg, sizeof(errmsg), "huh? Function returned error \"%.40s\"\n", argv[0]); sock_send_string (c->sock, errmsg); + report( RPT_WARNING, "Command function returned an error after command from client on socket %d: %s", __FUNCTION__, c->sock, str ); } free( arg_space ); diff --git a/server/render.c b/server/render.c index e17ef55..f1dba7e 100644 --- a/server/render.c +++ b/server/render.c @@ -58,7 +58,7 @@ draw_screen (Screen * s, int timer) static Screen * old_s = NULL; int tmp_state = 0; - report(RPT_INFO, "draw_screen( screen=\"%.40s\", timer=%d ) ==== START RENDERING ====", s->id, timer ); + debug(RPT_DEBUG, "%s( screen=[%.40s], timer=%d ) ==== START RENDERING ====", __FUNCTION__, s->id, timer ); reset = 1; @@ -120,7 +120,7 @@ draw_screen (Screen * s, int timer) /* Set the cursor */ drivers_cursor (s->cursor_x, s->cursor_y, s->cursor); - /*debug(RPT_DEBUG, "draw_screen done"); */ + /*debug(RPT_DEBUG, "%s done", __FUNCTION__); */ if (heartbeat != HEARTBEAT_OPEN) { tmp_state = heartbeat; @@ -136,9 +136,9 @@ draw_screen (Screen * s, int timer) /* flush display out, frame and all... */ drivers_flush (); - /*debug(RPT_DEBUG, "draw_screen: %8x, %i", s, timer); */ + /*debug(RPT_DEBUG, "%s: %8x, %i", __FUNCTION__, s, timer); */ - report(RPT_INFO, "==== END RENDERING ====" ); + debug(RPT_DEBUG, "==== END RENDERING ====" ); return 0; } @@ -173,9 +173,10 @@ draw_frame (LinkedList * list, int reset = 1; - report( RPT_INFO, "draw_frame( list=%p, fscroll='%c', left=%d, top=%d, " + debug( RPT_DEBUG, "%s( list=%p, fscroll='%c', left=%d, top=%d, " "right=%d, bottom=%d, fwid=%d, fhgt=%d, fspeed=%d, timer=%d )", - list, fscroll, left,top, right, bottom, fwid, fhgt, fspeed, timer ); + __FUNCTION__, list, fscroll, left,top, right, bottom, + fwid, fhgt, fspeed, timer ); vis_width = right - left; /* This is the size of the visible frame area */ vis_height = bottom - top; @@ -216,7 +217,7 @@ draw_frame (LinkedList * list, if (!list) return -1; - /*debug(RPT_DEBUG, "draw_frame: %8x, %i", frame, timer); */ + /*debug(RPT_DEBUG, "%s: %8x, %i", __FUNCTION__, frame, timer); */ #define PositiveX(a) ((a)->x > 0) #define PositiveY(a) ((a)->y > 0) @@ -353,7 +354,7 @@ draw_frame (LinkedList * list, break; if (w->right < w->left) break; - /*debug(RPT_DEBUG, "rendering: %s %d",w->text,timer);*/ + /*debug(RPT_DEBUG, "%s: %s %d",__FUNCTION__,w->text,timer);*/ screen_width = w->right - w->left + 1; switch (w->length) { /* actually, direction...*/ /* FIXED: Horz scrollers don't show the diff --git a/server/screen.c b/server/screen.c index f63628a..ede482c 100644 --- a/server/screen.c +++ b/server/screen.c @@ -36,20 +36,22 @@ screen_create (char * id, Client * client) { Screen *s; + debug( RPT_DEBUG, "%s( id=\"%.40s\", client=[%d] )", __FUNCTION__, id, (client?client->sock:-1)); + s = malloc (sizeof (Screen)); if (!s) { - report(RPT_ERR, "screen_create: Error allocating"); + report(RPT_ERR, "%s: Error allocating", __FUNCTION__); return NULL; } if (!id) { - report (RPT_ERR, "screen_create: Need id string"); + report (RPT_ERR, "%s: Need id string", __FUNCTION__); return NULL; } /* Client can be NULL for serverscreens and other client-less screens */ s->id = strdup(id); if (!s->id) { - report(RPT_ERR, "screen_create: Error allocating"); + report(RPT_ERR, "%s: Error allocating", __FUNCTION__); return NULL; } @@ -72,7 +74,7 @@ screen_create (char * id, Client * client) s->widgetlist = LL_new (); if (!s->widgetlist) { - report(RPT_ERR, "screen_create: Error allocating"); + report(RPT_ERR, "%s: Error allocating", __FUNCTION__); return NULL; } @@ -86,8 +88,7 @@ screen_destroy (Screen * s) { Widget *w; - if (!s) - return -1; + debug( RPT_DEBUG, "%s( s=[%.40s] )", __FUNCTION__, s->id ); menuscreen_remove_screen (s); @@ -103,8 +104,6 @@ screen_destroy (Screen * s) free (s->id); if (s->name) free (s->name); - if (s->keys) - free (s->keys); free (s); @@ -114,11 +113,7 @@ screen_destroy (Screen * s) int screen_add_widget (Screen * s, Widget * w) { - report (RPT_INFO, "screen_add_widget(%s,%s)", s->id, w->id); - if (!s) - return -1; - if (!w) - return 1; + debug( RPT_DEBUG, "%s( s=[%.40s], widget=[%.40s] )", __FUNCTION__, s->id, w->id ); LL_Push (s->widgetlist, (void *) w); @@ -128,12 +123,7 @@ screen_add_widget (Screen * s, Widget * w) int screen_remove_widget (Screen * s, Widget * w) { - report (RPT_INFO, "screen_remove_widget(%s,%s)", s->id, w->id); - - if (!s) - return -1; - if (!w) - return 1; + debug( RPT_DEBUG, "%s( s=[%.40s], widget=[%.40s] )", __FUNCTION__, s->id, w->id ); LL_Remove (s->widgetlist, (void *) w); @@ -150,11 +140,11 @@ screen_find_widget (Screen * s, char *id) if (!id) return NULL; - debug (RPT_DEBUG, "screen_find_widget(%s,%s)", s->id, id); + debug( RPT_DEBUG, "%s( s=[%.40s], id=\"%.40s\" )", __FUNCTION__, s->id, id ); for ( w=LL_GetFirst(s->widgetlist); w; w=LL_GetNext(s->widgetlist) ) { if (0 == strcmp (w->id, id)) { - debug (RPT_DEBUG, "screen_find_widget: Found %s", id); + debug (RPT_DEBUG, "%s: Found %s", __FUNCTION__, id); return w; } /* Search subscreens recursively */ @@ -164,6 +154,6 @@ screen_find_widget (Screen * s, char *id) return w; } } - debug (RPT_DEBUG, "screen_find_widget: Not found"); + debug (RPT_DEBUG, "%s: Not found", __FUNCTION__); return NULL; } diff --git a/server/screenlist.c b/server/screenlist.c index 2a7f4fb..73e45a8 100644 --- a/server/screenlist.c +++ b/server/screenlist.c @@ -39,11 +39,11 @@ int compare_addresses (void *one, void *two); int screenlist_init () { - report (RPT_INFO, "screenlist_init()"); + report (RPT_DEBUG, "%s()", __FUNCTION__); screenlist = LL_new (); if (!screenlist) { - report(RPT_ERR, "screenlist_init: error allocating list"); + report(RPT_ERR, "%s: error allocating list", __FUNCTION__); return -1; } @@ -56,7 +56,7 @@ screenlist_init () int screenlist_shutdown () { - report (RPT_INFO, "screenlist_shutdown()"); + report (RPT_DEBUG, "%s()", __FUNCTION__); LL_Destroy (screenlist); @@ -66,7 +66,7 @@ screenlist_shutdown () int screenlist_remove (Screen * s) { - report (RPT_INFO, "screenlist_remove()"); + debug (RPT_DEBUG, "%s( s=[%.40s] )", __FUNCTION__, s->id); if (!LL_Remove (screenlist, s)) return -1; @@ -79,7 +79,7 @@ screenlist_remove_all (Screen * s) { int i = 0; - report (RPT_INFO, "screenlist_remove_all()"); + debug (RPT_DEBUG, "%s( s=[%.40s] )", __FUNCTION__, s->id); while (LL_Remove (screenlist, s)) i++; @@ -92,7 +92,7 @@ screenlist_remove_all (Screen * s) LinkedList * screenlist_getlist () { - report (RPT_INFO, "screenlist_getlist()"); + report (RPT_DEBUG, "%s()", __FUNCTION__); return screenlist; } @@ -105,7 +105,7 @@ screenlist_current () static Screen * old_s = NULL; Client * c; - debug( RPT_INFO, "screenlist_current:"); + debug( RPT_DEBUG, "%s()", __FUNCTION__); /*LL_dprint(screenlist);*/ @@ -169,7 +169,7 @@ screenlist_next () { Screen *s; - /*debug(RPT_DEBUG, "Screenlist_next()");*/ + debug (RPT_DEBUG, "%s()", __FUNCTION__); s = screenlist_current (); @@ -199,6 +199,8 @@ screenlist_prev () { Screen *s; + debug (RPT_DEBUG, "%s()", __FUNCTION__); + s = screenlist_current (); /* If we're on hold, don't advance!*/ @@ -221,7 +223,7 @@ screenlist_prev () int screenlist_add_end (Screen * screen) { - debug (RPT_DEBUG, "screenlist_add_end()"); + debug (RPT_DEBUG, "%s( screen=[%.40s] )", __FUNCTION__, screen->id); return LL_Push (screenlist, (void *) screen); } @@ -230,7 +232,7 @@ screenlist_add_end (Screen * screen) Screen * screenlist_next_roll () { - /*debug(RPT_DEBUG, "screenlist_next_roll()");*/ + debug (RPT_DEBUG, "%s()", __FUNCTION__); if (LL_UnRoll (screenlist) != 0) return NULL; @@ -243,7 +245,7 @@ Screen * screenlist_next_priority () { /*screen *s, *t;*/ - /*debug(RPT_DEBUG, "screenlist_next_priority");*/ + debug (RPT_DEBUG, "%s()", __FUNCTION__); if (LL_UnRoll (screenlist) != 0) return NULL; @@ -257,7 +259,7 @@ screenlist_next_priority () Screen * screenlist_prev_roll () { - /*debug(RPT_DEBUG, "screenlist_prev_roll()");*/ + debug (RPT_DEBUG, "%s()", __FUNCTION__); if (LL_Roll (screenlist) != 0) return NULL; diff --git a/server/sock.c b/server/sock.c index 779856a..3d3006b 100644 --- a/server/sock.c +++ b/server/sock.c @@ -58,23 +58,22 @@ sock_create_inet_socket (char * addr, unsigned int port) struct sockaddr_in name; int sock, sockopt=1; - report (RPT_INFO, "sock_create_inet_socket(%i)", port); + debug (RPT_DEBUG, "%s( addr=\"%s\", port=%i )", __FUNCTION__, addr, port); /* Create the socket. */ /*debug(RPT_DEBUG, "Creating Inet Socket");*/ sock = socket (PF_INET, SOCK_STREAM, 0); if (sock < 0) { - report(RPT_ERR, "Could not create socket"); + report(RPT_ERR, "%s: Could not create socket", __FUNCTION__); return -1; } /* Set the socket so we can re-use it*/ if(setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&sockopt,sizeof(sockopt)) < 0) { - report(RPT_ERR, "Error setting socket option SO_REUSEADDR"); + report(RPT_ERR, "%s: Error setting socket option SO_REUSEADDR", __FUNCTION__); return -1; } /* Give the socket a name. */ - /*debug(RPT_DEBUG, "Binding Inet Socket");*/ memset (&name, 0, sizeof (name)); name.sin_family = AF_INET; name.sin_port = htons (port); @@ -84,7 +83,7 @@ sock_create_inet_socket (char * addr, unsigned int port) report(RPT_ERR, "Could not bind to port %d", port); return -1; } else { - report(RPT_NOTICE, "listening for queries on port %d", port); + report(RPT_NOTICE, "Listening for queries on %s:%d", addr, port); } return sock; @@ -97,17 +96,17 @@ sock_create_server (char *bind_addr, int lcd_port) { int sock; - report (RPT_INFO, "sock_create_server()"); + debug (RPT_DEBUG, "%s( bind_addr=\"%s\", port=%d )", __FUNCTION__, bind_addr, lcd_port); /* Create the socket and set it up to accept connections. */ sock = sock_create_inet_socket (bind_addr, lcd_port); if (sock < 0) { - report (RPT_ERR, "sock_create_server: Error creating socket"); + report (RPT_ERR, "%s: Error creating socket", __FUNCTION__); return -1; } if (listen (sock, 1) < 0) { - report(RPT_ERR, "error in attempting to listen to port"); + report(RPT_ERR, "%s: error in attempting to listen to port", __FUNCTION__); return -1; } @@ -147,7 +146,7 @@ sock_poll_clients () struct timeval t; Client * c; - debug(RPT_INFO, "sock_poll_clients()"); + debug (RPT_DEBUG, "%s()", __FUNCTION__); t.tv_sec = 0; t.tv_usec = 0; @@ -156,7 +155,7 @@ sock_poll_clients () read_fd_set = active_fd_set; if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, &t) < 0) { - report (RPT_ERR, "sock_poll_clients: Select error"); + report (RPT_ERR, "%s: Select error", __FUNCTION__); return -1; } @@ -169,10 +168,10 @@ sock_poll_clients () size = sizeof (clientname); new_sock = accept (orig_sock, (struct sockaddr *) &clientname, &size); if (new_sock < 0) { - report (RPT_ERR, "sock_poll_clients: Accept error"); + report (RPT_ERR, "%s: Accept error", __FUNCTION__); return -1; } - report (RPT_INFO, "sock_poll_clients: Connect from host %s:%hd on #%d", + report (RPT_NOTICE, "Connect from host %s:%hd on socket %i", inet_ntoa (clientname.sin_addr), ntohs (clientname.sin_port), new_sock); FD_SET (new_sock, &active_fd_set); @@ -180,32 +179,32 @@ sock_poll_clients () /* Create new client */ if ((c = client_create (new_sock)) == NULL) { - report( RPT_ERR, "sock_poll_clients: Error creating client %i", i); + report( RPT_ERR, "%s: Error creating client on socket %i", __FUNCTION__, i); return -1; } if (clients_add_client (c) != 0) { - report( RPT_ERR, "sock_poll_clients: Could not add client %i", i); + report( RPT_ERR, "%s: Could not add client on socket %i", __FUNCTION__, i); return -1; } } else { /* Data arriving on an already-connected socket. */ err = 0; do { - debug (RPT_DEBUG, "sock_poll_clients: reading..."); + debug (RPT_DEBUG, "%s: reading...", __FUNCTION__); err = read_from_client (i); - debug (RPT_DEBUG, "sock_poll_clients: ...done"); + debug (RPT_DEBUG, "%s: ...done", __FUNCTION__); if (err < 0) { - /* TODO: Destroy a "client" here... (done?)*/ + /* Client disconnected, destroy client data */ c = clients_find_client_by_sock (i); if (c) { /*sock_send_string(i, "bye\n");*/ + report (RPT_NOTICE, "Client on socket %i disconnected", i); client_destroy (c); clients_remove_client (c); close (i); FD_CLR (i, &active_fd_set); - report (RPT_INFO, "sock_poll_clients: Closed connection %i", i); } else - report (RPT_ERR, "sock_poll_clients: Can't find client %i", i); + report (RPT_ERR, "%s: Can't find client of socket %i", __FUNCTION__, i); } } while (err > 0); } @@ -221,24 +220,19 @@ read_from_client (int filedes) int nbytes, i; Client * c; - report(RPT_DEBUG, "read_from_client()" ); - - /*nbytes = read (filedes, buffer, MAXMSG);*/ - /*debug(RPT_DEBUG, "read_from_client(%i): reading...", filedes);*/ - /*nbytes = sock_recv (filedes, buffer, MAXMSG);*/ - /*debug(RPT_DEBUG, "read_from_client(%i): ...done", filedes);*/ - /*debug (RPT_DEBUG, "read_from_client(%i): %i bytes", filedes, nbytes);*/ + debug (RPT_DEBUG, "%s()", __FUNCTION__); errno = 0; if ((nbytes = sock_recv (filedes, buffer, MAXMSG)) < 0) { if (errno != EAGAIN) - report (RPT_DEBUG, "read_from_client: (fd %d) %s", filedes, strerror(errno)); + report (RPT_DEBUG, "%s: Error on socket %d: %s", __FUNCTION__, filedes, strerror(errno)); return 0; } else if (nbytes == 0) /* EOF*/ return -1; else if (nbytes > (MAXMSG - (MAXMSG / 8))) /* Very noisy client...*/ { sock_send_string (filedes, "huh? Too much data received... quiet down!\n"); + report (RPT_WARNING, "%s: Too much data received on socket %d", __FUNCTION__, filedes); return -1; } else /* Data Read*/ { @@ -252,50 +246,10 @@ read_from_client (int filedes) if (c) { client_add_message (c, buffer); } else - report (RPT_DEBUG, "read_from_client: Can't find client %i", filedes); + report (RPT_DEBUG, "%s: Can't find client %d", __FUNCTION__, filedes); - debug (RPT_DEBUG, "read_from_client: got message: `%s'", buffer); + report (RPT_DEBUG, "%s: got message from client %d: \"%s\"", __FUNCTION__, filedes, buffer); return nbytes; } return nbytes; } - -/* FIXME: This talks to all open files, including - * stdin, stdout, stderr, the LCD, etc... - * BUT it should only talk to sockets! - */ -int -sock_close_all () -{ - int fd; - - return 0; - /* Do we need to do this ? Clients_shutdown already closes all - client connections ... */ - - report (RPT_INFO, "sock_close_all()"); - - for (fd = 0; fd < FD_SETSIZE; fd++) { - /* TODO: Destroy a "client" here...? Nope.*/ - - /* Instead of using STDIN_FILENO, STDOUT_FILENO, - * and STDERR_FILENO, one could use "fd = 4" in the - * for() call - but this would probably not be good - * practice... - */ - - if ( fd == STDIN_FILENO || - fd == STDOUT_FILENO || - fd == STDERR_FILENO) - continue; - else { - /*sock_send_string (fd, "bye\n");*/ - close (fd); - FD_CLR (fd, &active_fd_set); - debug (RPT_DEBUG, "sock_close_all: Closed connection %i", fd); - } - } - - return 0; - -} diff --git a/server/sock.h b/server/sock.h index cbe425d..b502c8d 100644 --- a/server/sock.h +++ b/server/sock.h @@ -20,7 +20,6 @@ typedef struct sockaddr_in sockaddr_in; int sock_create_server (); int sock_create_inet_socket (unsigned short int port); int sock_poll_clients (); -int sock_close_all (); int read_from_client (int filedes); #endif diff --git a/server/widget.c b/server/widget.c index a74e110..0e94cd3 100644 --- a/server/widget.c +++ b/server/widget.c @@ -72,18 +72,18 @@ widget_create (char *id, WidgetType type, Screen * screen) { Widget * w; - report (RPT_INFO, "widget_create(%s,%d)", id, type); + debug (RPT_DEBUG, "%s( id=\"%s\", type=%d, screen=[%s] )", __FUNCTION__, id, type, screen->id ); /* Create it */ w = malloc (sizeof (Widget)); if (!w) { - report (RPT_DEBUG, "widget_create: Error allocating"); + report (RPT_DEBUG, "%s: Error allocating", __FUNCTION__); return NULL; } w->id = strdup(id); if (!w->id) { - report (RPT_DEBUG, "widget_create: Error allocating"); + report (RPT_DEBUG, "%s: Error allocating", __FUNCTION__); return NULL; } @@ -119,7 +119,7 @@ widget_create (char *id, WidgetType type, Screen * screen) int widget_destroy (Widget * w) { - debug (RPT_INFO, "widget_destroy(%s)", w->id); + debug (RPT_DEBUG, "%s( w=[%s] )", __FUNCTION__, w->id); if (!w) return -1; diff --git a/shared/report.c b/shared/report.c index 5cca097..da86e28 100644 --- a/shared/report.c +++ b/shared/report.c @@ -31,19 +31,20 @@ static int stored_levels[MAX_STORED_MSGS]; static int num_stored_msgs = 0; -// local functions +/* local functions */ static void store_report_message( int level, const char *message ); static void flush_messages(); void report( const int level, const char *format, .../*args*/ ) { - // Check if we should report it + /* Check if we should report it */ if( level <= report_level || report_dest == RPT_DEST_STORE ) { char buf[1024]; - // Following functions appear to work on RedHat and Debian - // Linux, FreeBSD and Solaris + /* Following functions appear to work on RedHat and Debian + * Linux, FreeBSD and Solaris + */ va_list ap; va_start(ap, format); /* measure the required size (the number of elements of format) */ @@ -58,7 +59,7 @@ void report( const int level, const char *format, .../*args*/ ) break; case RPT_DEST_STORE: vsnprintf( buf, sizeof(buf), format, ap ); - buf[sizeof(buf)-1] = 0; // be sure to have a terminating 0 + buf[sizeof(buf)-1] = 0; /* be sure to have a terminating 0 */ store_report_message( level, buf ); break; } diff --git a/shared/report.h b/shared/report.h index b531fcf..c3dd8c7 100644 --- a/shared/report.h +++ b/shared/report.h @@ -31,19 +31,23 @@ * The reporting levels have the following meaning: * * 0 RPT_CRIT Critical conditions: the program stops right after - * this. Only use this if the program is exited from - * the current function. + * this. Only use this if the program is actually exited + * from the current function. * 1 RPT_ERR Error conditions: serious problem, program continues. - * Use just before you return -1 from a function. - * 2 RPT_WARNING Warning conditions: request user to fix this problem. - * Ex: What a queer port did you select. - * 3 RPT_NOTICE Normal but significant condition: - * Ex: What options have been set, version number. - * 4 RPT_INFO Informational - * Ex: What functions have been called. - * 5 RPT_DEBUG Debug-level messages: further debug messages - * Ex: what are we going to do in the next few lines of - * code. + * Use this just before you return -1 from a function. + * 2 RPT_WARNING Warning conditions: Something that the user should + * fix, but the program can continue without a real + * problem. + * Ex: Protocol errors from a client. + * 3 RPT_NOTICE Major event in the program. + * Ex: (un)loading of driver, client (dis)connect. + * 4 RPT_INFO Minor event in the program: the activation of a + * setting, details of a loaded driver, a key + * reservation, a keypress, a screen switch. + * 5 RPT_DEBUG Insignificant event. + * Ex: What function has been called, what subpart of a + * function is being executed, what was received and sent + * over the socket, etc. * * Levels 4 (maybe) and 5 (certainly) should be reported using the debug * function. @@ -60,35 +64,32 @@ #include -// Reporting levels +/* Reporting levels */ #define RPT_CRIT 0 #define RPT_ERR 1 #define RPT_WARNING 2 #define RPT_NOTICE 3 #define RPT_INFO 4 #define RPT_DEBUG 5 -// Don't just modify these numbers, they're related to syslog. +/* Don't just modify these numbers, they're related to syslog. */ -// Reporting destinations +/* Reporting destinations */ #define RPT_DEST_STDERR 0 #define RPT_DEST_SYSLOG 1 #define RPT_DEST_STORE 2 -// For compatibility, to be removed ? -extern int report_level; -extern int report_dest; - int set_reporting( char *application_name, int new_level, int new_dest ); -// Sets reporting level and message destination. +/* Sets reporting level and message destination. */ void report( const int level, const char *format, .../*args*/ ); -// Report the message to the selected destination if important enough +/* Report the message to the selected destination if important enough */ -// Consider the debug function to be exactly the same as the report function. -// The only difference is that it is only compiled in if DEBUG is defined. +/* Consider the debug function to be exactly the same as the report function. + * The only difference is that it is only compiled in if DEBUG is defined. + */ static inline void dont_report( const int level, const char *format, .../*args*/ ) -{} // The idea is that this gets optimized out +{} /* The idea is that this gets optimized out */ #ifdef DEBUG # define debug report diff --git a/shared/sockets.c b/shared/sockets.c index a1b59b2..bd5b747 100644 --- a/shared/sockets.c +++ b/shared/sockets.c @@ -61,7 +61,8 @@ sock_connect (char *host, unsigned short int port) } debug (RPT_DEBUG, "sock_connect: Created socket (%i)", sock); - sock_init_sockaddr (&servername, host, port); + if( sock_init_sockaddr (&servername, host, port) < 0 ) + return -1; err = connect (sock, (struct sockaddr *) &servername, sizeof (servername)); if (err < 0) {