mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-01-16 09:57:19 -05:00
Fix MiniUPnP IGD with newers versions.
Only for windows, as other use UPnPBase.
This commit is contained in:
parent
e47168baae
commit
7e708ff4aa
@ -229,7 +229,6 @@ win32 {
|
|||||||
OBJECTS_DIR = temp/obj
|
OBJECTS_DIR = temp/obj
|
||||||
MOC_DIR = temp/moc
|
MOC_DIR = temp/moc
|
||||||
DEFINES *= WINDOWS_SYS WIN32 STATICLIB MINGW WIN32_LEAN_AND_MEAN _USE_32BIT_TIME_T
|
DEFINES *= WINDOWS_SYS WIN32 STATICLIB MINGW WIN32_LEAN_AND_MEAN _USE_32BIT_TIME_T
|
||||||
DEFINES *= MINIUPNPC_VERSION=13
|
|
||||||
# This defines the platform to be WinXP or later and is needed for getaddrinfo (_WIN32_WINNT_WINXP)
|
# This defines the platform to be WinXP or later and is needed for getaddrinfo (_WIN32_WINNT_WINXP)
|
||||||
DEFINES *= WINVER=0x0501
|
DEFINES *= WINVER=0x0501
|
||||||
|
|
||||||
|
@ -30,13 +30,81 @@ bool upnphandler::initUPnPState()
|
|||||||
{
|
{
|
||||||
/* allocate memory */
|
/* allocate memory */
|
||||||
uPnPConfigData *upcd = new uPnPConfigData;
|
uPnPConfigData *upcd = new uPnPConfigData;
|
||||||
|
#if MINIUPNPC_API_VERSION >= 14 //1.9 2015/07/23
|
||||||
#if MINIUPNPC_VERSION >= 11
|
/* $Id: miniupnpc.h,v 1.44 2015/07/23 20:40:10 nanard Exp $ */
|
||||||
/* Starting from version 1.1, miniupnpc api has a new parameter (int sameport) */
|
//upnpDiscover(int delay, const char * multicastif,
|
||||||
upcd->devlist = upnpDiscover(2000, NULL, NULL, 0);
|
// const char * minissdpdsock, int sameport,
|
||||||
|
// int ipv6, unsigned char ttl,
|
||||||
|
// int * error);
|
||||||
|
unsigned char ttl = 2; /* defaulting to 2 */
|
||||||
|
upcd->devlist = upnpDiscover(2000, NULL,
|
||||||
|
NULL, 0,
|
||||||
|
0, ttl,
|
||||||
|
NULL);
|
||||||
#else
|
#else
|
||||||
upcd->devlist = upnpDiscover(2000, NULL, NULL);
|
#if MINIUPNPC_API_VERSION >= 8 //1.5 2011/04/18
|
||||||
#endif
|
/* $Id: miniupnpc.h,v 1.41 2015/05/22 10:23:48 nanard Exp $ */
|
||||||
|
/* $Id: miniupnpc.h,v 1.23 2011/04/11 08:21:46 nanard Exp $ */
|
||||||
|
//upnpDiscover(int delay, const char * multicastif,
|
||||||
|
// const char * minissdpdsock, int sameport,
|
||||||
|
// int ipv6,
|
||||||
|
// int * error);
|
||||||
|
upcd->devlist = upnpDiscover(2000, NULL,
|
||||||
|
NULL, 0,
|
||||||
|
0,
|
||||||
|
NULL);
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= 6//1.5 2011/03/14
|
||||||
|
/* $Id: miniupnpc.h,v 1.21 2011/03/14 13:37:12 nanard Exp $ */
|
||||||
|
//upnpDiscover(int delay, const char * multicastif,
|
||||||
|
// const char * minissdpdsock, int sameport,
|
||||||
|
// int * error);
|
||||||
|
upcd->devlist = upnpDiscover(2000, NULL,
|
||||||
|
NULL, 0,
|
||||||
|
NULL);
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -4//1.1 2008/09/25
|
||||||
|
/* $Id: miniupnpc.h,v 1.20 2011/02/07 16:46:05 nanard Exp $ */
|
||||||
|
/* $Id: miniupnpc.h,v 1.18 2008/09/25 18:02:50 nanard Exp $ */
|
||||||
|
//upnpDiscover(int delay, const char * multicastif,
|
||||||
|
// const char * minissdpdsock, int sameport);
|
||||||
|
upcd->devlist = upnpDiscover(2000, NULL,
|
||||||
|
NULL, 0);
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -5//1.0 2007/12/19
|
||||||
|
/* $Id: miniupnpc.h,v 1.17 2007/12/19 14:58:54 nanard Exp $ */
|
||||||
|
//upnpDiscover(int delay, const char * multicastif,
|
||||||
|
// const char * minissdpdsock);
|
||||||
|
upcd->devlist = upnpDiscover(2000, NULL,
|
||||||
|
NULL);
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -6//1.0 2007/10/16
|
||||||
|
/* $Id: miniupnpc.h,v 1.15 2007/10/16 15:07:32 nanard Exp $ */
|
||||||
|
//LIBSPEC struct UPNPDev * upnpDiscover(int delay, const char * multicastif);
|
||||||
|
upcd->devlist = upnpDiscover(2000, NULL);
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
|
/* $Id: miniupnpc.h,v 1.14 2007/10/01 13:42:52 nanard Exp $ */
|
||||||
|
/* $Id: miniupnpc.h,v 1.9 2006/09/04 09:30:17 nanard Exp $ */
|
||||||
|
//struct UPNPDev * upnpDiscover(int);
|
||||||
|
upcd->devlist = upnpDiscover(2000);
|
||||||
|
#else
|
||||||
|
#error MINIUPNPC_API_VERSION is not defined. You may define one follow miniupnpc library version
|
||||||
|
//2006/09/04 to 2007/10/01 => -7//Start return struct UPNPDev * for upnpDiscover
|
||||||
|
//2007/10/16 => -6 upnpDiscover
|
||||||
|
//2007/12/19 => -5 upnpDiscover
|
||||||
|
//2008/09/25 => -4 upnpDiscover
|
||||||
|
//2009/04/17 => -3 UPNP_AddPortMapping
|
||||||
|
//2010/12/09 => -2 //struct IGDdatas_service CIF;
|
||||||
|
//2011/02/15 => -1 UPNP_AddPortMapping
|
||||||
|
//2011/03/14 => 6 //Start of MINIUPNPC_API_VERSION
|
||||||
|
#endif//>=-7
|
||||||
|
#endif//>=-6
|
||||||
|
#endif//>=-5
|
||||||
|
#endif//>=-4
|
||||||
|
#endif//>=6
|
||||||
|
#endif//>=8
|
||||||
|
#endif//>=14
|
||||||
|
|
||||||
if(upcd->devlist)
|
if(upcd->devlist)
|
||||||
{
|
{
|
||||||
@ -305,12 +373,16 @@ bool upnphandler::start_upnp()
|
|||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
if (!SetRedirectAndTest(&(config -> urls), &(config->data),
|
if (!SetRedirectAndTest(&(config -> urls), &(config->data),
|
||||||
in_addr, in_port1, eport1, eprot1))
|
in_addr, in_port1, eport1, eprot1,
|
||||||
|
NULL /*leaseDuration*/, NULL /*description*/,
|
||||||
|
0))
|
||||||
{
|
{
|
||||||
upnpState = RS_UPNP_S_TCP_FAILED;
|
upnpState = RS_UPNP_S_TCP_FAILED;
|
||||||
}
|
}
|
||||||
else if (!SetRedirectAndTest(&(config -> urls), &(config->data),
|
else if (!SetRedirectAndTest(&(config -> urls), &(config->data),
|
||||||
in_addr, in_port2, eport2, eprot2))
|
in_addr, in_port2, eport2, eprot2,
|
||||||
|
NULL /*leaseDuration*/, NULL /*description*/,
|
||||||
|
0))
|
||||||
{
|
{
|
||||||
upnpState = RS_UPNP_S_UDP_FAILED;
|
upnpState = RS_UPNP_S_UDP_FAILED;
|
||||||
}
|
}
|
||||||
@ -323,8 +395,16 @@ bool upnphandler::start_upnp()
|
|||||||
/* now store the external address */
|
/* now store the external address */
|
||||||
char externalIPAddress[32];
|
char externalIPAddress[32];
|
||||||
UPNP_GetExternalIPAddress(config -> urls.controlURL,
|
UPNP_GetExternalIPAddress(config -> urls.controlURL,
|
||||||
config->data.servicetype,
|
#if MINIUPNPC_API_VERSION >= -2//1.4 2010/12/09
|
||||||
externalIPAddress);
|
config->data.first.servicetype,
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
|
config->data.servicetype,
|
||||||
|
#else
|
||||||
|
#error MINIUPNPC_API_VERSION is not defined. You may define one follow miniupnpc library version
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
externalIPAddress);
|
||||||
|
|
||||||
sockaddr_clear(&upnp_eaddr);
|
sockaddr_clear(&upnp_eaddr);
|
||||||
|
|
||||||
|
@ -1,8 +1,27 @@
|
|||||||
//this file uses miniupnp
|
//this file uses miniupnp
|
||||||
|
//From https://github.com/miniupnp/miniupnp/blob/master/miniupnpc/upnpc.c
|
||||||
|
|
||||||
#include "upnp/upnputil.h"
|
#include "upnp/upnputil.h"
|
||||||
|
|
||||||
/* protofix() checks if protocol is "UDP" or "TCP"
|
//Define this variable follow the date of used MiniUPnP Library
|
||||||
|
//#define MINIUPNPC_API_VERSION -7
|
||||||
|
#ifndef MINIUPNPC_API_VERSION
|
||||||
|
#error MINIUPNPC_API_VERSION is not defined. You may define one follow miniupnpc library version
|
||||||
|
//2006/09/04 to 2007/10/01 => -7//Start return struct UPNPDev * for upnpDiscover
|
||||||
|
//2007/10/16 => -6 upnpDiscover
|
||||||
|
//2007/12/19 => -5 upnpDiscover
|
||||||
|
//2008/09/25 => -4 upnpDiscover
|
||||||
|
//2009/04/17 => -3 UPNP_AddPortMapping
|
||||||
|
//2010/12/09 => -2 //struct IGDdatas_service CIF;
|
||||||
|
//2011/02/15 => -1 UPNP_AddPortMapping
|
||||||
|
//2011/03/14 => 6 //Start of MINIUPNPC_API_VERSION
|
||||||
|
#endif//>=-7
|
||||||
|
|
||||||
|
#if MINIUPNPC_API_VERSION >= -4//1.0 2008/02/18
|
||||||
|
#include <time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* protofix() checks if protocol is "UDP" or "TCP"
|
||||||
* returns NULL if not */
|
* returns NULL if not */
|
||||||
const char * protofix(const char * proto)
|
const char * protofix(const char * proto)
|
||||||
{
|
{
|
||||||
@ -10,13 +29,13 @@ const char * protofix(const char * proto)
|
|||||||
static const char proto_udp[4] = { 'U', 'D', 'P', 0};
|
static const char proto_udp[4] = { 'U', 'D', 'P', 0};
|
||||||
int i, b;
|
int i, b;
|
||||||
for(i=0, b=1; i<4; i++)
|
for(i=0, b=1; i<4; i++)
|
||||||
b = b && ( (proto[i] == proto_tcp[i])
|
b = b && ( (proto[i] == proto_tcp[i])
|
||||||
|| (proto[i] == (proto_tcp[i] | 32)) );
|
|| (proto[i] == (proto_tcp[i] | 32)) );
|
||||||
if(b)
|
if(b)
|
||||||
return proto_tcp;
|
return proto_tcp;
|
||||||
for(i=0, b=1; i<4; i++)
|
for(i=0, b=1; i<4; i++)
|
||||||
b = b && ( (proto[i] == proto_udp[i])
|
b = b && ( (proto[i] == proto_udp[i])
|
||||||
|| (proto[i] == (proto_udp[i] | 32)) );
|
|| (proto[i] == (proto_udp[i] | 32)) );
|
||||||
if(b)
|
if(b)
|
||||||
return proto_udp;
|
return proto_udp;
|
||||||
return 0;
|
return 0;
|
||||||
@ -25,42 +44,129 @@ const char * protofix(const char * proto)
|
|||||||
void DisplayInfos(struct UPNPUrls * urls,
|
void DisplayInfos(struct UPNPUrls * urls,
|
||||||
struct IGDdatas * data)
|
struct IGDdatas * data)
|
||||||
{
|
{
|
||||||
char externalIPAddress[16];
|
char externalIPAddress[40];
|
||||||
char connectionType[64];
|
char connectionType[64];
|
||||||
char status[64];
|
char status[64];
|
||||||
char lastconnerror[64];
|
char lastconnerr[64];
|
||||||
unsigned int uptime;
|
unsigned int uptime;
|
||||||
unsigned int brUp, brDown;
|
unsigned int brUp, brDown;
|
||||||
UPNP_GetConnectionTypeInfo(urls->controlURL,
|
time_t timenow, timestarted;
|
||||||
data->servicetype,
|
int r;
|
||||||
connectionType);
|
#if MINIUPNPC_API_VERSION >= -2//1.4 2010/12/09
|
||||||
|
const char * servicetype = data->first.servicetype;
|
||||||
|
const char * servicetype_CIF = data->CIF.servicetype;
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
|
const char * servicetype = data->servicetype;
|
||||||
|
const char * servicetype_CIF = data->servicetype_CIF;
|
||||||
|
#else
|
||||||
|
#error MINIUPNPC_API_VERSION is not defined. You may define one follow miniupnpc library version
|
||||||
|
#endif//>=-7
|
||||||
|
#endif//>=-2
|
||||||
|
|
||||||
|
#if MINIUPNPC_API_VERSION >= -3//1.0 2009/04/17
|
||||||
|
if(UPNP_GetConnectionTypeInfo(urls->controlURL,
|
||||||
|
servicetype,
|
||||||
|
connectionType) != UPNPCOMMAND_SUCCESS)
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
|
UPNP_GetConnectionTypeInfo(urls->controlURL, servicetype,
|
||||||
|
connectionType);
|
||||||
if(connectionType[0])
|
if(connectionType[0])
|
||||||
printf("Connection Type : %s\n", connectionType);
|
#endif//>=-7
|
||||||
else
|
#endif//>=-3
|
||||||
printf("GetConnectionTypeInfo failed.\n");
|
printf("GetConnectionTypeInfo failed.\n");
|
||||||
UPNP_GetStatusInfo(urls->controlURL, data->servicetype, status, &uptime, lastconnerror);
|
else
|
||||||
printf("Status : %s, uptime=%u LastConnError %s\n", status, uptime, lastconnerror);
|
printf("Connection Type : %s\n", connectionType);
|
||||||
UPNP_GetLinkLayerMaxBitRates(urls->controlURL_CIF, data->servicetype_CIF,
|
|
||||||
&brDown, &brUp);
|
#if MINIUPNPC_API_VERSION >= -4//1.0 2008/02/18
|
||||||
|
if(UPNP_GetStatusInfo(urls->controlURL, servicetype,
|
||||||
|
status, &uptime, lastconnerr) != UPNPCOMMAND_SUCCESS)
|
||||||
|
printf("GetStatusInfo failed.\n");
|
||||||
|
else
|
||||||
|
printf("Status : %s, uptime=%us, LastConnectionError : %s\n",
|
||||||
|
status, uptime, lastconnerr);
|
||||||
|
timenow = time(NULL);
|
||||||
|
timestarted = timenow - uptime;
|
||||||
|
printf(" Time started : %s", ctime(×tarted));
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
|
UPNP_GetStatusInfo(urls->controlURL, servicetype,
|
||||||
|
status, &uptime, lastconnerr);
|
||||||
|
printf("Status : %s, uptime=%u, LastConnectionError : %s\n",
|
||||||
|
status, uptime, lastconnerr);
|
||||||
|
#endif//>=-7
|
||||||
|
#endif//>=-4
|
||||||
|
|
||||||
|
#if MINIUPNPC_API_VERSION >= -4//1.0 2008/02/18
|
||||||
|
if(UPNP_GetLinkLayerMaxBitRates(urls->controlURL_CIF, servicetype_CIF,
|
||||||
|
&brDown, &brUp) != UPNPCOMMAND_SUCCESS) {
|
||||||
|
printf("GetLinkLayerMaxBitRates failed.\n");
|
||||||
|
} else {
|
||||||
|
printf("MaxBitRateDown : %u bps", brDown);
|
||||||
|
if(brDown >= 1000000) {
|
||||||
|
printf(" (%u.%u Mbps)", brDown / 1000000, (brDown / 100000) % 10);
|
||||||
|
} else if(brDown >= 1000) {
|
||||||
|
printf(" (%u Kbps)", brDown / 1000);
|
||||||
|
}
|
||||||
|
printf(" MaxBitRateUp %u bps", brUp);
|
||||||
|
if(brUp >= 1000000) {
|
||||||
|
printf(" (%u.%u Mbps)", brUp / 1000000, (brUp / 100000) % 10);
|
||||||
|
} else if(brUp >= 1000) {
|
||||||
|
printf(" (%u Kbps)", brUp / 1000);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
|
UPNP_GetLinkLayerMaxBitRates(urls->controlURL_CIF,
|
||||||
|
servicetype_CIF,
|
||||||
|
&brDown, &brUp);
|
||||||
printf("MaxBitRateDown : %u bps MaxBitRateUp %u bps\n", brDown, brUp);
|
printf("MaxBitRateDown : %u bps MaxBitRateUp %u bps\n", brDown, brUp);
|
||||||
|
#endif//>=-7
|
||||||
|
#endif//>=-4
|
||||||
|
|
||||||
|
#if MINIUPNPC_API_VERSION >= -5//1.0 2007/12/19
|
||||||
|
r = UPNP_GetExternalIPAddress(urls->controlURL,
|
||||||
|
servicetype,
|
||||||
|
externalIPAddress);
|
||||||
|
if(r != UPNPCOMMAND_SUCCESS) {
|
||||||
|
printf("GetExternalIPAddress failed. (errorcode=%d)\n", r);
|
||||||
|
} else {
|
||||||
|
printf("ExternalIPAddress = %s\n", externalIPAddress);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
UPNP_GetExternalIPAddress(urls->controlURL,
|
UPNP_GetExternalIPAddress(urls->controlURL,
|
||||||
data->servicetype,
|
servicetype,
|
||||||
externalIPAddress);
|
externalIPAddress);
|
||||||
if(externalIPAddress[0])
|
if(externalIPAddress[0])
|
||||||
printf("ExternalIPAddress = %s\n", externalIPAddress);
|
printf("ExternalIPAddress = %s\n", externalIPAddress);
|
||||||
else
|
else
|
||||||
printf("GetExternalIPAddress failed.\n");
|
printf("GetExternalIPAddress failed.\n");
|
||||||
|
#endif//>=-7
|
||||||
|
#endif//>=-4
|
||||||
}
|
}
|
||||||
|
|
||||||
void GetConnectionStatus(struct UPNPUrls * urls,
|
void GetConnectionStatus(struct UPNPUrls * urls,
|
||||||
struct IGDdatas * data)
|
struct IGDdatas * data)
|
||||||
{
|
{
|
||||||
unsigned int bytessent, bytesreceived, packetsreceived, packetssent;
|
unsigned int bytessent, bytesreceived, packetsreceived, packetssent;
|
||||||
|
#if MINIUPNPC_API_VERSION >= -2//1.4 2010/12/09
|
||||||
|
const char * servicetype_CIF = data->CIF.servicetype;
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
|
const char * servicetype_CIF = data->servicetype_CIF;
|
||||||
|
#else
|
||||||
|
#error MINIUPNPC_API_VERSION is not defined. You may define one follow miniupnpc library version
|
||||||
|
#endif//>=-7
|
||||||
|
#endif//>=-2
|
||||||
|
|
||||||
DisplayInfos(urls, data);
|
DisplayInfos(urls, data);
|
||||||
bytessent = UPNP_GetTotalBytesSent(urls->controlURL_CIF, data->servicetype_CIF);
|
bytessent = UPNP_GetTotalBytesSent(urls->controlURL_CIF, servicetype_CIF);
|
||||||
bytesreceived = UPNP_GetTotalBytesReceived(urls->controlURL_CIF, data->servicetype_CIF);
|
bytesreceived = UPNP_GetTotalBytesReceived(urls->controlURL_CIF, servicetype_CIF);
|
||||||
packetssent = UPNP_GetTotalPacketsSent(urls->controlURL_CIF, data->servicetype_CIF);
|
packetssent = UPNP_GetTotalPacketsSent(urls->controlURL_CIF, servicetype_CIF);
|
||||||
packetsreceived = UPNP_GetTotalPacketsReceived(urls->controlURL_CIF, data->servicetype_CIF);
|
packetsreceived = UPNP_GetTotalPacketsReceived(urls->controlURL_CIF, servicetype_CIF);
|
||||||
printf("Bytes: Sent: %8u\tRecv: %8u\n", bytessent, bytesreceived);
|
printf("Bytes: Sent: %8u\tRecv: %8u\n", bytessent, bytesreceived);
|
||||||
printf("Packets: Sent: %8u\tRecv: %8u\n", packetssent, packetsreceived);
|
printf("Packets: Sent: %8u\tRecv: %8u\n", packetssent, packetsreceived);
|
||||||
}
|
}
|
||||||
@ -71,7 +177,7 @@ void ListRedirections(struct UPNPUrls * urls,
|
|||||||
int r;
|
int r;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
char index[6];
|
char index[6];
|
||||||
char intClient[16];
|
char intClient[40];
|
||||||
char intPort[6];
|
char intPort[6];
|
||||||
char extPort[6];
|
char extPort[6];
|
||||||
char protocol[4];
|
char protocol[4];
|
||||||
@ -79,6 +185,16 @@ void ListRedirections(struct UPNPUrls * urls,
|
|||||||
char enabled[6];
|
char enabled[6];
|
||||||
char rHost[64];
|
char rHost[64];
|
||||||
char duration[16];
|
char duration[16];
|
||||||
|
#if MINIUPNPC_API_VERSION >= -2//1.4 2010/12/09
|
||||||
|
const char * servicetype = data->first.servicetype;
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
|
const char * servicetype = data->servicetype;
|
||||||
|
#else
|
||||||
|
#error MINIUPNPC_API_VERSION is not defined. You may define one follow miniupnpc library version
|
||||||
|
#endif//>=-7
|
||||||
|
#endif//>=-2
|
||||||
|
|
||||||
/*unsigned int num=0;
|
/*unsigned int num=0;
|
||||||
UPNP_GetPortMappingNumberOfEntries(urls->controlURL, data->servicetype, &num);
|
UPNP_GetPortMappingNumberOfEntries(urls->controlURL, data->servicetype, &num);
|
||||||
printf("PortMappingNumberOfEntries : %u\n", num);*/
|
printf("PortMappingNumberOfEntries : %u\n", num);*/
|
||||||
@ -87,17 +203,22 @@ void ListRedirections(struct UPNPUrls * urls,
|
|||||||
rHost[0] = '\0'; enabled[0] = '\0';
|
rHost[0] = '\0'; enabled[0] = '\0';
|
||||||
duration[0] = '\0'; desc[0] = '\0';
|
duration[0] = '\0'; desc[0] = '\0';
|
||||||
extPort[0] = '\0'; intPort[0] = '\0'; intClient[0] = '\0';
|
extPort[0] = '\0'; intPort[0] = '\0'; intClient[0] = '\0';
|
||||||
r = UPNP_GetGenericPortMappingEntry(urls->controlURL, data->servicetype,
|
r = UPNP_GetGenericPortMappingEntry(urls->controlURL,
|
||||||
index,
|
servicetype,
|
||||||
extPort, intClient, intPort,
|
index,
|
||||||
protocol, desc, enabled,
|
extPort, intClient, intPort,
|
||||||
rHost, duration);
|
protocol, desc, enabled,
|
||||||
|
rHost, duration);
|
||||||
if(r==0)
|
if(r==0)
|
||||||
printf("%02d - %s %s->%s:%s\tenabled=%s leaseDuration=%s\n"
|
printf("%02d - %s %5s->%s:%-5s"
|
||||||
|
"\tenabled=%s leaseDuration=%s\n"
|
||||||
" desc='%s' rHost='%s'\n",
|
" desc='%s' rHost='%s'\n",
|
||||||
i, protocol, extPort, intClient, intPort,
|
i, protocol, extPort, intClient, intPort,
|
||||||
enabled, duration,
|
enabled, duration,
|
||||||
desc, rHost);
|
desc, rHost);
|
||||||
|
else
|
||||||
|
printf("GetGenericPortMappingEntry() returned %d (%s)\n",
|
||||||
|
r, strupnperror(r));
|
||||||
i++;
|
i++;
|
||||||
} while(r==0);
|
} while(r==0);
|
||||||
}
|
}
|
||||||
@ -109,17 +230,30 @@ void ListRedirections(struct UPNPUrls * urls,
|
|||||||
* 4 - get this port mapping from the IGD */
|
* 4 - get this port mapping from the IGD */
|
||||||
int SetRedirectAndTest(struct UPNPUrls * urls,
|
int SetRedirectAndTest(struct UPNPUrls * urls,
|
||||||
struct IGDdatas * data,
|
struct IGDdatas * data,
|
||||||
const char * iaddr,
|
const char * iaddr,
|
||||||
const char * iport,
|
const char * iport,
|
||||||
const char * eport,
|
const char * eport,
|
||||||
const char * proto)
|
const char * proto,
|
||||||
|
const char * leaseDuration,
|
||||||
|
const char * description,
|
||||||
|
int addAny)
|
||||||
{
|
{
|
||||||
char externalIPAddress[16];
|
char externalIPAddress[40];
|
||||||
char intClient[16];
|
char intClient[40];
|
||||||
char intPort[6];
|
char intPort[6];
|
||||||
// char leaseDuration[] = "3600"; /* 60 mins */
|
char reservedPort[6];
|
||||||
|
char duration[16];
|
||||||
int r;
|
int r;
|
||||||
int ok = 1;
|
int ok = 1;
|
||||||
|
#if MINIUPNPC_API_VERSION >= -2//1.4 2010/12/09
|
||||||
|
const char * servicetype = data->first.servicetype;
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
|
const char * servicetype = data->servicetype;
|
||||||
|
#else
|
||||||
|
#error MINIUPNPC_API_VERSION is not defined. You may define one follow miniupnpc library version
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
if(!iaddr || !iport || !eport || !proto)
|
if(!iaddr || !iport || !eport || !proto)
|
||||||
{
|
{
|
||||||
@ -132,56 +266,166 @@ int SetRedirectAndTest(struct UPNPUrls * urls,
|
|||||||
fprintf(stderr, "invalid protocol\n");
|
fprintf(stderr, "invalid protocol\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if MINIUPNPC_API_VERSION >= -5//1.0 2007/12/19
|
||||||
|
r = UPNP_GetExternalIPAddress(urls->controlURL,
|
||||||
|
servicetype,
|
||||||
|
externalIPAddress);
|
||||||
|
if(r != UPNPCOMMAND_SUCCESS)
|
||||||
|
printf("GetExternalIPAddress failed. (errorcode=%d)\n", r);
|
||||||
|
else
|
||||||
|
printf("ExternalIPAddress = %s\n", externalIPAddress);
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
UPNP_GetExternalIPAddress(urls->controlURL,
|
UPNP_GetExternalIPAddress(urls->controlURL,
|
||||||
data->servicetype,
|
servicetype,
|
||||||
externalIPAddress);
|
externalIPAddress);
|
||||||
if(externalIPAddress[0])
|
if(externalIPAddress[0])
|
||||||
printf("ExternalIPAddress = %s\n", externalIPAddress);
|
printf("ExternalIPAddress = %s\n", externalIPAddress);
|
||||||
else
|
else
|
||||||
printf("GetExternalIPAddress failed.\n");
|
printf("GetExternalIPAddress failed.\n");
|
||||||
|
#endif//>=-7
|
||||||
|
#endif//>=-4
|
||||||
|
|
||||||
// Unix at the moment!
|
#if MINIUPNPC_API_VERSION >= 11
|
||||||
#if MINIUPNPC_VERSION >= 13
|
if (addAny) {
|
||||||
/* Starting from miniupnpc version 1.2, lease duration parameter is gone */
|
r = UPNP_AddAnyPortMapping(urls->controlURL, data->first.servicetype,
|
||||||
r = UPNP_AddPortMapping(urls->controlURL, data->servicetype,
|
eport, iport, iaddr, description,
|
||||||
eport, iport, iaddr, 0, proto, NULL);
|
proto, 0, leaseDuration, reservedPort);
|
||||||
#else
|
if(r==UPNPCOMMAND_SUCCESS)
|
||||||
#if MINIUPNPC_VERSION >= 12
|
eport = reservedPort;
|
||||||
/* Starting from miniupnpc version 1.2, lease duration parameter is gone */
|
else
|
||||||
r = UPNP_AddPortMapping(urls->controlURL, data->servicetype,
|
printf("AddAnyPortMapping(%s, %s, %s) failed with code %d (%s)\n",
|
||||||
eport, iport, iaddr, 0, proto);
|
eport, iport, iaddr, r, strupnperror(r));
|
||||||
#else
|
} else
|
||||||
/* The lease parameter is also gone in minupnpc 1.0 */
|
|
||||||
r = UPNP_AddPortMapping(urls->controlURL, data->servicetype,
|
|
||||||
eport, iport, iaddr,0, 0, proto);
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// r = UPNP_AddPortMapping(urls->controlURL, data->servicetype,
|
|
||||||
// eport, iport, iaddr, 0, leaseDuration, proto);
|
|
||||||
|
|
||||||
// r = UPNP_AddPortMapping(urls->controlURL, data->servicetype,
|
|
||||||
// eport, iport, iaddr, 0, proto);
|
|
||||||
if(r==0)
|
|
||||||
{
|
{
|
||||||
printf("AddPortMapping(%s, %s, %s) failed\n", eport, iport, iaddr);
|
#if MINIUPNPC_API_VERSION >= -1
|
||||||
//this seems to trigger for unknown reasons sometimes.
|
/* $Id: upnpcommands.h,v 1.30 2015/07/15 12:21:28 nanard Exp $ */
|
||||||
//rely on Checking it afterwards...
|
/* $Id: upnpcommands.h,v 1.20 2011/02/15 11:13:22 nanard Exp $ */
|
||||||
//should check IP address then!
|
//UPNP_AddPortMapping(const char * controlURL, const char * servicetype,
|
||||||
//ok = 0;
|
// const char * extPort,
|
||||||
|
// const char * inPort,
|
||||||
|
// const char * inClient,
|
||||||
|
// const char * desc,
|
||||||
|
// const char * proto,
|
||||||
|
// const char * remoteHost,
|
||||||
|
// const char * leaseDuration);
|
||||||
|
r = UPNP_AddPortMapping(urls->controlURL, servicetype,
|
||||||
|
eport, iport, iaddr, NULL, proto, NULL, NULL);
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -3 //1.0 2009/04/17
|
||||||
|
/* $Id: upnpcommands.h,v 1.18 2010/06/09 10:59:09 nanard Exp $ */
|
||||||
|
/* $Id: upnpcommands.h,v 1.17 2009/04/17 21:21:19 nanard Exp $ */
|
||||||
|
//UPNP_AddPortMapping(const char * controlURL, const char * servicetype,
|
||||||
|
// const char * extPort,
|
||||||
|
// const char * inPort,
|
||||||
|
// const char * inClient,
|
||||||
|
// const char * desc,
|
||||||
|
// const char * proto,
|
||||||
|
// const char * remoteHost);
|
||||||
|
r = UPNP_AddPortMapping(urls->controlURL, servicetype,
|
||||||
|
eport, iport, iaddr, NULL, proto, NULL);
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//Before 1.0
|
||||||
|
/* $Id: upnpcommands.h,v 1.14 2008/09/25 18:02:50 nanard Exp $ */
|
||||||
|
/* $Id: upnpcommands.h,v 1.7 2006/07/09 12:00:54 nanard Exp $ */
|
||||||
|
//UPNP_AddPortMapping(const char * controlURL, const char * servicetype,
|
||||||
|
// const char * extPort,
|
||||||
|
// const char * inPort,
|
||||||
|
// const char * inClient,
|
||||||
|
// const char * desc,
|
||||||
|
// const char * proto);
|
||||||
|
r = UPNP_AddPortMapping(urls->controlURL, servicetype,
|
||||||
|
eport, iport, iaddr, NULL, proto);
|
||||||
|
#else
|
||||||
|
#error MINIUPNPC_API_VERSION is not defined. You may define one follow miniupnpc library version
|
||||||
|
#endif//>=-7
|
||||||
|
#endif//>=-3
|
||||||
|
#endif//>=-1
|
||||||
|
|
||||||
|
#if MINIUPNPC_API_VERSION >= -5//2007/12/19
|
||||||
|
if(r!=UPNPCOMMAND_SUCCESS){
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//Before 1.0
|
||||||
|
if(r==0){
|
||||||
|
#else
|
||||||
|
#error MINIUPNPC_API_VERSION is not defined. You may define one follow miniupnpc library version
|
||||||
|
#endif//>=-7
|
||||||
|
#endif//>=-5
|
||||||
|
printf("AddPortMapping(%s, %s, %s) failed and returns %d\n", eport, iport, iaddr, r);
|
||||||
|
//this seems to trigger for unknown reasons sometimes.
|
||||||
|
//rely on Checking it afterwards...
|
||||||
|
//should check IP address then!
|
||||||
|
ok = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if MINIUPNPC_API_VERSION >= 10//1.0 2006/09/04
|
||||||
|
/* $Id: upnpcommands.h,v 1.30 2015/07/15 12:21:28 nanard Exp $ */
|
||||||
|
/* $Id: upnpcommands.h,v 1.26 2014/01/31 13:18:26 nanard Exp $ */
|
||||||
|
//UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
||||||
|
// const char * servicetype,
|
||||||
|
// const char * extPort,
|
||||||
|
// const char * proto,
|
||||||
|
// const char * remoteHost,
|
||||||
|
// char * intClient,
|
||||||
|
// char * intPort,
|
||||||
|
// char * desc,
|
||||||
|
// char * enabled,
|
||||||
|
// char * leaseDuration);
|
||||||
|
r = UPNP_GetSpecificPortMappingEntry(urls->controlURL,
|
||||||
|
data->first.servicetype,
|
||||||
|
eport, proto, NULL/*remoteHost*/,
|
||||||
|
intClient, intPort, NULL/*desc*/,
|
||||||
|
NULL/*enabled*/, duration);
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= 6//1.0 2006/09/04
|
||||||
|
/* $Id: upnpcommands.h,v 1.24 2012/03/05 19:42:47 nanard Exp $ */
|
||||||
|
/* $Id: upnpcommands.h,v 1.22 2011/03/14 13:36:01 nanard Exp $ */
|
||||||
|
//UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
||||||
|
// const char * servicetype,
|
||||||
|
// const char * extPort,
|
||||||
|
// const char * proto,
|
||||||
|
// char * intClient,
|
||||||
|
// char * intPort,
|
||||||
|
// char * desc,
|
||||||
|
// char * enabled,
|
||||||
|
// char * leaseDuration);
|
||||||
|
r = UPNP_GetSpecificPortMappingEntry(urls->controlURL,
|
||||||
|
data->first.servicetype,
|
||||||
|
eport, proto,
|
||||||
|
intClient, intPort, NULL/*desc*/,
|
||||||
|
NULL/*enabled*/, duration);
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
|
/* $Id: upnpcommands.h,v 1.20 2011/02/15 11:13:22 nanard Exp $ */
|
||||||
|
/* $Id: upnpcommands.h,v 1.7 2006/07/09 12:00:54 nanard Exp $ */
|
||||||
|
//UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
||||||
|
// const char * servicetype,
|
||||||
|
// const char * extPort,
|
||||||
|
// const char * proto,
|
||||||
|
// char * intClient,
|
||||||
|
// char * intPort);
|
||||||
UPNP_GetSpecificPortMappingEntry(urls->controlURL,
|
UPNP_GetSpecificPortMappingEntry(urls->controlURL,
|
||||||
data->servicetype,
|
servicetype,
|
||||||
eport, proto,
|
eport,
|
||||||
intClient, intPort);
|
proto,
|
||||||
if(intClient[0])
|
intClient,
|
||||||
printf("InternalIP:Port = %s:%s\n", intClient, intPort);
|
intPort);
|
||||||
else
|
if(intClient[0]) r = UPNPCOMMAND_SUCCESS;
|
||||||
{
|
#endif//>=-7
|
||||||
printf("GetSpecificPortMappingEntry failed.\n");
|
#endif//>=6
|
||||||
|
#endif//>=10
|
||||||
|
|
||||||
|
if(r!=UPNPCOMMAND_SUCCESS) {
|
||||||
|
printf("GetSpecificPortMappingEntry() failed with code %d (%s)\n",
|
||||||
|
r, strupnperror(r));
|
||||||
ok = 0;
|
ok = 0;
|
||||||
|
} else if(intClient[0]) {
|
||||||
|
printf("InternalIP:Port = %s:%s\n", intClient, intPort);
|
||||||
|
printf("external %s:%s %s is redirected to internal %s:%s (duration=%s)\n",
|
||||||
|
externalIPAddress, eport, proto, intClient, intPort, duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((strcmp(iaddr, intClient) != 0) || (strcmp(iport, intPort) != 0))
|
if ((strcmp(iaddr, intClient) != 0) || (strcmp(iport, intPort) != 0))
|
||||||
@ -194,9 +438,6 @@ int SetRedirectAndTest(struct UPNPUrls * urls,
|
|||||||
ok = 0;
|
ok = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("external %s:%s is redirected to internal %s:%s\n",
|
|
||||||
externalIPAddress, eport, intClient, intPort);
|
|
||||||
|
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
printf("uPnP Forward/Mapping Succeeded\n");
|
printf("uPnP Forward/Mapping Succeeded\n");
|
||||||
@ -210,14 +451,17 @@ int SetRedirectAndTest(struct UPNPUrls * urls,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int TestRedirect(struct UPNPUrls * urls,
|
int TestRedirect(struct UPNPUrls * urls,
|
||||||
struct IGDdatas * data,
|
struct IGDdatas * data,
|
||||||
const char * iaddr,
|
const char * iaddr,
|
||||||
const char * iport,
|
const char * iport,
|
||||||
const char * eport,
|
const char * eport,
|
||||||
const char * proto)
|
const char * proto)
|
||||||
{
|
{
|
||||||
char intClient[16];
|
char externalIPAddress[40];
|
||||||
|
char intClient[40];
|
||||||
char intPort[6];
|
char intPort[6];
|
||||||
|
char duration[16];
|
||||||
|
int r = 0;
|
||||||
int ok = 1;
|
int ok = 1;
|
||||||
|
|
||||||
if(!iaddr || !iport || !eport || !proto)
|
if(!iaddr || !iport || !eport || !proto)
|
||||||
@ -231,21 +475,83 @@ int TestRedirect(struct UPNPUrls * urls,
|
|||||||
fprintf(stderr, "invalid protocol\n");
|
fprintf(stderr, "invalid protocol\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
UPNP_GetSpecificPortMappingEntry(urls->controlURL,
|
|
||||||
data->servicetype,
|
|
||||||
eport, proto,
|
|
||||||
intClient, intPort);
|
|
||||||
if(intClient[0])
|
|
||||||
printf("uPnP Check: InternalIP:Port = %s:%s\n", intClient, intPort);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("GetSpecificPortMappingEntry failed.\n");
|
|
||||||
ok = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("uPnP Check: External port %s is redirected to internal %s:%s\n",
|
#if MINIUPNPC_API_VERSION >= -2//1.4 2010/12/09
|
||||||
eport, intClient, intPort);
|
const char * servicetype = data->first.servicetype;
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
|
const char * servicetype = data->servicetype;
|
||||||
|
#else
|
||||||
|
#error MINIUPNPC_API_VERSION is not defined. You may define one follow miniupnpc library version
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if MINIUPNPC_API_VERSION >= 10//1.0 2006/09/04
|
||||||
|
/* $Id: upnpcommands.h,v 1.30 2015/07/15 12:21:28 nanard Exp $ */
|
||||||
|
/* $Id: upnpcommands.h,v 1.26 2014/01/31 13:18:26 nanard Exp $ */
|
||||||
|
//UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
||||||
|
// const char * servicetype,
|
||||||
|
// const char * extPort,
|
||||||
|
// const char * proto,
|
||||||
|
// const char * remoteHost,
|
||||||
|
// char * intClient,
|
||||||
|
// char * intPort,
|
||||||
|
// char * desc,
|
||||||
|
// char * enabled,
|
||||||
|
// char * leaseDuration);
|
||||||
|
r = UPNP_GetSpecificPortMappingEntry(urls->controlURL,
|
||||||
|
servicetype,
|
||||||
|
eport, proto, NULL/*remoteHost*/,
|
||||||
|
intClient, intPort, NULL/*desc*/,
|
||||||
|
NULL/*enabled*/, duration);
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= 6//1.0 2006/09/04
|
||||||
|
/* $Id: upnpcommands.h,v 1.24 2012/03/05 19:42:47 nanard Exp $ */
|
||||||
|
/* $Id: upnpcommands.h,v 1.22 2011/03/14 13:36:01 nanard Exp $ */
|
||||||
|
//UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
||||||
|
// const char * servicetype,
|
||||||
|
// const char * extPort,
|
||||||
|
// const char * proto,
|
||||||
|
// char * intClient,
|
||||||
|
// char * intPort,
|
||||||
|
// char * desc,
|
||||||
|
// char * enabled,
|
||||||
|
// char * leaseDuration);
|
||||||
|
r = UPNP_GetSpecificPortMappingEntry(urls->controlURL,
|
||||||
|
servicetype,
|
||||||
|
eport, proto,
|
||||||
|
intClient, intPort, NULL/*desc*/,
|
||||||
|
NULL/*enabled*/, duration);
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
|
/* $Id: upnpcommands.h,v 1.20 2011/02/15 11:13:22 nanard Exp $ */
|
||||||
|
/* $Id: upnpcommands.h,v 1.7 2006/07/09 12:00:54 nanard Exp $ */
|
||||||
|
//UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
||||||
|
// const char * servicetype,
|
||||||
|
// const char * extPort,
|
||||||
|
// const char * proto,
|
||||||
|
// char * intClient,
|
||||||
|
// char * intPort);
|
||||||
|
UPNP_GetSpecificPortMappingEntry(urls->controlURL,
|
||||||
|
servicetype,
|
||||||
|
eport,
|
||||||
|
proto,
|
||||||
|
intClient,
|
||||||
|
intPort);
|
||||||
|
if(intClient[0]) r = UPNPCOMMAND_SUCCESS;
|
||||||
|
#endif//>=-7
|
||||||
|
#endif//>=6
|
||||||
|
#endif//>=10
|
||||||
|
|
||||||
|
if(r!=UPNPCOMMAND_SUCCESS) {
|
||||||
|
printf("GetSpecificPortMappingEntry() failed with code %d (%s)\n",
|
||||||
|
r, strupnperror(r));
|
||||||
|
ok = 0;
|
||||||
|
} else if(intClient[0]) {
|
||||||
|
printf("uPnP Check: InternalIP:Port = %s:%s\n", intClient, intPort);
|
||||||
|
printf("external %s:%s %s is redirected to internal %s:%s (duration=%s)\n",
|
||||||
|
externalIPAddress, eport, proto, intClient, intPort, duration);
|
||||||
|
}
|
||||||
|
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
@ -259,13 +565,11 @@ int TestRedirect(struct UPNPUrls * urls,
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
RemoveRedirect(struct UPNPUrls * urls,
|
RemoveRedirect(struct UPNPUrls * urls,
|
||||||
struct IGDdatas * data,
|
struct IGDdatas * data,
|
||||||
const char * eport,
|
const char * eport,
|
||||||
const char * proto)
|
const char * proto)
|
||||||
{
|
{
|
||||||
if(!proto || !eport)
|
if(!proto || !eport)
|
||||||
{
|
{
|
||||||
@ -278,11 +582,19 @@ RemoveRedirect(struct UPNPUrls * urls,
|
|||||||
fprintf(stderr, "protocol invalid\n");
|
fprintf(stderr, "protocol invalid\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#if MINIUPNPC_VERSION >= 13
|
#if MINIUPNPC_API_VERSION >= -2//1.4 2010/12/09
|
||||||
|
UPNP_DeletePortMapping(urls->controlURL, data->first.servicetype, eport, proto, NULL);
|
||||||
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -3//1.3 2009/04/17
|
||||||
UPNP_DeletePortMapping(urls->controlURL, data->servicetype, eport, proto, NULL);
|
UPNP_DeletePortMapping(urls->controlURL, data->servicetype, eport, proto, NULL);
|
||||||
#else
|
#else
|
||||||
|
#if MINIUPNPC_API_VERSION >= -7//1.0 2006/09/04
|
||||||
UPNP_DeletePortMapping(urls->controlURL, data->servicetype, eport, proto);
|
UPNP_DeletePortMapping(urls->controlURL, data->servicetype, eport, proto);
|
||||||
#endif
|
#else
|
||||||
|
#error MINIUPNPC_API_VERSION is not defined. You may define one follow miniupnpc library version
|
||||||
|
#endif//>= -7
|
||||||
|
#endif//>= -3
|
||||||
|
#endif//>= -2
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include <miniupnpc/miniwget.h>
|
#include <miniupnpc/miniwget.h>
|
||||||
#include <miniupnpc/miniupnpc.h>
|
#include <miniupnpc/miniupnpc.h>
|
||||||
#include <miniupnpc/upnpcommands.h>
|
#include <miniupnpc/upnpcommands.h>
|
||||||
|
#include <miniupnpc/upnperrors.h>
|
||||||
|
|
||||||
/* Ensure linking names are okay on OSX platform. (C interface) */
|
/* Ensure linking names are okay on OSX platform. (C interface) */
|
||||||
|
|
||||||
@ -41,11 +42,14 @@ void ListRedirections(struct UPNPUrls * urls,
|
|||||||
struct IGDdatas * data);
|
struct IGDdatas * data);
|
||||||
|
|
||||||
int SetRedirectAndTest(struct UPNPUrls * urls,
|
int SetRedirectAndTest(struct UPNPUrls * urls,
|
||||||
struct IGDdatas * data,
|
struct IGDdatas * data,
|
||||||
const char * iaddr,
|
const char * iaddr,
|
||||||
const char * iport,
|
const char * iport,
|
||||||
const char * eport,
|
const char * eport,
|
||||||
const char * proto);
|
const char * proto,
|
||||||
|
const char *leaseDuration,
|
||||||
|
const char *description,
|
||||||
|
int addAny);
|
||||||
|
|
||||||
int TestRedirect(struct UPNPUrls * urls,
|
int TestRedirect(struct UPNPUrls * urls,
|
||||||
struct IGDdatas * data,
|
struct IGDdatas * data,
|
||||||
|
Loading…
Reference in New Issue
Block a user