- new socket function sock_send_error() and

sock_printf_error(): factored out the 'huh?-stuff, added error report
 log)
- use sock_printf() and sock_printf_error() if necessary (no need to
  use sprintf())
This commit is contained in:
boercher
2005-07-17 16:14:07 +00:00
parent 164f4fbed0
commit 93f162ff48
8 changed files with 156 additions and 131 deletions
+16 -23
View File
@@ -66,7 +66,7 @@ hello_func (Client * c, int argc, char **argv)
/* TODO: Give *real* info about the server/lcd...*/ /* TODO: Give *real* info about the server/lcd...*/
if (argc > 1) { if (argc > 1) {
sock_send_string (c->sock, "huh? extra parameters ignored\n"); sock_send_error(c->sock, "extra parameters ignored\n");
} }
debug(RPT_INFO, "Hello!"); debug(RPT_INFO, "Hello!");
@@ -96,7 +96,7 @@ int
client_set_func (Client * c, int argc, char **argv) client_set_func (Client * c, int argc, char **argv)
{ {
int i; int i;
char str[16], buf[80]; char str[16];
memset(str, '\0', sizeof(str)); memset(str, '\0', sizeof(str));
if (!c->ack) if (!c->ack)
@@ -105,13 +105,13 @@ client_set_func (Client * c, int argc, char **argv)
if (argc != 3) { if (argc != 3) {
switch (argc) { switch (argc) {
case 1: case 1:
sock_send_string (c->sock, "huh? usage: client_set -name <name>\n"); sock_send_error(c->sock, "usage: client_set -name <name>\n");
break; break;
case 2: case 2:
sock_send_string (c->sock, "huh? Not enough parameters\n"); sock_send_error(c->sock, "Not enough parameters\n");
break; break;
default: default:
sock_send_string (c->sock, "huh? Too many parameters\n"); sock_send_error(c->sock, "Too many parameters\n");
break; break;
} }
return 0; return 0;
@@ -130,13 +130,12 @@ client_set_func (Client * c, int argc, char **argv)
if (strcmp (p, "name") == 0) { if (strcmp (p, "name") == 0) {
i++; i++;
if (argv[i] == '\0') { if (argv[i] == '\0') {
snprintf (buf, sizeof(buf), "huh? internal error: no parameter #%d\n", i); sock_printf_error(c->sock, "internal error: no parameter #%d\n", i);
sock_send_string (c->sock, buf);
continue; continue;
} }
if (strlen(argv[i]) > sizeof(str) -1) { if (strlen(argv[i]) > sizeof(str) -1) {
sock_send_string (c->sock, "huh? name too long\n"); sock_send_error(c->sock, "name too long\n");
} else { } else {
strncpy(str, argv[i], sizeof(str) - 1); strncpy(str, argv[i], sizeof(str) - 1);
@@ -147,15 +146,14 @@ client_set_func (Client * c, int argc, char **argv)
free (c->name); free (c->name);
if ((c->name = strdup (str)) == NULL) { if ((c->name = strdup (str)) == NULL) {
sock_send_string(c->sock, "huh? error allocating memory!\n"); sock_send_error(c->sock, "error allocating memory!\n");
} else { } else {
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
i++; /* bypass argument (name string)*/ i++; /* bypass argument (name string)*/
} }
} }
} else { } else {
snprintf (buf, sizeof(buf), "huh? invalid parameter (%s)\n", p); sock_printf_error(c->sock, "invalid parameter (%s)\n", p);
sock_send_string (c->sock, buf);
} }
} while (++i < argc); } while (++i < argc);
@@ -174,7 +172,6 @@ client_add_key_func (Client * c, int argc, char **argv)
{ {
int exclusively = 0; int exclusively = 0;
int argnr; int argnr;
char errmsg[BUFLEN];
if (!c->ack) if (!c->ack)
return 1; return 1;
@@ -182,7 +179,7 @@ client_add_key_func (Client * c, int argc, char **argv)
if (argc < 2) { if (argc < 2) {
switch (argc) { switch (argc) {
case 1: case 1:
sock_send_string (c->sock, "huh? Usage: client_add_key [-exclusively|-shared] {<key>}+\n"); sock_send_error(c->sock, "Usage: client_add_key [-exclusively|-shared] {<key>}+\n");
break; break;
} }
return 0; return 0;
@@ -197,17 +194,13 @@ client_add_key_func (Client * c, int argc, char **argv)
exclusively = 1; exclusively = 1;
} }
else { else {
snprintf( errmsg, BUFLEN-1, "huh? Invalid option: %s\n", argv[argnr] ); sock_printf_error(c->sock, "Invalid option: %s\n", argv[argnr]);
errmsg[BUFLEN-1] = 0;
sock_send_string( c->sock, errmsg );
} }
argnr ++; argnr ++;
} }
for ( ; argnr < argc; argnr++ ) { for ( ; argnr < argc; argnr++ ) {
if( input_reserve_key( argv[argnr], exclusively, c ) < 0 ) { if( input_reserve_key( argv[argnr], exclusively, c ) < 0 ) {
snprintf( errmsg, BUFLEN-1, "huh? Could not reserve key \"%s\"\n", argv[argnr] ); sock_printf_error(c->sock, "Could not reserve key \"%s\"\n", argv[argnr]);
errmsg[BUFLEN-1] = 0;
sock_send_string( c->sock, errmsg );
} }
} }
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
@@ -230,7 +223,7 @@ client_del_key_func (Client * c, int argc, char **argv)
return 1; return 1;
if (argc < 2) { if (argc < 2) {
sock_send_string (c->sock, "huh? Usage: client_del_key {<key>}+\n"); sock_send_error(c->sock, "Usage: client_del_key {<key>}+\n");
return 0; return 0;
} }
@@ -256,10 +249,10 @@ backlight_func (Client * c, int argc, char **argv)
if (argc != 2) { if (argc != 2) {
switch (argc) { switch (argc) {
case 1: case 1:
sock_send_string (c->sock, "huh? usage: backlight <on|off|toggle|blink|flash>\n"); sock_send_error(c->sock, "usage: backlight <on|off|toggle|blink|flash>\n");
break; break;
default: default:
sock_send_string (c->sock, "huh? Too many parameters...\n"); sock_send_error(c->sock, "Too many parameters...\n");
break; break;
} }
return 0; return 0;
@@ -306,7 +299,7 @@ info_func (Client * c, int argc, char **argv)
char str[1024]; char str[1024];
if (argc > 1) { if (argc > 1) {
sock_send_string (c->sock, "huh? Extra arguments ignored...\n"); sock_send_error(c->sock, "Extra arguments ignored...\n");
} }
memset(str, '\0', sizeof(str)); memset(str, '\0', sizeof(str));
+40 -42
View File
@@ -50,10 +50,10 @@ screen_add_func (Client * c, int argc, char **argv)
if (argc != 2) { if (argc != 2) {
switch (argc) { switch (argc) {
case 1: case 1:
sock_send_string (c->sock, "huh? Usage: screen_add <screenid>\n"); sock_send_error(c->sock, "Usage: screen_add <screenid>\n");
break; break;
default: default:
sock_send_string (c->sock, "huh? Too many parameters...\n"); sock_send_error(c->sock, "Too many parameters...\n");
break; break;
} }
return 0; return 0;
@@ -63,14 +63,13 @@ screen_add_func (Client * c, int argc, char **argv)
s = client_find_screen (c, argv[1]); s = client_find_screen (c, argv[1]);
if (s) { if (s) {
sock_send_string(c->sock, "huh? Screen already exists\n"); sock_send_error(c->sock, "Screen already exists\n");
return 0; return 0;
} }
s = screen_create (argv[1], c); s = screen_create (argv[1], c);
if (!s) { if (!s) {
report(RPT_ERR, "screen_add_func: Error creating screen"); sock_send_error(c->sock, "failed to create screen\n");
sock_send_string (c->sock, "huh? failed to create screen\n");
return 0; return 0;
} }
@@ -79,8 +78,7 @@ screen_add_func (Client * c, int argc, char **argv)
if (err == 0) { if (err == 0) {
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
} else { } else {
report(RPT_WARNING, "screen_add_func: Error adding screen"); sock_send_error(c->sock, "failed to add screen\n");
sock_send_string (c->sock, "huh? Failed to add screen\n");
} }
report(RPT_INFO, "Client on socket %d added added screen \"%s\"", c->sock, s->id); report(RPT_INFO, "Client on socket %d added added screen \"%s\"", c->sock, s->id);
return 0; return 0;
@@ -102,9 +100,9 @@ screen_del_func (Client * c, int argc, char **argv)
if (argc != 2) { if (argc != 2) {
if (argc == 1) if (argc == 1)
sock_send_string (c->sock, "huh? Usage: screen_del <screenid>\n"); sock_send_error(c->sock, "Usage: screen_del <screenid>\n");
else else
sock_send_string (c->sock, "huh? Too many parameters...\n"); sock_send_error(c->sock, "Too many parameters...\n");
return 0; return 0;
} }
@@ -112,7 +110,7 @@ screen_del_func (Client * c, int argc, char **argv)
s = client_find_screen (c, argv[1]); s = client_find_screen (c, argv[1]);
if (!s) { if (!s) {
sock_send_string(c->sock, "huh? Unknown screen id\n"); sock_send_error(c->sock, "Unknown screen id\n");
return 0; return 0;
} }
@@ -120,10 +118,9 @@ screen_del_func (Client * c, int argc, char **argv)
if ( err == 0 ) if ( err == 0 )
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
else if (err < 0) { else if (err < 0) {
report(RPT_WARNING, "screen_del_func: Error removing screen"); sock_send_error(c->sock, "failed to remove screen\n");
sock_send_string(c->sock, "huh? Failed to remove screen\n");
} else } else
sock_send_string (c->sock, "huh? Unknown screen id\n"); sock_send_error(c->sock, "Unknown screen id\n");
report(RPT_INFO, "Client on socket %d removed screen \"%s\"", c->sock, s->id); report(RPT_INFO, "Client on socket %d removed screen \"%s\"", c->sock, s->id);
@@ -152,17 +149,19 @@ screen_set_func (Client * c, int argc, char **argv)
return 1; return 1;
if (argc == 1) { if (argc == 1) {
sock_send_string (c->sock, "huh? Usage: screen_set <id> [ -priority <int> ] [ -name <name> ] [ -duration <int> ] [ -wid <width> ] [ -hgt <height> ] [ -heartbeat <type> ]\n"); sock_send_error(c->sock, "Usage: screen_set <id> [ -priority <int> ]"
" [ -name <name> ] [ -duration <int> ] [ -wid <width> ]"
" [ -hgt <height> ] [ -heartbeat <type> ]\n");
return 0; return 0;
} else if (argc == 2) { } else if (argc == 2) {
sock_send_string (c->sock, "huh? What do you want to set?\n"); sock_send_error(c->sock, "What do you want to set?\n");
return 0; return 0;
} }
id = argv[1]; id = argv[1];
s = client_find_screen (c, id); s = client_find_screen (c, id);
if (!s) { if (!s) {
sock_send_string (c->sock, "huh? Unknown screen id\n"); sock_send_error(c->sock, "Unknown screen id\n");
return 0; return 0;
} }
/* Handle the rest of the parameters*/ /* Handle the rest of the parameters*/
@@ -190,7 +189,7 @@ screen_set_func (Client * c, int argc, char **argv)
s->name = strdup (argv[i]); s->name = strdup (argv[i]);
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
} else { } else {
sock_send_string (c->sock, "huh? -name requires a parameter\n"); sock_send_error(c->sock, "-name requires a parameter\n");
} }
} }
/* Handle the "priority" parameter*/ /* Handle the "priority" parameter*/
@@ -217,10 +216,10 @@ screen_set_func (Client * c, int argc, char **argv)
s->priority = number; s->priority = number;
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
} else { } else {
sock_send_string(c->sock, "huh? invalid argument at -priority\n"); sock_send_error(c->sock, "invalid argument at -priority\n");
} }
} else { } else {
sock_send_string (c->sock, "huh? -priority requires a parameter\n"); sock_send_error(c->sock, "-priority requires a parameter\n");
} }
} }
/* Handle the "duration" parameter*/ /* Handle the "duration" parameter*/
@@ -235,7 +234,7 @@ screen_set_func (Client * c, int argc, char **argv)
s->duration = number; s->duration = number;
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
} else { } else {
sock_send_string (c->sock, "huh? -duration requires a parameter\n"); sock_send_error(c->sock, "-duration requires a parameter\n");
} }
} }
/* Handle the "heartbeat" parameter*/ /* Handle the "heartbeat" parameter*/
@@ -253,7 +252,7 @@ screen_set_func (Client * c, int argc, char **argv)
s->heartbeat = HEARTBEAT_OPEN; s->heartbeat = HEARTBEAT_OPEN;
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
} else { } else {
sock_send_string (c->sock, "huh? -heartbeat requires a parameter\n"); sock_send_error(c->sock, "-heartbeat requires a parameter\n");
} }
} }
/* Handle the "wid" parameter*/ /* Handle the "wid" parameter*/
@@ -268,7 +267,7 @@ screen_set_func (Client * c, int argc, char **argv)
s->width = number; s->width = number;
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
} else { } else {
sock_send_string (c->sock, "huh? -wid requires a parameter\n"); sock_send_error(c->sock, "-wid requires a parameter\n");
} }
} }
@@ -284,7 +283,7 @@ screen_set_func (Client * c, int argc, char **argv)
s->height = number; s->height = number;
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
} else { } else {
sock_send_string (c->sock, "huh? -hgt requires a parameter\n"); sock_send_error(c->sock, "-hgt requires a parameter\n");
} }
} }
/* Handle the "timeout" parameter*/ /* Handle the "timeout" parameter*/
@@ -303,7 +302,7 @@ screen_set_func (Client * c, int argc, char **argv)
} }
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
} else { } else {
sock_send_string (c->sock, "huh? -timeout requires a parameter\n"); sock_send_error(c->sock, "-timeout requires a parameter\n");
} }
} }
/* Handle the "backlight" parameter*/ /* Handle the "backlight" parameter*/
@@ -340,7 +339,7 @@ screen_set_func (Client * c, int argc, char **argv)
} }
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
} else { } else {
sock_send_string (c->sock, "huh? -backlight requires a parameter\n"); sock_send_error(c->sock, "-backlight requires a parameter\n");
} }
} }
/* Handle the "cursor" parameter */ /* Handle the "cursor" parameter */
@@ -360,7 +359,7 @@ screen_set_func (Client * c, int argc, char **argv)
s->cursor = CURSOR_BLOCK; s->cursor = CURSOR_BLOCK;
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
} else { } else {
sock_send_string (c->sock, "huh? -cursor requires a parameter\n"); sock_send_error(c->sock, "-cursor requires a parameter\n");
} }
} }
/* Handle the "cursor_x" parameter */ /* Handle the "cursor_x" parameter */
@@ -376,10 +375,10 @@ screen_set_func (Client * c, int argc, char **argv)
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
} }
else { else {
sock_send_string(c->sock, "huh? Cursor position outside screen\n"); sock_send_error(c->sock, "Cursor position outside screen\n");
} }
} else { } else {
sock_send_string (c->sock, "huh? -cursor_x requires a parameter\n"); sock_send_error(c->sock, "-cursor_x requires a parameter\n");
} }
} }
/* Handle the "cursor_y" parameter */ /* Handle the "cursor_y" parameter */
@@ -395,14 +394,14 @@ screen_set_func (Client * c, int argc, char **argv)
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
} }
else { else {
sock_send_string(c->sock, "huh? Cursor position outside screen\n"); sock_send_error(c->sock, "Cursor position outside screen\n");
} }
} else { } else {
sock_send_string (c->sock, "huh? -cursor_y requires a parameter\n"); sock_send_error(c->sock, "-cursor_y requires a parameter\n");
} }
} }
else sock_send_string (c->sock, "huh? invalid parameter\n"); else sock_send_error(c->sock, "invalid parameter\n");
}/* done checking argv*/ }/* done checking argv*/
return 0; return 0;
} }
@@ -427,13 +426,13 @@ screen_add_key_func (Client * c, int argc, char **argv)
if (argc != 3) { if (argc != 3) {
switch (argc) { switch (argc) {
case 1: case 1:
sock_send_string (c->sock, "huh? Usage: screen_add_key <screenid> <keylist>\n"); sock_send_error(c->sock, "Usage: screen_add_key <screenid> <keylist>\n");
break; break;
case 2: case 2:
sock_send_string (c->sock, "huh? You must specify a key list\n"); sock_send_error(c->sock, "You must specify a key list\n");
break; break;
default: default:
sock_send_string (c->sock, "huh? Too many parameters...\n"); sock_send_error(c->sock, "Too many parameters...\n");
break; break;
} }
return 0; return 0;
@@ -446,7 +445,7 @@ screen_add_key_func (Client * c, int argc, char **argv)
/* Find the screen*/ /* Find the screen*/
s = client_find_screen (c, id); s = client_find_screen (c, id);
if (!s) { if (!s) {
sock_send_string (c->sock, "huh? Unknown screen id\n"); sock_send_error(c->sock, "Unknown screen id\n");
return 0; return 0;
} }
@@ -469,14 +468,13 @@ screen_add_key_func (Client * c, int argc, char **argv)
free (s->keys); free (s->keys);
s->keys = new_keys; s->keys = new_keys;
} else { } else {
report (RPT_WARNING, "screen_add_key: Allocation error"); sock_send_error(c->sock, "Could not add new keys\n");
sock_send_string(c->sock, "huh? Could not add new keys\n");
return 0; return 0;
} }
} }
if (!s->keys) { if (!s->keys) {
sock_send_string(c->sock, "huh? failed\n"); sock_send_error(c->sock, "failed\n");
} else } else
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
@@ -503,13 +501,13 @@ screen_del_key_func (Client * c, int argc, char **argv)
if (argc != 3) { if (argc != 3) {
switch (argc) { switch (argc) {
case 1: case 1:
sock_send_string (c->sock, "huh? Usage: screen_del_key <screenid> <keylist>\n"); sock_send_error(c->sock, "Usage: screen_del_key <screenid> <keylist>\n");
break; break;
case 2: case 2:
sock_send_string (c->sock, "huh? You must specify a key list\n"); sock_send_error(c->sock, "You must specify a key list\n");
break; break;
default: default:
sock_send_string (c->sock, "huh? Too many parameters\n"); sock_send_error(c->sock, "Too many parameters\n");
break; break;
} }
return 0; return 0;
@@ -523,7 +521,7 @@ screen_del_key_func (Client * c, int argc, char **argv)
s = client_find_screen (c, id); s = client_find_screen (c, id);
if (!s) { if (!s) {
sock_send_string (c->sock, "huh? Unknown screen id\n"); sock_send_error(c->sock, "Unknown screen id\n");
return 0; return 0;
} }
+11 -11
View File
@@ -48,9 +48,9 @@ output_func (Client * c, int argc, char **argv)
if (argc != 2) { if (argc != 2) {
if (argc == 1) if (argc == 1)
sock_send_string (c->sock, "huh? usage: output <on|off|num> -- num may be decimal, hex, or octal\n"); sock_send_error(c->sock, "usage: output <on|off|num> -- num may be decimal, hex, or octal\n");
else else
sock_send_string (c->sock, "huh? Too many parameters...\n"); sock_send_error(c->sock, "Too many parameters...\n");
return 0; return 0;
} }
@@ -88,18 +88,18 @@ output_func (Client * c, int argc, char **argv)
if (errno) { if (errno) {
int space; int space;
strcat(str, "huh? number argument: "); strcat(str, "number argument: ");
space = sizeof(str) - 3 - strlen(str); space = sizeof(str) - 3 - strlen(str);
strncat(str, strerror(errno), space); strncat(str, strerror(errno), space);
strcat(str, "\n"); strcat(str, "\n");
sock_send_string (c->sock, str); sock_send_error(c->sock, str);
return 0; return 0;
} else if (*p != '\0' && *endptr == '\0') { } else if (*p != '\0' && *endptr == '\0') {
output_state = out; output_state = out;
} else { } else {
sock_send_string (c->sock, "huh? invalid parameter...\n"); sock_send_error(c->sock, "invalid parameter...\n");
return 0; return 0;
} }
} }
@@ -135,9 +135,9 @@ sleep_func (Client * c, int argc, char **argv)
if (argc != 2) { if (argc != 2) {
if (argc == 1) if (argc == 1)
sock_send_string (c->sock, "huh? usage: sleep <secs>\n"); sock_send_error(c->sock, "usage: sleep <secs>\n");
else else
sock_send_string (c->sock, "huh? Too many parameters...\n"); sock_send_error(c->sock, "Too many parameters...\n");
return 0; return 0;
} }
@@ -162,20 +162,20 @@ sleep_func (Client * c, int argc, char **argv)
if (errno) { if (errno) {
int space; int space;
strcat(str, "huh? number argument: "); strcat(str, "number argument: ");
space = sizeof(str) - 3 - strlen(str); space = sizeof(str) - 3 - strlen(str);
strncat(str, strerror(errno), space); strncat(str, strerror(errno), space);
strcat(str, "\n"); strcat(str, "\n");
sock_send_string (c->sock, str); sock_send_error(c->sock, str);
return 0; return 0;
} else if (*p != '\0' && *endptr == '\0') { } else if (*p != '\0' && *endptr == '\0') {
secs = out; secs = out;
out = out > MAX_SECS ? MAX_SECS : out; out = out > MAX_SECS ? MAX_SECS : out;
out = out < MIN_SECS ? MIN_SECS : out; out = out < MIN_SECS ? MIN_SECS : out;
} else { } else {
sock_send_string (c->sock, "huh? invalid parameter...\n"); sock_send_error(c->sock, "invalid parameter...\n");
return 0; return 0;
} }
@@ -190,7 +190,7 @@ sleep_func (Client * c, int argc, char **argv)
* while ((secs = sleep(secs)) > 0) * while ((secs = sleep(secs)) > 0)
*/ ; */ ;
sock_send_string (c->sock, "huh? ignored (not fully implemented)\n"); sock_send_error(c->sock, "ignored (not fully implemented)\n");
return 0; return 0;
} }
+38 -43
View File
@@ -55,7 +55,7 @@ widget_add_func (Client * c, int argc, char **argv)
return 1; return 1;
if ((argc < 4) || (argc > 6)) { if ((argc < 4) || (argc > 6)) {
sock_send_string (c->sock, "huh? Usage: widget_add <screenid> <widgetid> <widgettype> [ -in <id> ]\n"); sock_send_error(c->sock, "Usage: widget_add <screenid> <widgetid> <widgettype> [ -in <id> ]\n");
return 0; return 0;
} }
@@ -64,14 +64,14 @@ widget_add_func (Client * c, int argc, char **argv)
s = client_find_screen (c, sid); s = client_find_screen (c, sid);
if (!s) { if (!s) {
sock_send_string (c->sock, "huh? Invalid screen id\n"); sock_send_error(c->sock, "Invalid screen id\n");
return 0; return 0;
} }
/* Find widget type */ /* Find widget type */
wtype = widget_typename_to_type (argv[3]); wtype = widget_typename_to_type (argv[3]);
if (wtype == WID_NONE) { if (wtype == WID_NONE) {
sock_send_string (c->sock, "huh? Invalid widget type\n"); sock_send_error(c->sock, "Invalid widget type\n");
return 0; return 0;
} }
@@ -88,7 +88,7 @@ widget_add_func (Client * c, int argc, char **argv)
Widget * frame; Widget * frame;
if (argc < 6) { if (argc < 6) {
sock_send_string (c->sock, "huh? Specify a frame to place widget in\n"); sock_send_error(c->sock, "Specify a frame to place widget in\n");
return 0; return 0;
} }
@@ -98,8 +98,7 @@ widget_add_func (Client * c, int argc, char **argv)
*/ */
frame = screen_find_widget(s, argv[5]); frame = screen_find_widget(s, argv[5]);
if (!frame) { if (!frame) {
report(RPT_WARNING, "widget_add_func: Error finding frame "); sock_send_error(c->sock, "Error finding frame\n");
sock_send_string(c->sock, "huh? Failed\n");
return 0; return 0;
} }
s = frame->frame_screen; s = frame->frame_screen;
@@ -109,8 +108,7 @@ widget_add_func (Client * c, int argc, char **argv)
/* Create the widget */ /* Create the widget */
w = widget_create (wid, wtype, s); w = widget_create (wid, wtype, s);
if (!w) { if (!w) {
report(RPT_WARNING, "widget_add_func: Error adding widget"); sock_send_error(c->sock, "Error adding widget\n");
sock_send_string(c->sock, "huh? Failed\n");
return 0; return 0;
} }
@@ -119,8 +117,7 @@ widget_add_func (Client * c, int argc, char **argv)
if (err == 0) if (err == 0)
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
else { else {
report(RPT_WARNING, "widget_add_func: Error adding widget"); sock_send_error(c->sock, "Error adding widget\n");
sock_send_string(c->sock, "huh? Failed\n");
} }
return 0; return 0;
@@ -147,13 +144,13 @@ widget_del_func (Client * c, int argc, char **argv)
if (argc != 3) { if (argc != 3) {
switch (argc) { switch (argc) {
case 1: case 1:
sock_send_string (c->sock, "huh? Usage: widget_del <screenid> <widgetid>\n"); sock_send_error(c->sock, "Usage: widget_del <screenid> <widgetid>\n");
break; break;
case 2: case 2:
sock_send_string (c->sock, "huh? Specify a widget #id\n"); sock_send_error(c->sock, "Specify a widget #id\n");
break; break;
default: default:
sock_send_string (c->sock, "huh? Too many parameters...\n"); sock_send_error(c->sock, "Too many parameters...\n");
break; break;
} }
return 0; return 0;
@@ -166,13 +163,13 @@ widget_del_func (Client * c, int argc, char **argv)
s = client_find_screen (c, sid); s = client_find_screen (c, sid);
if (!s) { if (!s) {
sock_send_string (c->sock, "huh? Invalid screen id\n"); sock_send_error(c->sock, "Invalid screen id\n");
return 0; return 0;
} }
w = screen_find_widget (s, wid); w = screen_find_widget (s, wid);
if (!w) { if (!w) {
sock_send_string (c->sock, "huh? Invalid widget id\n"); sock_send_error(c->sock, "Invalid widget id\n");
return 0; return 0;
} }
@@ -180,8 +177,7 @@ widget_del_func (Client * c, int argc, char **argv)
if (err == 0) if (err == 0)
sock_send_string(c->sock, "success\n"); sock_send_string(c->sock, "success\n");
else { else {
report( RPT_WARNING, "widget_del_func: Error removing widget"); sock_send_error(c->sock, "Error removing widget\n");
sock_send_string(c->sock, "huh? Failed\n");
} }
return 0; return 0;
@@ -220,7 +216,7 @@ widget_set_func (Client * c, int argc, char **argv)
*/ */
if (argc < 4) { if (argc < 4) {
sock_send_string (c->sock, "huh? Usage: widget_set <screenid> <widgetid> <widget-SPECIFIC-data>\n"); sock_send_error(c->sock, "Usage: widget_set <screenid> <widgetid> <widget-SPECIFIC-data>\n");
return 0; return 0;
} }
@@ -228,18 +224,18 @@ widget_set_func (Client * c, int argc, char **argv)
sid = argv[1]; sid = argv[1];
s = client_find_screen (c, sid); s = client_find_screen (c, sid);
if (!s) { if (!s) {
sock_send_string (c->sock, "huh? Unknown screen id\n"); sock_send_error(c->sock, "Unknown screen id\n");
return 0; return 0;
} }
/* Find widget */ /* Find widget */
wid = argv[2]; wid = argv[2];
w = screen_find_widget (s, wid); w = screen_find_widget (s, wid);
if (!w) { if (!w) {
sock_send_string (c->sock, "huh? Unknown widget id\n"); sock_send_error(c->sock, "Unknown widget id\n");
/* Client Debugging...*/ /* Client Debugging...*/
{ {
int i; int i;
report( RPT_WARNING, "huh? Unknown widget id (%s)", argv[2]); report( RPT_WARNING, "Unknown widget id (%s)", argv[2]);
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
report( RPT_WARNING, " %.40s ", argv[i]); report( RPT_WARNING, " %.40s ", argv[i]);
} }
@@ -249,11 +245,11 @@ widget_set_func (Client * c, int argc, char **argv)
switch (w->type) { switch (w->type) {
case WID_STRING: /* String takes "x y text"*/ case WID_STRING: /* String takes "x y text"*/
if (argc != i + 3) if (argc != i + 3)
sock_send_string (c->sock, "huh? Wrong number of arguments\n"); sock_send_error(c->sock, "Wrong number of arguments\n");
else { else {
if ((!isdigit ((unsigned int) argv[i][0])) || if ((!isdigit ((unsigned int) argv[i][0])) ||
(!isdigit ((unsigned int) argv[i + 1][0]))) { (!isdigit ((unsigned int) argv[i + 1][0]))) {
sock_send_string (c->sock, "huh? Invalid coordinates\n"); sock_send_error(c->sock, "Invalid coordinates\n");
} else /* Set all the data...*/ } else /* Set all the data...*/
{ {
x = atoi (argv[i]); x = atoi (argv[i]);
@@ -275,11 +271,11 @@ widget_set_func (Client * c, int argc, char **argv)
break; break;
case WID_HBAR: /* Hbar takes "x y length"*/ case WID_HBAR: /* Hbar takes "x y length"*/
if (argc != i + 3) if (argc != i + 3)
sock_send_string (c->sock, "huh? Wrong number of arguments\n"); sock_send_error(c->sock, "Wrong number of arguments\n");
else { else {
if ((!isdigit ((unsigned int) argv[i][0])) || if ((!isdigit ((unsigned int) argv[i][0])) ||
(!isdigit ((unsigned int) argv[i + 1][0]))) { (!isdigit ((unsigned int) argv[i + 1][0]))) {
sock_send_string (c->sock, "huh? Invalid coordinates\n"); sock_send_error(c->sock, "Invalid coordinates\n");
} else { } else {
x = atoi (argv[i]); x = atoi (argv[i]);
y = atoi (argv[i + 1]); y = atoi (argv[i + 1]);
@@ -294,11 +290,11 @@ widget_set_func (Client * c, int argc, char **argv)
break; break;
case WID_VBAR: /* Vbar takes "x y length"*/ case WID_VBAR: /* Vbar takes "x y length"*/
if (argc != i + 3) if (argc != i + 3)
sock_send_string (c->sock, "huh? Wrong number of arguments\n"); sock_send_error(c->sock, "Wrong number of arguments\n");
else { else {
if ((!isdigit ((unsigned int) argv[i][0])) || if ((!isdigit ((unsigned int) argv[i][0])) ||
(!isdigit ((unsigned int) argv[i + 1][0]))) { (!isdigit ((unsigned int) argv[i + 1][0]))) {
sock_send_string (c->sock, "huh? Invalid coordinates\n"); sock_send_error(c->sock, "Invalid coordinates\n");
} else { } else {
x = atoi (argv[i]); x = atoi (argv[i]);
y = atoi (argv[i + 1]); y = atoi (argv[i + 1]);
@@ -313,18 +309,18 @@ widget_set_func (Client * c, int argc, char **argv)
break; break;
case WID_ICON: /* Icon takes "x y icon"*/ case WID_ICON: /* Icon takes "x y icon"*/
if (argc != i + 3) if (argc != i + 3)
sock_send_string (c->sock, "huh? Wrong number of arguments\n"); sock_send_error(c->sock, "Wrong number of arguments\n");
else { else {
if ((!isdigit ((unsigned int) argv[i][0])) || if ((!isdigit ((unsigned int) argv[i][0])) ||
(!isdigit ((unsigned int) argv[i + 1][0]))) { (!isdigit ((unsigned int) argv[i + 1][0]))) {
sock_send_string (c->sock, "huh? Invalid coordinates\n"); sock_send_error(c->sock, "Invalid coordinates\n");
} else { } else {
int icon; int icon;
x = atoi (argv[i]); x = atoi (argv[i]);
y = atoi (argv[i + 1]); y = atoi (argv[i + 1]);
icon = widget_iconname_to_icon (argv[i + 2]); icon = widget_iconname_to_icon (argv[i + 2]);
if (icon == -1) { if (icon == -1) {
sock_send_string (c->sock, "huh? Invalid icon name\n"); sock_send_error(c->sock, "Invalid icon name\n");
} else { } else {
w->x = x; w->x = x;
w->y = y; w->y = y;
@@ -336,7 +332,7 @@ widget_set_func (Client * c, int argc, char **argv)
break; break;
case WID_TITLE: /* title takes "text"*/ case WID_TITLE: /* title takes "text"*/
if (argc != i + 1) if (argc != i + 1)
sock_send_string (c->sock, "huh? Wrong number of arguments\n"); sock_send_error(c->sock, "Wrong number of arguments\n");
else { else {
if (w->text) if (w->text)
free (w->text); free (w->text);
@@ -353,13 +349,13 @@ widget_set_func (Client * c, int argc, char **argv)
break; break;
case WID_SCROLLER: /* Scroller takes "left top right bottom direction speed text"*/ case WID_SCROLLER: /* Scroller takes "left top right bottom direction speed text"*/
if (argc != i + 7) { if (argc != i + 7) {
sock_send_string (c->sock, "huh? Wrong number of arguments\n"); sock_send_error(c->sock, "Wrong number of arguments\n");
} else { } else {
if ((!isdigit ((unsigned int) argv[i][0])) || if ((!isdigit ((unsigned int) argv[i][0])) ||
(!isdigit ((unsigned int) argv[i + 1][0])) || (!isdigit ((unsigned int) argv[i + 1][0])) ||
(!isdigit ((unsigned int) argv[i + 2][0])) || (!isdigit ((unsigned int) argv[i + 2][0])) ||
(!isdigit ((unsigned int) argv[i + 3][0]))) { (!isdigit ((unsigned int) argv[i + 3][0]))) {
sock_send_string (c->sock, "huh? Invalid coordinates\n"); sock_send_error(c->sock, "Invalid coordinates\n");
} else { } else {
left = atoi (argv[i]); left = atoi (argv[i]);
/*debug("left: %d",left);*/ /*debug("left: %d",left);*/
@@ -376,7 +372,7 @@ widget_set_func (Client * c, int argc, char **argv)
/* Direction must be m, v or h*/ /* Direction must be m, v or h*/
if (((char) direction != 'h') && ((char) direction != 'v') && if (((char) direction != 'h') && ((char) direction != 'v') &&
((char) direction != 'm')) { ((char) direction != 'm')) {
sock_send_string (c->sock, "huh? Invalid direction\n"); sock_send_error(c->sock, "Invalid direction\n");
} else { } else {
w->left = left; w->left = left;
w->top = top; w->top = top;
@@ -388,8 +384,7 @@ widget_set_func (Client * c, int argc, char **argv)
free (w->text); free (w->text);
w->text = strdup (argv[i + 6]); w->text = strdup (argv[i + 6]);
if (!w->text) { if (!w->text) {
sock_send_string(c->sock, "huh? Failed\n"); sock_send_error(c->sock, "Allocation error\n");
report( RPT_WARNING, "widget_set_func: Allocation error");
return -1; return -1;
} }
debug (RPT_DEBUG, "Widget %s set to %s", wid, w->text); debug (RPT_DEBUG, "Widget %s set to %s", wid, w->text);
@@ -400,7 +395,7 @@ widget_set_func (Client * c, int argc, char **argv)
break; break;
case WID_FRAME: /* Frame takes "left top right bottom wid hgt direction speed"*/ case WID_FRAME: /* Frame takes "left top right bottom wid hgt direction speed"*/
if (argc != i + 8) { if (argc != i + 8) {
sock_send_string (c->sock, "huh? Wrong number of arguments\n"); sock_send_error(c->sock, "Wrong number of arguments\n");
} else { } else {
if ((!isdigit ((unsigned int) argv[i][0])) || if ((!isdigit ((unsigned int) argv[i][0])) ||
(!isdigit ((unsigned int) argv[i + 1][0])) || (!isdigit ((unsigned int) argv[i + 1][0])) ||
@@ -408,7 +403,7 @@ widget_set_func (Client * c, int argc, char **argv)
(!isdigit ((unsigned int) argv[i + 3][0])) || (!isdigit ((unsigned int) argv[i + 3][0])) ||
(!isdigit ((unsigned int) argv[i + 4][0])) || (!isdigit ((unsigned int) argv[i + 4][0])) ||
(!isdigit ((unsigned int) argv[i + 5][0]))) { (!isdigit ((unsigned int) argv[i + 5][0]))) {
sock_send_string (c->sock, "huh? Invalid coordinates\n"); sock_send_error(c->sock, "Invalid coordinates\n");
} else { } else {
left = atoi (argv[i]); left = atoi (argv[i]);
/*debug("left: %d",left);*/ /*debug("left: %d",left);*/
@@ -428,7 +423,7 @@ widget_set_func (Client * c, int argc, char **argv)
/*debug("speed: %d",speed);*/ /*debug("speed: %d",speed);*/
/* Direction must be v or h*/ /* Direction must be v or h*/
if (((char) direction != 'h') && ((char) direction != 'v')) { if (((char) direction != 'h') && ((char) direction != 'v')) {
sock_send_string (c->sock, "huh? Invalid direction\n"); sock_send_error(c->sock, "Invalid direction\n");
} else { } else {
w->left = left; w->left = left;
w->top = top; w->top = top;
@@ -446,12 +441,12 @@ widget_set_func (Client * c, int argc, char **argv)
break; break;
case WID_NUM: /* Num takes "x num"*/ case WID_NUM: /* Num takes "x num"*/
if (argc != i + 2) if (argc != i + 2)
sock_send_string (c->sock, "huh? Wrong number of arguments\n"); sock_send_error(c->sock, "Wrong number of arguments\n");
else { else {
if (!isdigit ((unsigned int) argv[i][0])) { if (!isdigit ((unsigned int) argv[i][0])) {
sock_send_string (c->sock, "huh? Invalid coordinates\n"); sock_send_error(c->sock, "Invalid coordinates\n");
} else if (!isdigit ((unsigned int) argv[i + 1][0])) { } else if (!isdigit ((unsigned int) argv[i + 1][0])) {
sock_send_string (c->sock, "huh? Invalid number\n"); sock_send_error(c->sock, "Invalid number\n");
} else { } else {
x = atoi (argv[i]); x = atoi (argv[i]);
y = atoi (argv[i + 1]); y = atoi (argv[i + 1]);
@@ -464,7 +459,7 @@ widget_set_func (Client * c, int argc, char **argv)
break; break;
case WID_NONE: case WID_NONE:
default: default:
sock_send_string (c->sock, "huh? Widget has no type\n"); sock_send_error(c->sock, "Widget has no type\n");
break; break;
} }
+4 -9
View File
@@ -53,7 +53,6 @@ static int parse_message (const char *str, Client *c)
typedef enum { ST_INITIAL, ST_WHITESPACE, ST_ARGUMENT, ST_FINAL } State; typedef enum { ST_INITIAL, ST_WHITESPACE, ST_ARGUMENT, ST_FINAL } State;
State state = ST_INITIAL; State state = ST_INITIAL;
char errmsg[256];
int error = 0; int error = 0;
char quote = '\0'; /* The quote used to open a quote string */ char quote = '\0'; /* The quote used to open a quote string */
int pos = 0; int pos = 0;
@@ -83,7 +82,7 @@ static int parse_message (const char *str, Client *c)
arg_space = malloc(strlen(str)+1); arg_space = malloc(strlen(str)+1);
if (arg_space == NULL) { if (arg_space == NULL) {
report (RPT_ERR, "%s: Could not allocate memory", __FUNCTION__); report (RPT_ERR, "%s: Could not allocate memory", __FUNCTION__);
sock_send_string(c->sock, "huh? error allocating memory!\n"); sock_send_error(c->sock, "error allocating memory!\n");
} }
argv[0] = arg_space; argv[0] = arg_space;
@@ -163,9 +162,7 @@ static int parse_message (const char *str, Client *c)
error = 1; error = 1;
if (error) { if (error) {
report( RPT_WARNING, "Could not parse command from client on socket %d: %.40s", c->sock, str ); sock_send_error(c->sock, "Could not parse command\n");
snprintf (errmsg, sizeof(errmsg), "huh? Could not parse command\n");
sock_send_string (c->sock, errmsg);
free( arg_space ); free( arg_space );
return 0; return 0;
} }
@@ -183,14 +180,12 @@ static int parse_message (const char *str, Client *c)
if (function != NULL) { if (function != NULL) {
error = function (c, argc, argv); error = function (c, argc, argv);
if (error) { if (error) {
snprintf (errmsg, sizeof(errmsg), "huh? Function returned error \"%.40s\"\n", argv[0]); sock_printf_error(c->sock, "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: %.40s", c->sock, str ); report( RPT_WARNING, "Command function returned an error after command from client on socket %d: %.40s", c->sock, str );
} }
} }
else { else {
snprintf (errmsg, sizeof(errmsg), "huh? Invalid command \"%.40s\"\n", argv[0]); sock_printf_error(c->sock, "Invalid command \"%.40s\"\n", argv[0]);
sock_send_string (c->sock, errmsg);
report( RPT_WARNING, "Invalid command from client on socket %d: %.40s", c->sock, str ); report( RPT_WARNING, "Invalid command from client on socket %d: %.40s", c->sock, str );
} }
+1 -3
View File
@@ -409,9 +409,7 @@ sock_read_from_client(struct ClientSocketMap* clientSocketMap)
return -1; return -1;
} else if (nbytes > (MAXMSG - (MAXMSG / 8))) /* Very noisy client...*/ } else if (nbytes > (MAXMSG - (MAXMSG / 8))) /* Very noisy client...*/
{ {
sock_send_string(clientSocketMap->socket, "huh? Too much data received... quiet down!\n"); sock_send_error(clientSocketMap->socket, "Too much data received... quiet down!\n");
report(RPT_WARNING, "%s: Too much data received on socket %d",
__FUNCTION__, clientSocketMap->socket);
return -1; return -1;
} else /* Data Read*/ } else /* Data Read*/
{ {
+44
View File
@@ -292,3 +292,47 @@ sock_geterror(void)
#endif #endif
} }
/** prints error to logfile and sends it to the client.
* @param fd socket
* @param message the message to send (without the "huh? ") */
int sock_send_error(int fd, char* message)
{
// simple: performance penalty isn't worth more work...
return sock_printf_error(fd, message);
}
/** prints printf-like formatted output to logfile and sends it to the
* client.
* @param fd socket
* @param message the message to send (without the "huh? ") */
int
sock_printf_error(int fd, const char *format, .../*args*/ )
{
char buf[MAXMSG];
static const int huhsize = sizeof("huh? ") - 1;
char *p = buf + huhsize;
va_list ap;
int size = 0;
va_start(ap, format);
size = vsnprintf(buf, sizeof(buf), format, ap);
va_end(ap);
if (size < 0) {
report(RPT_ERR, "sock_printf_error: vsnprintf failed");
return -1;
}
if (size > sizeof(buf))
report(RPT_WARNING, "sock_printf_error: vsnprintf truncated message");
/* prepend the "huh? " */
if (size > sizeof(buf) - huhsize)
size = sizeof(buf) - huhsize;
memmove(p, buf, size);
memcpy(buf, "huh? ", huhsize);
report(RPT_ERR, "error: %s", buf);
return sock_send_string(fd, buf);
}
+2
View File
@@ -36,6 +36,8 @@ int sock_recv (int fd, void *dest, size_t maxlen);
/* Return error message string for the socket function */ /* Return error message string for the socket function */
char *sock_geterror(void); char *sock_geterror(void);
int sock_send_error(int fd, char* message);
int sock_printf_error(int fd, const char *format, .../*args*/);
// Er, ignore the rest of this file. I'll clean it up sometime... // Er, ignore the rest of this file. I'll clean it up sometime...