]> code.delx.au - pymsnt/blobdiff - src/main.py
Hopefully fixed weird exception errors.
[pymsnt] / src / main.py
index dfeded8c5a11fb2b7ba66f32f73d0cf5005e55a0..4b4d906022860449743b86ee76ba46884a9418f9 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()
 
 
@@ -114,8 +117,8 @@ class PyTransport(component.Service):
 
                # 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")
@@ -239,10 +242,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 +266,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)