Monero
Classes | Macros | Functions | Variables
miniupnpc-libevent.c File Reference
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <stdio.h>
#include <event2/event.h>
#include <event2/buffer.h>
#include <event2/http.h>
#include <unistd.h>
#include <errno.h>
#include "miniupnpc-libevent.h"
#include "minixml.h"
#include "igd_desc_parse.h"
#include "upnpreplyparse.h"
Include dependency graph for miniupnpc-libevent.c:

Classes

struct  upnp_args
 

Macros

#define closesocket   close
 
#define PRINT_SOCKET_ERROR   perror
 
#define SOCKET_ERROR   errno
 
#define WOULDBLOCK(err)   (err == EAGAIN || err == EWOULDBLOCK)
 
#define MIN(x, y)   (((x)<(y))?(x):(y))
 
#define MAXHOSTNAMELEN   64
 
#define SSDP_PORT   1900
 
#define SSDP_MCAST_ADDR   "239.255.255.250"
 
#define XSTR(s)   STR(s)
 
#define STR(s)   #s
 
#define debug_printf(...)   (void)0
 
#define COMPARE(str, cstr)   (0==memcmp(str, cstr, sizeof(cstr) - 1))
 
#define SOAPPREFIX   "s"
 
#define SERVICEPREFIX   "u"
 
#define SERVICEPREFIX2   'u'
 

Functions

static int upnpc_get_desc (upnpc_device_t *p, const char *url)
 
static char * build_url_string (const char *urlbase, const char *root_desc_url, const char *controlurl)
 
static void parse_msearch_reply (const char *reply, int size, const char **location, int *locationsize, const char **st, int *stsize)
 
static void upnpc_send_ssdp_msearch (evutil_socket_t s, short events, upnpc_t *p)
 
static int upnpc_set_root_desc_location (upnpc_device_t *d, const char *location, int locationsize)
 
static upnpc_device_tupnpc_find_device_with_location (upnpc_t *p, const char *location, int locationsize)
 
static void upnpc_receive_and_parse_ssdp (evutil_socket_t s, short events, upnpc_t *p)
 
static int parseURL (const char *url, char *hostname, unsigned short *port, char **path, unsigned int *scope_id)
 
static void upnpc_desc_received (struct evhttp_request *req, void *pvoid)
 
static void upnpc_soap_response (struct evhttp_request *req, void *pvoid)
 
static int upnpc_send_soap_request (upnpc_device_t *p, const char *url, const char *service, const char *method, const struct upnp_args *args, int arg_count)
 
int upnpc_init (upnpc_t *p, struct event_base *base, const char *multicastif, upnpc_callback_fn ready_cb, upnpc_callback_fn soap_cb, void *cb_data)
 
int upnpc_start (upnpc_t *p)
 
int upnpc_set_local_address (upnpc_t *p, const char *address, uint16_t port)
 
static void upnpc_device_finalize (upnpc_device_t *d)
 
int upnpc_finalize (upnpc_t *p)
 
int upnpc_get_external_ip_address (upnpc_device_t *p)
 
int upnpc_get_link_layer_max_rate (upnpc_device_t *p)
 
int upnpc_delete_port_mapping (upnpc_device_t *p, const char *remote_host, unsigned short ext_port, const char *proto)
 
int upnpc_add_port_mapping (upnpc_device_t *p, const char *remote_host, unsigned short ext_port, unsigned short int_port, const char *int_client, const char *proto, const char *description, unsigned int lease_duration)
 
int upnpc_get_status_info (upnpc_device_t *p)
 

Variables

static const char * devices_to_search []
 

Macro Definition Documentation

◆ closesocket

#define closesocket   close

◆ COMPARE

#define COMPARE (   str,
  cstr 
)    (0==memcmp(str, cstr, sizeof(cstr) - 1))

◆ debug_printf

#define debug_printf (   ...)    (void)0

◆ MAXHOSTNAMELEN

#define MAXHOSTNAMELEN   64

◆ MIN

#define MIN (   x,
 
)    (((x)<(y))?(x):(y))

◆ PRINT_SOCKET_ERROR

#define PRINT_SOCKET_ERROR   perror

◆ SERVICEPREFIX

#define SERVICEPREFIX   "u"

◆ SERVICEPREFIX2

