source: trunk/third-party/miniupnp/igd_desc_parse.c @ 3731

Last change on this file since 3731 was 3731, checked in by charles, 15 years ago

use Thomas Bernard's miniupnp library instead of rolling our own.

File size: 3.6 KB
Line 
1/* $Id: igd_desc_parse.c,v 1.7 2006/11/19 22:32:33 nanard Exp $ */
2/* Project : miniupnp
3 * http://miniupnp.free.fr/
4 * Author : Thomas Bernard
5 * Copyright (c) 2005 Thomas Bernard
6 * This software is subject to the conditions detailed in the
7 * LICENCE file provided in this distribution.
8 * */
9#include "igd_desc_parse.h"
10#include <stdio.h>
11#include <string.h>
12
13/* Start element handler :
14 * update nesting level counter and copy element name */
15void IGDstartelt(void * d, const char * name, int l)
16{
17        struct IGDdatas * datas = (struct IGDdatas *)d;
18        memcpy( datas->cureltname, name, l);
19        datas->cureltname[l] = '\0';
20        datas->level++;
21}
22
23/* End element handler :
24 * update nesting level counter and update parser state if
25 * service element is parsed */
26void IGDendelt(void * d, const char * name, int l)
27{
28        struct IGDdatas * datas = (struct IGDdatas *)d;
29        datas->level--;
30        /*printf("endelt %2d %.*s\n", datas->level, l, name);*/
31        if( (l==7) && !memcmp(name, "service", l) )
32        {
33                /*datas->state++; */
34                /*
35                if( datas->state < 1
36                        && !strcmp(datas->servicetype,
37                                //      "urn:schemas-upnp-org:service:WANIPConnection:1") )
38                                "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1"))
39                        datas->state ++;
40                */
41                if(0==strcmp(datas->servicetype_CIF,
42                                "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1"))
43                        datas->state = 2;
44                if(0==strcmp(datas->servicetype,
45                                "urn:schemas-upnp-org:service:WANIPConnection:1") )
46                        datas->state = 3;
47/*              if(0==strcmp(datas->servicetype,
48                                "urn:schemas-upnp-org:service:WANPPPConnection:1") )
49                        datas->state = 4; */
50        }
51}
52
53/* Data handler :
54 * copy data depending on the current element name and state */
55void IGDdata(void * d, const char * data, int l)
56{
57        struct IGDdatas * datas = (struct IGDdatas *)d;
58        char * dstmember = 0;
59        /*printf("%2d %s : %.*s\n",
60           datas->level, datas->cureltname, l, data);   */
61        if( !strcmp(datas->cureltname, "URLBase") )
62                dstmember = datas->urlbase;
63        else if(datas->state<=1)
64        {
65                if( !strcmp(datas->cureltname, "serviceType") )
66                        dstmember = datas->servicetype_CIF;
67                else if( !strcmp(datas->cureltname, "controlURL") )
68                        dstmember = datas->controlurl_CIF;
69                else if( !strcmp(datas->cureltname, "eventSubURL") )
70                        dstmember = datas->eventsuburl_CIF;
71                else if( !strcmp(datas->cureltname, "SCPDURL") )
72                        dstmember = datas->scpdurl_CIF;
73                else if( !strcmp(datas->cureltname, "deviceType") )
74                        dstmember = datas->devicetype_CIF;
75        }
76        else if(datas->state==2)
77        {
78                if( !strcmp(datas->cureltname, "serviceType") )
79                        dstmember = datas->servicetype;
80                else if( !strcmp(datas->cureltname, "controlURL") )
81                        dstmember = datas->controlurl;
82                else if( !strcmp(datas->cureltname, "eventSubURL") )
83                        dstmember = datas->eventsuburl;
84                else if( !strcmp(datas->cureltname, "SCPDURL") )
85                        dstmember = datas->scpdurl;
86                else if( !strcmp(datas->cureltname, "deviceType") )
87                        dstmember = datas->devicetype;
88        }
89        if(dstmember)
90        {
91                if(l>=MINIUPNPC_URL_MAXSIZE)
92                        l = MINIUPNPC_URL_MAXSIZE-1;
93                memcpy(dstmember, data, l);
94                dstmember[l] = '\0';
95        }
96}
97
98void printIGD(struct IGDdatas * d)
99{
100        printf("urlbase = %s\n", d->urlbase);
101        printf("WAN Device (Common interface config) :\n");
102        printf(" deviceType = %s\n", d->devicetype_CIF);
103        printf(" serviceType = %s\n", d->servicetype_CIF);
104        printf(" controlURL = %s\n", d->controlurl_CIF);
105        printf(" eventSubURL = %s\n", d->eventsuburl_CIF);
106        printf(" SCPDURL = %s\n", d->scpdurl_CIF);
107        printf("WAN Connection Device :\n");
108        printf(" deviceType = %s\n", d->devicetype);
109        printf(" servicetype = %s\n", d->servicetype);
110        printf(" controlURL = %s\n", d->controlurl);
111        printf(" eventSubURL = %s\n", d->eventsuburl);
112        printf(" SCPDURL = %s\n", d->scpdurl);
113}
114
115
Note: See TracBrowser for help on using the repository browser.