]> code.delx.au - pymsnt/blobdiff - src/main.py
The <host/> config option now sets the bind address for outgoing connections
[pymsnt] / src / main.py
index f153b5a8bb6544a7f65c6742d2dc912918f84c0c..5093837a13e7cd2e735875f4c6578b90ef7ec9f3 100644 (file)
@@ -6,29 +6,25 @@ reload(sys)
 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:
+reactors = [("epollreactor", True), ("pollreactor", True), ("selectreactor", False), ("default", False)]
+for tryReactor, good in reactors:
        try:
-               from twisted.internet import kqreactor as bestreactor
-       except:
-               try:
-                       from twisted.internet import pollreactor as bestreactor
-               except:
-                       try:
-                               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()
+               bestReactor = __import__("twisted.internet." + tryReactor)
+               if not good:
+                       print >> sys.stderr, selectWarning
+               break
+       except ImportError:
+               pass
+else:
+       print >> sys.stderr, "Unable to find a reactor. Please make sure you have Twisted properly installed.\nExiting..."
+       sys.exit(1)
+
 
+import twistfix
+twistfix.main()
 
 
 # Must load config before everything else
@@ -87,16 +83,18 @@ if config.reactor:
                from twisted.internet import kqreactor
                kqreactor.install()
        elif len(config.reactor) > 0:
-               print "Unknown reactor: ", config.reactor, ". Using select(), reactor."
+               print >> sys.stderr, "Unknown reactor: ", config.reactor, ". Using best available reactor."
 
 
 from twisted.internet import reactor, task
 from twisted.internet.defer import Deferred
-from tlib.xmlw import Element, jid, component
+from twisted.words.xish.domish import Element
+from twisted.words.protocols.jabber import component
+from twisted.words.protocols.jabber.jid import internJID
+
 from debug import LogEvent, INFO, WARN, ERROR
 
 import debug
-import svninfo
 import utils
 import xdb
 import avatar
@@ -115,10 +113,7 @@ import housekeep
 class PyTransport(component.Service):
        def __init__(self):
                LogEvent(INFO)
-               try:
-                       LogEvent(INFO, msg="SVN r" + str(svninfo.getSVNVersion()))
-               except:
-                       pass
+               LogEvent(INFO, msg="Reactor: " + str(reactor))
 
                # Discovery, as well as some builtin features
                self.discovery = disco.ServerDiscovery(self)
@@ -127,6 +122,7 @@ class PyTransport(component.Service):
                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")
+               self.discovery.addIdentity("conference", "text", "MSN Groupchat", "ROOM")
                
                self.xdb = xdb.XDB(config.jid, legacy.mangle)
                self.avatarCache = avatar.AvatarCache()
@@ -240,7 +236,7 @@ class PyTransport(component.Service):
        def onMessage(self, el):
                fro = el.getAttribute("from")
                try:
-                       froj = jid.intern(fro)
+                       froj = internJID(fro)
                except Exception, e:
                        LogEvent(WARN, "", "Failed stringprep.")
                        return
@@ -266,8 +262,8 @@ class PyTransport(component.Service):
                fro = el.getAttribute("from")
                to = el.getAttribute("to")
                try:
-                       froj = jid.intern(fro)
-                       toj = jid.intern(to)
+                       froj = internJID(fro)
+                       toj = internJID(to)
                except Exception, e:
                        LogEvent(WARN, "", "Failed stringprep.")
                        return
@@ -383,7 +379,7 @@ if os.name == "posix":
        # Set SIGHUP to reload the config file & close & open debug file
        signal.signal(signal.SIGHUP, SIGHUPstuff)
        # Load some scripts for PID and daemonising
-       from twisted.scripts import twistd
+       from twisted.scripts import _twistd_unix as twistd
 
 
 def main():