yumapro  23.10T-0.1
YumaPro SDK
Loading...
Searching...
No Matches
xml_util.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2008 - 2012, Andy Bierman, All Rights Reserved.
3 * Copyright (c) 2012 - 2021, YumaWorks, Inc., All Rights Reserved.
4 *
5 * Unless required by applicable law or agreed to in writing,
6 * software distributed under the License is distributed on an
7 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
8 * KIND, either express or implied. See the License for the
9 * specific language governing permissions and limitations
10 * under the License.
11 */
12#ifndef _H_xml_util
13#define _H_xml_util
14/* FILE: xml_util.h
15*********************************************************************
16* *
17* P U R P O S E *
18* *
19*********************************************************************/
20
26/*********************************************************************
27* *
28* C H A N G E H I S T O R Y *
29* *
30*********************************************************************
31
32date init comment
33----------------------------------------------------------------------
3414-oct-05 abb begun
352-jan-06 abb rewrite xml_consume_* API to use simpler
36 xml_node_t
37*/
38
39
40/* From /usr/include/libxml2/libxml/ */
41#include <xmlreader.h>
42#include <xmlstring.h>
43
44#ifndef _H_ncxconst
45#include "ncxconst.h"
46#endif
47
48#ifndef _H_xmlns
49#include "xmlns.h"
50#endif
51
52#ifndef _H_log
53#include "log.h"
54#endif
55
56#ifdef __cplusplus
57extern "C" {
58#endif
59
60/********************************************************************
61* *
62* C O N S T A N T S *
63* *
64*********************************************************************/
65
66#define MAX_CHAR_ENT 8
67
68#define XML_START_MSG ((const xmlChar *)\
69 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
70
71#define XML_START_MSG_SIZE 38
72
73
74/* XML_PARSE_NOCDATA option merge CDATA as text nodes, used to
75 * parse Confd get-schema reply properly
76 */
77#define XML_READER_OPTIONS \
78 (XML_PARSE_RECOVER+XML_PARSE_NOERROR+ \
79 XML_PARSE_NOWARNING+XML_PARSE_NOBLANKS+XML_PARSE_NONET+ \
80 XML_PARSE_XINCLUDE+XML_PARSE_NOCDATA)
81
82#define XML_SES_URL "netconf://pdu"
83
84/********************************************************************
85* *
86* T Y P E S *
87* *
88*********************************************************************/
89
153typedef dlq_hdr_t xml_attrs_t;
154
155
157typedef struct xml_attr_t_ {
159 dlq_hdr_t attr_qhdr;
160
163
166
168 const xmlChar *attr_qname;
169
171 const xmlChar *attr_name;
172
176 xmlChar *attr_dname;
177
179 xmlChar *attr_val;
180
186 struct xpath_pcb_t_ *attr_xpcb;
187} xml_attr_t;
188
189
191typedef enum xml_nodetyp_t_ {
198
199
205typedef struct xml_node_t_ {
208
211
214
216 const xmlChar *module;
217
219 const xmlChar *badns;
220
222 xmlChar *qname;
223
225 const xmlChar *elname;
226
228 const xmlChar *simval;
229
231 uint32 simlen;
232
234 xmlChar *simfree;
235
237 int depth;
238
241} xml_node_t;
242
243
244/********************************************************************
245* *
246* F U N C T I O N S *
247* *
248*********************************************************************/
249
250
256extern xml_node_t *
257 xml_new_node (void);
258
259
265extern void
267
268
274extern void
276
277
283extern void
285
286
295extern status_t
296 xml_get_reader_from_buff (const xmlChar *buff,
297 xmlTextReaderPtr *reader);
298
299
309extern status_t
310 xml_get_reader_from_filespec (const char *filespec,
311 xmlTextReaderPtr *reader);
312
313
325extern status_t
326 xml_get_reader_for_session (xmlInputReadCallback readfn,
327 xmlInputCloseCallback closefn,
328 void *context,
329 xmlTextReaderPtr *reader);
330
331
343extern status_t
344 xml_reset_reader_for_session (xmlInputReadCallback readfn,
345 xmlInputCloseCallback closefn,
346 void *context,
347 xmlTextReaderPtr reader);
348
349
355extern void
356 xml_free_reader (xmlTextReaderPtr reader);
357
358
366extern const char *
367 xml_get_node_name (int nodeval);
368
369
377extern boolean
378 xml_advance_reader (xmlTextReaderPtr reader);
379
380
390extern status_t
391 xml_node_match (const xml_node_t *node,
392 xmlns_id_t nsid,
393 const xmlChar *elname,
394 xml_nodetyp_t nodetyp);
395
396
405extern status_t
406 xml_endnode_match (const xml_node_t *startnode,
407 const xml_node_t *endnode);
408
409
418extern boolean
419 xml_docdone (xmlTextReaderPtr reader);
420
421
428extern void
429 xml_dump_node (const xml_node_t *node,
430 log_debug_t lvl);
431
432
438extern void
440
441
447extern xml_attr_t *
448 xml_new_attr (void);
449
450
456extern void
458
459
469extern status_t
471 xmlns_id_t ns_id,
472 const xmlChar *attr_name,
473 const xmlChar *attr_val);
474
475
489extern xml_attr_t *
491 xmlns_id_t ns_id,
492 const xmlChar *attr_qname,
493 uint32 plen,
494 const xmlChar *attr_val,
495 status_t *res);
496
497
507extern status_t
509 xmlns_id_t ns_id,
510 const xmlChar *pfix);
511
512
522extern status_t
524 const xmlChar *ns,
525 const xmlChar *pfix);
526
527
540extern status_t
542 xmlns_id_t ns_id,
543 const xmlChar *pfix,
544 const xmlChar *nsval);
545
546
553extern xml_attr_t *
555
556
563extern xml_attr_t *
564 xml_get_first_attr (const xml_node_t *node);
565
566
573extern xml_attr_t *
575
576
582extern void
584
585
592extern void
593 xml_move_attrs (xml_attrs_t *src_attrs,
594 xml_attrs_t *dest_attrs);
595
596
597
609extern xml_attr_t *
611 xmlns_id_t nsid,
612 const xmlChar *attrname);
613
614
626extern xml_attr_t *
628 xmlns_id_t nsid,
629 const xmlChar *attrname);
630
631
643extern const xml_attr_t *
644 xml_find_ro_attr (const xml_node_t *node,
645 xmlns_id_t nsid,
646 const xmlChar *attrname);
647
648
657extern uint32
658 xml_strlen (const xmlChar *str);
659
660
672extern uint32
673 xml_strlen_sp (const xmlChar *str,
674 boolean *sp);
675
676
687extern uint32
688 xml_strcpy (xmlChar *copyTo,
689 const xmlChar *copyFrom);
690
691
701extern uint32
702 xml_strncpy (xmlChar *copyTo,
703 const xmlChar *copyFrom,
704 uint32 maxlen);
705
706
713extern xmlChar *
714 xml_strdup (const xmlChar *copyFrom);
715
716
724extern xmlChar *
725 xml_strcat (xmlChar *appendTo,
726 const xmlChar *appendFrom);
727
728
737extern xmlChar *
738 xml_strncat (xmlChar *appendTo,
739 const xmlChar *appendFrom,
740 uint32 maxlen);
741
742
750extern xmlChar *
751 xml_strndup (const xmlChar *copyFrom,
752 uint32 maxlen);
753
754
762extern char *
763 xml_ch_strndup (const char *copyFrom,
764 uint32 maxlen);
765
766
780extern int
781 xml_strcmp (const xmlChar *s1,
782 const xmlChar *s2);
783
784
798extern int
799 xml_stricmp (const xmlChar *s1,
800 const xmlChar *s2);
801
802
816extern int
817 xml_strncmp (const xmlChar *s1,
818 const xmlChar *s2,
819 uint32 maxlen);
820
821
836extern int
837 xml_strnicmp (const xmlChar *s1,
838 const xmlChar *s2,
839 uint32 maxlen);
840
841
848extern boolean
849 xml_isspace (uint32 ch);
850
851
858extern boolean
859 xml_isspace_str (const xmlChar *str);
860
861
879extern int
880 xml_strcmp_nosp (const xmlChar *s1,
881 const xmlChar *s2);
882
883
904int
905 xml_strcmp_nosp2 (const xmlChar *s1,
906 const xmlChar *s2);
907
908
920extern xmlChar *
921 xml_copy_clean_string (const xmlChar *str);
922
923
932extern xmlChar
933 xml_convert_char_entity (const xmlChar *str,
934 uint32 *used);
935
936
956extern status_t
957 xml_check_ns (xmlTextReaderPtr reader,
958 const xmlChar *elname,
959 xmlns_id_t *id,
960 uint32 *pfix_len,
961 const xmlChar **badns);
962
963
973extern void
974 xml_check_qname_content (xmlTextReaderPtr reader,
975 xml_node_t *node);
976
977
993extern status_t
994 xml_get_namespace_id (xmlTextReaderPtr reader,
995 const xmlChar *prefix,
996 uint32 prefixlen,
997 boolean register_missing,
998 xmlns_id_t *retnsid);
999
1000
1015extern status_t
1016 xml_consume_node (xmlTextReaderPtr reader,
1017 xml_node_t *xmlnode,
1018 boolean nserr,
1019 boolean adv);
1020
1021
1034extern xmlChar * xml_trim_string (xmlChar *str);
1035
1036
1040#ifdef __cplusplus
1041} /* end extern 'C' */
1042#endif
1043
1044#endif /* _H_xml_util */
log_debug_t
The debug level enumerations used in util/log.c.
Definition: log.h:386
status_t
global error return code
Definition: status_enum.h:187
uint16 xmlns_id_t
integer handle for registered namespaces
Definition: xmlns.h:89
status_t xml_consume_node(xmlTextReaderPtr reader, xml_node_t *xmlnode, boolean nserr, boolean adv)
parse function for YIN input
Definition: xml_util.c:2447
char * xml_ch_strndup(const char *copyFrom, uint32 maxlen)
String duplicate for max N chars.
Definition: xml_util.c:1703
status_t xml_reset_reader_for_session(xmlInputReadCallback readfn, xmlInputCloseCallback closefn, void *context, xmlTextReaderPtr reader)
Reset the xmlTextReader for parsing the input of a NETCONF session.
Definition: xml_util.c:418
status_t xml_add_inv_xmlns_attr(xml_attrs_t *attrs, xmlns_id_t ns_id, const xmlChar *pfix, const xmlChar *nsval)
add an xmlns decl to the attribute Queue for an INVALID namespace.
Definition: xml_util.c:1090
xml_attr_t * xml_find_attr(xml_node_t *node, xmlns_id_t nsid, const xmlChar *attrname)
Find an attribute.
Definition: xml_util.c:1295
status_t xml_add_attr(xml_attrs_t *attrs, xmlns_id_t ns_id, const xmlChar *attr_name, const xmlChar *attr_val)
add an attribute to an attribute list
Definition: xml_util.c:820
int xml_strcmp_nosp2(const xmlChar *s1, const xmlChar *s2)
String compare for xmlChar for 2 strings, but completely ignoring whitespace differences.
Definition: xml_util.c:2043
uint32 xml_strcpy(xmlChar *copyTo, const xmlChar *copyFrom)
String copy for xmlChar.
Definition: xml_util.c:1486
xmlChar * xml_strncat(xmlChar *appendTo, const xmlChar *appendFrom, uint32 maxlen)
String concatenate for at most maxlen xmlChars.
Definition: xml_util.c:1630
int xml_stricmp(const xmlChar *s1, const xmlChar *s2)
Case insensitive string compare for xmlChar.
Definition: xml_util.c:1785
const xml_attr_t * xml_find_ro_attr(const xml_node_t *node, xmlns_id_t nsid, const xmlChar *attrname)
Find a read-only attribute.
Definition: xml_util.c:1367
status_t xml_get_reader_from_buff(const xmlChar *buff, xmlTextReaderPtr *reader)
Get a new xmlTextReader for parsing a debug test file.
Definition: xml_util.c:305
void xml_free_node(xml_node_t *node)
Free an xml_node_t struct.
Definition: xml_util.c:246
xmlChar * xml_strcat(xmlChar *appendTo, const xmlChar *appendFrom)
String concatenate for xmlChar.
Definition: xml_util.c:1597
int xml_strcmp(const xmlChar *s1, const xmlChar *s2)
String compare for xmlChar.
Definition: xml_util.c:1746
boolean xml_isspace(uint32 ch)
Check if an xmlChar is a space char.
Definition: xml_util.c:1901
xml_nodetyp_t
only 4 types of nodes returned
Definition: xml_util.h:191
xml_attr_t * xml_find_attr_q(xml_attrs_t *attrs, xmlns_id_t nsid, const xmlChar *attrname)
Find an attribute in a Q.
Definition: xml_util.c:1324
int xml_strcmp_nosp(const xmlChar *s1, const xmlChar *s2)
String compare for xmlChar for 2 strings, but ignoring whitespace differences.
Definition: xml_util.c:1964
boolean xml_docdone(xmlTextReaderPtr reader)
check if the input is completed for a given PDU
Definition: xml_util.c:636
void xml_free_attr(xml_attr_t *attr)
free an attribute
Definition: xml_util.c:785
uint32 xml_strlen(const xmlChar *str)
Get the String len for xmlChar.
Definition: xml_util.c:1406
status_t xml_endnode_match(const xml_node_t *startnode, const xml_node_t *endnode)
check if a specific node is the proper endnode match for a given startnode
Definition: xml_util.c:592
xml_attr_t * xml_get_first_attr(const xml_node_t *node)
get the first attribute in the attrs list, from an xml_node_t param
Definition: xml_util.c:1192
const char * xml_get_node_name(int nodeval)
get the node type according to the xmlElementType enum list in /usr/include/libxml/libxml/tree....
Definition: xml_util.c:475
boolean xml_isspace_str(const xmlChar *str)
Check if an xmlChar string is all whitespace chars.
Definition: xml_util.c:1923
status_t xml_check_ns(xmlTextReaderPtr reader, const xmlChar *elname, xmlns_id_t *id, uint32 *pfix_len, const xmlChar **badns)
Check a namespace during parsing.
Definition: xml_util.c:2248
status_t xml_node_match(const xml_node_t *node, xmlns_id_t nsid, const xmlChar *elname, xml_nodetyp_t nodetyp)
check if a specific node is the proper owner, name, and type
Definition: xml_util.c:545
status_t xml_get_reader_from_filespec(const char *filespec, xmlTextReaderPtr *reader)
Get a new xmlTextReader for parsing a debug test file.
Definition: xml_util.c:341
uint32 xml_strncpy(xmlChar *copyTo, const xmlChar *copyFrom, uint32 maxlen)
String copy for xmlChar – checks for buffer overflow.
Definition: xml_util.c:1518
xmlChar * xml_copy_clean_string(const xmlChar *str)
Get a malloced string contained the converted string from the input.
Definition: xml_util.c:2119
void xml_clean_attrs(xml_attrs_t *attrs)
clean an xml_attrs_t variable
Definition: xml_util.c:1243
xml_attr_t * xml_add_qattr(xml_attrs_t *attrs, xmlns_id_t ns_id, const xmlChar *attr_qname, uint32 plen, const xmlChar *attr_val, status_t *res)
add a qualified attribute to an attribute list with a prefix
Definition: xml_util.c:872
void xml_clean_node(xml_node_t *node)
Clean an xml_node_t struct.
Definition: xml_util.c:266
void xml_free_reader(xmlTextReaderPtr reader)
Free the previously allocated xmlTextReader.
Definition: xml_util.c:453
xml_attr_t * xml_first_attr(xml_attrs_t *attrs)
get the first attribute in the list
Definition: xml_util.c:1167
status_t xml_get_namespace_id(xmlTextReaderPtr reader, const xmlChar *prefix, uint32 prefixlen, boolean register_missing, xmlns_id_t *retnsid)
Get the namespace for the specified prefix (may be NULL) Use the current XML reader context to resolv...
Definition: xml_util.c:2360
void xml_move_attrs(xml_attrs_t *src_attrs, xml_attrs_t *dest_attrs)
Move all the attrs from the src to the dest.
Definition: xml_util.c:1272
int xml_strncmp(const xmlChar *s1, const xmlChar *s2, uint32 maxlen)
String compare for xmlChar for at most 'maxlen' xmlChars.
Definition: xml_util.c:1824
xml_attr_t * xml_new_attr(void)
malloc and init an attribute struct
Definition: xml_util.c:764
status_t xml_get_reader_for_session(xmlInputReadCallback readfn, xmlInputCloseCallback closefn, void *context, xmlTextReaderPtr *reader)
Get a new xmlTextReader for parsing the input of a NETCONF session.
Definition: xml_util.c:378
void xml_check_qname_content(xmlTextReaderPtr reader, xml_node_t *node)
Check if the string node content is a likely QName.
Definition: xml_util.c:2307
xml_node_t * xml_new_node(void)
Malloc and init a new xml_node_t struct.
Definition: xml_util.c:206
void xml_init_node(xml_node_t *node)
Init an xml_node_t struct.
Definition: xml_util.c:229
xmlChar xml_convert_char_entity(const xmlChar *str, uint32 *used)
Convert an XML character entity into a single xmlChar.
Definition: xml_util.c:2185
int xml_strnicmp(const xmlChar *s1, const xmlChar *s2, uint32 maxlen)
Case insensitive string compare for xmlChar for at most 'maxlen' xmlChars.
Definition: xml_util.c:1865
uint32 xml_strlen_sp(const xmlChar *str, boolean *sp)
get length and check if any whitespace at the same time
Definition: xml_util.c:1443
void xml_init_attrs(xml_attrs_t *attrs)
initialize an xml_attrs_t variable
Definition: xml_util.c:745
xml_attr_t * xml_next_attr(xml_attr_t *attr)
get the next attribute in the list
Definition: xml_util.c:1218
xmlChar * xml_strndup(const xmlChar *copyFrom, uint32 maxlen)
String duplicate for max N xmlChars.
Definition: xml_util.c:1663
void xml_dump_node(const xml_node_t *node, log_debug_t lvl)
Debug function to printf xml_node_t contents.
Definition: xml_util.c:661
xmlChar * xml_trim_string(xmlChar *str)
trim leading and trailing whitespace inline in the same buffer
Definition: xml_util.c:2646
status_t xml_add_xmlns_attr_string(xml_attrs_t *attrs, const xmlChar *ns, const xmlChar *pfix)
add an xmlns decl to the attribute Queue
Definition: xml_util.c:1011
dlq_hdr_t xml_attrs_t
queue of xml_attr_t
Definition: xml_util.h:153
status_t xml_add_xmlns_attr(xml_attrs_t *attrs, xmlns_id_t ns_id, const xmlChar *pfix)
add an xmlns decl to the attribute Queue
Definition: xml_util.c:928
xmlChar * xml_strdup(const xmlChar *copyFrom)
String duplicate for xmlChar.
Definition: xml_util.c:1553
boolean xml_advance_reader(xmlTextReaderPtr reader)
Advance to the next node in the specified reader.
Definition: xml_util.c:517
@ XML_NT_NONE
not set
Definition: xml_util.h:192
@ XML_NT_END
end-tag of an element
Definition: xml_util.h:195
@ XML_NT_STRING
string content node
Definition: xml_util.h:196
@ XML_NT_START
start-tag of an element
Definition: xml_util.h:194
@ XML_NT_EMPTY
standalone empty node
Definition: xml_util.h:193
NCX System Logging Manager.
Contains NCX constants.
represents one attribute
Definition: xml_util.h:157
const xmlChar * attr_name
attribute name without any prefix
Definition: xml_util.h:171
struct xpath_pcb_t_ * attr_xpcb
XPath PCB in case XPath was parsed.
Definition: xml_util.h:186
xmlns_id_t attr_ns
attribute namespace ID
Definition: xml_util.h:162
xmlns_id_t attr_xmlns_ns
if xmlns, then namespace ID getting assigned
Definition: xml_util.h:165
xmlChar * attr_val
attribute value string
Definition: xml_util.h:179
const xmlChar * attr_qname
attribute qname with prefix (if any)
Definition: xml_util.h:168
xmlChar * attr_dname
malloced attribute name full qualified name if any
Definition: xml_util.h:176
dlq_hdr_t attr_qhdr
queue header
Definition: xml_util.h:159
gather node data into a simple struct.
Definition: xml_util.h:205
const xmlChar * elname
element name without any prefix
Definition: xml_util.h:225
const xmlChar * module
YANG module found for this node.
Definition: xml_util.h:216
xmlChar * qname
qualified name of element
Definition: xml_util.h:222
const xmlChar * simval
simple value if this is an XML_NT_STRING node
Definition: xml_util.h:228
xmlChar * simfree
non-NULL if simval is freed
Definition: xml_util.h:234
xmlns_id_t contentnsid
namespace of content
Definition: xml_util.h:213
uint32 simlen
length of the simple value string
Definition: xml_util.h:231
const xmlChar * badns
set if nsid == xmlns_inv_id()
Definition: xml_util.h:219
int depth
XML node depth.
Definition: xml_util.h:237
xml_nodetyp_t nodetyp
XML tag type.
Definition: xml_util.h:207
xml_attrs_t attrs
attributes parsed for this node if XML_NT_EMPTY or XML_NT_START
Definition: xml_util.h:240
xmlns_id_t nsid
namespace ID
Definition: xml_util.h:210
XML namespace support.