diff --git a/source/src/client.cpp b/source/src/client.cpp index 05fb12df..9219b208 100644 --- a/source/src/client.cpp +++ b/source/src/client.cpp @@ -236,7 +236,7 @@ void _toserver(char *text, int msg, int msgt) bool toteam = text && text[0] == '%' && (m_teammode || team_isspect(player1->team)); if(!toteam && text[0] == '%' && strlen(text) > 1) text++; // convert team-text to normal-text if no team-mode is active if(toteam) text++; - filtertext(text, text); + filtertext(text, text, FTXT__CHAT); trimtrailingwhitespace(text); if(servstate.mastermode == MM_MATCH && servstate.matchteamsize && !team_isactive(player1->team) && !(player1->team == TEAM_SPECT && player1->clientrole == CR_ADMIN)) toteam = true; // spect chat if(*text) @@ -320,7 +320,7 @@ void pm(char *text) if(*numend) numend++;*/ // :FIXME - filtertext(text, text); + filtertext(text, text, FTXT__CHAT); trimtrailingwhitespace(text); addmsg(SV_TEXTPRIVATE, "ris", cn, text); diff --git a/source/src/clientgame.cpp b/source/src/clientgame.cpp index d4253452..d04c0938 100644 --- a/source/src/clientgame.cpp +++ b/source/src/clientgame.cpp @@ -161,7 +161,7 @@ void newname(const char *name) if(name[0]) { string tmpname; - filtertext(tmpname, name, 0, MAXNAMELEN); + filtertext(tmpname, name, FTXT__PLAYERNAME, MAXNAMELEN); if(identexists("onNameChange")) { defformatstring(onnamechange)("onNameChange %d \"%s\"", player1->clientnum, tmpname); diff --git a/source/src/clients2c.cpp b/source/src/clients2c.cpp index ea71fd88..62180db1 100644 --- a/source/src/clients2c.cpp +++ b/source/src/clients2c.cpp @@ -480,7 +480,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p, bool demo = false) { int cn = getint(p); getstring(text, p); - filtertext(text, text); + filtertext(text, text, FTXT__CHAT); playerent *d = getclient(cn); if(!d) break; if(d->ignored) clientlogf("ignored: %s%s %s", colorname(d), type == SV_TEAMTEXT ? ":" : "", text); @@ -503,7 +503,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p, bool demo = false) else if(d) { getstring(text, p); - filtertext(text, text); + filtertext(text, text, FTXT__CHAT); if(d->ignored && d->clientrole != CR_ADMIN) clientlogf("ignored: %s%s %s", colorname(d), type == SV_TEXT ? ":" : "", text); else conoutf(type == SV_TEXTME ? "\f0%s %s" : "%s:\f0 %s", colorname(d), highlight(text)); } @@ -514,7 +514,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p, bool demo = false) { int cn = getint(p); getstring(text, p); - filtertext(text, text); + filtertext(text, text, FTXT__CHAT); playerent *d = getclient(cn); if(!d) break; if(d->ignored) clientlogf("ignored: pm %s %s", colorname(d), text); @@ -560,7 +560,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p, bool demo = false) case SV_SWITCHNAME: getstring(text, p); - filtertext(text, text, 0, MAXNAMELEN); + filtertext(text, text, FTXT__PLAYERNAME, MAXNAMELEN); if(!text[0]) copystring(text, "unarmed"); if(d) { @@ -601,7 +601,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p, bool demo = false) break; } getstring(text, p); - filtertext(text, text, 0, MAXNAMELEN); + filtertext(text, text, FTXT__PLAYERNAME, MAXNAMELEN); if(!text[0]) copystring(text, "unarmed"); if(d->name[0]) // already connected { @@ -912,7 +912,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p, bool demo = false) discscore &ds = discscores.add(); ds.team = team; getstring(text, p); - filtertext(ds.name, text, 0, MAXNAMELEN); + filtertext(ds.name, text, FTXT__PLAYERNAME, MAXNAMELEN); ds.flags = getint(p); ds.frags = getint(p); ds.deaths = getint(p); @@ -1235,7 +1235,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p, bool demo = false) { case SA_MAP: getstring(text, p); - filtertext(text, text); + filtertext(text, text, FTXT__MAPNAME); itoa(a1, getint(p)); defformatstring(t)("%d", getint(p)); v = newvotedisplayinfo(d, type, text, a1, t); @@ -1245,13 +1245,13 @@ void parsemessages(int cn, playerent *d, ucharbuf &p, bool demo = false) { itoa(a1, getint(p)); getstring(text, p); - filtertext(text, text); + filtertext(text, text, FTXT__CHAT); v = newvotedisplayinfo(d, type, a1, text); break; } case SA_SERVERDESC: getstring(text, p); - filtertext(text, text); + filtertext(text, text, FTXT__SERVDESC); v = newvotedisplayinfo(d, type, text, NULL); break; case SA_STOPDEMO: diff --git a/source/src/console.cpp b/source/src/console.cpp index 520a1d7a..62d4adb3 100644 --- a/source/src/console.cpp +++ b/source/src/console.cpp @@ -97,7 +97,7 @@ void renderconsole() { con.render(); } void clientlogf(const char *s, ...) { defvformatstring(sp, s, s); - filtertext(sp, sp, 2); + filtertext(sp, sp, FTXT__LOG); extern struct servercommandline scl; const char *ts = scl.logtimestamp ? timestring(true, "%b %d %H:%M:%S ") : ""; char *p, *l = sp; @@ -345,7 +345,7 @@ void mapmsg(char *s) { string text; filterrichtext(text, s); - filterservdesc(text, text); + filtertext(text, text, FTXT__MAPMSG); copystring(hdr.maptitle, text, 128); if(editmode) unsavededits++; } diff --git a/source/src/log.cpp b/source/src/log.cpp index 14e0f217..fd9050b8 100644 --- a/source/src/log.cpp +++ b/source/src/log.cpp @@ -81,7 +81,7 @@ bool logline(int level, const char *msg, ...) if(!enabled) return false; if(level < 0 || level >= ACLOG_NUM) return false; defvformatstring(sf, msg, msg); - filtertext(sf, sf, 2); + filtertext(sf, sf, FTXT__LOG); const char *ts = timestamp ? timestring(true, "%b %d %H:%M:%S ") : "", *ld = levelprefix[level]; char *p, *l = sf; do diff --git a/source/src/menus.cpp b/source/src/menus.cpp index 2f8b7326..0f19ba9e 100644 --- a/source/src/menus.cpp +++ b/source/src/menus.cpp @@ -439,7 +439,7 @@ struct mitemmaploadmanual : mitemmanual string showt; string restt; restt[0] = '\0'; - filtertext(showt, maptitle, 1); + filtertext(showt, maptitle, FTXT__MAPMSG); if(mlil && mlil != 255) // 0 && 255 are 'off' { int tl = strlen(showt); diff --git a/source/src/protocol.cpp b/source/src/protocol.cpp index 210b1f53..629e9fbe 100644 --- a/source/src/protocol.cpp +++ b/source/src/protocol.cpp @@ -119,102 +119,99 @@ void getstring(char *text, ucharbuf &p, int len) DEBUGVAR(text); } -#define follower(x) (((x) & 0xc0) == 0x80) +// filter text according to rules +// dst can be identical to src; dst needs to be of size "min(len, strlen(s)) + 1" +// returns dst -int getutf8char(const uchar *&s) +char *filtertext(char *dst, const char *src, int flags, int len) { - int res = *s++; - if(res < 0x80) return res; - if((res & 0xe0) == 0xc0) - { // 2-Byte - if(follower(s[0])) - { - res &= 0x1f; - res <<= 6; - res |= *s++ & 0x3f; - return res; - } - return -1; + char *res = dst; + bool nowhite = flags & FTXT_NOWHITE, // removes all whitespace; adding ALLOWBLANKS, ALLOWNL or ALLOWTAB enables exceptions + allowblanks = flags & FTXT_ALLOWBLANKS, // only in combination with FTXT_NOWHITE + allownl = flags & FTXT_ALLOWNL, // only in combination with FTXT_NOWHITE + allowtab = flags & FTXT_ALLOWTAB, // only in combination with FTXT_NOWHITE + nocolor = flags & FTXT_NOCOLOR, // removes all '\f' + following char + tabtoblank = flags & FTXT_TABTOBLANK, // replaces \t with single blanks + fillblanks = flags & FTXT_FILLBLANKS, // convert ' ' to '_' + safecs = flags & FTXT_SAFECS, // removes all special chars that may execute commands when evaluate arguments; the argument still requires encapsulation by "" + leet = flags & FTXT_LEET, // translates leetspeak + toupp = flags & FTXT_TOUPPER, // translates to all-uppercase + tolow = flags & FTXT_TOLOWER, // translates to all-lowercase + filename = flags & FTXT_FILENAME, // removes characters, that are not allowed in filenames on all supported systems - does not filter COM, PRN, etc. + mapname = flags & FTXT_MAPNAME, // only allows lowercase chars, digits, '_', '-' and '.'; probably should be used in combination with TOLOWER + pass = false; +#if 1 // classic mode (will be removed, as soon as all sources are clear of it) + switch(flags) + { // whitespace: no whitespace at all (0), blanks only (1), blanks & newline (2) + case -1: nowhite = nocolor = fillblanks = true; break; + case 2: allownl = allowtab = true; + case 1: allowblanks = true; + case 0: nowhite = true; + nocolor = true; + break; } - if((res & 0xf0) == 0xe0) - { // 3-Byte - if(follower(s[0]) && follower(s[1])) - { - res &= 0x0f; - loopi(2) - { - res <<= 6; - res |= *s++ & 0x3f; - } - return res; - } - return -1; - } - if((res & 0xf8) == 0xf0) - { // 4-Byte - if(follower(s[0]) && follower(s[1]) && follower(s[2])) - { - res &= 0x07; - loopi(3) - { - res <<= 6; - res |= *s++ & 0x3f; - } - return res; - } - return -1; - } - return -1; -} - -int pututf8char(uchar *&d, int s) -{ - if(s < 0 || s > 0x1fffff) return 0; - if(s < 0x80) - { - *d++ = s; - return 1; - } - if(s < 0x800) - { - *d++ = ((s >> 6) & 0x1f) | 0xc0; - *d++ = (s & 0x3f) | 0x80; - return 2; - } - if(s < 0x10000) - { - *d++ = ((s >> 12) & 0x0f) | 0xe0; - *d++ = ((s >> 6) & 0x3f) | 0x80; - *d++ = (s & 0x3f) | 0x80; - return 3; - } - *d++ = ((s >> 18) & 0x07) | 0xf0; - *d++ = ((s >> 12) & 0x3f) | 0x80; - *d++ = ((s >> 6) & 0x3f) | 0x80; - *d++ = (s & 0x3f) | 0x80; - return 4; -} - -void filtertext(char *dst, const char *src, int whitespace, int len) -{ // whitespace: no whitespace at all (0), blanks only (1), blanks & newline (2), spaces for underlines (-1) +#endif + if(leet || mapname) nocolor = true; + bool trans = toupp || tolow || leet || filename || fillblanks; for(int c = *src; c; c = *++src) { - c &= 0x7F; // 7-bit ascii + c &= 0x7F; // 7-bit ascii. not negotiable. + pass = false; + if(trans) + { + if(leet) + { + const char *org = "1374@5$2!*#%80|+", + *asc = "letaassziohzhoit", + *a = strchr(org, c); + if(a) c = asc[a - org]; + } + if(filename) + { + const char *org = "*?![]{};:/\\", + *asc = "__o()()____", // 'o' -> ignore + *a = strchr(org, c); + if(a) + { + c = asc[a - org]; + if(c == 'o') continue; + } + } + if(tolow) c = tolower(c); + else if(toupp) c = toupper(c); + if(fillblanks && c == ' ') c = '_'; + } + if(safecs && strchr("($)\"", c)) continue; + if(c == '\t') + { + if(tabtoblank) c = ' '; + else if(allowtab) pass = true; + } if(c == '\f') { - if(!*++src) break; - continue; + if(nocolor) + { + if(src[1]) ++src; + continue; + } + pass = true; } - if(isspace(c) ? whitespace && (whitespace>1 || c == ' '): isprint(c)) + if(mapname && !islower(c) && !isdigit(c) && !strchr("_-.", c)) continue; + if(isspace(c)) { - if ( whitespace < 0 && c == ' ' ) c = '_'; - *dst++ = c; - if(!--len) break; + if(nowhite && !((c == ' ' && allowblanks) || (c == '\n' && allownl)) && !pass) continue; } + else if(!pass && !isprint(c)) continue; + *dst++ = c; + if(!--len || !*src) break; } *dst = '\0'; + return res; } +// translate certain escape sequences +// dst can be identical to src; dst needs to be of size "min(len, strlen(s)) + 1" + void filterrichtext(char *dst, const char *src, int len) { int b, c; @@ -239,7 +236,7 @@ void filterrichtext(char *dst, const char *src, int len) if(b == 0 && !isdigit(c)) break; ul = strtoul(src, (char **) &src, b); --src; - c = (int) ul; + c = (int) ul & 0x7f; if(!c) continue; // number conversion failed break; } @@ -250,26 +247,13 @@ void filterrichtext(char *dst, const char *src, int len) *dst = '\0'; } -void filterservdesc(char *dst, const char *src, int len) -{ // only colors and spaces allowed - for(int c = *src; c; c = *++src) - { - c &= 0x7F; // 7-bit ascii - if((!isspace(c) && isprint(c)) || c == ' ' || c == '\f') - { - *dst++ = c; - if(!--len) break; - } - } - *dst = '\0'; -} +// ensures, that d is either two lowercase chars or "" void filterlang(char *d, const char *s) { if(strlen(s) == 2) { - loopi(2) d[i] = tolower(s[i]); - d[2] = '\0'; + filtertext(d, s, FTXT_TOLOWER, 2); if(islower(d[0]) && islower(d[1])) return; } *d = '\0'; diff --git a/source/src/protocol.h b/source/src/protocol.h index 675a34a0..9b72e391 100644 --- a/source/src/protocol.h +++ b/source/src/protocol.h @@ -135,3 +135,33 @@ enum #define m_coop (gamemode==1) #define m_flags (m_ctf || m_htf || m_ktf) +// single filter modes +#define FTXT_NOWHITE (1<<8) +#define FTXT_ALLOWBLANKS (1<<9) +#define FTXT_ALLOWNL (1<<10) +#define FTXT_ALLOWTAB (1<<11) +#define FTXT_NOCOLOR (1<<12) +#define FTXT_TABTOBLANK (1<<13) +#define FTXT_FILLBLANKS (1<<14) +#define FTXT_SAFECS (1<<15) +#define FTXT_LEET (1<<16) +#define FTXT_TOUPPER (1<<17) +#define FTXT_TOLOWER (1<<18) +#define FTXT_FILENAME (1<<19) +#define FTXT_MAPNAME (1<<20) +// character classes +#define FTXT__SERVDESC (FTXT_NOWHITE | FTXT_ALLOWBLANKS | FTXT_TABTOBLANK) +#define FTXT__MAPMSG (FTXT_NOWHITE | FTXT_ALLOWBLANKS | FTXT_TABTOBLANK) +#define FTXT__MAPNAME (FTXT_NOCOLOR | FTXT_MAPNAME | FTXT_TOLOWER) // FTXT_FILENAME and FTXT_NOCOLOR not needed, since FTXT_MAPNAME is very strict; can not be used with paths +#define FTXT__PLAYERNAME (FTXT_NOWHITE | FTXT_NOCOLOR) +#define FTXT__SERVERINFO (FTXT_ALLOWTAB) +#define FTXT__MOTD (FTXT_TABTOBLANK) +#define FTXT__CHAT (FTXT_NOWHITE | FTXT_ALLOWBLANKS | FTXT_NOCOLOR | FTXT_TABTOBLANK) +#define FTXT__LOG (FTXT_NOCOLOR | FTXT_TABTOBLANK) +#define FTXT__LOGIDENT (FTXT_NOCOLOR | FTXT_NOWHITE | FTXT_FILENAME) +#define FTXT__PREFERENCES (FTXT_NOCOLOR | FTXT_NOWHITE | FTXT_FILENAME) +#define FTXT__AUTH (FTXT_NOCOLOR | FTXT_NOWHITE) +#define FTXT__KICKBANREASON (FTXT_NOWHITE | FTXT_ALLOWBLANKS | FTXT_NOCOLOR | FTXT_TABTOBLANK) +#define FTXT__FAVCATEGORY (FTXT_NOWHITE | FTXT_ALLOWBLANKS | FTXT_NOCOLOR) +#define FTXT__GLOBALNAME (FTXT_NOWHITE | FTXT_NOCOLOR | FTXT_FILLBLANKS) + diff --git a/source/src/protos.h b/source/src/protos.h index d7a26cbb..5b2dceb1 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -885,9 +885,8 @@ extern void sendstring(const char *t, ucharbuf &p); extern void sendstring(const char *t, packetbuf &p); extern void sendstring(const char *t, vector &p); extern void getstring(char *t, ucharbuf &p, int len = MAXTRANS); -extern void filtertext(char *dst, const char *src, int whitespace = 1, int len = sizeof(string)-1); +extern char *filtertext(char *dst, const char *src, int flags = 1, int len = sizeof(string)-1); extern void filterrichtext(char *dst, const char *src, int len = sizeof(string)-1); -extern void filterservdesc(char *dst, const char *src, int len = sizeof(string)-1); extern void filterlang(char *d, const char *s); extern void trimtrailingwhitespace(char *s); extern void cutcolorstring(char *text, int len); @@ -1069,7 +1068,7 @@ struct servercommandline case '2': t = servdesc_suf; a += 1 + strspn(a + 1, " "); break; } filterrichtext(t, a); - filterservdesc(t, t); + filtertext(t, t, FTXT__SERVDESC); break; } case 'P': concatstring(voteperm, a); break; diff --git a/source/src/scoreboard.cpp b/source/src/scoreboard.cpp index 6f0d51c6..e0cbd638 100644 --- a/source/src/scoreboard.cpp +++ b/source/src/scoreboard.cpp @@ -394,7 +394,7 @@ void renderscores(void *menu, bool init) // for now we'll just cut it off, same as the serverbrowser // but we might want to consider wrapping the bottom-line to accomodate longer descriptions - to a limit. string text; - filtertext(text, s->sdesc); + filtertext(text, s->sdesc, FTXT__SERVDESC); //for(char *p = text; (p = strchr(p, '\"')); *p++ = ' '); //text[30] = '\0'; // serverbrowser has less room - +8 chars here - 2010AUG03 - seems it was too much, falling back to 30 (for now): TODO get real width of menu as reference-width. FIXME: cutoff concatformatstring(serverline, "%s:%d %s", s->name, s->port, text); @@ -450,7 +450,7 @@ const char *asciiscores(bool destjpg) if(s) { string sdesc; - filtertext(sdesc, s->sdesc, 1); + filtertext(sdesc, s->sdesc, FTXT__SERVDESC); formatstring(text)(", %s:%d %s", s->name, s->port, sdesc); addstr(buf, text); } diff --git a/source/src/server.cpp b/source/src/server.cpp index 8cf5b4e9..e3421293 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -2426,7 +2426,7 @@ void tryauth(client *cl, const char *user) extern bool requestmasterf(const char *fmt, ...); if(!nextauthreq) nextauthreq = 1; cl->authreq = nextauthreq++; - filtertext(cl->authname, user, false, 100); + filtertext(cl->authname, user, FTXT__AUTH, 100); if(!requestmasterf("reqauth %u %s\n", cl->authreq, cl->authname)) { cl->authreq = 0; @@ -2674,7 +2674,7 @@ void process(ENetPacket *packet, int sender, int chan) cl->acbuildtype = getint(p); defformatstring(tags)(", AC: %d|%x", cl->acversion, cl->acbuildtype); getstring(text, p); - filtertext(text, text, 0, MAXNAMELEN); + filtertext(text, text, FTXT__PLAYERNAME, MAXNAMELEN); if(!text[0]) copystring(text, "unarmed"); copystring(cl->name, text, MAXNAMELEN+1); getstring(text, p); @@ -2816,7 +2816,7 @@ void process(ENetPacket *packet, int sender, int chan) case SV_TEAMTEXTME: case SV_TEAMTEXT: getstring(text, p); - filtertext(text, text); + filtertext(text, text, FTXT__CHAT); trimtrailingwhitespace(text); if(*text) { @@ -2849,7 +2849,7 @@ void process(ENetPacket *packet, int sender, int chan) { int mid1 = curmsg, mid2 = p.length(); getstring(text, p); - filtertext(text, text); + filtertext(text, text, FTXT__CHAT); trimtrailingwhitespace(text); if(*text) { @@ -2891,7 +2891,7 @@ void process(ENetPacket *packet, int sender, int chan) { int targ = getint(p); getstring(text, p); - filtertext(text, text); + filtertext(text, text, FTXT__CHAT); trimtrailingwhitespace(text); if(!valid_client(targ)) break; @@ -3016,7 +3016,7 @@ void process(ENetPacket *packet, int sender, int chan) { QUEUE_MSG; getstring(text, p); - filtertext(text, text, 0, MAXNAMELEN); + filtertext(text, text, FTXT__PLAYERNAME, MAXNAMELEN); if(!text[0]) copystring(text, "unarmed"); QUEUE_STR(text); bool namechanged = strcmp(cl->name, text) != 0; @@ -3311,7 +3311,7 @@ void process(ENetPacket *packet, int sender, int chan) case SV_SENDMAP: { getstring(text, p); - filtertext(text, text); + filtertext(text, text, FTXT__MAPNAME); const char *sentmap = behindpath(text), *reject = NULL; int mapsize = getint(p); int cfgsize = getint(p); @@ -3393,7 +3393,7 @@ void process(ENetPacket *packet, int sender, int chan) case SV_REMOVEMAP: { getstring(text, p); - filtertext(text, text); + filtertext(text, text, FTXT__MAPNAME); string filename; const char *rmmap = behindpath(text), *reject = NULL; int mp = findmappath(rmmap); @@ -3450,7 +3450,7 @@ void process(ENetPacket *packet, int sender, int chan) case SA_MAP: { getstring(text, p); - filtertext(text, text); + filtertext(text, text, FTXT__MAPNAME); int mode = getint(p), time = getint(p); if(time <= 0) time = -1; time = min(time, 60); @@ -3486,7 +3486,7 @@ void process(ENetPacket *packet, int sender, int chan) vi->num1 = cn2boot = getint(p); getstring(text, p); strncpy(vi->text,text,128); - filtertext(text, text); + filtertext(text, text, FTXT__KICKBANREASON); trimtrailingwhitespace(text); vi->action = new kickaction(cn2boot, newstring(text, 128)); vi->boot = 1; @@ -3497,7 +3497,7 @@ void process(ENetPacket *packet, int sender, int chan) vi->num1 = cn2boot = getint(p); getstring(text, p); strncpy(vi->text,text,128); - filtertext(text, text); + filtertext(text, text, FTXT__KICKBANREASON); trimtrailingwhitespace(text); vi->action = new banaction(cn2boot, newstring(text, 128)); vi->boot = 2; @@ -3535,7 +3535,7 @@ void process(ENetPacket *packet, int sender, int chan) case SA_SERVERDESC: getstring(text, p); strncpy(vi->text,text,MAXTRANS-1); - filtertext(text, text); + filtertext(text, text, FTXT__SERVDESC); vi->action = new serverdescaction(newstring(text), sender); break; } @@ -4036,7 +4036,7 @@ void extping_maprot(ucharbuf &po) { if(po.remaining() < 100) abort = true; configset &c = maprot.configsets[i]; - filtertext(text, c.mapname, 0); + filtertext(text, c.mapname, FTXT__MAPNAME); text[30] = '\0'; sendstring(abort ? "-- list truncated --" : text, po); loopi(CONFIG_MAXPAR) putint(po, c.par[i]); @@ -4201,7 +4201,7 @@ void initserver(bool dedicated, int argc, char **argv) smapname[0] = '\0'; string identity; - if(scl.logident[0]) filtertext(identity, scl.logident, 0); + if(scl.logident[0]) filtertext(identity, scl.logident, FTXT__LOGIDENT); else formatstring(identity)("%s#%d", scl.ip[0] ? scl.ip : "local", scl.serverport); int conthres = scl.verbose > 1 ? ACLOG_DEBUG : (scl.verbose ? ACLOG_VERBOSE : ACLOG_INFO); if(dedicated && !initlogging(identity, scl.syslogfacility, conthres, scl.filethres, scl.syslogthres, scl.logtimestamp)) diff --git a/source/src/serverbrowser.cpp b/source/src/serverbrowser.cpp index 6b1d6340..b78f89e7 100644 --- a/source/src/serverbrowser.cpp +++ b/source/src/serverbrowser.cpp @@ -487,9 +487,9 @@ void checkpings() si->numplayers = getint(p); si->minremain = getint(p); getstring(text, p); - filtertext(si->map, text, 1); + filtertext(si->map, text, FTXT__MAPNAME); getstring(text, p); - filterservdesc(si->sdesc, text); + filtertext(si->sdesc, text, FTXT__SERVDESC); copystring(si->description, si->sdesc); si->maxclients = getint(p); if(p.remaining()) @@ -510,7 +510,7 @@ void checkpings() loopi(si->numplayers) { getstring(text, p); - filtertext(text, text, 0); + filtertext(text, text, FTXT__PLAYERNAME); if(text[0] && !p.overread()) { si->playernames.add((const char *)si->namedata + q.length()); @@ -552,7 +552,7 @@ void checkpings() while(p.remaining()) { getstring(text, p); - filtertext(text, text, 0); + filtertext(text, text, FTXT__MAPNAME); if(*text && !p.overread()) { text[MAXINFOLINELEN] = '\0'; @@ -689,8 +689,8 @@ int sicompare(serverinfo **ap, serverinfo **bp) case SBS_DESC: // description { static string ad, bd; - filtertext(ad, a->sdesc); - filtertext(bd, b->sdesc); + filtertext(ad, a->sdesc, FTXT__SERVDESC); + filtertext(bd, b->sdesc, FTXT__SERVDESC); if(!ad[0] && bd[0]) return dir; if(ad[0] && !bd[0]) return -dir; int mdir = dir * strcasecmp(ad, bd); @@ -782,7 +782,7 @@ void addfavcategory(const char *refdes) string text, val; char alx[FC_NUM]; if(!refdes) { intret(0); return; } - filtertext(text, refdes); + filtertext(text, refdes, FTXT__FAVCATEGORY); if(!text[0]) { intret(0); return; } loopv(favcats) if(!strcmp(favcats[i], text)) { intret(i + 1); return; } favcats.add(newstring(text)); @@ -835,14 +835,14 @@ bool favcatcheckkey(serverinfo &si, const char *key) if(key[1]) { formatstring(text)("%s \"%s\" %d %d, %d %d %d \"%s\" %d %d", key + 1, si.map, si.mode, si.ping, si.minremain, si.numplayers, si.maxclients, si.name, si.port, si.pongflags); - filtertext(text, text, 1); + filtertext(text, text, FTXT_NOCOLOR|FTXT_NOWHITE|FTXT_ALLOWBLANKS); int cnt = 0; for(const char *p = text; (p = strchr(p, '\"')); p++) cnt++; return cnt == 4 && execute(text); } break; default: - filtertext(text, si.sdesc); + filtertext(text, si.sdesc, FTXT_NOCOLOR|FTXT_NOWHITE|FTXT_ALLOWBLANKS); return *key && strstr(text, key); } return false; @@ -1079,7 +1079,7 @@ void refreshservers(void *menu, bool init) cutcolorstring(si.description, 76); if(sbconnectexists) { - filtertext(text, si.sdesc); + filtertext(text, si.sdesc, FTXT_NOCOLOR|FTXT_NOWHITE|FTXT_ALLOWBLANKS); for(char *p = text; (p = strchr(p, '\"')); *p++ = ' '); text[30] = '\0'; formatstring(si.cmd)("sbconnect %s %d %d %d %d %d \"%s\"", si.name, si.port, serverfull ?1:0, needspasswd ?1:0, mmode, banned, text); diff --git a/source/src/serverms.cpp b/source/src/serverms.cpp index a5ca5749..1bfbc140 100644 --- a/source/src/serverms.cpp +++ b/source/src/serverms.cpp @@ -170,7 +170,7 @@ static inline void updatemasterserver(int millis, int port) { if(!lastupdatemaster || ((millis-lastupdatemaster)>40*60*1000 && (interm || !totalclients))) { - char servername[30]; memset(servername,'\0',30); filtertext(servername,global_name,-1,20); + char servername[30]; memset(servername,'\0',30); filtertext(servername, global_name, FTXT__GLOBALNAME, 20); if(mastername[0]) requestmasterf("regserv %d %s %d\n", port, servername[0] ? servername : "noname", AC_VERSION); lastupdatemaster = millis + 1; }