Esempio n. 1
0
/*
========================
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 ));
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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, &paramStr)) 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;
}
Esempio n. 5
0
/*
========================
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;
}
Esempio n. 6
0
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));
}