Exemplo n.º 1
0
 def start(self):
     if not self.use_upnp:
         self.external_ip = CS.get_external_ip()
         return
     self.upnp = UPnP(self.component_manager.reactor,
                      try_miniupnpc_fallback=True)
     try:
         found = yield self.upnp.discover()
     except Exception as err:
         log.warning("upnp discovery failed: %s", err)
         found = False
     if found and not self.upnp.miniupnpc_runner:
         log.info("set up redirects using txupnp")
     elif found and self.upnp.miniupnpc_runner:
         log.warning(
             "failed to set up redirect with txupnp, miniupnpc fallback was successful"
         )
     if found:
         try:
             self.external_ip = yield self.upnp.get_external_ip()
             yield self._setup_redirects()
         except Exception as err:
             log.warning("error trying to set up upnp: %s", err)
             self.external_ip = CS.get_external_ip()
     else:
         self.external_ip = CS.get_external_ip()
Exemplo n.º 2
0
class UPnPComponent(Component):
    component_name = UPNP_COMPONENT

    def __init__(self, component_manager):
        Component.__init__(self, component_manager)
        self._int_peer_port = GCS('peer_port')
        self._int_dht_node_port = GCS('dht_node_port')
        self.use_upnp = GCS('use_upnp')
        self.upnp = None
        self.upnp_redirects = {}
        self.external_ip = None

    @property
    def component(self):
        return self

    @defer.inlineCallbacks
    def _setup_redirects(self):
        upnp_redirects = yield DeferredDict({
            "UDP":
            self.upnp.get_next_mapping(self._int_dht_node_port, "UDP",
                                       "LBRY DHT port"),
            "TCP":
            self.upnp.get_next_mapping(self._int_peer_port, "TCP",
                                       "LBRY peer port")
        })
        self.upnp_redirects.update(upnp_redirects)

    @defer.inlineCallbacks
    def start(self):
        if not self.use_upnp:
            self.external_ip = CS.get_external_ip()
            return
        self.upnp = UPnP(self.component_manager.reactor,
                         try_miniupnpc_fallback=True)
        try:
            found = yield self.upnp.discover()
        except Exception as err:
            log.warning("upnp discovery failed: %s", err)
            found = False
        if found and not self.upnp.miniupnpc_runner:
            log.info("set up redirects using txupnp")
        elif found and self.upnp.miniupnpc_runner:
            log.warning(
                "failed to set up redirect with txupnp, miniupnpc fallback was successful"
            )
        if found:
            try:
                self.external_ip = yield self.upnp.get_external_ip()
                yield self._setup_redirects()
            except Exception as err:
                log.warning("error trying to set up upnp: %s", err)
                self.external_ip = CS.get_external_ip()
        else:
            self.external_ip = CS.get_external_ip()

    def stop(self):
        return defer.DeferredList([
            self.upnp.delete_port_mapping(port, protocol)
            for protocol, port in self.upnp_redirects.items()
        ])
Exemplo n.º 3
0
def test(ext_port=4446, int_port=4446, proto='UDP'):
    u = UPnP(reactor)
    found = yield u.discover()
    assert found, "M-SEARCH failed to find gateway"
    external_ip = yield u.get_external_ip()
    assert external_ip, "Failed to get the external IP"
    log.info(external_ip)
    try:
        yield u.get_specific_port_mapping(ext_port, proto)
    except UPnPError as err:
        if 'NoSuchEntryInArray' in str(err):
            pass
        else:
            log.error("there is already a redirect")
            raise AssertionError()
    yield u.add_port_mapping(ext_port, proto, int_port, u.lan_address, 'woah',
                             0)
    redirects = yield u.get_redirects()
    if (ext_port, u.lan_address, proto) in map(lambda x: (x[1], x[4], x[2]),
                                               redirects):
        log.info("made redirect")
    else:
        log.error("failed to make redirect")
        raise AssertionError()
    yield u.delete_port_mapping(ext_port, proto)
    redirects = yield u.get_redirects()
    if (ext_port, u.lan_address,
            proto) not in map(lambda x: (x[1], x[4], x[2]), redirects):
        log.info("tore down redirect")
    else:
        log.error("failed to tear down redirect")
        raise AssertionError()
    r = yield u.get_rsip_nat_status()
    log.info(r)
    r = yield u.get_status_info()
    log.info(r)
    r = yield u.get_connection_type_info()
    log.info(r)