Annotation of quake2/server/x, revision 1.1.1.1

1.1       root        1: --- g:\quake2\code\server\sv_user.c    Mon Mar 02 15:21:11 1998
                      2: +++ sv_user.c  Sun Mar 15 19:08:37 1998
                      3: @@ -42,6 +42,7 @@
                      4:        int                     playernum;
                      5:        edict_t         *ent;
                      6:  
                      7: +
                      8:        Com_DPrintf ("New() from %s\n", sv_client->name);
                      9:  
                     10:        if (sv_client->state != cs_connected)
                     11: @@ -108,6 +109,8 @@
                     12:  
                     13:        Com_DPrintf ("Configstrings() from %s\n", sv_client->name);
                     14:  
                     15: +
                     16: +
                     17:        if (sv_client->state != cs_connected)
                     18:        {
                     19:                Com_Printf ("configstrings not valid -- already spawned\n");
                     20: @@ -165,6 +168,8 @@
                     21:  
                     22:        Com_DPrintf ("Baselines() from %s\n", sv_client->name);
                     23:  
                     24: +
                     25: +
                     26:        if (sv_client->state != cs_connected)
                     27:        {
                     28:                Com_Printf ("baselines not valid -- already spawned\n");
                     29: @@ -202,7 +207,7 @@
                     30:        if (start == MAX_EDICTS)
                     31:        {
                     32:                MSG_WriteByte (&sv_client->netchan.message, svc_stufftext);
                     33: -              MSG_WriteString (&sv_client->netchan.message, va("precache ; cmd begin %i\n",svs.spawncount) );
                     34: +              MSG_WriteString (&sv_client->netchan.message, va("precache %i\n", svs.spawncount) );
                     35:        }
                     36:        else
                     37:        {
                     38: @@ -273,7 +278,6 @@
                     39:  
                     40:        FS_FreeFile (sv_client->download);
                     41:        sv_client->download = NULL;
                     42: -
                     43:  }
                     44:  
                     45:  /*
                     46: @@ -285,10 +289,35 @@
                     47:  {
                     48:        char    *name;
                     49:        extern  cvar_t *allow_download;
                     50: +      extern  cvar_t *allow_download_players;
                     51: +      extern  cvar_t *allow_download_models;
                     52: +      extern  cvar_t *allow_download_sounds;
                     53: +      extern  cvar_t *allow_download_maps;
                     54: +      extern  int             file_from_pak; // ZOID did file come from pak?
                     55: +      int offset = 0;
                     56:  
                     57:        name = Cmd_Argv(1);
                     58: +
                     59: +      if (Cmd_Argc() > 2)
                     60: +              offset = atoi(Cmd_Argv(2)); // downloaded offset
                     61: +
                     62: +      // hacked by zoid to allow more conrol over download
                     63: +      // first off, no .. or global allow check
                     64:        if (strstr (name, "..") || !allow_download->value
                     65: -              || strstr (name, "maps") )      // don't allow full map downloads
                     66: +              // leading dot is no good
                     67: +              || *name == '.' 
                     68: +              // leading slash bad as well, must be in subdir
                     69: +              || *name == '/'
                     70: +              // next up, skin check
                     71: +              || (strncmp(name, "players/", 6) == 0 && !allow_download_players->value)
                     72: +              // now models
                     73: +              || (strncmp(name, "models/", 6) == 0 && !allow_download_models->value)
                     74: +              // now sounds
                     75: +              || (strncmp(name, "sound/", 6) == 0 && !allow_download_sounds->value)
                     76: +              // now maps (note special case for maps, must not be in pak)
                     77: +              || (strncmp(name, "maps/", 6) == 0 && !allow_download_maps->value)
                     78: +              // MUST be in a subdirectory    
                     79: +              || !strstr (name, "/") )        
                     80:        {       // don't allow anything with .. path
                     81:                MSG_WriteByte (&sv_client->netchan.message, svc_download);
                     82:                MSG_WriteShort (&sv_client->netchan.message, -1);
                     83: @@ -296,15 +325,24 @@
                     84:                return;
                     85:        }
                     86:  
                     87: +
                     88:        if (sv_client->download)
                     89:                FS_FreeFile (sv_client->download);
                     90:  
                     91:        sv_client->downloadsize = FS_LoadFile (name, (void **)&sv_client->download);
                     92: -      sv_client->downloadcount = 0;
                     93: +      sv_client->downloadcount = offset;
                     94:  
                     95: -      if (!sv_client->download)
                     96: +      if (!sv_client->download
                     97: +              // special check for maps, if it came from a pak file, don't allow
                     98: +              // download  ZOID
                     99: +              || (strncmp(name, "maps/", 5) == 0 && file_from_pak))
                    100:        {
                    101:                Com_DPrintf ("Couldn't download %s to %s\n", name, sv_client->name);
                    102: +              if (sv_client->download) {
                    103: +                      FS_FreeFile (sv_client->download);
                    104: +                      sv_client->download = NULL;
                    105: +              }
                    106: +
                    107:                MSG_WriteByte (&sv_client->netchan.message, svc_download);
                    108:                MSG_WriteShort (&sv_client->netchan.message, -1);
                    109:                MSG_WriteByte (&sv_client->netchan.message, 0);
                    110: @@ -316,6 +354,7 @@
                    111:  }
                    112:  
                    113:  
                    114: +
                    115:  //============================================================================
                    116:  
                    117:  
                    118: @@ -358,9 +397,12 @@
                    119:        if (!v[0])
                    120:                Cbuf_AddText ("killserver\n");
                    121:        else
                    122: +
                    123:        {
                    124:                Cbuf_AddText (v);
                    125: +
                    126:                Cbuf_AddText ("\n");
                    127: +
                    128:        }
                    129:        Cvar_Set ("nextserver","");
                    130:  }
                    131: @@ -444,17 +486,29 @@
                    132:  */
                    133:  
                    134:  
                    135: +
                    136:  void ClientThink (client_t *cl, usercmd_t *cmd)
                    137: +
                    138:  {
                    139: +
                    140:        cl->commandMsec -= cmd->msec;
                    141: +
                    142:        if (cl->commandMsec < 0 && sv_enforcetime->value )
                    143: +
                    144:        {
                    145: +
                    146:                Com_DPrintf ("commandMsec underflow from %s\n", cl->name);
                    147: +
                    148:                return;
                    149: +
                    150:        }
                    151: +
                    152:        ge->ClientThink (cl->edict, cmd);
                    153: +
                    154:  }
                    155:  
                    156: +
                    157: +
                    158:  #define       MAX_STRINGCMDS  8
                    159:  /*
                    160:  ===================
                    161: @@ -467,22 +521,32 @@
                    162:  {
                    163:        int             c;
                    164:        char    *s;
                    165: +
                    166:        usercmd_t       nullcmd;
                    167:        usercmd_t       oldest, oldcmd, newcmd;
                    168:        int             net_drop;
                    169:        int             stringCmdCount;
                    170: +
                    171:        int             checksum, calculatedChecksum;
                    172: +
                    173:        int             checksumIndex;
                    174: +
                    175:        qboolean        move_issued;
                    176:  
                    177: +
                    178:        sv_client = cl;
                    179:        sv_player = sv_client->edict;
                    180:  
                    181: +
                    182:        // only allow one move command
                    183: +
                    184:        move_issued = false;
                    185:  
                    186: +
                    187: +
                    188:        stringCmdCount = 0;
                    189:  
                    190: +
                    191:        while (1)
                    192:        {
                    193:                if (net_message.readcount > net_message.cursize)
                    194: @@ -512,57 +576,96 @@
                    195:                        break;
                    196:  
                    197:                case clc_move:
                    198: +
                    199:                        if (move_issued)
                    200: +
                    201:                                return;         // someone is trying to cheat...
                    202: +
                    203:                        move_issued = true;
                    204:  
                    205: +
                    206: +
                    207:                        checksumIndex = net_message.readcount;
                    208: +
                    209:                        checksum = MSG_ReadByte (&net_message);
                    210:  
                    211: +
                    212: +
                    213:                        cl->lastframe = MSG_ReadLong (&net_message);
                    214: +
                    215:                        memset (&nullcmd, 0, sizeof(nullcmd));
                    216:                        MSG_ReadDeltaUsercmd (&net_message, &nullcmd, &oldest);
                    217:                        MSG_ReadDeltaUsercmd (&net_message, &oldest, &oldcmd);
                    218:                        MSG_ReadDeltaUsercmd (&net_message, &oldcmd, &newcmd);
                    219:  
                    220:                        if ( cl->state != cs_spawned )
                    221: +
                    222:                        {
                    223: +
                    224:                                cl->lastframe = -1;
                    225:                                break;
                    226:                        }
                    227:  
                    228: +
                    229: +
                    230:                        // if the checksum fails, ignore the rest of the packet
                    231: +
                    232:                        calculatedChecksum = COM_BlockSequenceCheckByte (
                    233: +
                    234:                                net_message.data + checksumIndex + 1,
                    235: +
                    236:                                net_message.readcount - checksumIndex - 1,
                    237: +
                    238:                                cl->netchan.incoming_sequence);
                    239:  
                    240: +
                    241: +
                    242:                        if (calculatedChecksum != checksum)
                    243: +
                    244:                        {
                    245: +
                    246: +                              // hack for unreliable end condition
                    247: +                              if ((cl->netchan.incoming_sequence % 
                    248: +                                      (NUMVERTEXNORMALS * sizeof(vec3_t))) + 3 < 
                    249: +                                      (NUMVERTEXNORMALS * sizeof(vec3_t))) {
                    250:                                Com_DPrintf ("Failed command checksum for %s\n", cl->name);
                    251: +
                    252:                                return;
                    253: +
                    254: +                              }
                    255:                        }
                    256:  
                    257: +
                    258: +
                    259:                        if (!sv_paused->value)
                    260: +
                    261:                        {
                    262:                                net_drop = cl->netchan.dropped;
                    263:                                if (net_drop < 20)
                    264:                                {
                    265: +
                    266:  //if (net_drop > 2)
                    267: +
                    268:  //    Com_Printf ("drop %i\n", net_drop);
                    269:                                        while (net_drop > 2)
                    270:                                        {
                    271:                                                ClientThink (cl, &cl->lastcmd);
                    272: +
                    273:                                                net_drop--;
                    274:                                        }
                    275:                                        if (net_drop > 1)
                    276:                                                ClientThink (cl, &oldest);
                    277: +
                    278:                                        if (net_drop > 0)
                    279:                                                ClientThink (cl, &oldcmd);
                    280: +
                    281:                                }
                    282:                                ClientThink (cl, &newcmd);
                    283: +
                    284:                        }
                    285:  
                    286: +
                    287: +
                    288:                        cl->lastcmd = newcmd;
                    289:                        break;
                    290:  
                    291: @@ -570,13 +673,19 @@
                    292:                case clc_stringcmd:     
                    293:                        s = MSG_ReadString (&net_message);
                    294:  
                    295: +
                    296: +
                    297:                        // malicious users may try using too many string commands
                    298: +
                    299:                        if (++stringCmdCount < MAX_STRINGCMDS)
                    300:                                SV_ExecuteUserCommand (s);
                    301: +
                    302:                        if (cl->state == cs_zombie)
                    303: +
                    304:                                return; // disconnect command
                    305:                        break;
                    306:                }
                    307:        }
                    308: +
                    309:  }
                    310:  

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.