/* ======================== VM_M_setserverlistmaskstring setserverlistmaskstring(float mask, float fld, string str, float op) 0-511 and 512 - 1024 or ======================== */ static void VM_M_setserverlistmaskstring(prvm_prog_t *prog) { const char *str; int masknr; serverlist_mask_t *mask; int field; VM_SAFEPARMCOUNT( 4, VM_M_setserverlistmaskstring ); str = PRVM_G_STRING( OFS_PARM2 ); masknr = (int)PRVM_G_FLOAT( OFS_PARM0 ); if( masknr >= 0 && masknr <= SERVERLIST_ANDMASKCOUNT ) mask = &serverlist_andmasks[masknr]; else if( masknr >= 512 && masknr - 512 <= SERVERLIST_ORMASKCOUNT ) mask = &serverlist_ormasks[masknr - 512 ]; else { VM_Warning(prog, "VM_M_setserverlistmaskstring: invalid mask number %i\n", masknr ); return; } field = (int) PRVM_G_FLOAT( OFS_PARM1 ); switch( field ) { case SLIF_CNAME: strlcpy( mask->info.cname, str, sizeof(mask->info.cname) ); break; case SLIF_NAME: strlcpy( mask->info.name, str, sizeof(mask->info.name) ); break; case SLIF_QCSTATUS: strlcpy( mask->info.qcstatus, str, sizeof(mask->info.qcstatus) ); break; case SLIF_PLAYERS: strlcpy( mask->info.players, str, sizeof(mask->info.players) ); break; case SLIF_MAP: strlcpy( mask->info.map, str, sizeof(mask->info.map) ); break; case SLIF_MOD: strlcpy( mask->info.mod, str, sizeof(mask->info.mod) ); break; case SLIF_GAME: strlcpy( mask->info.game, str, sizeof(mask->info.game) ); break; default: VM_Warning(prog, "VM_M_setserverlistmaskstring: Bad field number %i passed!\n", field ); return; } mask->active = true; mask->tests[field] = (serverlist_maskop_t)((int)PRVM_G_FLOAT( OFS_PARM3 )); }
static void VM_M_crypto_getidfp(prvm_prog_t *prog) { lhnetaddress_t addr; const char *s; char idfp[FP64_SIZE + 1]; VM_SAFEPARMCOUNT(1,VM_M_crypto_getidfp); s = PRVM_G_STRING( OFS_PARM0 ); VM_CheckEmptyString( prog, s ); if(LHNETADDRESS_FromString(&addr, s, 26000) && Crypto_RetrieveHostKey(&addr, NULL, NULL, 0, idfp, sizeof(idfp), NULL)) PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, idfp ); else PRVM_G_INT( OFS_RETURN ) = OFS_NULL; }
static void VM_M_crypto_getencryptlevel(prvm_prog_t *prog) { lhnetaddress_t addr; const char *s; int aeslevel; char vabuf[1024]; VM_SAFEPARMCOUNT(1,VM_M_crypto_getencryptlevel); s = PRVM_G_STRING( OFS_PARM0 ); VM_CheckEmptyString( prog, s ); if(LHNETADDRESS_FromString(&addr, s, 26000) && Crypto_RetrieveHostKey(&addr, NULL, NULL, 0, NULL, 0, &aeslevel)) PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString(prog, aeslevel ? va(vabuf, sizeof(vabuf), "%d AES128", aeslevel) : "0"); else PRVM_G_INT( OFS_RETURN ) = OFS_NULL; }
static OSGK_ScriptResult dpGlobal_query (void* objTag, void* methTag, size_t numParams, OSGK_ScriptVariant** params, OSGK_ScriptVariant** returnVal) { clgecko_t *instance = (clgecko_t *) objTag; OSGK_ScriptVariant* strVal; OSGK_ScriptResult result = srFailed; prvm_prog_t * saveProg; /* Can happen when created from console */ if (instance->ownerProg < 0) return srFailed; /* Require exactly one param, for now */ if (numParams != 1) return srFailed; strVal = osgk_variant_convert (params[0], svtString); if (strVal == 0) return srFailed; saveProg = prog; PRVM_SetProg(instance->ownerProg); if (prog->funcoffsets.Gecko_Query) { OSGK_String* paramStr, *resultStr; if (!osgk_variant_get_string (strVal, ¶mStr)) return srFailed; PRVM_G_INT(OFS_PARM0) = PRVM_SetTempString (instance->name); PRVM_G_INT(OFS_PARM1) = PRVM_SetTempString (osgk_string_get (paramStr)); PRVM_ExecuteProgram(prog->funcoffsets.Gecko_Query,"Gecko_Query() required"); resultStr = osgk_string_create (PRVM_G_STRING (OFS_RETURN)); *returnVal = osgk_variant_create_string (cl_geckoembedding, resultStr); osgk_release (resultStr); result = srSuccess; } prog = saveProg; return result; }
/* ======================== VM_M_getserverlistindexforkey float getserverlistindexforkey(string key) ======================== */ static void VM_M_getserverlistindexforkey(prvm_prog_t *prog) { const char *key; VM_SAFEPARMCOUNT( 1, VM_M_getserverlistindexforkey ); key = PRVM_G_STRING( OFS_PARM0 ); VM_CheckEmptyString( prog, key ); if( !strcmp( key, "cname" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_CNAME; else if( !strcmp( key, "ping" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_PING; else if( !strcmp( key, "game" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_GAME; else if( !strcmp( key, "mod" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_MOD; else if( !strcmp( key, "map" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_MAP; else if( !strcmp( key, "name" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_NAME; else if( !strcmp( key, "qcstatus" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_QCSTATUS; else if( !strcmp( key, "players" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_PLAYERS; else if( !strcmp( key, "maxplayers" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_MAXPLAYERS; else if( !strcmp( key, "numplayers" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_NUMPLAYERS; else if( !strcmp( key, "numbots" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_NUMBOTS; else if( !strcmp( key, "numhumans" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_NUMHUMANS; else if( !strcmp( key, "freeslots" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_FREESLOTS; else if( !strcmp( key, "protocol" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_PROTOCOL; else if( !strcmp( key, "isfavorite" ) ) PRVM_G_FLOAT( OFS_RETURN ) = SLIF_ISFAVORITE; else PRVM_G_FLOAT( OFS_RETURN ) = -1; }
static void VM_M_WriteString (prvm_prog_t *prog) { VM_SAFEPARMCOUNT(1, VM_M_WriteString); MSG_WriteString (VM_M_WriteDest(prog), PRVM_G_STRING(OFS_PARM0)); }