diff --git a/src/irclib.py b/src/irclib.py index 71e08af58..8c66e2e07 100644 --- a/src/irclib.py +++ b/src/irclib.py @@ -488,6 +488,9 @@ class Irc(IrcCommandDispatcher): s = '%s.outFilter returned None' % callback.name() debug.msg(s) return None + if len(str(msg)) > 512: + msg._str = msg._str[:500] + '\r\n' + msg._len = len(str(msg)) self.state.addMsg(self, msg) s = '%s %s' % (time.strftime(conf.logTimestampFormat), msg) debug.msg(s, 'low') @@ -524,6 +527,11 @@ class Irc(IrcCommandDispatcher): if hasattr(self.driver, 'scheduleReconnect'): self.driver.scheduleReconnect() self.driver.die() + elif 'too fast' in msg.args[0]: + if hasattr(self.driver, 'reconnectWaitsIndex'): + newIndex = len(self.driver.reconnectWaits)-1 + self.driver.reconnectWaitsIndex = newIndex + self.driver.die() def doNick(self, msg): """Handles NICK messages.""" diff --git a/test/test_irclib.py b/test/test_irclib.py index 5532cb196..c19b6ae12 100644 --- a/test/test_irclib.py +++ b/test/test_irclib.py @@ -301,6 +301,11 @@ class IrcTestCase(unittest.TestCase): msg = self.irc.takeMsg() self.failUnless(msg.command == 'NOTICE') + def testNoMsgLongerThan512(self): + self.irc.queueMsg(ircmsgs.privmsg('whocares', 'x'*1000)) + msg = self.irc.takeMsg() + self.failUnless(len(msg) <= 512, 'len(msg) was %s' % len(msg)) + def testReset(self): for msg in msgs: try: