Exemple #1
0
void ixmlNode_free(IXML_Node *nodeptr)
{
    if (nodeptr != NULL) {
        ixmlNode_free(nodeptr->firstChild);
        ixmlNode_free(nodeptr->nextSibling);
        ixmlNode_free(nodeptr->firstAttr);
        ixmlNode_freeSingleNode(nodeptr);
    }
}
Exemple #2
0
/*================================================================
*   ixmlDocument_createTextNodeEx
*       Creates an text node. 
*       External function.
*   Parameters:
*       data: text data for the text node. It is stored in nodeValue field.
*   Return Value:
*       IXML_SUCCESS
*       IXML_INVALID_PARAMETER:     if either doc or data is NULL
*       IXML_INSUFFICIENT_MEMORY:   if not enough memory to finish this operations.
*
*=================================================================*/
int
ixmlDocument_createTextNodeEx( IN IXML_Document * doc,
                               IN char *data,
                               OUT IXML_Node ** textNode )
{
  IXML_Node *returnNode;
  int rc = IXML_SUCCESS;

  returnNode = NULL;
  //080903, JC, allow to create text node with NULL
  //if( ( doc == NULL ) || ( data == NULL ) ) {
  if( doc == NULL ) {
    rc = IXML_INVALID_PARAMETER;
    goto ErrorHandler;
  }

  returnNode = ( IXML_Node * ) malloc( sizeof( IXML_Node ) );
  if( returnNode == NULL ) {
    rc = IXML_INSUFFICIENT_MEMORY;
    goto ErrorHandler;
  }
  // initialize the node
  ixmlNode_init( returnNode );

  returnNode->nodeName = strdup( TEXTNODENAME );
  if( returnNode->nodeName == NULL ) {
    ixmlNode_free( returnNode );
    returnNode = NULL;
    rc = IXML_INSUFFICIENT_MEMORY;
    goto ErrorHandler;
  }
  // add in node value
  if( data != NULL ) {
/* TODO: ok, here the data should be unescaped! */
    returnNode->nodeValue = strdup( data );
/* */
    if( returnNode->nodeValue == NULL ) {
      ixmlNode_free( returnNode );
      returnNode = NULL;
      rc = IXML_INSUFFICIENT_MEMORY;
      goto ErrorHandler;
    }
  }

  returnNode->nodeType = eTEXT_NODE;
  returnNode->ownerDocument = doc;

ErrorHandler:
  *textNode = returnNode;
  return rc;

}
Exemple #3
0
/*================================================================
*   ixmlDocument_createTextNodeEx
*       Creates an text node.
*       External function.
*   Parameters:
*       data: text data for the text node. It is stored in nodeValue field.
*   Return Value:
*       IXML_SUCCESS
*       IXML_INVALID_PARAMETER:     if either doc or data is NULL
*       IXML_INSUFFICIENT_MEMORY:   if not enough memory to finish this operations.
*
*=================================================================*/
int
ixmlDocument_createTextNodeEx( IN IXML_Document * doc,
                               IN char *data,
                               OUT IXML_Node ** textNode )
{
    IXML_Node *returnNode;
    int rc = IXML_SUCCESS;

    returnNode = NULL;
    if( ( doc == NULL ) || ( data == NULL ) ) {
        rc = IXML_INVALID_PARAMETER;
        goto ErrorHandler;
    }

    returnNode = ( IXML_Node * ) malloc( sizeof( IXML_Node ) );
    if( returnNode == NULL ) {
        rc = IXML_INSUFFICIENT_MEMORY;
        goto ErrorHandler;
    }
    /* initialize the node */
    ixmlNode_init( returnNode );

    returnNode->nodeName = strdup( TEXTNODENAME );
    if( returnNode->nodeName == NULL ) {
        ixmlNode_free( returnNode );
        returnNode = NULL;
        rc = IXML_INSUFFICIENT_MEMORY;
        goto ErrorHandler;
    }
    /* add in node value */
    if( data != NULL ) {
        returnNode->nodeValue = strdup( data );
        if( returnNode->nodeValue == NULL ) {
            ixmlNode_free( returnNode );
            returnNode = NULL;
            rc = IXML_INSUFFICIENT_MEMORY;
            goto ErrorHandler;
        }
    }

    returnNode->nodeType = eTEXT_NODE;
    returnNode->ownerDocument = doc;

  ErrorHandler:
    *textNode = returnNode;
    return rc;

}
Exemple #4
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;
}
Exemple #5
0
int YX_CD_GetBestMediaInfo(char *dms_ip, char *metadata, t_MEDIA_INFO *minfo)
{
	char *dup_protocol, *transport, *mimetype, *dlna; 
	IXML_Node *node=NULL;
	int ret = -1;
	
	if(!dms_ip || !metadata || !minfo)
		return -2;
	
	ret = s_CD_GetBestRes(dms_ip, metadata, &node);
	if(node)
	{
		IXML_Element*element = (IXML_Element*)node;
		const char* protocol = ixmlElement_getAttribute (element, "protocolInfo");
		const char* uri = XMLUtil_GetElementValue (element);
		if (uri && protocol && s_YX_CD_CheckInfo(protocol, &dup_protocol, &transport, &mimetype, &dlna))
		{
			s_CD_CreateMediaInfo(mimetype, element, dlna, minfo);
            free(dup_protocol);
			ret = 0;
		}
		ixmlNode_free(node);
	}
	return ret;
}
Exemple #6
0
/*================================================================
*   ixmlElement_free
*       frees a element node.
*       External function.
*
*=================================================================*/
void
ixmlElement_free( IN IXML_Element * element )
{
    if( element != NULL ) {
        ixmlNode_free( ( IXML_Node * ) element );
    }
}
Exemple #7
0
int ixmlNode_removeChild(
    IXML_Node *nodeptr,
    IXML_Node *oldChild,
    IXML_Node **returnNode)
{
    if (!nodeptr || !oldChild)
        return IXML_INVALID_PARAMETER;
    if (!ixmlNode_isParent(nodeptr, oldChild))
        return IXML_NOT_FOUND_ERR;
    if (oldChild->prevSibling)
        oldChild->prevSibling->nextSibling = oldChild->nextSibling;
    if (nodeptr->firstChild == oldChild)
        nodeptr->firstChild = oldChild->nextSibling;
    if (oldChild->nextSibling)
        oldChild->nextSibling->prevSibling = oldChild->prevSibling;
    oldChild->nextSibling = NULL;
    oldChild->prevSibling = NULL;
    oldChild->parentNode = NULL;
    if (returnNode)
        *returnNode = oldChild;
    else
        ixmlNode_free(oldChild);

    return IXML_SUCCESS;
}
void xmldb_deleteMetaInfo(IXML_Element* doc)
{
    IXML_NodeList* list = ixmlElement_getElementsByTagName(doc, OBIX_META);
    if (list == NULL)
    {
        log_debug("oBIX object doesn't contain any meta information.");
        return;
    }

    int length = ixmlNodeList_length(list);

    IXML_Node* node;
    int error;
    int i;

    for (i = 0; i < length; i++)
    {
        node = ixmlNodeList_item(list, i);
        error = ixmlNode_removeChild(ixmlNode_getParentNode(node), node, &node);
        if (error != IXML_SUCCESS)
        {
            log_warning("Unable to clean the oBIX object from meta information "
                        "(error %d).", error);
            ixmlNodeList_free(list);
            return;
        }
        ixmlNode_free(node);
    }

    ixmlNodeList_free(list);
}
/*================================================================
*   ixmlCDATASection_free
*       frees a CDATASection node.
*       External function.
*
*=================================================================*/
void
ixmlCDATASection_free( IN IXML_CDATASection * nodeptr )
{
    if( nodeptr != NULL ) {
        ixmlNode_free( ( IXML_Node * ) nodeptr );
    }
}
Exemple #10
0
/*================================================================
*   Function: Attr_free
*       Frees an attribute node.
*       external function.
*
*=================================================================*/
void
ixmlAttr_free( IN IXML_Attr * attr )
{
    if( attr != NULL ) {
        ixmlNode_free( ( IXML_Node * ) attr );
    }
}
Exemple #11
0
/*================================================================
*   ixmlDocument_free
*       It frees the whole document tree.
*       External function.
*
*=================================================================*/
void
ixmlDocument_free( IN IXML_Document * doc )
{
    if( doc != NULL ) {
        ixmlNode_free( ( IXML_Node * ) doc );
		doc = NULL;
    }
}
Exemple #12
0
/**
 * Adds provided data to the storage.
 * @param checkPrefix If @a TRUE than all nodes with absolute URIs will be
 *                    checked to have /obix prefix.
 * @return @a 0 on success; error code otherwise.
 */
