yumapro  21.10T-8
YumaPro SDK
xpath.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_xpath
13 #define _H_xpath
14 
15 /* FILE: xpath.h
16 *********************************************************************
17 * *
18 * P U R P O S E *
19 * *
20 *********************************************************************/
21 
27 /*********************************************************************
28 * *
29 * C H A N G E H I S T O R Y *
30 * *
31 *********************************************************************
32 
33 date init comment
34 ----------------------------------------------------------------------
35 30-dec-07 abb Begun
36 06-jul-11 abb add wildcard match support
37 11-dec-16 abb add GET2 retrieval support
38 */
39 
40 #include <xmlstring.h>
41 #include <xmlreader.h>
42 #include <xmlregexp.h>
43 
44 #ifndef _H_dlq
45 #include "dlq.h"
46 #endif
47 
48 #ifndef _H_ncxtypes
49 #include "ncxtypes.h"
50 #endif
51 
52 #ifndef _H_status
53 #include "status.h"
54 #endif
55 
56 #ifndef _H_obj
57 #include "obj.h"
58 #endif
59 
60 #ifndef _H_tk
61 #include "tk.h"
62 #endif
63 
64 #ifndef _H_val
65 #include "val.h"
66 #endif
67 
68 #ifndef _H_var
69 #include "var.h"
70 #endif
71 
72 #ifndef _H_yang
73 #include "yang.h"
74 #endif
75 
76 #ifdef __cplusplus
77 extern "C" {
78 #endif
79 
80 /********************************************************************
81 * *
82 * C O N S T A N T S *
83 * *
84 *********************************************************************/
85 
86 /* max size of the pcb->result_cacheQ */
87 #define XPATH_RESULT_CACHE_MAX 16
88 
89 /* max size of the pcb->resnode_cacheQ */
90 #define XPATH_RESNODE_CACHE_MAX 64
91 
92 
93 /* XPath 1.0 sec 2.2 AxisName */
94 #define XP_AXIS_ANCESTOR (const xmlChar *)"ancestor"
95 #define XP_AXIS_ANCESTOR_OR_SELF (const xmlChar *)"ancestor-or-self"
96 #define XP_AXIS_ATTRIBUTE (const xmlChar *)"attribute"
97 #define XP_AXIS_CHILD (const xmlChar *)"child"
98 #define XP_AXIS_DESCENDANT (const xmlChar *)"descendant"
99 #define XP_AXIS_DESCENDANT_OR_SELF (const xmlChar *)"descendant-or-self"
100 #define XP_AXIS_FOLLOWING (const xmlChar *)"following"
101 #define XP_AXIS_FOLLOWING_SIBLING (const xmlChar *)"following-sibling"
102 #define XP_AXIS_NAMESPACE (const xmlChar *)"namespace"
103 #define XP_AXIS_PARENT (const xmlChar *)"parent"
104 #define XP_AXIS_PRECEDING (const xmlChar *)"preceding"
105 #define XP_AXIS_PRECEDING_SIBLING (const xmlChar *)"preceding-sibling"
106 #define XP_AXIS_SELF (const xmlChar *)"self"
107 
108 /* Xpath 1.0 Function library + current() from XPath 2.0 */
109 #define XP_FN_BOOLEAN (const xmlChar *)"boolean"
110 #define XP_FN_CEILING (const xmlChar *)"ceiling"
111 #define XP_FN_CONCAT (const xmlChar *)"concat"
112 #define XP_FN_CONTAINS (const xmlChar *)"contains"
113 #define XP_FN_COUNT (const xmlChar *)"count"
114 #define XP_FN_CURRENT (const xmlChar *)"current"
115 #define XP_FN_FALSE (const xmlChar *)"false"
116 #define XP_FN_FLOOR (const xmlChar *)"floor"
117 #define XP_FN_ID (const xmlChar *)"id"
118 #define XP_FN_LANG (const xmlChar *)"lang"
119 #define XP_FN_LAST (const xmlChar *)"last"
120 #define XP_FN_LOCAL_NAME (const xmlChar *)"local-name"
121 #define XP_FN_NAME (const xmlChar *)"name"
122 #define XP_FN_NAMESPACE_URI (const xmlChar *)"namespace-uri"
123 #define XP_FN_NORMALIZE_SPACE (const xmlChar *)"normalize-space"
124 #define XP_FN_NOT (const xmlChar *)"not"
125 #define XP_FN_NUMBER (const xmlChar *)"number"
126 #define XP_FN_POSITION (const xmlChar *)"position"
127 #define XP_FN_ROUND (const xmlChar *)"round"
128 #define XP_FN_STARTS_WITH (const xmlChar *)"starts-with"
129 #define XP_FN_STRING (const xmlChar *)"string"
130 #define XP_FN_STRING_LENGTH (const xmlChar *)"string-length"
131 #define XP_FN_SUBSTRING (const xmlChar *)"substring"
132 #define XP_FN_SUBSTRING_AFTER (const xmlChar *)"substring-after"
133 #define XP_FN_SUBSTRING_BEFORE (const xmlChar *)"substring-before"
134 #define XP_FN_SUM (const xmlChar *)"sum"
135 #define XP_FN_TRANSLATE (const xmlChar *)"translate"
136 #define XP_FN_TRUE (const xmlChar *)"true"
137 
138 
139 /* yuma function extensions */
140 #define XP_FN_MODULE_LOADED (const xmlChar *)"module-loaded"
141 #define XP_FN_FEATURE_ENABLED (const xmlChar *)"feature-enabled"
142 
143 /* XPath functions added to YANG 1.1 */
144 #define XP_FN_REMATCH (const xmlChar *)"re-match"
145 #define XP_FN_DEREF (const xmlChar *)"deref"
146 #define XP_FN_DERIVED_FROM (const xmlChar *)"derived-from"
147 #define XP_FN_DERIVED_FROM_OR_SELF (const xmlChar *)"derived-from-or-self"
148 #define XP_FN_ENUM_VALUE (const xmlChar *)"enum-value"
149 #define XP_FN_BIT_IS_SET (const xmlChar *)"bit-is-set"
150 
151 /* XPath NodeType values */
152 #define XP_NT_COMMENT (const xmlChar *)"comment"
153 #define XP_NT_TEXT (const xmlChar *)"text"
154 #define XP_NT_PROCESSING_INSTRUCTION \
155  (const xmlChar *)"processing-instruction"
156 #define XP_NT_NODE (const xmlChar *)"node"
157 
158 /* XPath 1.0 operator names */
159 #define XP_OP_AND (const xmlChar *)"and"
160 #define XP_OP_OR (const xmlChar *)"or"
161 #define XP_OP_DIV (const xmlChar *)"div"
162 #define XP_OP_MOD (const xmlChar *)"mod"
163 
164 
165 /* Header only */
166 
185 #define XP_URL_ESC_WILDCARD '-'
186 
199 #define XP_FL_DYNNODE bit0
200 
201 
205 #define XP_FL_SKIP_MODE bit1
206 
207 
211 #define XP_FL_LOAD_IMPORT bit2
212 
213 
215 #define XP_FL_ABSPATH bit3
216 
217 
221 #define XP_FL_CONFIGONLY bit4
222 
227 #define XP_FL_USEROOT bit5
228 
232 #define XP_FL_INSTANCEID bit6
233 
234 
238 #define XP_FL_SCHEMA_INSTANCEID bit7
239 
247 #define XP_FL_TOP_RPC_INPUT bit8
248 
256 #define XP_FL_ACTION_INPUT bit9
257 
262 #define XP_FL_NACM_GET2 bit10
263 
268 #define XP_FL_KEEP_RESULT bit11
269 
270 
272 #define XP_FL_FOUND_PRED bit12
273 
277 #define XP_FL_GET_WHEN bit13
278 
279 /***** backptr_flags definitions *****/
280 
282 #define XP_FL_BACKPTR_CDIRTY bit0
283 
285 #define XP_FL_BACKPTR_RDIRTY bit1
286 
288 #define XP_FL_BACKPTR_SDIRTY bit2
289 
290 
291 /********************************************************************
292 * *
293 * M A C R O S *
294 * *
295 *********************************************************************/
296 
298 #define XPATH_GET_TYPE(P) (P)->xpath_type
299 
301 #define XPATH_GET_RESTYPE(R) (R)->restype
302 
304 #define XPATH_NACM_GET2(P) ((P)->flags & XP_FL_NACM_GET2)
305 
307 #define XPATH_NONCONFIG_WARN(P) (P)->nonconfig_warn_obj
308 
310 #define XPATH_VAL_CXT(P) ((P)->val || (P)->val_get2)
311 
313 #define XPATH_ANY_CXT(P) ((P)->val || (P)->val_get2 || (P)->obj)
314 
316 #define XPATH_SCB(P) (P)->scb
317 
319 #define XPATH_GET2CB_OBJ(N) (N)->cb->obj
320 
322 #define XPATH_MHDR(P) (P)->mhdr
323 
325 #define XPATH_EXPRSTR(P) (P)->exprstr
326 
328 #define XPATH_SET_DISABLED_OBJ_OK(P) (P)->disabled_obj_ok = TRUE
329 
331 #define XPATH_DISABLED_OBJ_OK(P) (P)->disabled_obj_ok
332 
333 
334 /********************************************************************
335 * *
336 * T Y P E S *
337 * *
338 *********************************************************************/
339 
341 typedef enum xpath_restype_t_ {
348 
350 typedef enum xpath_curmode_t_ {
356 
357 
361 typedef enum xpath_document_t_ {
368 
369 
373 typedef enum xpath_source_t_ {
381 
382 
384 typedef enum xpath_exop_t_ {
403 } xpath_exop_t;
404 
405 
409 typedef enum xpath_nodetype_t_ {
416 
417 
421 typedef enum xpath_rntype_t_ {
428 
429 
433 typedef enum xpath_get2_state_t_ {
441 
442 
446 typedef enum xpath_get2_form_t_ {
452 
453 
470 typedef ncx_var_t *
471  (*xpath_getvar_fn_t) (struct xpath_pcb_t_ *pcb,
472  const xmlChar *varname,
473  status_t *res);
474 
475 
481 typedef struct xpath_get2_cb_t_ {
482  dlq_hdr_t qhdr;
485  xpath_get2_state_t get2_state;
486 
489 
494 
499 
501  struct xpath_get2_cb_t_ *parent_cb;
502 
506  struct getcb_get2_t_ *get2cb;
507 
518  dlq_hdr_t return_keyQ;
519  dlq_hdr_t return_termQ;
521  dlq_hdr_t lookupQ;
524 
525 
529 typedef struct xpath_get2_node_t_ {
536 
542 
574  xpath_get2_form_t form;
575 
577 
578 
585 typedef struct xpath_resnode_t_ {
587  dlq_hdr_t qhdr;
588 
592  boolean dblslash;
593 
595  xpath_rntype_t rntype;
596 
606  union node_ {
611  } node;
613 
614 
619 typedef struct xpath_result_t_ {
621  dlq_hdr_t qhdr;
622 
624  xpath_restype_t restype;
625 
626  /* flag to identify node types in the nodeQ if XP_RT_NODESET */
627  boolean isval;
628 
630  union r_ {
631  /* result node Q of xpath_resnode_t */
632  dlq_hdr_t nodeQ;
633 
635  boolean boo;
636 
639 
641  xmlChar *str;
642  } r;
643 
645 
646 
650 typedef struct xpath_pred_ent_t_ {
651  dlq_hdr_t qhdr;
653  const xmlChar *keyval;
655 
656 
668 typedef struct xpath_pcb_t_ {
670  dlq_hdr_t qhdr;
671 
677 
678  /* XPath expression to evaluate provided by the caller.
679  * This is a mandatory parameter.
680  */
681  xmlChar *exprstr;
682 
683  /* XmlTextReader is needed when the evaluation is inside
684  * an XML instance document (rpc request)
685  */
686  xmlTextReaderPtr reader;
687 
698  xpath_source_t source;
699 
705 
711  boolean logerrors;
712 
714  boolean missing_errors;
715 
721 
724 
727 
729  xpath_curmode_t curmode;
730 
735 
741 
744 
752 
755 
758 
761 
763  xpath_document_t doctype;
764 
773  struct xpath_get2_node_t_ *val_get2;
774 
776  uint32 flags;
777 
780 
787  /* Need to save original context for current() fn */
788  xpath_resnode_t orig_context;
789 
792 
797 
799  void *cookie;
800 
805  dlq_hdr_t varbindQ;
806 
811  const struct xpath_fncb_t_ *functions;
812 
827  dlq_hdr_t result_cacheQ;
828 
833  dlq_hdr_t resnode_cacheQ;
834 
836  uint32 result_count;
837 
840 
844  boolean backptrs_mode;
845 
848 
851 
854 
857 
863 
866 
869 
872 
874  boolean seen;
875 
880  void *yang_pcb;
881 
887  dlq_hdr_t get2_cbQ; /* Q of xpath_get2_cb_t */
888 
895 
900 
902  struct getcb_get2_t_ *get2cb;
903 
905  dlq_hdr_t pred_entQ;
906 
911 
919  dlq_hdr_t get2_aio_cbQ;
928 
929 } xpath_pcb_t;
930 
931 
946 typedef xpath_result_t *
947  (*xpath_fn_t) (xpath_pcb_t *pcb,
948  dlq_hdr_t *parmQ,
949  status_t *res);
950 
951 
957 typedef struct xpath_fncb_t_ {
959  const xmlChar *name;
960 
962  xpath_restype_t restype;
963 
965  int32 parmcnt;
966 
969 } xpath_fncb_t;
970 
971 
973 typedef struct xpath_walkerparms_t_ {
975  dlq_hdr_t *resnodeQ;
976 
980 
981 
983 typedef struct xpath_compwalkerparms_t_ {
986 
988  xmlChar *cmpstring;
989 
992 
994  xmlChar *buffer;
995 
997  uint32 buffsize;
998 
1000  xpath_exop_t exop;
1001 
1003  boolean cmpresult;
1004 
1008 
1009 
1011 typedef struct xpath_stringwalkerparms_t_ {
1013  xmlChar *buffer;
1014 
1016  uint32 buffsize;
1017 
1019  uint32 buffpos;
1020 
1024 
1025 
1027 typedef struct xpath_aio_cb_t_ {
1029  dlq_hdr_t qhdr;
1030 
1032  struct xpath_aio_cb_t_ *parent_cb;
1033 
1036 
1041  dlq_hdr_t valQ;
1042 
1043 } xpath_aio_cb_t;
1044 
1045 
1049 /********************************************************************
1050 * *
1051 * F U N C T I O N S *
1052 * *
1053 *********************************************************************/
1054 
1091 extern status_t
1093  tk_chain_t *tkc,
1094  ncx_module_t *mod,
1095  obj_template_t *obj,
1096  dlq_hdr_t *datadefQ,
1097  const xmlChar *target,
1098  obj_template_t **targobj,
1099  dlq_hdr_t **targQ);
1100 
1101 
1135 extern status_t
1137  tk_chain_t *tkc,
1138  ncx_module_t *mod,
1139  ncx_module_t *force_mod,
1140  obj_template_t *obj,
1141  dlq_hdr_t *datadefQ,
1142  const xmlChar *target,
1143  obj_template_t **targobj,
1144  dlq_hdr_t **targQ);
1145 
1146 
1174 extern status_t
1176  tk_chain_t *tkc,
1177  ncx_module_t *mod,
1178  obj_template_t *obj,
1179  dlq_hdr_t *datadefQ,
1180  const xmlChar *target,
1181  obj_template_t **targobj,
1182  dlq_hdr_t **targQ,
1183  ncx_error_t *tkerr);
1184 
1185 
1204 extern status_t
1205  xpath_find_schema_target_int (const xmlChar *target,
1206  obj_template_t **targobj);
1207 
1208 
1237 extern status_t
1239  ncx_module_t *mod,
1240  const xmlChar *target,
1241  val_value_t **targval);
1242 
1243 
1257 extern status_t
1258  xpath_find_schema_target_restconf (const xmlChar *target,
1259  obj_template_t **targobj);
1260 
1261 
1262 
1281 extern status_t
1283  obj_template_t **targobj);
1284 
1285 
1313 extern status_t
1315  ncx_module_t *mod,
1316  const xmlChar *target,
1317  val_value_t *root,
1318  boolean logerrors,
1319  boolean configonly,
1320  xpath_pcb_t **retpcb);
1321 
1322 
1338 extern xpath_pcb_t *
1339  xpath_new_pcb (const xmlChar *xpathstr,
1340  xpath_getvar_fn_t getvar_fn);
1341 
1342 
1359 extern xpath_pcb_t *
1360  xpath_new_pcb_ex (const xmlChar *xpathstr,
1361  xpath_getvar_fn_t getvar_fn,
1362  void *cookie);
1363 
1364 
1377 extern xpath_pcb_t *
1378  xpath_clone_pcb (const xpath_pcb_t *srcpcb);
1379 
1380 
1390 extern xpath_pcb_t *
1391  xpath_find_pcb (dlq_hdr_t *pcbQ,
1392  const xmlChar *exprstr);
1393 
1394 
1400 extern void
1401  xpath_free_pcb (xpath_pcb_t *pcb);
1402 
1403 
1414 extern xpath_result_t *
1415  xpath_new_result (xpath_restype_t restype);
1416 
1417 
1424 extern void
1426  xpath_restype_t restype);
1427 
1428 
1434 extern void
1436 
1437 
1443 extern void
1445 
1446 
1452 extern xpath_resnode_t *
1453  xpath_new_resnode (void);
1454 
1455 
1461 extern void
1463 
1464 
1470 extern void
1472 
1473 
1479 extern void
1481 
1482 
1488 extern void
1490 
1491 
1507 extern status_t
1508  xpath_get_curmod_from_prefix (const xmlChar *prefix,
1509  ncx_module_t *mod,
1510  ncx_module_t **targmod);
1511 
1512 
1531 extern status_t
1532  xpath_get_curmod_from_prefix2 (const xmlChar *prefix,
1533  ncx_module_t *mod,
1534  ncx_module_t **targmod,
1535  const xmlChar **modname);
1536 
1537 
1555 extern status_t
1556  xpath_get_modinfo_from_prefix (const xmlChar *prefix,
1557  ncx_module_t *mod,
1558  const xmlChar **modname,
1559  const xmlChar **modrev);
1560 
1561 
1579 extern status_t
1580  xpath_get_curmod_from_prefix_str (const xmlChar *prefix,
1581  uint32 prefixlen,
1582  ncx_module_t *mod,
1583  ncx_module_t **targmod);
1584 
1585 
1598 extern status_t
1600  tk_type_t tktype);
1601 
1602 
1609 extern boolean
1610  xpath_cvt_boolean (const xpath_result_t *result);
1611 
1612 
1620 extern void
1621  xpath_cvt_number (const xpath_result_t *result,
1622  ncx_num_t *num);
1623 
1624 
1634 extern status_t
1636  const xpath_result_t *result,
1637  xmlChar **str);
1638 
1639 
1646 extern dlq_hdr_t *
1648 
1649 
1656 extern xpath_resnode_t *
1658 
1659 
1666 extern xpath_resnode_t *
1668 
1669 
1676 extern val_value_t *
1678 
1679 
1687 extern val_value_t *
1689  val_value_t *valptr);
1690 
1691 
1698 extern obj_template_t *
1700 
1701 
1708 extern obj_template_t *
1710 
1711 
1718 extern val_value_t *
1720 
1721 
1730 extern obj_template_t *
1732 
1733 
1740 extern dlq_hdr_t *
1742 
1743 
1756 extern void
1757  xpath_move_nodeset (xpath_result_t *srcresult,
1758  xpath_result_t *destresult);
1759 
1760 
1761 
1769 extern boolean
1770  xpath_nodeset_empty (const xpath_result_t *result);
1771 
1772 
1781 extern void
1783  val_value_t *oldval,
1784  val_value_t *newval);
1785 
1786 
1794 extern void
1796  val_value_t *oldval);
1797 
1798 
1824 extern xmlChar *
1825  xpath_convert_url_to_path (const xmlChar *urlpath,
1826  ncx_name_match_t match_names,
1827  boolean alt_naming,
1828  boolean wildcards,
1829  boolean withkeys,
1830  boolean fullkeys,
1831  boolean withmod,
1832  ncx_protocol_t proto,
1833  status_t *res);
1834 
1835 
1843 extern void
1845  ncx_cfg_t cfg_id,
1846  boolean dirty);
1847 
1848 
1857 extern boolean
1859  ncx_cfg_t cfg_id);
1860 
1861 
1870 extern boolean
1872 
1873 
1879 extern void
1881 
1882 
1891 extern status_t
1893  xpath_result_t *target);
1894 
1895 
1902 extern uint32
1904 
1905 
1911 extern void
1913 
1914 
1920 extern void
1922 
1923 
1935 extern xpath_pcb_t *
1937  const xmlChar *expr,
1938  status_t *res);
1939 
1940 
1949 extern void
1951  void *yang_pcb);
1952 
1953 
1961 extern void
1963 
1964 
1973 extern void *
1975 
1976 
1983 extern boolean
1985 
1986 
1995 extern const xmlChar *
1996  xpath_get_restype_str (xpath_restype_t restype);
1997 
1998 
2004 extern void
2006 
2007 
2015 extern boolean
2017  obj_template_t *obj);
2018 
2019 
2026 extern boolean
2028 
2029 
2038 extern boolean
2040 
2041 
2049 extern xpath_pred_ent_t *
2051  const xmlChar *keyval);
2052 
2053 
2059 extern void xpath_free_pred_ent (xpath_pred_ent_t *ent);
2060 
2061 
2072 extern boolean xpath_expr_ok_for_nolock_get (xpath_pcb_t *pcb);
2073 
2074 
2084 extern xpath_resnode_t *
2086 
2087 
2096 extern boolean
2098 
2099 
2103 #ifdef __cplusplus
2104 } /* end extern 'C' */
2105 #endif
2106 
2107 #endif /* _H_xpath */
ncx_num_t * cmpnum
compare number
Definition: xpath.h:991
child node CB
Definition: xpath.h:450
status_t validateres
validation stage result
Definition: xpath.h:865
xpath_pcb_t * xpath_new_pcb_ex(const xmlChar *xpathstr, xpath_getvar_fn_t getvar_fn, void *cookie)
malloc a new XPath parser control block Extended
Definition: xpath.c:2769
xmlChar * xpath_convert_url_to_path(const xmlChar *urlpath, ncx_name_match_t match_names, boolean alt_naming, boolean wildcards, boolean withkeys, boolean fullkeys, boolean withmod, ncx_protocol_t proto, status_t *res)
Convert a URL format path to XPath format path.
Definition: xpath.c:4376
val_value_t * xpath_next_resnode_valptr(xpath_resnode_t *resnode, val_value_t *valptr)
Get the next node val pointer from a result node struct.
Definition: xpath.c:4019
XPath expression result.
Definition: xpath.h:619
not set
Definition: xpath.h:422
Data Object Support.
status_t xpath_get_curmod_from_prefix(const xmlChar *prefix, ncx_module_t *mod, ncx_module_t **targmod)
Get the correct module to use for a given prefix.
Definition: xpath.c:3321
dlq provides general double-linked list and queue support:
Common Encoding Message Header No longer XML specific!! Used by JSON parsing as well!! Allows common ...
Definition: xml_msg.h:351
boolean xpath_expr_has_predicates(xpath_pcb_t *pcb)
Check if any predicates parsed in the expression.
Definition: xpath.c:4899
leafref path
Definition: xpath.h:375
not set
Definition: xpath.h:447
val_value_t * valptr
result is a plain value node
Definition: xpath.h:608
notification context
Definition: xpath.h:366
NETCONF select filter.
Definition: xpath.h:379
xpath_restype_t restype
XPath result type.
Definition: xpath.h:624
Special XPath GET2 state record to be used instead of val_value_t or val_child_hdr_t pointers...
Definition: xpath.h:481
boolean backptrs_mode
must/when/data-rule obj_template_t backptr caching support backptrs in use
Definition: xpath.h:844
xpath_nodetype_t
XPath expression node types.
Definition: xpath.h:409
xpath_resnode_t context
additive XPath1 context back- pointer to current step results.
Definition: xpath.h:785
status_t res
status field to continue or exit walk
Definition: xpath.h:978
not set
Definition: xpath.h:410
processing instruction
Definition: xpath.h:413
void xpath_clear_nodeset_result(xpath_result_t *result)
Clear all the nodes from the node-set result.
Definition: xpath.c:4637
const xmlChar * name
function name
Definition: xpath.h:959
xpath_resnode_t * xpath_new_resnode(void)
Create and initialize an XPath result node struct.
Definition: xpath.c:3189
const xmlChar * xpath_get_restype_str(xpath_restype_t restype)
Get the string for the specific result type.
Definition: xpath.c:4813
YANG Module parser utilities.
xpath_rntype_t
XPath resnode union types.
Definition: xpath.h:421
status_t valueres
evaluation stage result
Definition: xpath.h:868
xpath_get2_cb_t * cb
the &#39;cb&#39; is always set and is a back-pointer to the xpath_cb_t stored in the pcb get2_cbQ the &#39;val&#39; p...
Definition: xpath.h:535
obj_template_t * startobj
start object set for rpc,notif validation
Definition: xpath.h:754
uint32 resnode_count
The count of entries in the resnode_cacheQ.
Definition: xpath.h:839
status_t xpath_find_schema_target(yang_pcb_t *pcb, tk_chain_t *tkc, ncx_module_t *mod, obj_template_t *obj, dlq_hdr_t *datadefQ, const xmlChar *target, obj_template_t **targobj, dlq_hdr_t **targQ)
Find the schema target, save in *targobj.
Definition: xpath.c:2275
NCX Variable Support.
xpath_get2_state_t get2_state
current state of this entry
Definition: xpath.h:485
ncx_name_match_t
Node name match modes.
Definition: ncxtypes.h:673
One YANG data-def-stmt.
Definition: obj.h:1140
void xpath_set_load_import(xpath_pcb_t *pcb, void *yang_pcb)
Set the PCB in load import mode.
Definition: xpath.c:4723
r.
Definition: xpath.h:393
obj_template_t * obj
the GET2 callback is expected to be in this object
Definition: xpath.h:488
status_t xpath_get_curmod_from_prefix_str(const xmlChar *prefix, uint32 prefixlen, ncx_module_t *mod, ncx_module_t **targmod)
Get the correct module to use for a given prefix Unended string version.
Definition: xpath.c:3526
keyword &#39;div&#39;
Definition: xpath.h:397
xml_msg_hdr_t * mhdr
backptr to the message header in progress if processing an XPath select filter for NETCONF ...
Definition: xpath.h:899
not set
Definition: xpath.h:362
boolean xpath_cvt_boolean(const xpath_result_t *result)
Convert an XPath result to a boolean answer.
Definition: xpath.c:3630
val_value_t * xpath_first_resnode_valptr(xpath_resnode_t *resnode)
Get the first result in the renodeQ from a result struct.
Definition: xpath.c:3984
status_t xpath_parse_token(xpath_pcb_t *pcb, tk_type_t tktype)
Parse the XPath token sequence for a specific token type.
Definition: xpath.c:3579
void xpath_clean_result(xpath_result_t *result)
Clean an XPath result struct.
Definition: xpath.c:3135
xpath_pcb_t * xpath_new_session_pcb(ses_cb_t *scb, const xmlChar *expr, status_t *res)
Get a new XPath parser control block for a session.
Definition: xpath.c:4671
status_t xpath_find_val_target(val_value_t *startval, ncx_module_t *mod, const xmlChar *target, val_value_t **targval)
Find the XPath value node target.
Definition: xpath.c:2608
void xpath_discard_resnode(xpath_resnode_t *resnode)
Discard a result node.
Definition: xpath.c:4618
Special XPath GET2 resnode.
Definition: xpath.h:529
xpath_getvar_fn_t getvar_fn
The getvar_fn callback function may be set to allow user variables to be supported in this XPath expr...
Definition: xpath.h:796
status_t xpath_add_to_result(xpath_result_t *source, xpath_result_t *target)
Move the resnodes from 1 XPath result to another.
Definition: xpath.c:4567
void xpath_free_resnode(xpath_resnode_t *resnode)
Free a malloced XPath result node struct.
Definition: xpath.c:3240
not set
Definition: xpath.h:374
number result
Definition: xpath.h:344
void xpath_move_nodeset(xpath_result_t *srcresult, xpath_result_t *destresult)
Move the nodes from a nodeset reult into the target nodeset result.
Definition: xpath.c:4196
not set
Definition: xpath.h:342
union of all the basic number types if float not supported, then it is stored as an int64 ...
Definition: ncxtypes.h:719
if the result->isval flag is false then the objptr is used in all resnodes in that result ...
Definition: xpath.h:606
tk_type_t
different types of tokens parsed during 1st pass
Definition: tk.h:279
int32 parmcnt
parameter count: -1 == N, 0..N == actual cnt
Definition: xpath.h:965
GET2 callback error happened.
Definition: xpath.h:439
void xpath_init_resnode(xpath_resnode_t *resnode)
Initialize an XPath result node struct.
Definition: xpath.c:3217
boolean disabled_obj_ok
YPW-1774: need to ignore if-feature=false while validating leafref path-stmt.
Definition: xpath.h:927
boolean xpath_predicate
true when processing a predicate
Definition: xpath.h:856
representation of one module or submodule during and after parsing
Definition: ncxtypes.h:1052
boolean xpath_expr_scan_predicates(xpath_pcb_t *pcb)
Check if any predicates parsed in the expression.
Definition: xpath.c:4918
status_t res
status of walker operation
Definition: xpath.h:1006
xpath_result_t * context_result
internal context result during processing
Definition: xpath.h:791
xpath_pcb_t * xpath_new_pcb(const xmlChar *xpathstr, xpath_getvar_fn_t getvar_fn)
malloc a new XPath parser control block
Definition: xpath.c:2739
xpath_pred_ent_t * xpath_new_pred_ent(obj_template_t *keyobj, const xmlChar *keyval)
Malloc and init an XPath predicate entry struct.
Definition: xpath.c:4951
xpath_exop_t exop
relational expression operation
Definition: xpath.h:1000
minus &#39;-&#39;
Definition: xpath.h:395
fwd slash &#39;/&#39;
Definition: xpath.h:401
xmlChar * buffer
buffer for internal use
Definition: xpath.h:994
not set
Definition: xpath.h:351
ncx_errinfo_t errinfo
must-stmt error info.
Definition: xpath.h:704
obj_template_t * xpath_get_cxt_obj(xpath_pcb_t *pcb)
Get the object pointer for the context node.
Definition: xpath.c:4098
result r contains the appropiate data depending on restype
Definition: xpath.h:630
const xmlChar * keyval
backptr to token value
Definition: xpath.h:653
void * xpath_get_load_import(xpath_pcb_t *pcb)
Get the PCB in load import mode.
Definition: xpath.c:4762
boolean dblslash
double slash mode means the shorthand for the descendant-or-self axis was used
Definition: xpath.h:592
void xpath_init_result(xpath_result_t *result, xpath_restype_t restype)
Initialize an XPath result struct.
Definition: xpath.c:3066
valhdr
Definition: xpath.h:425
obj_template_t * targobj
these parms are used to parse leafref path-arg limited object tree syntax allowed only targobj is bpt...
Definition: xpath.h:720
Value Node Basic Support.
plus sign &#39;+&#39;
Definition: xpath.h:394
const struct xpath_fncb_t_ * functions
The function Q is a copy of the global Q It is not hardwired in case app-specific extensions are adde...
Definition: xpath.h:811
GET2 callback done.
Definition: xpath.h:438
obj_template_t * nonconfig_warn_obj
backptr to object causing nonconfig warning if that is being checked in the obj_walker_fn callback in...
Definition: xpath.h:910
text node
Definition: xpath.h:412
ncx_error_t tkerr
saved error info for the agent to process
Definition: xpath.h:871
not set
Definition: xpath.h:385
unary &#39;-&#39;
Definition: xpath.h:399
struct xpath_get2_node_t_ * val_get2
YPW-1342 the context node can be one of the following nodes.
Definition: xpath.h:773
tk_chain_t * tkc
token chain for exprstr, Often saved and reset each evaluation so the parse is done only once ...
Definition: xpath.h:676
uint32 flags
internal processing flags for managing XPath state
Definition: xpath.h:776
xpath_get2_state_t
GET2 retrieval states.
Definition: xpath.h:433
double fwd slash (C++ comment)
Definition: xpath.h:402
keyword &#39;or&#39;
Definition: xpath.h:387
schema-instance-identifier
Definition: xpath.h:378
comment node
Definition: xpath.h:411
quick processing of NACM data rule predicates.
Definition: xpath.h:650
xpath_exop_t
XPath expression operation type.
Definition: xpath.h:384
boolean xpath_expr_ok_for_nolock_get(xpath_pcb_t *pcb)
Check an XPath expression to see if it contains any top-level config=true data nodes or not...
Definition: xpath.c:4999
boolean missing_errors
T: missing node is error.
Definition: xpath.h:714
boolean xpath_check_backptrs_dirty(xpath_pcb_t *pcb, ncx_cfg_t cfg_id)
Check the backptrs_dirty flag in the PCB.
Definition: xpath.c:4487
boolean xpath_find_obj_in_result(xpath_result_t *result, obj_template_t *obj)
Find the object pointer in the specified result.
Definition: xpath.c:4862
status_t res
result of stringify operation
Definition: xpath.h:1022
YANG module data structures Many internal representations of YANG module constructs.
XPath result node struct.
Definition: xpath.h:585
void * cookie
The cookie registered with the getvar_fn.
Definition: xpath.h:799
struct to remember error info tkc->cur_err will be checked before tkc->cur for error information ...
Definition: ncxtypes.h:812
status_t parseres
first and second pass parsing results.
Definition: xpath.h:862
boolean xpath_need_get2_processing(xpath_result_t *result)
Check if the result nodeset contains any XP_RNT_GET2 nodes.
Definition: xpath.c:4785
ncx_xpath_type_t xpath_type
expression context
Definition: xpath.h:853
token parsing chain (main parser control block)
Definition: tk.h:415
xpath_pcb_t * xpath_find_pcb(dlq_hdr_t *pcbQ, const xmlChar *exprstr)
Find an XPath PCB.
Definition: xpath.c:2932
void * yang_pcb
backptr to yang parser control block in progress used to force an inline import instead of returning ...
Definition: xpath.h:880
void xpath_nodeset_swap_valptr(xpath_result_t *result, val_value_t *oldval, val_value_t *newval)
Check if the result has the oldval ptr and if so, replace it with the newval ptr. ...
Definition: xpath.c:4256
objnode
Definition: xpath.h:423
XPath function control block.
Definition: xpath.h:957
xpath_document_t doctype
document context for this evaluation
Definition: xpath.h:763
xpath_fn_t fn
callback pointer for XPath function
Definition: xpath.h:968
uint32 buffsize
size of buffer
Definition: xpath.h:1016
AIO Subtree respresentation.
Definition: xpath.h:1027
vert.
Definition: xpath.h:400
ses_cb_t * scb
backptr to session control block in progress.
Definition: xpath.h:894
ncx_module_t * objmod
module containing obj.
Definition: xpath.h:740
void xpath_nodeset_delete_valptr(xpath_result_t *result, val_value_t *oldval)
Check if the result has the oldval ptr and if so, delete it.
Definition: xpath.c:4295
xpath_source_t
XPath expression source type.
Definition: xpath.h:373
struct xpath_get2_cb_t_ * parent_cb
parent control block used if parent_val not used
Definition: xpath.h:501
left angle bracket &#39;<&#39;
Definition: xpath.h:390
void xpath_set_backptrs_dirty(xpath_pcb_t *pcb, ncx_cfg_t cfg_id, boolean dirty)
Set the backptrs_dirty flag in the PCB.
Definition: xpath.c:4441
uint8 backptrs_flags
internal state for backptr handling
Definition: xpath.h:850
ncx_num_t num
numeric result
Definition: xpath.h:638
val_child_hdr_t * valhdr
result is a value node header
Definition: xpath.h:609
void xpath_set_keep_result(xpath_pcb_t *pcb)
Set the keep-result flag in the PCB.
Definition: xpath.c:4842
xpath_get2_node_t get2node
result is a GET2 state node
Definition: xpath.h:610
void xpath_free_result(xpath_result_t *result)
Free a malloced XPath result struct.
Definition: xpath.c:3107
equals &#39;=&#39;
Definition: xpath.h:388
rpc-input context
Definition: xpath.h:364
void xpath_cvt_number(const xpath_result_t *result, ncx_num_t *num)
Convert an XPath result to a number answer.
Definition: xpath.c:3690
one value to match one type
Definition: val.h:870
val_value_t * val
dummy value for container or list control block DO NOT USE DIRECTLY FOR CHILDREN OR PARENT ...
Definition: xpath.h:493
xpath_source_t source
the prefixes in the QNames in the exprstr MUST be resolved in different contexts. ...
Definition: xpath.h:698
target mode (normal)
Definition: xpath.h:352
status_t xpath_find_schema_target_int(const xmlChar *target, obj_template_t **targobj)
@
Definition: xpath.c:2475
dlq_hdr_t * xpath_get_varbindQ(xpath_pcb_t *pcb)
Get the varbindQ from a parser control block struct.
Definition: xpath.c:4170
obj_template_t * xpath_get_resnode_objptr(xpath_resnode_t *resnode)
Get the result node object pointer (obsolete)
Definition: xpath.c:4150
xpath_result_t * result2
internal result storage
Definition: xpath.h:985
status_t xpath_cvt_string(xpath_pcb_t *pcb, const xpath_result_t *result, xmlChar **str)
Convert an XPath result to a string answer.
Definition: xpath.c:3823
Session Control Block.
Definition: ses.h:542
val_value_t * val
if &#39;val&#39; is not set then this resnode represents the object node for a container or list; if set then...
Definition: xpath.h:541
status_t xpath_find_val_unique(val_value_t *startval, ncx_module_t *mod, const xmlChar *target, val_value_t *root, boolean logerrors, boolean configonly, xpath_pcb_t **retpcb)
Find the data node for a unique-stmt target.
Definition: xpath.c:2659
key variable mode
Definition: xpath.h:354
xpath_restype_t
XPath expression result type.
Definition: xpath.h:341
xpath_result_t * xpath_new_result(xpath_restype_t restype)
malloc an XPath result
Definition: xpath.c:3033
Value node compare walker fn callback parameters.
Definition: xpath.h:983
status_t
global error return code
Definition: status_enum.h:186
xpath_restype_t restype
expected result type
Definition: xpath.h:962
status_t xpath_get_curmod_from_prefix2(const xmlChar *prefix, ncx_module_t *mod, ncx_module_t **targmod, const xmlChar **modname)
Get the correct module to use for a given prefix Return found module name if returning not-found erro...
Definition: xpath.c:3356
struct xpath_aio_cb_t_ * parent_cb
parent AIO control block
Definition: xpath.h:1032
status_t xpath_find_data_target_pcb(xpath_pcb_t *pcb, obj_template_t **targobj)
Find schema target for a datastore node.
Definition: xpath.c:2560
status_t xpath_find_schema_target_restconf(const xmlChar *target, obj_template_t **targobj)
Find a schema target for RESTCONF.
Definition: xpath.c:2515
uint32 buffpos
current buffer position
Definition: xpath.h:1019
boolean cmpresult
compare result
Definition: xpath.h:1003
YANG must or when.
Definition: xpath.h:376
uint32 xpath_resnode_count(xpath_result_t *result)
Get the number of resnodes in the node-set.
Definition: xpath.c:4596
GET2 callback pending.
Definition: xpath.h:435
xpath_rntype_t rntype
The result node type is the union discriminator for node_.
Definition: xpath.h:595
struct getcb_get2_t_ * get2cb
the getcb for a NACM data rule test
Definition: xpath.h:902
not set
Definition: xpath.h:434
obj_template_t * objptr
object for YANG validation mode
Definition: xpath.h:607
l.
Definition: xpath.h:392
rpc-output context
Definition: xpath.h:365
boolean logerrors
T: use log_error F: suppress error messages.
Definition: xpath.h:711
string result
Definition: xpath.h:345
boolean backptrs_manual_clear
manual clear of backptrs needed
Definition: xpath.h:847
ncx_xpath_type_t
enumeration for different XPath back pointer types
Definition: ncxtypes.h:1171
xpath_result_t * result
The XPath result for this evaluation.
Definition: xpath.h:779
keyword &#39;mod&#39;
Definition: xpath.h:398
right angle bracket &#39;>&#39;
Definition: xpath.h:391
NCX Syntax Token Handler.
valptr
Definition: xpath.h:424
Global error messages for status code enumerations.
GET2 callback skipped.
Definition: xpath.h:436
xpath_resnode_t * xpath_get_first_resnode(xpath_result_t *result)
Get the first result in the renodeQ from a result struct.
Definition: xpath.c:3933
status_t xpath_find_schema_target_err(yang_pcb_t *pcb, tk_chain_t *tkc, ncx_module_t *mod, obj_template_t *obj, dlq_hdr_t *datadefQ, const xmlChar *target, obj_template_t **targobj, dlq_hdr_t **targQ, ncx_error_t *tkerr)
find target, save in *targobj, use the errtk if error
Definition: xpath.c:2406
xmlChar * str
string result
Definition: xpath.h:641
val_value_t * parent_val
only 1 of these 2 pointers should be set they are both back-pointers and not malloced here ...
Definition: xpath.h:498
this struct is inserted in the val->v.child_hdrQ for container and list value nodes ...
Definition: val.h:1020
obj_template_t * altobj
bptr to pred.
Definition: xpath.h:723
obj_template_t * obj
object for this subtree
Definition: xpath.h:1035
void xpath_clean_resnode(xpath_resnode_t *resnode)
Clean an XPath result node struct.
Definition: xpath.c:3289
xpath_pcb_t * xpath_clone_pcb(const xpath_pcb_t *srcpcb)
Clone an XPath PCB.
Definition: xpath.c:2822
GET2 callback starting.
Definition: xpath.h:437
ncx_module_t * rootmod
YPW-1416: track module in progress during deviation validation of leafref type replacement.
Definition: xpath.h:748
boolean seen
internal yangdiff support
Definition: xpath.h:874
ncx_module_t * impmod
[sub]module containing obj
Definition: xpath.h:743
uint32 result_count
The count of entries in the result_cacheQ.
Definition: xpath.h:836
boolean xpath_check_manual_clear(xpath_pcb_t *pcb)
Check the backptrs_dirty flag in the PCB is clearly manually only.
Definition: xpath.c:4528
YANG error info statement struct used to override default error handling in the server.
Definition: ncxtypes.h:1250
XPath parser control block.
Definition: xpath.h:668
xmlChar * cmpstring
compare string
Definition: xpath.h:988
obj_template_t * docroot
document root.
Definition: xpath.h:751
alternate mode
Definition: xpath.h:353
val_value_t * val
saved state for the current() function result
Definition: xpath.h:757
void xpath_clear_load_import(xpath_pcb_t *pcb)
Clear the PCB out of load import mode.
Definition: xpath.c:4743
boolean xpath_result_is_get2(xpath_result_t *result)
Check if the result is a node-set for GET2 nodes.
Definition: xpath.c:5146
xpath_curmode_t curmode
select targ/alt/var obj
Definition: xpath.h:729
void xpath_delete_resnode(xpath_resnode_t *resnode)
Delete and free a malloced XPath result node struct.
Definition: xpath.c:3267
val_value_t * val_docroot
cfg->root for db
Definition: xpath.h:760
void xpath_free_pred_ent(xpath_pred_ent_t *ent)
Free a malloced XPath predicate entry struct.
Definition: xpath.c:4975
xpath_resnode_t * xpath_get_first_real_resnode(xpath_result_t *result)
Get the first result in the renodeQ from a result struct.
Definition: xpath.c:5112
node-set result
Definition: xpath.h:343
xpath_get2_form_t form
the form field determines the type of get2 node
Definition: xpath.h:574
status_t xpath_find_schema_target_force_mod(yang_pcb_t *pcb, tk_chain_t *tkc, ncx_module_t *mod, ncx_module_t *force_mod, obj_template_t *obj, dlq_hdr_t *datadefQ, const xmlChar *target, obj_template_t **targobj, dlq_hdr_t **targQ)
find target, save in *targobj, force the module
Definition: xpath.c:2337
ncx_protocol_t
NCX session protocol versions supported.
Definition: ncxtypes.h:933
get2ptr
Definition: xpath.h:426
Value or object node walker fn callback parameters.
Definition: xpath.h:973
terminal node CB
Definition: xpath.h:449
xmlChar * buffer
buffer used for stringifying the node-set
Definition: xpath.h:1013
dlq_hdr_t * xpath_get_resnodeQ(xpath_result_t *result)
Get the renodeQ from a result struct.
Definition: xpath.c:3907
boolean result
Definition: xpath.h:346
instance-identifier
Definition: xpath.h:377
keyword &#39;and&#39;
Definition: xpath.h:386
Value node stringify walker fn callback parameters.
Definition: xpath.h:1011
struct of NCX user variable mapping for yangcli
Definition: var.h:131
obj_template_t * keyobj
backptr to schema tree
Definition: xpath.h:652
ncx_cfg_t
hardwire the 3 standard configs
Definition: ncxtypes.h:535
void xpath_free_pcb(xpath_pcb_t *pcb)
Free a malloced XPath parser control block.
Definition: xpath.c:2963
status_t xpath_get_modinfo_from_prefix(const xmlChar *prefix, ncx_module_t *mod, const xmlChar **modname, const xmlChar **modrev)
Get the correct module name/revision to use for a given prefix.
Definition: xpath.c:3448
bang equals &#39;!=&#39;
Definition: xpath.h:389
ncx_var_t *(* xpath_getvar_fn_t)(struct xpath_pcb_t_ *pcb, const xmlChar *varname, status_t *res)
XPath GET variable callback function.
Definition: xpath.h:471
uint32 buffsize
size of internal buffer
Definition: xpath.h:997
datastore context
Definition: xpath.h:363
xpath_curmode_t
XPath dynamic parsing mode for leafref.
Definition: xpath.h:350
obj_template_t * varobj
bptr to key-expr LHS object
Definition: xpath.h:726
obj_template_t * obj
these parms are used by leafref and XPath1 parsing obj is a bptr to start object
Definition: xpath.h:734
xpath_resnode_t * xpath_get_next_resnode(xpath_resnode_t *resnode)
Get the next result in the renodeQ from a result struct.
Definition: xpath.c:3961
YANG parser control block.
Definition: yang.h:204
boolean boo
boolean result
Definition: xpath.h:635
XML start, empty, or end tag.
Definition: xpath.h:414
xpath_get2_form_t
GET2 control block forms.
Definition: xpath.h:446
xpath_document_t
document root type.
Definition: xpath.h:361
val_value_t * xpath_get_resnode_val(xpath_resnode_t *resnode)
Get the resnode value pointer from a resnode, if any.
Definition: xpath.c:4115
boolean xpath_nodeset_empty(const xpath_result_t *result)
Check if the result is an empty nodeset.
Definition: xpath.c:4230
obj_template_t * xpath_get_resnode_obj(xpath_resnode_t *resnode)
Get the resnode object pointer from a value resnode.
Definition: xpath.c:4052
xpath_result_t *(* xpath_fn_t)(xpath_pcb_t *pcb, dlq_hdr_t *parmQ, status_t *res)
XPath function prototype.
Definition: xpath.h:947
asterisk &#39;*&#39;
Definition: xpath.h:396
void xpath_set_manual_clear(xpath_pcb_t *pcb)
Set the manual clear mode flag in the PCB.
Definition: xpath.c:4545
struct getcb_get2_t_ * get2cb
the getcb for this retrieval, ancestor keys in parent_val or parent_cb
Definition: xpath.h:506
normal GET2 CB
Definition: xpath.h:448