MCPcopy Create free account
hub / github.com/MonaSolutions/MonaServer / LocalAddresses

Method LocalAddresses

MonaBase/sources/IPAddress.cpp:567–604  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

565}
566
567IPAddress::LocalAddresses::LocalAddresses() {
568
569#if defined (WIN32)
570 ULONG size = MAX_ADAPTERS_SIZE;
571 Buffer buffer(MAX_ADAPTERS_SIZE);
572 PIP_ADAPTER_ADDRESSES pAddresses = (IP_ADAPTER_ADDRESSES *)buffer.data(), adapt = NULL;
573 PIP_ADAPTER_UNICAST_ADDRESS aip = NULL;
574
575 if (GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, NULL, pAddresses, &size) != NO_ERROR) {
576 emplace_back(Loopback(IPAddress::IPv4));
577 return;
578 }
579
580 for (adapt = pAddresses; adapt; adapt = adapt->Next) {
581 for (aip = adapt->FirstUnicastAddress; aip; aip = aip->Next) {
582
583 if (aip->Address.lpSockaddr->sa_family == AF_INET6)
584 emplace_back(reinterpret_cast<struct sockaddr_in6*>(aip->Address.lpSockaddr)->sin6_addr, reinterpret_cast<struct sockaddr_in6*>(aip->Address.lpSockaddr)->sin6_scope_id);
585 else if (aip->Address.lpSockaddr->sa_family == AF_INET)
586 emplace_back(reinterpret_cast<struct sockaddr_in*>(aip->Address.lpSockaddr)->sin_addr);
587 }
588 }
589#else
590 struct ifaddrs * ifAddrStruct = NULL;
591 if (getifaddrs(&ifAddrStruct) == -1) {
592 emplace_back(Loopback(IPAddress::IPv4));
593 return;
594 }
595
596 for (struct ifaddrs * ifa = ifAddrStruct; ifa; ifa = ifa->ifa_next) {
597
598 if (ifa->ifa_addr->sa_family == AF_INET6)
599 emplace_back(reinterpret_cast<struct sockaddr_in6*>(ifa->ifa_addr)->sin6_addr, reinterpret_cast<struct sockaddr_in6*>(ifa->ifa_addr)->sin6_scope_id);
600 else if (ifa->ifa_addr->sa_family == AF_INET)
601 emplace_back(reinterpret_cast<struct sockaddr_in*>(ifa->ifa_addr)->sin_addr);
602 }
603#endif
604}
605
606} // namespace Mona

Callers

nothing calls this directly

Calls 1

dataMethod · 0.45

Tested by

no test coverage detected