Browser Simple Cache adding orig resp time field & removing browser_cache_simple_header_old option.

This commit is contained in:
Jim Miller 2025-01-22 17:21:41 -06:00
parent 35aa5d2143
commit 81cb631491
2 changed files with 28 additions and 14 deletions

View file

@ -38,7 +38,6 @@ class SimpleCacheException(BrowserCacheException):
SIMPLE_EOF = struct.Struct('<QLLLL') # magic_number, flags, crc32, stream_size, padding
SIMPLE_EOF_SIZE = SIMPLE_EOF.size
FLAG_HAS_SHA256 = 2
META_HEADER = struct.Struct('<LLLQQL')
ENTRY_MAGIC_NUMBER = 0xfcfb6d1ba7725c30
EOF_MAGIC_NUMBER = 0xf4fa6f45970d41d8
THE_REAL_INDEX_MAGIC_NUMBER = 0x656e74657220796f
@ -51,11 +50,6 @@ class SimpleCache(BaseChromiumCache):
super(SimpleCache,self).__init__(*args, **kargs)
logger.debug("Using SimpleCache")
if self.getConfig("browser_cache_simple_header_old",False):
logger.warning("browser_cache_simple_header_old:true - Using older META_HEADER definition.")
global META_HEADER
META_HEADER = struct.Struct('<LLQQL')
# self.scan_cache_keys()
# 1/0
@ -127,9 +121,9 @@ class SimpleCache(BaseChromiumCache):
continue
logger.debug("en_fl:%s"%en_fl)
(request_time, response_time, header_size) = _read_meta_headers(entry_file)
headers = _read_headers(entry_file,header_size)
logger.debug("request_time: %s (%s)"%(datetime.datetime.fromtimestamp(self.make_age(request_time)),request_time))
logger.debug("response_time: %s (%s)"%(datetime.datetime.fromtimestamp(self.make_age(response_time)),response_time))
headers = _read_headers(entry_file,header_size)
logger.debug(headers)
## seen both Location and location
location = headers.get('location','')
@ -229,11 +223,33 @@ def _read_meta_headers(entry_file):
## actually know if info_size, flags, and new extra are correct.
## We didn't use them before, so this shouldn't hurt anything
## Jan 2025
## uint64 orig_response_time added to Simple cache
## presence indicated by bit 2 in extra_flags.
## https://www.gitclear.com/open_repos/chromium/chromium/release/132.0.6825.0
## https://www.gitclear.com/open_repos/chromium/chromium/commits?sha=f5a004e60f7f00dcb0274780d74770d360c0660b&expanded=true#code_file_12568188
# read stream 0 meta header:
# uint32 info_size, uint32 flags, uint32 extra??, uint64 request_time, uint64 response_time, uint32 header_size
# uint32 info_size, uint32 flags, uint32 extra_flags, uint64 request_time, uint64 response_time, uint64 orig_response_time, uint32 header_size
PRE_META_HEADER = struct.Struct('<LLL')
predata = entry_file.read(PRE_META_HEADER.size)
logger.debug(predata)
logger.debug(PRE_META_HEADER.unpack(predata))
extra_flags = PRE_META_HEADER.unpack(predata)[2]
RESPONSE_EXTRA_INFO_HAS_ORIGINAL_RESPONSE_TIME = 1 << 2
if ((extra_flags & RESPONSE_EXTRA_INFO_HAS_ORIGINAL_RESPONSE_TIME) != 0):
logger.debug("Including ORIGINAL_RESPONSE_TIME")
META_HEADER = struct.Struct('<QQQL')
else:
logger.debug("Excluding ORIGINAL_RESPONSE_TIME")
META_HEADER = struct.Struct('<QQL')
data = entry_file.read(META_HEADER.size)
# logger.debug(data)
(request_time, response_time, header_size) = META_HEADER.unpack(data)[-3:]
logger.debug(data)
logger.debug(META_HEADER.unpack(data))
(request_time, response_time) = META_HEADER.unpack(data)[:2]
# not using original_response_time at this time.
header_size = META_HEADER.unpack(data)[-1]
return (request_time, response_time, header_size)
@ -244,8 +260,8 @@ def _read_headers(entry_file,header_size):
# It is a series of null terminated strings, first is status code,e.g., "HTTP/1.1 200"
# the rest are name:value pairs used to populate the headers dict.
data = entry_file.read(header_size)
# logger.debug("header_size:%s"%header_size)
# logger.debug(data)
logger.debug("header_size:%s"%header_size)
logger.debug(data)
strings = data.decode('utf-8').split('\0')
headers = dict([ (y[0].lower(),y[1]) for y in [s.split(':', 1) for s in strings[1:] if ':' in s]])
return headers

View file

@ -219,7 +219,6 @@ def get_valid_set_options():
'browser_cache_path':(['defaults'],None,None),
'use_browser_cache':(None,None,boollist),
'use_browser_cache_only':(None,None,boollist),
'browser_cache_simple_header_old':(None,None,boollist),
'open_pages_in_browser':(None,None,boollist),
'continue_on_chapter_error':(None,None,boollist),
@ -525,7 +524,6 @@ def get_valid_keywords():
'use_basic_cache',
'use_browser_cache',
'use_browser_cache_only',
'browser_cache_simple_header_old',
'open_pages_in_browser',
'use_nsapa_proxy',
'nsapa_proxy_address',