X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fmenu%2Fgamecommand.qc;h=104c8840e58cda121daecb6afd36c6b68f2083cf;hb=9fd222a43848103a61b90d55645a5d993f794bf4;hp=4a89ab9bae5958726c0254a7f7ea2fc6f7214a49;hpb=24c0e211b8a839afe6bb5fc5c603d450a72b9160;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/menu/gamecommand.qc b/qcsrc/menu/gamecommand.qc index 4a89ab9ba..104c8840e 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; @@ -64,9 +88,8 @@ void GameCommand(string theCommand) if(argv(0) == "directpanelhudmenu") { - highlightedPanel = stof(argv(1)); // switch to a menu item - m_goto(strcat("HUD", HUD_Panel_GetName(highlightedPanel))); + m_goto(strcat("HUD", argv(1))); return; } @@ -95,6 +118,78 @@ 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; + float r; + + 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); + continue; + } + if(argv(i) == "--exec") + { + do_exec = TRUE; + continue; + } + if(argv(i) == "--key" && i+2 < argc) + { + ++i; + key = stof(argv(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 + r = crypto_uri_postbuf(url, URI_GET_CURL + curl_uri_get_pos, string_null, string_null, -1, key); + else // with args: POST + r = crypto_uri_postbuf(url, URI_GET_CURL + curl_uri_get_pos, "application/x-www-form-urlencoded", "&", buf, key); + + if(r) + { + curl_uri_get_exec[curl_uri_get_pos] = do_exec; + curl_uri_get_cvar[curl_uri_get_pos] = do_cvar; + curl_uri_get_pos = mod(curl_uri_get_pos + 1, URI_GET_CURL_END - URI_GET_CURL + 1); + } + else + print("error creating curl handle\n"); + + buf_del(buf); + + return; + } + #if 0 if(argv(0) == "tokentest") {