--- deliantra/server/socket/request.C 2006/12/14 01:59:10 1.34 +++ deliantra/server/socket/request.C 2006/12/15 03:53:44 1.39 @@ -62,13 +62,8 @@ #include #include -#ifdef HAVE_UNISTD_H -# include -#endif - -#ifdef HAVE_SYS_TIME_H -# include -#endif +#include +#include #include "sounds.h" @@ -95,7 +90,7 @@ }; static void -socket_map_scroll (NewSocket * ns, int dx, int dy) +socket_map_scroll (client_socket * ns, int dx, int dy) { struct Map newmap; int x, y, mx, my; @@ -155,7 +150,7 @@ static void clear_map (player *pl) { - NewSocket & socket = pl->socket; + client_socket &socket = *pl->socket; memset (&socket.lastmap, 0, sizeof (socket.lastmap)); @@ -170,7 +165,7 @@ static void check_map_change (player *pl) { - NewSocket & socket = pl->socket; + client_socket &socket = *pl->socket; object *ob = pl->ob; char buf[MAX_BUF]; /* eauugggh */ @@ -251,8 +246,8 @@ // initial map and its origin maptile *map = pl->ob->map; sint16 dx, dy; - int mapx = pl->socket.mapx / 2 - pl->ob->x; - int mapy = pl->socket.mapy / 2 - pl->ob->y; + int mapx = pl->socket->mapx / 2 - pl->ob->x; + int mapy = pl->socket->mapy / 2 - pl->ob->y; int max_distance = 8; // limit maximum path length to something generous while (*buf && map && max_distance) @@ -313,12 +308,12 @@ else snprintf (bigbuf, MAX_BUF, "mapinfo %s unsupported", token); - pl->socket.send_packet (bigbuf); + pl->socket->send_packet (bigbuf); } /** This is the Setup cmd - easy first implementation */ void -SetUp (char *buf, int len, NewSocket * ns) +SetUp (char *buf, int len, client_socket * ns) { int s, slen; char *cmd, *param, cmdback[HUGE_BUF]; @@ -538,7 +533,7 @@ * it either has to be here or init_sockets needs to be exported. */ void -AddMeCmd (char *buf, int len, NewSocket * ns) +AddMeCmd (char *buf, int len, client_socket * ns) { Settings oldsettings; @@ -546,23 +541,14 @@ if (ns->status != Ns_Add || add_player (ns)) ns->send_packet ("addme_failed"); else - { - /* Basically, the add_player copies the socket structure into - * the player structure, so this one (which is from init_sockets) - * is not needed anymore. The write below should still work, as the - * stuff in ns is still relevant. - */ - ns->send_packet ("addme_success"); - socket_info.nconns--; - ns->status = Ns_Avail; - } + ns->send_packet ("addme_success"); settings = oldsettings; } /** Reply to ExtendedInfos command */ void -ToggleExtendedInfos (char *buf, int len, NewSocket * ns) +ToggleExtendedInfos (char *buf, int len, client_socket * ns) { char cmdback[MAX_BUF]; char command[50]; @@ -623,7 +609,7 @@ /** Reply to ExtendedInfos command */ void -ToggleExtendedText (char *buf, int len, NewSocket * ns) +ToggleExtendedText (char *buf, int len, client_socket * ns) { char cmdback[MAX_BUF]; char temp[10]; @@ -684,7 +670,7 @@ * client. */ static void -SendSmooth (NewSocket * ns, uint16 face) +SendSmooth (client_socket * ns, uint16 face) { uint16 smoothface; @@ -710,7 +696,7 @@ << uint16 (face) << uint16 (smoothface); - Send_With_Handling (ns, &sl); + ns->send_packet (sl); } /** @@ -718,7 +704,7 @@ * to smooth a picture number given as argument. */ void -AskSmooth (char *buf, int len, NewSocket * ns) +AskSmooth (char *buf, int len, client_socket * ns) { uint16 facenbr; @@ -785,7 +771,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]; @@ -797,8 +783,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) @@ -808,18 +794,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) @@ -843,7 +818,7 @@ packet sl; sl << "comc " << uint16 (pktlen) << uint32 (time); - Send_With_Handling (&pl->socket, &sl); + pl->socket->send_packet (sl); } @@ -920,7 +895,7 @@ * problem. */ void -VersionCmd (char *buf, int len, NewSocket * ns) +VersionCmd (char *buf, int len, client_socket * ns) { char *cp; char version_warning[256]; @@ -978,7 +953,7 @@ /** sound related functions. */ void -SetSound (char *buf, int len, NewSocket * ns) +SetSound (char *buf, int len, client_socket * ns) { ns->sound = atoi (buf); } @@ -998,7 +973,7 @@ /* Okay, this is MAJOR UGLY. but the only way I know how to * clear the "cache" */ - memset (&pl->socket.lastmap, 0, sizeof (struct Map)); + memset (&pl->socket->lastmap, 0, sizeof (struct Map)); draw_client_map (pl->ob); #endif } @@ -1046,7 +1021,7 @@ * it needs to send something back (vs just printing out a message) */ void -send_query (NewSocket * ns, uint8 flags, char *text) +send_query (client_socket * ns, uint8 flags, char *text) { char buf[MAX_BUF]; @@ -1111,7 +1086,7 @@ AddIfShort (pl->last_stats.Cha, pl->ob->stats.Cha, CS_STAT_CHA); } - if (pl->socket.exp64) + if (pl->socket->exp64) { uint8 s; @@ -1131,7 +1106,7 @@ } } - if (pl->socket.exp64) + if (pl->socket->exp64) { AddIfInt64 (pl->last_stats.exp, pl->ob->stats.exp, CS_STAT_EXP64) } else { AddIfInt (pl->last_stats.exp, (int) pl->ob->stats.exp, CS_STAT_EXP) } @@ -1154,7 +1129,7 @@ AddIfShort (pl->last_flags, flags, CS_STAT_FLAGS); - if (pl->socket.sc_version < 1025) + if (pl->socket->sc_version < 1025) { AddIfShort (pl->last_resist[ATNR_PHYSICAL], pl->ob->resist[ATNR_PHYSICAL], CS_STAT_ARMOUR) } else { @@ -1170,7 +1145,7 @@ } } - if (pl->socket.monitor_spells) + if (pl->socket->monitor_spells) { AddIfInt (pl->last_path_attuned, pl->ob->path_attuned, CS_STAT_SPELL_ATTUNE); AddIfInt (pl->last_path_repelled, pl->ob->path_repelled, CS_STAT_SPELL_REPEL); @@ -1178,13 +1153,13 @@ } rangetostring (pl->ob, buf); /* we want use the new fire & run system in new client */ - AddIfString (pl->socket.stats.range, buf, CS_STAT_RANGE); + AddIfString (pl->socket->stats.range, buf, CS_STAT_RANGE); set_title (pl->ob, buf); - AddIfString (pl->socket.stats.title, buf, CS_STAT_TITLE); + AddIfString (pl->socket->stats.title, buf, CS_STAT_TITLE); /* Only send it away if we have some actual data */ if (sl.length () > 6) - Send_With_Handling (&pl->socket, &sl); + pl->socket->send_packet (sl); } /** @@ -1203,7 +1178,7 @@ << uint32 (pl->ob->face->number) << data8 (pl->ob->name); - Send_With_Handling (&pl->socket, &sl); + pl->socket->send_packet (sl); SET_FLAG (pl->ob, FLAG_CLIENT_SENT); } @@ -1215,7 +1190,7 @@ * when the player logs in and picks stuff up. */ void -esrv_send_animation (NewSocket * ns, short anim_num) +esrv_send_animation (client_socket * ns, short anim_num) { int i; @@ -1245,7 +1220,7 @@ sl << uint16 (animations[anim_num].faces[i]); /* flags - not used right now */ } - Send_With_Handling (ns, &sl); + ns->send_packet (sl); ns->anims_sent[anim_num] = 1; } @@ -1262,7 +1237,7 @@ * the face yet, we will also send it. */ static void -esrv_map_setbelow (NewSocket * ns, int x, int y, short face_num, struct Map *newmap) +esrv_map_setbelow (client_socket * ns, int x, int y, short face_num, struct Map *newmap) { if (newmap->cells[x][y].count >= MAP_LAYERS) { @@ -1292,7 +1267,7 @@ /** Checkes if map cells have changed */ static int -mapcellchanged (NewSocket * ns, int i, int j, struct Map *newmap) +mapcellchanged (client_socket * ns, int i, int j, struct Map *newmap) { int k; @@ -1315,7 +1290,7 @@ * how many layers of data we should back. */ static uint8 * -compactlayer (NewSocket * ns, unsigned char *cur, int numlayers, struct Map *newmap) +compactlayer (client_socket * ns, unsigned char *cur, int numlayers, struct Map *newmap) { int x, y, k; int face; @@ -1433,7 +1408,7 @@ * sent, it returns zero. */ static int -check_head (packet &sl, NewSocket &ns, int ax, int ay, int layer) +check_head (packet &sl, client_socket &ns, int ax, int ay, int layer) { short face_num; @@ -1477,7 +1452,7 @@ */ static int -update_space (packet &sl, NewSocket &ns, maptile *mp, int mx, int my, int sx, int sy, int layer) +update_space (packet &sl, client_socket &ns, maptile *mp, int mx, int my, int sx, int sy, int layer) { object *ob, *head; uint16 face_num; @@ -1700,7 +1675,7 @@ */ static inline int -update_smooth (packet &sl, NewSocket &ns, maptile *mp, int mx, int my, int sx, int sy, int layer) +update_smooth (packet &sl, client_socket &ns, maptile *mp, int mx, int my, int sx, int sy, int layer) { object *ob; int smoothlevel; /* old face_num; */ @@ -1744,7 +1719,7 @@ * available. */ int -getExtendedMapInfoSize (NewSocket * ns) +getExtendedMapInfoSize (client_socket * ns) { int result = 0; @@ -1790,7 +1765,7 @@ uint8 extendedinfos; maptile *m; - NewSocket &socket = pl->contr->socket; + client_socket &socket = *pl->contr->socket; check_map_change (pl->contr); @@ -1879,11 +1854,11 @@ */ got_one = 0; for (i = oldlen + 2; i < sl.length (); i++) - if (sl.buf[i]) + if (sl[i]) got_one = 1; if (got_one && (mask & 0xf)) - sl.buf[oldlen + 1] = mask & 0xff; + sl[oldlen + 1] = mask & 0xff; else { /*either all faces blank, either no face at all */ if (mask & 0xf) /*at least 1 face, we know it's blank, only send coordinates */ @@ -1959,7 +1934,7 @@ } if ((mask & 0xf) || need_send) - sl.buf[oldlen + 1] = mask & 0xff; + sl[oldlen + 1] = mask & 0xff; else sl.reset (oldlen); } @@ -1999,7 +1974,7 @@ if (socket.extmap) { *last_ext |= 0x80; - last_ext = sl.buf + sl.length (); + last_ext = &sl[sl.length ()]; sl << uint8 (d); } else @@ -2043,14 +2018,14 @@ mask |= 0x8; *last_ext |= 0x80; - last_ext = sl.buf + sl.length (); + last_ext = &sl[sl.length ()]; sl << uint8 (5) << uint8 (stat_hp); if (stat_width > 1) { *last_ext |= 0x80; - last_ext = sl.buf + sl.length (); + last_ext = &sl[sl.length ()]; sl << uint8 (6) << uint8 (stat_width); } @@ -2062,7 +2037,7 @@ mask |= 0x8; *last_ext |= 0x80; - last_ext = sl.buf + sl.length (); + last_ext = &sl[sl.length ()]; sl << uint8 (0x47) << uint8 (8) << (uint64)player; } @@ -2073,7 +2048,7 @@ mask |= 0x8; *last_ext |= 0x80; - last_ext = sl.buf + sl.length (); + last_ext = &sl[sl.length ()]; sl << uint8 (8) << uint8 (flags); } @@ -2125,12 +2100,12 @@ * value, so we don't send those bits. */ if (mask & 0xf) - sl.buf[oldlen + 1] = mask & 0xff; + sl[oldlen + 1] = mask & 0xff; else sl.reset (oldlen); if (emask & 0xf) - esl.buf[eoldlen + 1] = emask & 0xff; + esl[eoldlen + 1] = emask & 0xff; else esl.reset (eoldlen); } /* else this is a viewable space */ @@ -2146,16 +2121,16 @@ * it doesn't need draw! */ ewhatflag &= (~EMI_NOREDRAW); - esl.buf[ewhatstart + 1] = ewhatflag & 0xff; + esl[ewhatstart + 1] = ewhatflag & 0xff; } if (esl.length () > estartlen) - Send_With_Handling (&socket, &esl); + socket.send_packet (esl); } if (sl.length () > startlen || socket.sent_scroll) { - Send_With_Handling (&socket, &sl); + socket.send_packet (sl); socket.sent_scroll = 0; } } @@ -2191,9 +2166,9 @@ memset (&newmap, 0, sizeof (struct Map)); - for (j = (pl->y - pl->contr->socket.mapy / 2); j < (pl->y + (pl->contr->socket.mapy + 1) / 2); j++) + for (j = (pl->y - pl->contr->socket->mapy / 2); j < (pl->y + (pl->contr->socket->mapy + 1) / 2); j++) { - for (i = (pl->x - pl->contr->socket.mapx / 2); i < (pl->x + (pl->contr->socket.mapx + 1) / 2); i++) + for (i = (pl->x - pl->contr->socket->mapx / 2); i < (pl->x + (pl->contr->socket->mapx + 1) / 2); i++) { ax = i; ay = j; @@ -2235,7 +2210,7 @@ void send_plugin_custom_message (object *pl, char *buf) { - pl->contr->socket.send_packet (buf); + pl->contr->socket->send_packet (buf); } /** @@ -2243,7 +2218,7 @@ * the params - we always send the same info no matter what. */ void -send_skill_info (NewSocket *ns, char *params) +send_skill_info (client_socket *ns, char *params) { packet sl; sl << "replyinfo skill_info\n"; @@ -2257,7 +2232,7 @@ fatal (0); } - Send_With_Handling (ns, &sl); + ns->send_packet (sl); } /** @@ -2265,7 +2240,7 @@ * the params - we always send the same info no matter what. */ void -send_spell_paths (NewSocket * ns, char *params) +send_spell_paths (client_socket * ns, char *params) { packet sl; @@ -2280,7 +2255,7 @@ fatal (0); } - Send_With_Handling (ns, &sl); + ns->send_packet (sl); } /** @@ -2290,7 +2265,7 @@ void esrv_update_spells (player *pl) { - if (!pl->socket.monitor_spells) + if (!pl->socket->monitor_spells) return; for (object *spell = pl->ob->inv; spell; spell = spell->below) @@ -2330,7 +2305,7 @@ if (flags & UPD_SP_GRACE ) sl << uint16 (spell->last_grace); if (flags & UPD_SP_DAMAGE) sl << uint16 (spell->last_eat); - Send_With_Handling (&pl->socket, &sl); + pl->socket->send_packet (sl); } } } @@ -2339,7 +2314,7 @@ void esrv_remove_spell (player *pl, object *spell) { - if (!pl->socket.monitor_spells) + if (!pl->socket->monitor_spells) return; if (!pl || !spell || spell->env != pl->ob) @@ -2353,7 +2328,7 @@ sl << "delspell " << uint32 (spell->count); - Send_With_Handling (&pl->socket, &sl); + pl->socket->send_packet (sl); } /* appends the spell *spell to the Socklist we will send the data to. */ @@ -2411,7 +2386,7 @@ return; } - if (!pl->socket.monitor_spells) + if (!pl->socket->monitor_spells) return; packet sl; @@ -2440,7 +2415,7 @@ if (sl.length () >= (MAXSOCKBUF - (26 + strlen (spell->name) + (spell->msg ? strlen (spell->msg) : 0)))) { - Send_With_Handling (&pl->socket, &sl); + pl->socket->send_packet (sl); sl.reset (); sl << "addspell "; @@ -2464,7 +2439,6 @@ } /* finally, we can send the packet */ - Send_With_Handling (&pl->socket, &sl); - + pl->socket->send_packet (sl); }