mirror of
https://github.com/transmission/transmission.git
synced 2026-05-08 09:39:08 +01:00
update miniupnp to 1.4
This commit is contained in:
Vendored
+39
-1
@@ -1,6 +1,44 @@
|
||||
$Id: Changelog.txt,v 1.93 2009/10/10 19:15:34 nanard Exp $
|
||||
$Id: Changelog.txt,v 1.105 2010/01/06 10:03:53 nanard Exp $
|
||||
miniUPnP client Changelog.
|
||||
|
||||
2010/01/06:
|
||||
#define _DARWIN_C_SOURCE for macosx
|
||||
|
||||
2009/12/19:
|
||||
Improve MinGW32 build
|
||||
|
||||
2009/12/11:
|
||||
adding a MSVC9 project to build the static library and executable
|
||||
|
||||
2009/12/10:
|
||||
Fixing some compilation stuff for Windows/MinGW
|
||||
|
||||
2009/12/07:
|
||||
adaptations in Makefile and updateminiupnpcstring.sh for AmigaOS
|
||||
some fixes for Windows when using virtual ethernet adapters (it is the
|
||||
case with VMWare installed).
|
||||
|
||||
2009/12/04:
|
||||
some fixes for AmigaOS compilation
|
||||
Changed HTTP version to HTTP/1.0 for Soap too (to prevent chunked
|
||||
transfer encoding)
|
||||
|
||||
2009/12/03:
|
||||
updating printIDG and testigddescparse.c for debug.
|
||||
modifications to compile under AmigaOS
|
||||
adding a testminiwget program
|
||||
Changed miniwget to advertise itself as HTTP/1.0 to prevent chunked
|
||||
transfer encoding
|
||||
|
||||
2009/11/26:
|
||||
fixing updateminiupnpcstrings.sh to take into account
|
||||
which command that does not return an error code.
|
||||
|
||||
VERSION 1.4 : released 2009/10/30
|
||||
|
||||
2009/10/16:
|
||||
using Py_BEGIN_ALLOW_THREADS and Py_END_ALLOW_THREADS in python module.
|
||||
|
||||
2009/10/10:
|
||||
Some fixes for compilation under Solaris
|
||||
compilation fixes : http://miniupnp.tuxfamily.org/forum/viewtopic.php?p=1464
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright (c) 2005-2008, Thomas BERNARD
|
||||
Copyright (c) 2005-2009, Thomas BERNARD
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
Vendored
+7
-5
@@ -1,9 +1,9 @@
|
||||
Project: miniupnp
|
||||
Project web page: http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
Author: Thomas Bernard
|
||||
Copyright (c) 2005-2008 Thomas Bernard
|
||||
Copyright (c) 2005-2009 Thomas Bernard
|
||||
This software is subject to the conditions detailed in the
|
||||
LICENCE file provided within this distribution.
|
||||
LICENSE file provided within this distribution.
|
||||
|
||||
For the comfort of Win32 users, bsdqueue.h is included in the distribution.
|
||||
Its licence is included in the header of the file.
|
||||
@@ -11,10 +11,12 @@ bsdqueue.h is a copy of the sys/queue.h of an OpenBSD system.
|
||||
|
||||
* miniupnp Client *
|
||||
|
||||
To compile, simply run 'gmake' (could be 'make').
|
||||
To compile, simply run 'gmake' (could be 'make' on your system).
|
||||
Under win32, to compile with MinGW, type "mingw32make.bat".
|
||||
The compilation is known to work under linux, FreeBSD,
|
||||
OpenBSD, MacOS X and cygwin.
|
||||
OpenBSD, MacOS X, AmigaOS and cygwin.
|
||||
The official AmigaOS4.1 SDK was used for AmigaOS4 and GeekGadgets for AmigaOS3.
|
||||
|
||||
To install the library and headers on the system use :
|
||||
> su
|
||||
> make install
|
||||
@@ -25,7 +27,7 @@ alternatively, to install in a specific location, use :
|
||||
|
||||
upnpc.c is a sample client using the libminiupnpc.
|
||||
To use the libminiupnpc in your application, link it with
|
||||
libminiupnpc.a and use the following functions found in miniupnpc.h,
|
||||
libminiupnpc.a (or .so) and use the following functions found in miniupnpc.h,
|
||||
upnpcommands.h and miniwget.h :
|
||||
- upnpDiscover()
|
||||
- miniwget()
|
||||
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
1.4
|
||||
+12
-12
@@ -1,4 +1,4 @@
|
||||
/* $Id: igd_desc_parse.c,v 1.8 2008/04/23 11:51:06 nanard Exp $ */
|
||||
/* $Id: igd_desc_parse.c,v 1.9 2009/12/03 13:50:06 nanard Exp $ */
|
||||
/* Project : miniupnp
|
||||
* http://miniupnp.free.fr/
|
||||
* Author : Thomas Bernard
|
||||
@@ -95,19 +95,19 @@ void IGDdata(void * d, const char * data, int l)
|
||||
|
||||
void printIGD(struct IGDdatas * d)
|
||||
{
|
||||
printf("urlbase = %s\n", d->urlbase);
|
||||
printf("urlbase = '%s'\n", d->urlbase);
|
||||
printf("WAN Device (Common interface config) :\n");
|
||||
/*printf(" deviceType = %s\n", d->devicetype_CIF);*/
|
||||
printf(" serviceType = %s\n", d->servicetype_CIF);
|
||||
printf(" controlURL = %s\n", d->controlurl_CIF);
|
||||
printf(" eventSubURL = %s\n", d->eventsuburl_CIF);
|
||||
printf(" SCPDURL = %s\n", d->scpdurl_CIF);
|
||||
/*printf(" deviceType = '%s'\n", d->devicetype_CIF);*/
|
||||
printf(" serviceType = '%s'\n", d->servicetype_CIF);
|
||||
printf(" controlURL = '%s'\n", d->controlurl_CIF);
|
||||
printf(" eventSubURL = '%s'\n", d->eventsuburl_CIF);
|
||||
printf(" SCPDURL = '%s'\n", d->scpdurl_CIF);
|
||||
printf("WAN Connection Device (IP or PPP Connection):\n");
|
||||
/*printf(" deviceType = %s\n", d->devicetype);*/
|
||||
printf(" servicetype = %s\n", d->servicetype);
|
||||
printf(" controlURL = %s\n", d->controlurl);
|
||||
printf(" eventSubURL = %s\n", d->eventsuburl);
|
||||
printf(" SCPDURL = %s\n", d->scpdurl);
|
||||
/*printf(" deviceType = '%s'\n", d->devicetype);*/
|
||||
printf(" servicetype = '%s'\n", d->servicetype);
|
||||
printf(" controlURL = '%s'\n", d->controlurl);
|
||||
printf(" eventSubURL = '%s'\n", d->eventsuburl);
|
||||
printf(" SCPDURL = '%s'\n", d->scpdurl);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Vendored
+8
-5
@@ -1,7 +1,7 @@
|
||||
/* $Id: minisoap.c,v 1.16 2008/10/11 16:39:29 nanard Exp $ */
|
||||
/* $Id: minisoap.c,v 1.18 2009/12/04 11:29:18 nanard Exp $ */
|
||||
/* Project : miniupnp
|
||||
* Author : Thomas Bernard
|
||||
* Copyright (c) 2005 Thomas Bernard
|
||||
* Copyright (c) 2005-2009 Thomas Bernard
|
||||
* This software is subject to the conditions detailed in the
|
||||
* LICENCE file provided in this distribution.
|
||||
*
|
||||
@@ -84,14 +84,17 @@ int soapPostSubmit(int fd,
|
||||
bodysize = (int)strlen(body);
|
||||
/* We are not using keep-alive HTTP connections.
|
||||
* HTTP/1.1 needs the header Connection: close to do that.
|
||||
* This is the default with HTTP/1.0 */
|
||||
* This is the default with HTTP/1.0
|
||||
* Using HTTP/1.1 means we need to support chunked transfer-encoding :
|
||||
* When using HTTP/1.1, the router "BiPAC 7404VNOX" always use chunked
|
||||
* transfer encoding. */
|
||||
/* Connection: Close is normally there only in HTTP/1.1 but who knows */
|
||||
portstr[0] = '\0';
|
||||
if(port != 80)
|
||||
snprintf(portstr, sizeof(portstr), ":%hu", port);
|
||||
headerssize = snprintf(headerbuf, sizeof(headerbuf),
|
||||
"POST %s HTTP/1.1\r\n"
|
||||
/* "POST %s HTTP/1.0\r\n"*/
|
||||
/* "POST %s HTTP/1.1\r\n" */
|
||||
"POST %s HTTP/1.0\r\n"
|
||||
"Host: %s%s\r\n"
|
||||
"User-Agent: " OS_STRING ", UPnP/1.0, MiniUPnPc/" MINIUPNPC_VERSION_STRING "\r\n"
|
||||
"Content-Length: %d\r\n"
|
||||
|
||||
Vendored
+9
-1
@@ -1,4 +1,4 @@
|
||||
/* $Id: minissdpc.c,v 1.10 2009/09/21 12:57:42 nanard Exp $ */
|
||||
/* $Id: minissdpc.c,v 1.13 2009/12/04 16:57:29 nanard Exp $ */
|
||||
/* Project : miniupnp
|
||||
* Author : Thomas BERNARD
|
||||
* copyright (c) 2005-2009 Thomas Bernard
|
||||
@@ -10,10 +10,18 @@
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#if defined(WIN32) || defined(__amigaos__) || defined(__amigaos4__)
|
||||
#ifdef WIN32
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#include <io.h>
|
||||
#endif
|
||||
#if defined(__amigaos__) || defined(__amigaos4__)
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
#if defined(__amigaos__)
|
||||
#define uint16_t unsigned short
|
||||
#endif
|
||||
/* Hack */
|
||||
#define UNIX_PATH_LEN 108
|
||||
struct sockaddr_un {
|
||||
|
||||
Vendored
+74
-10
@@ -1,9 +1,9 @@
|
||||
/* $Id: miniupnpc.c,v 1.66 2009/10/10 19:15:34 nanard Exp $ */
|
||||
/* $Id: miniupnpc.c,v 1.74 2010/01/09 23:54:40 nanard Exp $ */
|
||||
/* Project : miniupnp
|
||||
* Author : Thomas BERNARD
|
||||
* copyright (c) 2005-2009 Thomas Bernard
|
||||
* copyright (c) 2005-2010 Thomas Bernard
|
||||
* This software is subjet to the conditions detailed in the
|
||||
* provided LICENCE file. */
|
||||
* provided LICENSE file. */
|
||||
#define __EXTENSIONS__ 1
|
||||
#if !defined(MACOSX) && !defined(__sun)
|
||||
#if !defined(_XOPEN_SOURCE) && !defined(__OpenBSD__) && !defined(__NetBSD__)
|
||||
@@ -16,6 +16,10 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
#define _DARWIN_C_SOURCE
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@@ -24,32 +28,45 @@
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#include <io.h>
|
||||
/*#include <IPHlpApi.h>*/
|
||||
#define snprintf _snprintf
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
#define strncasecmp _memicmp
|
||||
#else
|
||||
#else /* defined(_MSC_VER) && (_MSC_VER >= 1400) */
|
||||
#define strncasecmp memicmp
|
||||
#endif
|
||||
#endif /* defined(_MSC_VER) && (_MSC_VER >= 1400) */
|
||||
#define MAXHOSTNAMELEN 64
|
||||
#else
|
||||
#else /* #ifdef WIN32 */
|
||||
/* Standard POSIX includes */
|
||||
#include <unistd.h>
|
||||
#if defined(__amigaos__) && !defined(__amigaos4__)
|
||||
/* Amiga OS 3 specific stuff */
|
||||
#define socklen_t int
|
||||
#else
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#if !defined(__amigaos__) && !defined(__amigaos4__)
|
||||
#include <poll.h>
|
||||
#endif
|
||||
#include <netdb.h>
|
||||
#include <strings.h>
|
||||
#include <errno.h>
|
||||
#define closesocket close
|
||||
#define MINIUPNPC_IGNORE_EINTR
|
||||
#endif
|
||||
#endif /* #else WIN32 */
|
||||
#ifdef MINIUPNPC_SET_SOCKET_TIMEOUT
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
#if defined(__amigaos__) || defined(__amigaos4__)
|
||||
/* Amiga OS specific stuff */
|
||||
#define TIMEVAL struct timeval
|
||||
#endif
|
||||
|
||||
#include "miniupnpc.h"
|
||||
#include "minissdpc.h"
|
||||
#include "miniwget.h"
|
||||
@@ -85,7 +102,8 @@ LIBSPEC void parserootdesc(const char * buffer, int bufsize, struct IGDdatas * d
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Content-length: nnn */
|
||||
/* getcontentlenfromline() : parse the Content-Length HTTP header line.
|
||||
* Content-length: nnn */
|
||||
static int getcontentlenfromline(const char * p, int n)
|
||||
{
|
||||
static const char contlenstr[] = "content-length";
|
||||
@@ -120,6 +138,10 @@ static int getcontentlenfromline(const char * p, int n)
|
||||
return a;
|
||||
}
|
||||
|
||||
/* getContentLengthAndHeaderLength()
|
||||
* retrieve header length and content length from an HTTP response
|
||||
* TODO : retrieve Transfer-Encoding: header value, in order to support
|
||||
* HTTP/1.1, chunked transfer encoding must be supported. */
|
||||
static void
|
||||
getContentLengthAndHeaderLength(char * p, int n,
|
||||
int * contentlen, int * headerlen)
|
||||
@@ -430,8 +452,11 @@ LIBSPEC struct UPNPDev * upnpDiscover(int delay, const char * multicastif,
|
||||
int n;
|
||||
struct sockaddr_in sockudp_r, sockudp_w;
|
||||
unsigned int mx;
|
||||
#ifdef WIN32
|
||||
/*MIB_IPFORWARDROW ip_forward;*/
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
#if !defined(WIN32) && !defined(__amigaos__) && !defined(__amigaos4__)
|
||||
/* first try to get infos from minissdpd ! */
|
||||
if(!minissdpdsock)
|
||||
minissdpdsock = "/var/run/minissdpd.sock";
|
||||
@@ -467,6 +492,45 @@ LIBSPEC struct UPNPDev * upnpDiscover(int delay, const char * multicastif,
|
||||
sockudp_w.sin_family = AF_INET;
|
||||
sockudp_w.sin_port = htons(PORT);
|
||||
sockudp_w.sin_addr.s_addr = inet_addr(UPNP_MCAST_ADDR);
|
||||
#ifdef WIN32
|
||||
/* This code could help us to use the right Network interface for
|
||||
* SSDP multicast traffic */
|
||||
/* TODO : Get IP associated with the index given in the ip_forward struct
|
||||
* in order to give this ip to setsockopt(sudp, IPPROTO_IP, IP_MULTICAST_IF) */
|
||||
/*
|
||||
if(GetBestRoute(inet_addr("223.255.255.255"), 0, &ip_forward) == NO_ERROR) {
|
||||
DWORD dwRetVal = 0;
|
||||
PMIB_IPADDRTABLE pIPAddrTable;
|
||||
DWORD dwSize = 0;
|
||||
IN_ADDR IPAddr;
|
||||
int i;
|
||||
printf("ifIndex=%lu nextHop=%lx \n", ip_forward.dwForwardIfIndex, ip_forward.dwForwardNextHop);
|
||||
pIPAddrTable = (MIB_IPADDRTABLE *) malloc(sizeof (MIB_IPADDRTABLE));
|
||||
if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) {
|
||||
free(pIPAddrTable);
|
||||
pIPAddrTable = (MIB_IPADDRTABLE *) malloc(dwSize);
|
||||
}
|
||||
if(pIPAddrTable) {
|
||||
dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 );
|
||||
printf("\tNum Entries: %ld\n", pIPAddrTable->dwNumEntries);
|
||||
for (i=0; i < (int) pIPAddrTable->dwNumEntries; i++) {
|
||||
printf("\n\tInterface Index[%d]:\t%ld\n", i, pIPAddrTable->table[i].dwIndex);
|
||||
IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwAddr;
|
||||
printf("\tIP Address[%d]: \t%s\n", i, inet_ntoa(IPAddr) );
|
||||
IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwMask;
|
||||
printf("\tSubnet Mask[%d]: \t%s\n", i, inet_ntoa(IPAddr) );
|
||||
IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwBCastAddr;
|
||||
printf("\tBroadCast[%d]: \t%s (%ld)\n", i, inet_ntoa(IPAddr), pIPAddrTable->table[i].dwBCastAddr);
|
||||
printf("\tReassembly size[%d]:\t%ld\n", i, pIPAddrTable->table[i].dwReasmSize);
|
||||
printf("\tType and State[%d]:", i);
|
||||
printf("\n");
|
||||
}
|
||||
free(pIPAddrTable);
|
||||
pIPAddrTable = NULL;
|
||||
}
|
||||
}
|
||||
*/
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
if (setsockopt(sudp, SOL_SOCKET, SO_REUSEADDR, (const char *)&opt, sizeof (opt)) < 0)
|
||||
@@ -652,7 +716,7 @@ FreeUPNPUrls(struct UPNPUrls * urls)
|
||||
int ReceiveData(int socket, char * data, int length, int timeout)
|
||||
{
|
||||
int n;
|
||||
#ifndef WIN32
|
||||
#if !defined(WIN32) && !defined(__amigaos__) && !defined(__amigaos4__)
|
||||
struct pollfd fds[1]; /* for the poll */
|
||||
#ifdef MINIUPNPC_IGNORE_EINTR
|
||||
do {
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
/* $Id: miniupnpcstrings.h.in,v 1.1 2009/07/09 16:13:31 nanard Exp $ */
|
||||
/* $Id: miniupnpcstrings.h.in,v 1.2 2009/10/30 09:18:18 nanard Exp $ */
|
||||
/* Project: miniupnp
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* Author: Thomas Bernard
|
||||
@@ -9,7 +9,7 @@
|
||||
#define __MINIUPNPCSTRINGS_H__
|
||||
|
||||
#define OS_STRING "OS/version"
|
||||
#define MINIUPNPC_VERSION_STRING "1.3"
|
||||
#define MINIUPNPC_VERSION_STRING "1.4"
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Vendored
+15
-5
@@ -1,4 +1,4 @@
|
||||
/* $Id: miniwget.c,v 1.28 2009/10/10 19:15:35 nanard Exp $ */
|
||||
/* $Id: miniwget.c,v 1.31 2009/12/04 11:29:19 nanard Exp $ */
|
||||
/* Project : miniupnp
|
||||
* Author : Thomas Bernard
|
||||
* Copyright (c) 2005-2009 Thomas Bernard
|
||||
@@ -20,7 +20,11 @@
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#include <sys/param.h>
|
||||
#if defined(__amigaos__) && !defined(__amigaos4__)
|
||||
#define socklen_t int
|
||||
#else
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
#include <sys/socket.h>
|
||||
#include <netdb.h>
|
||||
#include <netinet/in.h>
|
||||
@@ -33,6 +37,9 @@
|
||||
#if defined(__sun) || defined(sun)
|
||||
#define MIN(x,y) (((x)<(y))?(x):(y))
|
||||
#endif
|
||||
#if defined(__amigaos__) || defined(__amigaos4__)
|
||||
#define herror(A) printf("%s\n", A)
|
||||
#endif
|
||||
|
||||
#include "miniupnpcstrings.h"
|
||||
#include "miniwget.h"
|
||||
@@ -132,9 +139,7 @@ miniwget2(const char * url, const char * host,
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifndef WIN32
|
||||
inet_ntop(AF_INET, &saddr.sin_addr, addr_str, addr_str_len);
|
||||
#else
|
||||
#if defined(WIN32) || (defined(__amigaos__) && !defined(__amigaos4__))
|
||||
/* using INT WINAPI WSAAddressToStringA(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD);
|
||||
* But his function make a string with the port : nn.nn.nn.nn:port */
|
||||
/* if(WSAAddressToStringA((SOCKADDR *)&saddr, sizeof(saddr),
|
||||
@@ -143,6 +148,8 @@ miniwget2(const char * url, const char * host,
|
||||
printf("WSAAddressToStringA() failed : %d\n", WSAGetLastError());
|
||||
}*/
|
||||
strncpy(addr_str, inet_ntoa(saddr.sin_addr), addr_str_len);
|
||||
#else
|
||||
inet_ntop(AF_INET, &saddr.sin_addr, addr_str, addr_str_len);
|
||||
#endif
|
||||
}
|
||||
#ifdef DEBUG
|
||||
@@ -151,7 +158,7 @@ miniwget2(const char * url, const char * host,
|
||||
}
|
||||
|
||||
len = snprintf(buf, sizeof(buf),
|
||||
"GET %s HTTP/1.1\r\n"
|
||||
"GET %s HTTP/1.0\r\n"
|
||||
"Host: %s:%d\r\n"
|
||||
"Connection: Close\r\n"
|
||||
"User-Agent: " OS_STRING ", UPnP/1.0, MiniUPnPc/" MINIUPNPC_VERSION_STRING "\r\n"
|
||||
@@ -175,6 +182,9 @@ miniwget2(const char * url, const char * host,
|
||||
}
|
||||
}
|
||||
{
|
||||
/* TODO : in order to support HTTP/1.1, chunked transfer encoding
|
||||
* must be supported. That means parsing of headers must be
|
||||
* added. */
|
||||
int headers=1;
|
||||
char * respbuffer = NULL;
|
||||
int allreadyread = 0;
|
||||
|
||||
Reference in New Issue
Block a user