Monero
Functions
upnpstun.c File Reference
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <netdb.h>
#include <stdlib.h>
#include <stdio.h>
#include <syslog.h>
#include <string.h>
#include <errno.h>
#include "config.h"
#include "upnputils.h"
#include "upnpstun.h"
Include dependency graph for upnpstun.c:

Functions

static void generate_transaction_id (unsigned char transaction_id[12])
 
static void fill_request (unsigned char buffer[28], int change_ip, int change_port)
 
static int resolve_stun_host (const char *stun_host, unsigned short stun_port, struct sockaddr_in *sock_addr)
 
static int stun_socket (unsigned short *local_port)
 
static size_t receive_stun_response (int fd, unsigned char *buffer, unsigned char transaction_id[12], size_t buffer_len, struct sockaddr_in *peer_addr)
 
static int wait_for_stun_responses (int fds[4], unsigned char *transaction_ids[4], unsigned char *buffers[4], size_t buffers_lens[4], struct sockaddr_in peer_addrs[4], size_t lens[4])
 
static int parse_stun_response (unsigned char *buffer, size_t len, struct sockaddr_in *mapped_addr)
 
int perform_stun (const char *if_name, const char *if_addr, const char *stun_host, unsigned short stun_port, struct in_addr *ext_addr, int *restrictive_nat)
 

Function Documentation

◆ fill_request()

static void fill_request ( unsigned char  buffer[28],
int  change_ip,
int  change_port 
)
static

◆ generate_transaction_id()

static void generate_transaction_id ( unsigned char  transaction_id[12])
static

◆ parse_stun_response()

static int parse_stun_response ( unsigned char *  buffer,
size_t  len,
struct sockaddr_in *  mapped_addr 
)
static

◆ perform_stun()

int perform_stun ( const char *  if_name,
const char *  if_addr,
const char *  stun_host,
unsigned short  stun_port,
struct in_addr *  ext_addr,
int *  restrictive_nat 
)

◆ receive_stun_response()

static size_t receive_stun_response ( int  fd,
unsigned char *  buffer,
unsigned char  transaction_id[12],
size_t  buffer_len,
struct sockaddr_in *  peer_addr 
)
static

◆ resolve_stun_host()

static int resolve_stun_host ( const char *  stun_host,
unsigned short  stun_port,
struct sockaddr_in *  sock_addr 
)
static

◆ stun_socket()

static int stun_socket ( unsigned short *  local_port)
static

◆ wait_for_stun_responses()

static int wait_for_stun_responses ( int  fds[4],
unsigned char *  transaction_ids[4],
unsigned char *  buffers[4],
size_t  buffers_lens[4],
struct sockaddr_in  peer_addrs[4],
size_t  lens[4] 
)
static