]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - libcurl.c
renamed r_bloomstate to r_fb because it contains framebuffer settings
[xonotic/darkplaces.git] / libcurl.c
index b90bbd14d496151f4f50ce59bfacbfd470a9922e..7f1760595d87330d168b9daed21f727622be4e4a 100644 (file)
--- a/libcurl.c
+++ b/libcurl.c
@@ -308,20 +308,22 @@ static void Curl_CheckCommandWhenDone(void)
 {
        if(!curl_dll)
                return;
-       if(numdownloads_added && (numdownloads_success == numdownloads_added) && *command_when_done)
+       if(numdownloads_added && ((numdownloads_success + numdownloads_fail) == numdownloads_added))
        {
-               Con_DPrintf("cURL downloads occurred, executing %s\n", command_when_done);
-               Cbuf_AddText("\n");
-               Cbuf_AddText(command_when_done);
-               Cbuf_AddText("\n");
-               Curl_Clear_forthismap();
-       }
-       else if(numdownloads_added && numdownloads_fail && *command_when_error)
-       {
-               Con_DPrintf("cURL downloads FAILED, executing %s\n", command_when_error);
-               Cbuf_AddText("\n");
-               Cbuf_AddText(command_when_error);
-               Cbuf_AddText("\n");
+               if(numdownloads_fail == 0)
+               {
+                       Con_DPrintf("cURL downloads occurred, executing %s\n", command_when_done);
+                       Cbuf_AddText("\n");
+                       Cbuf_AddText(command_when_done);
+                       Cbuf_AddText("\n");
+               }
+               else
+               {
+                       Con_DPrintf("cURL downloads FAILED, executing %s\n", command_when_error);
+                       Cbuf_AddText("\n");
+                       Cbuf_AddText(command_when_error);
+                       Cbuf_AddText("\n");
+               }
                Curl_Clear_forthismap();
        }
 }
@@ -677,7 +679,6 @@ static void CheckPendingDownloads(void)
                                }
 
                                qcurl_easy_setopt(di->curle, CURLOPT_HTTPHEADER, di->slist);
-
                                
                                qcurl_multi_add_handle(curlm, di->curle);
                                di->started = true;
@@ -1022,12 +1023,15 @@ void Curl_Run(void)
                for(di = downloads; di; di = di->next)
                {
                        double b = 0;
-                       qcurl_easy_getinfo(di->curle, CURLINFO_SIZE_UPLOAD, &b);
-                       bytes_sent += (b - di->bytes_sent_curl);
-                       di->bytes_sent_curl = b;
-                       qcurl_easy_getinfo(di->curle, CURLINFO_SIZE_DOWNLOAD, &b);
-                       bytes_sent += (b - di->bytes_received_curl);
-                       di->bytes_received_curl = b;
+                       if(di->curle)
+                       {
+                               qcurl_easy_getinfo(di->curle, CURLINFO_SIZE_UPLOAD, &b);
+                               bytes_sent += (b - di->bytes_sent_curl);
+                               di->bytes_sent_curl = b;
+                               qcurl_easy_getinfo(di->curle, CURLINFO_SIZE_DOWNLOAD, &b);
+                               bytes_sent += (b - di->bytes_received_curl);
+                               di->bytes_received_curl = b;
+                       }
                }
 
                for(;;)
@@ -1581,20 +1585,12 @@ This should be called at every map change.
 */
 void Curl_ClearRequirements(void)
 {
-       const char *p;
        while(requirements)
        {
                requirement *req = requirements;
                requirements = requirements->next;
                Z_Free(req);
        }
-       p = sv_curl_serverpackages.string;
-       Con_DPrintf("Require all of: %s\n", p);
-       while(COM_ParseToken_Simple(&p, false, false))
-       {
-               Con_DPrintf("Require: %s\n", com_token);
-               Curl_RequireFile(com_token);
-       }
 }
 
 /*
@@ -1609,47 +1605,56 @@ This is done by sending him the following console commands:
        curl --finish_autodownload
 ====================
 */
+static qboolean Curl_SendRequirement(const char *filename, qboolean foundone, char *sendbuffer, size_t sendbuffer_len)
+{
+       const char *p;
+       const char *thispack = FS_WhichPack(filename);
+       const char *packurl;
+
+       if(!thispack)
+               return false;
+
+       p = strrchr(thispack, '/');
+       if(p)
+               thispack = p + 1;
+
+       packurl = Curl_FindPackURL(thispack);
+
+       if(packurl && *packurl && strcmp(packurl, "-"))
+       {
+               if(!foundone)
+                       strlcat(sendbuffer, "curl --clear_autodownload\n", sendbuffer_len);
+
+               strlcat(sendbuffer, "curl --pak --forthismap --as ", sendbuffer_len);
+               strlcat(sendbuffer, thispack, sendbuffer_len);
+               if(sv_curl_maxspeed.value > 0)
+                       dpsnprintf(sendbuffer + strlen(sendbuffer), sendbuffer_len - strlen(sendbuffer), " --maxspeed=%.1f", sv_curl_maxspeed.value);
+               strlcat(sendbuffer, " --for ", sendbuffer_len);
+               strlcat(sendbuffer, filename, sendbuffer_len);
+               strlcat(sendbuffer, " ", sendbuffer_len);
+               strlcat(sendbuffer, packurl, sendbuffer_len);
+               strlcat(sendbuffer, thispack, sendbuffer_len);
+               strlcat(sendbuffer, "\n", sendbuffer_len);
+
+               return true;
+       }
+
+       return false;
+}
 void Curl_SendRequirements(void)
 {
        // for each requirement, find the pack name
        char sendbuffer[4096] = "";
        requirement *req;
        qboolean foundone = false;
+       const char *p;
 
        for(req = requirements; req; req = req->next)
-       {
-               const char *p;
-               const char *thispack = FS_WhichPack(req->filename);
-               const char *packurl;
-
-               if(!thispack)
-                       continue;
-
-               p = strrchr(thispack, '/');
-               if(p)
-                       thispack = p + 1;
-
-               packurl = Curl_FindPackURL(thispack);
+               foundone = Curl_SendRequirement(req->filename, foundone, sendbuffer, sizeof(sendbuffer)) || foundone;
 
-               if(packurl && *packurl && strcmp(packurl, "-"))
-               {
-                       if(!foundone)
-                               strlcat(sendbuffer, "curl --clear_autodownload\n", sizeof(sendbuffer));
-
-                       strlcat(sendbuffer, "curl --pak --forthismap --as ", sizeof(sendbuffer));
-                       strlcat(sendbuffer, thispack, sizeof(sendbuffer));
-                       if(sv_curl_maxspeed.value > 0)
-                               dpsnprintf(sendbuffer + strlen(sendbuffer), sizeof(sendbuffer) - strlen(sendbuffer), " --maxspeed=%.1f", sv_curl_maxspeed.value);
-                       strlcat(sendbuffer, " --for ", sizeof(sendbuffer));
-                       strlcat(sendbuffer, req->filename, sizeof(sendbuffer));
-                       strlcat(sendbuffer, " ", sizeof(sendbuffer));
-                       strlcat(sendbuffer, packurl, sizeof(sendbuffer));
-                       strlcat(sendbuffer, thispack, sizeof(sendbuffer));
-                       strlcat(sendbuffer, "\n", sizeof(sendbuffer));
-
-                       foundone = true;
-               }
-       }
+       p = sv_curl_serverpackages.string;
+       while(COM_ParseToken_Simple(&p, false, false))
+               foundone = Curl_SendRequirement(com_token, foundone, sendbuffer, sizeof(sendbuffer)) || foundone;
 
        if(foundone)
                strlcat(sendbuffer, "curl --finish_autodownload\n", sizeof(sendbuffer));