]> code.delx.au - pymsnt/blobdiff - src/main.py
Added SVN version number to result from jabber:iq:version requests.
[pymsnt] / src / main.py
index c454b459b4a8dca3ec35413373bd8b4dfcb7b8ad..6be4c742b811403765ba08a646d28df013c6f307 100644 (file)
@@ -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)