def test_stunmapper(self): from shtoom.stun import getSTUN, STUNMapper ae = self.assertEquals ar = self.assertRaises d = getSTUN() s = Saver() d.addCallback(s.save) util.wait(d, timeout=64) if not s.arg.useful: raise unittest.SkipTest('No useful STUN') mapper = STUNMapper() # Check we have a hate-on for TCP ports class tfactory(Factory): protocol = Protocol tport = reactor.listenTCP(0, tfactory()) ar(ValueError, mapper.map, tport) tport.stopListening() ar(ValueError, mapper.map, tport) prot = DatagramProtocol() port = reactor.listenUDP(0, prot) ar(ValueError, mapper.info, port) t = TestMapper(mapper, port) d = t.go() util.wait(d, timeout=512) ae(len(t.map_res), 2) ae(t.map_res, t.info_res) ae(t.unmap_res, None) d = port.stopListening() util.wait(d) ar(ValueError, mapper.map, port) ar(ValueError, mapper.info, port)
def detectNAT(): # We prefer UPnP when available, as it's less pissing about (ha!) from shtoom.upnp import getUPnP from shtoom.stun import getSTUN ud = getUPnP() sd = getSTUN() dl = defer.DeferredList([ud, sd]) dl.addCallback(cb_detectNAT).addErrback(log.err) return dl
def test_stundiscovery(self): from shtoom.stun import getSTUN, _NatType ae = self.assertEquals a_ = self.assert_ d = getSTUN() s = Saver() d.addCallback(s.save) util.wait(d, timeout=16) a_(isinstance(s.arg, _NatType), "%s, %s :: %s" % (s, s.arg, type(s.arg),))
def main(): from twisted.internet import defer from shtoom.upnp import getUPnP from shtoom.stun import getSTUN from shtoom.nat import getLocalIPAddress, getMapper ud = getUPnP() sd = getSTUN() ld = getLocalIPAddress() md = getMapper() dl = defer.DeferredList([ud, sd, ld, md]) dl.addCallback(gotResults).addErrback(didntGetResults)
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 (%s)'%(natPref, app.getPref('nat')), system='nat') #print "NAT pref sez", natPref if _forcedMapper is not None: return defer.succeed(_forcedMapper) from shtoom.upnp import getUPnP from shtoom.stun import getSTUN if natPref == 'both': ud = getUPnP() sd = getSTUN() d = defer.DeferredList([ud, sd]) elif natPref == 'upnp': ud = getUPnP() d = defer.DeferredList([ud, defer.succeed(None) ]) elif natPref == 'stun': ud = getSTUN() d = defer.DeferredList([defer.succeed(None), sd]) else: nm = NullMapper() d = defer.DeferredList([defer.succeed(None), defer.succeed(None)]) d.addCallback(cb_getMapper).addErrback(log.err) return d
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 (%s)' % (natPref, app.getPref('nat')), system='nat') #print("NAT pref sez", natPref) if _forcedMapper is not None: return defer.succeed(_forcedMapper) from shtoom.upnp import getUPnP from shtoom.stun import getSTUN if natPref == 'both': ud = getUPnP() sd = getSTUN() d = defer.DeferredList([ud, sd]) elif natPref == 'upnp': ud = getUPnP() d = defer.DeferredList([ud, defer.succeed(None)]) elif natPref == 'stun': ud = getSTUN() d = defer.DeferredList([defer.succeed(None), sd]) else: nm = NullMapper() d = defer.DeferredList([defer.succeed(None), defer.succeed(None)]) d.addCallback(cb_getMapper).addErrback(log.err) return d