Example #1
0
/*
*****************************************************************************
** FUNCTION NAME: createElementTextNode
**
** FUNCTION INPUTS:
**  @IXML_Element *parentElement: parent element
**  @char *name: tag name
**  @char *value: tag value
**
** FUNCTION DESCRIPTION
**   This function will create element with name and value, and add to parent
** element.
**
** FUNCTION OUTPUTS:
**   Returns IXML_Element pointer when success,on NULL on failed.
**
** HISTORY:
** 2008-7-2	Steven Leong	Created
*****************************************************************************
*/
IXML_Element* createElementTextNode(IXML_Element *parentElement, char *name, char *value)
{
	IXML_Element *element = NULL;
	IXML_Node *node = NULL;

	element = ixmlDocument_createElement(parentElement->n.ownerDocument, name);
	if(element == NULL){
		return NULL;
	}
	if(value != NULL){
		node = ixmlDocument_createTextNode(parentElement->n.ownerDocument, value);
		if(node == NULL){
			ixmlElement_free(element);
			return NULL;
		}
		if(ixmlNode_appendChild((IXML_Node *)element, node) != IXML_SUCCESS){
			ixmlElement_free(element);
			ixmlNode_free(node);
			return NULL;
		}
	}
	if(ixmlNode_appendChild((IXML_Node *)parentElement,(IXML_Node *)element)!=IXML_SUCCESS){
		ixmlElement_free(element);
		return NULL;
	}
	return element;
}
Example #2
0
int ixmlDocument_createElementNSEx(
	IXML_Document *doc,
	const DOMString namespaceURI,
	const DOMString qualifiedName,
	IXML_Element **rtElement)
{
	IXML_Element *newElement = NULL;
	int ret = IXML_SUCCESS;
	int line = 0;

	if (doc == NULL || namespaceURI == NULL || qualifiedName == NULL) {
		line = __LINE__;
		ret = IXML_INVALID_PARAMETER;
		goto ErrorHandler;
	}

	ret = ixmlDocument_createElementEx(doc, qualifiedName, &newElement);
	if (ret != IXML_SUCCESS) {
		line = __LINE__;
		goto ErrorHandler;
	}
	/* set the namespaceURI field */
	newElement->n.namespaceURI = _strdup(namespaceURI);
	if (newElement->n.namespaceURI == NULL) {
		line = __LINE__;
		ixmlElement_free(newElement);
		newElement = NULL;
		ret = IXML_INSUFFICIENT_MEMORY;
		goto ErrorHandler;
	}
	/* set the localName and prefix */
	ret = ixmlNode_setNodeName((IXML_Node *)newElement, qualifiedName);
	if (ret != IXML_SUCCESS) {
		line = __LINE__;
		ixmlElement_free(newElement);
		newElement = NULL;
		ret = IXML_INSUFFICIENT_MEMORY;
		goto ErrorHandler;
	}

	newElement->n.nodeValue = NULL;

ErrorHandler:
	*rtElement = newElement;
	if (ret != IXML_SUCCESS) {
		IxmlPrintf(__FILE__, line, "ixmlDocument_createElementNSEx", "Error %d\n", ret);
	}

	return ret;
}
Example #3
0
/*================================================================
*   ixmlDocument_createElementNSEx
*       Creates an element of the given qualified name and namespace URI.
*       External function.
*   Parameters:
*       namespaceURI: the namespace URI of the element to create.
*       qualifiedName: the qualified name of the element to instantiate.
*   Return Value:
*   Return Value:
*       IXML_SUCCESS
*       IXML_INVALID_PARAMETER:     if either doc,namespaceURI or qualifiedName is NULL
*       IXML_INSUFFICIENT_MEMORY:   if not enough memory to finish this operations.
*
*=================================================================*/
int
ixmlDocument_createElementNSEx( IN IXML_Document * doc,
                                IN DOMString namespaceURI,
                                IN DOMString qualifiedName,
                                OUT IXML_Element ** rtElement )
{

    IXML_Element *newElement = NULL;
    int errCode = IXML_SUCCESS;

    if( ( doc == NULL ) || ( namespaceURI == NULL )
        || ( qualifiedName == NULL ) ) {
        errCode = IXML_INVALID_PARAMETER;
        goto ErrorHandler;
    }

    errCode =
        ixmlDocument_createElementEx( doc, qualifiedName, &newElement );
    if( errCode != IXML_SUCCESS ) {
        goto ErrorHandler;
    }
    /* set the namespaceURI field */
    newElement->n.namespaceURI = strdup( namespaceURI );
    if( newElement->n.namespaceURI == NULL ) {
        ixmlElement_free( newElement );
        newElement = NULL;
        errCode = IXML_INSUFFICIENT_MEMORY;
        goto ErrorHandler;
    }
    /* set the localName and prefix */
    errCode =
        ixmlNode_setNodeName( ( IXML_Node * ) newElement, qualifiedName );
    if( errCode != IXML_SUCCESS ) {
        ixmlElement_free( newElement );
        newElement = NULL;
        errCode = IXML_INSUFFICIENT_MEMORY;
        goto ErrorHandler;
    }

    newElement->n.nodeValue = NULL;

  ErrorHandler:
    *rtElement = newElement;
    return errCode;

}
Example #4
0
/*================================================================
*   ixmlDocument_createElementEx
*       Creates an element of the type specified.
*       External function.
*   Parameters:
*       doc:        pointer to document
*       tagName:    The name of the element, it is case-sensitive.
*   Return Value:
*       IXML_SUCCESS
*       IXML_INVALID_PARAMETER:     if either doc or tagName is NULL
*       IXML_INSUFFICIENT_MEMORY:   if not enough memory to finish this operations.
*
*=================================================================*/
int
ixmlDocument_createElementEx( IN IXML_Document * doc,
                              IN DOMString tagName,
                              OUT IXML_Element ** rtElement )
{

    int errCode = IXML_SUCCESS;
    IXML_Element *newElement = NULL;

    if( ( doc == NULL ) || ( tagName == NULL ) ) {
        errCode = IXML_INVALID_PARAMETER;
        goto ErrorHandler;
    }

    newElement = ( IXML_Element * ) malloc( sizeof( IXML_Element ) );
    if( newElement == NULL ) {
        errCode = IXML_INSUFFICIENT_MEMORY;
        goto ErrorHandler;
    }

    ixmlElement_init( newElement );
    newElement->tagName = strdup( tagName );
    if( newElement->tagName == NULL ) {
        ixmlElement_free( newElement );
        newElement = NULL;
        errCode = IXML_INSUFFICIENT_MEMORY;
        goto ErrorHandler;
    }
    /* set the node fields */
    newElement->n.nodeType = eELEMENT_NODE;
    newElement->n.nodeName = strdup( tagName );
    if( newElement->n.nodeName == NULL ) {
        ixmlElement_free( newElement );
        newElement = NULL;
        errCode = IXML_INSUFFICIENT_MEMORY;
        goto ErrorHandler;
    }

    newElement->n.ownerDocument = doc;

  ErrorHandler:
    *rtElement = newElement;
    return errCode;

}
Example #5
0
/******************************************************************************
 * DestroyObject
 *
 * Description: 
 *	DIDL Object destructor, automatically called by "talloc_free".
 *
 *****************************************************************************/
