]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/lib/urllib.qc
Merge branch 'master' into Mario/cursor
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / urllib.qc
index c4c700a72d6b8341e9e561af642d638853c78e9d..2ad7bda2464b6842daa52fb70b2889c1835ab02c 100644 (file)
@@ -24,6 +24,7 @@ const float URL_FH_STDOUT = -2;
 entity url_fromid[NUM_URL_ID];
 int autocvar__urllib_nextslot;
 
+ERASEABLE
 float url_URI_Get_Callback(int id, float status, string data)
 {
        if (id < MIN_URL_ID) return 0;
@@ -34,7 +35,7 @@ float url_URI_Get_Callback(int id, float status, string data)
        if (!e) return 0;
        if (e.url_rbuf >= 0 || e.url_wbuf >= 0)
        {
-               LOG_INFOF("WARNING: handle %d (%s) has already received data?!?\n", id + NUM_URL_ID, e.url_url);
+               LOG_INFOF("WARNING: handle %d (%s) has already received data?!?", id + NUM_URL_ID, e.url_url);
                return 0;
        }
 
@@ -52,19 +53,19 @@ float url_URI_Get_Callback(int id, float status, string data)
                e.url_rbuf = buf_create();
                if (e.url_rbuf < 0)
                {
-                       LOG_INFO("url_URI_Get_Callback: out of memory in buf_create\n");
+                       LOG_INFO("url_URI_Get_Callback: out of memory in buf_create");
                        e.url_ready(e, e.url_ready_pass, URL_READY_ERROR);
-                       strunzone(e.url_url);
-                       remove(e);
+                       strfree(e.url_url);
+                       delete(e);
                        return 1;
                }
                e.url_rbufpos = 0;
                if (e.url_rbuf < 0)
                {
-                       LOG_INFO("url_URI_Get_Callback: out of memory in buf_create\n");
+                       LOG_INFO("url_URI_Get_Callback: out of memory in buf_create");
                        e.url_ready(e, e.url_ready_pass, URL_READY_ERROR);
-                       strunzone(e.url_url);
-                       remove(e);
+                       strfree(e.url_url);
+                       delete(e);
                        return 1;
                }
                for (i = 0; i < n; ++i)
@@ -76,12 +77,13 @@ float url_URI_Get_Callback(int id, float status, string data)
        {
                // an ERROR
                e.url_ready(e, e.url_ready_pass, -fabs(status));
-               strunzone(e.url_url);
-               remove(e);
+               strfree(e.url_url);
+               delete(e);
                return 1;
        }
 }
 
+ERASEABLE
 void url_single_fopen(string url, int mode, url_ready_func rdy, entity pass)
 {
        entity e;
@@ -104,10 +106,10 @@ void url_single_fopen(string url, int mode, url_ready_func rdy, entity pass)
                                e.url_wbuf = buf_create();
                                if (e.url_wbuf < 0)
                                {
-                                       LOG_INFO("url_single_fopen: out of memory in buf_create\n");
+                                       LOG_INFO("url_single_fopen: out of memory in buf_create");
                                        rdy(e, pass, URL_READY_ERROR);
-                                       strunzone(e.url_url);
-                                       remove(e);
+                                       strfree(e.url_url);
+                                       delete(e);
                                        return;
                                }
                                e.url_wbufpos = 0;
@@ -129,7 +131,7 @@ void url_single_fopen(string url, int mode, url_ready_func rdy, entity pass)
                                                if (url_fromid[i] == NULL) break;
                                        if (i >= autocvar__urllib_nextslot)
                                        {
-                                               LOG_INFO("url_single_fopen: too many concurrent requests\n");
+                                               LOG_INFO("url_single_fopen: too many concurrent requests");
                                                rdy(NULL, pass, URL_READY_ERROR);
                                                return;
                                        }
@@ -138,7 +140,7 @@ void url_single_fopen(string url, int mode, url_ready_func rdy, entity pass)
                                // GET the data
                                if (!crypto_uri_postbuf(url, i + MIN_URL_ID, string_null, string_null, -1, 0))
                                {
-                                       LOG_INFO("url_single_fopen: failure in crypto_uri_postbuf\n");
+                                       LOG_INFO("url_single_fopen: failure in crypto_uri_postbuf");
                                        rdy(NULL, pass, URL_READY_ERROR);
                                        return;
                                }
@@ -174,7 +176,7 @@ void url_single_fopen(string url, int mode, url_ready_func rdy, entity pass)
                                rdy(e, pass, URL_READY_CANWRITE);
                                break;
                        case FILE_READ:
-                               LOG_INFO("url_single_fopen: cannot open '-' for reading\n");
+                               LOG_INFO("url_single_fopen: cannot open '-' for reading");
                                rdy(NULL, pass, URL_READY_ERROR);
                                break;
                }
