From: Rudolf Polzer <divverent@xonotic.org>
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