diff --git a/websocket.py b/websocket.py index 833d2a2..37b69c8 100644 --- a/websocket.py +++ b/websocket.py @@ -16,7 +16,8 @@ as taken from http://docs.python.org/dev/library/ssl.html#certificates ''' -import os, sys, time, errno, signal, socket, struct, traceback, select +import os, sys, time, errno, signal, socket, traceback, select +import struct, array from cgi import parse_qsl from base64 import b64encode, b64decode @@ -28,6 +29,7 @@ if sys.hexversion > 0x3000000: from urllib.parse import urlsplit b2s = lambda buf: buf.decode('latin_1') s2b = lambda s: s.encode('latin_1') + s2a = lambda s: s else: # python 2.X from cStringIO import StringIO @@ -36,6 +38,7 @@ else: # No-ops b2s = lambda buf: buf s2b = lambda s: s + s2a = lambda s: [ord(c) for c in s] if sys.hexversion >= 0x2060000: # python >= 2.6 @@ -54,7 +57,7 @@ for mod, sup in [('numpy', 'HyBi protocol'), globals()[mod] = __import__(mod) except ImportError: globals()[mod] = None - print("WARNING: no '%s' module, %s support disabled" % ( + print("WARNING: no '%s' module, %s decode may be slower" % ( mod, sup)) @@ -213,6 +216,38 @@ Sec-WebSocket-Accept: %s\r os.dup2(os.open(os.devnull, os.O_RDWR), sys.stdout.fileno()) os.dup2(os.open(os.devnull, os.O_RDWR), sys.stderr.fileno()) + @staticmethod + def unmask(buf, f): + pstart = f['hlen'] + 4 + pend = pstart + f['length'] + if numpy: + b = c = s2b('') + if f['length'] >= 4: + mask = numpy.frombuffer(buf, dtype=numpy.dtype('= 4: - mask = numpy.frombuffer(buf, dtype=numpy.dtype('= 2.6 and numpy module is required for HyBi-07 or greater") - # HyBi-07 report version 7 # HyBi-08 - HyBi-12 report version 8 # HyBi-13 reports version 13 @@ -675,6 +690,9 @@ Sec-WebSocket-Accept: %s\r self.msg("%s: %s WebSocket connection" % (address[0], stype)) self.msg("%s: Version %s, base64: '%s'" % (address[0], self.version, self.base64)) + if self.path != '/': + self.msg("%s: Path: '%s'" % (address[0], self.path)) + # Send server WebSockets handshake response #self.msg("sending response [%s]" % response)