blob: 2fc83b9aea3879320a76d7df44eca8f16f050bb2 [file] [log] [blame]
#!/usr/bin/env python
# A header used to correlate requests and responses
state_header = "content-language"
# Static ETag to use (and expect)
etag = "abcdef"
def error(msg):
return (299, "Client Error"), [
('content-type', 'text/plain'),
('access-control-allow-origin', "*"),
('access-control-expose-headers', state_header),
('cache-control', 'no-store')
], msg
def main(request, response):
headers = []
inm = request.headers.get('if-none-match', None)
raw_req_num = request.headers.get(state_header, None)
if raw_req_num == None:
return error("no req_num header in request")
else:
req_num = int(raw_req_num)
if req_num > 8:
return error("req_num %s out of range" % req_num)
headers.append(("Access-Control-Expose-Headers", state_header))
headers.append((state_header, req_num))
headers.append(("A", req_num))
headers.append(("B", req_num))
if req_num % 2: # odd requests are the first in a test pair
if inm:
# what are you doing here? This should be a fresh request.
return error("If-None-Match on first request")
else:
status = 200, "OK"
headers.append(("Access-Control-Allow-Origin", "*"))
headers.append(("Content-Type", "text/plain"))
headers.append(("Cache-Control", "private, max-age=3, must-revalidate"))
headers.append(("ETag", etag))
return status, headers, "Success"
else: # even requests are the second in a pair, and should have a good INM.
if inm != etag:
# Bad browser.
if inm == None:
return error("If-None-Match missing")
else:
return error("If-None-Match '%s' mismatches")
else:
if req_num == 2:
pass # basic, vanilla check
elif req_num == 4:
headers.append(("Access-Control-Expose-Headers", "a, b"))
elif req_num == 6:
headers.append(("Access-Control-Expose-Headers", "a"))
elif req_num == 8:
headers.append(("Access-Control-Allow-Origin", "other.origin.example:80"))
status = 304, "Not Modified"
return status, headers, ""