From b2adb74b429e279e76ce380cbb406d4089658d71 Mon Sep 17 00:00:00 2001 From: Anton Date: Sat, 9 Mar 2019 19:46:44 +0400 Subject: implementation of PICA_guess_listening_addr_ipv4() for Winodws --- PICA_netconf.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'PICA_netconf.c') diff --git a/PICA_netconf.c b/PICA_netconf.c index 9c6f96b..d1dbb30 100644 --- a/PICA_netconf.c +++ b/PICA_netconf.c @@ -93,6 +93,31 @@ in_addr_t PICA_guess_listening_addr_ipv4() freeifaddrs(ifaddr); #else + char databuf[16384]; + ULONG size = sizeof databuf; + ULONG ret; + PIP_ADAPTER_ADDRESSES addrs = (PIP_ADAPTER_ADDRESSES)databuf; + PIP_ADAPTER_ADDRESSES ap; + + ret = GetAdaptersAddresses(AF_INET, + GAA_FLAG_SKIP_ANYCAST + | GAA_FLAG_SKIP_MULTICAST + | GAA_FLAG_SKIP_DNS_SERVER + | GAA_FLAG_SKIP_FRIENDLY_NAME, + NULL, + addrs, &size); + + if (ret != NO_ERROR) + return INADDR_ANY; + + ap = addrs; + while(ap) + { + retaddr = ((struct sockaddr_in*)ap->FirstUnicastAddress->Address.lpSockaddr)->sin_addr.s_addr; + if (!PICA_is_reserved_addr_ipv4(retaddr)) + break; + ap = ap->Next; + } #endif return retaddr; -- cgit v1.2.1