1
/* $Id: igd_desc_parse.c,v 1.7 2006/11/19 22:32:33 nanard Exp $ */
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.
9
#include "igd_desc_parse.h"
13
/* Start element handler :
14
* update nesting level counter and copy element name */
15
void IGDstartelt(void * d, const char * name, int l)
17
struct IGDdatas * datas = (struct IGDdatas *)d;
18
memcpy( datas->cureltname, name, l);
19
datas->cureltname[l] = '\0';
23
/* End element handler :
24
* update nesting level counter and update parser state if
25
* service element is parsed */
26
void IGDendelt(void * d, const char * name, int l)
28
struct IGDdatas * datas = (struct IGDdatas *)d;
30
/*printf("endelt %2d %.*s\n", datas->level, l, name);*/
31
if( (l==7) && !memcmp(name, "service", l) )
36
&& !strcmp(datas->servicetype,
37
// "urn:schemas-upnp-org:service:WANIPConnection:1") )
38
"urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1"))
41
if(0==strcmp(datas->servicetype_CIF,
42
"urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1"))
44
if(0==strcmp(datas->servicetype,
45
"urn:schemas-upnp-org:service:WANIPConnection:1") )
47
/* if(0==strcmp(datas->servicetype,
48
"urn:schemas-upnp-org:service:WANPPPConnection:1") )
54
* copy data depending on the current element name and state */
55
void IGDdata(void * d, const char * data, int l)
57
struct IGDdatas * datas = (struct IGDdatas *)d;
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)
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;
76
else if(datas->state==2)
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;
91
if(l>=MINIUPNPC_URL_MAXSIZE)
92
l = MINIUPNPC_URL_MAXSIZE-1;
93
memcpy(dstmember, data, l);
98
void printIGD(struct IGDdatas * d)
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);