/*================================================================ * ixmlDocument_getElementById * Returns the element whose ID is given by tagName. If no such * element exists, returns null. * External function. * Parameter: * tagName: the tag name for an element. * Return Values: * The matching element. * *=================================================================*/ IXML_Element * ixmlDocument_getElementById( IN IXML_Document * doc, IN DOMString tagName ) { IXML_Element *rtElement = NULL; IXML_Node *nodeptr = ( IXML_Node * ) doc; const char *name; if( ( nodeptr == NULL ) || ( tagName == NULL ) ) { return rtElement; } if( ixmlNode_getNodeType( nodeptr ) == eELEMENT_NODE ) { name = ixmlNode_getNodeName( nodeptr ); if( name == NULL ) { return rtElement; } if( strcmp( tagName, name ) == 0 ) { rtElement = ( IXML_Element * ) nodeptr; return rtElement; } else { rtElement = ixmlDocument_getElementById( ( IXML_Document * ) ixmlNode_getFirstChild ( nodeptr ), tagName ); if( rtElement == NULL ) { rtElement = ixmlDocument_getElementById( ( IXML_Document * ) ixmlNode_getNextSibling ( nodeptr ), tagName ); } } } else { rtElement = ixmlDocument_getElementById( ( IXML_Document * ) ixmlNode_getFirstChild ( nodeptr ), tagName ); if( rtElement == NULL ) { rtElement = ixmlDocument_getElementById( ( IXML_Document * ) ixmlNode_getNextSibling ( nodeptr ), tagName ); } } return rtElement; }
// Extract attribute from URI_METADATA const char *transport_get_attr_metadata(const char *key) { IXML_Document *doc; IXML_Element *elm; const char *attr = NULL; const char *metadata = transport_get_var(TRANSPORT_VAR_AV_URI_META); if (!metadata || (strcmp(metadata, "") == 0)) return NULL; doc = ixmlParseBuffer(metadata); if (doc) { // Locate 'res' element elm = ixmlDocument_getElementById(doc, "res"); if (elm != NULL) { // Look for 'key' attribute in 'res' element attr = ixmlElement_getAttribute(elm, key); // Copy of result (caller must free) if (attr) attr = strdup(attr); } // Free the whole DOM ixmlDocument_free(doc); } DBG_PRINT(DBG_LVL1, "Track metadata: %s = %s\n", key, (attr) ? attr : "<not found>"); // NULL if not found return attr; }
v = (char*) ixmlNode_getNodeValue(l1_1_node); LoadConfigItem(Conf, sq_conf, n, v); } if (node_list) ixmlNodeList_free(node_list); } return node; } /*----------------------------------------------------------------------------*/ void *LoadConfig(char *name, tMRConfig *Conf, sq_dev_param_t *sq_conf) { IXML_Element *elm; IXML_Document *doc; doc = ixmlLoadDocument(name); if (!doc) return NULL; elm = ixmlDocument_getElementById(doc, "squeeze2upnp"); if (elm) { unsigned i; char *n, *v; IXML_NodeList *l1_node_list; l1_node_list = ixmlNode_getChildNodes((IXML_Node*) elm); for (i = 0; i < ixmlNodeList_length(l1_node_list); i++) { IXML_Node *l1_node, *l1_1_node; l1_node = ixmlNodeList_item(l1_node_list, i); n = (char*) ixmlNode_getNodeName(l1_node); l1_1_node = ixmlNode_getFirstChild(l1_node); v = (char*) ixmlNode_getNodeValue(l1_1_node); LoadGlobalItem(n, v); } if (l1_node_list) ixmlNodeList_free(l1_node_list); } elm = ixmlDocument_getElementById((IXML_Document *)elm, "common"); if (elm) { char *n, *v; IXML_NodeList *l1_node_list; unsigned i; l1_node_list = ixmlNode_getChildNodes((IXML_Node*) elm); for (i = 0; i < ixmlNodeList_length(l1_node_list); i++) { IXML_Node *l1_node, *l1_1_node; l1_node = ixmlNodeList_item(l1_node_list, i);
if (!strcmp(name, "main_log")) glLog.main = debug2level(val); if (!strcmp(name, "sq2mr_log")) glLog.sq2mr = debug2level(val); if (!strcmp(name, "base_mac")) sscanf(val,"%2hhx:%2hhx:%2hhx:%2hhx:%2hhx:%2hhx", &glMac[0],&glMac[1],&glMac[2],&glMac[3],&glMac[4],&glMac[5]); if (!strcmp(name, "upnp_scan_interval")) gluPNPScanInterval = atol(val); if (!strcmp(name, "upnp_scan_timeout")) gluPNPScanTimeout = atol(val); } /*----------------------------------------------------------------------------*/ void *FindMRConfig(void *ref, char *UDN) { IXML_Element *elm; IXML_Node *device = NULL; IXML_NodeList *l1_node_list; IXML_Document *doc = (IXML_Document*) ref; char *v; unsigned i; elm = ixmlDocument_getElementById(doc, "squeeze2upnp"); l1_node_list = ixmlDocument_getElementsByTagName((IXML_Document*) elm, "udn"); for (i = 0; i < ixmlNodeList_length(l1_node_list); i++) { IXML_Node *l1_node, *l1_1_node; l1_node = ixmlNodeList_item(l1_node_list, i);