From: Rudolf Polzer Date: Thu, 6 Oct 2011 20:09:35 +0000 (+0200) Subject: make multi URLs actually work X-Git-Tag: xonotic-v0.6.0~40^2~81^2 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=2a563bd0e63e9718a3d1fa79af801651f4edae76;p=xonotic%2Fxonotic-data.pk3dir.git make multi URLs actually work usage: g_playerstats_uri "http://server1/receive.php http://server2/receive.php error.log" --- diff --git a/qcsrc/common/urllib.qc b/qcsrc/common/urllib.qc index 5c585ae59..2f7d0ee3a 100644 --- a/qcsrc/common/urllib.qc +++ b/qcsrc/common/urllib.qc @@ -107,6 +107,8 @@ void url_single_fopen(string url, float mode, url_ready_func rdy, entity pass) } e.url_wbufpos = 0; e.url_rbuf = -1; + e.url_ready = rdy; + e.url_ready_pass = pass; rdy(e, pass, URL_READY_CANWRITE); break; @@ -166,6 +168,8 @@ void url_single_fopen(string url, float mode, url_ready_func rdy, entity pass) e = spawn(); e.classname = "url_single_fopen_stdout"; e.url_fh = URL_FH_STDOUT; + e.url_ready = rdy; + e.url_ready_pass = pass; rdy(e, pass, URL_READY_CANWRITE); break; case FILE_READ: @@ -188,6 +192,8 @@ void url_single_fopen(string url, float mode, url_ready_func rdy, entity pass) e = spawn(); e.classname = "url_single_fopen_file"; e.url_fh = fh; + e.url_ready = rdy; + e.url_ready_pass = pass; if(mode == FILE_READ) rdy(e, pass, URL_READY_CANREAD); else @@ -197,7 +203,7 @@ void url_single_fopen(string url, float mode, url_ready_func rdy, entity pass) } // close a file -void url_fclose(entity e, url_ready_func rdy, entity pass) +void url_fclose(entity e) { float i; @@ -224,7 +230,7 @@ void url_fclose(entity e, url_ready_func rdy, entity pass) if(i >= autocvar__urllib_nextslot) { print("url_fclose: too many concurrent requests\n"); - rdy(e, pass, URL_READY_ERROR); + e.url_ready(e,e.url_ready_pass, URL_READY_ERROR); buf_del(e.url_wbuf); strunzone(e.url_url); remove(e); @@ -236,7 +242,7 @@ void url_fclose(entity e, url_ready_func rdy, entity pass) if(!crypto_uri_postbuf(e.url_url, i + MIN_URL_ID, "text/plain", "", e.url_wbuf, 0)) { print("url_fclose: failure in crypto_uri_postbuf\n"); - rdy(e, pass, URL_READY_ERROR); + e.url_ready(e, e.url_ready_pass, URL_READY_ERROR); buf_del(e.url_wbuf); strunzone(e.url_url); remove(e); @@ -248,8 +254,6 @@ void url_fclose(entity e, url_ready_func rdy, entity pass) // call the callback buf_del(e.url_wbuf); e.url_wbuf = -1; - e.url_ready = rdy; - e.url_ready_pass = pass; e.url_id = i; url_fromid[i] = e; @@ -259,7 +263,7 @@ void url_fclose(entity e, url_ready_func rdy, entity pass) else { // we have READ all data, just close - rdy(e, pass, URL_READY_CLOSED); + e.url_ready(e, e.url_ready_pass, URL_READY_CLOSED); buf_del(e.url_rbuf); strunzone(e.url_url); remove(e); @@ -267,14 +271,14 @@ void url_fclose(entity e, url_ready_func rdy, entity pass) } else if(e.url_fh == URL_FH_STDOUT) { - rdy(e, pass, URL_READY_CLOSED); // closing creates no reading handle + e.url_ready(e, e.url_ready_pass, URL_READY_CLOSED); // closing creates no reading handle remove(e); } else { // file fclose(e.url_fh); - rdy(e, pass, URL_READY_CLOSED); // closing creates no reading handle + e.url_ready(e, e.url_ready_pass, URL_READY_CLOSED); // closing creates no reading handle remove(e); } } diff --git a/qcsrc/common/urllib.qh b/qcsrc/common/urllib.qh index 6c31a5a9c..f92178b2f 100644 --- a/qcsrc/common/urllib.qh +++ b/qcsrc/common/urllib.qh @@ -6,7 +6,7 @@ float URL_READY_CANREAD = 2; typedef void(entity handle, entity pass, float status) url_ready_func; void url_single_fopen(string url, float mode, url_ready_func rdy, entity pass); -void url_fclose(entity e, url_ready_func rdy, entity pass); +void url_fclose(entity e); string url_fgets(entity e); void url_fputs(entity e, string s); diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index cb9ce2b90..277338c5c 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -46,7 +46,7 @@ void WeaponStats_ready(entity fh, entity pass, float status) } } url_fputs(fh, "#end\n\n"); - url_fclose(fh, WeaponStats_ready, world); + url_fclose(fh); break; case URL_READY_CANREAD: // url_fclose is processing, we got a response for writing the data @@ -55,7 +55,7 @@ void WeaponStats_ready(entity fh, entity pass, float status) while((s = url_fgets(fh))) print(" ", s, "\n"); print("End of response.\n"); - url_fclose(fh, WeaponStats_ready, world); + url_fclose(fh); break; case URL_READY_CLOSED: // url_fclose has finished diff --git a/qcsrc/server/playerstats.qc b/qcsrc/server/playerstats.qc index 8fee566fd..c6e7701e0 100644 --- a/qcsrc/server/playerstats.qc +++ b/qcsrc/server/playerstats.qc @@ -237,7 +237,7 @@ void PlayerStats_ready(entity fh, entity pass, float status) } } url_fputs(fh, "\n"); - url_fclose(fh, PlayerStats_ready, world); + url_fclose(fh); break; case URL_READY_CANREAD: // url_fclose is processing, we got a response for writing the data @@ -246,7 +246,7 @@ void PlayerStats_ready(entity fh, entity pass, float status) while((s = url_fgets(fh))) print(" ", s, "\n"); print("End of response.\n"); - url_fclose(fh, PlayerStats_ready, world); + url_fclose(fh); break; case URL_READY_CLOSED: // url_fclose has finished