Fixes many problems in sample code.
In particular, undoes 25c908c558c8e60eb386c155a6b93add447ffec0: SF Patch Tracker [ 2836704 ] Search for nested serviceList (not stopping at the first lis Submitted By: zephyrus ( zephyrus00jp ) The original zephyrus' code is still #ifdef'd in the file, if someone wishes to fix it, check for "#ifdef OLD_FIND_SERVICE_CODE".
This commit is contained in:
parent
70d2a7c9e7
commit
7e8d1787c9
@ -38,21 +38,16 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define SAMPLE_UTIL_C
|
#define SAMPLE_UTIL_C
|
||||||
|
|
||||||
#include "sample_util.h"
|
#include "sample_util.h"
|
||||||
|
|
||||||
#include "tv_ctrlpt.h"
|
|
||||||
#include "tv_device.h"
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
#if !UPNP_HAVE_TOOLS
|
#if !UPNP_HAVE_TOOLS
|
||||||
# error "Need upnptools.h to compile samples; try ./configure --enable-tools"
|
# error "Need upnptools.h to compile samples ; try ./configure --enable-tools"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static int initialize_init = 1;
|
static int initialize_init = 1;
|
||||||
static int initialize_register = 1;
|
static int initialize_register = 1;
|
||||||
|
|
||||||
@ -73,12 +68,11 @@ int SampleUtil_Initialize(print_string print_function)
|
|||||||
ithread_mutexattr_setkind_np(&attr, ITHREAD_MUTEX_RECURSIVE_NP);
|
ithread_mutexattr_setkind_np(&attr, ITHREAD_MUTEX_RECURSIVE_NP);
|
||||||
ithread_mutex_init(&display_mutex, &attr);
|
ithread_mutex_init(&display_mutex, &attr);
|
||||||
ithread_mutexattr_destroy(&attr);
|
ithread_mutexattr_destroy(&attr);
|
||||||
|
|
||||||
/* To shut up valgrind mutex warning. */
|
/* To shut up valgrind mutex warning. */
|
||||||
ithread_mutex_lock(&display_mutex);
|
ithread_mutex_lock(&display_mutex);
|
||||||
gPrintFun = print_function;
|
gPrintFun = print_function;
|
||||||
ithread_mutex_unlock(&display_mutex);
|
ithread_mutex_unlock(&display_mutex);
|
||||||
|
/* Finished initializing. */
|
||||||
initialize_init = 0;
|
initialize_init = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,7 +118,7 @@ IXML_NodeList *SampleUtil_GetFirstServiceList(IXML_Document *doc)
|
|||||||
IXML_Node *servlistnode = NULL;
|
IXML_Node *servlistnode = NULL;
|
||||||
|
|
||||||
servlistnodelist =
|
servlistnodelist =
|
||||||
ixmlDocument_getElementsByTagName( doc, "serviceList" );
|
ixmlDocument_getElementsByTagName(doc, "serviceList");
|
||||||
if (servlistnodelist && ixmlNodeList_length(servlistnodelist)) {
|
if (servlistnodelist && ixmlNodeList_length(servlistnodelist)) {
|
||||||
/* we only care about the first service list, from the root
|
/* we only care about the first service list, from the root
|
||||||
* device */
|
* device */
|
||||||
@ -139,6 +133,9 @@ IXML_NodeList *SampleUtil_GetFirstServiceList(IXML_Document *doc)
|
|||||||
return ServiceList;
|
return ServiceList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define OLD_FIND_SERVICE_CODE
|
||||||
|
#ifdef OLD_FIND_SERVICE_CODE
|
||||||
|
#else
|
||||||
/*
|
/*
|
||||||
* Obtain the service list
|
* Obtain the service list
|
||||||
* n == 0 the first
|
* n == 0 the first
|
||||||
@ -177,18 +174,20 @@ static IXML_NodeList *SampleUtil_GetNthServiceList(
|
|||||||
* return (Node*) A pointer to a Node or NULL if there was an
|
* return (Node*) A pointer to a Node or NULL if there was an
|
||||||
* error. */
|
* error. */
|
||||||
servlistnode = ixmlNodeList_item(servlistnodelist, n);
|
servlistnode = ixmlNodeList_item(servlistnodelist, n);
|
||||||
|
if (!servlistnode) {
|
||||||
assert(servlistnode != 0);
|
/* create as list of DOM nodes */
|
||||||
|
ServiceList = ixmlElement_getElementsByTagName(
|
||||||
/* create as list of DOM nodes */
|
(IXML_Element *)servlistnode, "service");
|
||||||
ServiceList = ixmlElement_getElementsByTagName(
|
} else
|
||||||
(IXML_Element *)servlistnode, "service");
|
SampleUtil_Print("%s(%d): ixmlNodeList_item(nodeList, n) returned NULL\n",
|
||||||
|
__FILE__, __LINE__);
|
||||||
}
|
}
|
||||||
if (servlistnodelist)
|
if (servlistnodelist)
|
||||||
ixmlNodeList_free(servlistnodelist);
|
ixmlNodeList_free(servlistnodelist);
|
||||||
|
|
||||||
return ServiceList;
|
return ServiceList;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
char *SampleUtil_GetFirstDocumentItem(IXML_Document *doc, const char *item)
|
char *SampleUtil_GetFirstDocumentItem(IXML_Document *doc, const char *item)
|
||||||
{
|
{
|
||||||
@ -208,14 +207,14 @@ char *SampleUtil_GetFirstDocumentItem(IXML_Document *doc, const char *item)
|
|||||||
ret = strdup("");
|
ret = strdup("");
|
||||||
goto epilogue;
|
goto epilogue;
|
||||||
}
|
}
|
||||||
ret = ixmlNode_getNodeValue(textNode);
|
ret = strdup(ixmlNode_getNodeValue(textNode));
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
SampleUtil_Print("%s(%d): ixmlNode_getNodeValue returned NULL\n",
|
SampleUtil_Print("%s(%d): ixmlNode_getNodeValue returned NULL\n",
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
ret = strdup("");
|
ret = strdup("");
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
SampleUtil_Print("%s(%d): ixmlNode_getFirstChild(tmpNode) returned NULL\n",
|
SampleUtil_Print("%s(%d): ixmlNodeList_item(nodeList, 0) returned NULL\n",
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
} else
|
} else
|
||||||
SampleUtil_Print("%s(%d): Error finding %s in XML Node\n",
|
SampleUtil_Print("%s(%d): Error finding %s in XML Node\n",
|
||||||
@ -242,7 +241,7 @@ char *SampleUtil_GetFirstElementItem(IXML_Element *element, const char *item)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
tmpNode = ixmlNodeList_item(nodeList, 0);
|
tmpNode = ixmlNodeList_item(nodeList, 0);
|
||||||
if (tmpNode) {
|
if (!tmpNode) {
|
||||||
SampleUtil_Print("%s(%d): Error finding %s value in XML Node\n",
|
SampleUtil_Print("%s(%d): Error finding %s value in XML Node\n",
|
||||||
__FILE__, __LINE__, item);
|
__FILE__, __LINE__, item);
|
||||||
ixmlNodeList_free(nodeList);
|
ixmlNodeList_free(nodeList);
|
||||||
@ -507,7 +506,10 @@ int SampleUtil_FindAndParseService(IXML_Document *DescDoc, const char *location,
|
|||||||
unsigned long length;
|
unsigned long length;
|
||||||
int found = 0;
|
int found = 0;
|
||||||
int ret;
|
int ret;
|
||||||
|
#ifdef OLD_FIND_SERVICE_CODE
|
||||||
|
#else /* OLD_FIND_SERVICE_CODE */
|
||||||
unsigned int sindex = 0;
|
unsigned int sindex = 0;
|
||||||
|
#endif /* OLD_FIND_SERVICE_CODE */
|
||||||
char *tempServiceType = NULL;
|
char *tempServiceType = NULL;
|
||||||
char *baseURL = NULL;
|
char *baseURL = NULL;
|
||||||
const char *base = NULL;
|
const char *base = NULL;
|
||||||
@ -521,8 +523,9 @@ int SampleUtil_FindAndParseService(IXML_Document *DescDoc, const char *location,
|
|||||||
base = baseURL;
|
base = baseURL;
|
||||||
else
|
else
|
||||||
base = location;
|
base = location;
|
||||||
|
#ifdef OLD_FIND_SERVICE_CODE
|
||||||
/* Top level */
|
serviceList = SampleUtil_GetFirstServiceList(DescDoc);
|
||||||
|
#else /* OLD_FIND_SERVICE_CODE */
|
||||||
for (sindex = 0;
|
for (sindex = 0;
|
||||||
(serviceList = SampleUtil_GetNthServiceList(DescDoc , sindex)) != NULL;
|
(serviceList = SampleUtil_GetNthServiceList(DescDoc , sindex)) != NULL;
|
||||||
sindex++) {
|
sindex++) {
|
||||||
@ -530,8 +533,7 @@ int SampleUtil_FindAndParseService(IXML_Document *DescDoc, const char *location,
|
|||||||
relcontrolURL = NULL;
|
relcontrolURL = NULL;
|
||||||
releventURL = NULL;
|
releventURL = NULL;
|
||||||
service = NULL;
|
service = NULL;
|
||||||
|
#endif /* OLD_FIND_SERVICE_CODE */
|
||||||
/* serviceList = SampleUtil_GetFirstServiceList( DescDoc ); */
|
|
||||||
length = ixmlNodeList_length(serviceList);
|
length = ixmlNodeList_length(serviceList);
|
||||||
for (i = 0; i < length; i++) {
|
for (i = 0; i < length; i++) {
|
||||||
service = (IXML_Element *)ixmlNodeList_item(serviceList, i);
|
service = (IXML_Element *)ixmlNodeList_item(serviceList, i);
|
||||||
@ -543,14 +545,14 @@ int SampleUtil_FindAndParseService(IXML_Document *DescDoc, const char *location,
|
|||||||
SampleUtil_Print("serviceId: %s\n", *serviceId);
|
SampleUtil_Print("serviceId: %s\n", *serviceId);
|
||||||
relcontrolURL = SampleUtil_GetFirstElementItem(service, "controlURL");
|
relcontrolURL = SampleUtil_GetFirstElementItem(service, "controlURL");
|
||||||
releventURL = SampleUtil_GetFirstElementItem(service, "eventSubURL");
|
releventURL = SampleUtil_GetFirstElementItem(service, "eventSubURL");
|
||||||
*controlURL = malloc(strlen(base) + strlen(relcontrolURL)+1);
|
*controlURL = malloc(strlen(base) + strlen(relcontrolURL) + 1);
|
||||||
if (*controlURL) {
|
if (*controlURL) {
|
||||||
ret = UpnpResolveURL(base, relcontrolURL, *controlURL);
|
ret = UpnpResolveURL(base, relcontrolURL, *controlURL);
|
||||||
if (ret != UPNP_E_SUCCESS)
|
if (ret != UPNP_E_SUCCESS)
|
||||||
SampleUtil_Print("Error generating controlURL from %s + %s\n",
|
SampleUtil_Print("Error generating controlURL from %s + %s\n",
|
||||||
base, relcontrolURL);
|
base, relcontrolURL);
|
||||||
}
|
}
|
||||||
*eventURL = malloc(strlen(base) + strlen(releventURL)+1);
|
*eventURL = malloc(strlen(base) + strlen(releventURL) + 1);
|
||||||
if (*eventURL) {
|
if (*eventURL) {
|
||||||
ret = UpnpResolveURL(base, releventURL, *eventURL);
|
ret = UpnpResolveURL(base, releventURL, *eventURL);
|
||||||
if (ret != UPNP_E_SUCCESS)
|
if (ret != UPNP_E_SUCCESS)
|
||||||
@ -572,7 +574,10 @@ int SampleUtil_FindAndParseService(IXML_Document *DescDoc, const char *location,
|
|||||||
if (serviceList)
|
if (serviceList)
|
||||||
ixmlNodeList_free(serviceList);
|
ixmlNodeList_free(serviceList);
|
||||||
serviceList = NULL;
|
serviceList = NULL;
|
||||||
|
#ifdef OLD_FIND_SERVICE_CODE
|
||||||
|
#else /* OLD_FIND_SERVICE_CODE */
|
||||||
}
|
}
|
||||||
|
#endif /* OLD_FIND_SERVICE_CODE */
|
||||||
free(baseURL);
|
free(baseURL);
|
||||||
|
|
||||||
return found;
|
return found;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user