summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xarch-proxy.py17
-rw-r--r--upload-svr.go9
2 files changed, 21 insertions, 5 deletions
diff --git a/arch-proxy.py b/arch-proxy.py
index 1ce6fa8..a456c77 100755
--- a/arch-proxy.py
+++ b/arch-proxy.py
@@ -31,6 +31,9 @@ class RequestHandler(http.server.BaseHTTPRequestHandler):
if range_offset is None:
code = 200
else:
+ if size is None:
+ raise BadRequest("Content-Length missing in upstream response"
+ " for range request")
if range_offset >= size:
# TODO need different status code
raise BadRequest("416 Requested Range Not Satisfiable")
@@ -41,7 +44,8 @@ class RequestHandler(http.server.BaseHTTPRequestHandler):
self.log_message('"%s" %d %s %s', self.requestline, code, size,
"HIT" if upstream is None else "MISS:%s" % (upstream,))
self.send_response_only(code)
- self.send_header('Content-Length', size)
+ if size is not None:
+ self.send_header('Content-Length', size)
for k, v in headers.items():
self.send_header(k, v)
self.end_headers()
@@ -83,8 +87,12 @@ class RequestHandler(http.server.BaseHTTPRequestHandler):
mtime_out[0] = mtime
except ValueError:
self.log_error("Unable to parse Last-Modified header")
- self.send_ok(int(r.headers['Content-Length']), response_headers,
- upstream=upstream, range_offset=range_offset)
+ if 'Content-Length' in r.headers:
+ self.send_ok(int(r.headers['Content-Length']), response_headers,
+ upstream=upstream, range_offset=range_offset)
+ else:
+ self.send_ok(None, response_headers,
+ upstream=upstream, range_offset=range_offset)
if not head_only:
yield from r.iter_content(4096)
@@ -159,6 +167,9 @@ class RequestHandler(http.server.BaseHTTPRequestHandler):
try:
# Try to open cached file and yield data from it
stat_info = os.stat(path)
+ if stat_info.st_size == 0:
+ # Treat empty files as missing.
+ raise FileNotFoundError
response_headers = {'Last-Modified':
epoch_to_text(stat_info.st_mtime)}
self.send_ok(stat_info.st_size, response_headers,
diff --git a/upload-svr.go b/upload-svr.go
index 9edb808..248b34c 100644
--- a/upload-svr.go
+++ b/upload-svr.go
@@ -20,7 +20,6 @@ import (
"path/filepath"
"strconv"
"strings"
- "time"
)
const (
@@ -351,7 +350,13 @@ func serveFile(w http.ResponseWriter, r *http.Request) {
return
}
defer f.Close()
- http.ServeContent(w, r, r.URL.Path, time.Time{}, f)
+ fileInfo, err := f.Stat()
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ log.Println(err)
+ return
+ }
+ http.ServeContent(w, r, r.URL.Path, fileInfo.ModTime(), f)
}
var (