Changeset 5094


Ignore:
Timestamp:
Feb 23, 2008, 3:31:39 PM (14 years ago)
Author:
charles
Message:

update to miniupnpc-1.0

Location:
trunk/third-party/miniupnp
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/third-party/miniupnp/README

    r4251 r5094  
    11MiniUPnP is written by Thomas Bernard.
    22Its homepage is http://miniupnp.free.fr/
    3 This code is from the miniupnpc-20071213 snapshot
     3This is from version 1.0 of miniupnpc
  • trunk/third-party/miniupnp/minisoap.c

    r5087 r5094  
    1 /* $Id: minisoap.c,v 1.14 2008/02/16 23:46:11 nanard Exp $ */
     1/* $Id: minisoap.c,v 1.15 2008/02/17 17:57:07 nanard Exp $ */
    22/* Project : miniupnp
    33 * Author : Thomas Bernard
     
    4545        /* TODO: AVOID MALLOC */
    4646        p = malloc(headerssize+bodysize);
     47        if(!p)
     48          return 0;
    4749        memcpy(p, headers, headerssize);
    4850        memcpy(p+headerssize, body, bodysize);
     
    7678{
    7779        int bodysize;
    78         char headerbuf[1024];
     80        char headerbuf[512];
    7981        int headerssize;
     82        char portstr[8];
    8083        bodysize = (int)strlen(body);
    8184        /* We are not using keep-alive HTTP connections.
     
    8386         * This is the default with HTTP/1.0 */
    8487    /* Connection: Close is normally there only in HTTP/1.1 but who knows */
     88        portstr[0] = '\0';
     89        if(port != 80)
     90                snprintf(portstr, sizeof(portstr), ":%hu", port);
    8591        headerssize = snprintf(headerbuf, sizeof(headerbuf),
    86 /*                       "POST %s HTTP/1.1\r\n"*/
    87                        "POST %s HTTP/1.0\r\n"
    88                            "Host: %s:%d\r\n"
     92                       "POST %s HTTP/1.1\r\n"
     93/*                       "POST %s HTTP/1.0\r\n"*/
     94                           "Host: %s%s\r\n"
    8995                                           "User-Agent: POSIX, UPnP/1.0, miniUPnPc/1.0\r\n"
    9096                           "Content-Length: %d\r\n"
     
    9298                                           "SOAPAction: \"%s\"\r\n"
    9399                                           "Connection: Close\r\n"
     100                                           "Cache-Control: no-cache\r\n"        /* ??? */
     101                                           "Pragma: no-cache\r\n"
    94102                                           "\r\n",
    95                                            url, host, port, bodysize, action);
     103                                           url, host, portstr, bodysize, action);
     104#ifdef DEBUG
     105        printf("SOAP request : headersize=%d bodysize=%d\n",
     106               headerssize, bodysize);
     107        /*printf("%s", headerbuf);*/
     108#endif
    96109        return httpWrite(fd, body, bodysize, headerbuf, headerssize);
    97110}
  • trunk/third-party/miniupnp/miniupnpc.c

    r5087 r5094  
    1 /* $Id: miniupnpc.c,v 1.50 2008/02/03 22:19:45 nanard Exp $ */
     1/* $Id: miniupnpc.c,v 1.52 2008/02/18 13:28:33 nanard Exp $ */
    22/* Project : miniupnp
    33 * Author : Thomas BERNARD
     
    129129/* simpleUPnPcommand :
    130130 * not so simple !
    131  * TODO: return some error codes */
     131 * return values :
     132 *   0 - OK
     133 *  -1 - error */
    132134int simpleUPnPcommand(int s, const char * url, const char * service,
    133135                      const char * action, struct UPNParg * args,
     
    222224        {
    223225                s = socket(PF_INET, SOCK_STREAM, 0);
     226                if(s<0)
     227                {
     228                        PRINT_SOCKET_ERROR("socket");
     229                        *bufsize = 0;
     230                        return -1;
     231                }
    224232                dest.sin_family = AF_INET;
    225233                dest.sin_port = htons(port);
     
    228236                {
    229237                        PRINT_SOCKET_ERROR("connect");
     238                        closesocket(s);
    230239                        *bufsize = 0;
    231240                        return -1;
     
    234243
    235244        n = soapPostSubmit(s, path, hostname, port, soapact, soapbody);
     245        if(n<=0) {
     246#ifdef DEBUG
     247                printf("Error sending SOAP request\n");
     248#endif
     249                closesocket(s);
     250                return -1;
     251        }
    236252
    237253        contentlen = -1;
     
    247263                                                &contentlen, &headerlen);
    248264#ifdef DEBUG
    249                 printf("n=%d bufsize=%d ContLen=%d HeadLen=%d\n",
     265                printf("received n=%dbytes bufsize=%d ContLen=%d HeadLen=%d\n",
    250266                       n, *bufsize, contentlen, headerlen);
    251267#endif
     268                /* break if we received everything */
    252269                if(contentlen > 0 && headerlen > 0 && *bufsize >= contentlen+headerlen)
    253270                        break;
     
    255272       
    256273        closesocket(s);
    257         return -1;
     274        return 0;
    258275}
    259276
     
    620637        unsigned int uptime;
    621638        status[0] = '\0';
    622         UPNP_GetStatusInfo(urls->controlURL, data->servicetype, status, &uptime);
     639        UPNP_GetStatusInfo(urls->controlURL, data->servicetype,
     640                           status, &uptime, NULL);
    623641        if(0 == strcmp("Connected", status))
    624642        {
  • trunk/third-party/miniupnp/upnpcommands.c

    r4251 r5094  
    1 /* $Id: upnpcommands.c,v 1.18 2007/12/19 14:56:14 nanard Exp $ */
     1/* $Id: upnpcommands.c,v 1.19 2008/02/18 13:27:23 nanard Exp $ */
    22/* Project : miniupnp
    33 * Author : Thomas Bernard
     
    1515my_atoui(const char * s)
    1616{
    17         return (unsigned int)strtoul(s, NULL, 0);
     17        return s ? ((unsigned int)strtoul(s, NULL, 0)) : 0;
    1818}
    1919
     
    3333        /*DisplayNameValueList(buffer, bufsize);*/
    3434        p = GetValueFromNameValueList(&pdata, "NewTotalBytesSent");
    35         if(p)
    36                 r = my_atoui(p);
     35        r = my_atoui(p);
    3736        ClearNameValueList(&pdata);
    3837        return r;
     
    5453        /*DisplayNameValueList(buffer, bufsize);*/
    5554        p = GetValueFromNameValueList(&pdata, "NewTotalBytesReceived");
    56         if(p)
    57                 r = my_atoui(p);
     55        r = my_atoui(p);
    5856        ClearNameValueList(&pdata);
    5957        return r;
     
    7573        /*DisplayNameValueList(buffer, bufsize);*/
    7674        p = GetValueFromNameValueList(&pdata, "NewTotalPacketsSent");
    77         if(p)
    78                 r = my_atoui(p);
     75        r = my_atoui(p);
    7976        ClearNameValueList(&pdata);
    8077        return r;
     
    9693        /*DisplayNameValueList(buffer, bufsize);*/
    9794        p = GetValueFromNameValueList(&pdata, "NewTotalPacketsReceived");
    98         if(p)
    99                 r = my_atoui(p);
     95        r = my_atoui(p);
    10096        ClearNameValueList(&pdata);
    10197        return r;
     
    104100/* UPNP_GetStatusInfo() call the corresponding UPNP method
    105101 * returns the current status and uptime */
    106 void UPNP_GetStatusInfo(const char * controlURL,
    107                                                                                                 const char * servicetype,
    108                                                                                                 char * status,
    109                                                                                                 unsigned int * uptime)
    110 {
    111         struct NameValueParserData pdata;
    112         char buffer[4096];
    113         int bufsize = 4096;
    114         char * p;
    115         char* up;
     102int UPNP_GetStatusInfo(const char * controlURL,
     103                                        const char * servicetype,
     104                                        char * status,
     105                                        unsigned int * uptime,
     106                                        char * lastconnerror)
     107{
     108        struct NameValueParserData pdata;
     109        char buffer[4096];
     110        int bufsize = 4096;
     111        char * p;
     112        char * up;
     113        char * err;
     114        int ret = UPNPCOMMAND_UNKNOWN_ERROR;
    116115
    117116        if(!status && !uptime)
    118                 return;
     117                return UPNPCOMMAND_INVALID_ARGS;
    119118
    120119        simpleUPnPcommand(-1, controlURL, servicetype, "GetStatusInfo", 0, buffer, &bufsize);
     
    123122        up = GetValueFromNameValueList(&pdata, "NewUptime");
    124123        p = GetValueFromNameValueList(&pdata, "NewConnectionStatus");
    125 
    126         if(status)
    127         {
     124        err = GetValueFromNameValueList(&pdata, "NewLastConnectionError");
     125        if(p && up)
     126          ret = UPNPCOMMAND_SUCCESS;
     127
     128        if(status) {
    128129                if(p){
    129130                        strncpy(status, p, 64 );
     
    133134        }
    134135
    135         if(uptime){
     136        if(uptime) {
    136137                if(up)
    137138                        sscanf(up,"%u",uptime);
     
    140141        }
    141142
    142         ClearNameValueList(&pdata);
     143        if(lastconnerror) {
     144                if(err) {
     145                        strncpy(lastconnerror, err, 64 );
     146                        lastconnerror[63] = '\0';
     147                } else
     148                        lastconnerror[0] = '\0';
     149        }
     150
     151        p = GetValueFromNameValueList(&pdata, "errorCode");
     152        if(p) {
     153                ret = UPNPCOMMAND_UNKNOWN_ERROR;
     154                sscanf(p, "%d", &ret);
     155        }
     156        ClearNameValueList(&pdata);
     157        return ret;
    143158}
    144159
    145160/* UPNP_GetConnectionTypeInfo() call the corresponding UPNP method
    146161 * returns the connection type */
    147 void UPNP_GetConnectionTypeInfo(const char * controlURL,
    148                                 const char * servicetype,
    149                                                                 char * connectionType)
    150 {
    151         struct NameValueParserData pdata;
    152         char buffer[4096];
    153         int bufsize = 4096;
    154         char * p;
     162int UPNP_GetConnectionTypeInfo(const char * controlURL,
     163                               const char * servicetype,
     164                               char * connectionType)
     165{
     166        struct NameValueParserData pdata;
     167        char buffer[4096];
     168        int bufsize = 4096;
     169        char * p;
     170        int ret = UPNPCOMMAND_UNKNOWN_ERROR;
    155171
    156172        if(!connectionType)
    157                 return;
    158 
     173                return UPNPCOMMAND_INVALID_ARGS;
    159174
    160175        simpleUPnPcommand(-1, controlURL, servicetype,
     
    164179        /*p = GetValueFromNameValueList(&pdata, "NewPossibleConnectionTypes");*/
    165180        /* PossibleConnectionTypes will have several values.... */
    166         if(connectionType)
    167         {
    168                 if(p){
    169                         strncpy(connectionType, p, 64 );
    170                         connectionType[63] = '\0';
    171                 }       else
    172                         connectionType[0] = '\0';
    173         }
    174         ClearNameValueList(&pdata);
     181        if(p) {
     182                strncpy(connectionType, p, 64 );
     183                connectionType[63] = '\0';
     184                ret = UPNPCOMMAND_SUCCESS;
     185        } else
     186                connectionType[0] = '\0';
     187        p = GetValueFromNameValueList(&pdata, "errorCode");
     188        if(p) {
     189                ret = UPNPCOMMAND_UNKNOWN_ERROR;
     190                sscanf(p, "%d", &ret);
     191        }
     192        ClearNameValueList(&pdata);
     193        return ret;
    175194}
    176195
     
    180199 * Note : GetLinkLayerMaxBitRates belongs to WANPPPConnection:1 only
    181200 * We can use the GetCommonLinkProperties from WANCommonInterfaceConfig:1 */
    182 void UPNP_GetLinkLayerMaxBitRates(const char * controlURL, const char * servicetype, unsigned int * bitrateDown, unsigned int* bitrateUp)
    183 {
    184         struct NameValueParserData pdata;
    185         char buffer[4096];
    186         int bufsize = 4096;
     201int UPNP_GetLinkLayerMaxBitRates(const char * controlURL, const char * servicetype, unsigned int * bitrateDown, unsigned int* bitrateUp)
     202{
     203        struct NameValueParserData pdata;
     204        char buffer[4096];
     205        int bufsize = 4096;
     206        int ret = UPNPCOMMAND_UNKNOWN_ERROR;
    187207        char * down;
    188         char* up;
     208        char * up;
     209        char * p;
    189210
    190211        if(!bitrateDown && !bitrateUp)
    191                 return;
     212                return UPNPCOMMAND_INVALID_ARGS;
    192213
    193214        /* shouldn't we use GetCommonLinkProperties ? */
     
    203224        /*GetValueFromNameValueList(&pdata, "NewWANAccessType");*/
    204225        /*GetValueFromNameValueList(&pdata, "NewPhysicalLinkSatus");*/
     226        if(down && up)
     227                ret = UPNPCOMMAND_SUCCESS;
    205228
    206229        if(bitrateDown)
     
    219242                        *bitrateUp = 0;
    220243        }
    221         ClearNameValueList(&pdata);
     244        p = GetValueFromNameValueList(&pdata, "errorCode");
     245        if(p) {
     246                ret = UPNPCOMMAND_UNKNOWN_ERROR;
     247                sscanf(p, "%d", &ret);
     248        }
     249        ClearNameValueList(&pdata);
     250        return ret;
    222251}
    223252
     
    248277
    249278        simpleUPnPcommand(-1, controlURL, servicetype, "GetExternalIPAddress", 0, buffer, &bufsize);
    250         /*fd = simpleUPnPcommand(fd, controlURL, data.servicetype, "GetExternalIPAddress", 0, buffer, &bufsize);*/
    251279        /*DisplayNameValueList(buffer, bufsize);*/
    252280        ParseNameValue(buffer, bufsize, &pdata);
     
    305333        AddPortMappingArgs[7].val = "0";
    306334        simpleUPnPcommand(-1, controlURL, servicetype, "AddPortMapping", AddPortMappingArgs, buffer, &bufsize);
    307         /*fd = simpleUPnPcommand(fd, controlURL, data.servicetype, "AddPortMapping", AddPortMappingArgs, buffer, &bufsize);*/
    308335        /*DisplayNameValueList(buffer, bufsize);*/
    309336        /*buffer[bufsize] = '\0';*/
  • trunk/third-party/miniupnp/upnpcommands.h

    r4251 r5094  
    1 /* $Id: upnpcommands.h,v 1.12 2007/12/19 14:56:15 nanard Exp $ */
     1/* $Id: upnpcommands.h,v 1.13 2008/02/18 13:27:24 nanard Exp $ */
    22/* Miniupnp project : http://miniupnp.free.fr/
    33 * Author : Thomas Bernard
     
    3636                                        const char * servicetype);
    3737
    38 LIBSPEC void
     38/* UPNP_GetStatusInfo()
     39 * status and lastconnerror are 64 byte buffers
     40 * Return values :
     41 * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
     42 * or a UPnP Error code */
     43LIBSPEC int
    3944UPNP_GetStatusInfo(const char * controlURL,
    4045                               const char * servicetype,
    4146                                   char * status,
    42                                    unsigned int * uptime);
     47                                   unsigned int * uptime,
     48                   char * lastconnerror);
    4349
    44 LIBSPEC void
     50/* UPNP_GetConnectionTypeInfo()
     51 * argument connectionType is a 64 character buffer
     52 * Return Values :
     53 * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
     54 * or a UPnP Error code */
     55LIBSPEC int
    4556UPNP_GetConnectionTypeInfo(const char * controlURL,
    4657                           const char * servicetype,
     
    6374                          char * extIpAdd);
    6475
    65 LIBSPEC void
     76/* UPNP_GetLinkLayerMaxBitRates()
     77 * call WANCommonInterfaceConfig:1#GetCommonLinkProperties
     78 *
     79 * return values :
     80 * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
     81 * or a UPnP Error Code. */
     82LIBSPEC int
    6683UPNP_GetLinkLayerMaxBitRates(const char* controlURL,
    6784                                                        const char* servicetype,
     
    112129                       const char * extPort, const char * proto);
    113130
     131/* UPNP_GetPortMappingNumberOfEntries()
     132 * not supported by all routers */
    114133LIBSPEC int
    115134UPNP_GetPortMappingNumberOfEntries(const char* controlURL, const char* servicetype, unsigned int * num);
     
    117136/* UPNP_GetSpecificPortMappingEntry retrieves an existing port mapping
    118137 * the result is returned in the intClient and intPort strings
    119  * please provide 16 and 6 bytes of data */
     138 * please provide 16 and 6 bytes of data
     139 *
     140 * return value :
     141 * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
     142 * or a UPnP Error Code. */
    120143LIBSPEC int
    121144UPNP_GetSpecificPortMappingEntry(const char * controlURL,
     
    127150
    128151/* UPNP_GetGenericPortMappingEntry()
     152 *
     153 * return value :
     154 * UPNPCOMMAND_SUCCESS, UPNPCOMMAND_INVALID_ARGS, UPNPCOMMAND_UNKNOWN_ERROR
     155 * or a UPnP Error Code.
    129156 *
    130157 * Possible UPNP Error codes :
  • trunk/third-party/miniupnp/upnpreplyparse.c

    r3731 r5094  
    1 /* $Id: upnpreplyparse.c,v 1.9 2007/05/15 18:14:08 nanard Exp $ */
     1/* $Id: upnpreplyparse.c,v 1.10 2008/02/21 13:05:27 nanard Exp $ */
    22/* MiniUPnP project
    33 * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
     
    109109/* debug all-in-one function
    110110 * do parsing then display to stdout */
     111#ifdef DEBUG
    111112void
    112113DisplayNameValueList(char * buffer, int bufsize)
     
    123124    ClearNameValueList(&pdata);
    124125}
     126#endif
    125127
  • trunk/third-party/miniupnp/upnpreplyparse.h

    r3731 r5094  
    1 /* $Id: upnpreplyparse.h,v 1.7 2007/10/06 10:02:54 nanard Exp $ */
     1/* $Id: upnpreplyparse.h,v 1.8 2008/02/21 13:05:27 nanard Exp $ */
    22/* MiniUPnP project
    33 * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
     
    5050
    5151/* DisplayNameValueList() */
     52#ifdef DEBUG
    5253void
    5354DisplayNameValueList(char * buffer, int bufsize);
     55#endif
    5456
    5557#ifdef __cplusplus
Note: See TracChangeset for help on using the changeset viewer.