summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliris <liris.pp@gmail.com>2010-12-30 21:04:11 +0900
committerliris <liris.pp@gmail.com>2010-12-30 21:04:11 +0900
commit74dc479db1fd6d5e4b97144403bf2ccf1b66e450 (patch)
tree01183d1b8c8de413da4c5d3f2d2375f88493aa64
parentc03b9a785c586a94031c1610b31818c2d43f2e0f (diff)
downloadwebsocket-client-74dc479db1fd6d5e4b97144403bf2ccf1b66e450.tar.gz
support to receive binary data. but not tested.
-rw-r--r--websocket.py44
1 files changed, 34 insertions, 10 deletions
diff --git a/websocket.py b/websocket.py
index f9093c9..ddc4348 100644
--- a/websocket.py
+++ b/websocket.py
@@ -203,7 +203,7 @@ class WebSocket(object):
self.sock.settimeout(to)
if enableTrace:
print "--- challenge response result ---"
- print result
+ print repr(result)
print "---------------------------------"
return result
@@ -270,17 +270,32 @@ class WebSocket(object):
"""
Reeive utf-8 string data from the server.
"""
- bytes = []
+ b = self._recv(1)
+ frame_type = ord(b)
+ if frame_type == 0x00:
+ bytes = []
+ while True:
+ b = self._recv(1)
+ if b == "\xff":
+ break
+ else:
+ bytes.append(b)
+ return "".join(bytes)
+ elif (frame_type & 0x80) == 0x80:
+ # which frame type is valid?
+ length = self._read_length()
+ bytes = self._recv_strict(length)
+ return bytes
+
+ def _read_length(self):
+ length = 0
while True:
- b = self._recv(1)
- if b == "\xff":
+ b = ord(self._recv(1))
+ length = length * (1 << 7) + (b & 0x7f)
+ if (b & 0x80) == 0x80:
break
- elif b == "\x00":
- # start bytes
- pass
- else:
- bytes.append(b)
- return "".join(bytes)
+
+ return length
def close(self):
"""
@@ -297,6 +312,15 @@ class WebSocket(object):
raise ConnectionClosedException()
return bytes
+ def _recv_strict(self, bufsize):
+ remaining = bufszie
+ bytes = ""
+ while remaining:
+ bytes += self._recv(remaining)
+ remaining = bufsize - len(bytes)
+
+ return self._recv(bufsize)
+
def _recv_line(self):
line = []
while True: