mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 17:12:13 -06:00
support connection: close
This commit is contained in:
parent
184af0c603
commit
4414ab120c
|
@ -86,5 +86,6 @@ roughly sorted by priority
|
||||||
* support pillow-simd
|
* support pillow-simd
|
||||||
* cache sha512 chunks on client
|
* cache sha512 chunks on client
|
||||||
* symlink existing files on upload
|
* symlink existing files on upload
|
||||||
|
* comment field
|
||||||
* figure out the deal with pixel3a not being connectable as hotspot
|
* figure out the deal with pixel3a not being connectable as hotspot
|
||||||
* pixel3a having unpredictable 3sec latency in general :||||
|
* pixel3a having unpredictable 3sec latency in general :||||
|
||||||
|
|
|
@ -41,6 +41,7 @@ class HttpCli(object):
|
||||||
self.log_func(self.log_src, msg)
|
self.log_func(self.log_src, msg)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
"""returns true if connection can be reused"""
|
||||||
try:
|
try:
|
||||||
headerlines = read_header(self.sr)
|
headerlines = read_header(self.sr)
|
||||||
if not headerlines:
|
if not headerlines:
|
||||||
|
@ -60,6 +61,9 @@ class HttpCli(object):
|
||||||
k, v = header_line.split(":", 1)
|
k, v = header_line.split(":", 1)
|
||||||
self.headers[k.lower()] = v.strip()
|
self.headers[k.lower()] = v.strip()
|
||||||
|
|
||||||
|
v = self.headers.get("connection", "").lower()
|
||||||
|
self.keepalive = not v.startswith("close")
|
||||||
|
|
||||||
self.uname = "*"
|
self.uname = "*"
|
||||||
if "cookie" in self.headers:
|
if "cookie" in self.headers:
|
||||||
cookies = self.headers["cookie"].split(";")
|
cookies = self.headers["cookie"].split(";")
|
||||||
|
@ -102,9 +106,9 @@ class HttpCli(object):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if self.mode in ["GET", "HEAD"]:
|
if self.mode in ["GET", "HEAD"]:
|
||||||
return self.handle_get()
|
return self.handle_get() and self.keepalive
|
||||||
elif self.mode == "POST":
|
elif self.mode == "POST":
|
||||||
return self.handle_post()
|
return self.handle_post() and self.keepalive
|
||||||
else:
|
else:
|
||||||
raise Pebkac(400, 'invalid HTTP mode "{0}"'.format(self.mode))
|
raise Pebkac(400, 'invalid HTTP mode "{0}"'.format(self.mode))
|
||||||
|
|
||||||
|
@ -120,9 +124,9 @@ class HttpCli(object):
|
||||||
# TODO something to reply with user-supplied values safely
|
# TODO something to reply with user-supplied values safely
|
||||||
response = [
|
response = [
|
||||||
"HTTP/1.1 {} {}".format(status, HTTPCODE[status]),
|
"HTTP/1.1 {} {}".format(status, HTTPCODE[status]),
|
||||||
"Connection: Keep-Alive",
|
|
||||||
"Content-Type: " + mime,
|
"Content-Type: " + mime,
|
||||||
"Content-Length: " + str(len(body)),
|
"Content-Length: " + str(len(body)),
|
||||||
|
"Connection: " + ("Keep-Alive" if self.keepalive else "Close"),
|
||||||
]
|
]
|
||||||
for k, v in self.out_headers.items():
|
for k, v in self.out_headers.items():
|
||||||
response.append("{}: {}".format(k, v))
|
response.append("{}: {}".format(k, v))
|
||||||
|
@ -266,7 +270,7 @@ class HttpCli(object):
|
||||||
response = json.dumps(response)
|
response = json.dumps(response)
|
||||||
|
|
||||||
self.log(response)
|
self.log(response)
|
||||||
self.reply(response.encode("utf-8"), headers=["Content-Type: application/json"])
|
self.reply(response.encode("utf-8"), mime="application/json")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def handle_post_binary(self):
|
def handle_post_binary(self):
|
||||||
|
@ -553,12 +557,13 @@ class HttpCli(object):
|
||||||
|
|
||||||
headers = [
|
headers = [
|
||||||
"HTTP/1.1 {} {}".format(status, HTTPCODE[status]),
|
"HTTP/1.1 {} {}".format(status, HTTPCODE[status]),
|
||||||
"Connection: Keep-Alive",
|
|
||||||
"Content-Type: " + mime,
|
"Content-Type: " + mime,
|
||||||
"Content-Length: " + str(upper - lower),
|
"Content-Length: " + str(upper - lower),
|
||||||
"Accept-Ranges: bytes",
|
"Accept-Ranges: bytes",
|
||||||
"Last-Modified: " + file_lastmod,
|
"Last-Modified: " + file_lastmod,
|
||||||
|
"Connection: " + ("Keep-Alive" if self.keepalive else "Close"),
|
||||||
]
|
]
|
||||||
|
|
||||||
headers.extend(extra_headers)
|
headers.extend(extra_headers)
|
||||||
headers = "\r\n".join(headers).encode("utf-8") + b"\r\n\r\n"
|
headers = "\r\n".join(headers).encode("utf-8") + b"\r\n\r\n"
|
||||||
self.s.sendall(headers)
|
self.s.sendall(headers)
|
||||||
|
|
Loading…
Reference in a new issue