1
import simplejson as json
2
from mongrel2 import handler
8
sender_id = "82209006-86FF-4982-B5EA-D1E29E55D480"
10
conn = handler.Connection(sender_id, "tcp://127.0.0.1:9990",
11
"tcp://127.0.0.1:9989")
17
badUnicode=re.compile(u'[\ud800-\udfff]')
19
logf=open('echo.log','wb')
20
#logf=open('/dev/null','wb')
23
def abortConnection(conn,req,reason='none',code=None):
24
#print 'abort',conn,req,reason,code
26
#print "Closing cleanly\n"
27
conn.reply_websocket(req,code+reason,opcode=wsutil.OP_CLOSE)
28
closingMessages[req.conn_id]=(time.time(),req.sender)
31
print >>logf,'abort',code,reason
36
for k,(t,uuid) in closingMessages.items():
37
if now > t+CONNECTION_TIMEOUT:
46
if req.is_disconnect():
47
#print "DISCONNECTED", req.conn_id
50
if req.headers.get('METHOD') == 'WEBSOCKET_HANDSHAKE':
54
"HTTP/1.1 101 Switching Protocols",
56
"Connection: Upgrade",
57
"Sec-WebSocket-Accept: %s\r\n\r\n"])%req.body)
60
if req.headers.get('METHOD') != 'WEBSOCKET':
61
print 'METHOD is Not WEBSOCKET:',req.headers#,req.body
66
#print 'headers',req.headers
67
flags = int(req.headers.get('FLAGS'),16)
68
fin = flags&0x80==0x80
72
#print fin,rsvd,opcode,len(wsdata),wsdata
75
#print "Unable to decode FLAGS"
76
abortConnection(conn,req,'WS decode failed')
80
abortConnection(conn,req,'reserved non-zero',
81
wsutil.CLOSE_PROTOCOL_ERROR)
84
if opcode == wsutil.OP_CLOSE:
85
if req.conn_id in closingMessages:
86
del closingMessages[req.conn_id]
89
conn.reply_websocket(req,wsdata,opcode)
92
if req.conn_id in closingMessages:
95
if opcode not in wsutil.opcodes:
96
abortConnection(conn,req,'Unknown opcode',
97
wsutil.CLOSE_PROTOCOL_ERROR)
100
if (opcode & 0x8) != 0:
101
if opcode ==wsutil.OP_PING:
102
opcode = wsutil.OP_PONG
103
conn.reply_websocket(req,wsdata,opcode)
107
if opcode == wsutil.OP_PONG:
108
continue # We don't send pings, so ignore pongs
109
if(opcode == wsutil.OP_TEXT):
111
x=wsdata.decode('utf-8')
112
#Thank you for not fixing python issue8271 in 2.x :(
113
if badUnicode.search(x):
114
raise UnicodeError('Surrogates not allowed')
116
#if (0xd800 <= ord(c) <= 0xdfff):
117
#raise UnicodeError('Surrogates not allowed')
119
abortConnection(conn,req,'invalid UTF', wsutil.CLOSE_BAD_DATA)
121
conn.reply_websocket(req,wsdata,opcode)