/thirdparty/libportfwd/third-party/miniupnpc-1.6/igd_desc_parse.c
http://github.com/tomahawk-player/tomahawk · C · 125 lines · 88 code · 7 blank · 30 comment · 26 complexity · 97a94ab8fac15b6b62587f4885541fc1 MD5 · raw file
- /* $Id: igd_desc_parse.c,v 1.14 2011/04/11 09:19:24 nanard Exp $ */
- /* Project : miniupnp
- * http://miniupnp.free.fr/
- * Author : Thomas Bernard
- * Copyright (c) 2005-2010 Thomas Bernard
- * This software is subject to the conditions detailed in the
- * LICENCE file provided in this distribution. */
- #include "igd_desc_parse.h"
- #include <stdio.h>
- #include <string.h>
- /* Start element handler :
- * update nesting level counter and copy element name */
- void IGDstartelt(void * d, const char * name, int l)
- {
- struct IGDdatas * datas = (struct IGDdatas *)d;
- memcpy( datas->cureltname, name, l);
- datas->cureltname[l] = '\0';
- datas->level++;
- if( (l==7) && !memcmp(name, "service", l) ) {
- datas->tmp.controlurl[0] = '\0';
- datas->tmp.eventsuburl[0] = '\0';
- datas->tmp.scpdurl[0] = '\0';
- datas->tmp.servicetype[0] = '\0';
- }
- }
- /* End element handler :
- * update nesting level counter and update parser state if
- * service element is parsed */
- void IGDendelt(void * d, const char * name, int l)
- {
- struct IGDdatas * datas = (struct IGDdatas *)d;
- datas->level--;
- /*printf("endelt %2d %.*s\n", datas->level, l, name);*/
- if( (l==7) && !memcmp(name, "service", l) )
- {
- /*
- if( datas->state < 1
- && !strcmp(datas->servicetype,
- // "urn:schemas-upnp-org:service:WANIPConnection:1") )
- "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1"))
- datas->state ++;
- */
- if(0==strcmp(datas->tmp.servicetype,
- "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1")) {
- memcpy(&datas->CIF, &datas->tmp, sizeof(struct IGDdatas_service));
- } else if(0==strcmp(datas->tmp.servicetype,
- "urn:schemas-upnp-org:service:WANIPv6FirewallControl:1")) {
- memcpy(&datas->IPv6FC, &datas->tmp, sizeof(struct IGDdatas_service));
- } else if(0==strcmp(datas->tmp.servicetype,
- "urn:schemas-upnp-org:service:WANIPConnection:1")
- || 0==strcmp(datas->tmp.servicetype,
- "urn:schemas-upnp-org:service:WANPPPConnection:1") ) {
- if(datas->first.servicetype[0] == '\0') {
- memcpy(&datas->first, &datas->tmp, sizeof(struct IGDdatas_service));
- } else {
- memcpy(&datas->second, &datas->tmp, sizeof(struct IGDdatas_service));
- }
- }
- }
- }
- /* Data handler :
- * copy data depending on the current element name and state */
- void IGDdata(void * d, const char * data, int l)
- {
- struct IGDdatas * datas = (struct IGDdatas *)d;
- char * dstmember = 0;
- /*printf("%2d %s : %.*s\n",
- datas->level, datas->cureltname, l, data); */
- if( !strcmp(datas->cureltname, "URLBase") )
- dstmember = datas->urlbase;
- else if( !strcmp(datas->cureltname, "presentationURL") )
- dstmember = datas->presentationurl;
- else if( !strcmp(datas->cureltname, "serviceType") )
- dstmember = datas->tmp.servicetype;
- else if( !strcmp(datas->cureltname, "controlURL") )
- dstmember = datas->tmp.controlurl;
- else if( !strcmp(datas->cureltname, "eventSubURL") )
- dstmember = datas->tmp.eventsuburl;
- else if( !strcmp(datas->cureltname, "SCPDURL") )
- dstmember = datas->tmp.scpdurl;
- /* else if( !strcmp(datas->cureltname, "deviceType") )
- dstmember = datas->devicetype_tmp;*/
- if(dstmember)
- {
- if(l>=MINIUPNPC_URL_MAXSIZE)
- l = MINIUPNPC_URL_MAXSIZE-1;
- memcpy(dstmember, data, l);
- dstmember[l] = '\0';
- }
- }
- void printIGD(struct IGDdatas * d)
- {
- printf("urlbase = '%s'\n", d->urlbase);
- printf("WAN Device (Common interface config) :\n");
- /*printf(" deviceType = '%s'\n", d->CIF.devicetype);*/
- printf(" serviceType = '%s'\n", d->CIF.servicetype);
- printf(" controlURL = '%s'\n", d->CIF.controlurl);
- printf(" eventSubURL = '%s'\n", d->CIF.eventsuburl);
- printf(" SCPDURL = '%s'\n", d->CIF.scpdurl);
- printf("primary WAN Connection Device (IP or PPP Connection):\n");
- /*printf(" deviceType = '%s'\n", d->first.devicetype);*/
- printf(" servicetype = '%s'\n", d->first.servicetype);
- printf(" controlURL = '%s'\n", d->first.controlurl);
- printf(" eventSubURL = '%s'\n", d->first.eventsuburl);
- printf(" SCPDURL = '%s'\n", d->first.scpdurl);
- printf("secondary WAN Connection Device (IP or PPP Connection):\n");
- /*printf(" deviceType = '%s'\n", d->second.devicetype);*/
- printf(" servicetype = '%s'\n", d->second.servicetype);
- printf(" controlURL = '%s'\n", d->second.controlurl);
- printf(" eventSubURL = '%s'\n", d->second.eventsuburl);
- printf(" SCPDURL = '%s'\n", d->second.scpdurl);
- printf("WAN IPv6 Firewall Control :\n");
- /*printf(" deviceType = '%s'\n", d->IPv6FC.devicetype);*/
- printf(" servicetype = '%s'\n", d->IPv6FC.servicetype);
- printf(" controlURL = '%s'\n", d->IPv6FC.controlurl);
- printf(" eventSubURL = '%s'\n", d->IPv6FC.eventsuburl);
- printf(" SCPDURL = '%s'\n", d->IPv6FC.scpdurl);
- }