void CHLTVDemoRecorder::WriteServerInfo() { byte buffer[ NET_MAX_PAYLOAD ]; bf_write msg( "CHLTVDemoRecorder::WriteServerInfo", buffer, sizeof( buffer ) ); SVC_ServerInfo serverinfo; // create serverinfo message // on the master demos are using sv object, on relays hltv CBaseServer *pServer = hltv->IsMasterProxy()?(CBaseServer*)(&sv):(CBaseServer*)(hltv); hltv->FillServerInfo( serverinfo ); // fill rest of info message serverinfo.WriteToBuffer( msg ); // send first tick NET_Tick signonTick( m_nSignonTick, 0, 0 ); signonTick.WriteToBuffer( msg ); // write stringtable baselines #ifndef SHARED_NET_STRING_TABLES pServer->m_StringTables->WriteBaselines( msg ); #endif // Write replicated ConVars to non-listen server clients only NET_SetConVar convars; // build a list of all replicated convars Host_BuildConVarUpdateMessage( &convars, FCVAR_REPLICATED, true ); if ( hltv->IsMasterProxy() ) { // for SourceTV server demos write set "tv_transmitall 1" even // if it's off for the real broadcast NET_SetConVar::cvar_t acvar; Q_strncpy( acvar.name, "tv_transmitall", MAX_OSPATH ); Q_strncpy( acvar.value, "1", MAX_OSPATH ); convars.m_ConVars.AddToTail( acvar ); } // write convars to demo convars.WriteToBuffer( msg ); // send signon state NET_SignonState signonMsg( SIGNONSTATE_NEW, pServer->GetSpawnCount() ); signonMsg.WriteToBuffer( msg ); WriteMessages( dem_signon, msg ); }
int main(int argc,char *argv[]) { struct pgpmainBones *mainbPtr = &_pgp_mainBones; struct pgpargsBones *argsbPtr; struct pgpfileBones *filebPtr; struct pgpenvBones *envbPtr; PGPContextRef mainContext; int errorLvl = 0, status; PGPError err = PGPsdkInit(); pgpAssertNoErr(err); err = PGPsdkNetworkLibInit(); pgpAssertNoErr(err); err = PGPNewContext( kPGPsdkAPIVersion, &mainContext ); pgpAssertNoErr(err); err = pgpInitSDKPrefsDir( mainContext ); pgpAssertNoErr(err); initMainBones( mainbPtr, mainContext ); signonMsg(mainbPtr); /* link the context and initialize what used to be the global variables. */ argsbPtr = mainbPtr->argsbPtr; filebPtr = mainbPtr->filebPtr; envbPtr = mainbPtr->envbPtr; err = pgpParseArgs( mainbPtr, argc, argv, &errorLvl); /* parse the arguments */ if(err != 0) goto ex; if (argsbPtr->keyFlag && argsbPtr->keyChar == '\0') { keyUsage(filebPtr,&errorLvl); goto ex; } if (argsbPtr->groupFlag && argsbPtr->groupChar == '\0') { groupUsage(filebPtr,&errorLvl); goto ex; } /* * Write to stdout if explicitly asked to, or in filter mode and * no explicit file name was given. */ mainbPtr->outputStdout = argsbPtr->outputFileName ? strcmp(argsbPtr->outputFileName, "-") == 0 : envbPtr->filterMode; #if 1 /* At request of Peter Simons, use stderr always. Sounds reasonable. */ /* JIS: Put this code back in... removing it broke too many things */ if (!mainbPtr->outputStdout) filebPtr->pgpout = stdout; #endif #if defined(PGP_UNIX) || defined(VMS) umask(077); /* Make files default to private */ #endif initSignals(); /* Catch signals */ /* get our groups...*/ err = pgpInitializeWorkingGroupSet( mainbPtr ); if (argsbPtr->keyFlag) { status = doKeyOpt( mainbPtr, argsbPtr->keyChar, &errorLvl ); if (status < 0) { userError(filebPtr,&errorLvl); goto ex; } errorLvl=status; goto ex; } if(argsbPtr->groupFlag) { status = doGroupOpt( mainbPtr, argsbPtr->groupChar, &errorLvl ); if( status < 0 ) { userError(filebPtr,&errorLvl); goto ex; } errorLvl=status; goto ex; } err = pgpProcessArgs(mainbPtr, &errorLvl); ex: err = pgpFinalizeWorkingGroupSet( mainbPtr ); pgpTearDown( mainbPtr, &errorLvl ); exit(errorLvl); /*NOTREACHED*/ return errorLvl; }