from twisted.internet.protocol import ClientFactory
# System imports
-import math, base64, binascii, math
+import math, base64, binascii
# Local imports
from debug import LogEvent, INFO, WARN, ERROR
def _getNotificationReferral(self):
def timeout():
- if not d.called: d.errback()
+ if not d.called:
+ d.errback()
+ self.logOut() # Clean up everything
self.timeout = reactor.callLater(30, timeout)
dispatchFactory = msn.DispatchFactory()
dispatchFactory.userHandle = self.username
def logOut(self):
""" Shuts down the whole connection. Don't try to call any
- other methods after this one. """
+ other methods after this one. Except maybe connect() """
if self.notificationClient:
self.notificationClient.logOut()
for c in self.connectors:
if self.notificationFactory:
self.notificationFactory.msncon = None
self.connectors = []
+ for sbs in self.switchboardSessions.values():
+ if hasattr(sbs, "transport") and sbs.transport:
+ sbs.transport.loseConnection()
self.switchboardSessions = {}
LogEvent(INFO, self.ident)
self.timeout = None
for message, noerror in self.messageBuffer:
if not noerror:
- self.failedMessage(self.remoteUser, message)
+ self.failedMessage(message)
def _ready(self):
LogEvent(INFO, self.ident)
def userLeft(self, userHandle):
def wait():
if userHandle == self.remoteUser:
- del self.msncon.switchboardSessions[self.remoteUser]
+ if self.msncon and self.msncon.switchboardSessions.has_key(self.remoteUser):
+ del self.msncon.switchboardSessions[self.remoteUser]
reactor.callLater(0, wait) # Make sure this is handled after everything else
def gotMessage(self, message):