def handshake(self): data = self.request.recv(1024) headers = Message(StringIO(data.split("\r\n", 1)[1])) body = data.split("\r\n\r\n")[1] upgrade = headers.get("Upgrade", "") if upgrade.lower() != "websocket": print "WebSockets client " + self.client_address[0] + " wrong Upgrade" return if headers.getheader("Sec-WebSocket-Key") != None: self.ws_rfc = True response = self.handshake_singleKey(headers) elif (headers.getheader("Sec-WebSocket-Key1") != None) and (headers.getheader("Sec-WebSocket-Key2") != None): self.ws_rfc = False response = self.handshake_twoKeys(headers, body) else: print "WebSockets client " + self.client_address[0] + " wrong structure" return self.handshake_done = self.request.sendall(response) self.server.clients += [self] print "WebSockets client " + self.client_address[0] + " handshaken"