def gotMappingNowRemove(mappings, nprot, nport): if not ((nprot,nport) in mappings or (nprot,str(nport)) in mappings): print "error: no existing mapping for %s/%s"%(nprot,nport) reactor.stop() sys.exit(1) d = getUPnP() d.addCallback(lambda x: x.deletePortMapping(nport, proto=nprot)) d.addCallback(doneMapping)
def gotMappingNowRemove(mappings, nprot, nport): if not ((nprot, nport) in mappings or (nprot, str(nport)) in mappings): print "error: no existing mapping for %s/%s" % (nprot, nport) reactor.stop() sys.exit(1) d = getUPnP() d.addCallback(lambda x: x.deletePortMapping(nport, proto=nprot)) d.addCallback(doneMapping)
def checkUPnP(): from shtoom.upnp import getUPnP d = getUPnP() s = Saver() d.addCallback(s.save) util.wait(d, timeout=8) if s.val is None: raise unittest.SkipTest('no UPnP available')
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 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 gotMappingNowAdd(mappings, nprot, nport, desc): if (nprot,nport) in mappings or (nprot,str(nport)) in mappings: print "error: can't replace existing mapping for %s/%s"%(nprot,nport) ddict = mappings.get((nprot,nport)) or mappings.get((nprot,str(nport))) desc = mappingDesc%ddict print "existing mapping is to %s"%desc reactor.stop() sys.exit(1) d = getUPnP() d.addCallback(lambda x: x.addPortMapping(nport, nport, desc, proto=nprot)) d.addCallback(doneMapping)
def go(self): from shtoom.upnp import getUPnP d = getUPnP() d.addCallback(self.discovered) d.addCallback(self.gotexternal) d.addCallback(self.gotmappings) d.addCallback(self.added) d.addCallback(self.gotmappings2) d.addCallback(self.deleted) d.addCallback(self.gotmappings3) d.addCallback(self.gotexternal2) 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
def gotMappingNowAdd(mappings, nprot, nport, desc): if (nprot, nport) in mappings or (nprot, str(nport)) in mappings: print "error: can't replace existing mapping for %s/%s" % (nprot, nport) ddict = mappings.get((nprot, nport)) or mappings.get( (nprot, str(nport))) desc = mappingDesc % ddict print "existing mapping is to %s" % desc reactor.stop() sys.exit(1) d = getUPnP() d.addCallback(lambda x: x.addPortMapping(nport, nport, desc, proto=nprot)) d.addCallback(doneMapping)
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 doRemove(spec): prot, port = getSpec(spec) d = getUPnP() d.addCallback(lambda x: x.getPortMappings()) d.addCallback(gotMappingNowRemove, prot, port) d.addErrback(done)
def doAdd(spec, desc): prot, port = getSpec(spec) d = getUPnP() d.addCallback(lambda x: x.getPortMappings()) d.addCallback(gotMappingNowAdd, prot, port, desc) d.addErrback(done)
def doList(): d = getUPnP() d.addCallback(lambda x: x.getPortMappings()) d.addCallback(gotList) d.addErrback(done)