PageRenderTime 372ms CodeModel.GetById 141ms app.highlight 126ms RepoModel.GetById 96ms app.codeStats 0ms

/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
  1/* $Id: igd_desc_parse.c,v 1.14 2011/04/11 09:19:24 nanard Exp $ */
  2/* Project : miniupnp
  3 * http://miniupnp.free.fr/
  4 * Author : Thomas Bernard
  5 * Copyright (c) 2005-2010 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	if( (l==7) && !memcmp(name, "service", l) ) {
 22		datas->tmp.controlurl[0] = '\0';
 23		datas->tmp.eventsuburl[0] = '\0';
 24		datas->tmp.scpdurl[0] = '\0';
 25		datas->tmp.servicetype[0] = '\0';
 26	}
 27}
 28
 29/* End element handler :
 30 * update nesting level counter and update parser state if
 31 * service element is parsed */
 32void IGDendelt(void * d, const char * name, int l)
 33{
 34	struct IGDdatas * datas = (struct IGDdatas *)d;
 35	datas->level--;
 36	/*printf("endelt %2d %.*s\n", datas->level, l, name);*/
 37	if( (l==7) && !memcmp(name, "service", l) )
 38	{
 39		/*
 40		if( datas->state < 1
 41			&& !strcmp(datas->servicetype,
 42				//	"urn:schemas-upnp-org:service:WANIPConnection:1") )
 43				"urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1"))
 44			datas->state ++;
 45		*/
 46		if(0==strcmp(datas->tmp.servicetype,
 47				"urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1")) {
 48			memcpy(&datas->CIF, &datas->tmp, sizeof(struct IGDdatas_service));
 49		} else if(0==strcmp(datas->tmp.servicetype,
 50				"urn:schemas-upnp-org:service:WANIPv6FirewallControl:1")) {
 51			memcpy(&datas->IPv6FC, &datas->tmp, sizeof(struct IGDdatas_service));
 52		} else if(0==strcmp(datas->tmp.servicetype,
 53				"urn:schemas-upnp-org:service:WANIPConnection:1")
 54				 || 0==strcmp(datas->tmp.servicetype,
 55				"urn:schemas-upnp-org:service:WANPPPConnection:1") ) {
 56			if(datas->first.servicetype[0] == '\0') {
 57				memcpy(&datas->first, &datas->tmp, sizeof(struct IGDdatas_service));
 58			} else {
 59				memcpy(&datas->second, &datas->tmp, sizeof(struct IGDdatas_service));
 60			}
 61		}
 62	}
 63}
 64
 65/* Data handler :
 66 * copy data depending on the current element name and state */
 67void IGDdata(void * d, const char * data, int l)
 68{
 69	struct IGDdatas * datas = (struct IGDdatas *)d;
 70	char * dstmember = 0;
 71	/*printf("%2d %s : %.*s\n",
 72           datas->level, datas->cureltname, l, data);	*/
 73	if( !strcmp(datas->cureltname, "URLBase") )
 74		dstmember = datas->urlbase;
 75	else if( !strcmp(datas->cureltname, "presentationURL") )
 76		dstmember = datas->presentationurl;
 77	else if( !strcmp(datas->cureltname, "serviceType") )
 78		dstmember = datas->tmp.servicetype;
 79	else if( !strcmp(datas->cureltname, "controlURL") )
 80		dstmember = datas->tmp.controlurl;
 81	else if( !strcmp(datas->cureltname, "eventSubURL") )
 82		dstmember = datas->tmp.eventsuburl;
 83	else if( !strcmp(datas->cureltname, "SCPDURL") )
 84		dstmember = datas->tmp.scpdurl;
 85/*	else if( !strcmp(datas->cureltname, "deviceType") )
 86		dstmember = datas->devicetype_tmp;*/
 87	if(dstmember)
 88	{
 89		if(l>=MINIUPNPC_URL_MAXSIZE)
 90			l = MINIUPNPC_URL_MAXSIZE-1;
 91		memcpy(dstmember, data, l);
 92		dstmember[l] = '\0';
 93	}
 94}
 95
 96void printIGD(struct IGDdatas * d)
 97{
 98	printf("urlbase = '%s'\n", d->urlbase);
 99	printf("WAN Device (Common interface config) :\n");
100	/*printf(" deviceType = '%s'\n", d->CIF.devicetype);*/
101	printf(" serviceType = '%s'\n", d->CIF.servicetype);
102	printf(" controlURL = '%s'\n", d->CIF.controlurl);
103	printf(" eventSubURL = '%s'\n", d->CIF.eventsuburl);
104	printf(" SCPDURL = '%s'\n", d->CIF.scpdurl);
105	printf("primary WAN Connection Device (IP or PPP Connection):\n");
106	/*printf(" deviceType = '%s'\n", d->first.devicetype);*/
107	printf(" servicetype = '%s'\n", d->first.servicetype);
108	printf(" controlURL = '%s'\n", d->first.controlurl);
109	printf(" eventSubURL = '%s'\n", d->first.eventsuburl);
110	printf(" SCPDURL = '%s'\n", d->first.scpdurl);
111	printf("secondary WAN Connection Device (IP or PPP Connection):\n");
112	/*printf(" deviceType = '%s'\n", d->second.devicetype);*/
113	printf(" servicetype = '%s'\n", d->second.servicetype);
114	printf(" controlURL = '%s'\n", d->second.controlurl);
115	printf(" eventSubURL = '%s'\n", d->second.eventsuburl);
116	printf(" SCPDURL = '%s'\n", d->second.scpdurl);
117	printf("WAN IPv6 Firewall Control :\n");
118	/*printf(" deviceType = '%s'\n", d->IPv6FC.devicetype);*/
119	printf(" servicetype = '%s'\n", d->IPv6FC.servicetype);
120	printf(" controlURL = '%s'\n", d->IPv6FC.controlurl);
121	printf(" eventSubURL = '%s'\n", d->IPv6FC.eventsuburl);
122	printf(" SCPDURL = '%s'\n", d->IPv6FC.scpdurl);
123}
124
125