diff options
author | Jens Georg <mail@jensge.org> | 2017-04-30 16:54:20 +0200 |
---|---|---|
committer | Jens Georg <mail@jensge.org> | 2017-04-30 16:54:25 +0200 |
commit | 56e4fd19fb17eeba2b3e7ccd3c9ee8fee9efbfaf (patch) | |
tree | dee1418e60d9d1f6216d758531c3e87e419397c6 | |
parent | 3e0aea3decee4a22fae29b2163cc48865b8c9d71 (diff) | |
download | rygel-56e4fd19fb17eeba2b3e7ccd3c9ee8fee9efbfaf.tar.gz |
server: Guess User-Agent for item requests
This was previously not done. Some devices only send out their user-agent or
something equivalent on UPnP or even SSDP level. GSSDP and GUPnP are
maintaining a cache for that, but that does not apply for things served
directly in Rygel so we have to do that ourselves.
-rw-r--r-- | src/librygel-server/rygel-http-server.vala | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/librygel-server/rygel-http-server.vala b/src/librygel-server/rygel-http-server.vala index d6ea55ed..b0990e89 100644 --- a/src/librygel-server/rygel-http-server.vala +++ b/src/librygel-server/rygel-http-server.vala @@ -85,6 +85,7 @@ public class Rygel.HTTPServer : GLib.Object, Rygel.StateMachine { context.add_server_handler (true, this.path_root, this.server_handler); context.server.request_aborted.connect (this.on_request_aborted); context.server.request_started.connect (this.on_request_started); + context.server.request_read.connect (this.on_request_read); if (this.cancellable != null) { this.cancellable.cancelled.connect (this.on_cancelled); @@ -198,6 +199,24 @@ public class Rygel.HTTPServer : GLib.Object, Rygel.StateMachine { message.got_headers.connect (this.on_got_headers); } + private void on_request_read (Soup.Server server, + Soup.Message message, + Soup.ClientContext client) { + var agent = message.request_headers.get_one ("User-Agent"); + + if (agent == null) { + var host = client.get_host (); + agent = this.context.guess_user_agent (host); + if (agent != null) { + debug ("Guessed user agent %s for %s", agent, client.get_host ()); + message.request_headers.append ("User-Agent", agent); + } else { + debug ("Could not guess user agent for ip %s.", host); + } + } + + } + private void on_got_headers (Soup.Message msg) { if (msg.method == "POST" && msg.uri.path.has_prefix (this.path_root)) { |