[rygel/wip/cablelabs-integration: 37/37] server: Change content transfer mode handling
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel/wip/cablelabs-integration: 37/37] server: Change content transfer mode handling
- Date: Sun, 8 Feb 2015 22:08:12 +0000 (UTC)
commit 10d236cb811b06724b75780bd5d085f5c1a94d22
Author: Jens Georg <mail jensge org>
Date: Sun Feb 8 19:13:11 2015 +0100
server: Change content transfer mode handling
Align with newer DLNA versions
Based on Cableslabs's CVP-2 code
Signed-off-by: Jens Georg <mail jensge org>
src/librygel-server/rygel-http-get-handler.vala | 6 -----
src/librygel-server/rygel-http-get.vala | 24 ++++++++++++++++---
.../rygel-http-identity-handler.vala | 7 -----
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 c61b346..180058e 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 34dc199..dbde59c 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 8563c28..0e3dcd9 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)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]