[rygel/rygel-0-34] server: Guess User-Agent for item requests



commit f2496893c55d4f6a12f67310103f75b760989c47
Author: Jens Georg <mail jensge org>
Date:   Sun Apr 30 16:54:20 2017 +0200

    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.

 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 d6ea55e..b0990e8 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)) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]