summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsofar <sofar+github@foo-projects.org>2019-03-04 23:12:02 -0800
committerLoïc Blot <nerzhul@users.noreply.github.com>2019-03-05 08:12:02 +0100
commitb5defcffba12dbbcd70676ed4626929761e25620 (patch)
tree4f7e369795ec24ea63edeaa72b6722625f507eae
parent61e5fbab721898a431b15a5a7e24efb58cd80eb4 (diff)
downloadminetest-b5defcffba12dbbcd70676ed4626929761e25620.tar.gz
minetest-b5defcffba12dbbcd70676ed4626929761e25620.tar.bz2
minetest-b5defcffba12dbbcd70676ed4626929761e25620.zip
Add referer to remote media requests. (#8135)
This sends the following header to a remote media server: Referer: minetest://<server_name>: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.
-rw-r--r--src/client/clientmedia.cpp10
1 files changed, 10 insertions, 0 deletions
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++;