X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fmenu%2Fgamecommand.qc;h=03e863e278a1cfa8885469cfad5d30cd27bdb1f6;hp=d2ef187664439735b203728530543167fc54b477;hb=eb02f2e761b1a2057b640be43a6f7abc8bcfac74;hpb=aa4c896acf8088d26fcbd5ff4e3f6e7a0acb0600 diff --git a/qcsrc/menu/gamecommand.qc b/qcsrc/menu/gamecommand.qc index d2ef187664..03e863e278 100644 --- a/qcsrc/menu/gamecommand.qc +++ b/qcsrc/menu/gamecommand.qc @@ -31,6 +31,30 @@ void _dumptree_close(entity pass, entity me) } } +float curl_uri_get_pos; +float curl_uri_get_exec[URI_GET_CURL_END - URI_GET_CURL + 1]; +string curl_uri_get_cvar[URI_GET_CURL_END - URI_GET_CURL + 1]; +void Curl_URI_Get_Callback(float id, float status, string data) +{ + float i; + float do_exec; + string do_cvar; + i = id - URI_GET_CURL; + do_exec = curl_uri_get_exec[i]; + do_cvar = curl_uri_get_cvar[i]; + if(status != 0) + { + print("error: status is ", ftos(status), "\n"); + return; + } + if(do_exec) + localcmd(data); + if(do_cvar) + cvar_set(do_cvar, data); + if(!do_exec && !do_cvar) + print(data); +} + void GameCommand(string theCommand) { float argc; @@ -94,6 +118,73 @@ void GameCommand(string theCommand) return; } + if(argv(0) == "setcompression") + { + updateCompression(); + return; + } + + if(argv(0) == "curl") + { + float do_exec; + string do_cvar; + float key; + float i, j; + string url; + float buf; + + do_exec = FALSE; + do_cvar = string_null; + key = -1; + + for(i = 1; i+1 < argc; ++i) + { + if(argv(i) == "--cvar" && i+2 < argc) + { + ++i; + do_cvar = argv(i); + ++i; + continue; + } + if(argv(i) == "--exec") + { + do_exec = TRUE; + ++i; + continue; + } + if(argv(i) == "--key" && i+2 < argc) + { + ++i; + key = stof(argv(i)); + ++i; + continue; + } + break; + } + + // now, argv(i) is the URL + // following args may be POST parameters + url = argv(i); + ++i; + buf = buf_create(); + j = 0; + for(; i+1 < argc; i += 2) + bufstr_set(buf, ++j, sprintf("%s=%s", uri_escape(argv(i)), uri_escape(argv(i+1)))); + if(i < argc) + bufstr_set(buf, ++j, sprintf("submit=%s", uri_escape(argv(i)))); + + if(j == 0) // no args: GET + crypto_uri_postbuf(url, URI_GET_CURL + curl_uri_get_pos, string_null, string_null, -1, key); + else // with args: POST + crypto_uri_postbuf(url, URI_GET_CURL + curl_uri_get_pos, "application/x-www-form-urlencoded", "&", buf, key); + + curl_uri_get_pos = mod(curl_uri_get_pos + 1, URI_GET_CURL_END - URI_GET_CURL + 1); + + buf_del(buf); + + return; + } + #if 0 if(argv(0) == "tokentest") {