| 122 | } |
| 123 | |
| 124 | static bool ProcessNatpmp() |
| 125 | { |
| 126 | bool ret = false; |
| 127 | natpmp_t natpmp; |
| 128 | struct in_addr external_ipv4_addr; |
| 129 | if (NatpmpInit(&natpmp) && NatpmpDiscover(&natpmp, external_ipv4_addr)) { |
| 130 | bool external_ip_discovered = false; |
| 131 | const uint16_t private_port = GetListenPort(); |
| 132 | do { |
| 133 | ret = NatpmpMapping(&natpmp, external_ipv4_addr, private_port, external_ip_discovered); |
| 134 | } while (ret && g_mapport_interrupt.sleep_for(PORT_MAPPING_REANNOUNCE_PERIOD)); |
| 135 | g_mapport_interrupt.reset(); |
| 136 | |
| 137 | const int r_send = sendnewportmappingrequest(&natpmp, NATPMP_PROTOCOL_TCP, private_port, g_mapport_external_port, /* remove a port mapping */ 0); |
| 138 | g_mapport_external_port = 0; |
| 139 | if (r_send == 12 /* OK */) { |
| 140 | LogPrintf("natpmp: Port mapping removed successfully.\n"); |
| 141 | } else { |
| 142 | LogPrintf("natpmp: sendnewportmappingrequest(0) failed with %d error.\n", r_send); |
| 143 | } |
| 144 | } |
| 145 | |
| 146 | closenatpmp(&natpmp); |
| 147 | return ret; |
| 148 | } |
| 149 | #endif // USE_NATPMP |
| 150 | |
| 151 | #ifdef USE_UPNP |
no test coverage detected