in mssqlscripter/jsonrpc/jsonrpcclient.py [0:0]
def try_read_headers(self):
"""
Try to read the Header information from the internal buffer expecting the last header to contain '\r\n\r\n'.
Exceptions:
LookupError
The content-length header was not found.
ValueError
The content-length contained a invalid literal for int.
"""
# Scan the buffer up until right before the CRLFCRLF.
scan_offset = self.read_offset
while (scan_offset + 3 < self.buffer_end_offset and
(self.buffer[scan_offset] != self.CR or
self.buffer[scan_offset + 1] != self.LF or
self.buffer[scan_offset + 2] != self.CR or
self.buffer[scan_offset + 3] != self.LF)):
scan_offset += 1
# if we reached the end
if scan_offset + 3 >= self.buffer_end_offset:
return False
# Split the headers by new line
try:
headers_read = self.buffer[self.read_offset:scan_offset].decode(
u'ascii')
for header in headers_read.split(u'\n'):
colon_index = header.find(u':')
if colon_index == -1:
logger.debug(
u'JSON RPC Reader encountered missing colons in try_read_headers()')
raise KeyError(
u'Colon missing from Header: {}.'.format(header))
# Case insensitive.
header_key = header[:colon_index].lower()
header_value = header[colon_index + 1:]
self.headers[header_key] = header_value
# Was content-length header found?
if not ('content-length' in self.headers):
logger.debug(
u'JSON RPC Reader did not find Content-Length in the headers')
raise LookupError(
u'Content-Length was not found in headers received.')
self.expected_content_length = int(self.headers[u'content-length'])
except ValueError:
# Content-length contained invalid literal for int.
self.trim_buffer_and_resize(scan_offset + 4)
raise
# Pushing read pointer past the newline characters.
self.read_offset = scan_offset + 4
self.read_state = ReadState.Content
return True