MCPcopy Create free account
hub / github.com/ElementsProject/lightning / guess_address

Function guess_address

connectd/netaddress.c:226–267  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

224}
225
226bool guess_address(struct wireaddr *addr)
227{
228 bool ret;
229
230 /* We point to Google nameservers, works unless you're inside Google :) */
231 switch (addr->type) {
232 case ADDR_TYPE_IPV4: {
233 struct sockaddr_in sin;
234 memset(&sin, 0, sizeof(sin));
235 sin.sin_port = htons(53);
236 /* 8.8.8.8 */
237 sin.sin_addr.s_addr = 0x08080808;
238 sin.sin_family = AF_INET;
239 ret = get_local_sockname(AF_INET, &sin, sizeof(sin));
240 addr->addrlen = sizeof(sin.sin_addr);
241 memcpy(addr->addr, &sin.sin_addr, addr->addrlen);
242 return ret;
243 }
244 case ADDR_TYPE_IPV6: {
245 struct sockaddr_in6 sin6;
246 memset(&sin6, 0, sizeof(sin6));
247 /* 2001:4860:4860::8888 */
248 static const unsigned char pchGoogle[16]
249 = {0x20,0x01,0x48,0x60,0x48,0x60,0,0,0,0,0,0,8,8,8,8};
250 memset(&sin6, 0, sizeof(sin6));
251 sin6.sin6_port = htons(53);
252 sin6.sin6_family = AF_INET6;
253 memcpy(sin6.sin6_addr.s6_addr, pchGoogle, sizeof(pchGoogle));
254 ret = get_local_sockname(AF_INET6, &sin6, sizeof(sin6));
255 addr->addrlen = sizeof(sin6.sin6_addr);
256 memcpy(addr->addr, &sin6.sin6_addr, addr->addrlen);
257 return ret;
258 }
259 case ADDR_TYPE_TOR_V2_REMOVED:
260 case ADDR_TYPE_TOR_V3:
261 case ADDR_TYPE_DNS:
262 case ADDR_TYPE_WEBSOCKET:
263 status_broken("Cannot guess address type %u", addr->type);
264 break;
265 }
266 abort();
267}
268
269bool address_routable(const struct wireaddr *wireaddr, bool allow_localhost)
270{

Callers 1

public_addressFunction · 0.85

Calls 2

get_local_socknameFunction · 0.85
abortFunction · 0.85

Tested by

no test coverage detected