#define SERVICEPREFIX2   'u'

◆ SOAPPREFIX

#define SOAPPREFIX   "s"

◆ SOCKET_ERROR

#define SOCKET_ERROR   errno

◆ SSDP_MCAST_ADDR

#define SSDP_MCAST_ADDR   "239.255.255.250"

◆ SSDP_PORT

#define SSDP_PORT   1900

◆ STR

#define STR (   s)    #s

◆ WOULDBLOCK

#define WOULDBLOCK (   err)    (err == EAGAIN || err == EWOULDBLOCK)

◆ XSTR

#define XSTR (   s)    STR(s)

Function Documentation

◆ build_url_string()

static char * build_url_string ( const char *  urlbase,
const char *  root_desc_url,
const char *  controlurl 
)
static

◆ parse_msearch_reply()

static void parse_msearch_reply ( const char *  reply,
int  size,
const char **  location,
int *  locationsize,
const char **  st,
int *  stsize 
)
static

◆ parseURL()

static int parseURL ( const char *  url,
char *  hostname,
unsigned short *  port,
char **  path,
unsigned int *  scope_id 
)
static

◆ upnpc_add_port_mapping()

int upnpc_add_port_mapping ( upnpc_device_t p,
const char *  remote_host,
unsigned short  ext_port,
unsigned short  int_port,
const char *  int_client,
const char *  proto,
const char *  description,
unsigned int  lease_duration 
)

◆ upnpc_delete_port_mapping()

int upnpc_delete_port_mapping ( upnpc_device_t p,
const char *  remote_host,
unsigned short  ext_port,
const char *  proto 
)

◆ upnpc_desc_received()

static void upnpc_desc_received ( struct evhttp_request *  req,
void *  pvoid 
)
static

◆ upnpc_device_finalize()

static void upnpc_device_finalize ( upnpc_device_t d)
static

◆ upnpc_finalize()

int upnpc_finalize ( upnpc_t p)

◆ upnpc_find_device_with_location()

static upnpc_device_t* upnpc_find_device_with_location ( upnpc_t p,
const char *  location,
int  locationsize 
)
static

◆ upnpc_get_desc()

static int upnpc_get_desc ( upnpc_device_t p,
const char *  url 
)
static

◆ upnpc_get_external_ip_address()

int upnpc_get_external_ip_address ( upnpc_device_t p)

◆ upnpc_get_link_layer_max_rate()

int upnpc_get_link_layer_max_rate ( upnpc_device_t p)

◆ upnpc_get_status_info()

int upnpc_get_status_info ( upnpc_device_t p)

◆ upnpc_init()

int upnpc_init ( upnpc_t p,
struct event_base *  base,
const char *  multicastif,
upnpc_callback_fn  ready_cb,
upnpc_callback_fn  soap_cb,
void *  cb_data 
)

◆ upnpc_receive_and_parse_ssdp()

static void upnpc_receive_and_parse_ssdp ( evutil_socket_t  s,
short  events,
upnpc_t p 
)
static

◆ upnpc_send_soap_request()

static int upnpc_send_soap_request ( upnpc_device_t p,
const char *  url,
const char *  service,
const char *  method,
const struct upnp_args args,
int  arg_count 
)
static

◆ upnpc_send_ssdp_msearch()

static void upnpc_send_ssdp_msearch ( evutil_socket_t  s,
short  events,
upnpc_t p 
)
static

◆ upnpc_set_local_address()

int upnpc_set_local_address ( upnpc_t p,
const char *  address,
uint16_t  port 
)

◆ upnpc_set_root_desc_location()

static int upnpc_set_root_desc_location ( upnpc_device_t d,
const char *  location,
int  locationsize 
)
static

◆ upnpc_soap_response()

static void upnpc_soap_response ( struct evhttp_request *  req,
void *  pvoid 
)
static

◆ upnpc_start()

int upnpc_start ( upnpc_t p)

Variable Documentation

◆ devices_to_search

const char* devices_to_search[]
static
Initial value:
= {
"urn:schemas-upnp-org:device:InternetGatewayDevice:1",
"urn:schemas-upnp-org:service:WANIPConnection:1",
"urn:schemas-upnp-org:service:WANPPPConnection:1",
"upnp:rootdevice",
0
}