52typedef struct stun_handle_s stun_handle_t;
53typedef struct stun_request_s stun_request_t;
54typedef struct stun_discovery_s stun_discovery_t;
55typedef struct stun_dns_lookup_s stun_dns_lookup_t;
57typedef struct stun_mini_s stun_mini_t;
60#define STUN_MAGIC_T struct stun_magic_t
65#ifndef STUN_DISCOVERY_MAGIC_T
66#define STUN_DISCOVERY_MAGIC_T struct stun_discovery_magic_t
79 stun_action_no_action = 1,
80 stun_action_tls_query = 2,
81 stun_action_binding_request = 4,
82 stun_action_keepalive = 8,
83 stun_action_test_nattype = 16,
84 stun_action_test_lifetime = 32,
120 stun_nat_port_res_cone,
123 stun_nat_ei_filt_ad_map,
126 stun_nat_ad_filt_ad_map,
130 stun_nat_adp_filt_ad_map,
144 stun_no_assigned_event,
176 stun_discovery_t *sd,
186 int only_a_keepalive);
207 su_sockaddr_t *sa, socklen_t salen,
208 void *data, isize_t len);
210int stun_process_request(
su_socket_t s, stun_msg_t *req,
211 int sid, su_sockaddr_t *from_addr,
230 socklen_t *return_addrlen);
232SOFIAPUBFUN int stun_discovery_release_socket(stun_discovery_t *sd);
245SOFIAPUBFUN int stun_lifetime(stun_discovery_t *sd);
285 const char **target,
uint16_t *port);
287 const char **target,
uint16_t *port);
289 const char **target,
uint16_t *port);
303 void *msg, ssize_t msglen,
304 void *addr, socklen_t addrlen);
STUN_MAGIC_T stun_magic_t
STUN server context.
Definition stun.h:63
int stun_message_length(void *data, isize_t len, int end_of_message)
Determines length of STUN message (0 (-1?) if not stun).
Definition stun.c:2831
stun_nattype_e
NAT types.
Definition stun.h:97
STUN_DISCOVERY_MAGIC_T stun_discovery_magic_t
STUN discovery_ context.
Definition stun.h:69
int stun_process_message(stun_handle_t *sh, su_socket_t s, su_sockaddr_t *sa, socklen_t salen, void *data, isize_t len)
Process incoming message.
Definition stun.c:2854
char const stun_version[]
Name and version of STUN software.
Definition stun.c:324
int stun_obtain_shared_secret(stun_handle_t *sh, stun_discovery_f, stun_discovery_magic_t *magic, tag_type_t tag, tag_value_t value,...)
Performs shared secret request/response processing.
Definition stun.c:529
stun_action_s
STUN Action types.
Definition stun.h:78
void stun_mini_destroy(stun_mini_t *)
Destroy a stun miniserver.
Definition stun_mini.c:87
int stun_test_lifetime(stun_handle_t *sh, stun_discovery_f, stun_discovery_magic_t *magic, tag_type_t tag, tag_value_t value,...)
Initiates STUN discovery process to find out NAT binding life-time settings.
Definition stun.c:2672
int stun_keepalive(stun_handle_t *sh, su_sockaddr_t *sa, tag_type_t tag, tag_value_t value,...)
Creates a keepalive dispatcher for bound SIP sockets.
Definition stun.c:2910
su_socket_t stun_discovery_get_socket(stun_discovery_t *sd)
Returns socket attached to the discovery object.
Definition stun.c:3123
int stun_msg_is_keepalive(uint16_t data)
Determines if the message is STUN message (-1 if not stun).
Definition stun.c:2813
stun_mini_t * stun_mini_create(void)
Create a stun miniserver.
Definition stun_mini.c:81
int stun_dns_lookup_stp_addr(stun_dns_lookup_t *self, const char **target, uint16_t *port)
Fetches the results of a completed STUN DNS-SRV lookup for "_stun._udp" service (3489bis,...
Definition stun_dns.c:242
int stun_mini_add_socket(stun_mini_t *server, su_socket_t socket)
Add a socket to stun miniserver.
Definition stun_mini.c:101
int stun_bind(stun_handle_t *sh, stun_discovery_f, stun_discovery_magic_t *magic, tag_type_t tag, tag_value_t value,...)
Performs a STUN Binding Discovery (see RFC3489/3489bis) process.
Definition stun.c:1026
void stun_dns_lookup_destroy(stun_dns_lookup_t *self)
Destroys the 'self' object created by stun_dns_lookup_destroy().
Definition stun_dns.c:177
int stun_keepalive_destroy(stun_handle_t *sh, su_socket_t s)
Destroys the keepalive dispatcher without touching the socket.
Definition stun.c:3004
int stun_discovery_get_address(stun_discovery_t *sd, void *addr, socklen_t *return_addrlen)
Returns the address of the public binding allocated by the NAT.
Definition stun.c:1089
enum stun_action_s stun_action_t
STUN Action types.
int stun_set_uname_pwd(stun_handle_t *sh, const char *uname, isize_t len_uname, const char *pwd, isize_t len_pwd)
Sets values for USERNAME and PASSWORD stun fields for the handle.
Definition stun.c:2560
enum stun_state_e stun_state_t
States of the STUN client->server query process.
void(* stun_dns_lookup_f)(stun_dns_lookup_t *self, stun_magic_t *magic)
Callback for delivering DNS lookup results.
Definition stun.h:189
stun_nattype_t stun_nattype(stun_discovery_t *sd)
Returns the detected NAT type.
Definition stun.c:301
int stun_test_nattype(stun_handle_t *sh, stun_discovery_f, stun_discovery_magic_t *magic, tag_type_t tag, tag_value_t value,...)
Initiates STUN discovery process to find out NAT characteristics.
Definition stun.c:1183
char const * stun_nattype_str(stun_discovery_t *sd)
Returns the NAT type attached to STUN discovery handle.
Definition stun.c:274
int stun_dns_lookup_udp_addr(stun_dns_lookup_t *, const char **target, uint16_t *port)
Fetches the results of a completed STUN DNS-SRV lookup for "_stun._udp" service (RFC3489/3489bis).
Definition stun_dns.c:196
int(* stun_send_callback)(stun_magic_t *magic, stun_handle_t *sh, int socket, void *data, unsigned len, int only_a_keepalive)
Callback invoked by stun handle when it has a message to send.
Definition stun.h:181
void stun_handle_destroy(stun_handle_t *sh)
Destroy a STUN client.
Definition stun.c:710
enum stun_nattype_e stun_nattype_t
NAT types.
su_root_t * stun_root(stun_handle_t *sh)
Return su_root_t assigned to stun_handle_t.
Definition stun.c:381
int stun_mini_remove_socket(stun_mini_t *server, su_socket_t socket)
Remove socket from stun miniserver.
Definition stun_mini.c:133
stun_dns_lookup_t * stun_dns_lookup(stun_magic_t *magic, su_root_t *root, stun_dns_lookup_f func, const char *domain)
Performs a DNS-SRV check for STUN 'stun' (tcp) and 'stun' (udp) services for 'domain'.
Definition stun_dns.c:133
stun_handle_t * stun_handle_init(su_root_t *root, tag_type_t, tag_value_t,...)
Creates a STUN handle.
Definition stun.c:439
stun_state_e
States of the STUN client->server query process.
Definition stun.h:142
@ stun_tls_ssl_connect_failed
TLS/SSL handshake failed.
Definition stun.h:163
@ stun_tls_ssl_connecting
Started the TLS/SSL handshake.
Definition stun.h:148
@ stun_tls_closing
Closing TLS connection.
Definition stun.h:150
@ stun_tls_connecting
Connecting to TLS port.
Definition stun.h:147
@ stun_error
Generic error in discovery process.
Definition stun.h:160
@ stun_tls_connection_failed
No response from TLS/SSL server
Definition stun.h:162
@ stun_discovery_timeout
No response to discovery request.
Definition stun.h:166
@ stun_discovery_error
Error in discovery process.
Definition stun.h:165
@ stun_tls_writing
Next step: send request.
Definition stun.h:149
@ stun_discovery_done
Discovery process done.
Definition stun.h:155
@ stun_tls_connection_timeout
No response to connect attempt.
Definition stun.h:161
@ stun_tls_reading
Request send, waiting for response.
Definition stun.h:151
@ stun_tls_done
Shared-secret acquired.
Definition stun.h:152
int stun_dns_lookup_tcp_addr(stun_dns_lookup_t *self, const char **target, uint16_t *port)
Fetches the results of a completed STUN DNS-SRV lookup for "_stun._tcp" service (RFC3489).
Definition stun_dns.c:219
int stun_is_requested(tag_type_t tag, tag_value_t value,...)
Check if a STUN handle should be created.
Definition stun.c:400
struct addrinfo su_addrinfo_t
struct tag_type_s const * tag_type_t
struct su_root_t su_root_t