Example #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()
Example #2
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)