diff options
| author | Anton <anton@picapica> | 2017-12-29 19:40:13 +0400 |
|---|---|---|
| committer | Anton <anton@picapica> | 2017-12-29 19:40:13 +0400 |
| commit | 87c68a2ecadee7c86d80b585a2ed47b352c7b2d6 (patch) | |
| tree | f82753e4669bb3b96669675037f25f0e451f2eda | |
| parent | 34c35929b0c4b57c6b08b4b12a15f58f01331ee5 (diff) | |
| download | pica-pica-87c68a2ecadee7c86d80b585a2ed47b352c7b2d6.tar.gz pica-pica-87c68a2ecadee7c86d80b585a2ed47b352c7b2d6.zip | |
pica-node: check interfaces with global IP's first in autoconfigure mode, before trying UPnP
| -rw-r--r-- | PICA_node.c | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/PICA_node.c b/PICA_node.c index a373cb4..ede5a1c 100644 --- a/PICA_node.c +++ b/PICA_node.c @@ -3011,19 +3011,35 @@ int main(int argc, char** argv) if (strcmp("autoconfigure", nodecfg.announced_addr) == 0) { - //TOD check interfaces with global IP's assigned first -#ifdef HAVE_LIBMINIUPNPC - char public_ip[64]; - int ret; + in_addr_t guess; + struct in_addr in; + + guess = PICA_guess_listening_addr_ipv4(); + + in.s_addr = guess; + + free(nodecfg.announced_addr); + nodecfg.announced_addr = strdup(inet_ntoa(in)); + + PICA_debug1("guessed interface address to be announced: %s", nodecfg.announced_addr); - ret = PICA_upnp_autoconfigure_ipv4(atoi(nodecfg.listen_port), atoi(nodecfg.listen_port), public_ip); - if (ret) +#ifdef HAVE_LIBMINIUPNPC + if (PICA_is_reserved_addr_ipv4(guess) && nodecfg.disable_reserved_addrs) { - free(nodecfg.announced_addr); - nodecfg.announced_addr = strdup(public_ip); - PICA_info("autoconfigured announced address %s port %s", nodecfg.announced_addr, nodecfg.listen_port); + char public_ip[64]; + int ret; + + PICA_info("trying to get global IP with UPnP..."); + + ret = PICA_upnp_autoconfigure_ipv4(atoi(nodecfg.listen_port), atoi(nodecfg.listen_port), public_ip); + if (ret) + { + free(nodecfg.announced_addr); + nodecfg.announced_addr = strdup(public_ip); + } } #endif + PICA_info("autoconfigured announced address %s port %s", nodecfg.announced_addr, nodecfg.listen_port); } if (INADDR_NONE == inet_addr(nodecfg.announced_addr) || INADDR_ANY == inet_addr(nodecfg.announced_addr)) |
