X-Git-Url: https://code.delx.au/pymsnt/blobdiff_plain/b376fe62101749980a9ff554289567ab8a780693..cbe38882237ba2dff9191c266ddc04a5e78ebba4:/src/main.py diff --git a/src/main.py b/src/main.py index c454b45..6be4c74 100644 --- a/src/main.py +++ b/src/main.py @@ -7,23 +7,26 @@ sys.setdefaultencoding("utf-8") sys.stdout = codecs.lookup('utf-8')[-1](sys.stdout) # Find the best reactor +selectWarning = "Unable to install any good reactors (kqueue, epoll, poll).\nWe fell back to using select. You may have scalability problems.\nThis reactor will not support more than 1024 connections at a time." try: from twisted.internet import epollreactor as bestreactor -except ImportError: +except: try: from twisted.internet import kqreactor as bestreactor - except ImportError: + except: try: from twisted.internet import pollreactor as bestreactor - except ImportError: + except: try: - from twisted.internet import default as bestreactor - print "Unable to install any good reactors (kqueue, epoll, poll)." - print "We fell back to using select. You may have scalability problems." - print "This reactor will not support more than 1024 connections at a time." - except ImportError: - print "Unable to find a reactor.\nExiting..." - sys.exit(1) + from twisted.internet import selectreactor as bestreactor + print selectWarning + except: + try: + from twisted.internet import default as bestreactor + print selectWarning + except: + print "Unable to find a reactor.\nExiting..." + sys.exit(1) bestreactor.install() @@ -93,6 +96,7 @@ from tlib.xmlw import Element, jid, component from debug import LogEvent, INFO, WARN, ERROR import debug +import svninfo import utils import xdb import avatar @@ -111,11 +115,15 @@ import housekeep class PyTransport(component.Service): def __init__(self): LogEvent(INFO) + try: + LogEvent(INFO, msg="SVN r" + svninfo.getSVNVersion()) + except: + pass # Discovery, as well as some builtin features self.discovery = disco.ServerDiscovery(self) - self.discovery.addIdentity("gateway", legacy.id, legacy.name, config.jid) - self.discovery.addIdentity("conference", "text", legacy.name + " Chatrooms", config.jid) + self.discovery.addIdentity("gateway", legacy.id, config.discoName, config.jid) + self.discovery.addIdentity("conference", "text", config.discoName + " Chatrooms", config.jid) self.discovery.addFeature(disco.XCONFERENCE, None, config.jid) # So that clients know you can create groupchat rooms on the server self.discovery.addFeature("jabber:iq:conference", None, config.jid) # We don't actually support this, but Psi has a bug where it looks for this instead of the above self.discovery.addIdentity("client", "pc", "MSN Messenger", "USER") @@ -149,8 +157,8 @@ class PyTransport(component.Service): # Message IDs self.messageID = 0 - self.loopCall = task.LoopingCall(self.loopCall) - self.loopCall.start(60.0) + self.loopTask = task.LoopingCall(self.loopFunc) + self.loopTask.start(60.0) def removeMe(self): LogEvent(INFO) @@ -173,7 +181,7 @@ class PyTransport(component.Service): def reserveID(self, ID): self.reservedIDs.append(ID) - def loopCall(self): + def loopFunc(self): numsessions = len(self.sessions) #if config.debugOn and numsessions > 0: @@ -239,10 +247,11 @@ class PyTransport(component.Service): mtype = el.getAttribute("type") s = self.sessions.get(froj.userhost(), None) if mtype == "error" and s: + LogEvent(INFO, s.jabberID, "Removing session because of message type=error") s.removeMe() elif s: s.onMessage(el) - else: + elif mtype != "error": to = el.getAttribute("to") ulang = utils.getLang(el) body = None @@ -262,8 +271,12 @@ class PyTransport(component.Service): LogEvent(WARN, "", "Failed stringprep.") return + ptype = el.getAttribute("type") s = self.sessions.get(froj.userhost()) - if s: + if ptype == "error" and s: + LogEvent(INFO, s.jabberID, "Removing session because of message type=error") + s.removeMe() + elif s: s.onPresence(el) else: ulang = utils.getLang(el)