remove dangling upnp port mappings, updated miniupnpc
This commit is contained in:
parent
9130e411e1
commit
18281f4d20
71 changed files with 729 additions and 222 deletions
25
external/miniupnpc/.gitignore
vendored
Normal file
25
external/miniupnpc/.gitignore
vendored
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
deb_dist/
|
||||||
|
build/
|
||||||
|
*.o
|
||||||
|
*.a
|
||||||
|
*.so
|
||||||
|
*.dll
|
||||||
|
*.dylib
|
||||||
|
Makefile.bak
|
||||||
|
miniupnpcstrings.h
|
||||||
|
pythonmodule
|
||||||
|
pythonmodule3
|
||||||
|
upnpc-shared
|
||||||
|
upnpc-static
|
||||||
|
minihttptestserver
|
||||||
|
minixmlvalid
|
||||||
|
testminiwget
|
||||||
|
validateminiwget
|
||||||
|
validateminixml
|
||||||
|
java/miniupnpc_*.jar
|
||||||
|
_jnaerator.*
|
||||||
|
out.errors.txt
|
||||||
|
jnaerator-*.jar
|
||||||
|
miniupnpc.h.bak
|
||||||
|
testupnpreplyparse
|
||||||
|
validateupnpreplyparse
|
12
external/miniupnpc/CMakeLists.txt
vendored
Executable file → Normal file
12
external/miniupnpc/CMakeLists.txt
vendored
Executable file → Normal file
|
@ -36,7 +36,7 @@ else (NOT WIN32)
|
||||||
endif (NOT WIN32)
|
endif (NOT WIN32)
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
add_definitions (-DMACOSX -D_DARWIN_C_SOURCE)
|
add_definitions (-D_DARWIN_C_SOURCE)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Set compiler specific build flags
|
# Set compiler specific build flags
|
||||||
|
@ -86,16 +86,14 @@ endif (NOT WIN32 AND NOT CMAKE_SYSTEM_NAME STREQUAL "AmigaOS")
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
set_source_files_properties (${MINIUPNPC_SOURCES} PROPERTIES
|
set_source_files_properties (${MINIUPNPC_SOURCES} PROPERTIES
|
||||||
COMPILE_DEFINITIONS STATICLIB
|
COMPILE_DEFINITIONS MINIUPNP_STATICLIB
|
||||||
COMPILE_DEFINITIONS MINIUPNP_EXPORTS
|
COMPILE_DEFINITIONS MINIUPNP_EXPORTS
|
||||||
)
|
)
|
||||||
endif (WIN32)
|
endif (WIN32)
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
# find_library (WINSOCK2_LIBRARY NAMES ws2_32 WS2_32 Ws2_32)
|
find_library (WINSOCK2_LIBRARY NAMES ws2_32 WS2_32 Ws2_32)
|
||||||
# find_library (IPHLPAPI_LIBRARY NAMES iphlpapi)
|
find_library (IPHLPAPI_LIBRARY NAMES iphlpapi)
|
||||||
set(WINSOCK2_LIBRARY ws2_32)
|
|
||||||
set(IPHLPAPI_LIBRARY iphlpapi)
|
|
||||||
set (LDLIBS ${WINSOCK2_LIBRARY} ${IPHLPAPI_LIBRARY} ${LDLIBS})
|
set (LDLIBS ${WINSOCK2_LIBRARY} ${IPHLPAPI_LIBRARY} ${LDLIBS})
|
||||||
#elseif (CMAKE_SYSTEM_NAME STREQUAL "Solaris")
|
#elseif (CMAKE_SYSTEM_NAME STREQUAL "Solaris")
|
||||||
# find_library (SOCKET_LIBRARY NAMES socket)
|
# find_library (SOCKET_LIBRARY NAMES socket)
|
||||||
|
@ -167,6 +165,8 @@ install (FILES
|
||||||
igd_desc_parse.h
|
igd_desc_parse.h
|
||||||
upnpreplyparse.h
|
upnpreplyparse.h
|
||||||
upnperrors.h
|
upnperrors.h
|
||||||
|
miniupnpctypes.h
|
||||||
|
portlistingparse.h
|
||||||
declspec.h
|
declspec.h
|
||||||
DESTINATION include/miniupnpc
|
DESTINATION include/miniupnpc
|
||||||
)
|
)
|
||||||
|
|
17
external/miniupnpc/Changelog.txt
vendored
Executable file → Normal file
17
external/miniupnpc/Changelog.txt
vendored
Executable file → Normal file
|
@ -1,6 +1,21 @@
|
||||||
$Id: Changelog.txt,v 1.193 2014/02/05 17:26:45 nanard Exp $
|
$Id: Changelog.txt,v 1.198 2014/09/11 14:13:31 nanard Exp $
|
||||||
miniUPnP client Changelog.
|
miniUPnP client Changelog.
|
||||||
|
|
||||||
|
2014/09/11:
|
||||||
|
use remoteHost arg of DeletePortMapping
|
||||||
|
|
||||||
|
2014/09/06:
|
||||||
|
Fix python3 build
|
||||||
|
|
||||||
|
2014/07/01:
|
||||||
|
Fix parsing of IGD2 root descriptions
|
||||||
|
|
||||||
|
2014/06/10:
|
||||||
|
rename LIBSPEC to MINIUPNP_LIBSPEC
|
||||||
|
|
||||||
|
2014/05/15:
|
||||||
|
Add support for IGD2 AddAnyPortMapping and DeletePortMappingRange
|
||||||
|
|
||||||
2014/02/05:
|
2014/02/05:
|
||||||
handle EINPROGRESS after connect()
|
handle EINPROGRESS after connect()
|
||||||
|
|
||||||
|
|
2
external/miniupnpc/LICENSE
vendored
Executable file → Normal file
2
external/miniupnpc/LICENSE
vendored
Executable file → Normal file
|
@ -1,5 +1,5 @@
|
||||||
MiniUPnPc
|
MiniUPnPc
|
||||||
Copyright (c) 2005-2011, Thomas BERNARD
|
Copyright (c) 2005-2014, Thomas BERNARD
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|
0
external/miniupnpc/MANIFEST.in
vendored
Executable file → Normal file
0
external/miniupnpc/MANIFEST.in
vendored
Executable file → Normal file
6
external/miniupnpc/Makefile
vendored
Executable file → Normal file
6
external/miniupnpc/Makefile
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
# $Id: Makefile,v 1.107 2014/01/31 14:19:12 nanard Exp $
|
# $Id: Makefile,v 1.110 2014/09/06 08:24:12 nanard Exp $
|
||||||
# MiniUPnP Project
|
# MiniUPnP Project
|
||||||
# http://miniupnp.free.fr/
|
# http://miniupnp.free.fr/
|
||||||
# http://miniupnp.tuxfamily.org/
|
# http://miniupnp.tuxfamily.org/
|
||||||
|
@ -85,7 +85,7 @@ LIBRARY = libminiupnpc.a
|
||||||
ifeq ($(OS), Darwin)
|
ifeq ($(OS), Darwin)
|
||||||
SHAREDLIBRARY = libminiupnpc.dylib
|
SHAREDLIBRARY = libminiupnpc.dylib
|
||||||
SONAME = $(basename $(SHAREDLIBRARY)).$(APIVERSION).dylib
|
SONAME = $(basename $(SHAREDLIBRARY)).$(APIVERSION).dylib
|
||||||
CFLAGS := -DMACOSX -D_DARWIN_C_SOURCE $(CFLAGS)
|
CFLAGS := -D_DARWIN_C_SOURCE $(CFLAGS)
|
||||||
else
|
else
|
||||||
ifeq ($(JARSUFFIX), win32)
|
ifeq ($(JARSUFFIX), win32)
|
||||||
SHAREDLIBRARY = miniupnpc.dll
|
SHAREDLIBRARY = miniupnpc.dll
|
||||||
|
@ -174,9 +174,11 @@ validateupnpreplyparse: testupnpreplyparse testupnpreplyparse.sh
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) $(LIBRARY) $(SHAREDLIBRARY) $(EXECUTABLES) $(OBJS) miniupnpcstrings.h
|
$(RM) $(LIBRARY) $(SHAREDLIBRARY) $(EXECUTABLES) $(OBJS) miniupnpcstrings.h
|
||||||
|
$(RM) $(EXECUTABLES_ADDTESTS)
|
||||||
# clean python stuff
|
# clean python stuff
|
||||||
$(RM) pythonmodule pythonmodule3
|
$(RM) pythonmodule pythonmodule3
|
||||||
$(RM) validateminixml validateminiwget validateupnpreplyparse
|
$(RM) validateminixml validateminiwget validateupnpreplyparse
|
||||||
|
$(RM) minihttptestserver minihttptestserver.o
|
||||||
$(RM) -r build/ dist/
|
$(RM) -r build/ dist/
|
||||||
#python setup.py clean
|
#python setup.py clean
|
||||||
# clean jnaerator stuff
|
# clean jnaerator stuff
|
||||||
|
|
4
external/miniupnpc/Makefile.mingw
vendored
Executable file → Normal file
4
external/miniupnpc/Makefile.mingw
vendored
Executable file → Normal file
|
@ -50,11 +50,11 @@ dll/upnpc.o: upnpc.o
|
||||||
echo $@ generated with $<
|
echo $@ generated with $<
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
$(CC) $(CFLAGS) -DSTATICLIB -c -o $@ $<
|
$(CC) $(CFLAGS) -DMINIUPNP_STATICLIB -c -o $@ $<
|
||||||
$(CC) $(CFLAGS) -DMINIUPNP_EXPORTS -c -o dll/$@ $<
|
$(CC) $(CFLAGS) -DMINIUPNP_EXPORTS -c -o dll/$@ $<
|
||||||
|
|
||||||
upnpc.o:
|
upnpc.o:
|
||||||
$(CC) $(CFLAGS) -DSTATICLIB -c -o $@ $<
|
$(CC) $(CFLAGS) -DMINIUPNP_STATICLIB -c -o $@ $<
|
||||||
$(CC) $(CFLAGS) -c -o dll/$@ $<
|
$(CC) $(CFLAGS) -c -o dll/$@ $<
|
||||||
|
|
||||||
# --enable-stdcall-fixup
|
# --enable-stdcall-fixup
|
||||||
|
|
0
external/miniupnpc/README
vendored
Executable file → Normal file
0
external/miniupnpc/README
vendored
Executable file → Normal file
0
external/miniupnpc/VERSION
vendored
Executable file → Normal file
0
external/miniupnpc/VERSION
vendored
Executable file → Normal file
0
external/miniupnpc/apiversions.txt
vendored
Executable file → Normal file
0
external/miniupnpc/apiversions.txt
vendored
Executable file → Normal file
0
external/miniupnpc/bsdqueue.h
vendored
Executable file → Normal file
0
external/miniupnpc/bsdqueue.h
vendored
Executable file → Normal file
2
external/miniupnpc/codelength.h
vendored
Executable file → Normal file
2
external/miniupnpc/codelength.h
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: codelength.h,v 1.4 2012/09/27 15:40:29 nanard Exp $ */
|
/* $Id: codelength.h,v 1.3 2011/07/30 13:10:05 nanard Exp $ */
|
||||||
/* Project : miniupnp
|
/* Project : miniupnp
|
||||||
* Author : Thomas BERNARD
|
* Author : Thomas BERNARD
|
||||||
* copyright (c) 2005-2011 Thomas Bernard
|
* copyright (c) 2005-2011 Thomas Bernard
|
||||||
|
|
3
external/miniupnpc/connecthostport.c
vendored
Executable file → Normal file
3
external/miniupnpc/connecthostport.c
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: connecthostport.c,v 1.13 2014/03/31 12:36:36 nanard Exp $ */
|
/* $Id: connecthostport.c,v 1.12 2014/02/05 17:26:46 nanard Exp $ */
|
||||||
/* Project : miniupnp
|
/* Project : miniupnp
|
||||||
* Author : Thomas Bernard
|
* Author : Thomas Bernard
|
||||||
* Copyright (c) 2010-2014 Thomas Bernard
|
* Copyright (c) 2010-2014 Thomas Bernard
|
||||||
|
@ -35,7 +35,6 @@
|
||||||
#ifndef USE_GETHOSTBYNAME
|
#ifndef USE_GETHOSTBYNAME
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/select.h>
|
|
||||||
#endif /* #ifndef USE_GETHOSTBYNAME */
|
#endif /* #ifndef USE_GETHOSTBYNAME */
|
||||||
#endif /* #else _WIN32 */
|
#endif /* #else _WIN32 */
|
||||||
|
|
||||||
|
|
2
external/miniupnpc/connecthostport.h
vendored
Executable file → Normal file
2
external/miniupnpc/connecthostport.h
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: connecthostport.h,v 1.3 2012/09/27 15:42:10 nanard Exp $ */
|
/* $Id: connecthostport.h,v 1.2 2012/06/23 22:32:33 nanard Exp $ */
|
||||||
/* Project: miniupnp
|
/* Project: miniupnp
|
||||||
* http://miniupnp.free.fr/
|
* http://miniupnp.free.fr/
|
||||||
* Author: Thomas Bernard
|
* Author: Thomas Bernard
|
||||||
|
|
10
external/miniupnpc/declspec.h
vendored
Executable file → Normal file
10
external/miniupnpc/declspec.h
vendored
Executable file → Normal file
|
@ -1,19 +1,19 @@
|
||||||
#ifndef DECLSPEC_H_INCLUDED
|
#ifndef DECLSPEC_H_INCLUDED
|
||||||
#define DECLSPEC_H_INCLUDED
|
#define DECLSPEC_H_INCLUDED
|
||||||
|
|
||||||
#if defined(_WIN32) && !defined(STATICLIB)
|
#if defined(_WIN32) && !defined(MINIUPNP_STATICLIB)
|
||||||
/* for windows dll */
|
/* for windows dll */
|
||||||
#ifdef MINIUPNP_EXPORTS
|
#ifdef MINIUPNP_EXPORTS
|
||||||
#define LIBSPEC __declspec(dllexport)
|
#define MINIUPNP_LIBSPEC __declspec(dllexport)
|
||||||
#else
|
#else
|
||||||
#define LIBSPEC __declspec(dllimport)
|
#define MINIUPNP_LIBSPEC __declspec(dllimport)
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#if defined(__GNUC__) && __GNUC__ >= 4
|
#if defined(__GNUC__) && __GNUC__ >= 4
|
||||||
/* fix dynlib for OS X 10.9.2 and Apple LLVM version 5.0 */
|
/* fix dynlib for OS X 10.9.2 and Apple LLVM version 5.0 */
|
||||||
#define LIBSPEC __attribute__ ((visibility ("default")))
|
#define MINIUPNP_LIBSPEC __attribute__ ((visibility ("default")))
|
||||||
#else
|
#else
|
||||||
#define LIBSPEC
|
#define MINIUPNP_LIBSPEC
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
29
external/miniupnpc/igd_desc_parse.c
vendored
Executable file → Normal file
29
external/miniupnpc/igd_desc_parse.c
vendored
Executable file → Normal file
|
@ -1,8 +1,8 @@
|
||||||
/* $Id: igd_desc_parse.c,v 1.14 2011/04/11 09:19:24 nanard Exp $ */
|
/* $Id: igd_desc_parse.c,v 1.15 2014/07/01 13:01:17 nanard Exp $ */
|
||||||
/* Project : miniupnp
|
/* Project : miniupnp
|
||||||
* http://miniupnp.free.fr/
|
* http://miniupnp.free.fr/
|
||||||
* Author : Thomas Bernard
|
* Author : Thomas Bernard
|
||||||
* Copyright (c) 2005-2010 Thomas Bernard
|
* Copyright (c) 2005-2014 Thomas Bernard
|
||||||
* This software is subject to the conditions detailed in the
|
* This software is subject to the conditions detailed in the
|
||||||
* LICENCE file provided in this distribution. */
|
* LICENCE file provided in this distribution. */
|
||||||
|
|
||||||
|
@ -26,6 +26,8 @@ void IGDstartelt(void * d, const char * name, int l)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define COMPARE(str, cstr) (0==memcmp(str, cstr, sizeof(cstr) - 1))
|
||||||
|
|
||||||
/* End element handler :
|
/* End element handler :
|
||||||
* update nesting level counter and update parser state if
|
* update nesting level counter and update parser state if
|
||||||
* service element is parsed */
|
* service element is parsed */
|
||||||
|
@ -36,23 +38,16 @@ void IGDendelt(void * d, const char * name, int l)
|
||||||
/*printf("endelt %2d %.*s\n", datas->level, l, name);*/
|
/*printf("endelt %2d %.*s\n", datas->level, l, name);*/
|
||||||
if( (l==7) && !memcmp(name, "service", l) )
|
if( (l==7) && !memcmp(name, "service", l) )
|
||||||
{
|
{
|
||||||
/*
|
if(COMPARE(datas->tmp.servicetype,
|
||||||
if( datas->state < 1
|
"urn:schemas-upnp-org:service:WANCommonInterfaceConfig:")) {
|
||||||
&& !strcmp(datas->servicetype,
|
|
||||||
// "urn:schemas-upnp-org:service:WANIPConnection:1") )
|
|
||||||
"urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1"))
|
|
||||||
datas->state ++;
|
|
||||||
*/
|
|
||||||
if(0==strcmp(datas->tmp.servicetype,
|
|
||||||
"urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1")) {
|
|
||||||
memcpy(&datas->CIF, &datas->tmp, sizeof(struct IGDdatas_service));
|
memcpy(&datas->CIF, &datas->tmp, sizeof(struct IGDdatas_service));
|
||||||
} else if(0==strcmp(datas->tmp.servicetype,
|
} else if(COMPARE(datas->tmp.servicetype,
|
||||||
"urn:schemas-upnp-org:service:WANIPv6FirewallControl:1")) {
|
"urn:schemas-upnp-org:service:WANIPv6FirewallControl:")) {
|
||||||
memcpy(&datas->IPv6FC, &datas->tmp, sizeof(struct IGDdatas_service));
|
memcpy(&datas->IPv6FC, &datas->tmp, sizeof(struct IGDdatas_service));
|
||||||
} else if(0==strcmp(datas->tmp.servicetype,
|
} else if(COMPARE(datas->tmp.servicetype,
|
||||||
"urn:schemas-upnp-org:service:WANIPConnection:1")
|
"urn:schemas-upnp-org:service:WANIPConnection:")
|
||||||
|| 0==strcmp(datas->tmp.servicetype,
|
|| COMPARE(datas->tmp.servicetype,
|
||||||
"urn:schemas-upnp-org:service:WANPPPConnection:1") ) {
|
"urn:schemas-upnp-org:service:WANPPPConnection:") ) {
|
||||||
if(datas->first.servicetype[0] == '\0') {
|
if(datas->first.servicetype[0] == '\0') {
|
||||||
memcpy(&datas->first, &datas->tmp, sizeof(struct IGDdatas_service));
|
memcpy(&datas->first, &datas->tmp, sizeof(struct IGDdatas_service));
|
||||||
} else {
|
} else {
|
||||||
|
|
2
external/miniupnpc/igd_desc_parse.h
vendored
Executable file → Normal file
2
external/miniupnpc/igd_desc_parse.h
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: igd_desc_parse.h,v 1.11 2012/10/16 16:49:02 nanard Exp $ */
|
/* $Id: igd_desc_parse.h,v 1.10 2011/04/11 09:19:24 nanard Exp $ */
|
||||||
/* Project : miniupnp
|
/* Project : miniupnp
|
||||||
* http://miniupnp.free.fr/
|
* http://miniupnp.free.fr/
|
||||||
* Author : Thomas Bernard
|
* Author : Thomas Bernard
|
||||||
|
|
2
external/miniupnpc/java/.gitignore
vendored
Normal file
2
external/miniupnpc/java/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
*.class
|
||||||
|
*.jar
|
0
external/miniupnpc/java/JavaBridgeTest.java
vendored
Executable file → Normal file
0
external/miniupnpc/java/JavaBridgeTest.java
vendored
Executable file → Normal file
0
external/miniupnpc/man3/miniupnpc.3
vendored
Executable file → Normal file
0
external/miniupnpc/man3/miniupnpc.3
vendored
Executable file → Normal file
0
external/miniupnpc/mingw32make.bat
vendored
Executable file → Normal file
0
external/miniupnpc/mingw32make.bat
vendored
Executable file → Normal file
173
external/miniupnpc/minihttptestserver.c
vendored
Executable file → Normal file
173
external/miniupnpc/minihttptestserver.c
vendored
Executable file → Normal file
|
@ -1,7 +1,7 @@
|
||||||
/* $Id: minihttptestserver.c,v 1.13 2012/05/29 13:03:07 nanard Exp $ */
|
/* $Id: minihttptestserver.c,v 1.16 2014/04/01 15:08:28 nanard Exp $ */
|
||||||
/* Project : miniUPnP
|
/* Project : miniUPnP
|
||||||
* Author : Thomas Bernard
|
* Author : Thomas Bernard
|
||||||
* Copyright (c) 2011-2012 Thomas Bernard
|
* Copyright (c) 2011-2014 Thomas Bernard
|
||||||
* This software is subject to the conditions detailed in the
|
* This software is subject to the conditions detailed in the
|
||||||
* LICENCE file provided in this distribution.
|
* LICENCE file provided in this distribution.
|
||||||
* */
|
* */
|
||||||
|
@ -28,20 +28,20 @@ volatile sig_atomic_t child_to_wait_for = 0;
|
||||||
*/
|
*/
|
||||||
void handle_signal_chld(int sig)
|
void handle_signal_chld(int sig)
|
||||||
{
|
{
|
||||||
printf("handle_signal_chld(%d)\n", sig);
|
(void)sig;
|
||||||
|
/* printf("handle_signal_chld(%d)\n", sig); */
|
||||||
++child_to_wait_for;
|
++child_to_wait_for;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* signal handler for SIGINT (CRTL C)
|
* signal handler for SIGINT (CRTL C)
|
||||||
*/
|
*/
|
||||||
#if 0
|
|
||||||
void handle_signal_int(int sig)
|
void handle_signal_int(int sig)
|
||||||
{
|
{
|
||||||
printf("handle_signal_int(%d)\n", sig);
|
(void)sig;
|
||||||
|
/* printf("handle_signal_int(%d)\n", sig); */
|
||||||
quit = 1;
|
quit = 1;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* build a text/plain content of the specified length
|
* build a text/plain content of the specified length
|
||||||
|
@ -94,7 +94,8 @@ void build_crap(char * p, int n)
|
||||||
* build chunked response.
|
* build chunked response.
|
||||||
* return a malloc'ed buffer
|
* return a malloc'ed buffer
|
||||||
*/
|
*/
|
||||||
char * build_chunked_response(int content_length, int * response_len) {
|
char * build_chunked_response(int content_length, int * response_len)
|
||||||
|
{
|
||||||
char * response_buffer;
|
char * response_buffer;
|
||||||
char * content_buffer;
|
char * content_buffer;
|
||||||
int buffer_length;
|
int buffer_length;
|
||||||
|
@ -141,7 +142,115 @@ char * build_chunked_response(int content_length, int * response_len) {
|
||||||
return response_buffer;
|
return response_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum modes { MODE_INVALID, MODE_CHUNKED, MODE_ADDCRAP, MODE_NORMAL };
|
/* favicon.ico generator */
|
||||||
|
#ifdef OLD_HEADER
|
||||||
|
#define FAVICON_LENGTH (6 + 16 + 12 + 8 + 32 * 4)
|
||||||
|
#else
|
||||||
|
#define FAVICON_LENGTH (6 + 16 + 40 + 8 + 32 * 4)
|
||||||
|
#endif
|
||||||
|
void build_favicon_content(char * p, int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
if(n < FAVICON_LENGTH)
|
||||||
|
return;
|
||||||
|
/* header : 6 bytes */
|
||||||
|
*p++ = 0;
|
||||||
|
*p++ = 0;
|
||||||
|
*p++ = 1; /* type : ICO */
|
||||||
|
*p++ = 0;
|
||||||
|
*p++ = 1; /* number of images in file */
|
||||||
|
*p++ = 0;
|
||||||
|
/* image directory (1 entry) : 16 bytes */
|
||||||
|
*p++ = 16; /* width */
|
||||||
|
*p++ = 16; /* height */
|
||||||
|
*p++ = 2; /* number of colors in the palette. 0 = no palette */
|
||||||
|
*p++ = 0; /* reserved */
|
||||||
|
*p++ = 1; /* color planes */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 1; /* bpp */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
#ifdef OLD_HEADER
|
||||||
|
*p++ = 12 + 8 + 32 * 4; /* bmp size */
|
||||||
|
#else
|
||||||
|
*p++ = 40 + 8 + 32 * 4; /* bmp size */
|
||||||
|
#endif
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 6 + 16; /* bmp offset */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
/* BMP */
|
||||||
|
#ifdef OLD_HEADER
|
||||||
|
/* BITMAPCOREHEADER */
|
||||||
|
*p++ = 12; /* size of this header */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 16; /* width */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 16 * 2; /* height x 2 ! */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 1; /* color planes */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 1; /* bpp */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
#else
|
||||||
|
/* BITMAPINFOHEADER */
|
||||||
|
*p++ = 40; /* size of this header */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 16; /* width */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 16 * 2; /* height x 2 ! */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 1; /* color planes */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
*p++ = 1; /* bpp */
|
||||||
|
*p++ = 0; /* " */
|
||||||
|
/* compression method, image size, ppm x, ppm y */
|
||||||
|
/* colors in the palette ? */
|
||||||
|
/* important colors */
|
||||||
|
for(i = 4 * 6; i > 0; --i)
|
||||||
|
*p++ = 0;
|
||||||
|
#endif
|
||||||
|
/* palette */
|
||||||
|
*p++ = 0; /* b */
|
||||||
|
*p++ = 0; /* g */
|
||||||
|
*p++ = 0; /* r */
|
||||||
|
*p++ = 0; /* reserved */
|
||||||
|
*p++ = 255; /* b */
|
||||||
|
*p++ = 255; /* g */
|
||||||
|
*p++ = 255; /* r */
|
||||||
|
*p++ = 0; /* reserved */
|
||||||
|
/* pixel data */
|
||||||
|
for(i = 16; i > 0; --i) {
|
||||||
|
if(i & 1) {
|
||||||
|
*p++ = 0125;
|
||||||
|
*p++ = 0125;
|
||||||
|
} else {
|
||||||
|
*p++ = 0252;
|
||||||
|
*p++ = 0252;
|
||||||
|
}
|
||||||
|
*p++ = 0;
|
||||||
|
*p++ = 0;
|
||||||
|
}
|
||||||
|
/* Opacity MASK */
|
||||||
|
for(i = 16 * 4; i > 0; --i) {
|
||||||
|
*p++ = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum modes {
|
||||||
|
MODE_INVALID, MODE_CHUNKED, MODE_ADDCRAP, MODE_NORMAL, MODE_FAVICON
|
||||||
|
};
|
||||||
|
|
||||||
const struct {
|
const struct {
|
||||||
const enum modes mode;
|
const enum modes mode;
|
||||||
const char * text;
|
const char * text;
|
||||||
|
@ -149,6 +258,7 @@ const struct {
|
||||||
{MODE_CHUNKED, "chunked"},
|
{MODE_CHUNKED, "chunked"},
|
||||||
{MODE_ADDCRAP, "addcrap"},
|
{MODE_ADDCRAP, "addcrap"},
|
||||||
{MODE_NORMAL, "normal"},
|
{MODE_NORMAL, "normal"},
|
||||||
|
{MODE_FAVICON, "favicon.ico"},
|
||||||
{MODE_INVALID, NULL}
|
{MODE_INVALID, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -201,6 +311,8 @@ void handle_http_connection(int c)
|
||||||
request_buffer + request_len,
|
request_buffer + request_len,
|
||||||
sizeof(request_buffer) - request_len);
|
sizeof(request_buffer) - request_len);
|
||||||
if(n < 0) {
|
if(n < 0) {
|
||||||
|
if(errno == EINTR)
|
||||||
|
continue;
|
||||||
perror("read");
|
perror("read");
|
||||||
return;
|
return;
|
||||||
} else if(n==0) {
|
} else if(n==0) {
|
||||||
|
@ -219,6 +331,7 @@ void handle_http_connection(int c)
|
||||||
}
|
}
|
||||||
if(!headers_found) {
|
if(!headers_found) {
|
||||||
/* error */
|
/* error */
|
||||||
|
printf("no HTTP header found in the request\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
printf("headers :\n%.*s", request_len, request_buffer);
|
printf("headers :\n%.*s", request_len, request_buffer);
|
||||||
|
@ -292,6 +405,8 @@ void handle_http_connection(int c)
|
||||||
case MODE_ADDCRAP:
|
case MODE_ADDCRAP:
|
||||||
response_len = content_length+256;
|
response_len = content_length+256;
|
||||||
response_buffer = malloc(response_len);
|
response_buffer = malloc(response_len);
|
||||||
|
if(!response_buffer)
|
||||||
|
break;
|
||||||
n = snprintf(response_buffer, response_len,
|
n = snprintf(response_buffer, response_len,
|
||||||
"HTTP/1.1 200 OK\r\n"
|
"HTTP/1.1 200 OK\r\n"
|
||||||
"Server: minihttptestserver\r\n"
|
"Server: minihttptestserver\r\n"
|
||||||
|
@ -303,9 +418,27 @@ void handle_http_connection(int c)
|
||||||
build_content(response_buffer + n, content_length);
|
build_content(response_buffer + n, content_length);
|
||||||
build_crap(response_buffer + n + content_length, CRAP_LENGTH);
|
build_crap(response_buffer + n + content_length, CRAP_LENGTH);
|
||||||
break;
|
break;
|
||||||
|
case MODE_FAVICON:
|
||||||
|
content_length = FAVICON_LENGTH;
|
||||||
|
response_len = content_length + 256;
|
||||||
|
response_buffer = malloc(response_len);
|
||||||
|
if(!response_buffer)
|
||||||
|
break;
|
||||||
|
n = snprintf(response_buffer, response_len,
|
||||||
|
"HTTP/1.1 200 OK\r\n"
|
||||||
|
"Server: minihttptestserver\r\n"
|
||||||
|
"Content-Type: image/vnd.microsoft.icon\r\n"
|
||||||
|
"Content-Length: %d\r\n"
|
||||||
|
"\r\n", content_length);
|
||||||
|
/* image/x-icon */
|
||||||
|
build_favicon_content(response_buffer + n, content_length);
|
||||||
|
response_len = content_length + n;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
response_len = content_length+256;
|
response_len = content_length+256;
|
||||||
response_buffer = malloc(response_len);
|
response_buffer = malloc(response_len);
|
||||||
|
if(!response_buffer)
|
||||||
|
break;
|
||||||
n = snprintf(response_buffer, response_len,
|
n = snprintf(response_buffer, response_len,
|
||||||
"HTTP/1.1 200 OK\r\n"
|
"HTTP/1.1 200 OK\r\n"
|
||||||
"Server: minihttptestserver\r\n"
|
"Server: minihttptestserver\r\n"
|
||||||
|
@ -338,6 +471,7 @@ int main(int argc, char * * argv) {
|
||||||
int child = 0;
|
int child = 0;
|
||||||
int status;
|
int status;
|
||||||
const char * expected_file_name = NULL;
|
const char * expected_file_name = NULL;
|
||||||
|
struct sigaction sa;
|
||||||
|
|
||||||
for(i = 1; i < argc; i++) {
|
for(i = 1; i < argc; i++) {
|
||||||
if(argv[i][0] == '-') {
|
if(argv[i][0] == '-') {
|
||||||
|
@ -364,10 +498,21 @@ int main(int argc, char * * argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
signal(SIGCHLD, handle_signal_chld);
|
|
||||||
#if 0
|
memset(&sa, 0, sizeof(struct sigaction));
|
||||||
signal(SIGINT, handle_signal_int);
|
|
||||||
#endif
|
/*signal(SIGCHLD, handle_signal_chld);*/
|
||||||
|
sa.sa_handler = handle_signal_chld;
|
||||||
|
if(sigaction(SIGCHLD, &sa, NULL) < 0) {
|
||||||
|
perror("sigaction");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/*signal(SIGINT, handle_signal_int);*/
|
||||||
|
sa.sa_handler = handle_signal_int;
|
||||||
|
if(sigaction(SIGINT, &sa, NULL) < 0) {
|
||||||
|
perror("sigaction");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
s = socket(ipv6 ? AF_INET6 : AF_INET, SOCK_STREAM, 0);
|
s = socket(ipv6 ? AF_INET6 : AF_INET, SOCK_STREAM, 0);
|
||||||
if(s < 0) {
|
if(s < 0) {
|
||||||
|
@ -442,12 +587,12 @@ int main(int argc, char * * argv) {
|
||||||
}
|
}
|
||||||
--child_to_wait_for;
|
--child_to_wait_for;
|
||||||
}
|
}
|
||||||
/* TODO : add a select() call in order to handle the case
|
|
||||||
* when a signal is caught */
|
|
||||||
client_addrlen = sizeof(struct sockaddr_storage);
|
client_addrlen = sizeof(struct sockaddr_storage);
|
||||||
c = accept(s, (struct sockaddr *)&client_addr,
|
c = accept(s, (struct sockaddr *)&client_addr,
|
||||||
&client_addrlen);
|
&client_addrlen);
|
||||||
if(c < 0) {
|
if(c < 0) {
|
||||||
|
if(errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR)
|
||||||
|
continue;
|
||||||
perror("accept");
|
perror("accept");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
0
external/miniupnpc/minisoap.c
vendored
Executable file → Normal file
0
external/miniupnpc/minisoap.c
vendored
Executable file → Normal file
2
external/miniupnpc/minisoap.h
vendored
Executable file → Normal file
2
external/miniupnpc/minisoap.h
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: minisoap.h,v 1.5 2012/09/27 15:42:10 nanard Exp $ */
|
/* $Id: minisoap.h,v 1.4 2010/04/12 20:39:41 nanard Exp $ */
|
||||||
/* Project : miniupnp
|
/* Project : miniupnp
|
||||||
* Author : Thomas Bernard
|
* Author : Thomas Bernard
|
||||||
* Copyright (c) 2005 Thomas Bernard
|
* Copyright (c) 2005 Thomas Bernard
|
||||||
|
|
4
external/miniupnpc/minissdpc.c
vendored
Executable file → Normal file
4
external/miniupnpc/minissdpc.c
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: minissdpc.c,v 1.16 2012/03/05 19:42:46 nanard Exp $ */
|
/* $Id: minissdpc.c,v 1.15 2012/01/21 13:30:31 nanard Exp $ */
|
||||||
/* Project : miniupnp
|
/* Project : miniupnp
|
||||||
* Web : http://miniupnp.free.fr/
|
* Web : http://miniupnp.free.fr/
|
||||||
* Author : Thomas BERNARD
|
* Author : Thomas BERNARD
|
||||||
|
@ -46,7 +46,7 @@ getDevicesFromMiniSSDPD(const char * devtype, const char * socketpath)
|
||||||
{
|
{
|
||||||
struct UPNPDev * tmp;
|
struct UPNPDev * tmp;
|
||||||
struct UPNPDev * devlist = NULL;
|
struct UPNPDev * devlist = NULL;
|
||||||
unsigned char buffer[2048];
|
unsigned char buffer[4*1024]; /* is that enough ? */
|
||||||
ssize_t n;
|
ssize_t n;
|
||||||
unsigned char * p;
|
unsigned char * p;
|
||||||
unsigned char * url;
|
unsigned char * url;
|
||||||
|
|
2
external/miniupnpc/minissdpc.h
vendored
Executable file → Normal file
2
external/miniupnpc/minissdpc.h
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: minissdpc.h,v 1.2 2012/09/27 15:42:10 nanard Exp $ */
|
/* $Id: minissdpc.h,v 1.1 2007/08/31 15:15:33 nanard Exp $ */
|
||||||
/* Project: miniupnp
|
/* Project: miniupnp
|
||||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||||
* Author: Thomas Bernard
|
* Author: Thomas Bernard
|
||||||
|
|
21
external/miniupnpc/miniupnpc.c
vendored
Executable file → Normal file
21
external/miniupnpc/miniupnpc.c
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: miniupnpc.c,v 1.117 2014/01/31 14:19:13 nanard Exp $ */
|
/* $Id: miniupnpc.c,v 1.116 2014/01/31 14:09:03 nanard Exp $ */
|
||||||
/* Project : miniupnp
|
/* Project : miniupnp
|
||||||
* Web : http://miniupnp.free.fr/
|
* Web : http://miniupnp.free.fr/
|
||||||
* Author : Thomas BERNARD
|
* Author : Thomas BERNARD
|
||||||
|
@ -6,7 +6,7 @@
|
||||||
* This software is subjet to the conditions detailed in the
|
* This software is subjet to the conditions detailed in the
|
||||||
* provided LICENSE file. */
|
* provided LICENSE file. */
|
||||||
#define __EXTENSIONS__ 1
|
#define __EXTENSIONS__ 1
|
||||||
#if !defined(MACOSX) && !defined(__sun)
|
#if !defined(__APPLE__) && !defined(__sun)
|
||||||
#if !defined(_XOPEN_SOURCE) && !defined(__OpenBSD__) && !defined(__NetBSD__)
|
#if !defined(_XOPEN_SOURCE) && !defined(__OpenBSD__) && !defined(__NetBSD__)
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
#define _XOPEN_SOURCE 600
|
#define _XOPEN_SOURCE 600
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(__DragonFly__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(MACOSX) && !defined(_WIN32) && !defined(__CYGWIN__) && !defined(__sun)
|
#if !defined(__DragonFly__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__APPLE__) && !defined(_WIN32) && !defined(__CYGWIN__) && !defined(__sun) && !defined(__GNU__) && !defined(__FreeBSD_kernel__)
|
||||||
#define HAS_IP_MREQN
|
#define HAS_IP_MREQN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -70,6 +70,9 @@
|
||||||
/* Amiga OS specific stuff */
|
/* Amiga OS specific stuff */
|
||||||
#define TIMEVAL struct timeval
|
#define TIMEVAL struct timeval
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __GNU__
|
||||||
|
#define MAXHOSTNAMELEN 64
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined(HAS_IP_MREQN) && defined(NEED_STRUCT_IP_MREQN)
|
#if defined(HAS_IP_MREQN) && defined(NEED_STRUCT_IP_MREQN)
|
||||||
|
@ -106,7 +109,7 @@ struct ip_mreqn
|
||||||
#define SERVICEPREFIX2 'u'
|
#define SERVICEPREFIX2 'u'
|
||||||
|
|
||||||
/* root description parsing */
|
/* root description parsing */
|
||||||
LIBSPEC void parserootdesc(const char * buffer, int bufsize, struct IGDdatas * data)
|
MINIUPNP_LIBSPEC void parserootdesc(const char * buffer, int bufsize, struct IGDdatas * data)
|
||||||
{
|
{
|
||||||
struct xmlparser parser;
|
struct xmlparser parser;
|
||||||
/* xmlparser object */
|
/* xmlparser object */
|
||||||
|
@ -335,7 +338,7 @@ parseMSEARCHReply(const char * reply, int size,
|
||||||
* no devices was found.
|
* no devices was found.
|
||||||
* It is up to the caller to free the chained list
|
* It is up to the caller to free the chained list
|
||||||
* delay is in millisecond (poll) */
|
* delay is in millisecond (poll) */
|
||||||
LIBSPEC struct UPNPDev *
|
MINIUPNP_LIBSPEC struct UPNPDev *
|
||||||
upnpDiscover(int delay, const char * multicastif,
|
upnpDiscover(int delay, const char * multicastif,
|
||||||
const char * minissdpdsock, int sameport,
|
const char * minissdpdsock, int sameport,
|
||||||
int ipv6,
|
int ipv6,
|
||||||
|
@ -718,7 +721,7 @@ upnpDiscover(int delay, const char * multicastif,
|
||||||
|
|
||||||
/* freeUPNPDevlist() should be used to
|
/* freeUPNPDevlist() should be used to
|
||||||
* free the chained list returned by upnpDiscover() */
|
* free the chained list returned by upnpDiscover() */
|
||||||
LIBSPEC void freeUPNPDevlist(struct UPNPDev * devlist)
|
MINIUPNP_LIBSPEC void freeUPNPDevlist(struct UPNPDev * devlist)
|
||||||
{
|
{
|
||||||
struct UPNPDev * next;
|
struct UPNPDev * next;
|
||||||
while(devlist)
|
while(devlist)
|
||||||
|
@ -754,7 +757,7 @@ url_cpy_or_cat(char * dst, const char * src, int n)
|
||||||
|
|
||||||
/* Prepare the Urls for usage...
|
/* Prepare the Urls for usage...
|
||||||
*/
|
*/
|
||||||
LIBSPEC void
|
MINIUPNP_LIBSPEC void
|
||||||
GetUPNPUrls(struct UPNPUrls * urls, struct IGDdatas * data,
|
GetUPNPUrls(struct UPNPUrls * urls, struct IGDdatas * data,
|
||||||
const char * descURL, unsigned int scope_id)
|
const char * descURL, unsigned int scope_id)
|
||||||
{
|
{
|
||||||
|
@ -844,7 +847,7 @@ GetUPNPUrls(struct UPNPUrls * urls, struct IGDdatas * data,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
LIBSPEC void
|
MINIUPNP_LIBSPEC void
|
||||||
FreeUPNPUrls(struct UPNPUrls * urls)
|
FreeUPNPUrls(struct UPNPUrls * urls)
|
||||||
{
|
{
|
||||||
if(!urls)
|
if(!urls)
|
||||||
|
@ -891,7 +894,7 @@ UPNPIGD_IsConnected(struct UPNPUrls * urls, struct IGDdatas * data)
|
||||||
* passed as parameters are set. Donc forget to call FreeUPNPUrls(urls) to
|
* passed as parameters are set. Donc forget to call FreeUPNPUrls(urls) to
|
||||||
* free allocated memory.
|
* free allocated memory.
|
||||||
*/
|
*/
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetValidIGD(struct UPNPDev * devlist,
|
UPNP_GetValidIGD(struct UPNPDev * devlist,
|
||||||
struct UPNPUrls * urls,
|
struct UPNPUrls * urls,
|
||||||
struct IGDdatas * data,
|
struct IGDdatas * data,
|
||||||
|
|
2
external/miniupnpc/miniupnpc.def
vendored
Executable file → Normal file
2
external/miniupnpc/miniupnpc.def
vendored
Executable file → Normal file
|
@ -24,7 +24,9 @@ EXPORTS
|
||||||
UPNP_GetExternalIPAddress
|
UPNP_GetExternalIPAddress
|
||||||
UPNP_GetLinkLayerMaxBitRates
|
UPNP_GetLinkLayerMaxBitRates
|
||||||
UPNP_AddPortMapping
|
UPNP_AddPortMapping
|
||||||
|
UPNP_AddAnyPortMapping
|
||||||
UPNP_DeletePortMapping
|
UPNP_DeletePortMapping
|
||||||
|
UPNP_DeletePortMappingRange
|
||||||
UPNP_GetPortMappingNumberOfEntries
|
UPNP_GetPortMappingNumberOfEntries
|
||||||
UPNP_GetSpecificPortMappingEntry
|
UPNP_GetSpecificPortMappingEntry
|
||||||
UPNP_GetGenericPortMappingEntry
|
UPNP_GetGenericPortMappingEntry
|
||||||
|
|
20
external/miniupnpc/miniupnpc.h
vendored
Executable file → Normal file
20
external/miniupnpc/miniupnpc.h
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: miniupnpc.h,v 1.35 2014/01/31 13:26:34 nanard Exp $ */
|
/* $Id: miniupnpc.h,v 1.34 2014/01/31 13:18:25 nanard Exp $ */
|
||||||
/* Project: miniupnp
|
/* Project: miniupnp
|
||||||
* http://miniupnp.free.fr/
|
* http://miniupnp.free.fr/
|
||||||
* Author: Thomas Bernard
|
* Author: Thomas Bernard
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
#define UPNPDISCOVER_MEMORY_ERROR (-102)
|
#define UPNPDISCOVER_MEMORY_ERROR (-102)
|
||||||
|
|
||||||
/* versions : */
|
/* versions : */
|
||||||
#define MINIUPNPC_VERSION "1.9.20140401"
|
#define MINIUPNPC_VERSION "1.9"
|
||||||
#define MINIUPNPC_API_VERSION 10
|
#define MINIUPNPC_API_VERSION 10
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -54,19 +54,19 @@ struct UPNPDev {
|
||||||
* multicast interface for sending SSDP discover packets.
|
* multicast interface for sending SSDP discover packets.
|
||||||
* If sameport is not null, SSDP packets will be sent from the source port
|
* If sameport is not null, SSDP packets will be sent from the source port
|
||||||
* 1900 (same as destination port) otherwise system assign a source port. */
|
* 1900 (same as destination port) otherwise system assign a source port. */
|
||||||
LIBSPEC struct UPNPDev *
|
MINIUPNP_LIBSPEC struct UPNPDev *
|
||||||
upnpDiscover(int delay, const char * multicastif,
|
upnpDiscover(int delay, const char * multicastif,
|
||||||
const char * minissdpdsock, int sameport,
|
const char * minissdpdsock, int sameport,
|
||||||
int ipv6,
|
int ipv6,
|
||||||
int * error);
|
int * error);
|
||||||
/* freeUPNPDevlist()
|
/* freeUPNPDevlist()
|
||||||
* free list returned by upnpDiscover() */
|
* free list returned by upnpDiscover() */
|
||||||
LIBSPEC void freeUPNPDevlist(struct UPNPDev * devlist);
|
MINIUPNP_LIBSPEC void freeUPNPDevlist(struct UPNPDev * devlist);
|
||||||
|
|
||||||
/* parserootdesc() :
|
/* parserootdesc() :
|
||||||
* parse root XML description of a UPnP device and fill the IGDdatas
|
* parse root XML description of a UPnP device and fill the IGDdatas
|
||||||
* structure. */
|
* structure. */
|
||||||
LIBSPEC void parserootdesc(const char *, int, struct IGDdatas *);
|
MINIUPNP_LIBSPEC void parserootdesc(const char *, int, struct IGDdatas *);
|
||||||
|
|
||||||
/* structure used to get fast access to urls
|
/* structure used to get fast access to urls
|
||||||
* controlURL: controlURL of the WANIPConnection
|
* controlURL: controlURL of the WANIPConnection
|
||||||
|
@ -94,7 +94,7 @@ struct UPNPUrls {
|
||||||
* passed as parameters are set. Donc forget to call FreeUPNPUrls(urls) to
|
* passed as parameters are set. Donc forget to call FreeUPNPUrls(urls) to
|
||||||
* free allocated memory.
|
* free allocated memory.
|
||||||
*/
|
*/
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetValidIGD(struct UPNPDev * devlist,
|
UPNP_GetValidIGD(struct UPNPDev * devlist,
|
||||||
struct UPNPUrls * urls,
|
struct UPNPUrls * urls,
|
||||||
struct IGDdatas * data,
|
struct IGDdatas * data,
|
||||||
|
@ -105,21 +105,21 @@ UPNP_GetValidIGD(struct UPNPDev * devlist,
|
||||||
* return value :
|
* return value :
|
||||||
* 0 - Not ok
|
* 0 - Not ok
|
||||||
* 1 - OK */
|
* 1 - OK */
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetIGDFromUrl(const char * rootdescurl,
|
UPNP_GetIGDFromUrl(const char * rootdescurl,
|
||||||
struct UPNPUrls * urls,
|
struct UPNPUrls * urls,
|
||||||
struct IGDdatas * data,
|
struct IGDdatas * data,
|
||||||
char * lanaddr, int lanaddrlen);
|
char * lanaddr, int lanaddrlen);
|
||||||
|
|
||||||
LIBSPEC void
|
MINIUPNP_LIBSPEC void
|
||||||
GetUPNPUrls(struct UPNPUrls *, struct IGDdatas *,
|
GetUPNPUrls(struct UPNPUrls *, struct IGDdatas *,
|
||||||
const char *, unsigned int);
|
const char *, unsigned int);
|
||||||
|
|
||||||
LIBSPEC void
|
MINIUPNP_LIBSPEC void
|
||||||
FreeUPNPUrls(struct UPNPUrls *);
|
FreeUPNPUrls(struct UPNPUrls *);
|
||||||
|
|
||||||
/* return 0 or 1 */
|
/* return 0 or 1 */
|
||||||
LIBSPEC int UPNPIGD_IsConnected(struct UPNPUrls *, struct IGDdatas *);
|
MINIUPNP_LIBSPEC int UPNPIGD_IsConnected(struct UPNPUrls *, struct IGDdatas *);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
81
external/miniupnpc/miniupnpcmodule.c
vendored
Executable file → Normal file
81
external/miniupnpc/miniupnpcmodule.c
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: miniupnpcmodule.c,v 1.22 2014/01/31 13:18:25 nanard Exp $*/
|
/* $Id: miniupnpcmodule.c,v 1.24 2014/06/10 09:48:11 nanard Exp $*/
|
||||||
/* Project : miniupnp
|
/* Project : miniupnp
|
||||||
* Author : Thomas BERNARD
|
* Author : Thomas BERNARD
|
||||||
* website : http://miniupnp.tuxfamily.org/
|
* website : http://miniupnp.tuxfamily.org/
|
||||||
|
@ -6,7 +6,7 @@
|
||||||
* This software is subjet to the conditions detailed in the
|
* This software is subjet to the conditions detailed in the
|
||||||
* provided LICENCE file. */
|
* provided LICENCE file. */
|
||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
#define STATICLIB
|
#define MINIUPNP_STATICLIB
|
||||||
#include "structmember.h"
|
#include "structmember.h"
|
||||||
#include "miniupnpc.h"
|
#include "miniupnpc.h"
|
||||||
#include "upnpcommands.h"
|
#include "upnpcommands.h"
|
||||||
|
@ -265,6 +265,42 @@ Py_END_ALLOW_THREADS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* AddAnyPortMapping(externalPort, protocol, internalHost, internalPort, desc,
|
||||||
|
* remoteHost)
|
||||||
|
* protocol is 'UDP' or 'TCP' */
|
||||||
|
static PyObject *
|
||||||
|
UPnP_addanyportmapping(UPnPObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
char extPort[6];
|
||||||
|
unsigned short ePort;
|
||||||
|
char inPort[6];
|
||||||
|
unsigned short iPort;
|
||||||
|
char reservedPort[6];
|
||||||
|
const char * proto;
|
||||||
|
const char * host;
|
||||||
|
const char * desc;
|
||||||
|
const char * remoteHost;
|
||||||
|
const char * leaseDuration = "0";
|
||||||
|
int r;
|
||||||
|
if (!PyArg_ParseTuple(args, "HssHss", &ePort, &proto, &host, &iPort, &desc, &remoteHost))
|
||||||
|
return NULL;
|
||||||
|
Py_BEGIN_ALLOW_THREADS
|
||||||
|
sprintf(extPort, "%hu", ePort);
|
||||||
|
sprintf(inPort, "%hu", iPort);
|
||||||
|
r = UPNP_AddAnyPortMapping(self->urls.controlURL, self->data.first.servicetype,
|
||||||
|
extPort, inPort, host, desc, proto,
|
||||||
|
remoteHost, leaseDuration, reservedPort);
|
||||||
|
Py_END_ALLOW_THREADS
|
||||||
|
if(r==UPNPCOMMAND_SUCCESS) {
|
||||||
|
return Py_BuildValue("i", atoi(reservedPort));
|
||||||
|
} else {
|
||||||
|
/* TODO: have our own exception type ! */
|
||||||
|
PyErr_SetString(PyExc_Exception, strupnperror(r));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* DeletePortMapping(extPort, proto, removeHost='')
|
/* DeletePortMapping(extPort, proto, removeHost='')
|
||||||
* proto = 'UDP', 'TCP' */
|
* proto = 'UDP', 'TCP' */
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -291,6 +327,37 @@ Py_END_ALLOW_THREADS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* DeletePortMappingRange(extPort, proto, removeHost='')
|
||||||
|
* proto = 'UDP', 'TCP' */
|
||||||
|
static PyObject *
|
||||||
|
UPnP_deleteportmappingrange(UPnPObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
char extPortStart[6];
|
||||||
|
unsigned short ePortStart;
|
||||||
|
char extPortEnd[6];
|
||||||
|
unsigned short ePortEnd;
|
||||||
|
const char * proto;
|
||||||
|
unsigned char manage;
|
||||||
|
char manageStr[1];
|
||||||
|
int r;
|
||||||
|
if(!PyArg_ParseTuple(args, "HHsb", &ePortStart, &ePortEnd, &proto, &manage))
|
||||||
|
return NULL;
|
||||||
|
Py_BEGIN_ALLOW_THREADS
|
||||||
|
sprintf(extPortStart, "%hu", ePortStart);
|
||||||
|
sprintf(extPortEnd, "%hu", ePortEnd);
|
||||||
|
sprintf(manageStr, "%hhu", manage);
|
||||||
|
r = UPNP_DeletePortMappingRange(self->urls.controlURL, self->data.first.servicetype,
|
||||||
|
extPortStart, extPortEnd, proto, manageStr);
|
||||||
|
Py_END_ALLOW_THREADS
|
||||||
|
if(r==UPNPCOMMAND_SUCCESS) {
|
||||||
|
Py_RETURN_TRUE;
|
||||||
|
} else {
|
||||||
|
/* TODO: have our own exception type ! */
|
||||||
|
PyErr_SetString(PyExc_Exception, strupnperror(r));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
UPnP_getportmappingnumberofentries(UPnPObject *self)
|
UPnP_getportmappingnumberofentries(UPnPObject *self)
|
||||||
{
|
{
|
||||||
|
@ -429,9 +496,15 @@ static PyMethodDef UPnP_methods[] = {
|
||||||
{"addportmapping", (PyCFunction)UPnP_addportmapping, METH_VARARGS,
|
{"addportmapping", (PyCFunction)UPnP_addportmapping, METH_VARARGS,
|
||||||
"add a port mapping"
|
"add a port mapping"
|
||||||
},
|
},
|
||||||
|
{"addanyportmapping", (PyCFunction)UPnP_addanyportmapping, METH_VARARGS,
|
||||||
|
"add a port mapping, IGD to select alternative if necessary"
|
||||||
|
},
|
||||||
{"deleteportmapping", (PyCFunction)UPnP_deleteportmapping, METH_VARARGS,
|
{"deleteportmapping", (PyCFunction)UPnP_deleteportmapping, METH_VARARGS,
|
||||||
"delete a port mapping"
|
"delete a port mapping"
|
||||||
},
|
},
|
||||||
|
{"deleteportmappingrange", (PyCFunction)UPnP_deleteportmappingrange, METH_VARARGS,
|
||||||
|
"delete a range of port mappings"
|
||||||
|
},
|
||||||
{"getportmappingnumberofentries", (PyCFunction)UPnP_getportmappingnumberofentries, METH_NOARGS,
|
{"getportmappingnumberofentries", (PyCFunction)UPnP_getportmappingnumberofentries, METH_NOARGS,
|
||||||
"-- non standard --"
|
"-- non standard --"
|
||||||
},
|
},
|
||||||
|
@ -526,7 +599,11 @@ initminiupnpc(void)
|
||||||
UPnPType.tp_new = PyType_GenericNew;
|
UPnPType.tp_new = PyType_GenericNew;
|
||||||
#endif
|
#endif
|
||||||
if (PyType_Ready(&UPnPType) < 0)
|
if (PyType_Ready(&UPnPType) < 0)
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
return;
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if PY_MAJOR_VERSION >= 3
|
#if PY_MAJOR_VERSION >= 3
|
||||||
m = PyModule_Create(&moduledef);
|
m = PyModule_Create(&moduledef);
|
||||||
|
|
0
external/miniupnpc/miniupnpcstrings.h.cmake
vendored
Executable file → Normal file
0
external/miniupnpc/miniupnpcstrings.h.cmake
vendored
Executable file → Normal file
2
external/miniupnpc/miniupnpcstrings.h.in
vendored
Executable file → Normal file
2
external/miniupnpc/miniupnpcstrings.h.in
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: miniupnpcstrings.h.in,v 1.5 2012/10/16 16:48:26 nanard Exp $ */
|
/* $Id: miniupnpcstrings.h.in,v 1.4 2011/01/04 11:41:53 nanard Exp $ */
|
||||||
/* Project: miniupnp
|
/* Project: miniupnp
|
||||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||||
* Author: Thomas Bernard
|
* Author: Thomas Bernard
|
||||||
|
|
2
external/miniupnpc/miniupnpctypes.h
vendored
Executable file → Normal file
2
external/miniupnpc/miniupnpctypes.h
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: miniupnpctypes.h,v 1.2 2012/09/27 15:42:10 nanard Exp $ */
|
/* $Id: miniupnpctypes.h,v 1.1 2011/02/15 11:10:40 nanard Exp $ */
|
||||||
/* Miniupnp project : http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org
|
/* Miniupnp project : http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org
|
||||||
* Author : Thomas Bernard
|
* Author : Thomas Bernard
|
||||||
* Copyright (c) 2011 Thomas Bernard
|
* Copyright (c) 2011 Thomas Bernard
|
||||||
|
|
10
external/miniupnpc/miniwget.c
vendored
Executable file → Normal file
10
external/miniupnpc/miniwget.c
vendored
Executable file → Normal file
|
@ -15,7 +15,6 @@
|
||||||
#include <ws2tcpip.h>
|
#include <ws2tcpip.h>
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#define MAXHOSTNAMELEN 64
|
#define MAXHOSTNAMELEN 64
|
||||||
#define MIN(x,y) (((x)<(y))?(x):(y))
|
|
||||||
#define snprintf _snprintf
|
#define snprintf _snprintf
|
||||||
#define socklen_t int
|
#define socklen_t int
|
||||||
#ifndef strncasecmp
|
#ifndef strncasecmp
|
||||||
|
@ -40,9 +39,14 @@
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#define closesocket close
|
#define closesocket close
|
||||||
#endif /* #else _WIN32 */
|
#endif /* #else _WIN32 */
|
||||||
#if defined(__sun) || defined(sun)
|
#ifdef __GNU__
|
||||||
|
#define MAXHOSTNAMELEN 64
|
||||||
|
#endif /* __GNU__ */
|
||||||
|
|
||||||
|
#ifndef MIN
|
||||||
#define MIN(x,y) (((x)<(y))?(x):(y))
|
#define MIN(x,y) (((x)<(y))?(x):(y))
|
||||||
#endif
|
#endif /* MIN */
|
||||||
|
|
||||||
|
|
||||||
#include "miniupnpcstrings.h"
|
#include "miniupnpcstrings.h"
|
||||||
#include "miniwget.h"
|
#include "miniwget.h"
|
||||||
|
|
8
external/miniupnpc/miniwget.h
vendored
Executable file → Normal file
8
external/miniupnpc/miniwget.h
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: miniwget.h,v 1.8 2012/09/27 15:42:10 nanard Exp $ */
|
/* $Id: miniwget.h,v 1.7 2012/06/23 22:35:59 nanard Exp $ */
|
||||||
/* Project : miniupnp
|
/* Project : miniupnp
|
||||||
* Author : Thomas Bernard
|
* Author : Thomas Bernard
|
||||||
* Copyright (c) 2005-2012 Thomas Bernard
|
* Copyright (c) 2005-2012 Thomas Bernard
|
||||||
|
@ -14,11 +14,11 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LIBSPEC void * getHTTPResponse(int s, int * size);
|
MINIUPNP_LIBSPEC void * getHTTPResponse(int s, int * size);
|
||||||
|
|
||||||
LIBSPEC void * miniwget(const char *, int *, unsigned int);
|
MINIUPNP_LIBSPEC void * miniwget(const char *, int *, unsigned int);
|
||||||
|
|
||||||
LIBSPEC void * miniwget_getaddr(const char *, int *, char *, int, unsigned int);
|
MINIUPNP_LIBSPEC void * miniwget_getaddr(const char *, int *, char *, int, unsigned int);
|
||||||
|
|
||||||
int parseURL(const char *, char *, unsigned short *, char * *, unsigned int *);
|
int parseURL(const char *, char *, unsigned short *, char * *, unsigned int *);
|
||||||
|
|
||||||
|
|
2
external/miniupnpc/minixml.c
vendored
Executable file → Normal file
2
external/miniupnpc/minixml.c
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: minixml.c,v 1.11 2014/02/03 15:54:12 nanard Exp $ */
|
/* $Id: minixml.c,v 1.10 2012/03/05 19:42:47 nanard Exp $ */
|
||||||
/* minixml.c : the minimum size a xml parser can be ! */
|
/* minixml.c : the minimum size a xml parser can be ! */
|
||||||
/* Project : miniupnp
|
/* Project : miniupnp
|
||||||
* webpage: http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
* webpage: http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||||
|
|
2
external/miniupnpc/minixml.h
vendored
Executable file → Normal file
2
external/miniupnpc/minixml.h
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: minixml.h,v 1.7 2012/09/27 15:42:10 nanard Exp $ */
|
/* $Id: minixml.h,v 1.6 2006/11/30 11:47:21 nanard Exp $ */
|
||||||
/* minimal xml parser
|
/* minimal xml parser
|
||||||
*
|
*
|
||||||
* Project : miniupnp
|
* Project : miniupnp
|
||||||
|
|
0
external/miniupnpc/minixmlvalid.c
vendored
Executable file → Normal file
0
external/miniupnpc/minixmlvalid.c
vendored
Executable file → Normal file
0
external/miniupnpc/msvc/miniupnpc.sln
vendored
Executable file → Normal file
0
external/miniupnpc/msvc/miniupnpc.sln
vendored
Executable file → Normal file
4
external/miniupnpc/msvc/miniupnpc.vcproj
vendored
Executable file → Normal file
4
external/miniupnpc/msvc/miniupnpc.vcproj
vendored
Executable file → Normal file
|
@ -41,7 +41,7 @@
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;WIN32;STATICLIB;DEBUG"
|
PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;MINIUPNP_STATICLIB;DEBUG"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
|
@ -104,7 +104,7 @@
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="2"
|
Optimization="2"
|
||||||
EnableIntrinsicFunctions="true"
|
EnableIntrinsicFunctions="true"
|
||||||
PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;WIN32;STATICLIB"
|
PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;MINIUPNP_STATICLIB"
|
||||||
RuntimeLibrary="2"
|
RuntimeLibrary="2"
|
||||||
EnableFunctionLevelLinking="true"
|
EnableFunctionLevelLinking="true"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
|
|
4
external/miniupnpc/msvc/upnpc-static.vcproj
vendored
Executable file → Normal file
4
external/miniupnpc/msvc/upnpc-static.vcproj
vendored
Executable file → Normal file
|
@ -41,7 +41,7 @@
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;STATICLIB;DEBUG;_CRT_SECURE_NO_WARNINGS"
|
PreprocessorDefinitions="_DEBUG;_CONSOLE;MINIUPNP_STATICLIB;DEBUG;_CRT_SECURE_NO_WARNINGS"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
|
@ -115,7 +115,7 @@
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="2"
|
Optimization="2"
|
||||||
EnableIntrinsicFunctions="true"
|
EnableIntrinsicFunctions="true"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;STATICLIB"
|
PreprocessorDefinitions="NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;MINIUPNP_STATICLIB"
|
||||||
RuntimeLibrary="2"
|
RuntimeLibrary="2"
|
||||||
EnableFunctionLevelLinking="true"
|
EnableFunctionLevelLinking="true"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
|
|
0
external/miniupnpc/portlistingparse.c
vendored
Executable file → Normal file
0
external/miniupnpc/portlistingparse.c
vendored
Executable file → Normal file
6
external/miniupnpc/portlistingparse.h
vendored
Executable file → Normal file
6
external/miniupnpc/portlistingparse.h
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: portlistingparse.h,v 1.7 2012/09/27 15:42:10 nanard Exp $ */
|
/* $Id: portlistingparse.h,v 1.5 2012/01/21 13:30:33 nanard Exp $ */
|
||||||
/* MiniUPnP project
|
/* MiniUPnP project
|
||||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||||
* (c) 2011-2012 Thomas Bernard
|
* (c) 2011-2012 Thomas Bernard
|
||||||
|
@ -57,11 +57,11 @@ struct PortMappingParserData {
|
||||||
portMappingElt curelt;
|
portMappingElt curelt;
|
||||||
};
|
};
|
||||||
|
|
||||||
LIBSPEC void
|
MINIUPNP_LIBSPEC void
|
||||||
ParsePortListing(const char * buffer, int bufsize,
|
ParsePortListing(const char * buffer, int bufsize,
|
||||||
struct PortMappingParserData * pdata);
|
struct PortMappingParserData * pdata);
|
||||||
|
|
||||||
LIBSPEC void
|
MINIUPNP_LIBSPEC void
|
||||||
FreePortListing(struct PortMappingParserData * pdata);
|
FreePortListing(struct PortMappingParserData * pdata);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
7
external/miniupnpc/receivedata.c
vendored
Executable file → Normal file
7
external/miniupnpc/receivedata.c
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: receivedata.c,v 1.5 2013/10/07 09:48:36 nanard Exp $ */
|
/* $Id: receivedata.c,v 1.4 2012/06/23 22:34:47 nanard Exp $ */
|
||||||
/* Project : miniupnp
|
/* Project : miniupnp
|
||||||
* Website : http://miniupnp.free.fr/
|
* Website : http://miniupnp.free.fr/
|
||||||
* Author : Thomas Bernard
|
* Author : Thomas Bernard
|
||||||
|
@ -40,12 +40,7 @@ receivedata(int socket,
|
||||||
int timeout, unsigned int * scope_id)
|
int timeout, unsigned int * scope_id)
|
||||||
{
|
{
|
||||||
#if MINIUPNPC_GET_SRC_ADDR
|
#if MINIUPNPC_GET_SRC_ADDR
|
||||||
#ifdef DEBUG
|
|
||||||
/* to shut up valgrind about uninit value */
|
|
||||||
struct sockaddr_storage src_addr = {0};
|
|
||||||
#else
|
|
||||||
struct sockaddr_storage src_addr;
|
struct sockaddr_storage src_addr;
|
||||||
#endif
|
|
||||||
socklen_t src_addr_len = sizeof(src_addr);
|
socklen_t src_addr_len = sizeof(src_addr);
|
||||||
#endif
|
#endif
|
||||||
int n;
|
int n;
|
||||||
|
|
2
external/miniupnpc/receivedata.h
vendored
Executable file → Normal file
2
external/miniupnpc/receivedata.h
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: receivedata.h,v 1.4 2012/09/27 15:42:10 nanard Exp $ */
|
/* $Id: receivedata.h,v 1.3 2012/06/23 22:34:47 nanard Exp $ */
|
||||||
/* Project: miniupnp
|
/* Project: miniupnp
|
||||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||||
* Author: Thomas Bernard
|
* Author: Thomas Bernard
|
||||||
|
|
10
external/miniupnpc/setup.py
vendored
Executable file → Normal file
10
external/miniupnpc/setup.py
vendored
Executable file → Normal file
|
@ -1,6 +1,6 @@
|
||||||
#! /usr/bin/python
|
#! /usr/bin/python
|
||||||
# $Id: setup.py,v 1.9 2012/05/23 08:50:10 nanard Exp $
|
# $Id: setup.py,v 1.9 2012/05/23 08:50:10 nanard Exp $
|
||||||
# the MiniUPnP Project (c) 2007-2012 Thomas Bernard
|
# the MiniUPnP Project (c) 2007-2014 Thomas Bernard
|
||||||
# http://miniupnp.tuxfamily.org/ or http://miniupnp.free.fr/
|
# http://miniupnp.tuxfamily.org/ or http://miniupnp.free.fr/
|
||||||
#
|
#
|
||||||
# python script to build the miniupnpc module under unix
|
# python script to build the miniupnpc module under unix
|
||||||
|
@ -10,7 +10,13 @@ from distutils.core import setup, Extension
|
||||||
from distutils import sysconfig
|
from distutils import sysconfig
|
||||||
sysconfig.get_config_vars()["OPT"] = ''
|
sysconfig.get_config_vars()["OPT"] = ''
|
||||||
sysconfig.get_config_vars()["CFLAGS"] = ''
|
sysconfig.get_config_vars()["CFLAGS"] = ''
|
||||||
setup(name="miniupnpc", version="1.7",
|
setup(name="miniupnpc",
|
||||||
|
version=open('VERSION').read().strip(),
|
||||||
|
author='Thomas BERNARD',
|
||||||
|
author_email='miniupnp@free.fr',
|
||||||
|
license=open('LICENSE').read(),
|
||||||
|
url='http://miniupnp.free.fr/',
|
||||||
|
description='miniUPnP client',
|
||||||
ext_modules=[
|
ext_modules=[
|
||||||
Extension(name="miniupnpc", sources=["miniupnpcmodule.c"],
|
Extension(name="miniupnpc", sources=["miniupnpcmodule.c"],
|
||||||
extra_objects=["libminiupnpc.a"])
|
extra_objects=["libminiupnpc.a"])
|
||||||
|
|
10
external/miniupnpc/setupmingw32.py
vendored
Executable file → Normal file
10
external/miniupnpc/setupmingw32.py
vendored
Executable file → Normal file
|
@ -1,6 +1,6 @@
|
||||||
#! /usr/bin/python
|
#! /usr/bin/python
|
||||||
# $Id: setupmingw32.py,v 1.8 2012/05/23 08:50:10 nanard Exp $
|
# $Id: setupmingw32.py,v 1.8 2012/05/23 08:50:10 nanard Exp $
|
||||||
# the MiniUPnP Project (c) 2007-2012 Thomas Bernard
|
# the MiniUPnP Project (c) 2007-2014 Thomas Bernard
|
||||||
# http://miniupnp.tuxfamily.org/ or http://miniupnp.free.fr/
|
# http://miniupnp.tuxfamily.org/ or http://miniupnp.free.fr/
|
||||||
#
|
#
|
||||||
# python script to build the miniupnpc module under windows (using mingw32)
|
# python script to build the miniupnpc module under windows (using mingw32)
|
||||||
|
@ -9,7 +9,13 @@ from distutils.core import setup, Extension
|
||||||
from distutils import sysconfig
|
from distutils import sysconfig
|
||||||
sysconfig.get_config_vars()["OPT"] = ''
|
sysconfig.get_config_vars()["OPT"] = ''
|
||||||
sysconfig.get_config_vars()["CFLAGS"] = ''
|
sysconfig.get_config_vars()["CFLAGS"] = ''
|
||||||
setup(name="miniupnpc", version="1.7",
|
setup(name="miniupnpc",
|
||||||
|
version=open('VERSION').read().strip(),
|
||||||
|
author='Thomas BERNARD',
|
||||||
|
author_email='miniupnp@free.fr',
|
||||||
|
license=open('LICENSE').read(),
|
||||||
|
url='http://miniupnp.free.fr/',
|
||||||
|
description='miniUPnP client',
|
||||||
ext_modules=[
|
ext_modules=[
|
||||||
Extension(name="miniupnpc", sources=["miniupnpcmodule.c"],
|
Extension(name="miniupnpc", sources=["miniupnpcmodule.c"],
|
||||||
libraries=["ws2_32", "iphlpapi"],
|
libraries=["ws2_32", "iphlpapi"],
|
||||||
|
|
0
external/miniupnpc/testigddescparse.c
vendored
Executable file → Normal file
0
external/miniupnpc/testigddescparse.c
vendored
Executable file → Normal file
0
external/miniupnpc/testminiwget.c
vendored
Executable file → Normal file
0
external/miniupnpc/testminiwget.c
vendored
Executable file → Normal file
0
external/miniupnpc/testminixml.c
vendored
Executable file → Normal file
0
external/miniupnpc/testminixml.c
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/DeletePortMapping.namevalue
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/DeletePortMapping.namevalue
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/DeletePortMapping.xml
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/DeletePortMapping.xml
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/GetExternalIPAddress.namevalue
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/GetExternalIPAddress.namevalue
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/GetExternalIPAddress.xml
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/GetExternalIPAddress.xml
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/GetSpecificPortMappingEntryReq.namevalue
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/GetSpecificPortMappingEntryReq.namevalue
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/GetSpecificPortMappingEntryReq.xml
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/GetSpecificPortMappingEntryReq.xml
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/GetSpecificPortMappingEntryResp.namevalue
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/GetSpecificPortMappingEntryResp.namevalue
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/GetSpecificPortMappingEntryResp.xml
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/GetSpecificPortMappingEntryResp.xml
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/SetDefaultConnectionService.namevalue
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/SetDefaultConnectionService.namevalue
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/SetDefaultConnectionService.xml
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/SetDefaultConnectionService.xml
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/readme.txt
vendored
Executable file → Normal file
0
external/miniupnpc/testreplyparse/readme.txt
vendored
Executable file → Normal file
0
external/miniupnpc/testupnpreplyparse.c
vendored
Executable file → Normal file
0
external/miniupnpc/testupnpreplyparse.c
vendored
Executable file → Normal file
89
external/miniupnpc/upnpc.c
vendored
Executable file → Normal file
89
external/miniupnpc/upnpc.c
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: upnpc.c,v 1.102 2014/02/05 17:27:14 nanard Exp $ */
|
/* $Id: upnpc.c,v 1.104 2014/09/11 14:13:30 nanard Exp $ */
|
||||||
/* Project : miniupnp
|
/* Project : miniupnp
|
||||||
* Author : Thomas Bernard
|
* Author : Thomas Bernard
|
||||||
* Copyright (c) 2005-2014 Thomas Bernard
|
* Copyright (c) 2005-2014 Thomas Bernard
|
||||||
|
@ -229,11 +229,13 @@ static void SetRedirectAndTest(struct UPNPUrls * urls,
|
||||||
const char * eport,
|
const char * eport,
|
||||||
const char * proto,
|
const char * proto,
|
||||||
const char * leaseDuration,
|
const char * leaseDuration,
|
||||||
const char * description)
|
const char * description,
|
||||||
|
int addAny)
|
||||||
{
|
{
|
||||||
char externalIPAddress[40];
|
char externalIPAddress[40];
|
||||||
char intClient[40];
|
char intClient[40];
|
||||||
char intPort[6];
|
char intPort[6];
|
||||||
|
char reservedPort[6];
|
||||||
char duration[16];
|
char duration[16];
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -249,20 +251,31 @@ static void SetRedirectAndTest(struct UPNPUrls * urls,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
UPNP_GetExternalIPAddress(urls->controlURL,
|
r = UPNP_GetExternalIPAddress(urls->controlURL,
|
||||||
data->first.servicetype,
|
data->first.servicetype,
|
||||||
externalIPAddress);
|
externalIPAddress);
|
||||||
if(externalIPAddress[0])
|
if(r!=UPNPCOMMAND_SUCCESS)
|
||||||
printf("ExternalIPAddress = %s\n", externalIPAddress);
|
|
||||||
else
|
|
||||||
printf("GetExternalIPAddress failed.\n");
|
printf("GetExternalIPAddress failed.\n");
|
||||||
|
else
|
||||||
|
printf("ExternalIPAddress = %s\n", externalIPAddress);
|
||||||
|
|
||||||
|
if (addAny) {
|
||||||
|
r = UPNP_AddAnyPortMapping(urls->controlURL, data->first.servicetype,
|
||||||
|
eport, iport, iaddr, description,
|
||||||
|
proto, 0, leaseDuration, reservedPort);
|
||||||
|
if(r==UPNPCOMMAND_SUCCESS)
|
||||||
|
eport = reservedPort;
|
||||||
|
else
|
||||||
|
printf("AddAnyPortMapping(%s, %s, %s) failed with code %d (%s)\n",
|
||||||
|
eport, iport, iaddr, r, strupnperror(r));
|
||||||
|
} else {
|
||||||
r = UPNP_AddPortMapping(urls->controlURL, data->first.servicetype,
|
r = UPNP_AddPortMapping(urls->controlURL, data->first.servicetype,
|
||||||
eport, iport, iaddr, description,
|
eport, iport, iaddr, description,
|
||||||
proto, 0, leaseDuration);
|
proto, 0, leaseDuration);
|
||||||
if(r!=UPNPCOMMAND_SUCCESS)
|
if(r!=UPNPCOMMAND_SUCCESS)
|
||||||
printf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n",
|
printf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n",
|
||||||
eport, iport, iaddr, r, strupnperror(r));
|
eport, iport, iaddr, r, strupnperror(r));
|
||||||
|
}
|
||||||
|
|
||||||
r = UPNP_GetSpecificPortMappingEntry(urls->controlURL,
|
r = UPNP_GetSpecificPortMappingEntry(urls->controlURL,
|
||||||
data->first.servicetype,
|
data->first.servicetype,
|
||||||
|
@ -272,8 +285,7 @@ static void SetRedirectAndTest(struct UPNPUrls * urls,
|
||||||
if(r!=UPNPCOMMAND_SUCCESS)
|
if(r!=UPNPCOMMAND_SUCCESS)
|
||||||
printf("GetSpecificPortMappingEntry() failed with code %d (%s)\n",
|
printf("GetSpecificPortMappingEntry() failed with code %d (%s)\n",
|
||||||
r, strupnperror(r));
|
r, strupnperror(r));
|
||||||
|
else {
|
||||||
if(intClient[0]) {
|
|
||||||
printf("InternalIP:Port = %s:%s\n", intClient, intPort);
|
printf("InternalIP:Port = %s:%s\n", intClient, intPort);
|
||||||
printf("external %s:%s %s is redirected to internal %s:%s (duration=%s)\n",
|
printf("external %s:%s %s is redirected to internal %s:%s (duration=%s)\n",
|
||||||
externalIPAddress, eport, proto, intClient, intPort, duration);
|
externalIPAddress, eport, proto, intClient, intPort, duration);
|
||||||
|
@ -284,7 +296,8 @@ static void
|
||||||
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,
|
||||||
|
const char * remoteHost)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
if(!proto || !eport)
|
if(!proto || !eport)
|
||||||
|
@ -298,10 +311,36 @@ RemoveRedirect(struct UPNPUrls * urls,
|
||||||
fprintf(stderr, "protocol invalid\n");
|
fprintf(stderr, "protocol invalid\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
r = UPNP_DeletePortMapping(urls->controlURL, data->first.servicetype, eport, proto, 0);
|
r = UPNP_DeletePortMapping(urls->controlURL, data->first.servicetype, eport, proto, remoteHost);
|
||||||
printf("UPNP_DeletePortMapping() returned : %d\n", r);
|
printf("UPNP_DeletePortMapping() returned : %d\n", r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
RemoveRedirectRange(struct UPNPUrls * urls,
|
||||||
|
struct IGDdatas * data,
|
||||||
|
const char * ePortStart, char const * ePortEnd,
|
||||||
|
const char * proto, const char * manage)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
|
||||||
|
if (!manage)
|
||||||
|
manage = "0";
|
||||||
|
|
||||||
|
if(!proto || !ePortStart || !ePortEnd)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "invalid arguments\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
proto = protofix(proto);
|
||||||
|
if(!proto)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "protocol invalid\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
r = UPNP_DeletePortMappingRange(urls->controlURL, data->first.servicetype, ePortStart, ePortEnd, proto, manage);
|
||||||
|
printf("UPNP_DeletePortMappingRange() returned : %d\n", r);
|
||||||
|
}
|
||||||
|
|
||||||
/* IGD:2, functions for service WANIPv6FirewallControl:1 */
|
/* IGD:2, functions for service WANIPv6FirewallControl:1 */
|
||||||
static void GetFirewallStatus(struct UPNPUrls * urls, struct IGDdatas * data)
|
static void GetFirewallStatus(struct UPNPUrls * urls, struct IGDdatas * data)
|
||||||
{
|
{
|
||||||
|
@ -546,10 +585,12 @@ int main(int argc, char ** argv)
|
||||||
|| (command == 'D' && commandargc<1))
|
|| (command == 'D' && commandargc<1))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage :\t%s [options] -a ip port external_port protocol [duration]\n\t\tAdd port redirection\n", argv[0]);
|
fprintf(stderr, "Usage :\t%s [options] -a ip port external_port protocol [duration]\n\t\tAdd port redirection\n", argv[0]);
|
||||||
fprintf(stderr, " \t%s [options] -d external_port protocol [port2 protocol2] [...]\n\t\tDelete port redirection\n", argv[0]);
|
fprintf(stderr, " \t%s [options] -d external_port protocol <remote host>\n\t\tDelete port redirection\n", argv[0]);
|
||||||
fprintf(stderr, " \t%s [options] -s\n\t\tGet Connection status\n", argv[0]);
|
fprintf(stderr, " \t%s [options] -s\n\t\tGet Connection status\n", argv[0]);
|
||||||
fprintf(stderr, " \t%s [options] -l\n\t\tList redirections\n", argv[0]);
|
fprintf(stderr, " \t%s [options] -l\n\t\tList redirections\n", argv[0]);
|
||||||
fprintf(stderr, " \t%s [options] -L\n\t\tList redirections (using GetListOfPortMappings, IGD v2)\n", argv[0]);
|
fprintf(stderr, " \t%s [options] -L\n\t\tList redirections (using GetListOfPortMappings (for IGD:2 only)\n", argv[0]);
|
||||||
|
fprintf(stderr, " \t%s [options] -n ip port external_port protocol [duration]\n\t\tAdd (any) port redirection allowing IGD to use alternative external_port (for IGD:2 only)\n", argv[0]);
|
||||||
|
fprintf(stderr, " \t%s [options] -N external_port_start external_port_end protocol [manage]\n\t\tDelete range of port redirections (for IGD:2 only)\n", argv[0]);
|
||||||
fprintf(stderr, " \t%s [options] -r port1 protocol1 [port2 protocol2] [...]\n\t\tAdd all redirections to the current host\n", argv[0]);
|
fprintf(stderr, " \t%s [options] -r port1 protocol1 [port2 protocol2] [...]\n\t\tAdd all redirections to the current host\n", argv[0]);
|
||||||
fprintf(stderr, " \t%s [options] -A remote_ip remote_port internal_ip internal_port protocol lease_time\n\t\tAdd Pinhole (for IGD:2 only)\n", argv[0]);
|
fprintf(stderr, " \t%s [options] -A remote_ip remote_port internal_ip internal_port protocol lease_time\n\t\tAdd Pinhole (for IGD:2 only)\n", argv[0]);
|
||||||
fprintf(stderr, " \t%s [options] -U uniqueID new_lease_time\n\t\tUpdate Pinhole (for IGD:2 only)\n", argv[0]);
|
fprintf(stderr, " \t%s [options] -U uniqueID new_lease_time\n\t\tUpdate Pinhole (for IGD:2 only)\n", argv[0]);
|
||||||
|
@ -634,13 +675,25 @@ int main(int argc, char ** argv)
|
||||||
commandargv[0], commandargv[1],
|
commandargv[0], commandargv[1],
|
||||||
commandargv[2], commandargv[3],
|
commandargv[2], commandargv[3],
|
||||||
(commandargc > 4)?commandargv[4]:"0",
|
(commandargc > 4)?commandargv[4]:"0",
|
||||||
description);
|
description, 0);
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
for(i=0; i<commandargc; i+=2)
|
RemoveRedirect(&urls, &data, commandargv[0], commandargv[1],
|
||||||
{
|
commandargc > 2 ? commandargv[2] : NULL);
|
||||||
RemoveRedirect(&urls, &data, commandargv[i], commandargv[i+1]);
|
break;
|
||||||
}
|
case 'n': /* aNy */
|
||||||
|
SetRedirectAndTest(&urls, &data,
|
||||||
|
commandargv[0], commandargv[1],
|
||||||
|
commandargv[2], commandargv[3],
|
||||||
|
(commandargc > 4)?commandargv[4]:"0",
|
||||||
|
description, 1);
|
||||||
|
break;
|
||||||
|
case 'N':
|
||||||
|
if (commandargc < 3)
|
||||||
|
fprintf(stderr, "too few arguments\n");
|
||||||
|
|
||||||
|
RemoveRedirectRange(&urls, &data, commandargv[0], commandargv[1], commandargv[2],
|
||||||
|
commandargc > 3 ? commandargv[3] : NULL);
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
GetConnectionStatus(&urls, &data);
|
GetConnectionStatus(&urls, &data);
|
||||||
|
@ -652,7 +705,7 @@ int main(int argc, char ** argv)
|
||||||
SetRedirectAndTest(&urls, &data,
|
SetRedirectAndTest(&urls, &data,
|
||||||
lanaddr, commandargv[i],
|
lanaddr, commandargv[i],
|
||||||
commandargv[i], commandargv[i+1], "0",
|
commandargv[i], commandargv[i+1], "0",
|
||||||
description);
|
description, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'A':
|
case 'A':
|
||||||
|
|
155
external/miniupnpc/upnpcommands.c
vendored
Executable file → Normal file
155
external/miniupnpc/upnpcommands.c
vendored
Executable file → Normal file
|
@ -20,7 +20,7 @@ my_atoui(const char * s)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* */
|
* */
|
||||||
LIBSPEC UNSIGNED_INTEGER
|
MINIUPNP_LIBSPEC UNSIGNED_INTEGER
|
||||||
UPNP_GetTotalBytesSent(const char * controlURL,
|
UPNP_GetTotalBytesSent(const char * controlURL,
|
||||||
const char * servicetype)
|
const char * servicetype)
|
||||||
{
|
{
|
||||||
|
@ -44,7 +44,7 @@ UPNP_GetTotalBytesSent(const char * controlURL,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* */
|
* */
|
||||||
LIBSPEC UNSIGNED_INTEGER
|
MINIUPNP_LIBSPEC UNSIGNED_INTEGER
|
||||||
UPNP_GetTotalBytesReceived(const char * controlURL,
|
UPNP_GetTotalBytesReceived(const char * controlURL,
|
||||||
const char * servicetype)
|
const char * servicetype)
|
||||||
{
|
{
|
||||||
|
@ -68,7 +68,7 @@ UPNP_GetTotalBytesReceived(const char * controlURL,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* */
|
* */
|
||||||
LIBSPEC UNSIGNED_INTEGER
|
MINIUPNP_LIBSPEC UNSIGNED_INTEGER
|
||||||
UPNP_GetTotalPacketsSent(const char * controlURL,
|
UPNP_GetTotalPacketsSent(const char * controlURL,
|
||||||
const char * servicetype)
|
const char * servicetype)
|
||||||
{
|
{
|
||||||
|
@ -92,7 +92,7 @@ UPNP_GetTotalPacketsSent(const char * controlURL,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* */
|
* */
|
||||||
LIBSPEC UNSIGNED_INTEGER
|
MINIUPNP_LIBSPEC UNSIGNED_INTEGER
|
||||||
UPNP_GetTotalPacketsReceived(const char * controlURL,
|
UPNP_GetTotalPacketsReceived(const char * controlURL,
|
||||||
const char * servicetype)
|
const char * servicetype)
|
||||||
{
|
{
|
||||||
|
@ -116,7 +116,7 @@ UPNP_GetTotalPacketsReceived(const char * controlURL,
|
||||||
|
|
||||||
/* UPNP_GetStatusInfo() call the corresponding UPNP method
|
/* UPNP_GetStatusInfo() call the corresponding UPNP method
|
||||||
* returns the current status and uptime */
|
* returns the current status and uptime */
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetStatusInfo(const char * controlURL,
|
UPNP_GetStatusInfo(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
char * status,
|
char * status,
|
||||||
|
@ -181,7 +181,7 @@ UPNP_GetStatusInfo(const char * controlURL,
|
||||||
|
|
||||||
/* UPNP_GetConnectionTypeInfo() call the corresponding UPNP method
|
/* UPNP_GetConnectionTypeInfo() call the corresponding UPNP method
|
||||||
* returns the connection type */
|
* returns the connection type */
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetConnectionTypeInfo(const char * controlURL,
|
UPNP_GetConnectionTypeInfo(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
char * connectionType)
|
char * connectionType)
|
||||||
|
@ -224,7 +224,7 @@ UPNP_GetConnectionTypeInfo(const char * controlURL,
|
||||||
* One of the values can be null
|
* One of the values can be null
|
||||||
* Note : GetLinkLayerMaxBitRates belongs to WANPPPConnection:1 only
|
* Note : GetLinkLayerMaxBitRates belongs to WANPPPConnection:1 only
|
||||||
* We can use the GetCommonLinkProperties from WANCommonInterfaceConfig:1 */
|
* We can use the GetCommonLinkProperties from WANCommonInterfaceConfig:1 */
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetLinkLayerMaxBitRates(const char * controlURL,
|
UPNP_GetLinkLayerMaxBitRates(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
unsigned int * bitrateDown,
|
unsigned int * bitrateDown,
|
||||||
|
@ -293,7 +293,7 @@ UPNP_GetLinkLayerMaxBitRates(const char * controlURL,
|
||||||
* 402 Invalid Args - See UPnP Device Architecture section on Control.
|
* 402 Invalid Args - See UPnP Device Architecture section on Control.
|
||||||
* 501 Action Failed - See UPnP Device Architecture section on Control.
|
* 501 Action Failed - See UPnP Device Architecture section on Control.
|
||||||
*/
|
*/
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetExternalIPAddress(const char * controlURL,
|
UPNP_GetExternalIPAddress(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
char * extIpAdd)
|
char * extIpAdd)
|
||||||
|
@ -333,7 +333,7 @@ UPNP_GetExternalIPAddress(const char * controlURL,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_AddPortMapping(const char * controlURL, const char * servicetype,
|
UPNP_AddPortMapping(const char * controlURL, const char * servicetype,
|
||||||
const char * extPort,
|
const char * extPort,
|
||||||
const char * inPort,
|
const char * inPort,
|
||||||
|
@ -394,7 +394,74 @@ UPNP_AddPortMapping(const char * controlURL, const char * servicetype,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
|
UPNP_AddAnyPortMapping(const char * controlURL, const char * servicetype,
|
||||||
|
const char * extPort,
|
||||||
|
const char * inPort,
|
||||||
|
const char * inClient,
|
||||||
|
const char * desc,
|
||||||
|
const char * proto,
|
||||||
|
const char * remoteHost,
|
||||||
|
const char * leaseDuration,
|
||||||
|
char * reservedPort)
|
||||||
|
{
|
||||||
|
struct UPNParg * AddPortMappingArgs;
|
||||||
|
char * buffer;
|
||||||
|
int bufsize;
|
||||||
|
struct NameValueParserData pdata;
|
||||||
|
const char * resVal;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if(!inPort || !inClient || !proto || !extPort)
|
||||||
|
return UPNPCOMMAND_INVALID_ARGS;
|
||||||
|
|
||||||
|
AddPortMappingArgs = calloc(9, sizeof(struct UPNParg));
|
||||||
|
AddPortMappingArgs[0].elt = "NewRemoteHost";
|
||||||
|
AddPortMappingArgs[0].val = remoteHost;
|
||||||
|
AddPortMappingArgs[1].elt = "NewExternalPort";
|
||||||
|
AddPortMappingArgs[1].val = extPort;
|
||||||
|
AddPortMappingArgs[2].elt = "NewProtocol";
|
||||||
|
AddPortMappingArgs[2].val = proto;
|
||||||
|
AddPortMappingArgs[3].elt = "NewInternalPort";
|
||||||
|
AddPortMappingArgs[3].val = inPort;
|
||||||
|
AddPortMappingArgs[4].elt = "NewInternalClient";
|
||||||
|
AddPortMappingArgs[4].val = inClient;
|
||||||
|
AddPortMappingArgs[5].elt = "NewEnabled";
|
||||||
|
AddPortMappingArgs[5].val = "1";
|
||||||
|
AddPortMappingArgs[6].elt = "NewPortMappingDescription";
|
||||||
|
AddPortMappingArgs[6].val = desc?desc:"libminiupnpc";
|
||||||
|
AddPortMappingArgs[7].elt = "NewLeaseDuration";
|
||||||
|
AddPortMappingArgs[7].val = leaseDuration?leaseDuration:"0";
|
||||||
|
if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
||||||
|
"AddAnyPortMapping", AddPortMappingArgs,
|
||||||
|
&bufsize))) {
|
||||||
|
free(AddPortMappingArgs);
|
||||||
|
return UPNPCOMMAND_HTTP_ERROR;
|
||||||
|
}
|
||||||
|
ParseNameValue(buffer, bufsize, &pdata);
|
||||||
|
free(buffer); buffer = NULL;
|
||||||
|
resVal = GetValueFromNameValueList(&pdata, "errorCode");
|
||||||
|
if(resVal) {
|
||||||
|
ret = UPNPCOMMAND_UNKNOWN_ERROR;
|
||||||
|
sscanf(resVal, "%d", &ret);
|
||||||
|
} else {
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
p = GetValueFromNameValueList(&pdata, "NewReservedPort");
|
||||||
|
if(p) {
|
||||||
|
strncpy(reservedPort, p, 6);
|
||||||
|
reservedPort[5] = '\0';
|
||||||
|
ret = UPNPCOMMAND_SUCCESS;
|
||||||
|
} else {
|
||||||
|
ret = UPNPCOMMAND_INVALID_RESPONSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ClearNameValueList(&pdata);
|
||||||
|
free(AddPortMappingArgs);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_DeletePortMapping(const char * controlURL, const char * servicetype,
|
UPNP_DeletePortMapping(const char * controlURL, const char * servicetype,
|
||||||
const char * extPort, const char * proto,
|
const char * extPort, const char * proto,
|
||||||
const char * remoteHost)
|
const char * remoteHost)
|
||||||
|
@ -438,7 +505,53 @@ UPNP_DeletePortMapping(const char * controlURL, const char * servicetype,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
|
UPNP_DeletePortMappingRange(const char * controlURL, const char * servicetype,
|
||||||
|
const char * extPortStart, const char * extPortEnd,
|
||||||
|
const char * proto,
|
||||||
|
const char * manage)
|
||||||
|
{
|
||||||
|
struct UPNParg * DeletePortMappingArgs;
|
||||||
|
char * buffer;
|
||||||
|
int bufsize;
|
||||||
|
struct NameValueParserData pdata;
|
||||||
|
const char * resVal;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if(!extPortStart || !extPortEnd || !proto || !manage)
|
||||||
|
return UPNPCOMMAND_INVALID_ARGS;
|
||||||
|
|
||||||
|
DeletePortMappingArgs = calloc(5, sizeof(struct UPNParg));
|
||||||
|
DeletePortMappingArgs[0].elt = "NewStartPort";
|
||||||
|
DeletePortMappingArgs[0].val = extPortStart;
|
||||||
|
DeletePortMappingArgs[1].elt = "NewEndPort";
|
||||||
|
DeletePortMappingArgs[1].val = extPortEnd;
|
||||||
|
DeletePortMappingArgs[2].elt = "NewProtocol";
|
||||||
|
DeletePortMappingArgs[2].val = proto;
|
||||||
|
DeletePortMappingArgs[3].elt = "NewManage";
|
||||||
|
DeletePortMappingArgs[3].val = manage;
|
||||||
|
|
||||||
|
if(!(buffer = simpleUPnPcommand(-1, controlURL, servicetype,
|
||||||
|
"DeletePortMappingRange",
|
||||||
|
DeletePortMappingArgs, &bufsize))) {
|
||||||
|
free(DeletePortMappingArgs);
|
||||||
|
return UPNPCOMMAND_HTTP_ERROR;
|
||||||
|
}
|
||||||
|
ParseNameValue(buffer, bufsize, &pdata);
|
||||||
|
free(buffer); buffer = NULL;
|
||||||
|
resVal = GetValueFromNameValueList(&pdata, "errorCode");
|
||||||
|
if(resVal) {
|
||||||
|
ret = UPNPCOMMAND_UNKNOWN_ERROR;
|
||||||
|
sscanf(resVal, "%d", &ret);
|
||||||
|
} else {
|
||||||
|
ret = UPNPCOMMAND_SUCCESS;
|
||||||
|
}
|
||||||
|
ClearNameValueList(&pdata);
|
||||||
|
free(DeletePortMappingArgs);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetGenericPortMappingEntry(const char * controlURL,
|
UPNP_GetGenericPortMappingEntry(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
const char * index,
|
const char * index,
|
||||||
|
@ -533,7 +646,7 @@ UPNP_GetGenericPortMappingEntry(const char * controlURL,
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetPortMappingNumberOfEntries(const char * controlURL,
|
UPNP_GetPortMappingNumberOfEntries(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
unsigned int * numEntries)
|
unsigned int * numEntries)
|
||||||
|
@ -574,7 +687,7 @@ UPNP_GetPortMappingNumberOfEntries(const char * controlURL,
|
||||||
/* UPNP_GetSpecificPortMappingEntry retrieves an existing port mapping
|
/* UPNP_GetSpecificPortMappingEntry retrieves an existing port mapping
|
||||||
* the result is returned in the intClient and intPort strings
|
* the result is returned in the intClient and intPort strings
|
||||||
* please provide 16 and 6 bytes of data */
|
* please provide 16 and 6 bytes of data */
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
const char * extPort,
|
const char * extPort,
|
||||||
|
@ -666,7 +779,7 @@ UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
||||||
* 733 InconsistantParameters - NewStartPort and NewEndPort values are not
|
* 733 InconsistantParameters - NewStartPort and NewEndPort values are not
|
||||||
* consistent.
|
* consistent.
|
||||||
*/
|
*/
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetListOfPortMappings(const char * controlURL,
|
UPNP_GetListOfPortMappings(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
const char * startPort,
|
const char * startPort,
|
||||||
|
@ -748,7 +861,7 @@ UPNP_GetListOfPortMappings(const char * controlURL,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IGD:2, functions for service WANIPv6FirewallControl:1 */
|
/* IGD:2, functions for service WANIPv6FirewallControl:1 */
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetFirewallStatus(const char * controlURL,
|
UPNP_GetFirewallStatus(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
int * firewallEnabled,
|
int * firewallEnabled,
|
||||||
|
@ -792,7 +905,7 @@ UPNP_GetFirewallStatus(const char * controlURL,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetOutboundPinholeTimeout(const char * controlURL, const char * servicetype,
|
UPNP_GetOutboundPinholeTimeout(const char * controlURL, const char * servicetype,
|
||||||
const char * remoteHost,
|
const char * remoteHost,
|
||||||
const char * remotePort,
|
const char * remotePort,
|
||||||
|
@ -847,7 +960,7 @@ UPNP_GetOutboundPinholeTimeout(const char * controlURL, const char * servicetype
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_AddPinhole(const char * controlURL, const char * servicetype,
|
UPNP_AddPinhole(const char * controlURL, const char * servicetype,
|
||||||
const char * remoteHost,
|
const char * remoteHost,
|
||||||
const char * remotePort,
|
const char * remotePort,
|
||||||
|
@ -926,7 +1039,7 @@ UPNP_AddPinhole(const char * controlURL, const char * servicetype,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_UpdatePinhole(const char * controlURL, const char * servicetype,
|
UPNP_UpdatePinhole(const char * controlURL, const char * servicetype,
|
||||||
const char * uniqueID,
|
const char * uniqueID,
|
||||||
const char * leaseTime)
|
const char * leaseTime)
|
||||||
|
@ -968,7 +1081,7 @@ UPNP_UpdatePinhole(const char * controlURL, const char * servicetype,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_DeletePinhole(const char * controlURL, const char * servicetype, const char * uniqueID)
|
UPNP_DeletePinhole(const char * controlURL, const char * servicetype, const char * uniqueID)
|
||||||
{
|
{
|
||||||
/*struct NameValueParserData pdata;*/
|
/*struct NameValueParserData pdata;*/
|
||||||
|
@ -1007,7 +1120,7 @@ UPNP_DeletePinhole(const char * controlURL, const char * servicetype, const char
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_CheckPinholeWorking(const char * controlURL, const char * servicetype,
|
UPNP_CheckPinholeWorking(const char * controlURL, const char * servicetype,
|
||||||
const char * uniqueID, int * isWorking)
|
const char * uniqueID, int * isWorking)
|
||||||
{
|
{
|
||||||
|
@ -1052,7 +1165,7 @@ UPNP_CheckPinholeWorking(const char * controlURL, const char * servicetype,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetPinholePackets(const char * controlURL, const char * servicetype,
|
UPNP_GetPinholePackets(const char * controlURL, const char * servicetype,
|
||||||
const char * uniqueID, int * packets)
|
const char * uniqueID, int * packets)
|
||||||
{
|
{
|
||||||
|
|
96
external/miniupnpc/upnpcommands.h
vendored
Executable file → Normal file
96
external/miniupnpc/upnpcommands.h
vendored
Executable file → Normal file
|
@ -17,24 +17,25 @@
|
||||||
#define UPNPCOMMAND_UNKNOWN_ERROR (-1)
|
#define UPNPCOMMAND_UNKNOWN_ERROR (-1)
|
||||||
#define UPNPCOMMAND_INVALID_ARGS (-2)
|
#define UPNPCOMMAND_INVALID_ARGS (-2)
|
||||||
#define UPNPCOMMAND_HTTP_ERROR (-3)
|
#define UPNPCOMMAND_HTTP_ERROR (-3)
|
||||||
|
#define UPNPCOMMAND_INVALID_RESPONSE (-4)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LIBSPEC UNSIGNED_INTEGER
|
MINIUPNP_LIBSPEC UNSIGNED_INTEGER
|
||||||
UPNP_GetTotalBytesSent(const char * controlURL,
|
UPNP_GetTotalBytesSent(const char * controlURL,
|
||||||
const char * servicetype);
|
const char * servicetype);
|
||||||
|
|
||||||
LIBSPEC UNSIGNED_INTEGER
|
MINIUPNP_LIBSPEC UNSIGNED_INTEGER
|
||||||
UPNP_GetTotalBytesReceived(const char * controlURL,
|
UPNP_GetTotalBytesReceived(const char * controlURL,
|
||||||
const char * servicetype);
|
const char * servicetype);
|
||||||
|
|
||||||
LIBSPEC UNSIGNED_INTEGER
|
MINIUPNP_LIBSPEC UNSIGNED_INTEGER
|
||||||
UPNP_GetTotalPacketsSent(const char * controlURL,
|
UPNP_GetTotalPacketsSent(const char * controlURL,
|
||||||
const char * servicetype);
|
const char * servicetype);
|
||||||
|
|
||||||
LIBSPEC UNSIGNED_INTEGER
|
MINIUPNP_LIBSPEC UNSIGNED_INTEGER
|
||||||
UPNP_GetTotalPacketsReceived(const char * controlURL,
|
UPNP_GetTotalPacketsReceived(const char * controlURL,
|
||||||
const char * servicetype);
|
const char * servicetype);
|
||||||
|
|
||||||
|
@ -43,7 +44,7 @@ UPNP_GetTotalPacketsReceived(const char * controlURL,
|
||||||
* Return values :
|
* Return values :
|
||||||
* UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
|
* UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
|
||||||
* or a UPnP Error code */
|
* or a UPnP Error code */
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetStatusInfo(const char * controlURL,
|
UPNP_GetStatusInfo(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
char * status,
|
char * status,
|
||||||
|
@ -55,7 +56,7 @@ UPNP_GetStatusInfo(const char * controlURL,
|
||||||
* Return Values :
|
* Return Values :
|
||||||
* UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
|
* UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
|
||||||
* or a UPnP Error code */
|
* or a UPnP Error code */
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetConnectionTypeInfo(const char * controlURL,
|
UPNP_GetConnectionTypeInfo(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
char * connectionType);
|
char * connectionType);
|
||||||
|
@ -71,7 +72,7 @@ UPNP_GetConnectionTypeInfo(const char * controlURL,
|
||||||
* possible UPnP Errors :
|
* possible UPnP Errors :
|
||||||
* 402 Invalid Args - See UPnP Device Architecture section on Control.
|
* 402 Invalid Args - See UPnP Device Architecture section on Control.
|
||||||
* 501 Action Failed - See UPnP Device Architecture section on Control. */
|
* 501 Action Failed - See UPnP Device Architecture section on Control. */
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetExternalIPAddress(const char * controlURL,
|
UPNP_GetExternalIPAddress(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
char * extIpAdd);
|
char * extIpAdd);
|
||||||
|
@ -82,7 +83,7 @@ UPNP_GetExternalIPAddress(const char * controlURL,
|
||||||
* return values :
|
* return values :
|
||||||
* UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
|
* UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
|
||||||
* or a UPnP Error Code. */
|
* or a UPnP Error Code. */
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetLinkLayerMaxBitRates(const char* controlURL,
|
UPNP_GetLinkLayerMaxBitRates(const char* controlURL,
|
||||||
const char* servicetype,
|
const char* servicetype,
|
||||||
unsigned int * bitrateDown,
|
unsigned int * bitrateDown,
|
||||||
|
@ -121,7 +122,7 @@ UPNP_GetLinkLayerMaxBitRates(const char* controlURL,
|
||||||
* due to conflict with other mechanisms.
|
* due to conflict with other mechanisms.
|
||||||
* 732 WildCardNotPermittedInIntPort - The internal port cannot be wild-carded
|
* 732 WildCardNotPermittedInIntPort - The internal port cannot be wild-carded
|
||||||
*/
|
*/
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_AddPortMapping(const char * controlURL, const char * servicetype,
|
UPNP_AddPortMapping(const char * controlURL, const char * servicetype,
|
||||||
const char * extPort,
|
const char * extPort,
|
||||||
const char * inPort,
|
const char * inPort,
|
||||||
|
@ -131,6 +132,40 @@ UPNP_AddPortMapping(const char * controlURL, const char * servicetype,
|
||||||
const char * remoteHost,
|
const char * remoteHost,
|
||||||
const char * leaseDuration);
|
const char * leaseDuration);
|
||||||
|
|
||||||
|
/* UPNP_AddAnyPortMapping()
|
||||||
|
* if desc is NULL, it will be defaulted to "libminiupnpc"
|
||||||
|
* remoteHost is usually NULL because IGD don't support it.
|
||||||
|
*
|
||||||
|
* Return values :
|
||||||
|
* 0 : SUCCESS
|
||||||
|
* NON ZERO : ERROR. Either an UPnP error code or an unknown error.
|
||||||
|
*
|
||||||
|
* List of possible UPnP errors for AddPortMapping :
|
||||||
|
* errorCode errorDescription (short) - Description (long)
|
||||||
|
* 402 Invalid Args - See UPnP Device Architecture section on Control.
|
||||||
|
* 501 Action Failed - See UPnP Device Architecture section on Control.
|
||||||
|
* 606 Action not authorized - The action requested REQUIRES authorization and
|
||||||
|
* the sender was not authorized.
|
||||||
|
* 715 WildCardNotPermittedInSrcIP - The source IP address cannot be
|
||||||
|
* wild-carded
|
||||||
|
* 716 WildCardNotPermittedInExtPort - The external port cannot be wild-carded
|
||||||
|
* 728 NoPortMapsAvailable - There are not enough free ports available to
|
||||||
|
* complete port mapping.
|
||||||
|
* 729 ConflictWithOtherMechanisms - Attempted port mapping is not allowed
|
||||||
|
* due to conflict with other mechanisms.
|
||||||
|
* 732 WildCardNotPermittedInIntPort - The internal port cannot be wild-carded
|
||||||
|
*/
|
||||||
|
MINIUPNP_LIBSPEC int
|
||||||
|
UPNP_AddAnyPortMapping(const char * controlURL, const char * servicetype,
|
||||||
|
const char * extPort,
|
||||||
|
const char * inPort,
|
||||||
|
const char * inClient,
|
||||||
|
const char * desc,
|
||||||
|
const char * proto,
|
||||||
|
const char * remoteHost,
|
||||||
|
const char * leaseDuration,
|
||||||
|
char * reservedPort);
|
||||||
|
|
||||||
/* UPNP_DeletePortMapping()
|
/* UPNP_DeletePortMapping()
|
||||||
* Use same argument values as what was used for AddPortMapping().
|
* Use same argument values as what was used for AddPortMapping().
|
||||||
* remoteHost is usually NULL because IGD don't support it.
|
* remoteHost is usually NULL because IGD don't support it.
|
||||||
|
@ -143,14 +178,33 @@ UPNP_AddPortMapping(const char * controlURL, const char * servicetype,
|
||||||
* 606 Action not authorized - The action requested REQUIRES authorization
|
* 606 Action not authorized - The action requested REQUIRES authorization
|
||||||
* and the sender was not authorized.
|
* and the sender was not authorized.
|
||||||
* 714 NoSuchEntryInArray - The specified value does not exist in the array */
|
* 714 NoSuchEntryInArray - The specified value does not exist in the array */
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_DeletePortMapping(const char * controlURL, const char * servicetype,
|
UPNP_DeletePortMapping(const char * controlURL, const char * servicetype,
|
||||||
const char * extPort, const char * proto,
|
const char * extPort, const char * proto,
|
||||||
const char * remoteHost);
|
const char * remoteHost);
|
||||||
|
|
||||||
|
/* UPNP_DeletePortRangeMapping()
|
||||||
|
* Use same argument values as what was used for AddPortMapping().
|
||||||
|
* remoteHost is usually NULL because IGD don't support it.
|
||||||
|
* Return Values :
|
||||||
|
* 0 : SUCCESS
|
||||||
|
* NON ZERO : error. Either an UPnP error code or an undefined error.
|
||||||
|
*
|
||||||
|
* List of possible UPnP errors for DeletePortMapping :
|
||||||
|
* 606 Action not authorized - The action requested REQUIRES authorization
|
||||||
|
* and the sender was not authorized.
|
||||||
|
* 730 PortMappingNotFound - This error message is returned if no port
|
||||||
|
* mapping is found in the specified range.
|
||||||
|
* 733 InconsistentParameters - NewStartPort and NewEndPort values are not consistent. */
|
||||||
|
MINIUPNP_LIBSPEC int
|
||||||
|
UPNP_DeletePortMappingRange(const char * controlURL, const char * servicetype,
|
||||||
|
const char * extPortStart, const char * extPortEnd,
|
||||||
|
const char * proto,
|
||||||
|
const char * manage);
|
||||||
|
|
||||||
/* UPNP_GetPortMappingNumberOfEntries()
|
/* UPNP_GetPortMappingNumberOfEntries()
|
||||||
* not supported by all routers */
|
* not supported by all routers */
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetPortMappingNumberOfEntries(const char* controlURL,
|
UPNP_GetPortMappingNumberOfEntries(const char* controlURL,
|
||||||
const char* servicetype,
|
const char* servicetype,
|
||||||
unsigned int * num);
|
unsigned int * num);
|
||||||
|
@ -178,7 +232,7 @@ UPNP_GetPortMappingNumberOfEntries(const char* controlURL,
|
||||||
* and the sender was not authorized.
|
* and the sender was not authorized.
|
||||||
* 714 NoSuchEntryInArray - The specified value does not exist in the array.
|
* 714 NoSuchEntryInArray - The specified value does not exist in the array.
|
||||||
*/
|
*/
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
const char * extPort,
|
const char * extPort,
|
||||||
|
@ -212,7 +266,7 @@ UPNP_GetSpecificPortMappingEntry(const char * controlURL,
|
||||||
* and the sender was not authorized.
|
* and the sender was not authorized.
|
||||||
* 713 SpecifiedArrayIndexInvalid - The specified array index is out of bounds
|
* 713 SpecifiedArrayIndexInvalid - The specified array index is out of bounds
|
||||||
*/
|
*/
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetGenericPortMappingEntry(const char * controlURL,
|
UPNP_GetGenericPortMappingEntry(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
const char * index,
|
const char * index,
|
||||||
|
@ -234,7 +288,7 @@ UPNP_GetGenericPortMappingEntry(const char * controlURL,
|
||||||
* 733 InconsistantParameters - NewStartPort and NewEndPort values are not
|
* 733 InconsistantParameters - NewStartPort and NewEndPort values are not
|
||||||
* consistent.
|
* consistent.
|
||||||
*/
|
*/
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetListOfPortMappings(const char * controlURL,
|
UPNP_GetListOfPortMappings(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
const char * startPort,
|
const char * startPort,
|
||||||
|
@ -244,13 +298,13 @@ UPNP_GetListOfPortMappings(const char * controlURL,
|
||||||
struct PortMappingParserData * data);
|
struct PortMappingParserData * data);
|
||||||
|
|
||||||
/* IGD:2, functions for service WANIPv6FirewallControl:1 */
|
/* IGD:2, functions for service WANIPv6FirewallControl:1 */
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetFirewallStatus(const char * controlURL,
|
UPNP_GetFirewallStatus(const char * controlURL,
|
||||||
const char * servicetype,
|
const char * servicetype,
|
||||||
int * firewallEnabled,
|
int * firewallEnabled,
|
||||||
int * inboundPinholeAllowed);
|
int * inboundPinholeAllowed);
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetOutboundPinholeTimeout(const char * controlURL, const char * servicetype,
|
UPNP_GetOutboundPinholeTimeout(const char * controlURL, const char * servicetype,
|
||||||
const char * remoteHost,
|
const char * remoteHost,
|
||||||
const char * remotePort,
|
const char * remotePort,
|
||||||
|
@ -259,7 +313,7 @@ UPNP_GetOutboundPinholeTimeout(const char * controlURL, const char * servicetype
|
||||||
const char * proto,
|
const char * proto,
|
||||||
int * opTimeout);
|
int * opTimeout);
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_AddPinhole(const char * controlURL, const char * servicetype,
|
UPNP_AddPinhole(const char * controlURL, const char * servicetype,
|
||||||
const char * remoteHost,
|
const char * remoteHost,
|
||||||
const char * remotePort,
|
const char * remotePort,
|
||||||
|
@ -269,19 +323,19 @@ UPNP_AddPinhole(const char * controlURL, const char * servicetype,
|
||||||
const char * leaseTime,
|
const char * leaseTime,
|
||||||
char * uniqueID);
|
char * uniqueID);
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_UpdatePinhole(const char * controlURL, const char * servicetype,
|
UPNP_UpdatePinhole(const char * controlURL, const char * servicetype,
|
||||||
const char * uniqueID,
|
const char * uniqueID,
|
||||||
const char * leaseTime);
|
const char * leaseTime);
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_DeletePinhole(const char * controlURL, const char * servicetype, const char * uniqueID);
|
UPNP_DeletePinhole(const char * controlURL, const char * servicetype, const char * uniqueID);
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_CheckPinholeWorking(const char * controlURL, const char * servicetype,
|
UPNP_CheckPinholeWorking(const char * controlURL, const char * servicetype,
|
||||||
const char * uniqueID, int * isWorking);
|
const char * uniqueID, int * isWorking);
|
||||||
|
|
||||||
LIBSPEC int
|
MINIUPNP_LIBSPEC int
|
||||||
UPNP_GetPinholePackets(const char * controlURL, const char * servicetype,
|
UPNP_GetPinholePackets(const char * controlURL, const char * servicetype,
|
||||||
const char * uniqueID, int * packets);
|
const char * uniqueID, int * packets);
|
||||||
|
|
||||||
|
|
5
external/miniupnpc/upnperrors.c
vendored
Executable file → Normal file
5
external/miniupnpc/upnperrors.c
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: upnperrors.c,v 1.6 2012/03/15 01:02:03 nanard Exp $ */
|
/* $Id: upnperrors.c,v 1.5 2011/04/10 11:19:36 nanard Exp $ */
|
||||||
/* Project : miniupnp
|
/* Project : miniupnp
|
||||||
* Author : Thomas BERNARD
|
* Author : Thomas BERNARD
|
||||||
* copyright (c) 2007 Thomas Bernard
|
* copyright (c) 2007 Thomas Bernard
|
||||||
|
@ -24,6 +24,9 @@ const char * strupnperror(int err)
|
||||||
case UPNPCOMMAND_INVALID_ARGS:
|
case UPNPCOMMAND_INVALID_ARGS:
|
||||||
s = "Miniupnpc Invalid Arguments";
|
s = "Miniupnpc Invalid Arguments";
|
||||||
break;
|
break;
|
||||||
|
case UPNPCOMMAND_INVALID_RESPONSE:
|
||||||
|
s = "Miniupnpc Invalid response";
|
||||||
|
break;
|
||||||
case UPNPDISCOVER_SOCKET_ERROR:
|
case UPNPDISCOVER_SOCKET_ERROR:
|
||||||
s = "Miniupnpc Socket error";
|
s = "Miniupnpc Socket error";
|
||||||
break;
|
break;
|
||||||
|
|
4
external/miniupnpc/upnperrors.h
vendored
Executable file → Normal file
4
external/miniupnpc/upnperrors.h
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: upnperrors.h,v 1.4 2012/09/27 15:42:11 nanard Exp $ */
|
/* $Id: upnperrors.h,v 1.2 2008/07/02 23:31:15 nanard Exp $ */
|
||||||
/* (c) 2007 Thomas Bernard
|
/* (c) 2007 Thomas Bernard
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* MiniUPnP Project.
|
* MiniUPnP Project.
|
||||||
|
@ -17,7 +17,7 @@ extern "C" {
|
||||||
/* strupnperror()
|
/* strupnperror()
|
||||||
* Return a string description of the UPnP error code
|
* Return a string description of the UPnP error code
|
||||||
* or NULL for undefinded errors */
|
* or NULL for undefinded errors */
|
||||||
LIBSPEC const char * strupnperror(int err);
|
MINIUPNP_LIBSPEC const char * strupnperror(int err);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
0
external/miniupnpc/upnpreplyparse.c
vendored
Executable file → Normal file
0
external/miniupnpc/upnpreplyparse.c
vendored
Executable file → Normal file
0
external/miniupnpc/upnpreplyparse.h
vendored
Executable file → Normal file
0
external/miniupnpc/upnpreplyparse.h
vendored
Executable file → Normal file
2
external/miniupnpc/wingenminiupnpcstrings.c
vendored
Executable file → Normal file
2
external/miniupnpc/wingenminiupnpcstrings.c
vendored
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: wingenminiupnpcstrings.c,v 1.3 2012/03/05 19:42:48 nanard Exp $ */
|
/* $Id: wingenminiupnpcstrings.c,v 1.2 2011/01/11 15:31:13 nanard Exp $ */
|
||||||
/* Project: miniupnp
|
/* Project: miniupnp
|
||||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||||
* Author: Thomas Bernard
|
* Author: Thomas Bernard
|
||||||
|
|
|
@ -48,9 +48,11 @@
|
||||||
#ifdef UPNP_STATIC
|
#ifdef UPNP_STATIC
|
||||||
#include <miniupnpc/miniupnpc.h>
|
#include <miniupnpc/miniupnpc.h>
|
||||||
#include <miniupnpc/upnpcommands.h>
|
#include <miniupnpc/upnpcommands.h>
|
||||||
|
#include <miniupnpc/upnperrors.h>
|
||||||
#else
|
#else
|
||||||
#include "miniupnpc.h"
|
#include "miniupnpc.h"
|
||||||
#include "upnpcommands.h"
|
#include "upnpcommands.h"
|
||||||
|
#include "upnperrors.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NET_MAKE_IP(b1,b2,b3,b4) ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<<16)+((DWORD)(b3)<<8)+((DWORD)(b4))))
|
#define NET_MAKE_IP(b1,b2,b3,b4) ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<<16)+((DWORD)(b3)<<8)+((DWORD)(b4))))
|
||||||
|
@ -326,8 +328,14 @@ namespace nodetool
|
||||||
if (result == 1) {
|
if (result == 1) {
|
||||||
std::ostringstream portString;
|
std::ostringstream portString;
|
||||||
portString << m_listenning_port;
|
portString << m_listenning_port;
|
||||||
if (UPNP_AddPortMapping(urls.controlURL, igdData.first.servicetype, portString.str().c_str(), portString.str().c_str(), lanAddress, CRYPTONOTE_NAME, "TCP", 0, "0") != 0) {
|
|
||||||
LOG_ERROR("UPNP_AddPortMapping failed.");
|
// Delete the port mapping before we create it, just in case we have dangling port mapping from the daemon not being shut down correctly
|
||||||
|
UPNP_DeletePortMapping(urls.controlURL, igdData.first.servicetype, portString.str().c_str(), "TCP", 0);
|
||||||
|
|
||||||
|
int portMappingResult;
|
||||||
|
portMappingResult = UPNP_AddPortMapping(urls.controlURL, igdData.first.servicetype, portString.str().c_str(), portString.str().c_str(), lanAddress, CRYPTONOTE_NAME, "TCP", 0, "0");
|
||||||
|
if (portMappingResult != 0) {
|
||||||
|
LOG_ERROR("UPNP_AddPortMapping failed, error: " << strupnperror(portMappingResult));
|
||||||
} else {
|
} else {
|
||||||
LOG_PRINT_GREEN("Added IGD port mapping.", LOG_LEVEL_0);
|
LOG_PRINT_GREEN("Added IGD port mapping.", LOG_LEVEL_0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue