summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton <anton@picapica>2017-12-29 19:40:13 +0400
committerAnton <anton@picapica>2017-12-29 19:40:13 +0400
commit87c68a2ecadee7c86d80b585a2ed47b352c7b2d6 (patch)
treef82753e4669bb3b96669675037f25f0e451f2eda
parent34c35929b0c4b57c6b08b4b12a15f58f01331ee5 (diff)
downloadpica-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.c34
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))