@@ -201,6 +203,7 @@ void url_single_fopen(string url, int mode, url_ready_func rdy, entity pass)
 }
 
 // close a file
+ERASEABLE
 void url_fclose(entity e)
 {
        int i;
@@ -225,11 +228,11 @@ void url_fclose(entity e)
                                        if (url_fromid[i] == NULL) break;
                                if (i >= autocvar__urllib_nextslot)
                                {
-                                       LOG_INFO("url_fclose: too many concurrent requests\n");
+                                       LOG_INFO("url_fclose: too many concurrent requests");
                                        e.url_ready(e, e.url_ready_pass, URL_READY_ERROR);
                                        buf_del(e.url_wbuf);
-                                       strunzone(e.url_url);
-                                       remove(e);
+                                       strfree(e.url_url);
+                                       delete(e);
                                        return;
                                }
                        }
@@ -237,11 +240,11 @@ void url_fclose(entity e)
                        // POST the data
                        if (!crypto_uri_postbuf(e.url_url, i + MIN_URL_ID, e.url_content_type, e.url_verb, e.url_wbuf, 0))
                        {
-                               LOG_INFO("url_fclose: failure in crypto_uri_postbuf\n");
+                               LOG_INFO("url_fclose: failure in crypto_uri_postbuf");
                                e.url_ready(e, e.url_ready_pass, URL_READY_ERROR);
                                buf_del(e.url_wbuf);
-                               strunzone(e.url_url);
-                               remove(e);
+                               strfree(e.url_url);
+                               delete(e);
                                return;
                        }
 
@@ -261,25 +264,26 @@ void url_fclose(entity e)
                        // we have READ all data, just close
                        e.url_ready(e, e.url_ready_pass, URL_READY_CLOSED);
                        buf_del(e.url_rbuf);
-                       strunzone(e.url_url);
-                       remove(e);
+                       strfree(e.url_url);
+                       delete(e);
                }
        }
        else if (e.url_fh == URL_FH_STDOUT)
        {
                e.url_ready(e, e.url_ready_pass, URL_READY_CLOSED);  // closing creates no reading handle
-               remove(e);
+               delete(e);
        }
        else
        {
                // file
                fclose(e.url_fh);
                e.url_ready(e, e.url_ready_pass, URL_READY_CLOSED);  // closing creates no reading handle
-               remove(e);
+               delete(e);
        }
 }
 
 // with \n (blame FRIK_FILE)
+ERASEABLE
 string url_fgets(entity e)
 {
        if (e.url_fh == URL_FH_CURL)
@@ -304,6 +308,7 @@ string url_fgets(entity e)
 }
 
 // without \n (blame FRIK_FILE)
+ERASEABLE
 void url_fputs(entity e, string s)
 {
        if (e.url_fh == URL_FH_CURL)
@@ -316,7 +321,7 @@ void url_fputs(entity e, string s)
        else if (e.url_fh == URL_FH_STDOUT)
        {
                // stdout
-               LOG_INFO(s);
+               print(s);
        }
        else
        {
@@ -326,6 +331,7 @@ void url_fputs(entity e, string s)
 }
 
 // multi URL object, tries URLs separated by space in sequence
+ERASEABLE
 void url_multi_ready(entity fh, entity me, float status)
 {
        float n;
@@ -333,10 +339,10 @@ void url_multi_ready(entity fh, entity me, float status)
        {
                if (status == -422)  // Unprocessable Entity
                {
-                       LOG_INFO("uri_multi_ready: got HTTP error 422, data is in unusable format - not continuing\n");
+                       LOG_INFO("uri_multi_ready: got HTTP error 422, data is in unusable format - not continuing");
                        me.url_ready(fh, me.url_ready_pass, status);
-                       strunzone(me.url_url);
-                       remove(me);
+                       strfree(me.url_url);
+                       delete(me);
                        return;
                }
                me.url_attempt += 1;
@@ -344,8 +350,8 @@ void url_multi_ready(entity fh, entity me, float status)
                if (n <= me.url_attempt)
                {
                        me.url_ready(fh, me.url_ready_pass, status);
-                       strunzone(me.url_url);
-                       remove(me);
+                       strfree(me.url_url);
+                       delete(me);
                        return;
                }
                url_single_fopen(argv(me.url_attempt), me.url_mode, url_multi_ready, me);
@@ -353,13 +359,15 @@ void url_multi_ready(entity fh, entity me, float status)
        }
        me.url_ready(fh, me.url_ready_pass, status);
 }
+
+ERASEABLE
 void url_multi_fopen(string url, int mode, url_ready_func rdy, entity pass)
 {
        float n;
        n = tokenize_console(url);
        if (n <= 0)
        {
-               LOG_INFO("url_multi_fopen: need at least one URL\n");
+               LOG_INFO("url_multi_fopen: need at least one URL");
                rdy(NULL, pass, URL_READY_ERROR);
                return;
        }