]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/client/clientmedia.cpp
Remove unused ITextSceneNode header (#11476)
[dragonfireclient.git] / src / client / clientmedia.cpp
index e3ad92dbcddc646e5d6cf8fe3eb0a3848b416cb0..0f9ba53566be30e43bad5e5ade974250f90f590d 100644 (file)
@@ -35,6 +35,15 @@ static std::string getMediaCacheDir()
        return porting::path_cache + DIR_DELIM + "media";
 }
 
+bool clientMediaUpdateCache(const std::string &raw_hash, const std::string &filedata)
+{
+       FileCache media_cache(getMediaCacheDir());
+       std::string sha1_hex = hex_encode(raw_hash);
+       if (!media_cache.exists(sha1_hex))
+               return media_cache.update(sha1_hex, filedata);
+       return true;
+}
+
 /*
        ClientMediaDownloader
 */
@@ -207,7 +216,6 @@ void ClientMediaDownloader::initialStep(Client *client)
 
                // This is the first time we use httpfetch, so alloc a caller ID
                m_httpfetch_caller = httpfetch_caller_alloc();
-               m_httpfetch_timeout = g_settings->getS32("curl_timeout");
 
                // Set the active fetch limit to curl_parallel_limit or 84,
                // whichever is greater. This gives us some leeway so that
@@ -249,11 +257,20 @@ void ClientMediaDownloader::initialStep(Client *client)
                                remote->baseurl + MTHASHSET_FILE_NAME;
                        fetch_request.caller = m_httpfetch_caller;
                        fetch_request.request_id = m_httpfetch_next_id; // == i
-                       fetch_request.timeout = m_httpfetch_timeout;
-                       fetch_request.connect_timeout = m_httpfetch_timeout;
-                       fetch_request.post_data = required_hash_set;
+                       fetch_request.method = HTTP_POST;
+                       fetch_request.raw_data = required_hash_set;
                        fetch_request.extra_headers.emplace_back(
                                "Content-Type: application/octet-stream");
+
+                       // Encapsulate possible IPv6 plain address in []
+                       std::string addr = client->getAddressName();
+                       if (addr.find(':', 0) != std::string::npos)
+                               addr = '[' + addr + ']';
+                       fetch_request.extra_headers.emplace_back(
+                               std::string("Referer: minetest://") +
+                               addr + ":" +
+                               std::to_string(client->getServerAddress().getPort()));
+
                        httpfetch_async(fetch_request);
 
                        m_httpfetch_active++;
@@ -412,9 +429,8 @@ void ClientMediaDownloader::startRemoteMediaTransfers()
                                fetch_request.url = url;
                                fetch_request.caller = m_httpfetch_caller;
                                fetch_request.request_id = m_httpfetch_next_id;
-                               fetch_request.timeout = 0; // no data timeout!
-                               fetch_request.connect_timeout =
-                                       m_httpfetch_timeout;
+                               fetch_request.timeout =
+                                       g_settings->getS32("curl_file_download_timeout");
                                httpfetch_async(fetch_request);
 
                                m_remote_file_transfers.insert(std::make_pair(
@@ -549,7 +565,6 @@ bool ClientMediaDownloader::checkAndLoad(
        return true;
 }
 
-
 /*
        Minetest Hashset File Format