ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
upnp.h
Go to the documentation of this file.
1
13
14#pragma once
15
16/* Storage capacities in elements; text buffers include the terminating NUL. */
17#define NETWORK_NAT_UPNP_EXTERNAL_IP_BUFFER_SIZE 16
18#define NETWORK_NAT_UPNP_DEVICE_DESCRIPTION_BUFFER_SIZE 256
19#define NETWORK_NAT_UPNP_INTERNAL_IP_BUFFER_SIZE 16
20#define NETWORK_NAT_UPNP_SERVICE_TYPE_BUFFER_SIZE 128
21#define NETWORK_NAT_UPNP_DESCRIPTION_BUFFER_SIZE 128
22
23#include <stdint.h>
24#include <stdbool.h>
25#include "../../common.h"
26
28
49
73asciichat_error_t nat_upnp_open(uint16_t internal_port, const char *description, nat_upnp_context_t **ctx);
74
76asciichat_error_t nat_upnp_open_protocol(uint16_t internal_port, const char *description, nat_upnp_protocol_t protocol,
77 nat_upnp_context_t **ctx);
78
88
98
100bool nat_upnp_matches_bind_address(const nat_upnp_context_t *ctx, const char *bind_address);
101
103asciichat_error_t nat_upnp_get_endpoint(const nat_upnp_context_t *ctx, char *ip, size_t ip_len, uint16_t *port);
104
115
129asciichat_error_t nat_upnp_get_address(const nat_upnp_context_t *ctx, char *addr, size_t addr_len);
⚙️ Common definitions, error codes, macros, and types shared throughout the application
unsigned short uint16_t
Definition common.h:61
unsigned int uint32_t
Definition common.h:62
unsigned long long uint64_t
Definition common.h:63
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
Handle to UPnP context.
Definition upnp.h:30
uint16_t internal_port
Internal port we're binding to.
Definition upnp.h:33
nat_upnp_protocol_t protocol
Transport of this mapping.
Definition upnp.h:46
char description[128]
Mapping description reused on renewal.
Definition upnp.h:40
uint16_t mapped_port
External port that was mapped (may differ from internal).
Definition upnp.h:32
char * control_url
Owned UPnP control URL.
Definition upnp.h:38
uint32_t gateway
NAT-PMP gateway, in network byte order.
Definition upnp.h:41
bool is_natpmp
true if NAT-PMP was used, false if UPnP
Definition upnp.h:36
bool is_mapped
true if port mapping is currently active
Definition upnp.h:45
bool external_is_private
Gateway reported an upstream NAT; mapping remains locally usable.
Definition upnp.h:47
uint32_t lease_seconds
Granted/requested lease duration.
Definition upnp.h:42
uint64_t refresh_at_ns
Next renewal or retry deadline.
Definition upnp.h:44
uint64_t expires_at_ns
Monotonic lease expiry.
Definition upnp.h:43
char internal_ip[16]
LAN address used by the gateway to reach us.
Definition upnp.h:37
char device_description[256]
Archer C7").
Definition upnp.h:34
char service_type[128]
UPnP service used to create the mapping.
Definition upnp.h:39
char external_ip[16]
Detected external/public IP (e.g., "203.0.113.42").
Definition upnp.h:31
asciichat_error_t nat_upnp_refresh(nat_upnp_context_t *ctx)
Refresh port mapping (e.g., for long-running servers).
Definition upnp.c:316
asciichat_error_t nat_upnp_get_endpoint(const nat_upnp_context_t *ctx, char *ip, size_t ip_len, uint16_t *port)
Copy the unexpired mapped IP and external port for discovery advertisement.
Definition upnp.c:304
bool nat_upnp_matches_bind_address(const nat_upnp_context_t *ctx, const char *bind_address)
Whether the mapping targets a specific IPv4 bind address, or any wildcard listener.
Definition upnp.c:296
#define NETWORK_NAT_UPNP_SERVICE_TYPE_BUFFER_SIZE
Definition upnp.h:20
#define NETWORK_NAT_UPNP_DEVICE_DESCRIPTION_BUFFER_SIZE
Definition upnp.h:18
struct nat_upnp_context nat_upnp_context_t
Handle to UPnP context.
bool nat_upnp_is_active(const nat_upnp_context_t *ctx)
Check if port mapping is still active.
Definition upnp.c:292
#define NETWORK_NAT_UPNP_INTERNAL_IP_BUFFER_SIZE
Definition upnp.h:19
void nat_upnp_close(nat_upnp_context_t **ctx)
Close port mapping and clean up.
Definition upnp.c:251
asciichat_error_t nat_upnp_open(uint16_t internal_port, const char *description, nat_upnp_context_t **ctx)
Discover and open port via UPnP.
Definition upnp.c:203
nat_upnp_protocol_t
Definition upnp.h:27
@ NAT_UPNP_TCP
Definition upnp.h:27
@ NAT_UPNP_UDP
Definition upnp.h:27
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.
Definition upnp.c:343
#define NETWORK_NAT_UPNP_DESCRIPTION_BUFFER_SIZE
Definition upnp.h:21
#define NETWORK_NAT_UPNP_EXTERNAL_IP_BUFFER_SIZE
Definition upnp.h:17
asciichat_error_t nat_upnp_open_protocol(uint16_t internal_port, const char *description, nat_upnp_protocol_t protocol, nat_upnp_context_t **ctx)
Open an owned TCP or UDP mapping; close with nat_upnp_close().
Definition upnp.c:207