MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / PCPUnwrapAddress

Function PCPUnwrapAddress

src/common/pcp.cpp:209–221  ·  view source on GitHub ↗

Unwrap PCP-encoded address according to RFC6887.

Source from the content-addressed store, hash-verified

207
208//! Unwrap PCP-encoded address according to RFC6887.
209CNetAddr PCPUnwrapAddress(std::span<const uint8_t> wrapped_addr)
210{
211 Assume(wrapped_addr.size() == ADDR_IPV6_SIZE);
212 if (util::HasPrefix(wrapped_addr, IPV4_IN_IPV6_PREFIX)) {
213 struct in_addr addr4;
214 std::memcpy(&addr4, wrapped_addr.data() + IPV4_IN_IPV6_PREFIX.size(), ADDR_IPV4_SIZE);
215 return CNetAddr(addr4);
216 } else {
217 struct in6_addr addr6;
218 std::memcpy(&addr6, wrapped_addr.data(), ADDR_IPV6_SIZE);
219 return CNetAddr(addr6);
220 }
221}
222
223//! PCP or NAT-PMP send-receive loop.
224std::optional<std::vector<uint8_t>> PCPSendRecv(Sock &sock, const std::string &protocol, std::span<const uint8_t> request, int num_tries,

Callers 1

PCPRequestPortMapFunction · 0.85

Calls 4

HasPrefixFunction · 0.85
CNetAddrClass · 0.85
sizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected