- 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...*/
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!");
@@ -96,7 +96,7 @@ int
client_set_func (Client * c, int argc, char **argv)
{
int i;
char str[16], buf[80];
char str[16];
memset(str, '\0', sizeof(str));
if (!c->ack)
@@ -105,13 +105,13 @@ client_set_func (Client * c, int argc, char **argv)
if (argc != 3) {
switch (argc) {
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;
case 2:
sock_send_string (c->sock, "huh? Not enough parameters\n");
sock_send_error(c->sock, "Not enough parameters\n");
break;
default:
sock_send_string (c->sock, "huh? Too many parameters\n");
sock_send_error(c->sock, "Too many parameters\n");
break;
}
return 0;
@@ -130,13 +130,12 @@ client_set_func (Client * c, int argc, char **argv)
if (strcmp (p, "name") == 0) {
i++;
if (argv[i] == '\0') {
snprintf (buf, sizeof(buf), "huh? internal error: no parameter #%d\n", i);
sock_send_string (c->sock, buf);
sock_printf_error(c->sock, "internal error: no parameter #%d\n", i);
continue;
}
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 {
strncpy(str, argv[i], sizeof(str) - 1);
@@ -147,15 +146,14 @@ client_set_func (Client * c, int argc, char **argv)
free (c->name);
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 {
sock_send_string(c->sock, "success\n");
i++; /* bypass argument (name string)*/
}
}
} else {
snprintf (buf, sizeof(buf), "huh? invalid parameter (%s)\n", p);
sock_send_string (c->sock, buf);
sock_printf_error(c->sock, "invalid parameter (%s)\n", p);
}
} while (++i < argc);
@@ -174,7 +172,6 @@ client_add_key_func (Client * c, int argc, char **argv)
{
int exclusively = 0;
int argnr;
char errmsg[BUFLEN];
if (!c->ack)
return 1;
@@ -182,7 +179,7 @@ client_add_key_func (Client * c, int argc, char **argv)
if (argc < 2) {
switch (argc) {
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;
}
return 0;
@@ -197,17 +194,13 @@ client_add_key_func (Client * c, int argc, char **argv)
exclusively = 1;
}
else {
snprintf( errmsg, BUFLEN-1, "huh? Invalid option: %s\n", argv[argnr] );
errmsg[BUFLEN-1] = 0;
sock_send_string( c->sock, errmsg );
sock_printf_error(c->sock, "Invalid option: %s\n", argv[argnr]);
}
argnr ++;
}
for ( ; argnr < argc; argnr++ ) {
if( input_reserve_key( argv[argnr], exclusively, c ) < 0 ) {
snprintf( errmsg, BUFLEN-1, "huh? Could not reserve key \"%s\"\n", argv[argnr] );
errmsg[BUFLEN-1] = 0;
sock_send_string( c->sock, errmsg );
sock_printf_error(c->sock, "Could not reserve key \"%s\"\n", argv[argnr]);
}
}
sock_send_string(c->sock, "success\n");
@@ -230,7 +223,7 @@ client_del_key_func (Client * c, int argc, char **argv)
return 1;
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;
}
@@ -256,10 +249,10 @@ backlight_func (Client * c, int argc, char **argv)
if (argc != 2) {
switch (argc) {
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;
default:
sock_send_string (c->sock, "huh? Too many parameters...\n");
sock_send_error(c->sock, "Too many parameters...\n");
break;
}
return 0;
@@ -306,7 +299,7 @@ info_func (Client * c, int argc, char **argv)
char str[1024];
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));
+40 -42
View File
@@ -50,10 +50,10 @@ screen_add_func (Client * c, int argc, char **argv)
if (argc != 2) {
switch (argc) {
case 1:
sock_send_string (c->sock, "huh? Usage: screen_add <screenid>\n");
sock_send_error(c->sock, "Usage: screen_add <screenid>\n");
break;
default:
sock_send_string (c->sock, "huh? Too many parameters...\n");
sock_send_error(c->sock, "Too many parameters...\n");
break;
}
return 0;
@@ -63,14 +63,13 @@ screen_add_func (Client * c, int argc, char **argv)
s = client_find_screen (c, argv[1]);
if (s) {
sock_send_string(c->sock, "huh? Screen already exists\n");
sock_send_error(c->sock, "Screen already exists\n");
return 0;
}
s = screen_create (argv[1], c);
if (!s) {
report(RPT_ERR, "screen_add_func: Error creating screen");
sock_send_string (c->sock, "huh? failed to create screen\n");
sock_send_error(c->sock, "failed to create screen\n");
return 0;
}
@@ -79,8 +78,7 @@ screen_add_func (Client * c, int argc, char **argv)
if (err == 0) {
sock_send_string(c->sock, "success\n");
} else {
report(RPT_WARNING, "screen_add_func: Error adding screen");
sock_send_string (c->sock, "huh? Failed to add screen\n");
sock_send_error(c->sock, "failed to add screen\n");
}
report(RPT_INFO, "Client on socket %d added added screen \"%s\"", c->sock, s->id);
return 0;
@@ -102,9 +100,9 @@ screen_del_func (Client * c, int argc, char **argv)
if (argc != 2) {
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
sock_send_string (c->sock, "huh? Too many parameters...\n");
sock_send_error(c->sock, "Too many parameters...\n");
return 0;
}
@@ -112,7 +110,7 @@ screen_del_func (Client * c, int argc, char **argv)
s = client_find_screen (c, argv[1]);
if (!s) {
sock_send_string(c->sock, "huh? Unknown screen id\n");
sock_send_error(c->sock, "Unknown screen id\n");
return 0;
}
@@ -120,10 +118,9 @@ screen_del_func (Client * c, int argc, char **argv)
if ( err == 0 )
sock_send_string(c->sock, "success\n");
else if (err < 0) {
report(RPT_WARNING, "screen_del_func: Error removing screen");
sock_send_string(c->sock, "huh? Failed to remove screen\n");
sock_send_error(c->sock, "failed to remove screen\n");
} 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);
@@ -152,17 +149,19 @@ screen_set_func (Client * c, int argc, char **argv)
return 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;
} 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;
}
id = argv[1];
s = client_find_screen (c, id);
if (!s) {
sock_send_string (c->sock, "huh? Unknown screen id\n");
sock_send_error(c->sock, "Unknown screen id\n");
return 0;
}
/* Handle the rest of the parameters*/
@@ -190,7 +189,7 @@ screen_set_func (Client * c, int argc, char **argv)
s->name = strdup (argv[i]);
sock_send_string(c->sock, "success\n");
} 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*/
@@ -217,10 +216,10 @@ screen_set_func (Client * c, int argc, char **argv)
s->priority = number;
sock_send_string(c->sock, "success\n");
} else {
sock_send_string(c->sock, "huh? invalid argument at -priority\n");
sock_send_error(c->sock, "invalid argument at -priority\n");
}
} 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*/
@@ -235,7 +234,7 @@ screen_set_func (Client * c, int argc, char **argv)
s->duration = number;
sock_send_string(c->sock, "success\n");
} 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*/
@@ -253,7 +252,7 @@ screen_set_func (Client * c, int argc, char **argv)
s->heartbeat = HEARTBEAT_OPEN;
sock_send_string(c->sock, "success\n");
} 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*/
@@ -268,7 +267,7 @@ screen_set_func (Client * c, int argc, char **argv)
s->width = number;
sock_send_string(c->sock, "success\n");
} 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;
sock_send_string(c->sock, "success\n");
} 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*/
@@ -303,7 +302,7 @@ screen_set_func (Client * c, int argc, char **argv)
}
sock_send_string(c->sock, "success\n");
} 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*/
@@ -340,7 +339,7 @@ screen_set_func (Client * c, int argc, char **argv)
}
sock_send_string(c->sock, "success\n");
} 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 */
@@ -360,7 +359,7 @@ screen_set_func (Client * c, int argc, char **argv)
s->cursor = CURSOR_BLOCK;
sock_send_string(c->sock, "success\n");
} 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 */
@@ -376,10 +375,10 @@ screen_set_func (Client * c, int argc, char **argv)
sock_send_string(c->sock, "success\n");
}
else {
sock_send_string(c->sock, "huh? Cursor position outside screen\n");
sock_send_error(c->sock, "Cursor position outside screen\n");
}
} 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 */
@@ -395,14 +394,14 @@ screen_set_func (Client * c, int argc, char **argv)
sock_send_string(c->sock, "success\n");
}
else {
sock_send_string(c->sock, "huh? Cursor position outside screen\n");
sock_send_error(c->sock, "Cursor position outside screen\n");
}
} 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*/
return 0;
}
@@ -427,13 +426,13 @@ screen_add_key_func (Client * c, int argc, char **argv)
if (argc != 3) {
switch (argc) {
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;
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;
default:
sock_send_string (c->sock, "huh? Too many parameters...\n");
sock_send_error(c->sock, "Too many parameters...\n");
break;
}
return 0;
@@ -446,7 +445,7 @@ screen_add_key_func (Client * c, int argc, char **argv)
/* Find the screen*/
s = client_find_screen (c, id);
if (!s) {
sock_send_string (c->sock, "huh? Unknown screen id\n");
sock_send_error(c->sock, "Unknown screen id\n");
return 0;
}
@@ -469,14 +468,13 @@ screen_add_key_func (Client * c, int argc, char **argv)
free (s->keys);
s->keys = new_keys;
} else {
report (RPT_WARNING, "screen_add_key: Allocation error");
sock_send_string(c->sock, "huh? Could not add new keys\n");
sock_send_error(c->sock, "Could not add new keys\n");
return 0;
}
}
if (!s->keys) {
sock_send_string(c->sock, "huh? failed\n");
sock_send_error(c->sock, "failed\n");
} else
sock_send_string(c->sock, "success\n");
@@ -503,13 +501,13 @@ screen_del_key_func (Client * c, int argc, char **argv)
if (argc != 3) {
switch (argc) {
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;
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;
default:
sock_send_string (c->sock, "huh? Too many parameters\n");
sock_send_error(c->sock, "Too many parameters\n");
break;
}
return 0;
@@ -523,7 +521,7 @@ screen_del_key_func (Client * c, int argc, char **argv)
s = client_find_screen (c, id);
if (!s) {
sock_send_string (c->sock, "huh? Unknown screen id\n");
sock_send_error(c->sock, "Unknown screen id\n");
return 0;
}
+11 -11
View File
@@ -48,9 +48,9 @@ output_func (Client * c, int argc, char **argv)
if (argc != 2) {
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
sock_send_string (c->sock, "huh? Too many parameters...\n");
sock_send_error(c->sock, "Too many parameters...\n");
return 0;
}
@@ -88,18 +88,18 @@ output_func (Client * c, int argc, char **argv)
if (errno) {
int space;
strcat(str, "huh? number argument: ");
strcat(str, "number argument: ");
space = sizeof(str) - 3 - strlen(str);
strncat(str, strerror(errno), space);
strcat(str, "\n");
sock_send_string (c->sock, str);
sock_send_error(c->sock, str);
return 0;
} else if (*p != '\0' && *endptr == '\0') {
output_state = out;
} else {
sock_send_string (c->sock, "huh? invalid parameter...\n");
sock_send_error(c->sock, "invalid parameter...\n");
return 0;
}
}
@@ -135,9 +135,9 @@ sleep_func (Client * c, int argc, char **argv)
if (argc != 2) {
if (argc == 1)
sock_send_string (c->sock, "huh? usage: sleep <secs>\n");
sock_send_error(c->sock, "usage: sleep <secs>\n");
else
sock_send_string (c->sock, "huh? Too many parameters...\n");
sock_send_error(c->sock, "Too many parameters...\n");
return 0;
}
@@ -162,20 +162,20 @@ sleep_func (Client * c, int argc, char **argv)
if (errno) {
int space;
strcat(str, "huh? number argument: ");
strcat(str, "number argument: ");
space = sizeof(str) - 3 - strlen(str);
strncat(str, strerror(errno), space);
strcat(str, "\n");
sock_send_string (c->sock, str);
sock_send_error(c->sock, str);
return 0;
} else if (*p != '\0' && *endptr == '\0') {
secs = out;
out = out > MAX_SECS ? MAX_SECS : out;
out = out < MIN_SECS ? MIN_SECS : out;
} else {
sock_send_string (c->sock, "huh? invalid parameter...\n");
sock_send_error(c->sock, "invalid parameter...\n");
return 0;
}
@@ -190,7 +190,7 @@ sleep_func (Client * c, int argc, char **argv)
* 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;
}
+38 -43
View File
@@ -55,7 +55,7 @@ widget_add_func (Client * c, int argc, char **argv)
return 1;
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;
}
@@ -64,14 +64,14 @@ widget_add_func (Client * c, int argc, char **argv)
s = client_find_screen (c, sid);
if (!s) {
sock_send_string (c->sock, "huh? Invalid screen id\n");
sock_send_error(c->sock, "Invalid screen id\n");
return 0;
}
/* Find widget type */
wtype = widget_typename_to_type (argv[3]);
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;
}
@@ -88,7 +88,7 @@ widget_add_func (Client * c, int argc, char **argv)
Widget * frame;
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;
}
@@ -98,8 +98,7 @@ widget_add_func (Client * c, int argc, char **argv)
*/
frame = screen_find_widget(s, argv[5]);
if (!frame) {
report(RPT_WARNING, "widget_add_func: Error finding frame ");
sock_send_string(c->sock, "huh? Failed\n");
sock_send_error(c->sock, "Error finding frame\n");
return 0;
}
s = frame->frame_screen;
@@ -109,8 +108,7 @@ widget_add_func (Client * c, int argc, char **argv)
/* Create the widget */
w = widget_create (wid, wtype, s);
if (!w) {
report(RPT_WARNING, "widget_add_func: Error adding widget");
sock_send_string(c->sock, "huh? Failed\n");
sock_send_error(c->sock, "Error adding widget\n");
return 0;
}
@@ -119,8 +117,7 @@ widget_add_func (Client * c, int argc, char **argv)
if (err == 0)
sock_send_string(c->sock, "success\n");
else {
report(RPT_WARNING, "widget_add_func: Error adding widget");
sock_send_string(c->sock, "huh? Failed\n");
sock_send_error(c->sock, "Error adding widget\n");
}
return 0;
@@ -147,13 +144,13 @@ widget_del_func (Client * c, int argc, char **argv)
if (argc != 3) {
switch (argc) {
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;
case 2:
sock_send_string (c->sock, "huh? Specify a widget #id\n");
sock_send_error(c->sock, "Specify a widget #id\n");
break;
default:
sock_send_string (c->sock, "huh? Too many parameters...\n");
sock_send_error(c->sock, "Too many parameters...\n");
break;
}
return 0;
@@ -166,13 +163,13 @@ widget_del_func (Client * c, int argc, char **argv)
s = client_find_screen (c, sid);
if (!s) {
sock_send_string (c->sock, "huh? Invalid screen id\n");
sock_send_error(c->sock, "Invalid screen id\n");
return 0;
}
w = screen_find_widget (s, wid);
if (!w) {
sock_send_string (c->sock, "huh? Invalid widget id\n");
sock_send_error(c->sock, "Invalid widget id\n");
return 0;
}
@@ -180,8 +177,7 @@ widget_del_func (Client * c, int argc, char **argv)
if (err == 0)
sock_send_string(c->sock, "success\n");
else {
report( RPT_WARNING, "widget_del_func: Error removing widget");
sock_send_string(c->sock, "huh? Failed\n");
sock_send_error(c->sock, "Error removing widget\n");
}
return 0;
@@ -220,7 +216,7 @@ widget_set_func (Client * c, int argc, char **argv)
*/
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;
}
@@ -228,18 +224,18 @@ widget_set_func (Client * c, int argc, char **argv)
sid = argv[1];
s = client_find_screen (c, sid);
if (!s) {
sock_send_string (c->sock, "huh? Unknown screen id\n");
sock_send_error(c->sock, "Unknown screen id\n");
return 0;
}
/* Find widget */
wid = argv[2];
w = screen_find_widget (s, wid);
if (!w) {
sock_send_string (c->sock, "huh? Unknown widget id\n");
sock_send_error(c->sock, "Unknown widget id\n");
/* Client Debugging...*/
{
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++)
report( RPT_WARNING, " %.40s ", argv[i]);
}
@@ -249,11 +245,11 @@ widget_set_func (Client * c, int argc, char **argv)
switch (w->type) {
case WID_STRING: /* String takes "x y text"*/
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 {
if ((!isdigit ((unsigned int) argv[i][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...*/
{
x = atoi (argv[i]);
@@ -275,11 +271,11 @@ widget_set_func (Client * c, int argc, char **argv)
break;
case WID_HBAR: /* Hbar takes "x y length"*/
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 {
if ((!isdigit ((unsigned int) argv[i][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 {
x = atoi (argv[i]);
y = atoi (argv[i + 1]);
@@ -294,11 +290,11 @@ widget_set_func (Client * c, int argc, char **argv)
break;
case WID_VBAR: /* Vbar takes "x y length"*/
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 {
if ((!isdigit ((unsigned int) argv[i][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 {
x = atoi (argv[i]);
y = atoi (argv[i + 1]);
@@ -313,18 +309,18 @@ widget_set_func (Client * c, int argc, char **argv)
break;
case WID_ICON: /* Icon takes "x y icon"*/
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 {
if ((!isdigit ((unsigned int) argv[i][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 {
int icon;
x = atoi (argv[i]);
y = atoi (argv[i + 1]);
icon = widget_iconname_to_icon (argv[i + 2]);
if (icon == -1) {
sock_send_string (c->sock, "huh? Invalid icon name\n");
sock_send_error(c->sock, "Invalid icon name\n");
} else {
w->x = x;
w->y = y;
@@ -336,7 +332,7 @@ widget_set_func (Client * c, int argc, char **argv)
break;
case WID_TITLE: /* title takes "text"*/
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 {
if (w->text)
free (w->text);
@@ -353,13 +349,13 @@ widget_set_func (Client * c, int argc, char **argv)
break;
case WID_SCROLLER: /* Scroller takes "left top right bottom direction speed text"*/
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 {
if ((!isdigit ((unsigned int) argv[i][0])) ||
(!isdigit ((unsigned int) argv[i + 1][0])) ||
(!isdigit ((unsigned int) argv[i + 2][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 {
left = atoi (argv[i]);
/*debug("left: %d",left);*/
@@ -376,7 +372,7 @@ widget_set_func (Client * c, int argc, char **argv)
/* Direction must be m, v or h*/
if (((char) direction != 'h') && ((char) direction != 'v') &&
((char) direction != 'm')) {
sock_send_string (c->sock, "huh? Invalid direction\n");
sock_send_error(c->sock, "Invalid direction\n");
} else {
w->left = left;
w->top = top;
@@ -388,8 +384,7 @@ widget_set_func (Client * c, int argc, char **argv)
free (w->text);
w->text = strdup (argv[i + 6]);
if (!w->text) {
sock_send_string(c->sock, "huh? Failed\n");
report( RPT_WARNING, "widget_set_func: Allocation error");
sock_send_error(c->sock, "Allocation error\n");
return -1;
}
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;
case WID_FRAME: /* Frame takes "left top right bottom wid hgt direction speed"*/
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 {
if ((!isdigit ((unsigned int) argv[i][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 + 4][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 {
left = atoi (argv[i]);
/*debug("left: %d",left);*/
@@ -428,7 +423,7 @@ widget_set_func (Client * c, int argc, char **argv)
/*debug("speed: %d",speed);*/
/* Direction must be v or h*/
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 {
w->left = left;
w->top = top;
@@ -446,12 +441,12 @@ widget_set_func (Client * c, int argc, char **argv)
break;
case WID_NUM: /* Num takes "x num"*/
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 {
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])) {
sock_send_string (c->sock, "huh? Invalid number\n");
sock_send_error(c->sock, "Invalid number\n");
} else {
x = atoi (argv[i]);
y = atoi (argv[i + 1]);
@@ -464,7 +459,7 @@ widget_set_func (Client * c, int argc, char **argv)
break;
case WID_NONE:
default:
sock_send_string (c->sock, "huh? Widget has no type\n");
sock_send_error(c->sock, "Widget has no type\n");
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;
State state = ST_INITIAL;
char errmsg[256];
int error = 0;
char quote = '\0'; /* The quote used to open a quote string */
int pos = 0;
@@ -83,7 +82,7 @@ static int parse_message (const char *str, Client *c)
arg_space = malloc(strlen(str)+1);
if (arg_space == NULL) {
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;
@@ -163,9 +162,7 @@ static int parse_message (const char *str, Client *c)
error = 1;
if (error) {
report( RPT_WARNING, "Could not parse command from client on socket %d: %.40s", c->sock, str );
snprintf (errmsg, sizeof(errmsg), "huh? Could not parse command\n");
sock_send_string (c->sock, errmsg);
sock_send_error(c->sock, "Could not parse command\n");
free( arg_space );
return 0;
}
@@ -183,14 +180,12 @@ static int parse_message (const char *str, Client *c)
if (function != NULL) {
error = function (c, argc, argv);
if (error) {
snprintf (errmsg, sizeof(errmsg), "huh? Function returned error \"%.40s\"\n", argv[0]);
sock_send_string (c->sock, errmsg);
sock_printf_error(c->sock, "Function returned error \"%.40s\"\n", argv[0]);
report( RPT_WARNING, "Command function returned an error after command from client on socket %d: %.40s", c->sock, str );
}
}
else {
snprintf (errmsg, sizeof(errmsg), "huh? Invalid command \"%.40s\"\n", argv[0]);
sock_send_string (c->sock, errmsg);
sock_printf_error(c->sock, "Invalid command \"%.40s\"\n", argv[0]);
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;
} else if (nbytes > (MAXMSG - (MAXMSG / 8))) /* Very noisy client...*/
{
sock_send_string(clientSocketMap->socket, "huh? Too much data received... quiet down!\n");
report(RPT_WARNING, "%s: Too much data received on socket %d",
__FUNCTION__, clientSocketMap->socket);
sock_send_error(clientSocketMap->socket, "Too much data received... quiet down!\n");
return -1;
} else /* Data Read*/
{
+44
View File
@@ -292,3 +292,47 @@ sock_geterror(void)
#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 */
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...