X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=prvm_cmds.c;h=1837090decc99fbc3b0acdddde7ff0cdd75fc281;hb=27b75893ba46058b5ca680f3c2aaae7233fe4270;hp=716762eddc42ef56b32069a258b272bff396475d;hpb=a8d400c471350ed6a0ff4deffbe2bf332018cb90;p=xonotic%2Fdarkplaces.git diff --git a/prvm_cmds.c b/prvm_cmds.c index 716762ed..1837090d 100644 --- a/prvm_cmds.c +++ b/prvm_cmds.c @@ -13,6 +13,7 @@ #include "cl_collision.h" #include "clvm_cmds.h" #include "ft2.h" +#include "mdfour.h" extern cvar_t prvm_backtraceforwarnings; @@ -280,6 +281,13 @@ static qboolean checkextension(const char *name) return false; #endif } + + // special sheck for d0_blind_id + if (!strcasecmp("DP_CRYPTO", name)) + return Crypto_Available(); + if (!strcasecmp("DP_QC_DIGEST_SHA256", name)) + return Crypto_Available(); + return true; } } @@ -2557,7 +2565,7 @@ void VM_clcommand (void) temp_client = host_client; host_client = svs.clients + i; - Cmd_ExecuteString (PRVM_G_STRING(OFS_PARM1), src_client); + Cmd_ExecuteString (PRVM_G_STRING(OFS_PARM1), src_client, true); host_client = temp_client; } @@ -4187,8 +4195,7 @@ VM_Gecko_Init ======================== */ void VM_Gecko_Init( void ) { - // the prog struct is memset to 0 by Initprog? [12/6/2007 Black] - // FIXME: remove the other _Init functions then, too? [12/6/2007 Black] + // REMOVED } /* @@ -4197,14 +4204,7 @@ VM_Gecko_Destroy ======================== */ void VM_Gecko_Destroy( void ) { - int i; - for( i = 0 ; i < PRVM_MAX_GECKOINSTANCES ; i++ ) { - clgecko_t **instance = &prog->opengeckoinstances[ i ]; - if( *instance ) { - CL_Gecko_DestroyBrowser( *instance ); - } - *instance = NULL; - } + // REMOVED } /* @@ -4215,34 +4215,8 @@ float[bool] gecko_create( string name ) ======================== */ void VM_gecko_create( void ) { - const char *name; - int i; - clgecko_t *instance; - - VM_SAFEPARMCOUNT( 1, VM_gecko_create ); - - name = PRVM_G_STRING( OFS_PARM0 ); - VM_CheckEmptyString( name ); - - // find an empty slot for this gecko browser.. - for( i = 0 ; i < PRVM_MAX_GECKOINSTANCES ; i++ ) { - if( prog->opengeckoinstances[ i ] == NULL ) { - break; - } - } - if( i == PRVM_MAX_GECKOINSTANCES ) { - VM_Warning("VM_gecko_create: %s ran out of gecko handles (%i)\n", PRVM_NAME, PRVM_MAX_GECKOINSTANCES); - PRVM_G_FLOAT( OFS_RETURN ) = 0; - return; - } - - instance = prog->opengeckoinstances[ i ] = CL_Gecko_CreateBrowser( name, PRVM_GetProgNr() ); - if( !instance ) { - // TODO: error handling [12/3/2007 Black] - PRVM_G_FLOAT( OFS_RETURN ) = 0; - return; - } - PRVM_G_FLOAT( OFS_RETURN ) = 1; + // REMOVED + PRVM_G_FLOAT( OFS_RETURN ) = 0; } /* @@ -4253,18 +4227,7 @@ void gecko_destroy( string name ) ======================== */ void VM_gecko_destroy( void ) { - const char *name; - clgecko_t *instance; - - VM_SAFEPARMCOUNT( 1, VM_gecko_destroy ); - - name = PRVM_G_STRING( OFS_PARM0 ); - VM_CheckEmptyString( name ); - instance = CL_Gecko_FindBrowser( name ); - if( !instance ) { - return; - } - CL_Gecko_DestroyBrowser( instance ); + // REMOVED } /* @@ -4275,22 +4238,7 @@ void gecko_navigate( string name, string URI ) ======================== */ void VM_gecko_navigate( void ) { - const char *name; - const char *URI; - clgecko_t *instance; - - VM_SAFEPARMCOUNT( 2, VM_gecko_navigate ); - - name = PRVM_G_STRING( OFS_PARM0 ); - URI = PRVM_G_STRING( OFS_PARM1 ); - VM_CheckEmptyString( name ); - VM_CheckEmptyString( URI ); - - instance = CL_Gecko_FindBrowser( name ); - if( !instance ) { - return; - } - CL_Gecko_NavigateToURI( instance, URI ); + // REMOVED } /* @@ -4301,42 +4249,8 @@ float[bool] gecko_keyevent( string name, float key, float eventtype ) ======================== */ void VM_gecko_keyevent( void ) { - const char *name; - unsigned int key; - clgecko_buttoneventtype_t eventtype; - clgecko_t *instance; - - VM_SAFEPARMCOUNT( 3, VM_gecko_keyevent ); - - name = PRVM_G_STRING( OFS_PARM0 ); - VM_CheckEmptyString( name ); - key = (unsigned int) PRVM_G_FLOAT( OFS_PARM1 ); - switch( (unsigned int) PRVM_G_FLOAT( OFS_PARM2 ) ) { - case 0: - eventtype = CLG_BET_DOWN; - break; - case 1: - eventtype = CLG_BET_UP; - break; - case 2: - eventtype = CLG_BET_PRESS; - break; - case 3: - eventtype = CLG_BET_DOUBLECLICK; - break; - default: - // TODO: console printf? [12/3/2007 Black] - PRVM_G_FLOAT( OFS_RETURN ) = 0; - return; - } - - instance = CL_Gecko_FindBrowser( name ); - if( !instance ) { - PRVM_G_FLOAT( OFS_RETURN ) = 0; - return; - } - - PRVM_G_FLOAT( OFS_RETURN ) = (CL_Gecko_Event_Key( instance, (keynum_t) key, eventtype ) == true); + // REMOVED + PRVM_G_FLOAT( OFS_RETURN ) = 0; } /* @@ -4347,22 +4261,7 @@ void gecko_mousemove( string name, float x, float y ) ======================== */ void VM_gecko_movemouse( void ) { - const char *name; - float x, y; - clgecko_t *instance; - - VM_SAFEPARMCOUNT( 3, VM_gecko_movemouse ); - - name = PRVM_G_STRING( OFS_PARM0 ); - VM_CheckEmptyString( name ); - x = PRVM_G_FLOAT( OFS_PARM1 ); - y = PRVM_G_FLOAT( OFS_PARM2 ); - - instance = CL_Gecko_FindBrowser( name ); - if( !instance ) { - return; - } - CL_Gecko_Event_CursorMove( instance, x, y ); + // REMOVED } @@ -4374,22 +4273,7 @@ void gecko_resize( string name, float w, float h ) ======================== */ void VM_gecko_resize( void ) { - const char *name; - float w, h; - clgecko_t *instance; - - VM_SAFEPARMCOUNT( 3, VM_gecko_movemouse ); - - name = PRVM_G_STRING( OFS_PARM0 ); - VM_CheckEmptyString( name ); - w = PRVM_G_FLOAT( OFS_PARM1 ); - h = PRVM_G_FLOAT( OFS_PARM2 ); - - instance = CL_Gecko_FindBrowser( name ); - if( !instance ) { - return; - } - CL_Gecko_Resize( instance, (int) w, (int) h ); + // REMOVED } @@ -4401,23 +4285,9 @@ vector gecko_get_texture_extent( string name ) ======================== */ void VM_gecko_get_texture_extent( void ) { - const char *name; - clgecko_t *instance; - - VM_SAFEPARMCOUNT( 1, VM_gecko_movemouse ); - - name = PRVM_G_STRING( OFS_PARM0 ); - VM_CheckEmptyString( name ); - - PRVM_G_VECTOR(OFS_RETURN)[2] = 0; - instance = CL_Gecko_FindBrowser( name ); - if( !instance ) { - PRVM_G_VECTOR(OFS_RETURN)[0] = 0; - PRVM_G_VECTOR(OFS_RETURN)[1] = 0; - return; - } - CL_Gecko_GetTextureExtent( instance, - PRVM_G_VECTOR(OFS_RETURN), PRVM_G_VECTOR(OFS_RETURN)+1 ); + // REMOVED + PRVM_G_VECTOR(OFS_RETURN)[0] = 0; + PRVM_G_VECTOR(OFS_RETURN)[1] = 0; } @@ -5634,12 +5504,61 @@ void VM_crc16(void) { float insensitive; static char s[VM_STRINGTEMP_LENGTH]; - VM_SAFEPARMCOUNTRANGE(2, 8, VM_hash); + VM_SAFEPARMCOUNTRANGE(2, 8, VM_crc16); insensitive = PRVM_G_FLOAT(OFS_PARM0); VM_VarString(1, s, sizeof(s)); PRVM_G_FLOAT(OFS_RETURN) = (unsigned short) ((insensitive ? CRC_Block_CaseInsensitive : CRC_Block) ((unsigned char *) s, strlen(s))); } +// #639 float(string digest, string data, ...) digest_hex +void VM_digest_hex(void) +{ + const char *digest; + + static char out[32]; + static char outhex[65]; + int outlen; + + static char s[VM_STRINGTEMP_LENGTH]; + int len; + + VM_SAFEPARMCOUNTRANGE(2, 8, VM_digest_hex); + digest = PRVM_G_STRING(OFS_PARM0); + if(!digest) + digest = ""; + VM_VarString(1, s, sizeof(s)); + len = strlen(s); + + outlen = 0; + + if(!strcmp(digest, "MD4")) + { + outlen = 16; + mdfour((unsigned char *) out, (unsigned char *) s, len); + } + else if(!strcmp(digest, "SHA256") && Crypto_Available()) + { + outlen = 32; + sha256((unsigned char *) out, (unsigned char *) s, len); + } + // no warning needed on mismatch - we return string_null to QC + + if(outlen) + { + int i; + static const char *hexmap = "0123456789abcdef"; + for(i = 0; i < outlen; ++i) + { + outhex[2*i] = hexmap[(out[i] >> 4) & 15]; + outhex[2*i+1] = hexmap[(out[i] >> 0) & 15]; + } + outhex[2*i] = 0; + PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(outhex); + } + else + PRVM_G_INT(OFS_RETURN) = 0; +} + void VM_wasfreed (void) { VM_SAFEPARMCOUNT(1, VM_wasfreed); @@ -5688,7 +5607,6 @@ void VM_Cmd_Init(void) // only init the stuff for the current prog VM_Files_Init(); VM_Search_Init(); - VM_Gecko_Init(); // VM_BufStr_Init(); } @@ -5697,7 +5615,6 @@ void VM_Cmd_Reset(void) CL_PurgeOwner( MENUOWNER ); VM_Search_Reset(); VM_Files_CloseAll(); - VM_Gecko_Destroy(); // VM_BufStr_ShutDown(); }