277 lines
8.4 KiB
C
277 lines
8.4 KiB
C
/*******************************************************************************
|
|
* Copyright (C) 2004-2006 Intel Corp. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* - Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* - Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
*
|
|
* - Neither the name of Intel Corp. nor the names of its
|
|
* contributors may be used to endorse or promote products derived from this
|
|
* software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS
|
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*******************************************************************************/
|
|
|
|
/**
|
|
* @author Anas Nashif
|
|
* @author Eugene Yarmosh
|
|
*/
|
|
#ifndef WS_XML_API_H_
|
|
#define WS_XML_API_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "wsman-types.h"
|
|
|
|
|
|
/**
|
|
* @defgroup XML XML
|
|
* @brief XML API
|
|
*
|
|
* @{
|
|
*/
|
|
|
|
|
|
|
|
// context
|
|
|
|
#define WS_CONTEXT_TYPE_MASK 0x0f
|
|
#define WS_CONTEXT_FREE_DATA 0x80
|
|
|
|
#define WS_CONTEXT_TYPE_STRING 0x01
|
|
#define WS_CONTEXT_TYPE_ULONG 0x02
|
|
#define WS_CONTEXT_TYPE_XMLDOC 0x03
|
|
#define WS_CONTEXT_TYPE_XMLNODE 0x04
|
|
#define WS_CONTEXT_TYPE_BLOB 0x05
|
|
#define WS_CONTEXT_TYPE_FAULT 0x06
|
|
|
|
|
|
#define XML_LAST_CHILD (-1)
|
|
#define XML_ELEMENT_NEXT (-2)
|
|
#define XML_ELEMENT_PREV (-3)
|
|
#define XML_ELEMENT_PARENT (-4)
|
|
|
|
|
|
#define XML_NS_URI 1
|
|
#define XML_NS_PREFIX 2
|
|
#define XML_LOCAL_NAME 3
|
|
#define XML_TEXT_VALUE 4
|
|
|
|
#define XML_COUNT_NODE 10
|
|
#define XML_COUNT_NS 11
|
|
#define XML_COUNT_ATTR 12
|
|
|
|
|
|
#define PROCESSED_MSG_ID_MAX_SIZE 200
|
|
#define WSMAN_MINIMAL_ENVELOPE_SIZE_REQUEST 8192
|
|
#define WSMAN_MAX_ENVELOPE_SIZE 32767
|
|
|
|
|
|
void ws_xml_free_memory(void *ptr);
|
|
|
|
typedef int (*WsXmlEnumCallback) (WsXmlNodeH, void *);
|
|
|
|
typedef int (*WsXmlNsEnumCallback) (WsXmlNodeH, WsXmlNsH, void *);
|
|
|
|
// Dumping
|
|
void ws_xml_dump_node_tree(FILE * f, WsXmlNodeH node);
|
|
|
|
/* indented, using doc encoding */
|
|
void ws_xml_dump_memory_node_tree(WsXmlNodeH node, char **buf,
|
|
int *ptrSize);
|
|
|
|
/* indented, using given encoding (default: utf-8) */
|
|
void ws_xml_dump_memory_node_tree_enc(WsXmlNodeH node, char **buf,
|
|
int *ptrSize, const char *encoding);
|
|
|
|
void ws_xml_dump_doc(FILE * f, WsXmlDocH doc);
|
|
|
|
/* non-indented, using given encoding */
|
|
void ws_xml_dump_memory_enc(WsXmlDocH doc, char **buf, int *ptrSize,
|
|
const char *encoding);
|
|
|
|
// WSXmlDoc handling
|
|
|
|
WsXmlNodeH ws_xml_get_doc_root(WsXmlDocH doc);
|
|
|
|
void ws_xml_destroy_doc(WsXmlDocH doc);
|
|
|
|
char *ws_xml_get_xpath_value(WsXmlDocH doc, char *expression);
|
|
|
|
WsXmlDocH ws_xml_create_soap_envelope(void);
|
|
|
|
WsXmlNodeH ws_xml_get_soap_envelope(WsXmlDocH doc);
|
|
|
|
WsXmlNodeH ws_xml_get_soap_header(WsXmlDocH doc);
|
|
|
|
WsXmlNodeH ws_xml_get_soap_body(WsXmlDocH doc);
|
|
|
|
WsXmlNodeH ws_xml_get_soap_element(WsXmlDocH doc, const char *name);
|
|
|
|
|
|
// WsXmlNode handling
|
|
WsXmlDocH ws_xml_get_node_doc(WsXmlNodeH node);
|
|
|
|
void ws_xml_duplicate_tree(WsXmlNodeH dstNode, WsXmlNodeH srcNode);
|
|
|
|
int ws_xml_duplicate_children(WsXmlNodeH dstNode, WsXmlNodeH srcNode);
|
|
|
|
WsXmlNodeH ws_xml_get_node_parent(WsXmlNodeH node);
|
|
|
|
int ws_xml_get_child_count(WsXmlNodeH parent);
|
|
|
|
int ws_xml_get_child_count_by_qname(WsXmlNodeH parent,
|
|
const char *nsUri, const char *name);
|
|
|
|
WsXmlNodeH ws_xml_get_child(WsXmlNodeH parent, int index,
|
|
const char *nsUri, const char *localName);
|
|
|
|
int ws_xml_enum_children(WsXmlNodeH parent, WsXmlEnumCallback callback,
|
|
void *data, int bRecursive);
|
|
|
|
WsXmlNodeH ws_xml_add_child(WsXmlNodeH node, const char *ns,
|
|
const char *localName, const char *val);
|
|
WsXmlNodeH ws_xml_add_prev_sibling(WsXmlNodeH node, const char *ns,
|
|
const char *localName, const char *val);
|
|
WsXmlNodeH ws_xml_add_child_sort(WsXmlNodeH node, const char *ns,
|
|
const char *localName, const char *val, int xmlescape);
|
|
|
|
WsXmlNodeH ws_xml_add_empty_child_format(WsXmlNodeH node,
|
|
const char *nsUri,
|
|
const char *format, ...);
|
|
|
|
WsXmlNsH ws_xml_ns_add(WsXmlNodeH node, const char *uri,
|
|
const char *prefix);
|
|
|
|
void ws_xml_set_ns(WsXmlNodeH r, const char* ns, const char* prefix );
|
|
|
|
WsXmlNodeH ws_xml_add_child_format(WsXmlNodeH node, const char *nsUri,
|
|
const char *localName,
|
|
const char *format, ...);
|
|
|
|
WsXmlNodeH ws_xml_add_qname_child(WsXmlNodeH parent, const char *nameNs,
|
|
const char *name, const char *valueNs,
|
|
const char *value);
|
|
|
|
int ws_xml_enum_tree(WsXmlNodeH top, WsXmlEnumCallback callback,
|
|
void *data, int bRecursive);
|
|
WsXmlNodeH ws_xml_find_in_tree(WsXmlNodeH head, const char *nsUri,
|
|
const char *localName, int bRecursive);
|
|
|
|
int ws_xml_is_node_qname(WsXmlNodeH node, const char *nsUri,
|
|
const char *name);
|
|
|
|
char *ws_xml_get_node_local_name(WsXmlNodeH node);
|
|
|
|
char *ws_xml_get_node_name_ns(WsXmlNodeH node);
|
|
|
|
int ws_xml_set_node_name(WsXmlNodeH node, const char *nsUri,
|
|
const char *name);
|
|
|
|
int ws_xml_set_node_qname_val(WsXmlNodeH node, const char *valNsUri,
|
|
const char *valName);
|
|
|
|
int ws_xml_get_ns_count(WsXmlNodeH node, int bWalkUpTree);
|
|
|
|
void ws_xml_ns_enum(WsXmlNodeH node, WsXmlNsEnumCallback callback,
|
|
void *data, int bWalkUpTree);
|
|
|
|
WsXmlNsH ws_xml_find_ns(WsXmlNodeH node, const char *nsUri,
|
|
const char *prefix, int bWalkUpTree);
|
|
|
|
WsXmlNsH ws_xml_get_ns(WsXmlNodeH node, int index);
|
|
|
|
WsXmlNsH ws_xml_define_ns(WsXmlNodeH node, const char *nsUri,
|
|
const char *nsPrefix, int bDefault);
|
|
char *ws_xml_get_ns_prefix(WsXmlNsH ns);
|
|
|
|
char *ws_xml_get_ns_uri(WsXmlNsH ns);
|
|
|
|
unsigned long ws_xml_get_node_ulong(WsXmlNodeH node);
|
|
|
|
int ws_xml_set_node_ulong(WsXmlNodeH node, unsigned long uVal);
|
|
|
|
int ws_xml_set_node_long(WsXmlNodeH node, long Val);
|
|
|
|
int ws_xml_set_node_real(WsXmlNodeH node, double Val);
|
|
|
|
char *ws_xml_get_node_text(WsXmlNodeH node);
|
|
|
|
static inline const char *ws_xml_get_node_text_safe(WsXmlNodeH node)
|
|
{
|
|
const char *ret = ws_xml_get_node_text(node);
|
|
|
|
return (ret) ? ret : "";
|
|
}
|
|
|
|
int ws_xml_set_node_text(WsXmlNodeH node, const char *text);
|
|
|
|
void ws_xml_duplicate_attr(WsXmlNodeH dstNode, WsXmlNodeH srcNode);
|
|
|
|
int ws_xml_get_node_attr_count(WsXmlNodeH node);
|
|
|
|
WsXmlAttrH ws_xml_get_node_attr(WsXmlNodeH node, int index);
|
|
|
|
WsXmlAttrH ws_xml_find_node_attr(WsXmlNodeH node, const char *attrNs,
|
|
const char *attrName);
|
|
|
|
WsXmlAttrH ws_xml_add_node_attr(WsXmlNodeH node, const char *nsUri,
|
|
const char *name, const char *value);
|
|
WsXmlAttrH ws_xml_add_qname_attr(WsXmlNodeH node, const char *nameNs,
|
|
const char *name, const char *valueNs,
|
|
const char *value);
|
|
|
|
unsigned long ws_xml_find_attr_ulong(WsXmlNodeH node, const char *ns,
|
|
const char *attrName);
|
|
int ws_xml_find_attr_bool(WsXmlNodeH node, const char *ns,
|
|
const char *attrName);
|
|
|
|
void ws_xml_remove_node_attr(WsXmlAttrH attr);
|
|
|
|
char *ws_xml_get_attr_name(WsXmlAttrH attr);
|
|
|
|
char *ws_xml_get_attr_ns(WsXmlAttrH attr);
|
|
|
|
char *ws_xml_get_attr_ns_prefix(WsXmlAttrH attr);
|
|
|
|
char *ws_xml_get_attr_value(WsXmlAttrH attr);
|
|
|
|
char *ws_xml_find_attr_value(WsXmlNodeH node, const char *ns,
|
|
const char *attrName);
|
|
|
|
void ws_xml_make_default_prefix(WsXmlNodeH node, const char *uri,
|
|
char *buf, int bufsize);
|
|
|
|
void ws_xml_copy_node(WsXmlNodeH src, WsXmlNodeH dst);
|
|
|
|
WsXmlDocH ws_xml_clone_and_create_doc(WsXmlDocH doc,
|
|
const char *rootNsUri,
|
|
const char *rootName );
|
|
|
|
|
|
/** @} */
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
#endif /*WS_XML_API_H_ */
|