summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2015-02-08 19:13:11 +0100
committerJens Georg <mail@jensge.org>2015-02-08 19:13:11 +0100
commit10d236cb811b06724b75780bd5d085f5c1a94d22 (patch)
treeecac295072ac22c891a1df58eeb7a3544a239f85
parentb52e129a2d705abc8ce8444638d31529111a3633 (diff)
downloadrygel-10d236cb811b06724b75780bd5d085f5c1a94d22.tar.gz
server: Change content transfer mode handlingwip/cablelabs-integration
Align with newer DLNA versions Based on Cableslabs's CVP-2 code Signed-off-by: Jens Georg <mail@jensge.org>
-rw-r--r--src/librygel-server/rygel-http-get-handler.vala6
-rw-r--r--src/librygel-server/rygel-http-get.vala24
-rw-r--r--src/librygel-server/rygel-http-identity-handler.vala7
3 files changed, 20 insertions, 17 deletions
diff --git a/src/librygel-server/rygel-http-get-handler.vala b/src/librygel-server/rygel-http-get-handler.vala
index c61b346e..180058ee 100644
--- a/src/librygel-server/rygel-http-get-handler.vala
+++ b/src/librygel-server/rygel-http-get-handler.vala
@@ -76,8 +76,6 @@ internal abstract class Rygel.HTTPGetHandler: GLib.Object {
if (request.hack != null) {
request.hack.modify_headers (request);
}
-
- request.msg.response_headers.append ("Connection", "close");
}
/**
@@ -98,10 +96,6 @@ internal abstract class Rygel.HTTPGetHandler: GLib.Object {
*/
public abstract int64 get_resource_size ();
- public virtual bool knows_size (HTTPGet request) {
- return this.get_resource_size () >= 0;
- }
-
// Create an HTTPResponse object that will render the body.
public abstract HTTPResponse render_body (HTTPGet request)
throws HTTPRequestError;
diff --git a/src/librygel-server/rygel-http-get.vala b/src/librygel-server/rygel-http-get.vala
index 34dc1997..dbde59cc 100644
--- a/src/librygel-server/rygel-http-get.vala
+++ b/src/librygel-server/rygel-http-get.vala
@@ -190,6 +190,7 @@ internal class Rygel.HTTPGet : HTTPRequest {
// Add headers
this.handler.add_response_headers (this);
+ // Determine the size value
int64 response_size;
{
// Response size might have already been set by one of the response elements
@@ -219,10 +220,25 @@ internal class Rygel.HTTPGet : HTTPRequest {
this.msg.set_status (Soup.Status.OK);
}
- if (this.handler.knows_size (this)) {
- this.msg.response_headers.set_encoding (Soup.Encoding.CONTENT_LENGTH);
- } else {
- this.msg.response_headers.set_encoding (Soup.Encoding.EOF);
+ // Determine the transfer mode encoding
+ {
+ Soup.Encoding response_body_encoding;
+ // See DLNA 7.5.4.3.2.15 for requirements
+ if (response_size > 0) {
+ // TODO: Incorporate ChunkEncodingMode.dlna.org request into this block
+ response_body_encoding = Soup.Encoding.CONTENT_LENGTH;
+ debug ("Response encoding set to CONTENT-LENGTH");
+ } else { // Response size is <= 0
+ if (this.msg.get_http_version () == Soup.HTTPVersion.@1_0) {
+ // Can't send the length and can't send chunked (in HTTP 1.0)...
+ response_body_encoding = Soup.Encoding.EOF;
+ debug ("Response encoding set to EOF");
+ } else {
+ response_body_encoding = Soup.Encoding.CHUNKED;
+ debug ("Response encoding set to CHUNKED");
+ }
+ }
+ this.msg.response_headers.set_encoding (response_body_encoding);
}
if (msg.get_http_version () == Soup.HTTPVersion.@1_0) {
diff --git a/src/librygel-server/rygel-http-identity-handler.vala b/src/librygel-server/rygel-http-identity-handler.vala
index 8563c285..0e3dcd98 100644
--- a/src/librygel-server/rygel-http-identity-handler.vala
+++ b/src/librygel-server/rygel-http-identity-handler.vala
@@ -70,13 +70,6 @@ internal class Rygel.HTTPIdentityHandler : Rygel.HTTPGetHandler {
return -1;
}
- public override bool knows_size (HTTPGet request) {
- var size = this.get_size (request);
-
- return (request.seek != null && request.seek is HTTPByteSeek) ||
- size > 0;
- }
-
protected override DIDLLiteResource add_resource
(DIDLLiteObject didl_object,
HTTPGet request)