add missing miniupnpc files, modify cmake to not build miniupnpc tests and to fix an issue with finding miniupnpcstrings
This commit is contained in:
parent
7da9905589
commit
bd8e0fd2a1
|
@ -18,7 +18,7 @@ endif()
|
|||
option (UPNPC_BUILD_STATIC "Build static library" TRUE)
|
||||
option (UPNPC_BUILD_SHARED "Build shared library" TRUE)
|
||||
if (NOT WIN32)
|
||||
option (UPNPC_BUILD_TESTS "Build test executables" TRUE)
|
||||
option (UPNPC_BUILD_TESTS "Build test executables" FALSE)
|
||||
endif (NOT WIN32)
|
||||
option (NO_GETADDRINFO "Define NO_GETADDRINFO" FALSE)
|
||||
|
||||
|
@ -62,7 +62,7 @@ if (CMAKE_COMPILER_IS_GNUC)
|
|||
endif (NOT CONFIGURED)
|
||||
endif ()
|
||||
|
||||
configure_file (${CMAKE_SOURCE_DIR}/miniupnpcstrings.h.cmake ${CMAKE_BINARY_DIR}/miniupnpcstrings.h)
|
||||
configure_file (miniupnpcstrings.h.cmake ${CMAKE_BINARY_DIR}/miniupnpcstrings.h)
|
||||
include_directories (${CMAKE_BINARY_DIR})
|
||||
|
||||
set (MINIUPNPC_SOURCES
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
/* $Id: listdevices.c,v 1.6 2015/07/23 20:40:08 nanard Exp $ */
|
||||
/* Project : miniupnp
|
||||
* Author : Thomas Bernard
|
||||
* Copyright (c) 2013-2015 Thomas Bernard
|
||||
* This software is subject to the conditions detailed in the
|
||||
* LICENCE file provided in this distribution. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#ifdef _WIN32
|
||||
#include <winsock2.h>
|
||||
#endif /* _WIN32 */
|
||||
#include "miniupnpc.h"
|
||||
|
||||
int main(int argc, char * * argv)
|
||||
{
|
||||
const char * searched_device = NULL;
|
||||
const char * * searched_devices = NULL;
|
||||
const char * multicastif = 0;
|
||||
const char * minissdpdpath = 0;
|
||||
int ipv6 = 0;
|
||||
unsigned char ttl = 2;
|
||||
int error = 0;
|
||||
struct UPNPDev * devlist = 0;
|
||||
struct UPNPDev * dev;
|
||||
int i;
|
||||
|
||||
#ifdef _WIN32
|
||||
WSADATA wsaData;
|
||||
int nResult = WSAStartup(MAKEWORD(2,2), &wsaData);
|
||||
if(nResult != NO_ERROR)
|
||||
{
|
||||
fprintf(stderr, "WSAStartup() failed.\n");
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
for(i = 1; i < argc; i++) {
|
||||
if(strcmp(argv[i], "-6") == 0)
|
||||
ipv6 = 1;
|
||||
else if(strcmp(argv[i], "-d") == 0) {
|
||||
if(++i >= argc) {
|
||||
fprintf(stderr, "%s option needs one argument\n", "-d");
|
||||
return 1;
|
||||
}
|
||||
searched_device = argv[i];
|
||||
} else if(strcmp(argv[i], "-t") == 0) {
|
||||
if(++i >= argc) {
|
||||
fprintf(stderr, "%s option needs one argument\n", "-t");
|
||||
return 1;
|
||||
}
|
||||
ttl = (unsigned char)atoi(argv[i]);
|
||||
} else if(strcmp(argv[i], "-l") == 0) {
|
||||
if(++i >= argc) {
|
||||
fprintf(stderr, "-l option needs at least one argument\n");
|
||||
return 1;
|
||||
}
|
||||
searched_devices = (const char * *)(argv + i);
|
||||
break;
|
||||
} else if(strcmp(argv[i], "-m") == 0) {
|
||||
if(++i >= argc) {
|
||||
fprintf(stderr, "-m option needs one argument\n");
|
||||
return 1;
|
||||
}
|
||||
multicastif = argv[i];
|
||||
} else {
|
||||
printf("usage : %s [options] [-l <device1> <device2> ...]\n", argv[0]);
|
||||
printf("options :\n");
|
||||
printf(" -6 : use IPv6\n");
|
||||
printf(" -m address/ifname : network interface to use for multicast\n");
|
||||
printf(" -d <device string> : search only for this type of device\n");
|
||||
printf(" -l <device1> <device2> ... : search only for theses types of device\n");
|
||||
printf(" -t ttl : set multicast TTL. Default value is 2.\n");
|
||||
printf(" -h : this help\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if(searched_device) {
|
||||
printf("searching UPnP device type %s\n", searched_device);
|
||||
devlist = upnpDiscoverDevice(searched_device,
|
||||
2000, multicastif, minissdpdpath,
|
||||
0/*localport*/, ipv6, ttl, &error);
|
||||
} else if(searched_devices) {
|
||||
printf("searching UPnP device types :\n");
|
||||
for(i = 0; searched_devices[i]; i++)
|
||||
printf("\t%s\n", searched_devices[i]);
|
||||
devlist = upnpDiscoverDevices(searched_devices,
|
||||
2000, multicastif, minissdpdpath,
|
||||
0/*localport*/, ipv6, ttl, &error, 1);
|
||||
} else {
|
||||
printf("searching all UPnP devices\n");
|
||||
devlist = upnpDiscoverAll(2000, multicastif, minissdpdpath,
|
||||
0/*localport*/, ipv6, ttl, &error);
|
||||
}
|
||||
if(devlist) {
|
||||
for(dev = devlist, i = 1; dev != NULL; dev = dev->pNext, i++) {
|
||||
printf("%3d: %-48s\n", i, dev->st);
|
||||
printf(" %s\n", dev->descURL);
|
||||
printf(" %s\n", dev->usn);
|
||||
}
|
||||
freeUPNPDevlist(devlist);
|
||||
} else {
|
||||
printf("no device found.\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
#ifndef MINIUPNPC_DECLSPEC_H_INCLUDED
|
||||
#define MINIUPNPC_DECLSPEC_H_INCLUDED
|
||||
|
||||
#if defined(_WIN32) && !defined(MINIUPNP_STATICLIB)
|
||||
/* for windows dll */
|
||||
#ifdef MINIUPNP_EXPORTS
|
||||
#define MINIUPNP_LIBSPEC __declspec(dllexport)
|
||||
#else
|
||||
#define MINIUPNP_LIBSPEC __declspec(dllimport)
|
||||
#endif
|
||||
#else
|
||||
#if defined(__GNUC__) && __GNUC__ >= 4
|
||||
/* fix dynlib for OS X 10.9.2 and Apple LLVM version 5.0 */
|
||||
#define MINIUPNP_LIBSPEC __attribute__ ((visibility ("default")))
|
||||
#else
|
||||
#define MINIUPNP_LIBSPEC
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* MINIUPNPC_DECLSPEC_H_INCLUDED */
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
#! /usr/bin/python3
|
||||
# MiniUPnP project
|
||||
# Author : Thomas Bernard
|
||||
# This Sample code is public domain.
|
||||
# website : http://miniupnp.tuxfamily.org/
|
||||
|
||||
# import the python miniupnpc module
|
||||
import miniupnpc
|
||||
import sys
|
||||
|
||||
# create the object
|
||||
u = miniupnpc.UPnP()
|
||||
print('inital(default) values :')
|
||||
print(' discoverdelay', u.discoverdelay)
|
||||
print(' lanaddr', u.lanaddr)
|
||||
print(' multicastif', u.multicastif)
|
||||
print(' minissdpdsocket', u.minissdpdsocket)
|
||||
u.discoverdelay = 200;
|
||||
#u.minissdpdsocket = '../minissdpd/minissdpd.sock'
|
||||
# discovery process, it usualy takes several seconds (2 seconds or more)
|
||||
print('Discovering... delay=%ums' % u.discoverdelay)
|
||||
print(u.discover(), 'device(s) detected')
|
||||
# select an igd
|
||||
try:
|
||||
u.selectigd()
|
||||
except Exception as e:
|
||||
print('Exception :', e)
|
||||
sys.exit(1)
|
||||
# display information about the IGD and the internet connection
|
||||
print('local ip address :', u.lanaddr)
|
||||
print('external ip address :', u.externalipaddress())
|
||||
print(u.statusinfo(), u.connectiontype())
|
||||
|
||||
#print u.addportmapping(64000, 'TCP',
|
||||
# '192.168.1.166', 63000, 'port mapping test', '')
|
||||
#print u.deleteportmapping(64000, 'TCP')
|
||||
|
||||
port = 0
|
||||
proto = 'UDP'
|
||||
# list the redirections :
|
||||
i = 0
|
||||
while True:
|
||||
p = u.getgenericportmapping(i)
|
||||
if p==None:
|
||||
break
|
||||
print(i, p)
|
||||
(port, proto, (ihost,iport), desc, c, d, e) = p
|
||||
#print port, desc
|
||||
i = i + 1
|
||||
|
||||
print(u.getspecificportmapping(port, proto))
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
# values for linksys_WAG200G_desc.xml
|
||||
|
||||
CIF:
|
||||
servicetype = urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1
|
||||
controlurl = /upnp/control/WANCommonIFC1
|
||||
eventsuburl = /upnp/event/WANCommonIFC1
|
||||
scpdurl = /cmnicfg.xml
|
||||
|
||||
first:
|
||||
servicetype = urn:schemas-upnp-org:service:WANPPPConnection:1
|
||||
controlurl = /upnp/control/WANPPPConn1
|
||||
eventsuburl = /upnp/event/WANPPPConn1
|
||||
scpdurl = /pppcfg.xml
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
<?xml version="1.0"?>
|
||||
<root xmlns="urn:schemas-upnp-org:device-1-0">
|
||||
<specVersion>
|
||||
<major>1</major>
|
||||
<minor>0</minor>
|
||||
</specVersion>
|
||||
<URLBase>http://192.168.1.1:49152</URLBase>
|
||||
<device>
|
||||
<deviceType>urn:schemas-upnp-org:device:InternetGatewayDevice:1</deviceType>
|
||||
<friendlyName>LINKSYS WAG200G Gateway</friendlyName>
|
||||
<manufacturer>LINKSYS</manufacturer>
|
||||
<manufacturerURL>http://www.linksys.com</manufacturerURL>
|
||||
<modelDescription>LINKSYS WAG200G Gateway</modelDescription>
|
||||
<modelName>Wireless-G ADSL Home Gateway</modelName>
|
||||
<modelNumber>WAG200G</modelNumber>
|
||||
<modelURL>http://www.linksys.com</modelURL>
|
||||
<serialNumber>123456789</serialNumber>
|
||||
<UDN>uuid:8ca2eb37-1dd2-11b2-86f1-001a709b5aa8</UDN>
|
||||
<UPC>WAG200G</UPC>
|
||||
<serviceList>
|
||||
<service>
|
||||
<serviceType>urn:schemas-upnp-org:service:Layer3Forwarding:1</serviceType>
|
||||
<serviceId>urn:upnp-org:serviceId:L3Forwarding1</serviceId>
|
||||
<controlURL>/upnp/control/L3Forwarding1</controlURL>
|
||||
<eventSubURL>/upnp/event/L3Forwarding1</eventSubURL>
|
||||
<SCPDURL>/l3frwd.xml</SCPDURL>
|
||||
</service>
|
||||
</serviceList>
|
||||
<deviceList>
|
||||
<device>
|
||||
<deviceType>urn:schemas-upnp-org:device:WANDevice:1</deviceType>
|
||||
<friendlyName>WANDevice</friendlyName>
|
||||
<manufacturer>LINKSYS</manufacturer>
|
||||
<manufacturerURL>http://www.linksys.com/</manufacturerURL>
|
||||
<modelDescription>Residential Gateway</modelDescription>
|
||||
<modelName>Internet Connection Sharing</modelName>
|
||||
<modelNumber>1</modelNumber>
|
||||
<modelURL>http://www.linksys.com/</modelURL>
|
||||
<serialNumber>0000001</serialNumber>
|
||||
<UDN>uuid:8ca2eb36-1dd2-11b2-86f1-001a709b5aa8</UDN>
|
||||
<UPC>WAG200G</UPC>
|
||||
<serviceList>
|
||||
<service>
|
||||
<serviceType>urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1</serviceType>
|
||||
<serviceId>urn:upnp-org:serviceId:WANCommonIFC1</serviceId>
|
||||
<controlURL>/upnp/control/WANCommonIFC1</controlURL>
|
||||
<eventSubURL>/upnp/event/WANCommonIFC1</eventSubURL>
|
||||
<SCPDURL>/cmnicfg.xml</SCPDURL>
|
||||
</service>
|
||||
</serviceList>
|
||||
<deviceList>
|
||||
<device>
|
||||
<deviceType>urn:schemas-upnp-org:device:WANConnectionDevice:1</deviceType>
|
||||
<friendlyName>WANConnectionDevice</friendlyName>
|
||||
<manufacturer>LINKSYS</manufacturer>
|
||||
<manufacturerURL>http://www.linksys.com/</manufacturerURL>
|
||||
<modelDescription>Residential Gateway</modelDescription>
|
||||
<modelName>Internet Connection Sharing</modelName>
|
||||
<modelNumber>1</modelNumber>
|
||||
<modelURL>http://www.linksys.com/</modelURL>
|
||||
<serialNumber>0000001</serialNumber>
|
||||
<UDN>uuid:8ca2eb37-1dd2-11b2-86f0-001a709b5aa8</UDN>
|
||||
<UPC>WAG200G</UPC>
|
||||
<serviceList>
|
||||
<service>
|
||||
<serviceType>urn:schemas-upnp-org:service:WANEthernetLinkConfig:1</serviceType>
|
||||
<serviceId>urn:upnp-org:serviceId:WANEthLinkC1</serviceId>
|
||||
<controlURL>/upnp/control/WANEthLinkC1</controlURL>
|
||||
<eventSubURL>/upnp/event/WANEthLinkC1</eventSubURL>
|
||||
<SCPDURL>/wanelcfg.xml</SCPDURL>
|
||||
</service>
|
||||
<service>
|
||||
<serviceType>urn:schemas-upnp-org:service:WANPPPConnection:1</serviceType>
|
||||
<serviceId>urn:upnp-org:serviceId:WANPPPConn1</serviceId>
|
||||
<controlURL>/upnp/control/WANPPPConn1</controlURL>
|
||||
<eventSubURL>/upnp/event/WANPPPConn1</eventSubURL>
|
||||
<SCPDURL>/pppcfg.xml</SCPDURL>
|
||||
</service>
|
||||
</serviceList>
|
||||
</device>
|
||||
</deviceList>
|
||||
</device>
|
||||
<device>
|
||||
<deviceType>urn:schemas-upnp-org:device:LANDevice:1</deviceType>
|
||||
<friendlyName>LANDevice</friendlyName>
|
||||
<manufacturer>LINKSYS</manufacturer>
|
||||
<manufacturerURL>http://www.linksys.com/</manufacturerURL>
|
||||
<modelDescription>Residential Gateway</modelDescription>
|
||||
<modelName>Residential Gateway</modelName>
|
||||
<modelNumber>1</modelNumber>
|
||||
<modelURL>http://www.linksys.com/</modelURL>
|
||||
<serialNumber>0000001</serialNumber>
|
||||
<UDN>uuid:8ca2eb36-1dd2-11b2-86f0-001a709b5aa
|
||||
8</UDN>
|
||||
<UPC>WAG200G</UPC>
|
||||
<serviceList>
|
||||
<service>
|
||||
<serviceType>urn:schemas-upnp-org:service:LANHostConfigManagement:1</serviceType>
|
||||
<serviceId>urn:upnp-org:serviceId:LANHostCfg1</serviceId>
|
||||
<controlURL>/upnp/control/LANHostCfg1</controlURL>
|
||||
<eventSubURL>/upnp/event/LANHostCfg1</eventSubURL>
|
||||
<SCPDURL>/lanhostc.xml</SCPDURL>
|
||||
</service>
|
||||
</serviceList>
|
||||
</device>
|
||||
</deviceList>
|
||||
<presentationURL>http://192.168.1.1/index.htm</presentationURL>
|
||||
</device>
|
||||
</root>
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# values for new_LiveBox_desc.xml
|
||||
|
||||
CIF:
|
||||
servicetype = urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1
|
||||
controlurl = /87895a19/upnp/control/WANCommonIFC1
|
||||
eventsuburl = /87895a19/upnp/control/WANCommonIFC1
|
||||
scpdurl = /87895a19/gateicfgSCPD.xml
|
||||
|
||||
first:
|
||||
servicetype = urn:schemas-upnp-org:service:WANPPPConnection:2
|
||||
controlurl = /87895a19/upnp/control/WANIPConn1
|
||||
eventsuburl = /87895a19/upnp/control/WANIPConn1
|
||||
scpdurl = /87895a19/gateconnSCPD_PPP.xml
|
||||
|
||||
IPv6FC:
|
||||
servicetype = urn:schemas-upnp-org:service:WANIPv6FirewallControl:1
|
||||
controlurl = /87895a19/upnp/control/WANIPv6FwCtrl1
|
||||
eventsuburl = /87895a19/upnp/control/WANIPv6FwCtrl1
|
||||
scpdurl = /87895a19/wanipv6fwctrlSCPD.xml
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
<?xml version="1.0"?>
|
||||
<root xmlns="urn:schemas-upnp-org:device-1-0">
|
||||
<specVersion>
|
||||
<major>1</major>
|
||||
<minor>0</minor>
|
||||
</specVersion>
|
||||
<device>
|
||||
<pnpx:X_hardwareId xmlns:pnpx="http://schemas.microsoft.com/windows/pnpx/2005/11">VEN_0129&DEV_0000&SUBSYS_03&REV_250417</pnpx:X_hardwareId>
|
||||
<pnpx:X_compatibleId xmlns:pnpx="http://schemas.microsoft.com/windows/pnpx/2005/11">GenericUmPass</pnpx:X_compatibleId>
|
||||
<pnpx:X_deviceCategory xmlns:pnpx="http://schemas.microsoft.com/windows/pnpx/2005/11">NetworkInfrastructure.Gateway</pnpx:X_deviceCategory>
|
||||
<df:X_deviceCategory xmlns:df="http://schemas.microsoft.com/windows/2008/09/devicefoundation">Network.Gateway</df:X_deviceCategory>
|
||||
<deviceType>urn:schemas-upnp-org:device:InternetGatewayDevice:2</deviceType>
|
||||
<friendlyName>Orange Livebox</friendlyName>
|
||||
<manufacturer>Sagemcom</manufacturer>
|
||||
<manufacturerURL>http://www.sagemcom.com/</manufacturerURL>
|
||||
<modelName>Residential Livebox,(DSL,WAN Ethernet)</modelName>
|
||||
<UDN>uuid:87895a19-50f9-3736-a87f-115c230155f8</UDN>
|
||||
<modelDescription>Sagemcom,fr,SG30_sip-fr-4.28.35.1</modelDescription>
|
||||
<modelNumber>3</modelNumber>
|
||||
<serialNumber>LK14129DP441489</serialNumber>
|
||||
<presentationURL>http://192.168.1.1</presentationURL>
|
||||
<UPC></UPC>
|
||||
<iconList>
|
||||
<icon>
|
||||
<mimetype>image/png</mimetype>
|
||||
<width>16</width>
|
||||
<height>16</height>
|
||||
<depth>8</depth>
|
||||
<url>/87895a19/ligd.png</url>
|
||||
</icon>
|
||||
</iconList>
|
||||
<deviceList>
|
||||
<device>
|
||||
<deviceType>urn:schemas-upnp-org:device:WANDevice:2</deviceType>
|
||||
<friendlyName>WANDevice</friendlyName>
|
||||
<manufacturer>Sagemcom</manufacturer>
|
||||
<manufacturerURL>http://www.sagemcom.com/</manufacturerURL>
|
||||
<modelDescription>WAN Device on Sagemcom,fr,SG30_sip-fr-4.28.35.1</modelDescription>
|
||||
<modelName>Residential Livebox,(DSL,WAN Ethernet)</modelName>
|
||||
<modelNumber>3</modelNumber>
|
||||
<modelURL>http://www.sagemcom.com/</modelURL>
|
||||
<serialNumber>LK14129DP441489</serialNumber>
|
||||
<presentationURL>http://192.168.1.1</presentationURL>
|
||||
<UDN>uuid:e2397374-53d8-3fc6-8306-593ba1a34625</UDN>
|
||||
<UPC></UPC>
|
||||
<serviceList>
|
||||
<service>
|
||||
<serviceType>urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1</serviceType>
|
||||
<serviceId>urn:upnp-org:serviceId:WANCommonIFC1</serviceId>
|
||||
<controlURL>/87895a19/upnp/control/WANCommonIFC1</controlURL>
|
||||
<eventSubURL>/87895a19/upnp/control/WANCommonIFC1</eventSubURL>
|
||||
<SCPDURL>/87895a19/gateicfgSCPD.xml</SCPDURL>
|
||||
</service>
|
||||
</serviceList>
|
||||
<deviceList>
|
||||
<device>
|
||||
<deviceType>urn:schemas-upnp-org:device:WANConnectionDevice:2</deviceType>
|
||||
<friendlyName>WANConnectionDevice</friendlyName>
|
||||
<manufacturer>Sagemcom</manufacturer>
|
||||
<manufacturerURL>http://www.sagemcom.com/</manufacturerURL>
|
||||
<modelDescription>WanConnectionDevice on Sagemcom,fr,SG30_sip-fr-4.28.35.1</modelDescription>
|
||||
<modelName>Residential Livebox,(DSL,WAN Ethernet)</modelName>
|
||||
<modelNumber>3</modelNumber>
|
||||
<modelURL>http://www.sagemcom.com/</modelURL>
|
||||
<serialNumber>LK14129DP441489</serialNumber>
|
||||
<presentationURL>http://192.168.1.1</presentationURL>
|
||||
<UDN>uuid:44598a08-288e-32c9-8a4d-d3c008ede331</UDN>
|
||||
<UPC></UPC>
|
||||
<serviceList>
|
||||
<service>
|
||||
<serviceType>urn:schemas-upnp-org:service:WANPPPConnection:2</serviceType>
|
||||
<serviceId>urn:upnp-org:serviceId:WANIPConn1</serviceId>
|
||||
<controlURL>/87895a19/upnp/control/WANIPConn1</controlURL>
|
||||
<eventSubURL>/87895a19/upnp/control/WANIPConn1</eventSubURL>
|
||||
<SCPDURL>/87895a19/gateconnSCPD_PPP.xml</SCPDURL>
|
||||
</service>
|
||||
<service>
|
||||
<serviceType>urn:schemas-upnp-org:service:WANIPv6FirewallControl:1</serviceType>
|
||||
<serviceId>urn:upnp-org:serviceId:WANIPv6FwCtrl1</serviceId>
|
||||
<controlURL>/87895a19/upnp/control/WANIPv6FwCtrl1</controlURL>
|
||||
<eventSubURL>/87895a19/upnp/control/WANIPv6FwCtrl1</eventSubURL>
|
||||
<SCPDURL>/87895a19/wanipv6fwctrlSCPD.xml</SCPDURL>
|
||||
</service>
|
||||
</serviceList>
|
||||
</device>
|
||||
</deviceList>
|
||||
</device>
|
||||
</deviceList>
|
||||
</device>
|
||||
</root>
|
|
@ -0,0 +1,151 @@
|
|||
/* $Id: testportlistingparse.c,v 1.2 2014/11/01 10:37:32 nanard Exp $ */
|
||||
/* Project : miniupnp
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* Author : Thomas Bernard
|
||||
* Copyright (c) 2014 Thomas Bernard
|
||||
* This software is subject to the conditions detailed in the
|
||||
* LICENCE file provided in this distribution.
|
||||
* */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include "portlistingparse.h"
|
||||
|
||||
struct port_mapping {
|
||||
unsigned int leasetime;
|
||||
unsigned short externalport;
|
||||
unsigned short internalport;
|
||||
const char * remotehost;
|
||||
const char * client;
|
||||
const char * proto;
|
||||
const char * desc;
|
||||
unsigned char enabled;
|
||||
};
|
||||
|
||||
/* return the number of differences */
|
||||
int test(const char * portListingXml, int portListingXmlLen,
|
||||
const struct port_mapping * ref, int count)
|
||||
{
|
||||
int i;
|
||||
int r = 0;
|
||||
struct PortMappingParserData data;
|
||||
struct PortMapping * pm;
|
||||
|
||||
memset(&data, 0, sizeof(data));
|
||||
ParsePortListing(portListingXml, portListingXmlLen, &data);
|
||||
for(i = 0, pm = data.l_head;
|
||||
(pm != NULL) && (i < count);
|
||||
i++, pm = pm->l_next) {
|
||||
printf("%2d %s %5hu->%s:%-5hu '%s' '%s' %u\n",
|
||||
i, pm->protocol, pm->externalPort, pm->internalClient,
|
||||
pm->internalPort,
|
||||
pm->description, pm->remoteHost,
|
||||
(unsigned)pm->leaseTime);
|
||||
if(0 != strcmp(pm->protocol, ref[i].proto)) {
|
||||
printf("protocol : '%s' != '%s'\n", pm->protocol, ref[i].proto);
|
||||
r++;
|
||||
}
|
||||
if(pm->externalPort != ref[i].externalport) {
|
||||
printf("externalPort : %hu != %hu\n",
|
||||
pm->externalPort, ref[i].externalport);
|
||||
r++;
|
||||
}
|
||||
if(0 != strcmp(pm->internalClient, ref[i].client)) {
|
||||
printf("client : '%s' != '%s'\n",
|
||||
pm->internalClient, ref[i].client);
|
||||
r++;
|
||||
}
|
||||
if(pm->internalPort != ref[i].internalport) {
|
||||
printf("internalPort : %hu != %hu\n",
|
||||
pm->internalPort, ref[i].internalport);
|
||||
r++;
|
||||
}
|
||||
if(0 != strcmp(pm->description, ref[i].desc)) {
|
||||
printf("description : '%s' != '%s'\n",
|
||||
pm->description, ref[i].desc);
|
||||
r++;
|
||||
}
|
||||
if(0 != strcmp(pm->remoteHost, ref[i].remotehost)) {
|
||||
printf("remoteHost : '%s' != '%s'\n",
|
||||
pm->remoteHost, ref[i].remotehost);
|
||||
r++;
|
||||
}
|
||||
if((unsigned)pm->leaseTime != ref[i].leasetime) {
|
||||
printf("leaseTime : %u != %u\n",
|
||||
(unsigned)pm->leaseTime, ref[i].leasetime);
|
||||
r++;
|
||||
}
|
||||
if(pm->enabled != ref[i].enabled) {
|
||||
printf("enabled : %d != %d\n",
|
||||
(int)pm->enabled, (int)ref[i].enabled);
|
||||
r++;
|
||||
}
|
||||
}
|
||||
if((i != count) || (pm != NULL)) {
|
||||
printf("count mismatch : i=%d count=%d pm=%p\n", i, count, pm);
|
||||
r++;
|
||||
}
|
||||
FreePortListing(&data);
|
||||
return r;
|
||||
}
|
||||
|
||||
const char test_document[] =
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||
"<p:PortMappingList xmlns:p=\"urn:schemas-upnp-org:gw:WANIPConnection\"\n"
|
||||
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n"
|
||||
"xsi:schemaLocation=\"urn:schemas-upnp-org:gw:WANIPConnection "
|
||||
"http://www.upnp.org/schemas/gw/WANIPConnection-v2.xsd\">\n"
|
||||
" <p:PortMappingEntry>\n"
|
||||
" <p:NewRemoteHost></p:NewRemoteHost>\n"
|
||||
" <p:NewExternalPort>5002</p:NewExternalPort>\n"
|
||||
" <p:NewProtocol>UDP</p:NewProtocol>\n"
|
||||
" <p:NewInternalPort>4001</p:NewInternalPort>\n"
|
||||
" <p:NewInternalClient>192.168.1.123</p:NewInternalClient>\n"
|
||||
" <p:NewEnabled>1</p:NewEnabled>\n"
|
||||
" <p:NewDescription>xxx</p:NewDescription>\n"
|
||||
" <p:NewLeaseTime>0</p:NewLeaseTime>\n"
|
||||
" </p:PortMappingEntry>\n"
|
||||
" <p:PortMappingEntry>\n"
|
||||
" <p:NewRemoteHost>202.233.2.1</p:NewRemoteHost>\n"
|
||||
" <p:NewExternalPort>2345</p:NewExternalPort>\n"
|
||||
" <p:NewProtocol>TCP</p:NewProtocol>\n"
|
||||
" <p:NewInternalPort>2349</p:NewInternalPort>\n"
|
||||
" <p:NewInternalClient>192.168.1.137</p:NewInternalClient>\n"
|
||||
" <p:NewEnabled>1</p:NewEnabled>\n"
|
||||
" <p:NewDescription>dooom</p:NewDescription>\n"
|
||||
" <p:NewLeaseTime>346</p:NewLeaseTime>\n"
|
||||
" </p:PortMappingEntry>\n"
|
||||
" <p:PortMappingEntry>\n"
|
||||
" <p:NewRemoteHost>134.231.2.11</p:NewRemoteHost>\n"
|
||||
" <p:NewExternalPort>12345</p:NewExternalPort>\n"
|
||||
" <p:NewProtocol>TCP</p:NewProtocol>\n"
|
||||
" <p:NewInternalPort>12345</p:NewInternalPort>\n"
|
||||
" <p:NewInternalClient>192.168.1.137</p:NewInternalClient>\n"
|
||||
" <p:NewEnabled>1</p:NewEnabled>\n"
|
||||
" <p:NewDescription>dooom A</p:NewDescription>\n"
|
||||
" <p:NewLeaseTime>347</p:NewLeaseTime>\n"
|
||||
" </p:PortMappingEntry>\n"
|
||||
"</p:PortMappingList>";
|
||||
|
||||
#define PORT_MAPPINGS_COUNT 3
|
||||
const struct port_mapping port_mappings[PORT_MAPPINGS_COUNT] = {
|
||||
{347, 12345, 12345, "134.231.2.11", "192.168.1.137", "TCP", "dooom A", 1},
|
||||
{346, 2345, 2349, "202.233.2.1", "192.168.1.137", "TCP", "dooom", 1},
|
||||
{0, 5002, 4001, "", "192.168.1.123", "UDP", "xxx", 1}
|
||||
};
|
||||
|
||||
/* --- main --- */
|
||||
int main(void)
|
||||
{
|
||||
int r;
|
||||
r = test(test_document, sizeof(test_document) - 1,
|
||||
port_mappings, PORT_MAPPINGS_COUNT);
|
||||
if(r == 0) {
|
||||
printf("test of portlistingparse OK\n");
|
||||
return 0;
|
||||
} else {
|
||||
printf("test FAILED (%d differences counted)\n", r);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
/* $Id: upnpdev.c,v 1.1 2015/08/28 12:14:19 nanard Exp $ */
|
||||
/* Project : miniupnp
|
||||
* Web : http://miniupnp.free.fr/
|
||||
* Author : Thomas BERNARD
|
||||
* copyright (c) 2005-2015 Thomas Bernard
|
||||
* This software is subjet to the conditions detailed in the
|
||||
* provided LICENSE file. */
|
||||
#include <stdlib.h>
|
||||
#include "upnpdev.h"
|
||||
|
||||
/* freeUPNPDevlist() should be used to
|
||||
* free the chained list returned by upnpDiscover() */
|
||||
void freeUPNPDevlist(struct UPNPDev * devlist)
|
||||
{
|
||||
struct UPNPDev * next;
|
||||
while(devlist)
|
||||
{
|
||||
next = devlist->pNext;
|
||||
free(devlist);
|
||||
devlist = next;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
/* $Id: upnpdev.h,v 1.1 2015/08/28 12:14:19 nanard Exp $ */
|
||||
/* Project : miniupnp
|
||||
* Web : http://miniupnp.free.fr/
|
||||
* Author : Thomas BERNARD
|
||||
* copyright (c) 2005-2015 Thomas Bernard
|
||||
* This software is subjet to the conditions detailed in the
|
||||
* provided LICENSE file. */
|
||||
#ifndef UPNPDEV_H_INCLUDED
|
||||
#define UPNPDEV_H_INCLUDED
|
||||
|
||||
#include "miniupnpc_declspec.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct UPNPDev {
|
||||
struct UPNPDev * pNext;
|
||||
char * descURL;
|
||||
char * st;
|
||||
unsigned int scope_id;
|
||||
char * usn;
|
||||
char buffer[3];
|
||||
};
|
||||
|
||||
/* freeUPNPDevlist()
|
||||
* free list returned by upnpDiscover() */
|
||||
MINIUPNP_LIBSPEC void freeUPNPDevlist(struct UPNPDev * devlist);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* UPNPDEV_H_INCLUDED */
|
Loading…
Reference in New Issue