这篇教程C++ Cmd_Argc函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中Cmd_Argc函数的典型用法代码示例。如果您正苦于以下问题:C++ Cmd_Argc函数的具体用法?C++ Cmd_Argc怎么用?C++ Cmd_Argc使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了Cmd_Argc函数的28个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: PR_Profile_fvoid PR_Profile_f (void){ int i, j; int max; dfunction_t *f, *bestFunc; int total; int funcCount; qboolean byHC; char saveName[MAX_OSPATH]; FILE *saveFile = NULL; int currentFile; int bestFile; int tally; const char *s; byHC = false; funcCount = 10; *saveName = 0; for (i = 1; i < Cmd_Argc(); i++) { s = Cmd_Argv(i); if (tolower(*s) == 'h') { // Sort by HC source file byHC = true; } else if (tolower(*s) == 's') { // Save to file if (i + 1 < Cmd_Argc() && !isdigit(*Cmd_Argv(i + 1))) { i++; sprintf(saveName, "%s/%s", fs_userdir, Cmd_Argv(i)); } else { sprintf(saveName, "%s/profile.txt", fs_userdir); } } else if (isdigit(*s)) { // Specify function count funcCount = atoi(Cmd_Argv(i)); if (funcCount < 1) { funcCount = 1; } } } total = 0; for (i = 0; i < progs->numfunctions; i++) { total += pr_functions[i].profile; } if (*saveName) { // Create the output file saveFile = fopen(saveName, "w"); if (saveFile == NULL) Con_Printf("Could not open %s/n", saveName); }#ifdef TIMESNAP_ACTIVE if (saveFile) { fprintf(saveFile, "(Timesnap Profile)/n"); } else { Con_Printf("(Timesnap Profile)/n"); }#endif if (byHC == false) { j = 0; do { max = 0; bestFunc = NULL; for (i = 0; i < progs->numfunctions; i++) { f = &pr_functions[i]; if (f->profile > max) { max = f->profile; bestFunc = f; } } if (bestFunc) { if (j < funcCount) { if (saveFile) { fprintf(saveFile, "%05.2f %s/n", ((float)bestFunc->profile / (float)total) * 100.0, PR_GetString(bestFunc->s_name)); } else { Con_Printf("%05.2f %s/n",//.........这里部分代码省略.........
开发者ID:crutchwalkfactory,项目名称:motocakerteam,代码行数:101,
示例2: SV_MapRestart_f/*================SV_MapRestart_fCompletely restarts a level, but doesn't send a new gamestate to the clients.This allows fair starts with variable load times.================*/static void SV_MapRestart_f( void ) { int i; client_t *client; char *denied; qboolean isBot; int delay; // make sure we aren't restarting twice in the same frame if ( com_frameTime == sv.serverId ) { return; } // make sure server is running if ( !com_sv_running->integer ) { Com_Printf( "Server is not running./n" ); return; } if ( sv.restartTime ) { return; } if (Cmd_Argc() > 1 ) { delay = atoi( Cmd_Argv(1) ); } else { delay = 5; } if( delay ) { sv.restartTime = sv.time + delay * 1000; SV_SetConfigstring( CS_WARMUP, va("%i", sv.restartTime) ); return; } // check for changes in variables that can't just be restarted // check for maxclients change if ( sv_maxclients->modified || sv_gametype->modified ) { char mapname[MAX_QPATH]; Com_Printf( "variable change -- restarting./n" ); // restart the map the slow way Q_strncpyz( mapname, Cvar_VariableString( "mapname" ), sizeof( mapname ) ); SV_SpawnServer( mapname, qfalse, eForceReload_NOTHING ); return; } SV_StopAutoRecordDemos(); // toggle the server bit so clients can detect that a // map_restart has happened svs.snapFlagServerBit ^= SNAPFLAG_SERVERCOUNT; // generate a new serverid // TTimo - don't update restartedserverId there, otherwise we won't deal correctly with multiple map_restart sv.serverId = com_frameTime; Cvar_Set( "sv_serverid", va("%i", sv.serverId ) ); time( &sv.realMapTimeStarted ); sv.demosPruned = qfalse; // if a map_restart occurs while a client is changing maps, we need // to give them the correct time so that when they finish loading // they don't violate the backwards time check in cl_cgame.c for (i=0 ; i<sv_maxclients->integer ; i++) { if (svs.clients[i].state == CS_PRIMED) { svs.clients[i].oldServerTime = sv.restartTime; } } // reset all the vm data in place without changing memory allocation // note that we do NOT set sv.state = SS_LOADING, so configstrings that // had been changed from their default values will generate broadcast updates sv.state = SS_LOADING; sv.restarting = qtrue; SV_RestartGame(); // run a few frames to allow everything to settle for ( i = 0 ;i < 3 ; i++ ) { GVM_RunFrame( sv.time ); sv.time += 100; svs.time += 100; } sv.state = SS_GAME; sv.restarting = qfalse; // connect and begin all the clients for (i=0 ; i<sv_maxclients->integer ; i++) { client = &svs.clients[i];//.........这里部分代码省略.........
开发者ID:ooxavenue,项目名称:JediKnightGalaxies,代码行数:101,
示例3: SV_DelBanFromListstatic void SV_DelBanFromList( qboolean isexception ){ int index, count = 0, todel, mask; netadr_t ip; char *banstring; // make sure server is running if ( !com_sv_running->integer ) { Com_Printf( "Server is not running./n" ); return; } if ( Cmd_Argc() != 2 ) { Com_Printf( "Usage: %s (ip[/subnet] | num)/n", Cmd_Argv( 0 ) ); return; } banstring = Cmd_Argv( 1 ); if ( strchr( banstring, '.' ) || strchr( banstring, ':' ) ) { serverBan_t *curban; if ( SV_ParseCIDRNotation( &ip, &mask, banstring ) ) { Com_Printf( "Error: Invalid address %s/n", banstring ); return; } index = 0; while ( index < serverBansCount ) { curban = &serverBans[index]; if ( curban->isexception == isexception && curban->subnet >= mask && NET_CompareBaseAdrMask( curban->ip, ip, mask ) ) { Com_Printf( "Deleting %s %s/%d/n", isexception ? "exception" : "ban", NET_AdrToString( curban->ip ), curban->subnet ); SV_DelBanEntryFromList( index ); } else index++; } } else { todel = atoi( Cmd_Argv( 1 ) ); if ( todel < 1 || todel > serverBansCount ) { Com_Printf( "Error: Invalid ban number given/n" ); return; } for ( index = 0; index < serverBansCount; index++ ) { if ( serverBans[index].isexception == isexception ) { count++; if ( count == todel ) { Com_Printf( "Deleting %s %s/%d/n", isexception ? "exception" : "ban", NET_AdrToString( serverBans[index].ip ), serverBans[index].subnet ); SV_DelBanEntryFromList( index ); break; } } } } SV_WriteBans();}
开发者ID:ooxavenue,项目名称:JediKnightGalaxies,代码行数:82,
示例4: Cvar_List_f/*=======================================================================================================================================Cvar_List_f=======================================================================================================================================*/void Cvar_List_f(void) { cvar_t *var; int i; char *match; if (Cmd_Argc() > 1) { match = Cmd_Argv(1); } else { match = NULL; } i = 0; for (var = cvar_vars; var; var = var->next, i++) { if (!var->name || (match && !Com_Filter(match, var->name, qfalse))) { continue; } if (var->flags & CVAR_SERVERINFO) { Com_Printf("S"); } else { Com_Printf(" "); } if (var->flags & CVAR_SYSTEMINFO) { Com_Printf("s"); } else { Com_Printf(" "); } if (var->flags & CVAR_USERINFO) { Com_Printf("U"); } else { Com_Printf(" "); } if (var->flags & CVAR_ROM) { Com_Printf("R"); } else { Com_Printf(" "); } if (var->flags & CVAR_INIT) { Com_Printf("I"); } else { Com_Printf(" "); } if (var->flags & CVAR_ARCHIVE) { Com_Printf("A"); } else { Com_Printf(" "); } if (var->flags & CVAR_LATCH) { Com_Printf("L"); } else { Com_Printf(" "); } if (var->flags & CVAR_CHEAT) { Com_Printf("C"); } else { Com_Printf(" "); } if (var->flags & CVAR_USER_CREATED) { Com_Printf("?"); } else { Com_Printf(" "); } Com_Printf(" %s /"%s/"/n", var->name, var->string); } Com_Printf("/n%i total cvars/n", i); Com_Printf("%i cvar indexes/n", cvar_numIndexes);}
开发者ID:KuehnhammerTobias,项目名称:ioqw,代码行数:83,
示例5: SV_Status_f/*================SV_Status_f================*/static void SV_Status_f( void ){ int i, humans, bots; client_t *cl; playerState_t *ps; const char *s; int ping; char state[32]; qboolean avoidTruncation = qfalse; // make sure server is running if ( !com_sv_running->integer ) { Com_Printf( "Server is not running./n" ); return; } if ( Cmd_Argc() > 1 ) { if (!Q_stricmp("notrunc", Cmd_Argv(1))) { avoidTruncation = qtrue; } } humans = bots = 0; for ( i = 0 ; i < sv_maxclients->integer ; i++ ) { if ( svs.clients[i].state >= CS_CONNECTED ) { if ( svs.clients[i].netchan.remoteAddress.type != NA_BOT ) { humans++; } else { bots++; } } }#if defined(_WIN32)#define STATUS_OS "Windows"#elif defined(__linux__)#define STATUS_OS "Linux"#elif defined(MACOS_X)#define STATUS_OS "OSX"#else#define STATUS_OS "Unknown"#endif const char *ded_table[] = { "listen", "lan dedicated", "public dedicated", }; char hostname[MAX_HOSTNAMELENGTH] = { 0 }; Q_strncpyz( hostname, sv_hostname->string, sizeof(hostname) ); Q_StripColor( hostname ); Com_Printf( "hostname: %s^7/n", hostname ); Com_Printf( "version : %s %i/n", VERSION_STRING_DOTTED, PROTOCOL_VERSION ); Com_Printf( "game : %s/n", FS_GetCurrentGameDir() ); Com_Printf( "udp/ip : %s:%i os(%s) type(%s)/n", Cvar_VariableString( "net_ip" ), Cvar_VariableIntegerValue( "net_port" ), STATUS_OS, ded_table[com_dedicated->integer] ); Com_Printf( "map : %s gametype(%i)/n", sv_mapname->string, sv_gametype->integer ); Com_Printf( "players : %i humans, %i bots (%i max)/n", humans, bots, sv_maxclients->integer - sv_privateClients->integer ); Com_Printf( "uptime : %s/n", SV_CalcUptime() ); Com_Printf ("cl score ping name address rate /n"); Com_Printf ("-- ----- ---- --------------- --------------------------------------- -----/n"); for (i=0,cl=svs.clients ; i < sv_maxclients->integer ; i++,cl++) { if ( !cl->state ) continue; if ( cl->state == CS_CONNECTED ) Q_strncpyz( state, "CON ", sizeof( state ) ); else if ( cl->state == CS_ZOMBIE ) Q_strncpyz( state, "ZMB ", sizeof( state ) ); else { ping = cl->ping < 9999 ? cl->ping : 9999; Com_sprintf( state, sizeof(state), "%4i", ping ); } ps = SV_GameClientNum( i ); s = NET_AdrToString( cl->netchan.remoteAddress ); if (!avoidTruncation) { Com_Printf ("%2i %5i %s %-15.15s ^7%39s %5i/n", i, ps->persistant[PERS_SCORE], state, cl->name, s, cl->rate//.........这里部分代码省略.........
开发者ID:ooxavenue,项目名称:JediKnightGalaxies,代码行数:101,
示例6: SV_WriteDownloadToClient/*==================SV_WriteDownloadToClientCheck to see if the client wants a file, open it if needed and start pumping the clientFill up msg with data, return number of download blocks added==================*/int SV_WriteDownloadToClient(client_t *cl, msg_t *msg){ int curindex; int unreferenced = 1; char errorMessage[1024]; char pakbuf[MAX_QPATH], *pakptr; int numRefPaks; if (!*cl->downloadName) return 0; // Nothing being downloaded if(!cl->download) { // Chop off filename extension. Com_sprintf(pakbuf, sizeof(pakbuf), "%s", cl->downloadName); pakptr = strrchr(pakbuf, '.'); if(pakptr) { *pakptr = '/0'; // Check for pk3 filename extension if(!Q_stricmp(pakptr + 1, "pk3")) { const char *referencedPaks = FS_ReferencedPakNames(); // Check whether the file appears in the list of referenced // paks to prevent downloading of arbitrary files. Cmd_TokenizeStringIgnoreQuotes(referencedPaks); numRefPaks = Cmd_Argc(); for(curindex = 0; curindex < numRefPaks; curindex++) { if(!FS_FilenameCompare(Cmd_Argv(curindex), pakbuf)) { unreferenced = 0; break; } } } } cl->download = 0; // We open the file here if ( !(sv_allowDownload->integer & DLF_ENABLE) || (sv_allowDownload->integer & DLF_NO_UDP) || unreferenced || ( cl->downloadSize = FS_SV_FOpenFileRead( cl->downloadName, &cl->download ) ) < 0 ) { // cannot auto-download file if(unreferenced) { Com_Printf("clientDownload: %d : /"%s/" is not referenced and cannot be downloaded./n", (int) (cl - svs.clients), cl->downloadName); Com_sprintf(errorMessage, sizeof(errorMessage), "File /"%s/" is not referenced and cannot be downloaded.", cl->downloadName); } else if ( !(sv_allowDownload->integer & DLF_ENABLE) || (sv_allowDownload->integer & DLF_NO_UDP) ) { Com_Printf("clientDownload: %d : /"%s/" download disabled/n", (int) (cl - svs.clients), cl->downloadName); if (sv_pure->integer) { Com_sprintf(errorMessage, sizeof(errorMessage), "Could not download /"%s/" because autodownloading is disabled on the server./n/n" "You will need to get this file elsewhere before you " "can connect to this pure server./n", cl->downloadName); } else { Com_sprintf(errorMessage, sizeof(errorMessage), "Could not download /"%s/" because autodownloading is disabled on the server./n/n" "The server you are connecting to is not a pure server, " "set autodownload to No in your settings and you might be " "able to join the game anyway./n", cl->downloadName); } } else { // NOTE TTimo this is NOT supposed to happen unless bug in our filesystem scheme? // if the pk3 is referenced, it must have been found somewhere in the filesystem Com_Printf("clientDownload: %d : /"%s/" file not found on server/n", (int) (cl - svs.clients), cl->downloadName); Com_sprintf(errorMessage, sizeof(errorMessage), "File /"%s/" not found on server for autodownloading./n", cl->downloadName); } MSG_WriteByte( msg, svc_download ); MSG_WriteShort( msg, 0 ); // client is expecting block zero MSG_WriteLong( msg, -1 ); // illegal file size MSG_WriteString( msg, errorMessage ); *cl->downloadName = 0; if(cl->download) FS_FCloseFile(cl->download); return 1; } Com_Printf( "clientDownload: %d : beginning /"%s/"/n", (int) (cl - svs.clients), cl->downloadName ); // Init cl->downloadCurrentBlock = cl->downloadClientBlock = cl->downloadXmitBlock = 0;//.........这里部分代码省略.........
开发者ID:jkent,项目名称:tremulous,代码行数:101,
示例7: CL_Record_f/* * record <demoname> * Begins recording a demo from the current position */voidCL_Record_f(void){ char name[MAX_OSPATH]; byte buf_data[MAX_MSGLEN]; sizebuf_t buf; int i; int len; entity_state_t *ent; entity_state_t nullstate; if (Cmd_Argc() != 2) { Com_Printf("record <demoname>/n"); return; } if (cls.demorecording) { Com_Printf("Already recording./n"); return; } if (cls.state != ca_active) { Com_Printf("You must be in a level to record./n"); return; } Com_sprintf(name, sizeof(name), "%s/demos/%s.dm2", FS_Gamedir(), Cmd_Argv(1)); Com_Printf("recording to %s./n", name); FS_CreatePath(name); cls.demofile = fopen(name, "wb"); if (!cls.demofile) { Com_Printf("ERROR: couldn't open./n"); return; } cls.demorecording = true; /* don't start saving messages until a non-delta compressed message is received */ cls.demowaiting = true; /* write out messages to hold the startup information */ SZ_Init(&buf, buf_data, sizeof(buf_data)); /* send the serverdata */ MSG_WriteByte(&buf, svc_serverdata); MSG_WriteLong(&buf, PROTOCOL_VERSION); MSG_WriteLong(&buf, 0x10000 + cl.servercount); MSG_WriteByte(&buf, 1); /* demos are always attract loops */ MSG_WriteString(&buf, cl.gamedir); MSG_WriteShort(&buf, cl.playernum); MSG_WriteString(&buf, cl.configstrings[CS_NAME]); /* configstrings */ for (i = 0; i < MAX_CONFIGSTRINGS; i++) { if (cl.configstrings[i][0]) { if (buf.cursize + strlen(cl.configstrings[i]) + 32 > buf.maxsize) { len = LittleLong(buf.cursize); fwrite(&len, 4, 1, cls.demofile); fwrite(buf.data, buf.cursize, 1, cls.demofile); buf.cursize = 0; } MSG_WriteByte(&buf, svc_configstring); MSG_WriteShort(&buf, i); MSG_WriteString(&buf, cl.configstrings[i]); } } /* baselines */ memset(&nullstate, 0, sizeof(nullstate)); for (i = 0; i < MAX_EDICTS; i++) { ent = &cl_entities[i].baseline; if (!ent->modelindex) { continue; } if (buf.cursize + 64 > buf.maxsize) { len = LittleLong(buf.cursize); fwrite(&len, 4, 1, cls.demofile); fwrite(buf.data, buf.cursize, 1, cls.demofile);//.........这里部分代码省略.........
开发者ID:bradc6,项目名称:yquake2,代码行数:101,
示例8: CL_CgameSystemCalls/*====================CL_CgameSystemCallsThe cgame module is making a system call====================*/intptr_t CL_CgameSystemCalls( intptr_t *args ) { switch ( args[0] ) { case CG_PRINT: Com_Printf( "%s", VMA( 1 ) ); return 0; case CG_ERROR: Com_Error( ERR_DROP, "%s", VMA( 1 ) ); return 0; case CG_MILLISECONDS: return Sys_Milliseconds(); case CG_CVAR_REGISTER: Cvar_Register( VMA( 1 ), VMA( 2 ), VMA( 3 ), args[4] ); return 0; case CG_CVAR_UPDATE: Cvar_Update( VMA( 1 ) ); return 0; case CG_CVAR_SET: Cvar_Set( VMA( 1 ), VMA( 2 ) ); return 0; case CG_CVAR_VARIABLESTRINGBUFFER: Cvar_VariableStringBuffer( VMA( 1 ), VMA( 2 ), args[3] ); return 0; case CG_ARGC: return Cmd_Argc(); case CG_ARGV: Cmd_ArgvBuffer( args[1], VMA( 2 ), args[3] ); return 0; case CG_ARGS: Cmd_ArgsBuffer( VMA( 1 ), args[2] ); return 0; case CG_FS_FOPENFILE: return FS_FOpenFileByMode( VMA( 1 ), VMA( 2 ), args[3] ); case CG_FS_READ: FS_Read( VMA( 1 ), args[2], args[3] ); return 0; case CG_FS_WRITE: return FS_Write( VMA( 1 ), args[2], args[3] ); case CG_FS_FCLOSEFILE: FS_FCloseFile( args[1] ); return 0; case CG_SENDCONSOLECOMMAND: Cbuf_AddText( VMA( 1 ) ); return 0; case CG_ADDCOMMAND: CL_AddCgameCommand( VMA( 1 ) ); return 0; case CG_REMOVECOMMAND: Cmd_RemoveCommand( VMA( 1 ) ); return 0; case CG_SENDCLIENTCOMMAND: CL_AddReliableCommand( VMA( 1 ) ); return 0; case CG_UPDATESCREEN: // this is used during lengthy level loading, so pump message loop// Com_EventLoop(); // FIXME: if a server restarts here, BAD THINGS HAPPEN!// We can't call Com_EventLoop here, a restart will crash and this _does_ happen// if there is a map change while we are downloading at pk3.// ZOID SCR_UpdateScreen(); return 0; case CG_CM_LOADMAP: CL_CM_LoadMap( VMA( 1 ) ); return 0; case CG_CM_NUMINLINEMODELS: return CM_NumInlineModels(); case CG_CM_INLINEMODEL: return CM_InlineModel( args[1] ); case CG_CM_TEMPBOXMODEL: return CM_TempBoxModel( VMA( 1 ), VMA( 2 ), qfalse ); case CG_CM_TEMPCAPSULEMODEL: return CM_TempBoxModel( VMA( 1 ), VMA( 2 ), qtrue ); case CG_CM_POINTCONTENTS: return CM_PointContents( VMA( 1 ), args[2] ); case CG_CM_TRANSFORMEDPOINTCONTENTS: return CM_TransformedPointContents( VMA( 1 ), args[2], VMA( 3 ), VMA( 4 ) ); case CG_CM_BOXTRACE: CM_BoxTrace( VMA( 1 ), VMA( 2 ), VMA( 3 ), VMA( 4 ), VMA( 5 ), args[6], args[7], /*int capsule*/ qfalse ); return 0; case CG_CM_TRANSFORMEDBOXTRACE: CM_TransformedBoxTrace( VMA( 1 ), VMA( 2 ), VMA( 3 ), VMA( 4 ), VMA( 5 ), args[6], args[7], VMA( 8 ), VMA( 9 ), /*int capsule*/ qfalse ); return 0; case CG_CM_CAPSULETRACE: CM_BoxTrace( VMA( 1 ), VMA( 2 ), VMA( 3 ), VMA( 4 ), VMA( 5 ), args[6], args[7], /*int capsule*/ qtrue ); return 0; case CG_CM_TRANSFORMEDCAPSULETRACE: CM_TransformedBoxTrace( VMA( 1 ), VMA( 2 ), VMA( 3 ), VMA( 4 ), VMA( 5 ), args[6], args[7], VMA( 8 ), VMA( 9 ), /*int capsule*/ qtrue ); return 0; case CG_CM_MARKFRAGMENTS: return re.MarkFragments( args[1], VMA( 2 ), VMA( 3 ), args[4], VMA( 5 ), args[6], VMA( 7 ) ); case CG_S_STARTSOUND: S_StartSound( VMA( 1 ), args[2], args[3], args[4] ); return 0;//----(SA) added//.........这里部分代码省略.........
开发者ID:jonathangray,项目名称:rtcw-sp-openbsd,代码行数:101,
示例9: UI_GetParamNumber/** * Get the number of param from an execution context * @param[in] context The execution context * @return The requested param */int UI_GetParamNumber (const uiCallContext_t* context){ if (context->useCmdParam) return Cmd_Argc() - 1; return context->paramNumber;}
开发者ID:rxadmin,项目名称:ufoai,代码行数:11,
示例10: CL_CgameSystemCalls/*====================CL_CgameSystemCallsThe cgame module is making a system call====================*/intptr_t CL_CgameSystemCalls( intptr_t *args ){ switch ( args[ 0 ] ) { case CG_PRINT: Com_Printf( "%s", ( char * ) VMA( 1 ) ); return 0; case CG_ERROR: Com_Error( ERR_DROP, "%s", ( char * ) VMA( 1 ) ); case CG_MILLISECONDS: return Sys_Milliseconds(); case CG_CVAR_REGISTER: Cvar_Register( VMA( 1 ), VMA( 2 ), VMA( 3 ), args[ 4 ] ); return 0; case CG_CVAR_UPDATE: Cvar_Update( VMA( 1 ) ); return 0; case CG_CVAR_SET: Cvar_Set( VMA( 1 ), VMA( 2 ) ); return 0; case CG_CVAR_VARIABLESTRINGBUFFER: VM_CheckBlock( args[2], args[3], "CVARVSB" ); Cvar_VariableStringBuffer( VMA( 1 ), VMA( 2 ), args[ 3 ] ); return 0; case CG_CVAR_LATCHEDVARIABLESTRINGBUFFER: VM_CheckBlock( args[2], args[3], "CVARLVSB" ); Cvar_LatchedVariableStringBuffer( VMA( 1 ), VMA( 2 ), args[ 3 ] ); return 0; case CG_CVAR_VARIABLEINTEGERVALUE: return Cvar_VariableIntegerValue( VMA( 1 ) ); case CG_ARGC: return Cmd_Argc(); case CG_ARGV: VM_CheckBlock( args[2], args[3], "ARGV" ); Cmd_ArgvBuffer( args[ 1 ], VMA( 2 ), args[ 3 ] ); return 0; case CG_ARGS: VM_CheckBlock( args[1], args[2], "ARGS" ); Cmd_ArgsBuffer( VMA( 1 ), args[ 2 ] ); return 0; case CG_LITERAL_ARGS: // FIXME VM_CheckBlock( args[1], args[2], "LARGS" ); Cmd_LiteralArgsBuffer( VMA( 1 ), args[ 2 ] );// Cmd_ArgsBuffer(VMA(1), args[2]); return 0; case CG_GETDEMOSTATE: return CL_DemoState(); case CG_GETDEMOPOS: return CL_DemoPos(); case CG_FS_FOPENFILE: return FS_FOpenFileByMode( VMA( 1 ), VMA( 2 ), args[ 3 ] ); case CG_FS_READ: VM_CheckBlock( args[1], args[2], "FSREAD" ); FS_Read2( VMA( 1 ), args[ 2 ], args[ 3 ] ); return 0; case CG_FS_WRITE: VM_CheckBlock( args[1], args[2], "FSWRITE" ); return FS_Write( VMA( 1 ), args[ 2 ], args[ 3 ] ); case CG_FS_FCLOSEFILE: FS_FCloseFile( args[ 1 ] ); return 0; case CG_FS_GETFILELIST: VM_CheckBlock( args[3], args[4], "FSGFL" ); return FS_GetFileList( VMA( 1 ), VMA( 2 ), VMA( 3 ), args[ 4 ] ); case CG_FS_DELETEFILE: return FS_Delete( VMA( 1 ) ); case CG_SENDCONSOLECOMMAND: Cbuf_AddText( VMA( 1 ) ); return 0; case CG_ADDCOMMAND://.........这里部分代码省略.........
开发者ID:justhacking,项目名称:Unvanquished,代码行数:101,
示例11: CL_GetServerCommand/*===================CL_GetServerCommandSet up argc/argv for the given command===================*/qboolean CL_GetServerCommand( int serverCommandNumber ){ const char *s; char *cmd; static char bigConfigString[ BIG_INFO_STRING ]; int argc; // if we have irretrievably lost a reliable command, drop the connection if ( serverCommandNumber <= clc.serverCommandSequence - MAX_RELIABLE_COMMANDS ) { // when a demo record was started after the client got a whole bunch of // reliable commands then the client never got those first reliable commands if ( clc.demoplaying ) { return qfalse; } Com_Error( ERR_DROP, "CL_GetServerCommand: a reliable command was cycled out" ); } if ( serverCommandNumber > clc.serverCommandSequence ) { Com_Error( ERR_DROP, "CL_GetServerCommand: requested a command not received" ); } s = clc.serverCommands[ serverCommandNumber & ( MAX_RELIABLE_COMMANDS - 1 ) ]; clc.lastExecutedServerCommand = serverCommandNumber; if ( cl_showServerCommands->integer ) { // NERVE - SMF Com_Printf( "serverCommand: %i : %s/n", serverCommandNumber, s ); }rescan: Cmd_TokenizeString( s ); cmd = Cmd_Argv( 0 ); argc = Cmd_Argc(); if ( !strcmp( cmd, "disconnect" ) ) { // NERVE - SMF - allow server to indicate why they were disconnected if ( argc >= 2 ) { Com_Error( ERR_SERVERDISCONNECT, "Server disconnected: %s", Cmd_Argv( 1 ) ); } else { Com_Error( ERR_SERVERDISCONNECT, "Server disconnected" ); } } if ( !strcmp( cmd, "bcs0" ) ) { Com_sprintf( bigConfigString, BIG_INFO_STRING, "cs %s %s", Cmd_Argv( 1 ), Cmd_QuoteString( Cmd_Argv( 2 ) ) ); return qfalse; } if ( !strcmp( cmd, "bcs1" ) ) { s = Cmd_QuoteString( Cmd_Argv( 2 ) ); if ( strlen( bigConfigString ) + strlen( s ) >= BIG_INFO_STRING ) { Com_Error( ERR_DROP, "bcs exceeded BIG_INFO_STRING" ); } strcat( bigConfigString, s ); return qfalse; } if ( !strcmp( cmd, "bcs2" ) ) { s = Cmd_QuoteString( Cmd_Argv( 2 ) ); if ( strlen( bigConfigString ) + strlen( s ) + 1 >= BIG_INFO_STRING ) { Com_Error( ERR_DROP, "bcs exceeded BIG_INFO_STRING" ); } strcat( bigConfigString, s ); strcat( bigConfigString, "/"" ); s = bigConfigString; goto rescan; } if ( !strcmp( cmd, "cs" ) ) { CL_ConfigstringModified(); // reparse the string, because CL_ConfigstringModified may have done another Cmd_TokenizeString() Cmd_TokenizeString( s ); return qtrue; }//.........这里部分代码省略.........
开发者ID:justhacking,项目名称:Unvanquished,代码行数:101,
示例12: SV_VerifyPaks_f/*=================SV_VerifyPaks_fIf we are pure, disconnect the client if they do no meet the following conditions:1. the first two checksums match our view of cgame and ui2. there are no any additional checksums that we do not haveThis routine would be a bit simpler with a goto but i abstained=================*/static void SV_VerifyPaks_f( client_t *cl ) { int nChkSum1, nChkSum2, nClientPaks, nServerPaks, i, j, nCurArg; int nClientChkSum[1024]; int nServerChkSum[1024]; const char *pPaks, *pArg; qboolean bGood = qtrue; // if we are pure, we "expect" the client to load certain things from // certain pk3 files, namely we want the client to have loaded the // ui and cgame that we think should be loaded based on the pure setting // if ( sv_pure->integer != 0 ) { bGood = qtrue; nChkSum1 = nChkSum2 = 0; // we run the game, so determine which cgame and ui the client "should" be running //dlls are valid too now -rww bGood = (qboolean)(FS_FileIsInPAK("cgamex86.dll", &nChkSum1) == 1); if (bGood) bGood = (qboolean)(FS_FileIsInPAK("uix86.dll", &nChkSum2) == 1); nClientPaks = Cmd_Argc(); // start at arg 1 ( skip cl_paks ) nCurArg = 1; // we basically use this while loop to avoid using 'goto' :) while (bGood) { // must be at least 6: "cl_paks cgame ui @ firstref ... numChecksums" // numChecksums is encoded if (nClientPaks < 6) { bGood = qfalse; break; } // verify first to be the cgame checksum pArg = Cmd_Argv(nCurArg++); if (!pArg || *pArg == '@' || atoi(pArg) != nChkSum1 ) { bGood = qfalse; break; } // verify the second to be the ui checksum pArg = Cmd_Argv(nCurArg++); if (!pArg || *pArg == '@' || atoi(pArg) != nChkSum2 ) { bGood = qfalse; break; } // should be sitting at the delimeter now pArg = Cmd_Argv(nCurArg++); if (*pArg != '@') { bGood = qfalse; break; } // store checksums since tokenization is not re-entrant for (i = 0; nCurArg < nClientPaks; i++) { nClientChkSum[i] = atoi(Cmd_Argv(nCurArg++)); } // store number to compare against (minus one cause the last is the number of checksums) nClientPaks = i - 1; // make sure none of the client check sums are the same // so the client can't send 5 the same checksums for (i = 0; i < nClientPaks; i++) { for (j = 0; j < nClientPaks; j++) { if (i == j) continue; if (nClientChkSum[i] == nClientChkSum[j]) { bGood = qfalse; break; } } if (bGood == qfalse) break; } if (bGood == qfalse) break; // get the pure checksums of the pk3 files loaded by the server pPaks = FS_LoadedPakPureChecksums(); Cmd_TokenizeString( pPaks ); nServerPaks = Cmd_Argc(); if (nServerPaks > 1024) nServerPaks = 1024; for (i = 0; i < nServerPaks; i++) {//.........这里部分代码省略.........
开发者ID:ooxavenue,项目名称:JediKnightGalaxies,代码行数:101,
示例13: CL_GetServerCommand/*===================CL_GetServerCommandSet up argc/argv for the given command===================*/qboolean CL_GetServerCommand( int serverCommandNumber ) { char *s; char *cmd; static char bigConfigString[BIG_INFO_STRING]; int argc; // if we have irretrievably lost a reliable command, drop the connection if ( serverCommandNumber <= clc.serverCommandSequence - MAX_RELIABLE_COMMANDS ) { // when a demo record was started after the client got a whole bunch of // reliable commands then the client never got those first reliable commands if ( clc.demoplaying ) return qfalse; Com_Error( ERR_DROP, "CL_GetServerCommand: a reliable command was cycled out" ); return qfalse; } if ( serverCommandNumber > clc.serverCommandSequence ) { Com_Error( ERR_DROP, "CL_GetServerCommand: requested a command not received" ); return qfalse; } s = clc.serverCommands[ serverCommandNumber & ( MAX_RELIABLE_COMMANDS - 1 ) ]; clc.lastExecutedServerCommand = serverCommandNumber; Com_DPrintf( "serverCommand: %i : %s/n", serverCommandNumber, s );rescan: Cmd_TokenizeString( s ); cmd = Cmd_Argv(0); argc = Cmd_Argc(); if ( !strcmp( cmd, "disconnect" ) ) { // https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=552 // allow server to indicate why they were disconnected if ( argc >= 2 ) Com_Error( ERR_SERVERDISCONNECT, "Server disconnected - %s", Cmd_Argv( 1 ) ); else Com_Error( ERR_SERVERDISCONNECT, "Server disconnected" ); } if ( !strcmp( cmd, "bcs0" ) ) { Com_sprintf( bigConfigString, BIG_INFO_STRING, "cs %s /"%s", Cmd_Argv(1), Cmd_Argv(2) ); return qfalse; } if ( !strcmp( cmd, "bcs1" ) ) { s = Cmd_Argv(2); if( strlen(bigConfigString) + strlen(s) >= BIG_INFO_STRING ) { Com_Error( ERR_DROP, "bcs exceeded BIG_INFO_STRING" ); } strcat( bigConfigString, s ); return qfalse; } if ( !strcmp( cmd, "bcs2" ) ) { s = Cmd_Argv(2); if( strlen(bigConfigString) + strlen(s) + 1 >= BIG_INFO_STRING ) { Com_Error( ERR_DROP, "bcs exceeded BIG_INFO_STRING" ); } strcat( bigConfigString, s ); strcat( bigConfigString, "/"" ); s = bigConfigString; goto rescan; } if ( !strcmp( cmd, "cs" ) ) { CL_ConfigstringModified(); // reparse the string, because CL_ConfigstringModified may have done another Cmd_TokenizeString() Cmd_TokenizeString( s ); return qtrue; } if ( !strcmp( cmd, "map_restart" ) ) { // clear notify lines and outgoing commands before passing // the restart to the cgame Con_ClearNotify(); // reparse the string, because Con_ClearNotify() may have done another Cmd_TokenizeString() Cmd_TokenizeString( s ); Com_Memset( cl.cmds, 0, sizeof( cl.cmds ) ); return qtrue; } // the clientLevelShot command is used during development // to generate 128*128 screenshots from the intermission // point of levels for the menu system to use // we pass it along to the cgame to make apropriate adjustments, // but we also clear the console and notify lines here if ( !strcmp( cmd, "clientLevelShot" ) ) { // don't do it if we aren't running the server locally, // otherwise malicious remote servers could overwrite // the existing thumbnails if ( !com_sv_running->integer ) { return qfalse;//.........这里部分代码省略.........
开发者ID:pvtmert,项目名称:ioq3_dhd,代码行数:101,
示例14: dissect_quakeworld_ConnectionlessPacket//.........这里部分代码省略......... tvb, offset + Cmd_Argv_start(4), Cmd_Argv_length(4), infostring); info_tree = proto_item_add_subtree( info_item, ett_quakeworld_connectionless_connect_infostring); dissect_id_infostring(tvb, info_tree, offset + Cmd_Argv_start(4), wmem_strdup(wmem_packet_scope(), infostring), ett_quakeworld_connectionless_connect_infostring_key_value, hf_quakeworld_connectionless_connect_infostring_key_value, hf_quakeworld_connectionless_connect_infostring_key, hf_quakeworld_connectionless_connect_infostring_value); } } else if (strcmp(c,"getchallenge") == 0) { command = "Get Challenge"; command_len = Cmd_Argv_length(0); } else if (strcmp(c,"rcon") == 0) { const char* password; int i; char remaining[MAX_TEXT_SIZE+1]; proto_tree *argument_tree = NULL; command = "Remote Command"; command_len = Cmd_Argv_length(0); if (text_tree) { proto_item *argument_item; proto_tree_add_string(text_tree, hf_quakeworld_connectionless_command, tvb, offset, command_len, command); argument_item = proto_tree_add_string(text_tree, hf_quakeworld_connectionless_arguments, tvb, offset + Cmd_Argv_start(1), len - Cmd_Argv_start(1), text + Cmd_Argv_start(1)); argument_tree = proto_item_add_subtree(argument_item, ett_quakeworld_connectionless_arguments); command_finished=TRUE; } password = Cmd_Argv(1); if (argument_tree) { proto_tree_add_string(argument_tree, hf_quakeworld_connectionless_rcon_password, tvb, offset + Cmd_Argv_start(1), Cmd_Argv_length(1), password); } remaining[0] = '/0'; for (i=2; i<Cmd_Argc() ; i++) { g_strlcat (remaining, Cmd_Argv(i), MAX_TEXT_SIZE+1); g_strlcat (remaining, " ", MAX_TEXT_SIZE+1); } if (text_tree) { proto_tree_add_string(argument_tree, hf_quakeworld_connectionless_rcon_command, tvb, offset + Cmd_Argv_start(2), Cmd_Argv_start(Cmd_Argc()-1) + Cmd_Argv_length(Cmd_Argc()-1) - Cmd_Argv_start(2), remaining); } } else if (c[0]==A2A_PING && ( c[1]=='/0' || c[1]=='/n')) { command = "Ping"; command_len = 1; } else if (c[0]==A2A_ACK && ( c[1]=='/0' || c[1]=='/n')) { command = "Ack"; command_len = 1; } else { command = "Unknown"; command_len = len - 1; } } else { /* server to client commands */ if (text[0] == S2C_CONNECTION) { command = "Connected"; command_len = 1; } else if (text[0] == A2C_CLIENT_COMMAND) { command = "Client Command"; command_len = 1; /* stringz (command), stringz (localid) */ } else if (text[0] == A2C_PRINT) { command = "Print"; command_len = 1; /* string */ } else if (text[0] == A2A_PING) { command = "Ping"; command_len = 1; } else if (text[0] == S2C_CHALLENGE) { command = "Challenge"; command_len = 1; /* string, conversion */ } else { command = "Unknown"; command_len = len - 1; } } col_append_fstr(pinfo->cinfo, COL_INFO, " %s", command); if (!command_finished) { proto_tree_add_string(text_tree, hf_quakeworld_connectionless_command, tvb, offset, command_len, command); } /*offset += len;*/}
开发者ID:acaceres2176,项目名称:wireshark,代码行数:101,
示例15: CL_CgameSystemCalls/*====================CL_CgameSystemCallsThe cgame module is making a system call====================*/intptr_t CL_CgameSystemCalls( intptr_t *args ) { switch( args[0] ) { case CG_PRINT: Com_Printf( "%s", (const char*)VMA(1) ); return 0; case CG_ERROR: Com_Error( ERR_DROP, "%s", (const char*)VMA(1) ); return 0; case CG_MILLISECONDS: return Sys_Milliseconds(); case CG_CVAR_REGISTER: Cvar_Register( VMA(1), VMA(2), VMA(3), args[4] ); return 0; case CG_CVAR_UPDATE: Cvar_Update( VMA(1) ); return 0; case CG_CVAR_SET: Cvar_SetSafe( VMA(1), VMA(2) ); return 0; case CG_CVAR_VARIABLESTRINGBUFFER: Cvar_VariableStringBuffer( VMA(1), VMA(2), args[3] ); return 0; case CG_ARGC: return Cmd_Argc(); case CG_ARGV: Cmd_ArgvBuffer( args[1], VMA(2), args[3] ); return 0; case CG_ARGS: Cmd_ArgsBuffer( VMA(1), args[2] ); return 0; case CG_FS_FOPENFILE: return FS_FOpenFileByMode( VMA(1), VMA(2), args[3] ); case CG_FS_READ: FS_Read2( VMA(1), args[2], args[3] ); return 0; case CG_FS_WRITE: FS_Write( VMA(1), args[2], args[3] ); return 0; case CG_FS_FCLOSEFILE: FS_FCloseFile( args[1] ); return 0; case CG_FS_SEEK: return FS_Seek( args[1], args[2], args[3] ); case CG_SENDCONSOLECOMMAND: Cbuf_AddText( VMA(1) ); return 0; case CG_ADDCOMMAND: CL_AddCgameCommand( VMA(1) ); return 0; case CG_REMOVECOMMAND: Cmd_RemoveCommandSafe( VMA(1) ); return 0; case CG_SENDCLIENTCOMMAND: CL_AddReliableCommand(VMA(1), qfalse); return 0; case CG_UPDATESCREEN: // this is used during lengthy level loading, so pump message loop// Com_EventLoop(); // FIXME: if a server restarts here, BAD THINGS HAPPEN!// We can't call Com_EventLoop here, a restart will crash and this _does_ happen// if there is a map change while we are downloading at pk3.// ZOID SCR_UpdateScreen(); return 0; case CG_CM_LOADMAP: CL_CM_LoadMap( VMA(1) ); return 0; case CG_CM_NUMINLINEMODELS: return CM_NumInlineModels(); case CG_CM_INLINEMODEL: return CM_InlineModel( args[1] ); case CG_CM_TEMPBOXMODEL: return CM_TempBoxModel( VMA(1), VMA(2), /*int capsule*/ qfalse ); case CG_CM_TEMPCAPSULEMODEL: return CM_TempBoxModel( VMA(1), VMA(2), /*int capsule*/ qtrue ); case CG_CM_POINTCONTENTS: return CM_PointContents( VMA(1), args[2] ); case CG_CM_TRANSFORMEDPOINTCONTENTS: return CM_TransformedPointContents( VMA(1), args[2], VMA(3), VMA(4) ); case CG_CM_BOXTRACE: CM_BoxTrace( VMA(1), VMA(2), VMA(3), VMA(4), VMA(5), args[6], args[7], /*int capsule*/ qfalse ); return 0; case CG_CM_CAPSULETRACE: CM_BoxTrace( VMA(1), VMA(2), VMA(3), VMA(4), VMA(5), args[6], args[7], /*int capsule*/ qtrue ); return 0; case CG_CM_TRANSFORMEDBOXTRACE: CM_TransformedBoxTrace( VMA(1), VMA(2), VMA(3), VMA(4), VMA(5), args[6], args[7], VMA(8), VMA(9), /*int capsule*/ qfalse ); return 0; case CG_CM_TRANSFORMEDCAPSULETRACE: CM_TransformedBoxTrace( VMA(1), VMA(2), VMA(3), VMA(4), VMA(5), args[6], args[7], VMA(8), VMA(9), /*int capsule*/ qtrue ); return 0; case CG_CM_MARKFRAGMENTS: return re.MarkFragments( args[1], VMA(2), VMA(3), args[4], VMA(5), args[6], VMA(7) ); case CG_S_STARTSOUND://.........这里部分代码省略.........
开发者ID:pvtmert,项目名称:ioq3_dhd,代码行数:101,
示例16: SVC_InfoResponse/** SVC_InfoResponse* * Responds with short info for broadcast scans* The second parameter should be the current protocol version number.*/static void SVC_InfoResponse( const socket_t *socket, const netadr_t *address ){ int i, count; char *string; bool allow_empty = false, allow_full = false; if( sv_showInfoQueries->integer ) Com_Printf( "Info Packet %s/n", NET_AddressToString( address ) ); // KoFFiE: When not public and coming from a LAN address // assume broadcast and respond anyway, otherwise ignore if( ( ( !sv_public->integer ) && ( !NET_IsLANAddress( address ) ) ) || ( sv_maxclients->integer == 1 ) ) { return; } // ignore when in invalid server state if( sv.state < ss_loading || sv.state > ss_game ) return; // don't reply when we are locked for mm // if( SV_MM_IsLocked() ) // return; // different protocol version if( atoi( Cmd_Argv( 1 ) ) != APP_PROTOCOL_VERSION ) return; // check for full/empty filtered states for( i = 0; i < Cmd_Argc(); i++ ) { if( !Q_stricmp( Cmd_Argv( i ), "full" ) ) allow_full = true; if( !Q_stricmp( Cmd_Argv( i ), "empty" ) ) allow_empty = true; } count = 0; for( i = 0; i < sv_maxclients->integer; i++ ) { if( svs.clients[i].state >= CS_CONNECTED ) { count++; } } if( ( count == sv_maxclients->integer ) && !allow_full ) { return; } if( ( count == 0 ) && !allow_empty ) { return; } string = SV_ShortInfoString(); if( string ) Netchan_OutOfBandPrint( socket, address, "info/n%s", string );}
开发者ID:MaryJaneInChain,项目名称:qfusion,代码行数:68,
示例17: SV_VerifyPaks_f/*=================SV_VerifyPaks_fIf we are pure, disconnect the client if they do no meet the following conditions:1. the first two checksums match our view of cgame and ui2. there are no any additional checksums that we do not haveThis routine would be a bit simpler with a goto but i abstained=================*/static void SV_VerifyPaks_f( client_t *cl ) { int nChkSum1, nChkSum2, nClientPaks, nServerPaks, i, j, nCurArg; int nClientChkSum[1024]; int nServerChkSum[1024]; const char *pPaks, *pArg; qboolean bGood = qtrue; // if we are pure, we "expect" the client to load certain things from // certain pk3 files, namely we want the client to have loaded the // ui and cgame that we think should be loaded based on the pure setting // if ( sv_pure->integer != 0 ) { nChkSum1 = nChkSum2 = 0; // we run the game, so determine which cgame and ui the client "should" be running bGood = (FS_FileIsInPAK("vm/cgame.qvm", &nChkSum1) == 1); if (bGood) bGood = (FS_FileIsInPAK("vm/ui.qvm", &nChkSum2) == 1); nClientPaks = Cmd_Argc(); // start at arg 2 ( skip serverId cl_paks ) nCurArg = 1; pArg = Cmd_Argv(nCurArg++); if(!pArg) { bGood = qfalse; } else { // https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=475 // we may get incoming cp sequences from a previous checksumFeed, which we need to ignore // since serverId is a frame count, it always goes up if (atoi(pArg) < sv.checksumFeedServerId) { Com_DPrintf("ignoring outdated cp command from client %s/n", cl->name); return; } } // we basically use this while loop to avoid using 'goto' :) while (bGood) { // must be at least 6: "cl_paks cgame ui @ firstref ... numChecksums" // numChecksums is encoded if (nClientPaks < 6) { bGood = qfalse; break; } // verify first to be the cgame checksum pArg = Cmd_Argv(nCurArg++); if (!pArg || *pArg == '@' || atoi(pArg) != nChkSum1 ) { bGood = qfalse; break; } // verify the second to be the ui checksum pArg = Cmd_Argv(nCurArg++); if (!pArg || *pArg == '@' || atoi(pArg) != nChkSum2 ) { bGood = qfalse; break; } // should be sitting at the delimeter now pArg = Cmd_Argv(nCurArg++); if (*pArg != '@') { bGood = qfalse; break; } // store checksums since tokenization is not re-entrant for (i = 0; nCurArg < nClientPaks; i++) { nClientChkSum[i] = atoi(Cmd_Argv(nCurArg++)); } // store number to compare against (minus one cause the last is the number of checksums) nClientPaks = i - 1; // make sure none of the client check sums are the same // so the client can't send 5 the same checksums for (i = 0; i < nClientPaks; i++) { for (j = 0; j < nClientPaks; j++) { if (i == j) continue; if (nClientChkSum[i] == nClientChkSum[j]) { bGood = qfalse; break; } } if (bGood == qfalse)//.........这里部分代码省略.........
开发者ID:jkent,项目名称:tremulous,代码行数:101,
示例18: SVC_DirectConnect/** SVC_DirectConnect* A connection request that did not come from the master*/static void SVC_DirectConnect( const socket_t *socket, const netadr_t *address ){#ifdef TCP_ALLOW_CONNECT int incoming = 0;#endif char userinfo[MAX_INFO_STRING]; client_t *cl, *newcl; int i, version, game_port, challenge; int previousclients; int session_id; char *session_id_str; unsigned int ticket_id; bool tv_client; unsigned int time; Com_DPrintf( "SVC_DirectConnect (%s)/n", Cmd_Args() ); version = atoi( Cmd_Argv( 1 ) ); if( version != APP_PROTOCOL_VERSION ) { if( version <= 6 ) { // before reject packet was added Netchan_OutOfBandPrint( socket, address, "print/nServer is version %4.2f. Protocol %3i/n", APP_VERSION, APP_PROTOCOL_VERSION ); } else { Netchan_OutOfBandPrint( socket, address, "reject/n%i/n%i/nServer and client don't have the same version/n", DROP_TYPE_GENERAL, 0 ); } Com_DPrintf( " rejected connect from protocol %i/n", version ); return; } game_port = atoi( Cmd_Argv( 2 ) ); challenge = atoi( Cmd_Argv( 3 ) ); tv_client = ( atoi( Cmd_Argv( 5 ) ) & 1 ? true : false ); if( !Info_Validate( Cmd_Argv( 4 ) ) ) { Netchan_OutOfBandPrint( socket, address, "reject/n%i/n%i/nInvalid userinfo string/n", DROP_TYPE_GENERAL, 0 ); Com_DPrintf( "Connection from %s refused: invalid userinfo string/n", NET_AddressToString( address ) ); return; } Q_strncpyz( userinfo, Cmd_Argv( 4 ), sizeof( userinfo ) ); // force the IP key/value pair so the game can filter based on ip if( !Info_SetValueForKey( userinfo, "socket", NET_SocketTypeToString( socket->type ) ) ) { Netchan_OutOfBandPrint( socket, address, "reject/n%i/n%i/nError: Couldn't set userinfo (socket)/n", DROP_TYPE_GENERAL, 0 ); Com_DPrintf( "Connection from %s refused: couldn't set userinfo (socket)/n", NET_AddressToString( address ) ); return; } if( !Info_SetValueForKey( userinfo, "ip", NET_AddressToString( address ) ) ) { Netchan_OutOfBandPrint( socket, address, "reject/n%i/n%i/nError: Couldn't set userinfo (ip)/n", DROP_TYPE_GENERAL, 0 ); Com_DPrintf( "Connection from %s refused: couldn't set userinfo (ip)/n", NET_AddressToString( address ) ); return; } if( Cmd_Argc() >= 7 ) { // we have extended information, ticket-id and session-id Com_Printf("Extended information %s/n", Cmd_Argv(6) ); ticket_id = (unsigned int)atoi( Cmd_Argv(6) ); session_id_str = Info_ValueForKey( userinfo, "cl_mm_session" ); if( session_id_str != NULL ) session_id = atoi( session_id_str ); else session_id = 0; } else { ticket_id = 0; session_id = 0; }#ifdef TCP_ALLOW_CONNECT if( socket->type == SOCKET_TCP ) { // find the connection for( i = 0; i < MAX_INCOMING_CONNECTIONS; i++ ) { if( !svs.incoming[i].active ) continue; if( NET_CompareAddress( &svs.incoming[i].address, address ) && socket == &svs.incoming[i].socket ) break; } if( i == MAX_INCOMING_CONNECTIONS ) { Com_Error( ERR_FATAL, "Incoming connection not found./n" ); return;//.........这里部分代码省略.........
开发者ID:MaryJaneInChain,项目名称:qfusion,代码行数:101,
示例19: Cvar_ListModified_f/*=======================================================================================================================================Cvar_ListModified_f=======================================================================================================================================*/void Cvar_ListModified_f(void) { cvar_t *var; int totalModified; char *value; char *match; if (Cmd_Argc() > 1) { match = Cmd_Argv(1); } else { match = NULL; } totalModified = 0; for (var = cvar_vars; var; var = var->next) { if (!var->name || !var->modificationCount) { continue; } value = var->latchedString ? var->latchedString : var->string; if (!strcmp(value, var->resetString)) { continue; } totalModified++; if (match && !Com_Filter(match, var->name, qfalse)) { continue; } if (var->flags & CVAR_SERVERINFO) { Com_Printf("S"); } else { Com_Printf(" "); } if (var->flags & CVAR_SYSTEMINFO) { Com_Printf("s"); } else { Com_Printf(" "); } if (var->flags & CVAR_USERINFO) { Com_Printf("U"); } else { Com_Printf(" "); } if (var->flags & CVAR_ROM) { Com_Printf("R"); } else { Com_Printf(" "); } if (var->flags & CVAR_INIT) { Com_Printf("I"); } else { Com_Printf(" "); } if (var->flags & CVAR_ARCHIVE) { Com_Printf("A"); } else { Com_Printf(" "); } if (var->flags & CVAR_LATCH) { Com_Printf("L"); } else { Com_Printf(" "); } if (var->flags & CVAR_CHEAT) { Com_Printf("C"); } else { Com_Printf(" "); } if (var->flags & CVAR_USER_CREATED) { Com_Printf("?"); } else { Com_Printf(" "); } Com_Printf(" %s /"%s/", default /"%s/"/n", var->name, value, var->resetString); } Com_Printf("/n%i total modified cvars/n", totalModified);}
开发者ID:KuehnhammerTobias,项目名称:ioqw,代码行数:95,
示例20: CD_fstatic voidCD_f(void){ const char *command; int n; if (Cmd_Argc() < 2) return; command = Cmd_Argv(1); if (strcasecmp(command, "on") == 0) { enabled = true; return; } if (strcasecmp(command, "off") == 0) { if (playing) CDAudio_Stop(); enabled = false; return; } if (strcasecmp(command, "reset") == 0) { enabled = true; if (playing) CDAudio_Stop(); for (n = 0; n < 100; n++) remap[n] = n; CDAudio_GetAudioDiskInfo(); return; } if (strcasecmp(command, "remap") == 0) { int ret = Cmd_Argc() - 2; if (ret <= 0) { for (n = 1; n < 100; n++) if (remap[n] != n) Con_Printf(" %u -> %u/n", n, remap[n]); return; } for (n = 1; n <= ret; n++) remap[n] = Q_atoi(Cmd_Argv(n + 1)); return; } if (strcasecmp(command, "close") == 0) { CDAudio_CloseDoor(); return; } if (!cdValid) { CDAudio_GetAudioDiskInfo(); if (!cdValid) { Con_Printf("No CD in player./n"); return; } } if (strcasecmp(command, "play") == 0) { CDAudio_Play((byte)Q_atoi(Cmd_Argv(2)), false); return; } if (strcasecmp(command, "loop") == 0) { CDAudio_Play((byte)Q_atoi(Cmd_Argv(2)), true); return; } if (strcasecmp(command, "stop") == 0) { CDAudio_Stop(); return; } if (strcasecmp(command, "pause") == 0) { CDAudio_Pause(); return; } if (strcasecmp(command, "resume") == 0) { CDAudio_Resume(); return; } if (strcasecmp(command, "eject") == 0) { if (playing) CDAudio_Stop(); CDAudio_Eject(); cdValid = false; return; } if (strcasecmp(command, "info") == 0) { Con_Printf("%u tracks/n", maxTrack); if (playing) Con_Printf("Currently %s track %u/n", playLooping ? "looping" : "playing", playTrack); else if (wasPlaying) Con_Printf("Paused %s track %u/n", playLooping ? "looping" : "playing", playTrack); Con_Printf("Volume is %f/n", bgmvolume.value); return; }}
开发者ID:leilei-,项目名称:tyrquake,代码行数:93,
示例21: Con_Grep_f/*================Con_Grep_fFind all console lines containing a string================*/void Con_Grep_f( void ){ int l; char *search; char *printbuf = NULL; size_t pbAlloc = 0, pbLength = 0; if ( Cmd_Argc() != 2 ) { Com_Printf("%s", _( "usage: grep <string>/n" )); return; } // skip empty lines for ( l = consoleState.currentLine - consoleState.maxScrollbackLengthInLines + 1; l <= consoleState.currentLine; l++ ) { if ( consoleState.text[ CON_LINE( l ) ].ch ) { break; } } // check the remaining lines search = Cmd_Argv( 1 ); for ( ; l <= consoleState.currentLine; l++ ) { const char *buffer = Con_LineToString( l, qfalse ); if ( Q_stristr( buffer, search ) ) { size_t i; buffer = Con_LineToColouredString( l, qtrue ); i = strlen( buffer ); if ( pbLength + i >= pbAlloc ) { char *nb; // allocate in 16K chunks - more than adequate pbAlloc = ( pbLength + i + 1 + 16383) & ~16383; nb = Z_Malloc( pbAlloc ); if( printbuf ) { strcpy( nb, printbuf ); Z_Free( printbuf ); } printbuf = nb; } Q_strcat( printbuf, pbAlloc, buffer ); pbLength += i; } } if( printbuf ) { char tmpbuf[ MAXPRINTMSG ]; int i; // print out in chunks so we don't go over the MAXPRINTMSG limit for ( i = 0; i < pbLength; i += MAXPRINTMSG - 1 ) { Q_strncpyz( tmpbuf, printbuf + i, sizeof( tmpbuf ) ); Com_Printf( "%s", tmpbuf ); } Z_Free( printbuf ); }}
开发者ID:ZdrytchX,项目名称:Unvanquished-KoRx,代码行数:76,
示例22: CL_UISystemCalls//.........这里部分代码省略......... case UI_CVAR_UPDATE: Cvar_Update( (vmCvar_t *)VMA(1) ); return 0; case UI_CVAR_SET: Cvar_VM_Set( (const char *)VMA(1), (const char *)VMA(2), VM_UI ); return 0; case UI_CVAR_VARIABLEVALUE: return FloatAsInt( Cvar_VariableValue( (const char *)VMA(1) ) ); case UI_CVAR_VARIABLESTRINGBUFFER: Cvar_VariableStringBuffer( (const char *)VMA(1), (char *)VMA(2), args[3] ); return 0; case UI_CVAR_SETVALUE: Cvar_VM_SetValue( (const char *)VMA(1), VMF(2), VM_UI ); return 0; case UI_CVAR_RESET: Cvar_Reset( (const char *)VMA(1) ); return 0; case UI_CVAR_CREATE: Cvar_Get( (const char *)VMA(1), (const char *)VMA(2), args[3] ); return 0; case UI_CVAR_INFOSTRINGBUFFER: Cvar_InfoStringBuffer( args[1], (char *)VMA(2), args[3] ); return 0; case UI_ARGC: return Cmd_Argc(); case UI_ARGV: Cmd_ArgvBuffer( args[1], (char *)VMA(2), args[3] ); return 0; case UI_CMD_EXECUTETEXT: Cbuf_ExecuteText( args[1], (const char *)VMA(2) ); return 0; case UI_FS_FOPENFILE: return FS_FOpenFileByMode( (const char *)VMA(1), (int *)VMA(2), (fsMode_t)args[3] ); case UI_FS_READ: FS_Read( VMA(1), args[2], args[3] ); return 0; case UI_FS_WRITE: FS_Write( VMA(1), args[2], args[3] ); return 0; case UI_FS_FCLOSEFILE: FS_FCloseFile( args[1] ); return 0; case UI_FS_GETFILELIST: return FS_GetFileList( (const char *)VMA(1), (const char *)VMA(2), (char *)VMA(3), args[4] ); case UI_R_REGISTERMODEL: return re->RegisterModel( (const char *)VMA(1) ); case UI_R_REGISTERSKIN: return re->RegisterSkin( (const char *)VMA(1) );
开发者ID:adnanfzafar,项目名称:OpenJK,代码行数:67,
示例23: SV_Record_f// code is a merge of the cl_main.cpp function of the same name and SV_SendClientGameState in sv_client.cppstatic void SV_Record_f( void ) { char demoName[MAX_OSPATH]; char name[MAX_OSPATH]; int i; char *s; client_t *cl; if ( svs.clients == NULL ) { Com_Printf( "cannot record server demo - null svs.clients/n" ); return; } if ( Cmd_Argc() > 3 ) { Com_Printf( "record <demoname> <clientnum>/n" ); return; } if ( Cmd_Argc() == 3 ) { int clIndex = atoi( Cmd_Argv( 2 ) ); if ( clIndex < 0 || clIndex >= sv_maxclients->integer ) { Com_Printf( "Unknown client number %d./n", clIndex ); return; } cl = &svs.clients[clIndex]; } else { for ( i=0, cl=svs.clients ; i < sv_maxclients->integer ; i++, cl++ ) { if ( !cl->state ) { continue; } if ( cl->demo.demorecording ) { continue; } if ( cl->state == CS_ACTIVE ) { break; } } } if (cl - svs.clients >= sv_maxclients->integer) { Com_Printf( "No active client could be found./n" ); return; } if ( cl->demo.demorecording ) { Com_Printf( "Already recording./n" ); return; } if ( cl->state != CS_ACTIVE ) { Com_Printf( "Client is not active./n" ); return; } if ( Cmd_Argc() >= 2 ) { s = Cmd_Argv( 1 ); Q_strncpyz( demoName, s, sizeof( demoName ) ); Com_sprintf( name, sizeof( name ), "demos/%s.dm_%d", demoName, PROTOCOL_VERSION ); } else { // timestamp the file SV_DemoFilename( demoName, sizeof( demoName ) ); Com_sprintf (name, sizeof(name), "demos/%s.dm_%d", demoName, PROTOCOL_VERSION ); if ( FS_FileExists( name ) ) { Com_Printf( "Record: Couldn't create a file/n"); return; } } SV_RecordDemo( cl, demoName );}
开发者ID:ooxavenue,项目名称:JediKnightGalaxies,代码行数:79,
示例24: CL_CgameSystemCallsint CL_CgameSystemCalls( int *args ) {#ifndef __NO_JK2 if( Cvar_VariableIntegerValue("com_jk2") ) { args[0] = (int)CL_ConvertJK2SysCall((cgameJK2Import_t)args[0]); }#endif switch( args[0] ) { case CG_PRINT: Com_Printf( "%s", VMA(1) ); return 0; case CG_ERROR: Com_Error( ERR_DROP, S_COLOR_RED"%s", VMA(1) ); return 0; case CG_MILLISECONDS: return Sys_Milliseconds(); case CG_CVAR_REGISTER: Cvar_Register( (vmCvar_t *) VMA(1), (const char *) VMA(2), (const char *) VMA(3), args[4] ); return 0; case CG_CVAR_UPDATE: Cvar_Update( (vmCvar_t *) VMA(1) ); return 0; case CG_CVAR_SET: Cvar_Set( (const char *) VMA(1), (const char *) VMA(2) ); return 0; case CG_ARGC: return Cmd_Argc(); case CG_ARGV: Cmd_ArgvBuffer( args[1], (char *) VMA(2), args[3] ); return 0; case CG_ARGS: Cmd_ArgsBuffer( (char *) VMA(1), args[2] ); return 0; case CG_FS_FOPENFILE: return FS_FOpenFileByMode( (const char *) VMA(1), (int *) VMA(2), (fsMode_t) args[3] ); case CG_FS_READ: FS_Read( VMA(1), args[2], args[3] ); return 0; case CG_FS_WRITE: FS_Write( VMA(1), args[2], args[3] ); return 0; case CG_FS_FCLOSEFILE: FS_FCloseFile( args[1] ); return 0; case CG_SENDCONSOLECOMMAND: Cbuf_AddText( (const char *) VMA(1) ); return 0; case CG_ADDCOMMAND: CL_AddCgameCommand( (const char *) VMA(1) ); return 0; case CG_SENDCLIENTCOMMAND: CL_AddReliableCommand( (const char *) VMA(1) ); return 0; case CG_UPDATESCREEN: // this is used during lengthy level loading, so pump message loop Com_EventLoop(); // FIXME: if a server restarts here, BAD THINGS HAPPEN! SCR_UpdateScreen(); return 0;#ifdef _XBOX case CG_RMG_INIT: case CG_CM_REGISTER_TERRAIN: case CG_RE_INIT_RENDERER_TERRAIN: Com_Error( ERR_FATAL, "ERROR: Terrain unsupported on Xbox./n" );#else case CG_RMG_INIT: /* if (!com_sv_running->integer) { // don't do this if we are connected locally if (!TheRandomMissionManager) { TheRandomMissionManager = new CRMManager; } TheRandomMissionManager->SetLandScape( cmg.landScapes[args[1]] ); TheRandomMissionManager->LoadMission(qfalse); TheRandomMissionManager->SpawnMission(qfalse); cmg.landScapes[args[1]]->UpdatePatches(); } */ //this is SP.. I guess we're always the client and server.// cl.mRMGChecksum = cm.landScapes[args[1]]->get_rand_seed(); RM_CreateRandomModels(args[1], (const char *)VMA(2)); //cmg.landScapes[args[1]]->rand_seed(cl.mRMGChecksum); // restore it, in case we do a vid restart cmg.landScape->rand_seed(cmg.landScape->get_rand_seed());// TheRandomMissionManager->CreateMap(); return 0; case CG_CM_REGISTER_TERRAIN: return CM_RegisterTerrain((const char *)VMA(1), false)->GetTerrainId(); case CG_RE_INIT_RENDERER_TERRAIN: RE_InitRendererTerrain((const char *)VMA(1)); return 0;#endif // _XBOX case CG_CM_LOADMAP:#ifdef _XBOX CL_CM_LoadMap( (const char *) VMA(1) );#else CL_CM_LoadMap( (const char *) VMA(1), args[2] );#endif return 0;//.........这里部分代码省略.........
开发者ID:Arbixal,项目名称:OpenJK,代码行数:101,
示例25: SV_AddBanToListstatic void SV_AddBanToList( qboolean isexception ){ char *banstring; char addy2[NET_ADDRSTRMAXLEN]; netadr_t ip; int index, argc, mask; serverBan_t *curban; // make sure server is running if ( !com_sv_running->integer ) { Com_Printf( "Server is not running./n" ); return; } argc = Cmd_Argc(); if ( argc < 2 || argc > 3 ) { Com_Printf( "Usage: %s (ip[/subnet] | clientnum [subnet])/n", Cmd_Argv( 0 ) ); return; } if ( serverBansCount >= (int)ARRAY_LEN( serverBans ) ) { Com_Printf( "Error: Maximum number of bans/exceptions exceeded./n" ); return; } banstring = Cmd_Argv( 1 ); if ( strchr( banstring, '.' ) /*|| strchr( banstring, ':' )*/ ) { // This is an ip address, not a client num. if ( SV_ParseCIDRNotation( &ip, &mask, banstring ) ) { Com_Printf( "Error: Invalid address %s/n", banstring ); return; } } else { client_t *cl; // client num. cl = SV_GetPlayerByNum(); if ( !cl ) { Com_Printf( "Error: Playernum %s does not exist./n", Cmd_Argv( 1 ) ); return; } ip = cl->netchan.remoteAddress; if ( argc == 3 ) { mask = atoi( Cmd_Argv( 2 ) ); if ( ip.type == NA_IP ) { if ( mask < 1 || mask > 32 ) mask = 32; } else mask = 32; } else mask = 32; } if ( ip.type != NA_IP ) { Com_Printf( "Error: Can ban players connected via the internet only./n" ); return; } // first check whether a conflicting ban exists that would supersede the new one. for ( index = 0; index < serverBansCount; index++ ) { curban = &serverBans[index]; if ( curban->subnet <= mask ) { if ( (curban->isexception || !isexception) && NET_CompareBaseAdrMask( curban->ip, ip, curban->subnet ) ) { Q_strncpyz( addy2, NET_AdrToString( ip ), sizeof( addy2 ) ); Com_Printf( "Error: %s %s/%d supersedes %s %s/%d/n", curban->isexception ? "Exception" : "Ban", NET_AdrToString( curban->ip ), curban->subnet, isexception ? "exception" : "ban", addy2, mask ); return; } } if ( curban->subnet >= mask ) { if ( !curban->isexception && isexception && NET_CompareBaseAdrMask( curban->ip, ip, mask ) ) { Q_strncpyz( addy2, NET_AdrToString( curban->ip ), sizeof( addy2 ) );//.........这里部分代码省略.........
开发者ID:ooxavenue,项目名称:JediKnightGalaxies,代码行数:101,
示例26: SV_WriteDownloadToClient/*==================SV_WriteDownloadToClientCheck to see if the client wants a file, open it if needed and start pumping the clientFill up msg with data ==================*/void SV_WriteDownloadToClient( client_t *cl , msg_t *msg ){ int curindex; int rate; int blockspersnap; int idPack = 0, missionPack = 0, unreferenced = 1; char errorMessage[1024]; char pakbuf[MAX_QPATH], *pakptr; int numRefPaks; if (!*cl->downloadName) return; // Nothing being downloaded if (!cl->download) { // Chop off filename extension. Com_sprintf(pakbuf, sizeof(pakbuf), "%s", cl->downloadName); pakptr = Q_strrchr(pakbuf, '.'); if(pakptr) { *pakptr = '/0'; // Check for pk3 filename extension if(!Q_stricmp(pakptr + 1, "pk3")) { const char *referencedPaks = FS_ReferencedPakNames(); // Check whether the file appears in the list of referenced // paks to prevent downloading of arbitrary files. Cmd_TokenizeStringIgnoreQuotes(referencedPaks); numRefPaks = Cmd_Argc(); for(curindex = 0; curindex < numRefPaks; curindex++) { if(!FS_FilenameCompare(Cmd_Argv(curindex), pakbuf)) { unreferenced = 0; // now that we know the file is referenced, // check whether it's legal to download it. missionPack = FS_idPak(pakbuf, "missionpack"); idPack = missionPack || FS_idPak(pakbuf, BASEGAME); break; } } } } // We open the file here if ( !(sv_allowDownload->integer & DLF_ENABLE) || (sv_allowDownload->integer & DLF_NO_UDP) || idPack || unreferenced || ( cl->downloadSize = FS_SV_FOpenFileRead( cl->downloadName, &cl->download ) ) <= 0 ) { // cannot auto-download file if(unreferenced) { Com_Printf("clientDownload: %d : /"%s/" is not referenced and cannot be downloaded./n", (int) (cl - svs.clients), cl->downloadName); Com_sprintf(errorMessage, sizeof(errorMessage), "File /"%s/" is not referenced and cannot be downloaded.", cl->downloadName); } else if (idPack) { Com_Printf("clientDownload: %d : /"%s/" cannot download id pk3 files/n", (int) (cl - svs.clients), cl->downloadName); if (missionPack) { Com_sprintf(errorMessage, sizeof(errorMessage), "Cannot autodownload Team Arena file /"%s/"/n" "The Team Arena mission pack can be found in your local game store.", cl->downloadName); } else { Com_sprintf(errorMessage, sizeof(errorMessage), "Cannot autodownload id pk3 file /"%s/"", cl->downloadName); } } else if ( !(sv_allowDownload->integer & DLF_ENABLE) || (sv_allowDownload->integer & DLF_NO_UDP) ) { Com_Printf("clientDownload: %d : /"%s/" download disabled", (int) (cl - svs.clients), cl->downloadName); if (sv_pure->integer) { Com_sprintf(errorMessage, sizeof(errorMessage), "Could not download /"%s/" because autodownloading is disabled on the server./n/n" "You will need to get this file elsewhere before you " "can connect to this pure server./n", cl->downloadName); } else { Com_sprintf(errorMessage, sizeof(errorMessage), "Could not download /"%s/" because autodownloading is disabled on the server./n/n" "The server you are connecting to is not a pure server, " "set autodownload to No in your settings and you might be " "able to join the game anyway./n", cl->downloadName); } } else { // NOTE TTimo this is NOT supposed to happen unless bug in our filesystem scheme? // if the pk3 is referenced, it must have been found somewhere in the filesystem Com_Printf("clientDownload: %d : /"%s/" file not found on server/n", (int) (cl - svs.clients), cl->downloadName); Com_sprintf(errorMessage, sizeof(errorMessage), "File /"%s/" not found on server for autodownloading./n", cl->downloadName); } MSG_WriteByte( msg, svc_download ); MSG_WriteShort( msg, 0 ); // client is expecting block zero//.........这里部分代码省略.........
开发者ID:AlienHoboken,项目名称:Tremulous-W-Server,代码行数:101,
示例27: SV_BeginDownload_f/*==================SV_BeginDownload_f==================*/void SV_BeginDownload_f(void){ char *name, *p; size_t length; qboolean valid;// extern int file_from_pak; // ZOID did file come from pak? int offset = 0; name = Cmd_Argv(1); if (Cmd_Argc() > 2) offset = atoi(Cmd_Argv(2)); // downloaded offset // r1ch fix: name is always filtered for security reasons StripHighBits (name, 1); // hacked by zoid to allow more conrol over download // first off, no .. or global allow check // r1ch fix: for some ./ references in maps, eg ./textures/map/file length = strlen(name); p = name; while ((p = strstr (p, "./"))) { memmove (p, p+2, length - (p - name) - 1); length -= 2; } // r1ch fix: block the really nasty ones - /server.cfg will download from mod root on win32, .. is obvious if (name[0] == '//' || strstr (name, "..")) { Com_Printf ("Refusing illegal download path %s to %s/n", name, sv_client->name); MSG_WriteByte (&sv_client->netchan.message, svc_download); MSG_WriteShort (&sv_client->netchan.message, -1); MSG_WriteByte (&sv_client->netchan.message, 0); Com_Printf ("Client %s[%s] tried to download illegal path: %s/n", sv_client->name, NET_AdrToString (sv_client->netchan.remote_address), name); SV_DropClient (sv_client); return; } else if (offset < 0) // r1ch fix: negative offset will crash on read { Com_Printf ("Refusing illegal download offset %d to %s/n", offset, sv_client->name); MSG_WriteByte (&sv_client->netchan.message, svc_download); MSG_WriteShort (&sv_client->netchan.message, -1); MSG_WriteByte (&sv_client->netchan.message, 0); Com_Printf ("Client %s[%s] supplied illegal download offset for %s: %d/n", sv_client->name, NET_AdrToString (sv_client->netchan.remote_address), name, offset); SV_DropClient (sv_client); return; } else if ( !length || name[0] == 0 // empty name, maybe as result of ./ normalize || !IsValidChar(name[0]) // r1ch: / is bad in general, client won't even write properly if we do sent it || strchr (name, '//') // MUST be in a subdirectory, unless a pk3 || (!strstr (name, "/") && strcmp(name+strlen(name)-4, ".pk3")) // r1ch: another bug, maps/. will fopen(".") -> crash || !IsValidChar(name[length-1]) )/* if (strstr (name, "..") || !allow_download->value // leading dot is no good || *name == '.' // leading slash bad as well, must be in subdir || *name == '/' // next up, skin check || (strncmp(name, "players/", 8) == 0 && !allow_download_players->value) // now models || (strncmp(name, "models/", 7) == 0 && !allow_download_models->value) // now sounds || (strncmp(name, "sound/", 6) == 0 && !allow_download_sounds->value) // now maps (note special case for maps, must not be in pak) || (strncmp(name, "maps/", 5) == 0 && !allow_download_maps->value) // MUST be in a subdirectory, unless a pk3 || (!strstr (name, "/") && strcmp(name+strlen(name)-4, ".pk3")) ) */ { // don't allow anything with .. path MSG_WriteByte (&sv_client->netchan.message, svc_download); MSG_WriteShort (&sv_client->netchan.message, -1); MSG_WriteByte (&sv_client->netchan.message, 0); return; } valid = true; if ( !allow_download->value || (strncmp(name, "players/", 8) == 0 && !allow_download_players->value) || (strncmp(name, "models/", 7) == 0 && !allow_download_models->value) || (strncmp(name, "sound/", 6) == 0 && !allow_download_sounds->value) || (strncmp(name, "maps/", 5) == 0 && !allow_download_maps->value) || (strncmp(name, "pics/", 5) == 0 && !allow_download_pics->value) || ( ((strncmp(name, "env/", 4) == 0 || strncmp(name, "textures/", 9) == 0)) && !allow_download_textures->value ) ) valid = false; if (!valid) { MSG_WriteByte (&sv_client->netchan.message, svc_download); MSG_WriteShort (&sv_client->netchan.message, -1);//.........这里部分代码省略.........
开发者ID:Kiln707,项目名称:KMQuake2,代码行数:101,
示例28: Log_log_fstatic void Log_log_f(void) { char *fulllogname; FILE *templog; void *buf; switch (Cmd_Argc()) { case 1: if (autologging) Com_Printf("Auto console logging is in progress/n"); else if (Log_IsLogging()) Com_Printf("Logging to %s/n", logfilename); else Com_Printf("Not logging/n"); return; case 2: if (!strcasecmp(Cmd_Argv(1), "stop")) { if (autologging) { Log_AutoLogging_StopMatch(); } else { if (Log_IsLogging()) { Log_Stop(); Com_Printf("Stopped logging to %s/n", logfilename); } else { Com_Printf("Not logging/n"); } } return; } if (autologging) { Com_Printf("Auto console logging must be stopped first!/n"); return; } if (Log_IsLogging()) { Log_Stop(); Com_Printf("Stopped logging to %s/n", logfilename); } strlcpy(logfilename, Cmd_Argv(1), sizeof(logfilename) - 4); Util_Process_Filename(logfilename); if (!Util_Is_Valid_Filename(logfilename)) { Com_Printf(Util_Invalid_Filename_Msg("filename")); return; } COM_ForceExtensionEx (logfilename, ".log", sizeof (logfilename)); fulllogname = va("%s/%s", Log_LogDirectory(), logfilename); if (!(templog = fopen (fulllogname, log_readable.value ? "w" : "wb"))) { FS_CreatePath(fulllogname); if (!(templog = fopen (fulllogname, log_readable.value ? "w" : "wb"))) { Com_Printf("Error: Couldn't open %s/n", logfilename); return; } } buf = Q_calloc(1, LOGFILEBUFFER); if (!buf) { Com_Printf("Not enough memory to allocate log buffer/n"); return; } memlogfile = FSMMAP_OpenVFS(buf, LOGFILEBUFFER); Com_Printf("Logging to %s/n", logfilename); logfile = templog; break; default: Com_Printf("Usage: %s [filename | stop]/n", Cmd_Argv(0)); return; }}
开发者ID:DeejStar,项目名称:ezquake-source,代码行数:68,
注:本文中的Cmd_Argc函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ Cmd_ArgsFrom函数代码示例 C++ Cmd_AddCommand函数代码示例 |