void wswcurl_init( void ) { if( wswcurl_mempool ) { return; } wswcurl_mempool = Mem_AllocPool( NULL, "Curl" ); // HTTP proxy settings http_proxy = Cvar_Get( "http_proxy", "", CVAR_ARCHIVE ); http_proxyuserpwd = Cvar_Get( "http_proxyuserpwd", "", CVAR_ARCHIVE ); wswcurl_loadlib(); if( curlLibrary ) { qcurl_global_init( CURL_GLOBAL_ALL ); curldummy = qcurl_easy_init(); curlmulti = qcurl_multi_init(); } curldummy_mutex = QMutex_Create(); http_requests_mutex = QMutex_Create(); #ifdef USE_OPENSSL if( cryptoLibrary ) { int mutex_num; crypto_num_mutexes = qCRYPTO_num_locks(); crypto_mutexes = WMALLOC( crypto_num_mutexes * sizeof( *crypto_mutexes ) ); for( mutex_num = 0; mutex_num < crypto_num_mutexes; mutex_num++ ) crypto_mutexes[mutex_num] = QMutex_Create(); qCRYPTO_set_locking_callback( wswcurl_crypto_lockcallback ); } #endif }
/* * QBufPipe_Create */ qbufPipe_t *QBufPipe_Create( size_t bufSize, int flags ) { qbufPipe_t *pipe = malloc( sizeof( *pipe ) + bufSize ); memset( pipe, 0, sizeof( *pipe ) ); pipe->blockWrite = flags & 1; pipe->buf = (char *)( pipe + 1 ); pipe->bufSize = bufSize; pipe->cmdbuf_mutex = QMutex_Create(); pipe->nonempty_condvar = QCondVar_Create(); pipe->nonempty_mutex = QMutex_Create(); return pipe; }
/* * Memory_Init */ void Memory_Init( void ) { assert( !memory_initialized ); memMutex = QMutex_Create(); zoneMemPool = Mem_AllocPool( NULL, "Zone" ); tempMemPool = Mem_AllocTempPool( "Temporary Memory" ); memory_initialized = qtrue; }
void wswcurl_init( void ) { wswcurl_mempool = Mem_AllocPool( NULL, "Curl" ); curldummy = curl_easy_init(); curlmulti = curl_multi_init(); http_requests_mutex = QMutex_Create(); // HTTP proxy settings http_proxy = Cvar_Get( "http_proxy", "", CVAR_ARCHIVE ); http_proxyuserpwd = Cvar_Get( "http_proxyuserpwd", "", CVAR_ARCHIVE ); }
/* * CL_MasterAddressCache_Init */ static void CL_MasterAddressCache_Init( void ) { int numMasters; const char *ptr; const char *master; const char *masterservers; Trie_Create( TRIE_CASE_INSENSITIVE, &serverlist_masters_trie ); resolverThreads = NULL; masterservers = Cvar_String( "masterservers" ); if( !*masterservers ) { return; } // count the number of master servers numMasters = 0; for( ptr = masterservers; ptr; ) { master = COM_Parse( &ptr ); if( !*master ) { break; } numMasters++; } // don't allow too many as each will spawn its own resolver thread if( numMasters > MAX_MASTER_SERVERS ) numMasters = MAX_MASTER_SERVERS; resolveLock = QMutex_Create(); if( resolveLock != NULL ) { unsigned numResolverThreads; numResolverThreads = 0; resolverThreads = malloc( sizeof( *resolverThreads ) * (numMasters+1) ); memset( resolverThreads, 0, sizeof( *resolverThreads ) * (numMasters+1) ); for( ptr = masterservers; ptr; ) { char *master_copy; qthread_t *thread; master = COM_Parse( &ptr ); if( !*master ) break; master_copy = ( char * )malloc( strlen( master ) + 1 ); memcpy( master_copy, master, strlen( master ) + 1 ); thread = QThread_Create( CL_MasterResolverThreadEntry, ( void * )master_copy ); if( thread != NULL ) { resolverThreads[numResolverThreads++] = thread; continue; } // we shouldn't get here if all goes well with the resolving thread free( master_copy ); } } }
/* * Qcommon_Init */ void Qcommon_Init( int argc, char **argv ) { if( setjmp( abortframe ) ) Sys_Error( "Error during initialization: %s", com_errormsg ); QThreads_Init(); com_print_mutex = QMutex_Create(); // initialize memory manager Memory_Init(); // prepare enough of the subsystems to handle // cvar and command buffer management COM_InitArgv( argc, argv ); Cbuf_Init(); // initialize cmd/cvar/dynvar tries Cmd_PreInit(); Cvar_PreInit(); Dynvar_PreInit(); // create basic commands and cvars Cmd_Init(); Cvar_Init(); Dynvar_Init(); dynvars_initialized = qtrue; wswcurl_init(); Key_Init(); // we need to add the early commands twice, because // a basepath or cdpath needs to be set before execing // config files, but we want other parms to override // the settings of the config files Cbuf_AddEarlyCommands( qfalse ); Cbuf_Execute(); // wsw : aiwa : create dynvars (needs to be completed before .cfg scripts are executed) Dynvar_Create( "sys_uptime", qtrue, Com_Sys_Uptime_f, DYNVAR_READONLY ); Dynvar_Create( "frametick", qfalse, DYNVAR_WRITEONLY, DYNVAR_READONLY ); Dynvar_Create( "quit", qfalse, DYNVAR_WRITEONLY, DYNVAR_READONLY ); Dynvar_Create( "irc_connected", qfalse, Irc_GetConnected_f, Irc_SetConnected_f ); Sys_InitDynvars(); CL_InitDynvars(); #ifdef TV_SERVER_ONLY tv_server = Cvar_Get( "tv_server", "1", CVAR_NOSET ); Cvar_ForceSet( "tv_server", "1" ); #else tv_server = Cvar_Get( "tv_server", "0", CVAR_NOSET ); #endif #ifdef DEDICATED_ONLY dedicated = Cvar_Get( "dedicated", "1", CVAR_NOSET ); Cvar_ForceSet( "dedicated", "1" ); #else dedicated = Cvar_Get( "dedicated", "0", CVAR_NOSET ); #endif #ifdef MATCHMAKER mm_server = Cvar_Get( "mm_server", "1", CVAR_READONLY ); Cvar_ForceSet( "mm_server", "1" ); #else mm_server = Cvar_Get( "mm_server", "0", CVAR_READONLY ); #endif FS_Init(); Cbuf_AddText( "exec default.cfg\n" ); if( !dedicated->integer ) { Cbuf_AddText( "exec config.cfg\n" ); Cbuf_AddText( "exec autoexec.cfg\n" ); } else if( mm_server->integer ) { Cbuf_AddText( "exec mmaker_autoexec.cfg\n" ); } else if( tv_server->integer ) { Cbuf_AddText( "exec tvserver_autoexec.cfg\n" ); } else { Cbuf_AddText( "exec dedicated_autoexec.cfg\n" ); } Cbuf_AddEarlyCommands( qtrue ); Cbuf_Execute(); // // init commands and vars // Memory_InitCommands(); Qcommon_InitCommands(); host_speeds = Cvar_Get( "host_speeds", "0", 0 ); log_stats = Cvar_Get( "log_stats", "0", 0 ); developer = Cvar_Get( "developer", "0", 0 ); timescale = Cvar_Get( "timescale", "1.0", CVAR_CHEAT ); fixedtime = Cvar_Get( "fixedtime", "0", CVAR_CHEAT ); if( tv_server->integer ) logconsole = Cvar_Get( "logconsole", "tvconsole.log", CVAR_ARCHIVE ); else if( dedicated->integer ) logconsole = Cvar_Get( "logconsole", "wswconsole.log", CVAR_ARCHIVE ); else logconsole = Cvar_Get( "logconsole", "", CVAR_ARCHIVE ); logconsole_append = Cvar_Get( "logconsole_append", "1", CVAR_ARCHIVE ); logconsole_flush = Cvar_Get( "logconsole_flush", "0", CVAR_ARCHIVE ); logconsole_timestamp = Cvar_Get( "logconsole_timestamp", "0", CVAR_ARCHIVE ); com_showtrace = Cvar_Get( "com_showtrace", "0", 0 ); com_introPlayed3 = Cvar_Get( "com_introPlayed3", "0", CVAR_ARCHIVE ); Cvar_Get( "irc_server", "irc.quakenet.org", CVAR_ARCHIVE ); Cvar_Get( "irc_port", "6667", CVAR_ARCHIVE ); Cvar_Get( "irc_nick", APPLICATION "Player", CVAR_ARCHIVE ); Cvar_Get( "irc_user", APPLICATION "User", CVAR_ARCHIVE ); Cvar_Get( "irc_password", "", CVAR_ARCHIVE ); Cvar_Get( "gamename", APPLICATION, CVAR_READONLY ); versioncvar = Cvar_Get( "version", APP_VERSION_STR " " CPUSTRING " " __DATE__ " " BUILDSTRING, CVAR_SERVERINFO|CVAR_READONLY ); revisioncvar = Cvar_Get( "revision", SVN_RevString(), CVAR_READONLY ); Sys_Init(); NET_Init(); Netchan_Init(); CM_Init(); Steam_LoadLibrary(); Com_ScriptModule_Init(); MM_Init(); SV_Init(); CL_Init(); SCR_EndLoadingPlaque(); if( !dedicated->integer ) { Cbuf_AddText( "exec stuffcmds.cfg\n" ); } else if( mm_server->integer ) { Cbuf_AddText( "exec mmaker_stuffcmds.cfg\n" ); } else if( tv_server->integer ) { Cbuf_AddText( "exec tvserver_stuffcmds.cfg\n" ); } else { Cbuf_AddText( "exec dedicated_stuffcmds.cfg\n" ); } // add + commands from command line if( !Cbuf_AddLateCommands() ) { // if the user didn't give any commands, run default action if( !dedicated->integer ) { // only play the introduction sequence once if( !com_introPlayed3->integer ) { Cvar_ForceSet( com_introPlayed3->name, "1" ); #if !defined(__MACOSX__) && !defined(__ANDROID__) Cbuf_AddText( "cinematic intro.roq\n" ); #endif } } } else { // the user asked for something explicit // so drop the loading plaque SCR_EndLoadingPlaque(); } Com_Printf( "\n====== %s Initialized ======\n", APPLICATION ); Cbuf_Execute(); }