Checkpoint
This commit is contained in:
parent
a0b061cbdc
commit
37bd6786d7
3 changed files with 64 additions and 9 deletions
|
|
@ -1,8 +1,10 @@
|
||||||
|
from collections import namedtuple
|
||||||
import logging
|
import logging
|
||||||
import json
|
import json
|
||||||
|
import parser
|
||||||
import requests
|
import requests
|
||||||
import time
|
import time
|
||||||
from collections import namedtuple
|
|
||||||
try:
|
try:
|
||||||
from urllib import parse as parse_url
|
from urllib import parse as parse_url
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
|
@ -367,8 +369,7 @@ def _parse_host(host, port):
|
||||||
url_pack = parse_url(host)
|
url_pack = parse_url(host)
|
||||||
is_secure = url_pack.scheme == 'https'
|
is_secure = url_pack.scheme == 'https'
|
||||||
port = port or url_pack.port or (443 if is_secure else 80)
|
port = port or url_pack.port or (443 if is_secure else 80)
|
||||||
base_url = '%s:%d%s/socket.io/%s' % (
|
base_url = '%s:%d%s/socket.io/%s' % (url_pack.hostname, port, url_pack.path, PROTOCOL_VERSION)
|
||||||
url_pack.hostname, port, url_pack.path, PROTOCOL_VERSION)
|
|
||||||
return is_secure, base_url
|
return is_secure, base_url
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -395,13 +396,23 @@ def _yield_elapsed_time(seconds=None):
|
||||||
|
|
||||||
|
|
||||||
def _get_socketIO_session(is_secure, base_url, **kw):
|
def _get_socketIO_session(is_secure, base_url, **kw):
|
||||||
server_url = '%s://%s/' % ('https' if is_secure else 'http', base_url)
|
server_url = '%s://%s/?transport=polling' % ('https' if is_secure else 'http', base_url)
|
||||||
|
_log.debug('[session] %s', server_url)
|
||||||
try:
|
try:
|
||||||
response = _get_response(requests.get, server_url, **kw)
|
response = _get_response(requests.get, server_url, **kw)
|
||||||
except TimeoutError as e:
|
except TimeoutError as e:
|
||||||
raise ConnectionError(e)
|
raise ConnectionError(e)
|
||||||
response_parts = response.text.split(':')
|
|
||||||
|
_log.debug("[response] %s", response.text);
|
||||||
|
decoded = parser.decode_response(response);
|
||||||
|
_log.debug("[decoded] %s", repr(decoded));
|
||||||
|
|
||||||
return _SocketIOSession(
|
return _SocketIOSession(
|
||||||
id=response_parts[0],
|
id = decoded["payload"]["sid"],
|
||||||
heartbeat_timeout=int(response_parts[1]),
|
heartbeat_timeout = int(decoded["payload"]["pingInterval"]),
|
||||||
server_supported_transports=response_parts[3].split(','))
|
server_supported_transports = ["xhr-polling"]);#decoded["payload"]["upgrades"]);
|
||||||
|
|
||||||
|
#return _SocketIOSession(
|
||||||
|
# id=response_parts[0],
|
||||||
|
# heartbeat_timeout=int(response_parts[1]),
|
||||||
|
# server_supported_transports=response_parts[3].split(','))
|
||||||
|
|
|
||||||
41
socketIO_client/parser.py
Normal file
41
socketIO_client/parser.py
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
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;
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
import parser
|
||||||
import re
|
import re
|
||||||
import requests
|
import requests
|
||||||
import six
|
import six
|
||||||
|
|
@ -79,6 +80,7 @@ class _AbstractTransport(object):
|
||||||
for packet_text in self.recv():
|
for packet_text in self.recv():
|
||||||
_log.debug('[packet received] %s', packet_text)
|
_log.debug('[packet received] %s', packet_text)
|
||||||
try:
|
try:
|
||||||
|
#packet = parser.decode_response(packet_text);
|
||||||
packet_parts = packet_text.split(':', 3)
|
packet_parts = packet_text.split(':', 3)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
_log.warn('[packet error] %s', packet_text)
|
_log.warn('[packet error] %s', packet_text)
|
||||||
|
|
@ -167,7 +169,7 @@ class _XHR_PollingTransport(_AbstractTransport):
|
||||||
|
|
||||||
def __init__(self, socketIO_session, is_secure, base_url, **kw):
|
def __init__(self, socketIO_session, is_secure, base_url, **kw):
|
||||||
super(_XHR_PollingTransport, self).__init__()
|
super(_XHR_PollingTransport, self).__init__()
|
||||||
self._url = '%s://%s/xhr-polling/%s' % (
|
self._url = '%s://%s/?transport=polling&sid=%s' % (
|
||||||
'https' if is_secure else 'http',
|
'https' if is_secure else 'http',
|
||||||
base_url, socketIO_session.id)
|
base_url, socketIO_session.id)
|
||||||
self._connected = True
|
self._connected = True
|
||||||
|
|
@ -198,6 +200,7 @@ class _XHR_PollingTransport(_AbstractTransport):
|
||||||
self._url,
|
self._url,
|
||||||
params=self._params,
|
params=self._params,
|
||||||
timeout=TIMEOUT_IN_SECONDS)
|
timeout=TIMEOUT_IN_SECONDS)
|
||||||
|
#response_text = response.content
|
||||||
response_text = response.text
|
response_text = response.text
|
||||||
if not response_text.startswith(BOUNDARY):
|
if not response_text.startswith(BOUNDARY):
|
||||||
yield response_text
|
yield response_text
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue