Changeset 10447


Ignore:
Timestamp:
Apr 5, 2010, 10:44:14 PM (12 years ago)
Author:
livings124
Message:

update miniupnp to 20100405

Location:
trunk
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Transmission.xcodeproj/project.pbxproj

    r10368 r10447  
    110110                A226FDAC0D0CDF20005A7F71 /* libnatpmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C7A118D0D0B2EB800B5701F /* libnatpmp.a */; };
    111111                A22A8D560AEEAFA5007E9CB9 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A22A8D540AEEAFA5007E9CB9 /* Localizable.strings */; };
     112                A22B00B2116A9E9F003315FC /* connecthostport.h in Headers */ = {isa = PBXBuildFile; fileRef = A22B00AF116A9E90003315FC /* connecthostport.h */; };
     113                A22B00B3116A9EA4003315FC /* connecthostport.c in Sources */ = {isa = PBXBuildFile; fileRef = A22B00AE116A9E90003315FC /* connecthostport.c */; };
    112114                A22CFB820FB66EF30009BD3E /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A22CFB810FB66EF30009BD3E /* Carbon.framework */; };
    113115                A22CFCA80FC24ED80009BD3E /* tr-dht.c in Sources */ = {isa = PBXBuildFile; fileRef = A22CFCA60FC24ED80009BD3E /* tr-dht.c */; };
     
    552554                A2265F3F0B5EF5F40093DDA5 /* FileNameCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FileNameCell.h; path = macosx/FileNameCell.h; sourceTree = "<group>"; };
    553555                A2265F400B5EF5F40093DDA5 /* FileNameCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = FileNameCell.m; path = macosx/FileNameCell.m; sourceTree = "<group>"; };
     556                A22B00AE116A9E90003315FC /* connecthostport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = connecthostport.c; path = "third-party/miniupnp/connecthostport.c"; sourceTree = "<group>"; };
     557                A22B00AF116A9E90003315FC /* connecthostport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = connecthostport.h; path = "third-party/miniupnp/connecthostport.h"; sourceTree = "<group>"; };
    554558                A22CF7AC0FA3505F0009BD3E /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = macosx/it.lproj/GroupRules.xib; sourceTree = "<group>"; };
    555559                A22CF7B20FA3517E0009BD3E /* zh_TW */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_TW; path = macosx/zh_TW.lproj/GroupRules.xib; sourceTree = "<group>"; };
     
    13531357                        isa = PBXGroup;
    13541358                        children = (
     1359                                A22B00AE116A9E90003315FC /* connecthostport.c */,
    13551360                                BE1183610CE160D50002D0F3 /* igd_desc_parse.c */,
    13561361                                BE1183620CE160D50002D0F3 /* minixml.c */,
     
    13621367                                BE1183680CE160D50002D0F3 /* miniupnpc.c */,
    13631368                                BE11834D0CE160C50002D0F3 /* bsdqueue.h */,
     1369                                A22B00AF116A9E90003315FC /* connecthostport.h */,
    13641370                                BE11834E0CE160C50002D0F3 /* declspec.h */,
    13651371                                BE11834F0CE160C50002D0F3 /* igd_desc_parse.h */,
     
    15771583                                A254853C0EB66CD4004539DA /* codelength.h in Headers */,
    15781584                                A2F8CD430F3D0F4A00DB356A /* miniupnpcstrings.h in Headers */,
     1585                                A22B00B2116A9E9F003315FC /* connecthostport.h in Headers */,
    15791586                        );
    15801587                        runOnlyForDeploymentPostprocessing = 0;
     
    21162123                                BE11836F0CE160D50002D0F3 /* upnpcommands.c in Sources */,
    21172124                                BE1183700CE160D50002D0F3 /* miniupnpc.c in Sources */,
     2125                                A22B00B3116A9EA4003315FC /* connecthostport.c in Sources */,
    21182126                        );
    21192127                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/third-party/miniupnp/Changelog.txt

    r10285 r10447  
    1 $Id: Changelog.txt,v 1.105 2010/01/06 10:03:53 nanard Exp $
     1$Id: Changelog.txt,v 1.110 2010/04/05 12:09:51 nanard Exp $
    22miniUPnP client Changelog.
    33
     42010/04/05:
     5  Create a connecthostport.h/.c with connecthostport() function
     6  and use it in miniwget and miniupnpc.
     7  Use getnameinfo() instead of inet_ntop or inet_ntoa
     8  Work to make miniupnpc IPV6 compatible...
     9  Add java test code.
     10
     112010/04/04:
     12  Use getaddrinfo() instead of gethostbyname() in miniwget.
     13
    4142010/01/06:
    5   #define _DARWIN_C_SOURCE for macosx
     15  #define _DARWIN_C_SOURCE for Mac OS X
    616
    7172009/12/19:
  • trunk/third-party/miniupnp/Makefile.am

    r10286 r10447  
    44
    55libminiupnp_a_SOURCES = \
     6    connecthostport.c \
    67    igd_desc_parse.c \
    78    minisoap.c \
     
    1617    bsdqueue.h \
    1718    codelength.h \
     19    connecthostport.h \
    1820    declspec.h \
    1921    igd_desc_parse.h \
  • trunk/third-party/miniupnp/miniupnpc.c

    r10285 r10447  
    1 /* $Id: miniupnpc.c,v 1.74 2010/01/09 23:54:40 nanard Exp $ */
     1/* $Id: miniupnpc.c,v 1.77 2010/04/05 12:34:05 nanard Exp $ */
    22/* Project : miniupnp
    33 * Author : Thomas BERNARD
     
    5151#include <netinet/in.h>
    5252#include <arpa/inet.h>
     53#include <netdb.h>
    5354#if !defined(__amigaos__) && !defined(__amigaos4__)
    5455#include <poll.h>
    5556#endif
    56 #include <netdb.h>
    5757#include <strings.h>
    5858#include <errno.h>
     
    7474#include "minixml.h"
    7575#include "upnpcommands.h"
     76#include "connecthostport.h"
    7677
    7778#ifdef WIN32
     
    181182                      char * buffer, int * bufsize)
    182183{
    183         struct sockaddr_in dest;
    184184        char hostname[MAXHOSTNAMELEN+1];
    185185        unsigned short port = 0;
     
    191191    int n;
    192192        int contentlen, headerlen;      /* for the response */
    193 #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT
    194         struct timeval timeout;
    195 #endif
     193
    196194        snprintf(soapact, sizeof(soapact), "%s#%s", service, action);
    197195        if(args==NULL)
     
    262260        if(s<0)
    263261        {
    264                 s = socket(PF_INET, SOCK_STREAM, 0);
    265                 if(s<0)
     262                s = connecthostport(hostname, port);
     263                if(s < 0)
    266264                {
    267                         PRINT_SOCKET_ERROR("socket");
    268                         *bufsize = 0;
    269                         return -1;
    270                 }
    271 #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT
    272                 /* setting a 3 seconds timeout for the connect() call */
    273                 timeout.tv_sec = 3;
    274                 timeout.tv_usec = 0;
    275                 if(setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(struct timeval)) < 0)
    276                 {
    277                         PRINT_SOCKET_ERROR("setsockopt");
    278                 }
    279                 timeout.tv_sec = 3;
    280                 timeout.tv_usec = 0;
    281                 if(setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(struct timeval)) < 0)
    282                 {
    283                         PRINT_SOCKET_ERROR("setsockopt");
    284                 }
    285 #endif
    286                 dest.sin_family = AF_INET;
    287                 dest.sin_port = htons(port);
    288                 dest.sin_addr.s_addr = inet_addr(hostname);
    289         n = connect(s, (struct sockaddr *)&dest, sizeof(struct sockaddr));
    290 #ifdef MINIUPNPC_IGNORE_EINTR
    291         while(n < 0 && errno == EINTR)
    292                 {
    293                         socklen_t len;
    294                         fd_set wset;
    295                         int err;
    296                         FD_ZERO(&wset);
    297                         FD_SET(s, &wset);
    298                         if((n = select(s + 1, NULL, &wset, NULL, NULL)) == -1 && errno == EINTR)
    299                                 continue;
    300                         /*len = 0;*/
    301                         /*n = getpeername(s, NULL, &len);*/
    302                         len = sizeof(err);
    303                         if(getsockopt(s, SOL_SOCKET, SO_ERROR, &err, &len) < 0) {
    304                                 PRINT_SOCKET_ERROR("getsockopt");
    305                                 closesocket(s);
    306                                 return -1;
    307                         }
    308                         if(err != 0) {
    309                                 errno = err;
    310                                 n = -1;
    311                         } else {
    312                                 n = 0;
    313                         }
    314                 }
    315 #endif
    316                 if(n < 0)
    317         {
    318                         PRINT_SOCKET_ERROR("connect");
    319                         closesocket(s);
    320265                        *bufsize = 0;
    321266                        return -1;
     
    451396        int sudp;
    452397        int n;
    453         struct sockaddr_in sockudp_r, sockudp_w;
     398        struct sockaddr sockudp_r;
    454399        unsigned int mx;
     400        int rv;
     401        struct addrinfo hints, *servinfo, *p;
    455402#ifdef WIN32
    456403        /*MIB_IPFORWARDROW ip_forward;*/
     
    482429                return NULL;
    483430        }
    484     /* reception */
    485     memset(&sockudp_r, 0, sizeof(struct sockaddr_in));
    486     sockudp_r.sin_family = AF_INET;
    487         if(sameport)
    488         sockudp_r.sin_port = htons(PORT);
    489     sockudp_r.sin_addr.s_addr = INADDR_ANY;
    490     /* emission */
    491     memset(&sockudp_w, 0, sizeof(struct sockaddr_in));
    492     sockudp_w.sin_family = AF_INET;
    493     sockudp_w.sin_port = htons(PORT);
    494     sockudp_w.sin_addr.s_addr = inet_addr(UPNP_MCAST_ADDR);
     431        /* reception */
     432        memset(&sockudp_r, 0, sizeof(struct sockaddr));
     433        if(0/*ipv6*/) {
     434                struct sockaddr_in6 * p = (struct sockaddr_in6 *)&sockudp_r;
     435                p->sin6_family = AF_INET6;
     436                if(sameport)
     437                        p->sin6_port = htons(PORT);
     438                p->sin6_addr = in6addr_any;//IN6ADDR_ANY_INIT;/*INADDR_ANY;*/
     439        } else {
     440                struct sockaddr_in * p = (struct sockaddr_in *)&sockudp_r;
     441                p->sin_family = AF_INET;
     442                if(sameport)
     443                        p->sin_port = htons(PORT);
     444                p->sin_addr.s_addr = INADDR_ANY;
     445        }
     446#if 0
     447        /* emission */
     448        memset(&sockudp_w, 0, sizeof(struct sockaddr_in));
     449        sockudp_w.sin_family = AF_INET;
     450        sockudp_w.sin_port = htons(PORT);
     451        sockudp_w.sin_addr.s_addr = inet_addr(UPNP_MCAST_ADDR);
     452#endif
    495453#ifdef WIN32
    496454/* This code could help us to use the right Network interface for
     
    547505                struct in_addr mc_if;
    548506                mc_if.s_addr = inet_addr(multicastif);
    549         sockudp_r.sin_addr.s_addr = mc_if.s_addr;
     507                if(0/*ipv6*/) {
     508                } else {
     509                        ((struct sockaddr_in *)&sockudp_r)->sin_addr.s_addr = mc_if.s_addr;
     510                }
    550511                if(setsockopt(sudp, IPPROTO_IP, IP_MULTICAST_IF, (const char *)&mc_if, sizeof(mc_if)) < 0)
    551512                {
     
    555516
    556517        /* Avant d'envoyer le paquet on bind pour recevoir la reponse */
    557     if (bind(sudp, (struct sockaddr *)&sockudp_r, sizeof(struct sockaddr_in)) != 0)
     518    if (bind(sudp, &sockudp_r, 0/*ipv6*/?sizeof(struct sockaddr_in6):sizeof(struct sockaddr_in)) != 0)
    558519        {
    559520        PRINT_SOCKET_ERROR("bind");
     
    573534                             MSearchMsgFmt, deviceList[deviceIndex++], mx);
    574535                /*printf("Sending %s", bufr);*/
     536#if 0
    575537                n = sendto(sudp, bufr, n, 0,
    576538                           (struct sockaddr *)&sockudp_w, sizeof(struct sockaddr_in));
    577539                if (n < 0) {
    578540                        PRINT_SOCKET_ERROR("sendto");
     541                        closesocket(sudp);
     542                        return devlist;
     543                }
     544#endif
     545                memset(&hints, 0, sizeof(hints));
     546                hints.ai_family = AF_UNSPEC; // AF_INET6 or AF_INET
     547                hints.ai_socktype = SOCK_DGRAM;
     548                /*hints.ai_flags = */
     549                if ((rv = getaddrinfo(UPNP_MCAST_ADDR, XSTR(PORT), &hints, &servinfo)) != 0) {
     550#ifdef WIN32
     551                    fprintf(stderr, "getaddrinfo() failed: %d\n", rv);
     552#else
     553                    fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
     554#endif
     555                    return devlist;
     556                }
     557                for(p = servinfo; p; p = p->ai_next) {
     558                        n = sendto(sudp, bufr, n, 0, p->ai_addr, p->ai_addrlen);
     559                        if (n < 0) {
     560                                PRINT_SOCKET_ERROR("sendto");
     561                                continue;
     562                        }
     563                }
     564                freeaddrinfo(servinfo);
     565                if(n < 0) {
    579566                        closesocket(sudp);
    580567                        return devlist;
  • trunk/third-party/miniupnp/miniwget.c

    r10285 r10447  
    1 /* $Id: miniwget.c,v 1.31 2009/12/04 11:29:19 nanard Exp $ */
     1/* $Id: miniwget.c,v 1.36 2010/04/05 12:34:05 nanard Exp $ */
    22/* Project : miniupnp
    33 * Author : Thomas Bernard
    4  * Copyright (c) 2005-2009 Thomas Bernard
     4 * Copyright (c) 2005-2010 Thomas Bernard
    55 * This software is subject to the conditions detailed in the
    6  * LICENCE file provided in this distribution.
    7  * */
     6 * LICENCE file provided in this distribution. */
     7 
    88#include <stdio.h>
    99#include <stdlib.h>
     
    1212#ifdef WIN32
    1313#include <winsock2.h>
     14#include <ws2tcpip.h>
    1415#include <io.h>
    1516#define MAXHOSTNAMELEN 64
    1617#define MIN(x,y) (((x)<(y))?(x):(y))
    1718#define snprintf _snprintf
    18 #define herror
    1919#define socklen_t int
    20 #else
     20#else /* #ifdef WIN32 */
    2121#include <unistd.h>
    2222#include <sys/param.h>
    2323#if defined(__amigaos__) && !defined(__amigaos4__)
    2424#define socklen_t int
    25 #else
     25#else /* #if defined(__amigaos__) && !defined(__amigaos4__) */
    2626#include <sys/select.h>
    27 #endif
     27#endif /* #else defined(__amigaos__) && !defined(__amigaos4__) */
    2828#include <sys/socket.h>
     29#include <arpa/inet.h>
    2930#include <netdb.h>
    30 #include <netinet/in.h>
    31 #include <arpa/inet.h>
    32 #include <errno.h>
    33 #include <time.h>
    3431#define closesocket close
     32/* defining MINIUPNPC_IGNORE_EINTR enable the ignore of interruptions
     33 * during the connect() call */
    3534#define MINIUPNPC_IGNORE_EINTR
    36 #endif
     35#endif /* #else WIN32 */
    3736#if defined(__sun) || defined(sun)
    3837#define MIN(x,y) (((x)<(y))?(x):(y))
    3938#endif
    40 #if defined(__amigaos__) || defined(__amigaos4__)
    41 #define herror(A) printf("%s\n", A)
    42 #endif
    4339
    4440#include "miniupnpcstrings.h"
    4541#include "miniwget.h"
     42#include "connecthostport.h"
    4643
    4744/* miniwget2() :
    48  * */
     45 * do all the work.
     46 * Return NULL if something failed. */
    4947static void *
    5048miniwget2(const char * url, const char * host,
     
    5452        char buf[2048];
    5553    int s;
    56         struct sockaddr_in dest;
    57         struct hostent *hp;
    5854        int n;
    5955        int len;
    6056        int sent;
    61 #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT
    62         struct timeval timeout;
    63 #endif
     57
    6458        *size = 0;
    65         hp = gethostbyname(host);
    66         if(hp==NULL)
    67         {
    68                 herror(host);
     59        s = connecthostport(host, port);
     60        if(s < 0)
    6961                return NULL;
    70         }
    71         /*  memcpy((char *)&dest.sin_addr, hp->h_addr, hp->h_length);  */
    72         memcpy(&dest.sin_addr, hp->h_addr, sizeof(dest.sin_addr));
    73         memset(dest.sin_zero, 0, sizeof(dest.sin_zero));
    74         s = socket(PF_INET, SOCK_STREAM, 0);
    75         if(s < 0)
    76         {
    77                 perror("socket");
    78                 return NULL;
    79         }
    80 #ifdef MINIUPNPC_SET_SOCKET_TIMEOUT
    81         /* setting a 3 seconds timeout for the connect() call */
    82         timeout.tv_sec = 3;
    83         timeout.tv_usec = 0;
    84         if(setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(struct timeval)) < 0)
    85         {
    86                 perror("setsockopt");
    87         }
    88         timeout.tv_sec = 3;
    89         timeout.tv_usec = 0;
    90         if(setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(struct timeval)) < 0)
    91         {
    92                 perror("setsockopt");
    93         }
    94 #endif
    95         dest.sin_family = AF_INET;
    96         dest.sin_port = htons(port);
    97         n = connect(s, (struct sockaddr *)&dest, sizeof(struct sockaddr_in));
    98 #ifdef MINIUPNPC_IGNORE_EINTR
    99         while(n < 0 && errno == EINTR)
    100         {
    101                 socklen_t len;
    102                 fd_set wset;
    103                 int err;
    104                 FD_ZERO(&wset);
    105                 FD_SET(s, &wset);
    106                 if((n = select(s + 1, NULL, &wset, NULL, NULL)) == -1 && errno == EINTR)
    107                         continue;
    108                 /*len = 0;*/
    109                 /*n = getpeername(s, NULL, &len);*/
    110                 len = sizeof(err);
    111                 if(getsockopt(s, SOL_SOCKET, SO_ERROR, &err, &len) < 0) {
    112                         perror("getsockopt");
    113                         closesocket(s);
    114                         return NULL;
    115                 }
    116                 if(err != 0) {
    117                         errno = err;
    118                         n = -1;
    119                 }
    120         }
    121 #endif
    122         if(n<0)
    123         {
    124                 perror("connect");
    125                 closesocket(s);
    126                 return NULL;
    127         }
    12862
    12963        /* get address for caller ! */
    13064        if(addr_str)
    13165        {
    132                 struct sockaddr_in saddr;
     66                struct sockaddr saddr;
    13367                socklen_t saddrlen;
    13468
    13569                saddrlen = sizeof(saddr);
    136                 if(getsockname(s, (struct sockaddr *)&saddr, &saddrlen) < 0)
     70                if(getsockname(s, &saddr, &saddrlen) < 0)
    13771                {
    13872                        perror("getsockname");
     
    14074                else
    14175                {
    142 #if defined(WIN32) || (defined(__amigaos__) && !defined(__amigaos4__))
     76#if defined(__amigaos__) && !defined(__amigaos4__)
    14377        /* using INT WINAPI WSAAddressToStringA(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD);
    14478     * But his function make a string with the port :  nn.nn.nn.nn:port */
     
    14882                    printf("WSAAddressToStringA() failed : %d\n", WSAGetLastError());
    14983                }*/
    150                         strncpy(addr_str, inet_ntoa(saddr.sin_addr), addr_str_len);
     84                        strncpy(addr_str, inet_ntoa(((struct sockaddr_in *)&saddr)->sin_addr), addr_str_len);
    15185#else
    152                         inet_ntop(AF_INET, &saddr.sin_addr, addr_str, addr_str_len);
     86                        /*inet_ntop(AF_INET, &saddr.sin_addr, addr_str, addr_str_len);*/
     87                        n = getnameinfo(&saddr, saddrlen,
     88                                        addr_str, addr_str_len,
     89                                        NULL, 0,
     90                                        NI_NUMERICHOST | NI_NUMERICSERV);
     91                        if(n != 0) {
     92#ifdef WIN32
     93                                fprintf(stderr, "getnameinfo() failed : %d\n", n);
     94#else
     95                                fprintf(stderr, "getnameinfo() failed : %s\n", gai_strerror(n));
     96#endif
     97                        }
    15398#endif
    15499                }
Note: See TracChangeset for help on using the changeset viewer.