static int
DestroyObject (DIDLObject* const o)
{
	if (o) {
		ixmlElement_free (o->element);
		
		// The "talloc'ed" strings will be deleted automatically 
	}
	return 0; // ok -> deallocate memory
}
Example #6
0
/*================================================================
*   ixmlNode_cloneElement
*       returns a clone of element node
*       Internal to parser only.
*
*=================================================================*/
IXML_Element *
ixmlNode_cloneElement( IN IXML_Element * nodeptr )
{
    IXML_Element *newElement;
    IXML_Node *elementNode;
    IXML_Node *srcNode;
    int rc;

    assert( nodeptr != NULL );

    newElement = ( IXML_Element * ) malloc( sizeof( IXML_Element ) );
    if( newElement == NULL ) {
        return NULL;
    }

    ixmlElement_init( newElement );
    rc = ixmlElement_setTagName( newElement, nodeptr->tagName );
    if( rc != IXML_SUCCESS ) {
        ixmlElement_free( newElement );
        return NULL;
    }

    elementNode = ( IXML_Node * ) newElement;
    srcNode = ( IXML_Node * ) nodeptr;
    rc = ixmlNode_setNodeName( elementNode, srcNode->nodeName );
    if( rc != IXML_SUCCESS ) {
        ixmlElement_free( newElement );
        return NULL;
    }

    rc = ixmlNode_setNodeValue( elementNode, srcNode->nodeValue );
    if( rc != IXML_SUCCESS ) {
        ixmlElement_free( newElement );
        return NULL;
    }

    rc = ixmlNode_setNamespaceURI( elementNode, srcNode->namespaceURI );
    if( rc != IXML_SUCCESS ) {
        ixmlElement_free( newElement );
        return NULL;
    }

    rc = ixmlNode_setPrefix( elementNode, srcNode->prefix );
    if( rc != IXML_SUCCESS ) {
        ixmlElement_free( newElement );
        return NULL;
    }

    rc = ixmlNode_setLocalName( elementNode, srcNode->localName );
    if( rc != IXML_SUCCESS ) {
        ixmlElement_free( newElement );
        return NULL;
    }

    elementNode->nodeType = eELEMENT_NODE;

    return newElement;

}
Example #7
0
void rtpxmlElement_free(RTPXML_Element* element)
{
	ixmlElement_free((IXML_Element *) element);
}
Example #8
0
int WriteID3Tag(char *ptrPath,ZDB_METATRACK *trackMeta)
{
    IXML_Document *dom = NULL;
    IXML_Element *elementCmd = NULL;
    IXML_Element *element = NULL;
    IXML_Node *node = NULL;
    char *ptrXml = NULL;
    char *result = NULL;

    if((dom = ixmlDocument_createDocument()) == NULL)
        return ZAPP_FAILED;

    /*cmd node*/
    if((elementCmd = ixmlDocument_createElement(dom, "cmd")) == NULL)
        goto errOut;

    /*op = WriteMetadata*/
    ixmlElement_setAttribute(elementCmd,"op","WriteMetadata");
    ixmlNode_appendChild(&dom->n, (IXML_Node *)elementCmd);

    //FileName node
    if((element = ixmlDocument_createElement(dom, "FileName")) == NULL)
        goto errOut;
    if((node = ixmlDocument_createTextNode(dom, ptrPath)) == NULL)
    {
        ixmlElement_free(element);
        goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //artFile node
    if((element = ixmlDocument_createElement(dom, "artFile")) == NULL)
         goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->albumArtURI)) == NULL)
    {
       ixmlElement_free(element);
       goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //title node
    if((element = ixmlDocument_createElement(dom, "title")) == NULL)
       goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->trackTitle)) == NULL)
    {
       ixmlElement_free(element);
       goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //album node
    if((element = ixmlDocument_createElement(dom, "album")) == NULL)
        goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->albumname)) == NULL)
    {
        ixmlElement_free(element);
        goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //artistname node
    if((element = ixmlDocument_createElement(dom, "artist")) == NULL)
        goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->artistname)) == NULL)
    {
       ixmlElement_free(element);
       goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //genre node
    if((element = ixmlDocument_createElement(dom, "genre")) == NULL)
        goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->genrename)) == NULL)
    {
        ixmlElement_free(element);
        goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //year node
    if((element = ixmlDocument_createElement(dom, "year")) == NULL)
        goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->releaseDate)) == NULL)
    {
       ixmlElement_free(element);
       goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);

    //trackNum node
    if((element = ixmlDocument_createElement(dom, "trackNum")) == NULL)
       goto errOut;
    if((node = ixmlDocument_createTextNode(dom, trackMeta->trackNo)) == NULL)
    {
       ixmlElement_free(element);
       goto errOut;
    }
    ixmlNode_appendChild((IXML_Node *)element, node);
    ixmlNode_appendChild((IXML_Node *)elementCmd, (IXML_Node *)element);
    ptrXml = ixmlPrintDocument(dom);
    result = Call3rdPartyCommand("zxtract", ptrXml, strlen(ptrXml),32);

