def handle_param(self): (size,) = unpack("!i", receive(4)) size -= 4 key = until('\0') value = until('\0') assert len(key) + len(value) == size self.params[key[:-1]] = value[:-1]
def handle_param(self): (size, ) = unpack("!i", receive(4)) size -= 4 key = until('\0') value = until('\0') assert len(key) + len(value) == size self.params[key[:-1]] = value[:-1]
def handle_echo(conn): size = int((until('|'))[:-1]) said = count(size) out = 'YS:' + said send( out ) touch()
def handle_echo(conn): size = int((until('|'))[:-1]) said = receive(size) out = 'YS:' + said send(out) touch()
def do_upgrade(self, req): if req.headers.get_one('Upgrade') != 'WebSocket': return self.web_handler(req) # do upgrade response org = req.headers.get_one('Origin') send( '''HTTP/1.1 101 Web Socket Protocol Handshake\r Upgrade: WebSocket\r Connection: Upgrade\r WebSocket-Origin: %s\r WebSocket-Location: %s\r WebSocket-Protocol: diesel-generic\r \r ''' % (org, self.ws_location)) inq = Queue() outq = Queue() def wrap(inq, outq): self.web_socket_handler(inq, outq) outq.put(WebSocketDisconnect()) fork(wrap, inq, outq) while True: try: typ, val = first(receive=1, waits=[outq.wait_id]) if typ == 'receive': assert val == '\x00' val = until('\xff')[:-1] if val == '': inq.put(WebSocketDisconnect()) else: data = dict((k, v[0]) if len(v) == 1 else (k, v) for k, v in cgi.parse_qs(val).iteritems()) inq.put(WebSocketData(data)) else: try: v = outq.get(waiting=False) except QueueEmpty: pass else: if type(v) is WebSocketDisconnect: send('\x00\xff') break else: data = dumps(dict(v)) send('\x00%s\xff' % data) except ConnectionClosed: inq.put(WebSocketDisconnect()) raise ConnectionClosed("remote disconnected")
def _readline(self): if self.timeout > 0: timeout_handler = TimeoutHandler(self.timeout) ev, line = diesel.first(until="\n", sleep=timeout_handler.remaining()) if ev == 'sleep': timeout_handler.timeout() else: return line else: line = diesel.until("\n") if line: return line else: raise StompTimeout
def handle_error(self): (size,) = unpack("!i", receive(4)) size -= 4 d = {} while size: (key,) = unpack('!b', receive(1)) if key == 0: break value = until('\0') size -= (1 + len(value)) d[key] = value[:-1] raise PgServerError(d[ord('M')])
def handle_error(self): (size, ) = unpack("!i", receive(4)) size -= 4 d = {} while size: (key, ) = unpack('!b', receive(1)) if key == 0: break value = until('\0') size -= (1 + len(value)) d[key] = value[:-1] raise PgServerError(d[ord('M')])
def handle_row_description(self): (size, n) = unpack("!ih", receive(6)) names = [] types = [] for x in xrange(n): name = until('\0')[:-1] names.append(name) taboid, fattnum, typoid, sz, typmod, fmt = \ unpack('!ihihih', receive(18)) assert fmt == 0 types.append(typoid) return PgRowDescriptor(names, types)
def __call__(self, addr): '''Since an instance of HttpServer is passed to the Service class (with appropriate request_handler established during initialization), this __call__ method is what's actually invoked by diesel. This is our generator, this is our protocol handler. It does protocol work, then calls the request_handler, looking for HttpClose if necessary. ''' while True: chunks = [] try: header_line = yield until_eol() except ConnectionClosed: break method, url, version = parse_request_line(header_line) req = HttpRequest(method, url, version, remote_addr=addr) header_block = yield until('\r\n\r\n') heads = HttpHeaders() heads.parse(header_block) req.headers = heads if req.version >= '1.1' and heads.get_one('Expect') == '100-continue': yield 'HTTP/1.1 100 Continue\r\n\r\n' more_mode = self.check_for_http_body(heads) if more_mode is self.BODY_NONE: req.body = None elif more_mode is self.BODY_CL: req.body = yield bytes(int(heads['Content-Length'])) elif more_mode is self.BODY_CHUNKED: req.body = handle_chunks(heads) leave_loop = False try: yield self.request_handler(req) except HttpClose: leave_loop = True if leave_loop: break
def handle_echo(remote_addr): print "connected" #print remote_addr[0] tsqldb = sqldb() row = tsqldb.checkip(remote_addr[0]) if(row != 0): #t = threading.Timer(5,ontime,[row[2]]) #t.start() #test(sock) pass else: #print "no ip" pass while True: message = until('\r\n') send("you said: %s" % message)
def handle(request): """Handle a request for a websocket. """ if request.transport != 'xhr-polling': raise Response(404) org = request.headers.one('Origin') inq = Queue() outq = Queue() def wrap(request, inq, outq): handler(request, inq, outq) outq.put(WebSocketDisconnect()) fork(wrap, request, inq, outq) while True: try: log.debug("trying websocket thing") typ, val = first(receive=1, waits=[outq.wait_id]) log.debug(typ) log.debug(val) if typ == 'receive': assert val == '\x00' val = until('\xff')[:-1] if val == '': inq.put(WebSocketDisconnect()) else: inq.put(request) else: try: v = outq.get(waiting=False) except QueueEmpty: pass else: if type(v) is WebSocketDisconnect: send('\x00\xff') break else: send('\x00%s\xff' % response.to_http(request.version)) except ConnectionClosed: inq.put(WebSocketDisconnect()) raise ConnectionClosed("remote disconnected")
def __call__(self, addr): '''Since an instance of HttpServer is passed to the Service class (with appropriate request_handler established during initialization), this __call__ method is what's actually invoked by diesel. This is our generator, this is our protocol handler. It does protocol work, then calls the request_handler, looking for HttpClose if necessary. ''' while True: chunks = [] try: header_line = until_eol() except ConnectionClosed: break method, url, version = parse_request_line(header_line) req = HttpRequest(method, url, version, remote_addr=addr) header_block = until('\r\n\r\n') heads = HttpHeaders() heads.parse(header_block) req.headers = heads if req.version >= '1.1' and heads.get_one( 'Expect') == '100-continue': send('HTTP/1.1 100 Continue\r\n\r\n') more_mode = self.check_for_http_body(heads) if more_mode is self.BODY_NONE: req.body = None elif more_mode is self.BODY_CL: req.body = receive(int(heads.get_one('Content-Length'))) elif more_mode is self.BODY_CHUNKED: req.body = handle_chunks(heads) if not self.request_handler(req): break
def handle_non_rfc_frames(self, inq, outq): while True: typ, val = first(receive=1, waits=[outq]) if typ == 'receive': assert val == '\x00' val = until('\xff')[:-1] if val == '': inq.put(WebSocketDisconnect()) else: try: data = loads(val) inq.put(data) except Exception, ex: pass elif typ == outq: if type(val) is WebSocketDisconnect: send('\x00\xff') break else: data = dumps(dict(val)) send('\x00%s\xff' % data)
def request(self, method, path, headers, body=None): '''Issues a `method` request to `path` on the connected server. Sends along `headers`, and body. Very low level--you must set "host" yourself, for example. It will set Content-Length, however. ''' req = HttpRequest(method, path, '1.1') if body: headers.set('Content-Length', len(body)) yield '%s\r\n%s\r\n\r\n' % (req.format(), headers.format()) if body: yield body resp_line = yield until_eol() version, code, status = resp_line.split(None, 2) code = int(code) header_block = yield until('\r\n\r\n') heads = HttpHeaders() heads.parse(header_block) if heads.get_one('Transfer-Encoding') == 'chunked': body = yield handle_chunks(heads) else: cl = int(heads.get_one('Content-Length', 0)) if cl: body = yield bytes(cl) else: body = None if version < '1.0' or heads.get_one('Connection') == 'close': self.close() yield response((code, heads, body))
def handle_non_rfc_frames(self, inq, outq): while True: typ, val = first(receive=1, waits=[outq]) if typ == 'receive': assert val == '\x00' val = until('\xff')[:-1] if val == '': inq.put(WebSocketDisconnect()) break else: try: data = loads(val) inq.put(data) except JSONDecodeError: pass elif typ == outq: if type(val) is WebSocketDisconnect: send('\x00\xff') break else: data = dumps(dict(val)) send('\x00%s\xff' % data)
def handle_echo(remote_addr): while True: message = until('\r\n') send("you said: %s" % message)
def do_upgrade(self, req): if req.headers.get_one('Upgrade') != 'WebSocket': return self.web_handler(req) # do upgrade response org = req.headers.get_one('Origin') if 'Sec-WebSocket-Key1' in req.headers: protocol = (req.headers.get_one('Sec-WebSocket-Protocol') if 'Sec-WebSocket-Protocol' in req.headers else None) key1 = req.headers.get_one('Sec-WebSocket-Key1') key2 = req.headers.get_one('Sec-WebSocket-Key2') key3 = receive(8) num1 = int(''.join(c for c in key1 if c in '0123456789')) num2 = int(''.join(c for c in key2 if c in '0123456789')) assert num1 % key1.count(' ') == 0 assert num2 % key2.count(' ') == 0 final = pack('!II8s', num1 / key1.count(' '), num2 / key2.count(' '), key3) secure_response = hashlib.md5(final).digest() send( '''HTTP/1.1 101 Web Socket Protocol Handshake\r Upgrade: WebSocket\r Connection: Upgrade\r Sec-WebSocket-Origin: %s\r Sec-WebSocket-Location: %s\r '''% (org, self.ws_location)) if protocol: send("Sec-WebSocket-Protocol: %s\r\n" % (protocol,)) send("\r\n") send(secure_response) else: send( '''HTTP/1.1 101 Web Socket Protocol Handshake\r Upgrade: WebSocket\r Connection: Upgrade\r WebSocket-Origin: %s\r WebSocket-Location: %s\r WebSocket-Protocol: diesel-generic\r \r ''' % (org, self.ws_location)) inq = Queue() outq = Queue() def wrap(inq, outq): self.web_socket_handler(inq, outq) outq.put(WebSocketDisconnect()) fork(wrap, inq, outq) while True: try: typ, val = first(receive=1, waits=[outq.wait_id]) if typ == 'receive': assert val == '\x00' val = until('\xff')[:-1] if val == '': inq.put(WebSocketDisconnect()) else: data = dict((k, v[0]) if len(v) == 1 else (k, v) for k, v in cgi.parse_qs(val).iteritems()) inq.put(WebSocketData(data)) else: try: v = outq.get(waiting=False) except QueueEmpty: pass else: if type(v) is WebSocketDisconnect: send('\x00\xff') break else: data = dumps(dict(v)) send('\x00%s\xff' % data) except ConnectionClosed: inq.put(WebSocketDisconnect()) raise ConnectionClosed("remote disconnected")
def echo(self, message): send(message + '\r\n') back = until("\r\n") return back
def do_upgrade(self, req): if req.headers.get_one( 'Upgrade') != 'websocket' and req.headers.get_one( 'Upgrade') != 'WebSocket': return self.web_handler(req) hybi = False # do upgrade response org = req.headers.get_one('Origin') if 'Sec-WebSocket-Key' in req.headers: assert req.headers.get_one('Sec-WebSocket-Version') in ['8', '13'], \ "We currently only support Websockets version 8 and 13 (ver=%s)" % \ req.headers.get_one('Sec-WebSocket-Version') protocol = (req.headers.get_one('Sec-WebSocket-Protocol') if 'Sec-WebSocket-Protocol' in req.headers else None) key = req.headers.get_one('Sec-WebSocket-Key') accept = b64encode(hashlib.sha1(key + self.GUID).digest()) send(server_handshake_hybi % accept) if protocol: send("Sec-WebSocket-Protocol: %s\r" % protocol) send("\r\n\r\n") hybi = True elif 'Sec-WebSocket-Key1' in req.headers: protocol = (req.headers.get_one('Sec-WebSocket-Protocol') if 'Sec-WebSocket-Protocol' in req.headers else None) key1 = req.headers.get_one('Sec-WebSocket-Key1') key2 = req.headers.get_one('Sec-WebSocket-Key2') key3 = receive(8) num1 = int(''.join(c for c in key1 if c in '0123456789')) num2 = int(''.join(c for c in key2 if c in '0123456789')) assert num1 % key1.count(' ') == 0 assert num2 % key2.count(' ') == 0 final = pack('!II8s', num1 / key1.count(' '), num2 / key2.count(' '), key3) secure_response = hashlib.md5(final).digest() send('''HTTP/1.1 101 Web Socket Protocol Handshake\r Upgrade: WebSocket\r Connection: Upgrade\r Sec-WebSocket-Origin: %s\r Sec-WebSocket-Location: %s\r ''' % (org, self.ws_location)) if protocol: send("Sec-WebSocket-Protocol: %s\r\n" % (protocol, )) send("\r\n") send(secure_response) else: send('''HTTP/1.1 101 Web Socket Protocol Handshake\r Upgrade: WebSocket\r Connection: Upgrade\r WebSocket-Origin: %s\r WebSocket-Location: %s\r WebSocket-Protocol: diesel-generic\r \r ''' % (org, self.ws_location)) inq = Queue() outq = Queue() def wrap(req, inq, outq): self.web_socket_handler(req, inq, outq) outq.put(WebSocketDisconnect()) fork(wrap, req, inq, outq) while True: try: if hybi: typ, val = first(receive=2, waits=[outq]) if typ == 'receive': b1, b2 = unpack(">BB", val) opcode = b1 & 0x0f fin = (b1 & 0x80) >> 7 has_mask = (b2 & 0x80) >> 7 assert has_mask == 1, "Frames must be masked" if opcode == 8: inq.put(WebSocketDisconnect()) else: assert opcode == 1, "Currently only opcode 1 is supported (opcode=%s)" % opcode length = b2 & 0x7f if length == 126: length = unpack('>H', receive(2)) elif length == 127: length = unpack('>L', receive(8)) mask = unpack('>BBBB', receive(4)) payload = array('B', receive(length)) for i in xrange(len(payload)): payload[i] ^= mask[i % 4] try: data = loads(payload.tostring()) inq.put(data) except JSONDecodeError: pass elif typ == outq: if type(val) is WebSocketDisconnect: b1 = 0x80 | (8 & 0x0f) # FIN + opcode send(pack('>BB', b1, 0)) break else: payload = dumps(val) b1 = 0x80 | (1 & 0x0f) # FIN + opcode payload_len = len(payload) if payload_len <= 125: header = pack('>BB', b1, payload_len) elif payload_len > 125 and payload_len < 65536: header = pack('>BBH', b1, 126, payload_len) elif payload_len >= 65536: header = pack('>BBQ', b1, 127, payload_len) send(header + payload) else: typ, val = first(receive=1, waits=[outq]) if typ == 'receive': assert val == '\x00' val = until('\xff')[:-1] if val == '': inq.put(WebSocketDisconnect()) else: try: data = loads(val) inq.put(data) except JSONDecodeError: pass elif typ == outq: if type(val) is WebSocketDisconnect: send('\x00\xff') break else: data = dumps(dict(val)) send('\x00%s\xff' % data) except ConnectionClosed: inq.put(WebSocketDisconnect()) raise ConnectionClosed("remote disconnected")
def echo(self, message): yield message + "\r\n" back = yield until("\r\n") yield response(back)
def do_upgrade(self, req): if req.headers.get_one('Upgrade') != 'websocket' and req.headers.get_one('Upgrade') != 'WebSocket': return self.web_handler(req) hybi = False # do upgrade response org = req.headers.get_one('Origin') if 'Sec-WebSocket-Key' in req.headers: assert req.headers.get_one('Sec-WebSocket-Version') == '8', \ "We currently only support version 8 and below" protocol = (req.headers.get_one('Sec-WebSocket-Protocol') if 'Sec-WebSocket-Protocol' in req.headers else None) key = req.headers.get_one('Sec-WebSocket-Key') accept = b64encode(hashlib.sha1(key + self.GUID).digest()) send(server_handshake_hybi % accept) if protocol: send("Sec-WebSocket-Protocol: %s\r" % protocol) send("\r\n\r\n") hybi = True elif 'Sec-WebSocket-Key1' in req.headers: protocol = (req.headers.get_one('Sec-WebSocket-Protocol') if 'Sec-WebSocket-Protocol' in req.headers else None) key1 = req.headers.get_one('Sec-WebSocket-Key1') key2 = req.headers.get_one('Sec-WebSocket-Key2') key3 = receive(8) num1 = int(''.join(c for c in key1 if c in '0123456789')) num2 = int(''.join(c for c in key2 if c in '0123456789')) assert num1 % key1.count(' ') == 0 assert num2 % key2.count(' ') == 0 final = pack('!II8s', num1 / key1.count(' '), num2 / key2.count(' '), key3) secure_response = hashlib.md5(final).digest() send( '''HTTP/1.1 101 Web Socket Protocol Handshake\r Upgrade: WebSocket\r Connection: Upgrade\r Sec-WebSocket-Origin: %s\r Sec-WebSocket-Location: %s\r '''% (org, self.ws_location)) if protocol: send("Sec-WebSocket-Protocol: %s\r\n" % (protocol,)) send("\r\n") send(secure_response) else: send( '''HTTP/1.1 101 Web Socket Protocol Handshake\r Upgrade: WebSocket\r Connection: Upgrade\r WebSocket-Origin: %s\r WebSocket-Location: %s\r WebSocket-Protocol: diesel-generic\r \r ''' % (org, self.ws_location)) inq = Queue() outq = Queue() def wrap(inq, outq): self.web_socket_handler(inq, outq) outq.put(WebSocketDisconnect()) fork(wrap, inq, outq) while True: try: if hybi: typ, val = first(receive=2, waits=[outq.wait_id]) if typ == 'receive': b1, b2 = unpack(">BB", val) opcode = b1 & 0x0f fin = (b1 & 0x80) >> 7 has_mask = (b2 & 0x80) >> 7 assert has_mask == 1, "Frames must be masked" if opcode == 8: inq.put(WebSocketDisconnect()) else: assert opcode == 1, "Currently only opcode 1 is supported" length = b2 & 0x7f if length == 126: length = unpack('>H', receive(2)) elif length == 127: length = unpack('>L', receive(8)) mask = unpack('>BBBB', receive(4)) payload = array('>B', receive(length)) for i in xrange(len(payload)): payload[i] ^= mask[i % 4] data = dict((k, v[0]) if len(v) == 1 else (k, v) for k, v in cgi.parse_qs(payload.tostring()).iteritems()) inq.put(WebSocketData(data)) else: try: v = outq.get(waiting=False) except QueueEmpty: pass else: if type(v) is WebSocketDisconnect: b1 = 0x80 | (8 & 0x0f) # FIN + opcode send(pack('>BB', b1, 0)) break else: payload = dumps(v) b1 = 0x80 | (1 & 0x0f) # FIN + opcode payload_len = len(payload) if payload_len <= 125: header = pack('>BB', b1, payload_len) elif payload_len > 125 and payload_len < 65536: header = pack('>BBH', b1, 126, payload_len) elif payload_len >= 65536: header = pack('>BBQ', b1, 127, payload_len) send(header + payload) else: typ, val = first(receive=1, waits=[outq.wait_id]) if typ == 'receive': assert val == '\x00' val = until('\xff')[:-1] if val == '': inq.put(WebSocketDisconnect()) else: data = dict((k, v[0]) if len(v) == 1 else (k, v) for k, v in cgi.parse_qs(val).iteritems()) inq.put(WebSocketData(data)) else: try: v = outq.get(waiting=False) except QueueEmpty: pass else: if type(v) is WebSocketDisconnect: send('\x00\xff') break else: data = dumps(dict(v)) send('\x00%s\xff' % data) except ConnectionClosed: inq.put(WebSocketDisconnect()) raise ConnectionClosed("remote disconnected")
def handle_echo(remote_addr): while True: message = yield until('\r\n') yield "you said: %s" % message
def echo(self, message): yield message + '\r\n' back = yield until("\r\n") yield response(back)
def do_upgrade(self, req): if req.headers.get_one('Upgrade') != 'WebSocket': return self.web_handler(req) # do upgrade response org = req.headers.get_one('Origin') if 'Sec-WebSocket-Key1' in req.headers: protocol = (req.headers.get_one('Sec-WebSocket-Protocol') if 'Sec-WebSocket-Protocol' in req.headers else None) key1 = req.headers.get_one('Sec-WebSocket-Key1') key2 = req.headers.get_one('Sec-WebSocket-Key2') key3 = receive(8) num1 = int(''.join(c for c in key1 if c in '0123456789')) num2 = int(''.join(c for c in key2 if c in '0123456789')) assert num1 % key1.count(' ') == 0 assert num2 % key2.count(' ') == 0 final = pack('!II8s', num1 / key1.count(' '), num2 / key2.count(' '), key3) secure_response = hashlib.md5(final).digest() send('''HTTP/1.1 101 Web Socket Protocol Handshake\r Upgrade: WebSocket\r Connection: Upgrade\r Sec-WebSocket-Origin: %s\r Sec-WebSocket-Location: %s\r ''' % (org, self.ws_location)) if protocol: send("Sec-WebSocket-Protocol: %s\r\n" % (protocol, )) send("\r\n") send(secure_response) else: send('''HTTP/1.1 101 Web Socket Protocol Handshake\r Upgrade: WebSocket\r Connection: Upgrade\r WebSocket-Origin: %s\r WebSocket-Location: %s\r WebSocket-Protocol: diesel-generic\r \r ''' % (org, self.ws_location)) inq = Queue() outq = Queue() def wrap(inq, outq): self.web_socket_handler(inq, outq) outq.put(WebSocketDisconnect()) fork(wrap, inq, outq) while True: try: typ, val = first(receive=1, waits=[outq.wait_id]) if typ == 'receive': assert val == '\x00' val = until('\xff')[:-1] if val == '': inq.put(WebSocketDisconnect()) else: data = dict((k, v[0]) if len(v) == 1 else (k, v) for k, v in cgi.parse_qs(val).iteritems()) inq.put(WebSocketData(data)) else: try: v = outq.get(waiting=False) except QueueEmpty: pass else: if type(v) is WebSocketDisconnect: send('\x00\xff') break else: data = dumps(dict(v)) send('\x00%s\xff' % data) except ConnectionClosed: inq.put(WebSocketDisconnect()) raise ConnectionClosed("remote disconnected")
def handle_echo(remote_addr): while True: message = yield until("\r\n") yield "you said: %s" % message