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.
This commit is contained in:
sofar 2019-03-04 23:12:02 -08:00 committed by Loïc Blot
parent 61e5fbab72
commit b5defcffba

@ -254,6 +254,16 @@ void ClientMediaDownloader::initialStep(Client *client)
fetch_request.post_data = required_hash_set; fetch_request.post_data = required_hash_set;
fetch_request.extra_headers.emplace_back( fetch_request.extra_headers.emplace_back(
"Content-Type: application/octet-stream"); "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); httpfetch_async(fetch_request);
m_httpfetch_active++; m_httpfetch_active++;