Overview
| Comment: | another round of small fixes in logic, ignored fields and caching files without known length |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | master | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
9a8a46bcf0dbe844b80ef0f6bf4835d1 |
| User & Date: | c.kworr@b84a3442-36b4-a7b2-c7ad-07429f13c525 on 2011-09-06 15:09:32.000 |
| Other Links: | branch diff | manifest | tags |
Context
|
2011-12-14
| ||
| 08:54 | Fixed logic around old file rechecking. check-in: 8425e2e393 user: c.kworr@b84a3442-36b4-a7b2-c7ad-07429f13c525 tags: master, trunk | |
|
2011-09-06
| ||
| 15:09 | another round of small fixes in logic, ignored fields and caching files without known length check-in: 9a8a46bcf0 user: c.kworr@b84a3442-36b4-a7b2-c7ad-07429f13c525 tags: master, trunk | |
|
2011-03-06
| ||
| 09:39 | cleaning up a bit check-in: 90160dbf50 user: c.kworr@b84a3442-36b4-a7b2-c7ad-07429f13c525 tags: master, trunk | |
Changes
Modified samesite.py
from [1508505e23]
to [e5eb8d0658].
|
| | | 1 2 3 4 5 6 7 8 |
#!/usr/bin/env python3.2
import datetime, http.cookiejar, os, sys, shelve, spacemap, re, urllib.request
class Config:
__slots__ = frozenset(['_config', '_default', '_section', 'options', 'root'])
_default = {
'general': {
|
| ︙ | ︙ | |||
81 82 83 84 85 86 87 | 'Accept-Ranges', 'Age', 'Cache-Control', 'Connection', 'Content-Type', 'Date', 'Expires', 'Referer', 'Server', 'Via', | | | 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | 'Accept-Ranges', 'Age', 'Cache-Control', 'Connection', 'Content-Type', 'Date', 'Expires', 'Referer', 'Server', 'Via', 'X-Cache', 'X-Cache-Lookup', 'X-Powered-By', ]) block_size = 4096 import http.server class MyRequestHandler(http.server.BaseHTTPRequestHandler): |
| ︙ | ︙ | |||
138 139 140 141 142 143 144 | 'Accept', 'Accept-Charset', 'Accept-Encoding', 'Accept-Language', 'Cache-Control', 'Connection', 'Content-Length', 'Cookie', 'Host', 'If-Modified-Since', 'If-Unmodified-Since', 'Referer', 'User-Agent', 'Via', | | | 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
'Accept', 'Accept-Charset', 'Accept-Encoding', 'Accept-Language',
'Cache-Control', 'Connection', 'Content-Length', 'Cookie',
'Host',
'If-Modified-Since', 'If-Unmodified-Since',
'Referer',
'User-Agent',
'Via',
'X-Forwarded-For', 'X-Last-HR', 'X-Last-HTTP-Status-Code', 'X-REMOVED', 'X-Real-IP', 'X-Retry-Count',
])
print('===============[ {} request ]==='.format(self.command))
for header in self.headers:
if header in proxy_ignored:
pass
|
| ︙ | ︙ | |||
226 227 228 229 230 231 232 | my_headers[header] = self.headers[header] needed = None if '_parts' in record and record['_parts'] != None: if config['noparts'] != 'no' or requested_ranges == None or requested_ranges == spacemap.SpaceMap(): needed = record['_parts'] else: | | | 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 |
my_headers[header] = self.headers[header]
needed = None
if '_parts' in record and record['_parts'] != None:
if config['noparts'] != 'no' or requested_ranges == None or requested_ranges == spacemap.SpaceMap():
needed = record['_parts']
else:
needed = record['_parts'] & requested_ranges
elif config['noparts'] =='no' and requested_ranges != None and requested_ranges != spacemap.SpaceMap():
needed = requested_ranges
ranges = ()
print('Missing ranges: {}, requested ranges: {}, needed ranges: {}.'.format(record['_parts'], requested_ranges, needed))
if needed != None and len(needed) > 0:
needed.rewind()
while True:
|
| ︙ | ︙ | |||
293 294 295 296 297 298 299 |
if reload:
print('Reloading.')
if os.access(temp_name, os.R_OK):
os.unlink(temp_name)
if os.access(file_name, os.R_OK):
os.unlink(file_name)
| > | > > | | | 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 |
if reload:
print('Reloading.')
if os.access(temp_name, os.R_OK):
os.unlink(temp_name)
if os.access(file_name, os.R_OK):
os.unlink(file_name)
if 'Content-Length' in new_record:
new_record['_parts'] = spacemap.SpaceMap({0: int(new_record['Content-Length'])})
else:
new_record['_parts'] = spacemap.SpaceMap()
print(new_record)
# downloading file or segment
if 'Content-Length' in new_record:
if needed == None:
needed = new_record['_parts']
else:
if len(needed) > 1:
print("Multipart requests currently not supported.")
assert False, 'Skip this one for now.'
#else:
#assert False, 'No Content-Length or Content-Range header.'
new_record['_time'] = datetime.datetime.now()
if self.command not in ('HEAD'):
# file is created at temporary location and moved in place only when download completes
if not os.access(temp_name, os.R_OK):
empty_name = config['dir'] + os.sep + '.tmp'
with open(empty_name, 'w+b') as some_file:
|
| ︙ | ︙ | |||
408 409 410 411 412 413 414 |
self.end_headers()
if self.command in ('GET'):
if len(requested_ranges) > 0:
requested_ranges.rewind()
(start, end) = requested_ranges.pop()
else:
start = 0
| > > | > > | 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 |
self.end_headers()
if self.command in ('GET'):
if len(requested_ranges) > 0:
requested_ranges.rewind()
(start, end) = requested_ranges.pop()
else:
start = 0
# XXX ugly hack
if 'Content-Length' in index[my_path]:
end = index[my_path]['Content-Length']
else:
end = 0
real_file.seek(start)
if block_size > end - start:
req_block_size = end - start
else:
req_block_size = block_size
buffer = real_file.read(req_block_size)
length = len(buffer)
|
| ︙ | ︙ |