Monero
Loading...
Searching...
No Matches
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,
y )   (((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
}