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

Function fromwire_wireaddr

common/wireaddr.c:30–85  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

28}
29
30enum fromwireaddr_ret fromwire_wireaddr(const u8 **cursor, size_t *max, struct wireaddr *addr)
31{
32 addr->type = fromwire_u8(cursor, max);
33 if (*cursor == NULL)
34 return FROMWIREADDR_MALFORMED;
35
36 switch (addr->type) {
37 case ADDR_TYPE_IPV4:
38 addr->addrlen = 4;
39 break;
40 case ADDR_TYPE_IPV6:
41 addr->addrlen = 16;
42 break;
43 case ADDR_TYPE_TOR_V2_REMOVED:
44 addr->addrlen = TOR_V2_ADDRLEN;
45 break;
46 case ADDR_TYPE_TOR_V3:
47 addr->addrlen = TOR_V3_ADDRLEN;
48 break;
49 case ADDR_TYPE_DNS:
50 addr->addrlen = fromwire_u8(cursor, max);
51 memset(&addr->addr, 0, sizeof(addr->addr));
52 break;
53 default:
54 return FROMWIREADDR_UNKNOWN;
55 }
56 fromwire(cursor, max, addr->addr, addr->addrlen);
57 addr->port = fromwire_u16(cursor, max);
58
59 if (*cursor == NULL)
60 return FROMWIREADDR_MALFORMED;
61 /* BOLT #7:
62 * - if `port` is equal to 0:
63 * - SHOULD ignore `ipv6_addr` OR `ipv4_addr` OR `hostname`.
64 */
65 /* FIXME: This seems universal? */
66 if (addr->port == 0)
67 return FROMWIREADDR_IGNORE;
68
69 /* BOLT #7:
70 * * `5`: DNS hostname; data = `[1:hostname_len][hostname_len:hostname][2:port]` (length up to 258)
71 * * `hostname` bytes MUST be ASCII characters.
72 */
73 /* Don't let a malformed name loose in the rest of the daemon: it
74 * ends up in log messages, in connect requests, and in whatever a
75 * plugin does with it. */
76 if (addr->type == ADDR_TYPE_DNS) {
77 char hostname[DNS_ADDRLEN + 1];
78
79 memcpy(hostname, addr->addr, addr->addrlen);
80 hostname[addr->addrlen] = '\0';
81 if (!is_dnsaddr(hostname))
82 return FROMWIREADDR_IGNORE;
83 }
84 return FROMWIREADDR_OK;
85}
86
87void towire_wireaddr(u8 **pptr, const struct wireaddr *addr)

Callers 8

peer_init_receivedFunction · 0.85
runFunction · 0.85
fromwire_wireaddr_arrayFunction · 0.85
mainFunction · 0.85
db_col_wireaddrFunction · 0.85
printwire_wireaddrFunction · 0.85
printwire_addressesFunction · 0.85

Calls 4

is_dnsaddrFunction · 0.85
fromwire_u8Function · 0.50
fromwireFunction · 0.50
fromwire_u16Function · 0.50

Tested by 1

mainFunction · 0.68