MCPcopy Create free account
hub / github.com/BTCGPU/BTCGPU / LookupIntern

Function LookupIntern

src/netbase.cpp:61–116  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

59}
60
61bool static LookupIntern(const char *pszName, std::vector<CNetAddr>& vIP, unsigned int nMaxSolutions, bool fAllowLookup)
62{
63 vIP.clear();
64
65 {
66 CNetAddr addr;
67 if (addr.SetSpecial(std::string(pszName))) {
68 vIP.push_back(addr);
69 return true;
70 }
71 }
72
73 struct addrinfo aiHint;
74 memset(&aiHint, 0, sizeof(struct addrinfo));
75
76 aiHint.ai_socktype = SOCK_STREAM;
77 aiHint.ai_protocol = IPPROTO_TCP;
78 aiHint.ai_family = AF_UNSPEC;
79#ifdef WIN32
80 aiHint.ai_flags = fAllowLookup ? 0 : AI_NUMERICHOST;
81#else
82 aiHint.ai_flags = fAllowLookup ? AI_ADDRCONFIG : AI_NUMERICHOST;
83#endif
84 struct addrinfo *aiRes = nullptr;
85 int nErr = getaddrinfo(pszName, nullptr, &aiHint, &aiRes);
86 if (nErr)
87 return false;
88
89 struct addrinfo *aiTrav = aiRes;
90 while (aiTrav != nullptr && (nMaxSolutions == 0 || vIP.size() < nMaxSolutions))
91 {
92 CNetAddr resolved;
93 if (aiTrav->ai_family == AF_INET)
94 {
95 assert(aiTrav->ai_addrlen >= sizeof(sockaddr_in));
96 resolved = CNetAddr(((struct sockaddr_in*)(aiTrav->ai_addr))->sin_addr);
97 }
98
99 if (aiTrav->ai_family == AF_INET6)
100 {
101 assert(aiTrav->ai_addrlen >= sizeof(sockaddr_in6));
102 struct sockaddr_in6* s6 = (struct sockaddr_in6*) aiTrav->ai_addr;
103 resolved = CNetAddr(s6->sin6_addr, s6->sin6_scope_id);
104 }
105 /* Never allow resolving to an internal address. Consider any such result invalid */
106 if (!resolved.IsInternal()) {
107 vIP.push_back(resolved);
108 }
109
110 aiTrav = aiTrav->ai_next;
111 }
112
113 freeaddrinfo(aiRes);
114
115 return (vIP.size() > 0);
116}
117
118bool LookupHost(const char *pszName, std::vector<CNetAddr>& vIP, unsigned int nMaxSolutions, bool fAllowLookup)

Callers 2

LookupHostFunction · 0.85
LookupFunction · 0.85

Calls 6

SetSpecialMethod · 0.80
IsInternalMethod · 0.80
CNetAddrClass · 0.70
clearMethod · 0.45
push_backMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected