From 29aa8608c2ae0b9f5ac5bc408638da67184ef41d Mon Sep 17 00:00:00 2001 From: Justin Maggard Date: Tue, 31 Mar 2009 02:48:55 +0000 Subject: [PATCH] * Return a real value for the SystemUpdateID evented variable. --- testupnpdescgen.c | 1 + upnpdescgen.c | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/testupnpdescgen.c b/testupnpdescgen.c index f366c5b..049c7d1 100644 --- a/testupnpdescgen.c +++ b/testupnpdescgen.c @@ -17,6 +17,7 @@ char friendly_name[] = "localhost: system_type"; char serialnumber[] = "12345678"; char modelnumber[] = "1"; char presentationurl[] = "http://192.168.0.1:8080/"; +unsigned int updateID = 0; int getifaddr(const char * ifname, char * buf, int len) { diff --git a/upnpdescgen.c b/upnpdescgen.c index bf89620..277114d 100644 --- a/upnpdescgen.c +++ b/upnpdescgen.c @@ -400,7 +400,7 @@ static const struct stateVar ContentDirectoryVars[] = //JM{"A_ARG_TYPE_URI", 5, 0}, /* 15 */ {"SearchCapabilities", 0, 0}, {"SortCapabilities", 0, 0}, - {"SystemUpdateID", 3|0x80, 0, 46, 46}, + {"SystemUpdateID", 3|0x80, 0, 46, 255}, //{"ContainerUpdateIDs", 0, 0}, {0, 0} }; @@ -792,33 +792,36 @@ genEventVars(int * len, const struct serviceDesc * s, const char * servns) const struct stateVar * v; char * str; int tmplen; + char buf[512]; tmplen = 512; str = (char *)malloc(tmplen); if(str == NULL) return NULL; *len = 0; v = s->serviceStateTable; - str = strcat_str(str, len, &tmplen, ""); + snprintf(buf, sizeof(buf), "", servns); + str = strcat_str(str, len, &tmplen, buf); while(v->name) { if(v->itype & 0x80) { - str = strcat_str(str, len, &tmplen, "<"); - str = strcat_str(str, len, &tmplen, v->name); - str = strcat_str(str, len, &tmplen, ">"); + snprintf(buf, sizeof(buf), "<%s>", v->name); + str = strcat_str(str, len, &tmplen, buf); //printf("", v->name); switch(v->ieventvalue) { case 0: break; case 255: /* Magical values should go around here */ + if( strcmp(v->name, "SystemUpdateID") == 0 ) + { + snprintf(buf, sizeof(buf), "%d", updateID); + str = strcat_str(str, len, &tmplen, buf); + } break; default: str = strcat_str(str, len, &tmplen, upnpallowedvalues[v->ieventvalue]); //printf("%s", upnpallowedvalues[v->ieventvalue]); } - str = strcat_str(str, len, &tmplen, "name); - str = strcat_str(str, len, &tmplen, ">"); + snprintf(buf, sizeof(buf), "", v->name); + str = strcat_str(str, len, &tmplen, buf); //printf("\n", v->name); } v++;