errOut:
    if(result)
    {
       free(result);
    }

    ixmlDocument_free(dom);
    if(ptrXml != NULL)
    {
        free(ptrXml);
    }
    return ZAPP_SUCCESS;
}
Example #9
0
/************************************************************************
*	Function :	config_description_doc
*
*	Parameters :
*		INOUT IXML_Document *doc ;IMXL description document to be 
*					configured	
*		IN const char* ip_str ;	string containing the IP port number
*		OUT char** root_path_str ;	buffer to hold the root path
*					of the configured description document
*		INOUT IXML_Document *doc :	Description document
*		IN const char* ip_str :	ipaddress string
*		OUT char** root_path_str :	root path string
*
*	Description : Configure the description document. Add the standard 
*		format and then add information from the root device and any
*		child nodes.
*
*	Return : int ;
*		UPNP_E_SUCCESS - On Success
*		UPNP_E_OUTOF_MEMORY - Default Error
*		UPNP_E_INVALID_DESC - Invalid child node		
*		UPNP_E_INVALID_URL - Invalid node information
*
*	Note :
************************************************************************/
static int
config_description_doc( INOUT IXML_Document * doc,
                        IN const char *ip_str,
                        OUT char **root_path_str )
{
    xboolean addNew = FALSE;
    IXML_NodeList *baseList;
    IXML_Element *element = NULL;
    IXML_Element *newElement = NULL;
    IXML_Node *textNode = NULL;
    IXML_Node *rootNode = NULL;
    IXML_Node *urlbase_node = NULL;
    char *urlBaseStr = "URLBase";
    const DOMString domStr = NULL;
    uri_type uri;
    int err_code;
    int len;
    membuffer url_str;
    membuffer root_path;

    membuffer_init( &url_str );
    membuffer_init( &root_path );

    err_code = UPNP_E_OUTOF_MEMORY; // default error

    baseList = ixmlDocument_getElementsByTagName( doc, urlBaseStr );
    if( baseList == NULL ) {
        // urlbase not found -- create new one
        addNew = TRUE;
        element = ixmlDocument_createElement( doc, urlBaseStr );
        if( element == NULL ) {
            goto error_handler;
        }

        if( membuffer_append_str( &url_str, "http://" ) != 0 ||
            membuffer_append_str( &url_str, ip_str ) != 0 ||
            membuffer_append_str( &url_str, "/" ) != 0 ||
            membuffer_append_str( &root_path, "/" ) != 0 ) {
            goto error_handler;
        }

        rootNode = ixmlNode_getFirstChild( ( IXML_Node * ) doc );
        if( rootNode == NULL ) {
            err_code = UPNP_E_INVALID_DESC;
            goto error_handler;
        }

        err_code =
            ixmlNode_appendChild( rootNode, ( IXML_Node * ) element );
        if( err_code != IXML_SUCCESS ) {
            goto error_handler;
        }

        textNode =
            ixmlDocument_createTextNode( doc, ( char * )url_str.buf );
        if( textNode == NULL ) {
            goto error_handler;
        }

        err_code =
            ixmlNode_appendChild( ( IXML_Node * ) element, textNode );
        if( err_code != IXML_SUCCESS ) {
            goto error_handler;
        }

    } else {
        // urlbase found
        urlbase_node = ixmlNodeList_item( baseList, 0 );
        assert( urlbase_node != NULL );

        textNode = ixmlNode_getFirstChild( urlbase_node );
        if( textNode == NULL ) {
            err_code = UPNP_E_INVALID_DESC;
            goto error_handler;
        }

        domStr = ixmlNode_getNodeValue( textNode );
        if( domStr == NULL ) {
            err_code = UPNP_E_INVALID_URL;
            goto error_handler;
        }

        len = parse_uri( domStr, strlen( domStr ), &uri );
        if( len < 0 || uri.type != ABSOLUTE ) {
            err_code = UPNP_E_INVALID_URL;
            goto error_handler;
        }

        if( membuffer_assign( &url_str, uri.scheme.buff,
                              uri.scheme.size ) != 0 ||
            membuffer_append_str( &url_str, "://" ) != 0 ||
            membuffer_append_str( &url_str, ip_str ) != 0 ) {
            goto error_handler;
        }
        // add leading '/' if missing from relative path
        if( ( uri.pathquery.size > 0 && uri.pathquery.buff[0] != '/' ) ||
            ( uri.pathquery.size == 0 )
             ) {
            if( membuffer_append_str( &url_str, "/" ) != 0 ||
                membuffer_append_str( &root_path, "/" ) != 0 ) {
                goto error_handler;
            }
        }

        if( membuffer_append( &url_str, uri.pathquery.buff,
                              uri.pathquery.size ) != 0 ||
            membuffer_append( &root_path, uri.pathquery.buff,
                              uri.pathquery.size ) != 0 ) {
            goto error_handler;
        }
        // add trailing '/' if missing
        if( url_str.buf[url_str.length - 1] != '/' ) {
            if( membuffer_append( &url_str, "/", 1 ) != 0 ) {
                goto error_handler;
            }
        }

        err_code = ixmlNode_setNodeValue( textNode, url_str.buf );
        if( err_code != IXML_SUCCESS ) {
            goto error_handler;
        }
    }

    *root_path_str = membuffer_detach( &root_path );    // return path
    err_code = UPNP_E_SUCCESS;

  error_handler:
    if( err_code != UPNP_E_SUCCESS ) {
        ixmlElement_free( newElement );
    }

    ixmlNodeList_free( baseList );

    membuffer_destroy( &root_path );
    membuffer_destroy( &url_str );

    return err_code;
}
Example #10
0
int xmldb_putDeviceReference(IXML_Element* deviceData)
{
    IXML_Element* devices =
        ixmlNode_convertToElement(
            getNodeByHref(_storage, DEVICE_LIST_URI, NULL));
    if (devices == NULL)
    {
        // database failure
        log_error("Unable to find device list in the storage.");
        return -1;
    }

    //TODO check that there are no links with such address yet

    // create new <ref/> object and copy 'href', 'name', 'display' and
    // 'displayName' attributes to it

    IXML_Element* ref =
        ixmlElement_createChildElementWithLog(devices, OBIX_OBJ_REF);
    if (ref == NULL)
    {
        log_error("Unable to add new reference to the device list.");
        return -1;
    }

    // copy attribute uri
    int error = ixmlElement_copyAttributeWithLog(deviceData, ref,
                OBIX_ATTR_HREF,
                TRUE);
    if (error != IXML_SUCCESS)
    {
        ixmlElement_free(ref);
        return -1;
    }

    // copy attribute name
    error = ixmlElement_copyAttributeWithLog(deviceData, ref,
            OBIX_ATTR_NAME,
            FALSE);
    if ((error != IXML_SUCCESS) && (error != IXML_NOT_FOUND_ERR))
    {
        ixmlElement_free(ref);
        return -1;
    }

    // copy optional attribute display
    error = ixmlElement_copyAttributeWithLog(deviceData, ref,
            OBIX_ATTR_DISPLAY,
            FALSE);
    if ((error != IXML_SUCCESS) && (error != IXML_NOT_FOUND_ERR))
    {
        ixmlElement_free(ref);
        return -1;
    }

    // copy optional attribute displayName
    error = ixmlElement_copyAttributeWithLog(deviceData, ref,
            OBIX_ATTR_DISPLAY_NAME,
            FALSE);
    if ((error != IXML_SUCCESS) && (error != IXML_NOT_FOUND_ERR))
    {
        ixmlElement_free(ref);
        return -1;
    }

    return 0;
}