Ejemplo n.º 1
0
    def handle(self):
        logger.info('Client connected: %s' % self.client_ident())

        while True:
            buf = ''
            ready_to_read, ready_to_write, in_error = select.select([self.request], [], [], 0.1)

            # Write any commands to the client
            while self.send_queue:
                msg = self.send_queue.popleft()
                logger.debug('to %s: %s' % (self.client_ident(), msg))
                try:
                    self.request.send(msg + '\r\n')
                except socket.error:
                    # Client is disconnected automatically
                    pass

            # See if the client has any commands for us.
            if len(ready_to_read) == 1 and ready_to_read[0] == self.request:
                data = self.request.recv(1024)

                if not data:
                    break
                elif len(data) > 0:
                    # There is data. Process it and turn it into line-oriented input.
                    buf += str(data)

                    while '\n' in buf:
                        line, buf = buf.split("\n", 1)
                        line = line.rstrip()

                        response = ''
                        try:
                            logger.debug('from %s: %s' % (self.client_ident(), line))
                            prefix, command, params = irc_split(line)
                            handler = getattr(self, 'handle_%s' % (command.lower()), None)
                            if not handler:
                                logger.info('No handler for command: %s. Full line: %s' % (command, line))
                                raise IRCError(rpl.ERR_UNKNOWNCOMMAND, '%s :Unknown command' % (command))
                            response = handler(params)
                        except AttributeError, e:
                            raise e
                            logger.error('%s', e)
                        except IRCError, e:
                            response = ':%s %s %s' % (self.server.servername, e.code, e.value)
                            logger.error('%s', response)
                        except Exception, e:
                            response = ':%s ERROR %s' % (self.server.servername, repr(e))
                            logger.error('%s', response)
                            raise
                        else:
                            if response:
                                self.send_queue.append(response)
Ejemplo n.º 2
0
def test_split_unsplit(msg, msgsplit):
    msg = irc_unsplit(*msgsplit)
    assert irc_split(msg) == msgsplit, \
            "%s -> %s -> %s" % (msg, msgsplit, irc_split(msg))
Ejemplo n.º 3
0
def test_irc_split(msg, msgsplit):
    assert msgsplit == irc_split(msg)
Ejemplo n.º 4
0
def test_split_unsplit(msg, msgsplit):
    msg = irc_unsplit(*msgsplit)
    assert irc_split(msg) == msgsplit, \
            "%s -> %s -> %s" % (msg, msgsplit, irc_split(msg))
Ejemplo n.º 5
0
def test_irc_split(msg, msgsplit):
    assert msgsplit == irc_split(msg)