From b5defcffba12dbbcd70676ed4626929761e25620 Mon Sep 17 00:00:00 2001 From: sofar Date: Mon, 4 Mar 2019 23:12:02 -0800 Subject: [PATCH] Add referer to remote media requests. (#8135) This sends the following header to a remote media server: Referer: minetest://:port This was verified with CTF and the Minetest Public Remove Media server. If the servername was a plain IPv6 address it will contain `:` characters and will be encapsulated in `[]` to be a valid URI. --- src/client/clientmedia.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/client/clientmedia.cpp b/src/client/clientmedia.cpp index e3ad92dbc..e52ebcab3 100644 --- a/src/client/clientmedia.cpp +++ b/src/client/clientmedia.cpp @@ -254,6 +254,16 @@ void ClientMediaDownloader::initialStep(Client *client) fetch_request.post_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++;