]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
make multi URLs actually work
authorRudolf Polzer <divverent@xonotic.org>
Thu, 6 Oct 2011 20:09:35 +0000 (22:09 +0200)
committerRudolf Polzer <divverent@xonotic.org>
Thu, 6 Oct 2011 20:09:35 +0000 (22:09 +0200)
usage:
g_playerstats_uri "http://server1/receive.php http://server2/receive.php error.log"

qcsrc/common/urllib.qc
qcsrc/common/urllib.qh
qcsrc/server/cl_player.qc
qcsrc/server/playerstats.qc

index 5c585ae593f8f4cee007b1d8b9edcbfa94498b43..2f7d0ee3ab4211609c20257b0f360b0021dee1bb 100644 (file)
@@ -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);
        }
 }
index 6c31a5a9ca402a4bb8142654672b15b38c28f81d..f92178b2f6f6a6569b72af048fbba23811c0e69f 100644 (file)
@@ -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);
 
index cb9ce2b90ec988f153dad517c4a53c7d883c29e1..277338c5cafc7ee78ac03b5bf1f5fad9d50f2dfb 100644 (file)
@@ -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
index 8fee566fd36e2476570d0a59cf99dde50506d669..c6e7701e0c0bfa6e4c3543e1eca7bcbafdc0ef2f 100644 (file)
@@ -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