--- deliantra/server/socket/request.C 2006/12/14 01:21:58 1.33 +++ deliantra/server/socket/request.C 2006/12/15 04:21:29 1.40 @@ -43,9 +43,6 @@ * mapcellchanged, compactlayer, compactstack, perform the map compressing * operations * - * esrv_map_doneredraw finishes the map update, and ships across the - * map updates. - * */ #include @@ -65,13 +62,8 @@ #include #include -#ifdef HAVE_UNISTD_H -# include -#endif - -#ifdef HAVE_SYS_TIME_H -# include -#endif +#include +#include #include "sounds.h" @@ -98,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; @@ -158,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)); @@ -173,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 */ @@ -226,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) { @@ -254,8 +290,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) @@ -316,12 +352,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]; @@ -541,7 +577,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; @@ -549,23 +585,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]; @@ -626,7 +653,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]; @@ -687,7 +714,7 @@ * client. */ static void -SendSmooth (NewSocket * ns, uint16 face) +SendSmooth (client_socket * ns, uint16 face) { uint16 smoothface; @@ -713,7 +740,7 @@ << uint16 (face) << uint16 (smoothface); - Send_With_Handling (ns, &sl); + ns->send_packet (sl); } /** @@ -721,7 +748,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; @@ -788,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]; @@ -800,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) @@ -811,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) @@ -846,7 +862,7 @@ packet sl; sl << "comc " << uint16 (pktlen) << uint32 (time); - Send_With_Handling (&pl->socket, &sl); + pl->socket->send_packet (sl); } @@ -923,7 +939,7 @@ * problem. */ void -VersionCmd (char *buf, int len, NewSocket * ns) +VersionCmd (char *buf, int len, client_socket * ns) { char *cp; char version_warning[256]; @@ -981,7 +997,7 @@ /** sound related functions. */ void -SetSound (char *buf, int len, NewSocket * ns) +SetSound (char *buf, int len, client_socket * ns) { ns->sound = atoi (buf); } @@ -1001,7 +1017,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 } @@ -1049,7 +1065,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]; @@ -1114,7 +1130,7 @@ AddIfShort (pl->last_stats.Cha, pl->ob->stats.Cha, CS_STAT_CHA); } - if (pl->socket.exp64) + if (pl->socket->exp64) { uint8 s; @@ -1134,7 +1150,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) } @@ -1157,7 +1173,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 { @@ -1173,7 +1189,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); @@ -1181,19 +1197,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.len > 6) - { -#ifdef ESRV_DEBUG - LOG (llevDebug, "Sending stats command, %d bytes long.\n", sl.len); -#endif - Send_With_Handling (&pl->socket, &sl); - } - + if (sl.length () > 6) + pl->socket->send_packet (sl); } /** @@ -1212,7 +1222,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); } @@ -1224,7 +1234,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; @@ -1254,7 +1264,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; } @@ -1271,7 +1281,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) { @@ -1301,7 +1311,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; @@ -1324,7 +1334,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; @@ -1394,38 +1404,6 @@ return cur; } -static void -esrv_map_doneredraw (NewSocket * ns, struct Map *newmap) -{ - static long frames, bytes, tbytes, tframes; - char *cur; - - packet sl; - sl << "map "; - - cur = (char *) compactlayer (ns, (unsigned char *) sl.buf + sl.len, MAP_LAYERS, newmap); - sl.len = cur - (char *) sl.buf; - -/* LOG(llevDebug, "Sending map command.\n");*/ - - if (sl.len > (int) strlen ("map ") || ns->sent_scroll) - { - /* All of this is just accounting stuff */ - if (tframes > 100) - tframes = tbytes = 0; - - tframes++; - frames++; - tbytes += sl.len; - bytes += sl.len; - memcpy (&ns->lastmap, newmap, sizeof (struct Map)); - Send_With_Handling (ns, &sl); - ns->sent_scroll = 0; - } - -} - - /** Clears a map cell */ static void map_clearcell (struct MapCell *cell, int face0, int face1, int face2, int count) @@ -1474,7 +1452,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; @@ -1518,7 +1496,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; @@ -1741,7 +1719,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; */ @@ -1785,7 +1763,7 @@ * available. */ int -getExtendedMapInfoSize (NewSocket * ns) +getExtendedMapInfoSize (client_socket * ns) { int result = 0; @@ -1831,7 +1809,7 @@ uint8 extendedinfos; maptile *m; - NewSocket &socket = pl->contr->socket; + client_socket &socket = *pl->contr->socket; check_map_change (pl->contr); @@ -1839,7 +1817,7 @@ packet esl; sl << (socket.mapmode == Map1Cmd ? "map1 " : "map1a "); - startlen = sl.len; + startlen = sl.length (); /*Extendedmapinfo structure initialisation */ if (socket.ext_mapinfos) @@ -1849,14 +1827,15 @@ if (socket.EMI_smooth) extendedinfos |= EMI_SMOOTH; - ewhatstart = esl.len; + ewhatstart = esl.length (); ewhatflag = extendedinfos; /*The EMI_NOREDRAW bit could need to be taken away */ eentrysize = getExtendedMapInfoSize (&socket); esl << "mapextended " << uint8 (extendedinfos) << uint8 (eentrysize); - estartlen = esl.len; + + estartlen = esl.length (); } else { @@ -1904,7 +1883,7 @@ { int i, got_one; - oldlen = sl.len; + oldlen = sl.length (); sl << uint16 (mask); @@ -1918,18 +1897,18 @@ * space. */ got_one = 0; - for (i = oldlen + 2; i < sl.len; i++) - if (sl.buf[i]) + for (i = oldlen + 2; i < sl.length (); 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 */ - sl.len = oldlen + 2; + sl.reset (oldlen + 2); else - sl.len = oldlen; + sl.reset (oldlen); } /*What concerns extendinfos, nothing to be done for now @@ -1969,7 +1948,7 @@ * reason. Still may need to send the head for this space. */ - oldlen = sl.len; + oldlen = sl.length (); sl << uint16 (mask); @@ -1999,9 +1978,9 @@ } if ((mask & 0xf) || need_send) - sl.buf[oldlen + 1] = mask & 0xff; + sl[oldlen + 1] = mask & 0xff; else - sl.len = oldlen; + sl.reset (oldlen); } else { @@ -2013,15 +1992,15 @@ * need to send is, then form the packet after that, * we presume that we will in fact form a packet, and update * the bits by what we do actually send. If we send nothing, - * we just back out sl.len to the old value, and no harm + * we just back out sl.length () to the old value, and no harm * is done. * I think this is simpler than doing a bunch of checks to see * what if anything we need to send, setting the bits, then * doing those checks again to add the real data. */ - oldlen = sl.len; + oldlen = sl.length (); mask = (ax & 0x3f) << 10 | (ay & 0x3f) << 4; - eoldlen = esl.len; + eoldlen = esl.length (); emask = (ax & 0x3f) << 10 | (ay & 0x3f) << 4; sl << uint16 (mask); @@ -2039,7 +2018,7 @@ if (socket.extmap) { *last_ext |= 0x80; - last_ext = sl.buf + sl.len; + last_ext = &sl[sl.length ()]; sl << uint8 (d); } else @@ -2083,14 +2062,14 @@ mask |= 0x8; *last_ext |= 0x80; - last_ext = sl.buf + sl.len; + last_ext = &sl[sl.length ()]; sl << uint8 (5) << uint8 (stat_hp); if (stat_width > 1) { *last_ext |= 0x80; - last_ext = sl.buf + sl.len; + last_ext = &sl[sl.length ()]; sl << uint8 (6) << uint8 (stat_width); } @@ -2102,7 +2081,7 @@ mask |= 0x8; *last_ext |= 0x80; - last_ext = sl.buf + sl.len; + last_ext = &sl[sl.length ()]; sl << uint8 (0x47) << uint8 (8) << (uint64)player; } @@ -2113,7 +2092,7 @@ mask |= 0x8; *last_ext |= 0x80; - last_ext = sl.buf + sl.len; + last_ext = &sl[sl.length ()]; sl << uint8 (8) << uint8 (flags); } @@ -2165,14 +2144,14 @@ * value, so we don't send those bits. */ if (mask & 0xf) - sl.buf[oldlen + 1] = mask & 0xff; + sl[oldlen + 1] = mask & 0xff; else - sl.len = oldlen; + sl.reset (oldlen); if (emask & 0xf) - esl.buf[eoldlen + 1] = emask & 0xff; + esl[eoldlen + 1] = emask & 0xff; else - esl.len = eoldlen; + esl.reset (eoldlen); } /* else this is a viewable space */ } /* for x loop */ } /* for y loop */ @@ -2180,22 +2159,22 @@ /* Verify that we in fact do need to send this */ if (socket.ext_mapinfos) { - if (!(sl.len > startlen || socket.sent_scroll)) + if (!(sl.length () > startlen || socket.sent_scroll)) { /* No map data will follow, so don't say the client * it doesn't need draw! */ ewhatflag &= (~EMI_NOREDRAW); - esl.buf[ewhatstart + 1] = ewhatflag & 0xff; + esl[ewhatstart + 1] = ewhatflag & 0xff; } - if (esl.len > estartlen) - Send_With_Handling (&socket, &esl); + if (esl.length () > estartlen) + socket.send_packet (esl); } - if (sl.len > startlen || socket.sent_scroll) + if (sl.length () > startlen || socket.sent_scroll) { - Send_With_Handling (&socket, &sl); + socket.send_packet (sl); socket.sent_scroll = 0; } } @@ -2231,9 +2210,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; @@ -2258,73 +2237,8 @@ pl->contr->do_los = 0; } - if (pl->contr->socket.mapmode == Map1Cmd || pl->contr->socket.mapmode == Map1aCmd) - { - /* Big maps need a different drawing mechanism to work */ - draw_client_map1 (pl); - return; - } - - if (pl->invisible & (pl->invisible < 50 ? 4 : 1)) - { - esrv_map_setbelow (&pl->contr->socket, pl->contr->socket.mapx / 2, pl->contr->socket.mapy / 2, pl->face->number, &newmap); - } - - /* j and i are the y and x coordinates of the real map (which is - * basically some number of spaces around the player) - * ax and ay are values from within the viewport (ie, 0, 0 is upper - * left corner) and are thus disconnected from the map values. - * Subtract 1 from the max values so that we properly handle cases where - * player has specified an even map. Otherwise, we try to send them too - * much, ie, if mapx is 10, we would try to send from -5 to 5, which is actually - * 11 spaces. Now, we would send from -5 to 4, which is properly. If mapx is - * odd, this still works fine. - */ - ay = 0; - for (j = pl->y - pl->contr->socket.mapy / 2; j <= pl->y + (pl->contr->socket.mapy - 1) / 2; j++, ay++) - { - ax = 0; - for (i = pl->x - pl->contr->socket.mapx / 2; i <= pl->x + (pl->contr->socket.mapx - 1) / 2; i++, ax++) - { - - d = pl->contr->blocked_los[ax][ay]; - /* note the out_of_map and d>3 checks are both within the same - * negation check. - */ - nx = i; - ny = j; - m = get_map_from_coord (pm, &nx, &ny); - if (m && d < 4) - { - face = GET_MAP_FACE (m, nx, ny, 0); - floor2 = GET_MAP_FACE (m, nx, ny, 1); - floor = GET_MAP_FACE (m, nx, ny, 2); - - /* If all is blank, send a blank face. */ - if ((!face || face == blank_face) && (!floor2 || floor2 == blank_face) && (!floor || floor == blank_face)) - { - esrv_map_setbelow (&pl->contr->socket, ax, ay, blank_face->number, &newmap); - } - else - { /* actually have something interesting */ - /* send the darkness mask, if any. */ - if (d && pl->contr->socket.darkness) - esrv_map_setbelow (&pl->contr->socket, ax, ay, dark_faces[d - 1]->number, &newmap); - - if (face && face != blank_face) - esrv_map_setbelow (&pl->contr->socket, ax, ay, face->number, &newmap); - if (floor2 && floor2 != blank_face) - esrv_map_setbelow (&pl->contr->socket, ax, ay, floor2->number, &newmap); - if (floor && floor != blank_face) - esrv_map_setbelow (&pl->contr->socket, ax, ay, floor->number, &newmap); - } - } /* Is a valid space */ - } - } - - esrv_map_doneredraw (&pl->contr->socket, &newmap); - - check_map_change (pl->contr); + /* Big maps need a different drawing mechanism to work */ + draw_client_map1 (pl); } @@ -2340,7 +2254,7 @@ void send_plugin_custom_message (object *pl, char *buf) { - pl->contr->socket.send_packet (buf); + pl->contr->socket->send_packet (buf); } /** @@ -2348,7 +2262,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"; @@ -2356,13 +2270,13 @@ for (int i = 1; i < NUM_SKILLS; i++) sl.printf ("%d:%s\n", i + CS_STAT_SKILLINFO, &skill_names[i]); - if (sl.len >= MAXSOCKBUF) + if (sl.length () >= MAXSOCKBUF) { LOG (llevError, "Buffer overflow in send_skill_info!\n"); fatal (0); } - Send_With_Handling (ns, &sl); + ns->send_packet (sl); } /** @@ -2370,7 +2284,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; @@ -2379,13 +2293,13 @@ for (int i = 0; i < NRSPELLPATHS; i++) sl.printf ("%d:%s\n", 1 << i, spellpathnames[i]); - if (sl.len >= MAXSOCKBUF) + if (sl.length () >= MAXSOCKBUF) { LOG (llevError, "Buffer overflow in send_spell_paths!\n"); fatal (0); } - Send_With_Handling (ns, &sl); + ns->send_packet (sl); } /** @@ -2395,7 +2309,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) @@ -2435,7 +2349,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); } } } @@ -2444,7 +2358,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) @@ -2458,7 +2372,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. */ @@ -2516,7 +2430,7 @@ return; } - if (!pl->socket.monitor_spells) + if (!pl->socket->monitor_spells) return; packet sl; @@ -2543,11 +2457,12 @@ if (spell->type != SPELL) continue; - if (sl.len >= (MAXSOCKBUF - (26 + strlen (spell->name) + (spell->msg ? strlen (spell->msg) : 0)))) + if (sl.length () >= (MAXSOCKBUF - (26 + strlen (spell->name) + (spell->msg ? strlen (spell->msg) : 0)))) { - Send_With_Handling (&pl->socket, &sl); - strcpy ((char *) sl.buf, "addspell "); - sl.len = strlen ((char *) sl.buf); + pl->socket->send_packet (sl); + + sl.reset (); + sl << "addspell "; } append_spell (pl, sl, spell); @@ -2568,7 +2483,6 @@ } /* finally, we can send the packet */ - Send_With_Handling (&pl->socket, &sl); - + pl->socket->send_packet (sl); }