uint16_t internal_port
Internal port we're binding to.
uint16_t mapped_port
External port that was mapped (may differ from internal)
bool is_natpmp
true if NAT-PMP was used, false if UPnP
bool is_mapped
true if port mapping is currently active
char device_description[256]
Device name for logging (e.g., "TP-Link Archer C7")
char external_ip[16]
Detected external/public IP (e.g., "203.0.113.42")
asciichat_error_t nat_upnp_open(uint16_t internal_port, const char *description, nat_upnp_context_t **ctx)
Discover and open port via UPnP.
asciichat_error_t nat_upnp_get_address(const nat_upnp_context_t *ctx, char *addr, size_t addr_len)
Get the public address (IP:port) for advertising to clients.