41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
import logging
|
|
import json
|
|
|
|
_log = logging.getLogger(__name__)
|
|
|
|
""" Decodes a response from requests lib.
|
|
"""
|
|
def decode_response(response):
|
|
# TODO(sean): Should we use the 'raw' stream instead?
|
|
raw_bytes = response.content;
|
|
packet_type = "string" if ord(raw_bytes[0]) == 0 else "binary";
|
|
_log.debug("Packet type: %s" % packet_type);
|
|
|
|
if packet_type is "string":
|
|
length_bytes = [];
|
|
offset = 1;
|
|
while ord(raw_bytes[offset]) is not 255:
|
|
length_bytes.append(ord(raw_bytes[offset]));
|
|
offset += 1;
|
|
offset += 1;
|
|
|
|
length = 0;
|
|
base = 1;
|
|
for digit in reversed(length_bytes):
|
|
length += (int(digit) * base);
|
|
base *= 10;
|
|
_log.debug("Packet length: %d" % length);
|
|
|
|
message_type = raw_bytes[offset];
|
|
offset += 1;
|
|
|
|
message = {"type": message_type, "payload": json.loads(raw_bytes[offset:offset + length - 1])};
|
|
_log.debug("Message: %s" % repr(message));
|
|
return message;
|
|
else:
|
|
pass;
|
|
|
|
return "";
|
|
|
|
def decode_packet(packet):
|
|
pass;
|