Unwrap PCP-encoded address according to RFC6887.
| 207 | |
| 208 | //! Unwrap PCP-encoded address according to RFC6887. |
| 209 | CNetAddr 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. |
| 224 | std::optional<std::vector<uint8_t>> PCPSendRecv(Sock &sock, const std::string &protocol, std::span<const uint8_t> request, int num_tries, |
no test coverage detected