Ejemplo n.º 1
0
 def __init__(self, *args, **kwargs):
     global conn_id
     HTTPConnection.__init__(self, *args, **kwargs)
     self.sendq = Queue()
     self.control_frames = deque()
     self.cf_lock = Lock()
     self.sending = None
     self.send_buf = None
     self.frag_decoder = UTF8Decoder()
     self.ws_close_received = self.ws_close_sent = False
     conn_id += 1
     self.websocket_connection_id = conn_id
     self.stop_reading = False
Ejemplo n.º 2
0
 def __init__(self, *args, **kwargs):
     global conn_id
     HTTPConnection.__init__(self, *args, **kwargs)
     self.sendq = Queue()
     self.control_frames = deque()
     self.cf_lock = Lock()
     self.sending = None
     self.send_buf = None
     self.frag_decoder = UTF8Decoder()
     self.ws_close_received = self.ws_close_sent = False
     conn_id += 1
     self.websocket_connection_id = conn_id
     self.stop_reading = False
Ejemplo n.º 3
0
    def finalize_headers(self, inheaders):
        upgrade = inheaders.get('Upgrade', '')
        key = inheaders.get('Sec-WebSocket-Key', None)
        conn = {
            x.strip().lower()
            for x in inheaders.get('Connection', '').split(',')
        }
        if key is None or upgrade.lower(
        ) != 'websocket' or 'upgrade' not in conn:
            return HTTPConnection.finalize_headers(self, inheaders)
        ver = inheaders.get('Sec-WebSocket-Version', 'Unknown')
        try:
            ver_ok = int(ver) >= 13
        except Exception:
            ver_ok = False
        if not ver_ok:
            return self.simple_response(
                httplib.BAD_REQUEST,
                'Unsupported WebSocket protocol version: %s' % ver)
        if self.method != 'GET':
            return self.simple_response(
                httplib.BAD_REQUEST,
                'Invalid WebSocket method: %s' % self.method)

        response = HANDSHAKE_STR % standard_b64encode(
            sha1(key + GUID_STR).digest())
        self.optimize_for_sending_packet()
        self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
        self.set_state(WRITE, self.upgrade_connection_to_ws,
                       ReadOnlyFileBuffer(response.encode('ascii')), inheaders)
Ejemplo n.º 4
0
 def close(self):
     if self.in_websocket_mode:
         try:
             self.websocket_handler.handle_websocket_close(self.websocket_connection_id)
         except Exception:
             self.log.exception('Error in WebSocket close handler')
         # Try to write a close frame, just once
         try:
             if self.send_buf is None and not self.ws_close_sent:
                 self.websocket_close(SHUTTING_DOWN, 'Shutting down')
                 with self.cf_lock:
                     self.write(self.control_frames.pop())
         except Exception:
             pass
         Connection.close(self)
     else:
         HTTPConnection.close(self)
Ejemplo n.º 5
0
    def finalize_headers(self, inheaders):
        upgrade = inheaders.get('Upgrade', '')
        key = inheaders.get('Sec-WebSocket-Key', None)
        conn = {x.strip().lower() for x in inheaders.get('Connection', '').split(',')}
        if key is None or upgrade.lower() != 'websocket' or 'upgrade' not in conn:
            return HTTPConnection.finalize_headers(self, inheaders)
        ver = inheaders.get('Sec-WebSocket-Version', 'Unknown')
        try:
            ver_ok = int(ver) >= 13
        except Exception:
            ver_ok = False
        if not ver_ok:
            return self.simple_response(httplib.BAD_REQUEST, 'Unsupported WebSocket protocol version: %s' % ver)
        if self.method != 'GET':
            return self.simple_response(httplib.BAD_REQUEST, 'Invalid WebSocket method: %s' % self.method)

        response = HANDSHAKE_STR % standard_b64encode(sha1(key + GUID_STR).digest())
        self.optimize_for_sending_packet()
        self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
        self.set_state(WRITE, self.upgrade_connection_to_ws, ReadOnlyFileBuffer(response.encode('ascii')), inheaders)