yumapro  25.10-2
YumaPro SDK
Loading...
Searching...
No Matches
xml_msg.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2008 - 2012, Andy Bierman, All Rights Reserved.
3 * Copyright (c) 2012 - 2025, 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_msg
13#define _H_xml_msg
14/* FILE: xml_msg.h
15*********************************************************************
16* *
17* P U R P O S E *
18* *
19*********************************************************************/
20
29/*********************************************************************
30* *
31* C H A N G E H I S T O R Y *
32* *
33*********************************************************************
34
35date init comment
36----------------------------------------------------------------------
3714-jan-07 abb Begun; split from agt_rpc.h
3828-feb-13 abb Add JSON, <get2>, and YANG-API support
39*/
40
41#ifndef _H_ncxtypes
42#include "ncxtypes.h"
43#endif
44
45#ifndef _H_status
46#include "status.h"
47#endif
48
49#ifndef _H_val
50#include "val.h"
51#endif
52
53#ifndef _H_xmlns
54#include "xmlns.h"
55#endif
56
57#ifndef _H_xml_util
58#include "xml_util.h"
59#endif
60
61#ifdef __cplusplus
62extern "C" {
63#endif
64
65/********************************************************************
66* *
67* C O N S T A N T S *
68* *
69*********************************************************************/
70
101#define XML_MSG_FL_PREFIX bit0
102
104#define XML_MSG_FL_ETAGS bit1
105
107#define XML_MSG_FL_ETAGS_TEST bit2
108
112#define XML_MSG_FL_TSTAMPS bit3
113
115#define XML_MSG_FL_TSTAMPS_TEST bit4
116
118#define XML_MSG_FL_KEYS bit5
119
121#define XML_MSG_FL_PASSED bit6
122
130#define XML_MSG_FL_DELTA bit7
131
135#define XML_MSG_FL_OWNERS bit8
136
140#define XML_MSG_FL_GET2 bit9
141
143#define XML_MSG_FL_MODTAGS bit10
144
146#define XML_MSG_FL_MODTAGS_EMPTY bit11
147
149#define XML_MSG_FL_ANYXML_TRACK bit12
150
151
153#define XML_MSG_USE_PREFIX(M) ((M)->flags & XML_MSG_FL_PREFIX)
154
156#define XML_MSG_NO_PREFIX(M) ((M)->flags &= ~XML_MSG_FL_PREFIX)
157
158
159/* ETAGS */
160
162#define XML_MSG_WITH_ETAGS(M) ((M)->flags & XML_MSG_FL_ETAGS)
163
165#define XML_MSG_WITH_ETAGS_TEST(M) ((M)->flags & XML_MSG_FL_ETAGS_TEST)
166
168#define XML_MSG_SET_WITH_ETAGS(M) (M)->flags |= XML_MSG_FL_ETAGS
169
171#define XML_MSG_SET_WITH_ETAGS_TEST(M) (M)->flags |= XML_MSG_FL_ETAGS_TEST
172
174#define XML_MSG_CLR_WITH_ETAGS_TEST(M) (M)->flags &= ~XML_MSG_FL_ETAGS_TEST
175
176
177/* TIMESTAMPS */
178
180#define XML_MSG_WITH_TSTAMPS(M) ((M)->flags & XML_MSG_FL_TSTAMPS)
181
183#define XML_MSG_WITH_TSTAMPS_TEST(M) ((M)->flags & XML_MSG_FL_TSTAMPS_TEST)
184
186#define XML_MSG_SET_WITH_TSTAMPS(M) (M)->flags |= XML_MSG_FL_TSTAMPS
187
189#define XML_MSG_SET_WITH_TSTAMPS_TEST(M) (M)->flags |= XML_MSG_FL_TSTAMPS_TEST
190
192#define XML_MSG_CLR_WITH_TSTAMPS_TEST(M) (M)->flags &= ~XML_MSG_FL_TSTAMPS_TEST
193
195#define XML_MSG_TSTAMPS_PASSED(M) ((M)->flags & XML_MSG_FL_PASSED)
196
198#define XML_MSG_SET_TSTAMPS_PASSED(M) (M)->flags |= XML_MSG_FL_PASSED
199
201#define XML_MSG_DELTA(M) ((M)->flags & XML_MSG_FL_DELTA)
202
204#define XML_MSG_SET_DELTA(M) (M)->flags |= XML_MSG_FL_DELTA
205
206
208#define XML_MSG_KEYS_ONLY(M) ((M)->flags & XML_MSG_FL_KEYS)
209
211#define XML_MSG_SET_KEYS_ONLY(M) (M)->flags |= XML_MSG_FL_KEYS
212
213/* WITH-OWNERS */
214
216#define XML_MSG_WITH_OWNERS(M) ((M)->flags & XML_MSG_FL_OWNERS)
217
219#define XML_MSG_SET_WITH_OWNERS(M) (M)->flags |= XML_MSG_FL_OWNERS
220
222#define XML_MSG_CLR_WITH_OWNERS(M) (M)->flags &= ~XML_MSG_FL_OWNERS
223
224
225/* GET2 */
226
228#define XML_MSG_WITH_GET2(M) ((M)->flags & XML_MSG_FL_GET2) ? TRUE : FALSE
229
231#define XML_MSG_SET_WITH_GET2(M) (M)->flags |= XML_MSG_FL_GET2
232
234#define XML_MSG_CLR_WITH_GET2(M) (M)->flags &= ~XML_MSG_FL_GET2
235
237#define XML_MSG_SET_LOOKUPQ(M,Q) (M)->lookupQ = Q
238
240#define XML_MSG_SET_MATCHQ(M,Q) (M)->matchQ = Q
241
243#define XML_MSG_SET_SELECTQ(M,Q) (M)->selectQ = Q
244
245
246/* ANYXML-TRACKING */
247
249#define XML_MSG_ANYXML_TRACK(M) ((M)->flags & XML_MSG_FL_ANYXML_TRACK)
250
252#define XML_MSG_SET_ANYXML_TRACK(M) (M)->flags |= XML_MSG_FL_ANYXML_TRACK
253
255#define XML_MSG_CLR_ANYXML_TRACK(M) (M)->flags &= ~XML_MSG_FL_ANYXML_TRACK
256
258#define XML_MSG_ANYXML_OBJ(M) (M)->anyxml_obj
259
261#define XML_MSG_GET_ERROR_DATAQ(M) &(M)->error_dataQ
262
264#define XML_MSG_ACTIONVAL(M) (M)->actionval
265
267#define XML_MSG_GETBULK(M) (M)->getbulk_cb
268
270#define XML_MSG_GET2_TARGET(M) (M)->get2_target
271
273#define XML_MSG_GET2CB(M) (M)->get2cb
274
275/* MODTAGS */
276
278#define XML_MSG_WITH_MODTAGS(M) ((M)->flags & XML_MSG_FL_MODTAGS)
279
281#define XML_MSG_SET_WITH_MODTAGS(M) (M)->flags |= XML_MSG_FL_MODTAGS
282
284#define XML_MSG_WITH_MODTAGS_EMPTY(M) \
285 ((M)->flags & XML_MSG_FL_MODTAGS_EMPTY)
286
288#define XML_MSG_SET_WITH_MODTAGS_EMPTY(M) \
289 (M)->flags |= XML_MSG_FL_MODTAGS_EMPTY
290
292#define XML_MSG_YPGNMI_GETCB(M) (M)->gnmi_getcb
293
295#define XML_MSG_YPGNMI_EDITCB(M) (M)->gnmi_editcb
296
298#define XML_MSG_PRUNE_BAD_DATA(M) (M)->prune_bad_data
299
301#define XML_MSG_XGET_REQ(M) (M)->xget_request
302
304#define XML_MSG_ALLINONE_MODE(M) (M)->all_in_one_mode
305
309#define XML_MSG_LAST_GET2_FILPTR(M) (M)->get2_filptr
310
312#define XML_MSG_GET2CB_ALLINONE(M) (M)->get2cb
313
314
316#define XML_MSG_NMDA_PARAMS(M) (M)->nmda_params
317
319#define XML_MSG_WITH_ORIGIN(M) \
320 ((M)->nmda_params && (M)->nmda_params->with_origin)
321
323#define XML_MSG_EDIT_CONFIG_ROOT(M) (M)->edit_config_root
324
326#define XML_MSG_DEPTH_TARGET(M) (M)->depth_target
327
328
330#define XML_MSG_NMDA_OPERATIONAL(M) \
331 ((M)->nmda_params && \
332 ((M)->nmda_params->nmda_ds == NCX_NMDA_DS_OPERATIONAL))
333
339#define XML_MSG_SM_MPID(M) (M)->sm_mpid
340
342#define XML_MSG_SID_LOWER(M) (M)->sid_lower
343
344
346#define XML_MSG_SID_UPPER(M) (M)->sid_upper
347
349#define XML_MSG_SID_SKIP(M) (M)->sid_skip
350
352#define XML_MSG_PARENT_SID(M) (M)->parent_sid
353
354
360#define XML_MSG_ACTION_PARENT(M) (M)->action_parent
361
362
370#define XML_MSG_ACTION_PARENT_MODE(M) (M)->action_parent_mode
371
377#define XML_MSG_SKIP_EMPTY_NPCON(M) (M)->skip_empty_npcon
378
379
385#define XML_MSG_PRE_PROCESS_MODE(M) (M)->pre_process_mode
386
387
389#define XML_MSG_JSON_PARSE_NOTIF(M) (M)->json_parse_notif
390
391
398#define XML_MSG_JSON_WR_FIXTOP(M) (M)->json_wr_fixtop
399
405#define XML_MSG_YANG_PUSH_FIX(M) (M)->yang_push_fix
406
407
416#define XML_MSG_YANG_PUSH_MODE(M) (M)->yang_push_mode
417
418
419/********************************************************************
420* *
421* T Y P E S *
422* *
423*********************************************************************/
424
425
436typedef struct xml_msg_hdr_t_ {
437
439 uint16 flags;
440
449 dlq_hdr_t prefixQ;
454 dlq_hdr_t errQ;
457 dlq_hdr_t filptr_cleanupQ;
479 dlq_hdr_t error_dataQ;
482 dlq_hdr_t *lookupQ;
485 dlq_hdr_t *matchQ;
488 dlq_hdr_t *selectQ;
494 struct agt_acm_cache_t_ *acm_cache;
495
501 uint32 msgid;
502
507
509 boolean cfgid_valid;
510
514 void *acm_cbfn;
515
516 uint32 max_depth;
517 uint32 start_depth;
518 uint32 cur_depth;
522
525
528
531
533 struct tk_chain_t_ *tkc;
534
537
540
543
546
549
552
556 val_value_t *actionval; /* backptr into rpc_input tree */
557
559 struct getbulk_cb_t_ *getbulk_cb;
560
564 struct obj_template_t_ *get2_target;
565
569 struct getcb_get2_t_ *get2cb;
570
572 dlq_hdr_t modtagQ;
573
575 struct ypgnmi_get_cb_t_ *gnmi_getcb;
576
578 struct ypgnmi_edit_cb_t_ *gnmi_editcb;
579
584
589
592
596 struct ncx_filptr_t_ *get2_filptr;
597
600
602 dlq_hdr_t *aiocbQ; // Q of xpath_aio_cb_t
603
608 struct obj_template_t_ *anyxml_obj;
609
616
620 struct obj_template_t_ *depth_target;
621
631
637 ncx_sid_t sid_lower;
638
644 ncx_sid_t sid_upper;
645
647 boolean sid_skip;
648
649
654 ncx_sid_t parent_sid;
655
656 /* YPW-2006: need to GET the parent of an action invocation
657 * This is used for NMDA to verify the action can be called
658 * It is required for YANG 1.1 XPath in case a must or when
659 * statement in the input parameters reaches up into the
660 * config or state data above the action node
661 */
662 struct xpath_pcb_t_ *action_parent;
663
664 /* YPW-2060: need to flag the special get action parent mode
665 * so validation properly handled for AIO and missing NP containers
666 */
667 boolean action_parent_mode;
668
675
679 dlq_hdr_t revcount_revQ;
681 /* YPW-2273: need to flag the special subtree pre-process mode so the
682 * callback has that information and can act accordingly.
683 */
684 boolean pre_process_mode;
685
692
697
705
711
713
714
724typedef void
726 xml_msg_hdr_t *mhdr,
727 status_t res,
728 val_value_t *errnode,
729 const xmlChar *badval);
730
731
732
745typedef void
747 xml_msg_hdr_t *mhdr,
748 status_t res,
749 val_value_t *errnode,
750 const xmlChar *badval,
751 const ncx_errinfo_t *errinfo);
752
753
754
765typedef void
767 xml_msg_hdr_t *mhdr,
768 status_t res,
769 struct obj_template_t_ *errobj,
770 const xmlChar *badval);
771
772
781typedef boolean (*xml_msg_authfn_t) (xml_msg_hdr_t *msg,
782 const xmlChar *username,
783 const val_value_t *val);
784
785
804typedef void
806 xml_msg_hdr_t *mhdr,
807 ncx_layer_t layer,
808 status_t res,
809 const xml_node_t *xmlnode,
810 ncx_node_t parmtyp,
811 const void *error_info,
812 ncx_node_t nodetyp,
813 void *error_path);
814
815
836typedef void
838 xml_msg_hdr_t *msghdr,
839 ncx_layer_t layer,
840 status_t res,
841 const xml_node_t *xmlnode,
842 ncx_node_t parmtyp,
843 const void *error_info,
844 ncx_node_t nodetyp,
845 void *error_path,
846 const ncx_errinfo_t *errinfo);
847
848
867typedef void
869 xml_msg_hdr_t *msghdr,
870 ncx_layer_t layer,
871 status_t res,
872 const xml_attr_t *xmlattr,
873 const xml_node_t *xmlnode,
874 const xmlChar *badns,
875 ncx_node_t nodetyp,
876 void *errnode);
877
878
879/********************************************************************
880* *
881* F U N C T I O N S *
882* *
883*********************************************************************/
884
885
894extern void
895 xml_msg_init_hdr (xml_msg_hdr_t *msg);
896
897
909extern void
911
912
926extern const xmlChar *
928 xmlns_id_t parent_nsid,
929 xmlns_id_t nsid,
930 val_value_t *curelem,
931 boolean *xneeded);
932
933
953extern const xmlChar *
955 xmlns_id_t nsid);
956
957
968extern const xmlChar *
970 xmlns_id_t nsid);
971
972
984extern status_t
986 xmlns_id_t nsid,
987 xmlChar **retbuff,
988 uint32 buffsize);
989
990
1009extern status_t
1011 xml_attrs_t *attrs,
1012 boolean addncid,
1013 boolean addncxid);
1014
1015
1025extern status_t
1027 xml_attrs_t *attrs);
1028
1029
1044extern status_t
1046 xmlns_id_t nsid,
1047 const xmlChar *badns,
1048 xml_attrs_t *attrs);
1049
1050
1063extern status_t
1065 xml_attrs_t *attrs,
1066 boolean addncx);
1067
1068
1076extern status_t
1078
1079
1088extern status_t
1090 xml_attrs_t* attrs,
1091 xmlns_id_t ncid);
1092
1093
1094
1099extern void xml_msg_init (void);
1100
1101
1106extern void xml_msg_cleanup (void);
1107
1108
1115extern void xml_msg_set_cfgid (xml_msg_hdr_t *msg,
1116 ncx_cfg_t cfgid);
1117
1118
1130extern ncx_cfg_t
1131 xml_msg_get_cfgid (xml_msg_hdr_t *msg,
1132 boolean *isvalid);
1133
1134
1141extern uint32
1143
1144
1151extern ncx_withdefaults_t
1153
1154
1155
1162extern void
1164 ncx_withdefaults_t withdef);
1165
1166
1173extern uint32
1175
1176
1183extern void
1185 uint32 max_depth);
1186
1187
1194extern uint32
1196
1197
1204extern void
1206 uint32 start_depth);
1207
1208
1215extern uint32
1217
1218
1225extern void
1227 uint32 cur_depth);
1228
1229
1238extern ncx_display_mode_t
1240 boolean is_output);
1241
1242
1252extern void
1254 boolean is_output,
1255 ncx_display_mode_t encoding);
1256
1257
1266extern ncx_etag_t
1268 boolean *test);
1269
1270
1278extern void
1280 ncx_etag_t etag,
1281 boolean test_sense);
1282
1283
1293extern time_t
1295 boolean *test);
1296
1297
1305extern void
1307 time_t tstamp,
1308 boolean test_sense);
1309
1310
1317extern dlq_hdr_t *
1319
1320
1327extern dlq_hdr_t *
1329
1330
1337extern dlq_hdr_t *
1339
1340
1346extern void
1348
1349
1355extern void
1357
1358
1377extern boolean
1379 const struct obj_template_t_ *obj);
1380
1381
1393extern void
1395 ncx_filptr_t *filptr);
1396
1397
1404extern status_t
1406
1407
1408/*
1409* @brief Check the revisions
1410*
1411* Check if the revisions are the same in the queue. If they all the same
1412* return 1, that means that get-schema can be used with out revision
1413* specified. Otherwise, use the original count value which will produce
1414* an "duplicate" error reply.
1415*
1416* @param msg xml_msg_hdr_t to use
1417* @param orig_count count of duplicates
1418*
1419* @return count of duplicate revisions
1420*/
1421extern uint32
1422 xml_msg_check_dup_revs (xml_msg_hdr_t *msg,
1423 uint32 orig_count);
1424
1428#ifdef __cplusplus
1429} /* end extern 'C' */
1430#endif
1431
1432#endif /* _H_xml_msg */
uint32 xml_msg_get_max_depth(xml_msg_hdr_t *msg)
Get the message max_depth value.
Definition: xml_msg.c:1366
void xml_msg_save_filptr(xml_msg_hdr_t *msg, ncx_filptr_t *filptr)
Store current message subtree filter in the Queue for later cleanup.
Definition: xml_msg.c:1869
const xmlChar * xml_msg_get_prefix_xpath(xml_msg_hdr_t *msg, xmlns_id_t nsid)
Get the module prefix for XPath.
Definition: xml_msg.c:652
void(* xml_msg_record_attr_error_fn_t)(ses_cb_t *scb, xml_msg_hdr_t *msghdr, ncx_layer_t layer, status_t res, const xml_attr_t *xmlattr, const xml_node_t *xmlnode, const xmlChar *badns, ncx_node_t nodetyp, void *errnode)
Generate an rpc_err_rec_t and save it in the msg.
Definition: xml_msg.h:868
status_t xml_msg_set_with_origin(xml_msg_hdr_t *mhdr)
Set the with-origin parameter to true.
Definition: xml_msg.c:1892
boolean xml_msg_test_max_depth(xml_msg_hdr_t *mhdr, const struct obj_template_t_ *obj)
Test the max_depth parameter if needed.
Definition: xml_msg.c:1779
void xml_msg_set_encoding(xml_msg_hdr_t *msg, boolean is_output, ncx_display_mode_t encoding)
Set the message encoding value.
Definition: xml_msg.c:1525
void xml_msg_set_start_depth(xml_msg_hdr_t *msg, uint32 start_depth)
Set the message start_depth value.
Definition: xml_msg.c:1425
status_t xml_msg_gen_xmlns_attrs(xml_msg_hdr_t *msg, xml_attrs_t *attrs, boolean addncx)
Generate any xmlns directives in the top-level attribute Q.
Definition: xml_msg.c:1048
uint32 xml_msg_get_msgid(xml_msg_hdr_t *msg)
Get the message sequence ID in the message.
Definition: xml_msg.c:1308
status_t xml_msg_finish_prefix_map(xml_msg_hdr_t *msg, xml_attrs_t *attrs)
Finish the queue of xmlns_pmap_t records for the current message.
Definition: xml_msg.c:900
ncx_etag_t xml_msg_get_etag(xml_msg_hdr_t *msg, boolean *test)
Get the message etag match value and test sense.
Definition: xml_msg.c:1554
uint32 xml_msg_get_cur_depth(xml_msg_hdr_t *msg)
Get the message cur_depth value.
Definition: xml_msg.c:1446
void xml_msg_dec_cur_depth(xml_msg_hdr_t *mhdr)
Decrement the cur_depth parameter if needed.
Definition: xml_msg.c:1739
boolean(* xml_msg_authfn_t)(xml_msg_hdr_t *msg, const xmlChar *username, const val_value_t *val)
read authorization callback template
Definition: xml_msg.h:781
void(* xml_msg_obj_error_fn_t)(ses_cb_t *scb, xml_msg_hdr_t *mhdr, status_t res, struct obj_template_t_ *errobj, const xmlChar *badval)
Record an rpc-error for YANG-API/RESTCONF response translation.
Definition: xml_msg.h:766
dlq_hdr_t * xml_msg_get_lookupQ(xml_msg_hdr_t *msg)
Get the GET2 lookup Queue.
Definition: xml_msg.c:1659
const xmlChar * xml_msg_get_prefix_start_tag(xml_msg_hdr_t *msg, xmlns_id_t nsid)
Find the namespace prefix for the specified namespace ID.
Definition: xml_msg.c:705
void xml_msg_set_cur_depth(xml_msg_hdr_t *msg, uint32 cur_depth)
Set the message cur_depth value.
Definition: xml_msg.c:1465
uint32 xml_msg_get_start_depth(xml_msg_hdr_t *msg)
Get the message start_depth value.
Definition: xml_msg.c:1406
const xmlChar * xml_msg_get_prefix(xml_msg_hdr_t *msg, xmlns_id_t parent_nsid, xmlns_id_t nsid, val_value_t *curelem, boolean *xneeded)
Find the namespace prefix for the specified namespace ID If it is not there then create one.
Definition: xml_msg.c:534
void(* xml_msg_val_error_fn_t)(ses_cb_t *scb, xml_msg_hdr_t *mhdr, status_t res, val_value_t *errnode, const xmlChar *badval)
Record an rpc-error for YANG-API/RESTCONF response translation.
Definition: xml_msg.h:725
status_t xml_msg_clean_defns_attr(xml_attrs_t *attrs)
Get rid of an xmlns=foo default attribute.
Definition: xml_msg.c:1145
void xml_msg_init(void)
Init this module.
Definition: xml_msg.c:1235
void(* xml_msg_record_error_errinfo_fn_t)(ses_cb_t *scb, xml_msg_hdr_t *msghdr, ncx_layer_t layer, status_t res, const xml_node_t *xmlnode, ncx_node_t parmtyp, const void *error_info, ncx_node_t nodetyp, void *error_path, const ncx_errinfo_t *errinfo)
Generate an rpc_err_rec_t and save it in the msg Use the provided error info record for <rpc-error> f...
Definition: xml_msg.h:837
ncx_withdefaults_t xml_msg_get_withdef(xml_msg_hdr_t *msg)
Get the message withdef enum.
Definition: xml_msg.c:1326
status_t xml_msg_build_prefix_map(xml_msg_hdr_t *msg, xml_attrs_t *attrs, boolean addncid, boolean addncxid)
Build a queue of xmlns_pmap_t records for the current message.
Definition: xml_msg.c:854
status_t xml_msg_check_xmlns_attr(xml_msg_hdr_t *msg, xmlns_id_t nsid, const xmlChar *badns, xml_attrs_t *attrs)
Check the default NS and the prefix map in the msg;.
Definition: xml_msg.c:970
void xml_msg_inc_cur_depth(xml_msg_hdr_t *mhdr)
Increment the cur_depth parameter if needed.
Definition: xml_msg.c:1714
void xml_msg_cleanup(void)
Cleanup this module.
Definition: xml_msg.c:1245
dlq_hdr_t * xml_msg_get_selectQ(xml_msg_hdr_t *msg)
Get the GET2 select Queue.
Definition: xml_msg.c:1695
time_t xml_msg_get_tstamp(xml_msg_hdr_t *msg, boolean *test)
Get the message timestamp match value and test sense.
Definition: xml_msg.c:1609
void(* xml_msg_val_errinfo_fn_t)(ses_cb_t *scb, xml_msg_hdr_t *mhdr, status_t res, val_value_t *errnode, const xmlChar *badval, const ncx_errinfo_t *errinfo)
Record an rpc-error for YANG-API/RESTCONF response translation Add errinfo struct if present.
Definition: xml_msg.h:746
void xml_msg_set_tstamp(xml_msg_hdr_t *msg, time_t tstamp, boolean test_sense)
Set the timestamp match parameters.
Definition: xml_msg.c:1632
ncx_display_mode_t xml_msg_get_encoding(xml_msg_hdr_t *msg, boolean is_output)
Get the message encoding value.
Definition: xml_msg.c:1497
void xml_msg_clean_hdr(xml_msg_hdr_t *msg)
Clean all the memory used by the specified xml_msg_hdr_t but do not free the struct itself.
Definition: xml_msg.c:440
dlq_hdr_t * xml_msg_get_matchQ(xml_msg_hdr_t *msg)
Get the GET2 match Queue.
Definition: xml_msg.c:1677
status_t xml_msg_add_ncid_to_prefix_map(xml_msg_hdr_t *msg, xml_attrs_t *attrs, xmlns_id_t ncid)
Add an ncid or ncxid to a prefix map.
Definition: xml_msg.c:1192
void xml_msg_set_withdef(xml_msg_hdr_t *msg, ncx_withdefaults_t withdef)
Set the message withdef enum.
Definition: xml_msg.c:1345
status_t xml_msg_gen_new_prefix(xml_msg_hdr_t *msg, xmlns_id_t nsid, xmlChar **retbuff, uint32 buffsize)
Generate a new namespace prefix.
Definition: xml_msg.c:742
void xml_msg_set_etag(xml_msg_hdr_t *msg, ncx_etag_t etag, boolean test_sense)
Set the etag match parameters.
Definition: xml_msg.c:1577
void xml_msg_set_cfgid(xml_msg_hdr_t *msg, ncx_cfg_t cfgid)
Set the config ID in the message.
Definition: xml_msg.c:1258
void xml_msg_set_max_depth(xml_msg_hdr_t *msg, uint32 max_depth)
Set the message max_depth value.
Definition: xml_msg.c:1385
void(* xml_msg_record_error_fn_t)(ses_cb_t *scb, xml_msg_hdr_t *mhdr, ncx_layer_t layer, status_t res, const xml_node_t *xmlnode, ncx_node_t parmtyp, const void *error_info, ncx_node_t nodetyp, void *error_path)
Generate an rpc_err_rec_t and save it in the msg.
Definition: xml_msg.h:805
status_t
global error return code
Definition: status_enum.h:219
uint16 xmlns_id_t
integer handle for registered namespaces
Definition: xmlns.h:89
dlq_hdr_t xml_attrs_t
queue of xml_attr_t
Definition: xml_util.h:155
ncx_node_t
NCX Internal Node Types.
Definition: ncxtypes.h:437
uint32 ncx_etag_t
The ETag used in RESTCONF messages is the lower 32 bits of a ncx_transaction_id_t.
Definition: ncxtypes.h:750
ncx_cfg_t
hardwire the 3 standard configs
Definition: ncxtypes.h:548
ncx_layer_t
Enumeration of NETCONF protocol layers.
Definition: ncxtypes.h:507
ncx_display_mode_t
enumeration of val_dump_value display modes Some RESTCONF code uses this field incorrectly for messag...
Definition: ncxtypes.h:618
ncx_withdefaults_t
enum for with-defaults enum values
Definition: ncxtypes.h:1259
YANG module data structures Many internal representations of YANG module constructs.
Global error messages for status code enumerations.
YANG error info statement struct used to override default error handling in the server.
Definition: ncxtypes.h:1347
struct for holding r/o pointer to generic internal node for filtering purposes
Definition: ncxtypes.h:1041
internal NMDA get-data state parameters; rest of parameter are stored directly in the xml_msg_hdr_t u...
Definition: ncxtypes.h:1644
Moint Point Instance This struct lives in a val_value_t.val_extra struct.
Definition: ncxtypes.h:1796
Session Control Block.
Definition: ses.h:759
one value to match one type
Definition: val.h:962
represents one attribute
Definition: xml_util.h:159
Common Encoding Message Header No longer XML specific!! Used by JSON and CBOR parsing as well!...
Definition: xml_msg.h:436
dlq_hdr_t filptr_cleanupQ
internal processing of filter parameters
Definition: xml_msg.h:457
dlq_hdr_t error_dataQ
Q of nodes to add to the <error-info> element each node must be a proper val_value_t; A valid module ...
Definition: xml_msg.h:479
time_t match_tstamp
match timestamp used for RESTCONF conditionals
Definition: xml_msg.h:521
void * val_errinfo_fn
xml_msg_val_error_errinfo_fn_t val_error_fn
Definition: xml_msg.h:539
void * obj_error_fn
xml_msg_obj_error_fn_t obj_error_fn
Definition: xml_msg.h:542
ncx_sid_t parent_sid
YANG Parent SID to use when outputing data in pieces and callbacks instead of from a val_value_t or o...
Definition: xml_msg.h:654
dlq_hdr_t * aiocbQ
BACK POINTER TO Q of backptr AIO control blocks.
Definition: xml_msg.h:602
uint32 max_depth
max-depth value, 0=ignore
Definition: xml_msg.h:516
boolean all_in_one_mode
TRUE if this is All in One mode.
Definition: xml_msg.h:591
val_value_t * edit_config_root
if this is an edit request then the <config> root needs to be saved in the message header to allow NA...
Definition: xml_msg.h:615
void * record_error
xml_msg_record_error_fn_t record_error
Definition: xml_msg.h:545
dlq_hdr_t * matchQ
GET2 matchQ used to select only specific nodes.
Definition: xml_msg.h:485
dlq_hdr_t prefixQ
prefixQ: (incoming) All the namespace decls that were in the <rpc> request are used in the <rpc-reply...
Definition: xml_msg.h:449
ncx_display_mode_t output_encoding
RESTCONF output encoding.
Definition: xml_msg.h:530
dlq_hdr_t * lookupQ
GET2 lookup parameters provide ancestor keys.
Definition: xml_msg.h:482
uint32 cur_depth
current depth value
Definition: xml_msg.h:518
ncx_sid_t sid_upper
YANG SID upper bound filter.
Definition: xml_msg.h:644
ncx_etag_t match_etag
match ETag used for RESTCONF conditionals
Definition: xml_msg.h:524
struct agt_acm_cache_t_ * acm_cache
server access control for database reads and writes; !!! shadow pointer to per-session cache,...
Definition: xml_msg.h:494
dlq_hdr_t revcount_revQ
internal processing of revision count backptr to found modules->rev in revision count search processi...
Definition: xml_msg.h:679
ncx_withdefaults_t withdef
with-defaults value
Definition: xml_msg.h:441
struct getcb_get2_t_ * get2cb
GET2 control block needed in NACM data rule processing set and cleared for each ACM check needed; bac...
Definition: xml_msg.h:569
void * record_attr_error
xml_msg_record_attr_error_fn_t record_attr_error
Definition: xml_msg.h:551
struct tk_chain_t_ * tkc
used for RESTCONF JSON parsing
Definition: xml_msg.h:533
val_value_t * actionval
support for the YANG 1.1 <action> data tree that is used to derive keys during invocation of the call...
Definition: xml_msg.h:556
dlq_hdr_t modtagQ
Q of backptr to module-tag filter control block.
Definition: xml_msg.h:572
uint32 start_depth
for nested GET2, 0=ignore
Definition: xml_msg.h:517
uint32 msgid
incremented on every initialized message header rolls over at MAX_UINT32 back to zero used by agt_acm...
Definition: xml_msg.h:501
void * acm_cbfn
agent access control read authorization callback function: xml_msg_authfn_t
Definition: xml_msg.h:514
struct getbulk_cb_t_ * getbulk_cb
getbulk control block to save parameters and state for <getbulk>
Definition: xml_msg.h:559
struct obj_template_t_ * get2_target
GET2 nested target needs to be saved so callback code can filter out nodes that are not being request...
Definition: xml_msg.h:564
struct obj_template_t_ * depth_target
GET2 nested depth target needs to be saved so xml_msg_test_max_depth can produce a correct response a...
Definition: xml_msg.h:620
boolean json_parse_notif
JSON Parse of a notification requires some help The mgr_top_dispatch_json_msg function will set this ...
Definition: xml_msg.h:691
boolean prune_bad_data
flag set if parsing a config file prune bad data for startup-error=continue
Definition: xml_msg.h:583
boolean yang_push_fix
YANG Push Fix mode: needed for agt_output_filter when a JSON YANG Push update with a subtree filter i...
Definition: xml_msg.h:704
dlq_hdr_t errQ
errors are collected in this queue when agt_record_error is invoked
Definition: xml_msg.h:454
dlq_hdr_t * selectQ
GET2 selectQ used in alternate way to select only specific nodes.
Definition: xml_msg.h:488
struct ypgnmi_get_cb_t_ * gnmi_getcb
gnmi control block to save parameters and state for gnmi <get>
Definition: xml_msg.h:575
struct ypgnmi_edit_cb_t_ * gnmi_editcb
gnmi control block to save parameters and state for gnmi <get>
Definition: xml_msg.h:578
ncx_sid_t sid_lower
YANG SID lower bound filter.
Definition: xml_msg.h:637
struct obj_template_t_ * anyxml_obj
object pointer used by server to track real object properties for certain anyxml or anydata nodes suc...
Definition: xml_msg.h:608
ncx_nmda_params_t * nmda_params
NMDA suport for get-data.
Definition: xml_msg.h:599
boolean json_wr_fixtop
JSON Write fixup the first start object to align with GET2 callback start_complex_node.
Definition: xml_msg.h:696
ncx_sm_mpid_t * sm_mpid
Mount Point Instance used in an RPC or ACTION.
Definition: xml_msg.h:630
boolean skip_empty_npcon
support return-empty-npcontainers=false only set in rpc-reply if OK to skip empty NP containers.
Definition: xml_msg.h:674
void * record_error_errinfo
xml_msg_record_error_errinfo_fn_t record_error_errinfo
Definition: xml_msg.h:548
boolean sid_skip
Flag to indicate YANG SID SKIP DATA Mode is active.
Definition: xml_msg.h:647
ncx_display_mode_t input_encoding
RESTCONF input encoding.
Definition: xml_msg.h:527
boolean cfgid_valid
flag needed since ncx_cfg_t uses value zero for running config
Definition: xml_msg.h:509
ncx_cfg_t cfgid
the xml_msg_set_cfgid function is used by the retrieval operation (e.g., <get>, <get-config> to set t...
Definition: xml_msg.h:506
void * val_error_fn
xml_msg_val_error_fn_t val_error_fn
Definition: xml_msg.h:536
uint16 flags
internal message flags
Definition: xml_msg.h:439
boolean xget_request
flag set if <get> request is for XPath filtering.
Definition: xml_msg.h:588
boolean yang_push_mode
YANG Push mode: needed for agt_output_filter when any YANG Push update is in progress Set to true ent...
Definition: xml_msg.h:710
struct ncx_filptr_t_ * get2_filptr
The last GET2 Filter Pointer; may be used in case there are some All in One nodes still left.
Definition: xml_msg.h:596
gather node data into a simple struct.
Definition: xml_util.h:207
Value Node Basic Support.
XML Utilities.
XML namespace support.