static int xmldb_putDOMHelper(IXML_Element* data, BOOL checkPrefix)
{
    IXML_Node* node = ixmlElement_getNode(data);
    IXML_Node* newNode = NULL;

    // shortcut for cleaning all resources if error occurs.
    void onError()
    {
        if (newNode != NULL)
        {
            ixmlNode_free(newNode);
        }
    }

    const char* href = checkNode(node, checkPrefix);
    if (href == NULL)
    {
        // error is already logged.
        onError();
        return -1;
    }

    // append node to the storage
    int error = ixmlDocument_importNode(_storage, node, TRUE, &newNode);
    if (error != IXML_SUCCESS)
    {
        log_warning("Unable to write to the storage (error %d).", error);
        onError();
        return error;
    }

    // look for available node with the same href
    IXML_Node* nodeInStorage = getNodeByHref(_storage, href, NULL);
    if (nodeInStorage != NULL)
    {
        log_warning("Unable to write to the storage: The object with the same "
                    "URI (%s) already exists.", href);
        onError();
        return -2;
        // overwrite existing node
        //ixmlNode_replaceChild(ixmlNode_getParentNode(nodeInStorage),
        //                      newNode,
        //                      nodeInStorage,
        //                      &nodeInStorage);
        //ixmlNode_free(nodeInStorage);
    }

    // append as a new node
    error = ixmlNode_appendChild(ixmlDocument_getNode(_storage), newNode);
    if (error != IXML_SUCCESS)
    {
        log_warning("Unable to write to the storage (error %d).", error);
        onError();
        return error;
    }

    return 0;
}
Exemple #13
0
/*================================================================
*   ixmlDocumenfree
*       It frees the whole document tree.
*       External function.
*
*=================================================================*/
void
ixmlDocument_free( IN IXML_Document * doc )
{
    if( doc != NULL ) {
        #ifdef PSP_XSLT_SUPPORT
            if(doc->URL)
				T_free(doc->URL);
			if(doc->_private)
				T_free(doc->_private);
        #endif /*PSP_XSLT_SUPPORT*/
	    
        ixmlNode_free( ( IXML_Node * ) doc );
    }

}
Exemple #14
0
int YX_CD_GetBestRes (char *dms_ip, char *metadata, char **res)
{
	IXML_Node *node=NULL;
	int ret = -1;
	
	if(!dms_ip || !metadata || !res)
		return -2;

	ret = s_CD_GetBestRes(dms_ip, metadata, &node);
	if(node)
	{
		*res=Dlna_strdup(node->nodeValue);
		ixmlNode_free(node);
		ret = 0;
	}
	return ret;
}
Exemple #15
0
int xmldb_deleteMetaVariable(IXML_Node* meta)
{
    IXML_Node* metaItem = ixmlElement_getNode(
                              ixmlAttr_getOwnerElement(
                                  ixmlNode_convertToAttr(meta)));

    int error = ixmlNode_removeChild(
                    ixmlNode_getParentNode(metaItem), metaItem, &metaItem);
    if (error != IXML_SUCCESS)
    {
        log_error("Unable to delete meta data: ixmlNode_removeChild() "
                  "returned %d", error);
        return -1;
    }

    ixmlNode_free(metaItem);
    return 0;
}
Exemple #16
0
int YX_CD_GetBestUri (char *dms_ip, char *metadata, char **uri)
{
	IXML_Node *node=NULL;
	int ret = -1;
	
	if(!dms_ip || !metadata || !uri)
		return -2;
	
	ret = s_CD_GetBestRes(dms_ip, metadata, &node);
	if(node)
	{
		IXML_Element*element = (IXML_Element*)node;
		const char* str = XMLUtil_GetElementValue (element);
		*uri=Dlna_strdup(str);
		ixmlNode_free(node);
		ret = 0;
	}
	return ret;
}
Exemple #17
0
int xmldb_delete(const char* href)
{
    IXML_Node* node = getNodeByHref(_storage, href, NULL);
    if (node == NULL)
    {
        log_warning("Unable to delete data. Provided URI (%s) doesn't "
                    "exist.", href);
        return -1;
    }

    int error = ixmlNode_removeChild(ixmlNode_getParentNode(node), node, &node);
    if (error != IXML_SUCCESS)
    {
        log_warning("Error occurred when deleting data (error %d).", error);
        return -1;
    }

    ixmlNode_free(node);
    return 0;
}
 UPnPAllowedValueRange::~UPnPAllowedValueRange() {
     if (node != NULL){
         ixmlNode_free((IXML_Node*)node);
         node = NULL;
     }
 }