--- deliantra/server/socket/request.C 2006/12/14 22:45:41 1.38 +++ deliantra/server/socket/request.C 2006/12/15 04:21:29 1.40 @@ -218,6 +218,50 @@ socket.current_y = ob->y; } +/** + * RequestInfo is sort of a meta command. There is some specific + * request of information, but we call other functions to provide + * that information. + */ +void +RequestInfo (char *buf, int len, client_socket * ns) +{ + char *params = NULL, *cp; + + /* No match */ + char bigbuf[MAX_BUF]; + int slen; + + /* Set up replyinfo before we modify any of the buffers - this is used + * if we don't find a match. + */ + strcpy (bigbuf, "replyinfo "); + slen = strlen (bigbuf); + safe_strcat (bigbuf, buf, &slen, MAX_BUF); + + /* find the first space, make it null, and update the + * params pointer. + */ + for (cp = buf; *cp != '\0'; cp++) + if (*cp == ' ') + { + *cp = '\0'; + params = cp + 1; + break; + } + + if (!strcmp (buf, "image_info")) + send_image_info (ns, params); + else if (!strcmp (buf, "image_sums")) + send_image_sums (ns, params); + else if (!strcmp (buf, "skill_info")) + send_skill_info (ns, params); + else if (!strcmp (buf, "spell_paths")) + send_spell_paths (ns, params); + else + ns->send_packet (bigbuf, len); +} + void ExtCmd (char *buf, int len, player *pl) { @@ -771,7 +815,7 @@ * can throttle. */ void -NewPlayerCmd (uint8 * buf, int len, player *pl) +NewPlayerCmd (char *buf, int len, player *pl) { int time, repeat; char command[MAX_BUF]; @@ -783,8 +827,8 @@ return; } - pktlen = net_uint16 (buf); - repeat = net_uint32 (buf + 2); + pktlen = net_uint16 ((uint8 *)buf); + repeat = net_uint32 ((uint8 *)buf + 2); /* -1 is special - no repeat, but don't update */ if (repeat != -1) @@ -794,18 +838,7 @@ len = MAX_BUF - 5; strncpy ((char *) command, (char *) buf + 6, len - 4); - command[len - 4] = '\0'; - - /* The following should never happen with a proper or honest client. - * Therefore, the error message doesn't have to be too clear - if - * someone is playing with a hacked/non working client, this gives them - * an idea of the problem, but they deserve what they get - */ - if (pl->state != ST_PLAYING) - { - new_draw_info_format (NDI_UNIQUE, 0, pl->ob, "You can not issue commands - state is not ST_PLAYING (%s)", buf); - return; - } + command[len - 4] = 0; /* This should not happen anymore. */ if (pl->ob->speed_left < -1.0)