def getMapper(): # We prefer UPnP when available, as it's more robust global _installedShutdownHook if not _installedShutdownHook: from twisted.internet import reactor t = reactor.addSystemEventTrigger('after', 'shutdown', clearCache) _installedShutdownHook = True try: from __main__ import app except: app = None natPref = 'both' if app is not None: print "app is", app natPref = app.getPref('nat') log.msg('NAT preference says to use %s'%(natPref)) if _forcedMapper is not None: return defer.succeed(_forcedMapper) from xshtoom.stun import getSTUN if natPref == 'stun': ud = getSTUN() d = defer.DeferredList([defer.succeed(None), ud]) else: nm = NullMapper() d = defer.DeferredList([defer.succeed(None), defer.succeed(None)]) d.addCallback(cb_getMapper).addErrback(log.err) return d
def detectNAT(): # We prefer UPnP when available, as it's less pissing about (ha!) from xshtoom.stun import getSTUN ud = defer.succeed([None, None]) sd = getSTUN() dl = defer.DeferredList([ud, sd]) dl.addCallback(cb_detectNAT).addErrback(log.err) return dl