Exemplo n.º 1
0
    def test_queue(self):
        request = _create_blocking_request_hixie75()
        receiver = msgutil.MessageReceiver(request)

        self.assertEqual(None, receiver.receive_nowait())

        request.connection.put_bytes('\x00Hello!\xff')
        self.assertEqual('Hello!', receiver.receive())
Exemplo n.º 2
0
    def test_queue(self):
        request = _create_blocking_request()
        receiver = msgutil.MessageReceiver(request)

        self.assertEqual(None, receiver.receive_nowait())

        request.connection.put_bytes('\x81\x86' + _mask_hybi('Hello!'))
        self.assertEqual('Hello!', receiver.receive())
Exemplo n.º 3
0
    def test_onmessage(self):
        onmessage_queue = Queue.Queue()

        def onmessage_handler(message):
            onmessage_queue.put(message)

        request = _create_blocking_request_hixie75()
        receiver = msgutil.MessageReceiver(request, onmessage_handler)

        request.connection.put_bytes('\x00Hello!\xff')
        self.assertEqual('Hello!', onmessage_queue.get())
Exemplo n.º 4
0
    def test_onmessage(self):
        onmessage_queue = Queue.Queue()

        def onmessage_handler(message):
            onmessage_queue.put(message)

        request = _create_blocking_request()
        receiver = msgutil.MessageReceiver(request, onmessage_handler)

        request.connection.put_bytes('\x81\x86' + _mask_hybi('Hello!'))
        self.assertEqual('Hello!', onmessage_queue.get())
Exemplo n.º 5
0
def web_socket_transfer_data(request):
    """
    Loop while connection exists and process data to be sent and received.
    """

    try:
        line = request.ws_stream.receive_message()
        if str(line).startswith('username'):
            username = str(line)[8:]
        line = request.ws_stream.receive_message()
        if str(line).startswith('password'):
            passwd = 'AIR_' + str(line)[8:]
        out_message = ''
        client = xmpp.Client('pvp.net', debug=[])
        if client.connect(server=('chat.na1.lol.riotgames.com', 5223)) == "":
            request.ws_stream.send_message(CONN_ERROR, binary=False)
            return
        if client.auth(username, passwd, "xiff") == None:
            request.ws_stream.send_message(AUTH_ERROR, binary=False)
            return
        if client.isConnected():
            keepalive = datetime.now()
            client.sendInitPresence(requestRoster=1)
            pres = xmpp.Presence(show='chat')
            pres.setStatus(STATUS_MSG)
            client.send(pres)

            message_sender = msgutil.MessageSender(request)
            message_receiver = msgutil.MessageReceiver(request)

            incoming_thread = CheckMessages(client, message_sender)
            incoming_thread.setDaemon(True)
            incoming_thread.start()

            client.RegisterHandler('presence', incoming_thread.presence_update)
            client.RegisterHandler('message', incoming_thread.message_update)

            request.ws_stream.send_message(CONN_SUCCESS, binary=False)
            to_jid = None #jid for the user receiving the message
            while True:
                line = message_receiver.receive_nowait()
                if client.isConnected():    #Check connection on each loop
                    if line != None:
                        out_message = str(line)
                        if ((out_message != "Keep alive") and (out_message != "Kill session")):
                            split_out = out_message.split()
                            roster = client.getRoster()
                            try:
                                if split_out[0] == '#:#outmessage#:#':
                                    to_jid = split_out[1][3:-3]
                                    out_message = ' '.join(split_out[2:])
                            except IndexError:
                                to_jid = None
                                out_message = ''

                            if to_jid:
                                for user in incoming_thread.alive_users:
                                    if str(roster.getName(user)).lower() == str(to_jid).lower():
                                        to_jid = user
                                        valid_jid = True
                                        break
                                    else:
                                        valid_jid = False
                                if valid_jid:
                                    message = xmpp.Message(to_jid, out_message)
                                    message.setAttr('type', 'chat')
                                    client.send(message)
                                else:
                                    request.ws_stream.send_message(USER_WARNING, binary=False)
                        if (out_message == "Kill session"):
                            client.disconnect()
                            return
                    if (datetime.now() - keepalive).seconds > WEBSOCKET_TIMEOUT:
                        client.disconnect()
                        return
                else:
                    try:
                        request.ws_stream.send_message(CONN_ERROR, binary=False)
                    except:     #Don't crap out and leave a zombie process if the xmpp connection drops along with the websocket session
                        pass
                    return

                #Execute keep alive request regardless of the status of the xmpp connection
                if (str(line) == "Keep alive"):
                    keepalive = datetime.now()
                #Throttle message receiving otherwise the non-blocking state of the loop will cause it to execute as fast as possible
                time.sleep(RECEIVE_BUFFER)
        else:
            try:
                request.ws_stream.send_message(CONN_ERROR, binary=False)
            except:     #Don't crap out and leave a zombie process if the xmpp connection drops along with the websocket session
                pass
            return
    except: #Something was causing apache to overload... Meh?
        return