diff options
author | sofar <sofar+github@foo-projects.org> | 2019-03-04 23:12:02 -0800 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2019-03-05 08:12:02 +0100 |
commit | b5defcffba12dbbcd70676ed4626929761e25620 (patch) | |
tree | 4f7e369795ec24ea63edeaa72b6722625f507eae /src | |
parent | 61e5fbab721898a431b15a5a7e24efb58cd80eb4 (diff) | |
download | minetest-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.
Diffstat (limited to 'src')
-rw-r--r-- | src/client/clientmedia.cpp | 10 |
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++; |