예제 #1
0
    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"