From: Brian Warner <warner@allmydata.com>
Date: Wed, 29 Oct 2008 01:01:03 +0000 (-0700)
Subject: web/filenode: add Accept-Ranges and ETag (for immutable files) headers to GET responses
X-Git-Url: https://git.rkrishnan.org/vdrive/global?a=commitdiff_plain;h=6e1db348178d5df35d8d9bc37f924804b777a83c;p=tahoe-lafs%2Ftahoe-lafs.git

web/filenode: add Accept-Ranges and ETag (for immutable files) headers to GET responses
---

diff --git a/src/allmydata/web/filenode.py b/src/allmydata/web/filenode.py
index b96ba175..472f782c 100644
--- a/src/allmydata/web/filenode.py
+++ b/src/allmydata/web/filenode.py
@@ -10,7 +10,7 @@ from allmydata.interfaces import ExistingChildError
 from allmydata.monitor import Monitor
 from allmydata.immutable.upload import FileHandle
 from allmydata.immutable.filenode import LiteralFileNode
-from allmydata.util import log
+from allmydata.util import log, base32
 
 from allmydata.web.common import text_plain, WebError, IClient, RenderMixin, \
      boolean_of_arg, get_arg, should_create_intermediate_directories
@@ -353,6 +353,13 @@ class FileDownloader(rend.Page):
         assert isinstance(filesize, (int,long)), filesize
         offset, size = 0, None
         contentsize = filesize
+        req.setHeader("accept-ranges", "bytes")
+        if not self.filenode.is_mutable():
+            # TODO: look more closely at Request.setETag and how it interacts
+            # with a conditional "if-etag-equals" request, I think this may
+            # need to occur after the setResponseCode below
+            req.setETag(base32.b2a(self.filenode.get_storage_index()))
+            # TODO: for mutable files, use the roothash
         rangeheader = req.getHeader('range')
         if rangeheader:
             # adapted from nevow.static.File