yumapro  22.10T-6
YumaPro SDK
Loading...
Searching...
No Matches
ses.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_ses
13#define _H_ses
14/* FILE: ses.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----------------------------------------------------------------------
3430-dec-05 abb Begun.
35*/
36
37/* used by applications to generate FILE output */
38#include <stdio.h>
39
40/* used for timestamps and time deltas */
41#include <time.h>
42
43/* used by the agent for the xmlTextReader interface */
44#include <xmlreader.h>
45
46#ifndef _H_dlq
47#include "dlq.h"
48#endif
49
50#ifndef _H_ncxtypes
51#include "ncxtypes.h"
52#endif
53
54#ifndef _H_status
55#include "status.h"
56#endif
57
58#ifndef _H_tstamp
59#include "tstamp.h"
60#endif
61
62#if defined(WITH_SNMP) && defined(WITH_RESTCONF)
63#include <net-snmp/net-snmp-config.h>
64
65#ifndef UCLINUX
66#include <net-snmp/net-snmp-features.h>
67#endif
68
69#include <net-snmp/net-snmp-includes.h>
70#endif
71
72#ifdef __cplusplus
73extern "C" {
74#endif
75
76/********************************************************************
77* *
78* C O N S T A N T S *
79* *
80*********************************************************************/
81
105#define SES_MY_SID(S) ((S)->sid)
106
108#define SES_MY_FD(S) ((S)->fd)
109
111#define SES_MY_USERNAME(S) ((S)->username)
112
114#define SES_KILLREQ_SET(S) ((S)->state >= SES_ST_SHUTDOWN_REQ)
115
117#define SES_ACK_KILLREQ(S) ((S)->state = SES_ST_SHUTDOWN)
118
120#define SES_OUT_BYTES(S) (S)->stats.out_bytes
121
123#define SES_LINELEN(S) (S)->stats.out_line
124
126#define SES_LINESIZE(S) (S)->linesize
127
129#define SES_IN_ENCODING(S) (S)->in_encoding
130
132#define SES_OUT_ENCODING(S) (S)->out_encoding
133
135#define SES_IS_DUMMY(S) ((S)->sid == 0)
136
138#define SES_IS_YCONTROL(S) ((S)->ycontrol)
139
141#define SES_CONN_CLOSED(S) (S)->conn_closed
142
144#define SES_SET_CUR_RPC_MSG(S,MSG) (S)->cur_rpc_msg = MSG
145
147#define SES_GET_CUR_RPC_MSG(S) (S)->cur_rpc_msg
148
150#define SES_GET_JSON_1LINE(S) (S)->json_1line
151
153#define SES_USE_JSON_ATTRS(S) (S)->json_attrs
154
156#define SES_SET_JSON_ATTRS(S) (S)->json_attrs = TRUE
157
159#define SES_SET_LEAFLIST_PTR(S,V) (S)->leaflist = V
160
162#define SES_GET_LEAFLIST_PTR(S) (S)->leaflist
163
165#define SES_SET_LEAFLIST_ATTRS(S,A) (S)->any_leaflist_attrs = A
166
168#define SES_GET_LEAFLIST_ATTRS(S) (S)->any_leaflist_attrs
169
171#define SES_KEEP_XMLNS(S) (S)->keep_xmlns
172
174#define SES_RAWXML_MODE(S) (S)->rawxml_mode
175
177#define SES_STATE(S) (S)->state
178
180#define SES_PEERADDR(S) (S)->peeraddr
181
183#define SES_TRANSPORT(S) (S)->transport
184
186#define SES_PROTOCOL(S) (S)->protocol
187
189#define SES_IS_IPV6(S) (S)->is_ipv6
190
192#define SES_IS_CALLHOME(S) (S)->is_callhome
193
195#define SES_TYPE(S) (S)->type
196
198#define SES_GET_COOKIE(S) (S)->get_cookie
199
201#define SES_BREADCRUMBQ(S) &(S)->breadcrumbQ
202
204#define SES_CURMSG(S) (S)->curmsg
205
207#define SES_START_TLS(S) (S)->start_tls
208
210#define SES_WILDCARD_OK(S) (S)->wildcard_ok
211
213#define SES_MGRCB(S) (S)->mgrcb
214
216#define SES_NOTIF_ACTIVE(S) (S)->notif_active
217
219#define SES_RFC8639_NOTIF_COUNT(S) (S)->rfc8639_notif_cnt
220
221
225#define SES_BINARY_NOTIFS(S) (S)->binary_notifs
226
230#define BINLOG (const xmlChar *)"***binary***"
231
232
237#define SES_CALLHOME_NAME(S) (S)->callhome_name
238
239
241#define SES_NULL_SID 0
242
251#define SES_MSG_BUFFSIZE 1000
252
257#define SES_MAX_BUFFERS 500000
258
260#ifdef WITH_COAP
261#define SES_MAX_FREE_BUFFERS 4
262#else
263#define SES_MAX_FREE_BUFFERS 32
264#endif // WITH_COAP
265
267#define SES_MAX_BUFFSEND 32
268
270#define SES_MAX_BYTESEND 0xffff
271
273#define SES_DEF_LINESIZE 72
274
276#define SES_MAX_STARTCHUNK_SIZE 13
277
279#define SES_MAX_CHUNKNUM_SIZE 10
280
292#define SES_STARTCHUNK_PAD 10
293
297#define SES_ENDCHUNK_PAD 8
298
300#define SES_READBUFF_SIZE 1000
301
303#define SES_GET_YPMODE(S) (S)->yp_mode
304
306#define SES_SET_YPMODE(S,V) (S)->yp_mode = V
307
309#define SES_REMOTE_WAIT(S) (S)->remote_wait
310
312#define SES_NEED_FILE_OVERRIDE(S) ((S)->file_override && (S)->fp)
313
315#define SES_SYSTEM_USERNAME NCX_EL_SYSTEM
316
317
318/********************************************************************
319* *
320* T Y P E S *
321* *
322*********************************************************************/
323
325typedef uint32 ses_id_t;
326
328typedef enum ses_ypmode_t_ {
334
335
337typedef enum ses_type_t_ {
346
347
349typedef enum ses_transport_t_ {
363 SES_TRANSPORT_COAP_DTLS, /* CoAP DTLS/UDP socket */
368
369
371typedef enum ses_state_t_ {
382
383
385typedef enum ses_instate_t_ {
393
394
396typedef enum ses_mode_t_ {
403} ses_mode_t;
404
405
407typedef enum ses_term_reason_t_ {
417
418
420typedef enum ses_prolog_state_t_ {
425
426
434typedef struct ses_stats_t_ {
436 uint32 in_bytes;
437
439 uint32 out_bytes;
440
442 uint32 out_line;
443
445 uint32 inRpcs;
446
448 uint32 inBadRpcs;
449
452
455
457 uint32 requests;
459
460
462typedef struct ses_total_stats_t_ {
465
468
471
474
477
480
483
485 xmlChar startTime[TSTAMP_MIN_SIZE];
487
488
490typedef struct ses_msg_buff_t_ {
491 dlq_hdr_t qhdr;
492 size_t buffstart;
493 size_t bufflen;
494 size_t buffpos;
495 boolean islast;
496 boolean isbinary;
502 xmlChar buff[SES_MSG_BUFFSIZE+1];
504
505
509typedef struct ses_ready_t_ {
511 dlq_hdr_t hdr;
512
515
517 boolean inq;
518
520 boolean ycontrol;
522
523
525typedef struct ses_msg_t_ {
526 dlq_hdr_t qhdr;
527 boolean ready;
528 boolean dispatched;
530 dlq_hdr_t buffQ;
534} ses_msg_t;
535
536
547typedef ssize_t (*ses_read_fn_t) (void *s,
548 char *buff,
549 size_t bufflen,
550 bool *erragain);
551
552
559typedef status_t (*ses_write_fn_t) (void *s);
560
561
563typedef struct ses_cb_t_ {
564 dlq_hdr_t qhdr;
576 time_t hello_time;
578 xmlChar *start_time;
579 xmlChar *username;
580 xmlChar *peeraddr;
583 xmlChar *subsys_id;
585 int tid;
586 void *tcb;
589 boolean conn_closed;
590 boolean active;
591 boolean notif_active;
593 boolean noxmlns;
594 boolean framing11;
595 boolean keep_xmlns;
596 boolean warn_xml;
597 boolean rawxml_mode;
598 boolean direct_mode;
599 boolean msg_mode;
600 boolean ycontrol;
601 boolean dbapi;
602 boolean dbapi_system;
603 boolean sse_mode;
604 boolean ypgnmi;
609 boolean json_1line;
611 boolean http_waitrn;
612 boolean json_attrs;
615 boolean is_ipv6;
616 boolean is_callhome;
617 boolean dropped;
618 boolean start_tls;
620 uint32 last_ch;
621 struct val_value_t_ *leaflist;
627
632
633 xmlTextReaderPtr reader;
634 FILE *fp;
635 int fd;
638 uint32 inendpos;
640 uint32 buffcnt;
641 uint32 freecnt;
642 dlq_hdr_t msgQ;
643 dlq_hdr_t freeQ;
644 dlq_hdr_t outQ;
649 void *mgrcb;
650 struct rpc_msg_t_ *cur_rpc_msg;
652 struct yangapi_cb_t_ *rcb;
653 xmlChar *entry_point;
659 xmlChar startchunk[SES_MAX_STARTCHUNK_SIZE+1];
660
662 xmlChar *readbuff;
665 /*** user preferences ***/
666 int8 indent;
668 uint32 linesize;
679 struct agt_acm_cache_t_ *acm_cache;
680
682 xmlChar *service_name;
687 boolean chunk_based;
691 boolean use_traceid;
692
699
705
713
718 boolean remote_wait;
719
724 dlq_hdr_t breadcrumbQ;
728
733 boolean wildcard_ok;
734
740
742 struct cfg_template_t_ *fake_candidate;
743
746
748 uint32 checksum;
762
764 struct obj_template_t_ *snmp_table_obj;
765
766 boolean ypgrpc;
773
778
785
786} ses_cb_t;
787
788
792/********************************************************************
793* *
794* F U N C T I O N S *
795* *
796*********************************************************************/
797
814extern ses_cb_t *
815 ses_new_scb (void);
816
817
823extern ses_cb_t *
824 ses_new_dummy_scb (void);
825
826
827#ifdef WITH_COAP
833extern ses_cb_t *
834 ses_new_coap_scb (void);
835
836
842extern void
844
845#endif // WITH_COAP
846
847
848#if defined(WITH_SNMP) && defined(WITH_RESTCONF)
854extern ses_cb_t *
855 ses_new_snmp_scb (void);
856
857#endif // WITH_SNMP
858
859
865extern void
866 ses_free_scb (ses_cb_t *scb);
867
868
882extern void
883 ses_putchar (ses_cb_t *scb,
884 uint32 ch);
885
886
900extern void
902 uint32 ch);
903
904
911extern void
912 ses_putstr (ses_cb_t *scb,
913 const xmlChar *str);
914
915
923extern void
925 const xmlChar *str,
926 uint32 len);
927
928
942extern void
944 const xmlChar *str,
945 int32 indent);
946
947
958extern void
959 ses_putcstr (ses_cb_t *scb,
960 const xmlChar *str,
961 int32 indent);
962
963
973extern void
974 ses_puthstr (ses_cb_t *scb,
975 const xmlChar *str);
976
977
984extern void
986 uint32 ch);
987
988
999extern void
1000 ses_putastr (ses_cb_t *scb,
1001 const xmlChar *str,
1002 int32 indent);
1003
1004
1015extern void
1016 ses_putjstr (ses_cb_t *scb,
1017 const xmlChar *str,
1018 int32 indent);
1019
1020
1031extern void
1032 ses_indent (ses_cb_t *scb,
1033 int32 indent);
1034
1035
1042extern int32
1043 ses_indent_count (const ses_cb_t *scb);
1044
1045
1052extern int32
1054
1055
1062extern void
1064 int32 indent);
1065
1066
1073extern void
1074 ses_set_message_indent (ses_cb_t *scb, int32 indent);
1075
1076
1083extern void
1084 ses_set_mode (ses_cb_t *scb,
1085 ses_mode_t mode);
1086
1087
1094extern ses_mode_t
1095 ses_get_mode (ses_cb_t *scb);
1096
1097
1103extern void ses_start_msg_mode (ses_cb_t *scb);
1104
1105
1111extern void ses_stop_msg_mode (ses_cb_t *scb);
1112
1113
1120extern status_t
1121 ses_start_msg (ses_cb_t *scb);
1122
1123
1129extern void
1130 ses_finish_msg (ses_cb_t *scb);
1131
1132
1153extern int
1154 ses_read_cb (void *context,
1155 char *buffer,
1156 int len);
1157
1158
1173extern status_t
1175
1176
1183extern const xmlChar *
1185
1186
1193extern ncx_withdefaults_t
1194 ses_withdef (const ses_cb_t *scb);
1195
1196
1204extern uint32
1205 ses_line_left (const ses_cb_t *scb);
1206
1207
1218extern void
1220 const xmlChar *fname);
1221
1222
1230extern status_t
1232 const xmlChar *fname);
1233
1234
1242extern status_t
1244 const xmlChar *fname);
1245
1246
1247
1253extern ses_total_stats_t *
1254 ses_get_total_stats (void);
1255
1256
1265extern ses_transport_t
1267
1268
1275extern ses_transport_t
1276 ses_get_transport_enum (const xmlChar *str);
1277
1278
1285extern const xmlChar *
1287
1288
1297extern const xmlChar *
1299
1300
1306extern void
1308
1309
1318extern boolean
1319 ses_get_xml_nons (const ses_cb_t *scb);
1320
1321
1329extern status_t
1331 ncx_protocol_t proto);
1332
1333
1341extern ncx_protocol_t
1342 ses_get_protocol (const ses_cb_t *scb);
1343
1344
1351extern void
1353 ncx_protocol_t proto);
1354
1355
1363extern boolean
1365 ncx_protocol_t proto);
1366
1367
1378extern void
1380 boolean rawxml_mode);
1381
1382
1394extern void
1396 boolean rawxml_mode,
1397 boolean keep_xmlns);
1398
1399
1411extern void
1413 boolean rawxml_mode);
1414
1415
1427extern void
1429 boolean rawxml_mode,
1430 boolean keep_xmlns);
1431
1432
1439extern void
1441 ncx_display_mode_t encoding);
1442
1443
1450extern void
1452
1453
1460extern ncx_display_mode_t
1462
1463
1472extern int32
1473 ses_new_indent_count (boolean indent_in,
1474 int32 indent,
1475 int32 indent_amount);
1476
1477
1485extern void
1487
1488
1502extern status_t
1503 ses_getline_cb (xmlChar *fillbuff,
1504 uint32 fillbuffsize,
1505 void *cookie);
1506
1507
1514extern status_t
1516
1517
1524extern boolean
1526
1527
1533extern void
1535
1536
1543extern boolean
1545
1546
1553extern void
1555
1556
1564extern boolean
1566
1567
1573extern void
1575
1576
1583extern boolean
1585
1586
1594extern int32
1596 int32 indent);
1597
1598
1606extern int32
1608 int32 indent);
1609
1610
1617extern ncx_msg_encoding_t
1618 ses_get_msg_encoding (const ses_cb_t *scb);
1619
1620
1627extern status_t
1629
1630
1637extern const xmlChar *
1639
1640
1648extern status_t
1650 const xmlChar *point);
1651
1652
1659extern boolean
1661
1662
1663#ifdef WITH_GNMI
1670extern status_t
1672
1673
1680extern boolean
1682
1683
1689extern void
1691
1692
1699extern boolean
1701
1702#endif //WITH_GNMI
1703
1704
1712extern status_t
1714 struct obj_template_t_ *obj);
1715
1716
1722extern void
1724
1725
1732extern boolean
1733 ses_dropped (const ses_cb_t *scb);
1734
1735
1744extern status_t
1746 const xmlChar *filespec,
1747 boolean is_binary);
1748
1749
1756extern void
1758
1759
1765extern void
1767
1768
1780extern uint32
1782 uint32 *checksum_cnt);
1783
1784
1794extern boolean
1795 ses_dropped_ex (ses_cb_t *scb);
1796
1797
1798#ifdef WITH_GRPC
1805extern status_t
1807
1808
1815extern boolean
1817
1818
1824extern void
1826
1827
1834extern boolean
1836
1837#endif //WITH_GRPC
1838
1839
1846extern void
1847 ses_dump_binary_buff (const xmlChar *buff,
1848 size_t bufflen);
1849
1857extern boolean
1858 ses_poll_ready (ses_cb_t *scb);
1859
1860
1864#ifdef __cplusplus
1865} /* end extern 'C' */
1866#endif
1867
1868#endif /* _H_ses */
dlq provides general double-linked list and queue support:
status_t
global error return code
Definition: status_enum.h:187
void ses_putjstr(ses_cb_t *scb, const xmlChar *str, int32 indent)
write JSON safe content string Write a zero-terminated element content string to the session
Definition: ses.c:2924
void ses_set_out_encoding(ses_cb_t *scb, ncx_display_mode_t encoding)
Set the output encoding.
Definition: ses.c:4389
void ses_free_scb(ses_cb_t *scb)
Free a session control block.
Definition: ses.c:2357
int32 ses_indent_count(const ses_cb_t *scb)
Get the logging indent count for this session.
Definition: ses.c:3025
void ses_start_checksum(ses_cb_t *scb)
Clear the checksum field and start checksum mode.
Definition: ses.c:5247
void ses_start_msg_mode(ses_cb_t *scb)
Set the message output mode to active.
Definition: ses.c:3158
boolean ses_protocol_requested(ses_cb_t *scb, ncx_protocol_t proto)
check if the NETCONF protocol version was requested
Definition: ses.c:4223
void ses_set_grpc_session(ses_cb_t *scb)
Set the specified session as a gRPC session.
Definition: ses.c:5408
void ses_set_gnmi_session(ses_cb_t *scb)
Set the specified session as a gNMI session.
Definition: ses.c:5051
uint32 ses_line_left(const ses_cb_t *scb)
Get the number of bytes that can be added to the current line before the session linesize limit is re...
Definition: ses.c:3747
void ses_set_mode(ses_cb_t *scb, ses_mode_t mode)
Set the output mode for the specified session.
Definition: ses.c:3119
void ses_put_extern(ses_cb_t *scb, const xmlChar *fname)
write the contents of a file to the session
Definition: ses.c:3769
boolean ses_is_control_session(ses_cb_t *scb)
Check if the specified session is a control session.
Definition: ses.c:4691
void ses_set_extern_xml_mode_ex(ses_cb_t *scb, boolean rawxml_mode, boolean keep_xmlns)
Setup the scb for external XML parsing.
Definition: ses.c:4307
boolean ses_is_dbapi_session(ses_cb_t *scb)
Check if the specified session is a DB-API control session.
Definition: ses.c:4728
void ses_finish_msg(ses_cb_t *scb)
Finish an outbound message on the specified session.
Definition: ses.c:3244
void ses_put_binstr(ses_cb_t *scb, const xmlChar *str, uint32 len)
Write a binary string to the session.
Definition: ses.c:2676
void ses_puthstr(ses_cb_t *scb, const xmlChar *str)
write HTML element safe content string Write a zero-terminated element content string to the session
Definition: ses.c:2790
void ses_clear_extern_xml_mode(ses_cb_t *scb, boolean rawxml_mode)
Clear the scb from external XML parsing.
Definition: ses.c:4339
ncx_withdefaults_t ses_withdef(const ses_cb_t *scb)
Get the with-defaults value for this session.
Definition: ses.c:3726
ncx_display_mode_t ses_get_out_encoding(ses_cb_t *scb)
Get the output encoding.
Definition: ses.c:4431
void ses_putstr_indent(ses_cb_t *scb, const xmlChar *str, int32 indent)
Write a zero-terminated content string to the session with indentation.
Definition: ses.c:2710
status_t ses_start_msg(ses_cb_t *scb)
Start a new outbound message on the specified session.
Definition: ses.c:3196
status_t ses_set_protocol(ses_cb_t *scb, ncx_protocol_t proto)
set the NETCONF protocol version in use
Definition: ses.c:4085
void ses_free_xml_reader(ses_cb_t *scb)
Free the xmlTextReader for the session The encoding is switching from XML to something else.
Definition: ses.c:4485
void ses_clear_dbapi_system_session(ses_cb_t *scb)
Clear a session of the DB-API system status.
Definition: ses.c:4799
const xmlChar * ses_state_name(ses_state_t state)
Get the name of a session state from the enum value.
Definition: ses.c:3684
const xmlChar * ses_get_entry_point(ses_cb_t *scb)
Get the RESTCONF entry_point.
Definition: ses.c:4947
status_t ses_set_file_override(ses_cb_t *scb, const xmlChar *filespec, boolean is_binary)
Setup the session in file write override mode.
Definition: ses.c:5187
ncx_protocol_t ses_get_protocol(const ses_cb_t *scb)
Get the NETCONF protocol set (or unset) for this session.
Definition: ses.c:4159
int32 ses_new_indent_count(boolean indent_in, int32 indent, int32 indent_amount)
Get the new indent count from the current and indent_amount.
Definition: ses.c:4453
ses_cb_t * ses_new_snmp_scb(void)
Create a new global SNMP session control block.
Definition: ses.c:2321
int32 ses_message_indent_count(const ses_cb_t *scb)
Get the message indent count for this session.
Definition: ses.c:3046
status_t ses_set_gnmi_control_session(ses_cb_t *scb)
Set the specified session as a gNMI control session.
Definition: ses.c:5005
ses_transport_t ses_get_transport_enum(const xmlChar *str)
Get the enum value for the yumaworks-types:transport-type.
Definition: ses.c:4007
void ses_stop_msg_mode(ses_cb_t *scb)
Set the message output mode to inactive.
Definition: ses.c:3176
void ses_putstr(ses_cb_t *scb, const xmlChar *str)
Write a zero-terminated string to the session.
Definition: ses.c:2653
status_t ses_put_extern_bin(ses_cb_t *scb, const xmlChar *fname)
write the contents of a binary file to the session
Definition: ses.c:3828
void ses_indent(ses_cb_t *scb, int32 indent)
Write the proper newline + indentation to the specified session.
Definition: ses.c:2992
status_t ses_set_entry_point(ses_cb_t *scb, const xmlChar *point)
Set the RESTCONF entry_point.
Definition: ses.c:4972
boolean ses_notifications_active(const ses_cb_t *scb)
Check if the session has notifications active.
Definition: ses.c:5089
ses_total_stats_t * ses_get_total_stats(void)
Get a r/w pointer to the the session totals stats.
Definition: ses.c:3865
void ses_init_coap_scb(ses_cb_t *scb)
Initialize a CoAP session control block.
Definition: ses.c:2289
void ses_set_indent(ses_cb_t *scb, int32 indent)
Set the logging indent count for this session.
Definition: ses.c:3064
const xmlChar * ses_get_transport_name(ses_transport_t transport)
Get the name of the transport for a given enum value.
Definition: ses.c:3903
boolean ses_poll_ready(ses_cb_t *scb)
Check if the specified session is ready to read bytes.
Definition: ses.c:5503
void ses_set_dbapi_system_session(ses_cb_t *scb)
Set the specified session as a DB-API control session for system edits.
Definition: ses.c:4764
boolean ses_is_grpc_control_session(ses_cb_t *scb)
Check if the specified session is a gRPC control session.
Definition: ses.c:5385
void ses_clean_breadcrumbQ(ses_cb_t *scb)
Clean the breadcrumbQ.
Definition: ses.c:5146
status_t ses_accept_input(ses_cb_t *scb)
The IO input handler for the ncxserver loop.
Definition: ses.c:3448
boolean ses_dropped(const ses_cb_t *scb)
Check if the session has been dropped by the client.
Definition: ses.c:5165
status_t ses_set_control_session(ses_cb_t *scb)
Set the specified session as a control session.
Definition: ses.c:4670
void ses_putcstr(ses_cb_t *scb, const xmlChar *str, int32 indent)
write XML element safe content string Write a zero-terminated element content string to the session
Definition: ses.c:2746
void ses_putastr(ses_cb_t *scb, const xmlChar *str, int32 indent)
write XML attribute safe content string Write a zero-terminated attribute content string to the sessi...
Definition: ses.c:2870
ses_cb_t * ses_new_coap_scb(void)
Create a new global CoAP session control block.
Definition: ses.c:2268
status_t ses_add_breadcrumb_obj(ses_cb_t *scb, struct obj_template_t_ *obj)
Add an object to the breadcrumbQ.
void ses_putchar(ses_cb_t *scb, uint32 ch)
Write one char to the session, without any translation.
Definition: ses.c:2600
boolean ses_get_xml_nons(const ses_cb_t *scb)
force xmlns attributes to be skipped in XML mode
Definition: ses.c:4066
void ses_set_protocols_requested(ses_cb_t *scb, ncx_protocol_t proto)
set the NETCONF protocol versions requested
Definition: ses.c:4180
void ses_set_message_indent(ses_cb_t *scb, int32 indent)
Set the message indent count for this session.
Definition: ses.c:3091
void ses_putcchar(ses_cb_t *scb, uint32 ch)
Write one content char to the session, with translation as needed.
Definition: ses.c:2828
status_t ses_start_http_chunk_mode(ses_cb_t *scb)
Start outputting buffers in HTTP 1.1 chunk mode.
Definition: ses.c:4910
ncx_msg_encoding_t ses_get_msg_encoding(const ses_cb_t *scb)
Get the message encoding for the HTTP session.
Definition: ses.c:4890
int32 ses_add_indent(ses_cb_t *scb, int32 indent)
Add in the new indent amount.
Definition: ses.c:4820
ses_transport_t ses_get_transport(ses_cb_t *scb)
Get the transport enum for a given session.
Definition: ses.c:3883
int ses_read_cb(void *context, char *buffer, int len)
The IO input front-end for the xmlTextReader parser read fn.
Definition: ses.c:3326
void ses_set_xml_nons(ses_cb_t *scb)
force xmlns attributes to be skipped in XML mode
Definition: ses.c:4046
void ses_clear_extern_xml_mode_ex(ses_cb_t *scb, boolean rawxml_mode, boolean keep_xmlns)
Clear the scb from external XML parsing.
Definition: ses.c:4363
void ses_set_SSE_encoding(ses_cb_t *scb)
Set the output encoding to have a Server Sent Events filter Used for notification delivery over RESTC...
Definition: ses.c:4408
boolean ses_is_dbapi_system_session(ses_cb_t *scb)
Check if the specified session is a DB-API control session for system edits.
Definition: ses.c:4783
int32 ses_dec_indent(ses_cb_t *scb, int32 indent)
Remove the specified indent amount.
Definition: ses.c:4854
status_t ses_getline_cb(xmlChar *fillbuff, uint32 fillbuffsize, void *cookie)
The IO input front-end for the tk_parse_json_buffs function.
Definition: ses.c:4520
void ses_set_dbapi_session(ses_cb_t *scb)
Set the specified session as a DB-API control session.
Definition: ses.c:4709
boolean ses_is_gnmi_control_session(ses_cb_t *scb)
Check if the specified session is a gNMI control session.
Definition: ses.c:5028
ses_cb_t * ses_new_dummy_scb(void)
Create a new dummy session control block.
Definition: ses.c:2236
uint32 ses_finish_checksum(ses_cb_t *scb, uint32 *checksum_cnt)
Stop checksum mode and return the final checksum.
Definition: ses.c:5274
boolean ses_is_grpc_session(ses_cb_t *scb)
Check if the specified session is a gRPC session.
Definition: ses.c:5427
boolean ses_is_system_session(ses_cb_t *scb)
Check if the specified session is an internal system session.
Definition: ses.c:4746
void ses_set_extern_xml_mode(ses_cb_t *scb, boolean rawxml_mode)
Setup the scb for external XML parsing.
Definition: ses.c:4284
boolean ses_dropped_ex(ses_cb_t *scb)
Check if the session has been dropped by the client.
Definition: ses.c:5313
const xmlChar * ses_get_transport_yang_name(ses_transport_t transport)
Get the name of the transport for a given enum value.
Definition: ses.c:3961
status_t ses_set_grpc_control_session(ses_cb_t *scb)
Set the specified session as a gRPC control session.
Definition: ses.c:5362
status_t ses_put_extern2(ses_cb_t *scb, const xmlChar *fname)
write the contents of a file to the session
Definition: ses.c:3792
void ses_dump_binary_buff(const xmlChar *buff, size_t bufflen)
Dump some bytes from the binary buffer (max 256)
Definition: ses.c:5448
ses_cb_t * ses_new_scb(void)
Create a new session control block.
Definition: ses.c:2161
ses_mode_t ses_get_mode(ses_cb_t *scb)
Get the output mode for the specified session.
Definition: ses.c:3138
boolean ses_is_gnmi_session(ses_cb_t *scb)
Check if the specified session is a gNMI session.
Definition: ses.c:5070
void ses_clear_file_override(ses_cb_t *scb)
Cleanup the session in file write override mode Does not delete the file, just closes it!
Definition: ses.c:5223
void ses_put_binchar(ses_cb_t *scb, uint32 ch)
Write one binary char to the session, without any translation.
Definition: ses.c:2626
status_t(* ses_write_fn_t)(void *s)
optional write function for the session
Definition: ses.h:559
ses_transport_t
NETCONF Transport Types.
Definition: ses.h:349
ses_ypmode_t
YANG-PATCH Mode.
Definition: ses.h:328
ses_state_t
Session States.
Definition: ses.h:371
ses_mode_t
Session Output Mode.
Definition: ses.h:396
ses_term_reason_t
Session Termination reason.
Definition: ses.h:407
ses_type_t
Session Types.
Definition: ses.h:337
ses_instate_t
Session Input Handler States for base:1.0 EOM processing.
Definition: ses.h:385
uint32 ses_id_t
Session ID.
Definition: ses.h:325
#define SES_MSG_BUFFSIZE
controls the size of each buffer chunk
Definition: ses.h:251
#define SES_MAX_STARTCHUNK_SIZE
max size of a valid base:1.1 chunk header start tag
Definition: ses.h:276
ses_prolog_state_t
prolog parsing state
Definition: ses.h:420
ssize_t(* ses_read_fn_t)(void *s, char *buff, size_t bufflen, bool *erragain)
optional read function for the session
Definition: ses.h:547
@ SES_TRANSPORT_TCP_TAILF
tail-f NETCONF over TCP
Definition: ses.h:356
@ SES_TRANSPORT_BEEP
not used
Definition: ses.h:352
@ SES_TRANSPORT_COAP
CoAP UDP socket.
Definition: ses.h:362
@ SES_TRANSPORT_CLI
YumaPro CLI hook (ncxconnect, NETCONF framing)
Definition: ses.h:359
@ SES_TRANSPORT_NETCONF_TLS
NETCONF over TLS.
Definition: ses.h:365
@ SES_TRANSPORT_WEBUI
not used YumaPro WEBui (ncxconnect, no framing)
Definition: ses.h:360
@ SES_TRANSPORT_SOAP
not used
Definition: ses.h:353
@ SES_TRANSPORT_SNMP
SNMP UDP socket.
Definition: ses.h:364
@ SES_TRANSPORT_NONE
not set
Definition: ses.h:350
@ SES_TRANSPORT_SSH
NETCONF over SSH (RFC 4742 and 6242)
Definition: ses.h:351
@ SES_TRANSPORT_TLS
YANGAPI/RESTCONF over TLS.
Definition: ses.h:355
@ SES_TRANSPORT_AFLOCAL
ncxserver.sock AF_LOCAL socket – control msg
Definition: ses.h:361
@ SES_TRANSPORT_GNMI
GNMI Internal processing over RESTCONF.
Definition: ses.h:366
@ SES_TRANSPORT_HTTP
YumaPro REST API ncxconnect, no framing.
Definition: ses.h:358
@ SES_TRANSPORT_SOAPBEEP
not used
Definition: ses.h:354
@ SES_TRANSPORT_TCP_NCX
YumaWorks NETCONF over TCP.
Definition: ses.h:357
@ SES_YPMODE_RESTCONF
RESTCONF mode.
Definition: ses.h:331
@ SES_YPMODE_HA
YP-HA mode.
Definition: ses.h:330
@ SES_YPMODE_NONE
not set
Definition: ses.h:329
@ SES_YPMODE_NETCONF
NETCONF mode.
Definition: ses.h:332
@ SES_ST_IN_MSG
processing a request
Definition: ses.h:378
@ SES_ST_HELLO_WAIT
waiting for peer <hello>
Definition: ses.h:374
@ SES_ST_INIT
initialization state
Definition: ses.h:373
@ SES_ST_IDLE
adble to accept requests
Definition: ses.h:377
@ SES_ST_NONE
not set
Definition: ses.h:372
@ SES_ST_SHUTDOWN_REQ
session shutdown requested
Definition: ses.h:379
@ SES_ST_SHUTDOWN
session shutting down
Definition: ses.h:380
@ SES_ST_XRD_WAIT
RESTCONF Entry point processing.
Definition: ses.h:375
@ SES_ST_RESTCAPS_WAIT
RESTCONF Capabilities processing.
Definition: ses.h:376
@ SES_MODE_TEXT
text mode
Definition: ses.h:401
@ SES_MODE_BINARY
binary mode
Definition: ses.h:402
@ SES_MODE_HTML
HTML mode.
Definition: ses.h:400
@ SES_MODE_XMLDOC
XML documentation mode.
Definition: ses.h:399
@ SES_MODE_NONE
not set
Definition: ses.h:397
@ SES_MODE_XML
XML mode.
Definition: ses.h:398
@ SES_TR_CLOSED
close-session
Definition: ses.h:409
@ SES_TR_NONE
not set
Definition: ses.h:408
@ SES_TR_BAD_START
bad session start
Definition: ses.h:414
@ SES_TR_KILLED
kill-session
Definition: ses.h:410
@ SES_TR_TIMEOUT
inactivity timeout
Definition: ses.h:412
@ SES_TR_DROPPED
dropped by remote peer
Definition: ses.h:411
@ SES_TR_OTHER
other
Definition: ses.h:413
@ SES_TR_BAD_HELLO
bad <hello> received
Definition: ses.h:415
@ SES_TYP_NONE
not set
Definition: ses.h:338
@ SES_TYP_NETCONF
any network configuration protocol
Definition: ses.h:339
@ SES_TYP_COAP
RESTCONF over CoAP; static socket, libcoap.
Definition: ses.h:342
@ SES_TYP_GNMI
RESTCONF over GNMI.
Definition: ses.h:344
@ SES_TYP_YCONTROL
internal YControl session w/ subsystem
Definition: ses.h:341
@ SES_TYP_DUMMY
internal session for rollback, etc.
Definition: ses.h:340
@ SES_TYP_SNMP
RESTCONF over SNMP.
Definition: ses.h:343
@ SES_INST_INMSG
in message body
Definition: ses.h:388
@ SES_INST_NONE
not set
Definition: ses.h:386
@ SES_INST_INSTART
starting in the EOM field
Definition: ses.h:389
@ SES_INST_IDLE
idle state
Definition: ses.h:387
@ SES_INST_INEND
ending the EOM field
Definition: ses.h:391
@ SES_INST_INBETWEEN
in between 2 messages
Definition: ses.h:390
@ SES_PRST_WAITING
waiting
Definition: ses.h:422
@ SES_PRST_DONE
done
Definition: ses.h:423
@ SES_PRST_NONE
not set
Definition: ses.h:421
#define TSTAMP_MIN_SIZE
normal minimum buffer size for a tstamp buffer
Definition: tstamp.h:71
ncx_msg_encoding_t
enumeration for message encoding formats
Definition: ncxtypes.h:647
ncx_protocol_t
NCX session protocol versions supported.
Definition: ncxtypes.h:988
ncx_display_mode_t
enumeration of val_dump_value display modes Some RESTCONF code uses this field incorrectly for messag...
Definition: ncxtypes.h:617
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.
Session Control Block.
Definition: ses.h:563
boolean content_length_based
content len based msg body
Definition: ses.h:686
boolean rawxml_mode
T: expand_anyxml, F: normal.
Definition: ses.h:597
ses_read_fn_t rdfn
set if external write fn
Definition: ses.h:636
boolean framing11
T: base:1.1, F: base:1.0.
Definition: ses.h:594
xmlChar * readbuff
input buffer for session
Definition: ses.h:662
uint32 checksum
running checksum for YANG Push Simulated Operational mode
Definition: ses.h:748
uint32 freecnt
current freeQ count
Definition: ses.h:641
boolean http_chunk_mode
T: send HTTP chunks, F: normal.
Definition: ses.h:610
boolean locks_released
Signal release point in kill.
Definition: ses.h:587
boolean binary_notifs
Flag to indicate Binary Notification Messages are expected to be received on this session.
Definition: ses.h:772
uint32 linesize
TERM line length.
Definition: ses.h:668
ses_msg_t * curmsg
pointer to current message to read set by agt only
Definition: ses.h:727
xmlChar * callhome_name
set for server NETCONF over TLS callhome sessions so the callhome reconnect can be checked when the s...
Definition: ses.h:784
void * openssl_ssl
malloced with SSL_new
Definition: ses.h:707
xmlChar * username
user ID
Definition: ses.h:579
boolean direct_mode
T: yp-shell, F: normal.
Definition: ses.h:598
boolean is_ipv6
T: using IPv6 address, F: IPv4.
Definition: ses.h:615
boolean sse_mode
T: Server Sent Events, F: normal.
Definition: ses.h:603
struct rpc_msg_t_ * cur_rpc_msg
for SIL-SA get callback
Definition: ses.h:650
uint32 readbuffsize
input buffer size
Definition: ses.h:663
dlq_hdr_t breadcrumbQ
Queue of breadcrumb object back pointers used in XPath GET2 processing of when-stmts in operational s...
Definition: ses.h:724
dlq_hdr_t freeQ
Q of ses_msg_buff_t.
Definition: ses.h:643
uint32 checksum_cnt
byte count
Definition: ses.h:749
boolean stream_output
buffer/stream svr
Definition: ses.h:592
boolean msg_mode
T:msg-indent F:indent.
Definition: ses.h:599
boolean ypgnmi
T: is gNMI ycontrol session.
Definition: ses.h:604
boolean active
<hello> completed ok
Definition: ses.h:590
ses_id_t sid
session ID
Definition: ses.h:572
boolean json_1line
T: output JSON leaf-list on 1 line.
Definition: ses.h:609
uint32 cache_timeout
vir-val cache tmr in sec
Definition: ses.h:670
ses_stats_t stats
per-session statistics
Definition: ses.h:648
ses_ready_t outready
header for outreadyQ
Definition: ses.h:647
boolean reading_header
variables for SSL sessions; used by yangcli-pro
Definition: ses.h:685
boolean dbapi_system
T: is DB-API system session.
Definition: ses.h:602
boolean skip_modnames
YPW-888: new restconf cli parameter to turn strict JSON YANG enconding off, do not include module nam...
Definition: ses.h:704
boolean start_tls
T: need to start TLS session first.
Definition: ses.h:618
boolean wildcard_ok
set by yangcli when parsing an XML file and wildcard strings are allowed; read by mgr_val_parse check...
Definition: ses.h:733
uint32 inendpos
inside framing directive
Definition: ses.h:638
int32 total_length
total length
Definition: ses.h:688
boolean use_traceid
TRUE if OK to use Trace ID attr in the RPC calls.
Definition: ses.h:691
struct agt_acm_cache_t_ * acm_cache
agent access control for database reads and writes; for incoming agent <rpc> requests,...
Definition: ses.h:679
ses_ready_t inready
header for inreadyQ
Definition: ses.h:646
ncx_withdefaults_t withdef
with-defaults default
Definition: ses.h:669
ses_msg_buff_t * outbuff
current output buffer
Definition: ses.h:645
void * get_cookie
this pointer available to pass a cookie to a GET1 callback will not be freed when the scb is deleted
Definition: ses.h:712
dlq_hdr_t qhdr
queued by manager only
Definition: ses.h:564
boolean http_waitrn
T: wait for EOchunk, F: no wait.
Definition: ses.h:611
ses_write_fn_t wrfn
set if external read fn
Definition: ses.h:637
int8 indent
indent N spaces (0..9)
Definition: ses.h:666
ses_mode_t mode
session mode
Definition: ses.h:571
int fd
set if output to a socket
Definition: ses.h:635
int8 msg_indent
indent N spaces (-1..9)
Definition: ses.h:667
boolean ycontrol
T: is ycontrol session.
Definition: ses.h:600
boolean checksum_mode
T: add out byte to checksum.
Definition: ses.h:619
dlq_hdr_t snmp_getnext_listQ
SNMP pointers Q of malloced val_value struct Q of list entries with only keys in it.
Definition: ses.h:761
uint32 yang_sid_tree
SID Tree Assignment for this session.
Definition: ses.h:777
struct cfg_template_t_ * fake_candidate
a fake candidate config for target=running YANG-PATCH
Definition: ses.h:742
boolean warn_xml
T: xml warns, F: no warn.
Definition: ses.h:596
uint32 buffcnt
current buffer count
Definition: ses.h:640
boolean restconf_sse_mode
T: RESTCONF SSE mode.
Definition: ses.h:606
uint32 protocols_requested
bitmask
Definition: ses.h:566
uint16 rfc8639_notif_cnt
New subscriptions allow more than 1 per session.
Definition: ses.h:745
int tid
Thread ID representing session.
Definition: ses.h:585
xmlChar * service_name
variables for ycontrol sessions
Definition: ses.h:682
ncx_protocol_t protocol
protocol version in use
Definition: ses.h:567
boolean is_callhome
T: callhome session.
Definition: ses.h:616
FILE * fp
set if output to a file
Definition: ses.h:634
uint32 last_ch
save in case cr/lf in SSE mode
Definition: ses.h:620
boolean any_leaflist_attrs
T: leaf-list has attrs.
Definition: ses.h:613
dlq_hdr_t outQ
Q of ses_msg_buff_t.
Definition: ses.h:644
boolean chunk_based
chunked based msg body
Definition: ses.h:687
ses_id_t rollback_sid
session ID for rollback
Definition: ses.h:574
ses_instate_t instate
input state enum
Definition: ses.h:639
dlq_hdr_t msgQ
Q of ses_msg_t input.
Definition: ses.h:642
boolean dbapi
T: is DB-API session.
Definition: ses.h:601
struct obj_template_t_ * snmp_table_obj
Current SNMP walk table.
Definition: ses.h:764
ses_state_t state
session state
Definition: ses.h:570
ncx_display_mode_t in_encoding
input encoding can be different in RESTCONF, set by the Content-Type header
Definition: ses.h:626
xmlChar * start_time
dateTime start time
Definition: ses.h:578
boolean restconf_notif
REST SSE notifications in progress.
Definition: ses.h:607
ses_transport_t transport
transport type
Definition: ses.h:568
void * openssl_ctx
backptr to TLS context
Definition: ses.h:706
struct val_value_t_ * leaflist
JSON attrs backptr.
Definition: ses.h:621
boolean keep_xmlns
T: parse extern, F: msg
Definition: ses.h:595
ses_ypmode_t yp_mode
YANG-PATCH mode:
Definition: ses.h:698
xmlTextReaderPtr reader
input stream reader
Definition: ses.h:633
void * tcb
Thread control block.
Definition: ses.h:586
ses_type_t type
session type
Definition: ses.h:565
boolean notif_active
subscription active
Definition: ses.h:591
boolean file_override
set by server DB-API session to capture <rpc-reply> output to a file.
Definition: ses.h:739
void * mgrcb
if manager session, mgr_scb_t
Definition: ses.h:649
boolean remote_wait
if there is a remote operation in progress then this flag will be set so new input can be held off on...
Definition: ses.h:718
time_t last_rpc_time
used for idle timeout
Definition: ses.h:577
ses_term_reason_t termreason
termination reason
Definition: ses.h:575
boolean is_ycontrol_scb
T: is ycontrol_scb for HA.
Definition: ses.h:614
boolean noxmlns
xml-nons display-mode
Definition: ses.h:593
xmlChar * subsys_id
used for YCONTROL session only
Definition: ses.h:583
boolean dropped
T: session dropped in a msg.
Definition: ses.h:617
boolean conn_closed
T: scb IO closed last buffer.
Definition: ses.h:589
xmlChar * peeraddr
Inet address string.
Definition: ses.h:580
time_t hello_time
used for hello timeout
Definition: ses.h:576
boolean json_attrs
T: use JSON attributes.
Definition: ses.h:612
ncx_msg_encoding_t encoding
HTTP msg encoding.
Definition: ses.h:569
ncx_display_mode_t out_encoding
output encoding can be different in RESTCONF, set by the Accept header
Definition: ses.h:631
boolean ypgrpc
T: is gRPC ycontrol session.
Definition: ses.h:766
xmlChar * entry_point
REST-API entry point.
Definition: ses.h:653
ses_id_t killedbysid
killed-by session ID
Definition: ses.h:573
struct yangapi_cb_t_ * rcb
REST-API control block.
Definition: ses.h:652
Session Message Buffer.
Definition: ses.h:490
size_t buffstart
buff start pos
Definition: ses.h:492
boolean isbinary
T: CBOR, F: XML.
Definition: ses.h:496
dlq_hdr_t qhdr
not set
Definition: ses.h:491
size_t buffpos
buff cur position
Definition: ses.h:494
boolean islast
T: last buff in msg.
Definition: ses.h:495
size_t bufflen
buff actual size
Definition: ses.h:493
Session Message.
Definition: ses.h:525
dlq_hdr_t buffQ
Q of ses_msg_buff_t.
Definition: ses.h:530
size_t curchunksize
cur chunk rcvd
Definition: ses.h:532
size_t expchunksize
expected chunk size
Definition: ses.h:533
boolean dispatched
in processing
Definition: ses.h:528
dlq_hdr_t qhdr
Q header for buffcb->msgQ.
Definition: ses.h:526
boolean ready
ready for parsing
Definition: ses.h:527
ses_prolog_state_t prolog_state
for insert prolog
Definition: ses.h:531
ses_msg_buff_t * curbuff
cur position in buffQ
Definition: ses.h:529
embedded Q header for the message ready Q The 'inq' flag is used to prevent queue corruption
Definition: ses.h:509
boolean inq
flag that already in the ready Q
Definition: ses.h:517
dlq_hdr_t hdr
< embedded queue header threaded into ready Q
Definition: ses.h:511
ses_id_t sid
session ID of this session
Definition: ses.h:514
boolean ycontrol
flag YControl session for priority processing
Definition: ses.h:520
Per Session Statistics.
Definition: ses.h:434
uint32 inRpcs
netconf-state in-rpcs counter
Definition: ses.h:445
uint32 in_bytes
extra original internal in byte counter
Definition: ses.h:436
uint32 requests
internal request counters for EVAL tracking
Definition: ses.h:457
uint32 outNotifications
netconf-state out-notifications counter
Definition: ses.h:454
uint32 out_line
hack: bytes since ' ', pretty-print
Definition: ses.h:442
uint32 outRpcErrors
netconf-state out-rpc-errors counter
Definition: ses.h:451
uint32 inBadRpcs
netconf-state in-bad-rpcs counter
Definition: ses.h:448
uint32 out_bytes
extra original internal out byte counter
Definition: ses.h:439
Session Total Statistics.
Definition: ses.h:462
uint32 closed_sessions
total closed sessions
Definition: ses.h:467
uint32 inBadHellos
total in bad hello messages
Definition: ses.h:473
ses_stats_t stats
per-session stats added up for all sessions
Definition: ses.h:482
uint32 droppedSessions
total dropped sessions
Definition: ses.h:479
uint32 inSessions
total inbound sessions
Definition: ses.h:476
uint32 failed_sessions
total failed sessions
Definition: ses.h:470
uint32 active_sessions
total active sessions
Definition: ses.h:464
Timestamp utilities.