| 1695 | } |
| 1696 | |
| 1697 | void static Discover(boost::thread_group& threadGroup) |
| 1698 | { |
| 1699 | if (!fDiscover) |
| 1700 | return; |
| 1701 | |
| 1702 | #ifdef WIN32 |
| 1703 | // Get local host IP |
| 1704 | char pszHostName[256] = ""; |
| 1705 | if (gethostname(pszHostName, sizeof(pszHostName)) != SOCKET_ERROR) |
| 1706 | { |
| 1707 | vector<CNetAddr> vaddr; |
| 1708 | if (LookupHost(pszHostName, vaddr)) |
| 1709 | { |
| 1710 | BOOST_FOREACH (const CNetAddr &addr, vaddr) |
| 1711 | { |
| 1712 | if (AddLocal(addr, LOCAL_IF)) |
| 1713 | LogPrintf("%s: %s - %s\n", __func__, pszHostName, addr.ToString()); |
| 1714 | } |
| 1715 | } |
| 1716 | } |
| 1717 | #else |
| 1718 | // Get local host ip |
| 1719 | struct ifaddrs* myaddrs; |
| 1720 | if (getifaddrs(&myaddrs) == 0) |
| 1721 | { |
| 1722 | for (struct ifaddrs* ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next) |
| 1723 | { |
| 1724 | if (ifa->ifa_addr == NULL) continue; |
| 1725 | if ((ifa->ifa_flags & IFF_UP) == 0) continue; |
| 1726 | if (strcmp(ifa->ifa_name, "lo") == 0) continue; |
| 1727 | if (strcmp(ifa->ifa_name, "lo0") == 0) continue; |
| 1728 | if (ifa->ifa_addr->sa_family == AF_INET) |
| 1729 | { |
| 1730 | struct sockaddr_in* s4 = (struct sockaddr_in*)(ifa->ifa_addr); |
| 1731 | CNetAddr addr(s4->sin_addr); |
| 1732 | if (AddLocal(addr, LOCAL_IF)) |
| 1733 | LogPrintf("%s: IPv4 %s: %s\n", __func__, ifa->ifa_name, addr.ToString()); |
| 1734 | } |
| 1735 | else if (ifa->ifa_addr->sa_family == AF_INET6) |
| 1736 | { |
| 1737 | struct sockaddr_in6* s6 = (struct sockaddr_in6*)(ifa->ifa_addr); |
| 1738 | CNetAddr addr(s6->sin6_addr); |
| 1739 | if (AddLocal(addr, LOCAL_IF)) |
| 1740 | LogPrintf("%s: IPv6 %s: %s\n", __func__, ifa->ifa_name, addr.ToString()); |
| 1741 | } |
| 1742 | } |
| 1743 | freeifaddrs(myaddrs); |
| 1744 | } |
| 1745 | #endif |
| 1746 | } |
| 1747 | |
| 1748 | void StartNode(boost::thread_group& threadGroup, CScheduler& scheduler) |
| 1749 | { |
no test coverage detected