summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2017-04-30 16:54:20 +0200
committerJens Georg <mail@jensge.org>2017-04-30 16:54:25 +0200
commit56e4fd19fb17eeba2b3e7ccd3c9ee8fee9efbfaf (patch)
treedee1418e60d9d1f6216d758531c3e87e419397c6
parent3e0aea3decee4a22fae29b2163cc48865b8c9d71 (diff)
downloadrygel-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.vala19
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)) {