⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 upnpreplyparse.c

📁 很小的linux下的upnp客户端代码
💻 C
字号:
/* $Id: upnpreplyparse.c,v 1.9 2007/05/15 18:14:08 nanard Exp $ *//* MiniUPnP project * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ * (c) 2006 Thomas Bernard  * This software is subject to the conditions detailed * in the LICENCE file provided within the distribution */#include <stdlib.h>#include <string.h>#include <stdio.h>#include "upnpreplyparse.h"#include "minixml.h"static voidNameValueParserStartElt(void * d, const char * name, int l){    struct NameValueParserData * data = (struct NameValueParserData *)d;    if(l>63)        l = 63;    memcpy(data->curelt, name, l);    data->curelt[l] = '\0';}static voidNameValueParserGetData(void * d, const char * datas, int l){    struct NameValueParserData * data = (struct NameValueParserData *)d;    struct NameValue * nv;    nv = malloc(sizeof(struct NameValue));    if(l>63)        l = 63;    strncpy(nv->name, data->curelt, 64);	nv->name[63] = '\0';    memcpy(nv->value, datas, l);    nv->value[l] = '\0';    LIST_INSERT_HEAD( &(data->head), nv, entries);}voidParseNameValue(const char * buffer, int bufsize,                    struct NameValueParserData * data){    struct xmlparser parser;    LIST_INIT(&(data->head));    /* init xmlparser object */    parser.xmlstart = buffer;    parser.xmlsize = bufsize;    parser.data = data;    parser.starteltfunc = NameValueParserStartElt;    parser.endeltfunc = 0;    parser.datafunc = NameValueParserGetData;	parser.attfunc = 0;    parsexml(&parser);}voidClearNameValueList(struct NameValueParserData * pdata){    struct NameValue * nv;    while((nv = pdata->head.lh_first) != NULL)    {        LIST_REMOVE(nv, entries);        free(nv);    }}char * GetValueFromNameValueList(struct NameValueParserData * pdata,                          const char * Name){    struct NameValue * nv;    char * p = NULL;    for(nv = pdata->head.lh_first;        (nv != NULL) && (p == NULL);        nv = nv->entries.le_next)    {        if(strcmp(nv->name, Name) == 0)            p = nv->value;    }    return p;}#if 0/* useless now that minixml ignores namespaces by itself */char *GetValueFromNameValueListIgnoreNS(struct NameValueParserData * pdata,                                  const char * Name){	struct NameValue * nv;	char * p = NULL;	char * pname;	for(nv = pdata->head.lh_first;	    (nv != NULL) && (p == NULL);		nv = nv->entries.le_next)	{		pname = strrchr(nv->name, ':');		if(pname)			pname++;		else			pname = nv->name;		if(strcmp(pname, Name)==0)			p = nv->value;	}	return p;}#endif/* debug all-in-one function  * do parsing then display to stdout */voidDisplayNameValueList(char * buffer, int bufsize){    struct NameValueParserData pdata;    struct NameValue * nv;    ParseNameValue(buffer, bufsize, &pdata);    for(nv = pdata.head.lh_first;        nv != NULL;        nv = nv->entries.le_next)    {        printf("%s = %s\n", nv->name, nv->value);    }    ClearNameValueList(&pdata);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -