yumapro  21.10T-8
YumaPro SDK
xmlns.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_xmlns
13 #define _H_xmlns
14 /* FILE: xmlns.h
15 *********************************************************************
16 * *
17 * P U R P O S E *
18 * *
19 *********************************************************************/
20 
30 /*********************************************************************
31 * *
32 * C H A N G E H I S T O R Y *
33 * *
34 *********************************************************************
35 
36 date init comment
37 ----------------------------------------------------------------------
38 30-apr-05 abb Begun.
39 */
40 
41 #include <xmlstring.h>
42 
43 #ifndef _H_dlq
44 #include "dlq.h"
45 #endif
46 
47 #ifndef _H_status
48 #include "status.h"
49 #endif
50 
51 #ifdef __cplusplus
52 extern "C" {
53 #endif
54 
55 /********************************************************************
56 * *
57 * C O N S T A N T S *
58 * *
59 *********************************************************************/
60 
61 #define XMLNS_NULL_NS_ID 0
62 
63 #define XMLNS ((const xmlChar *)"xmlns")
64 #define XMLNS_LEN 5
65 
66 #define XMLNS_SEPCH ':'
67 
68 /* only compare if both elements have namespaces specified
69  * If either one is 'no namespace', then it is considered a match
70  */
71 #define XMLNS_EQ(NS1,NS2) (((NS1) && (NS2)) && ((NS1)==(NS2)))
72 
73 /********************************************************************
74 * *
75 * T Y P E S *
76 * *
77 *********************************************************************/
78 
79 
89 typedef uint16 xmlns_id_t;
90 
91 
93 typedef struct xmlns_qname_t_ {
94  xmlns_id_t nsid;
95  const xmlChar *name;
97 
99 typedef struct xmlns_t_ {
101  xmlns_id_t ns_id;
102 
104  xmlChar *ns_pfix;
105 
107  xmlChar *ns_name;
108 
110  xmlChar *ns_module;
111 
113  struct ncx_module_t_ *ns_mod;
114 
118  boolean ns_temporary;
119 
123  boolean ns_deleted;
124 } xmlns_t;
125 
126 
128 typedef struct xmlns_pmap_t_ {
130  dlq_hdr_t qhdr;
131 
133  xmlns_id_t nm_id;
134 
136  xmlChar *nm_pfix;
137 
139  boolean nm_topattr;
140 } xmlns_pmap_t;
141 
142 
143 /********************************************************************
144 * *
145 * F U N C T I O N S *
146 * *
147 *********************************************************************/
148 
149 
154 extern void
155  xmlns_init (void);
156 
157 
162 extern void
163  xmlns_cleanup (void);
164 
165 
181 extern status_t
182  xmlns_register_ns (const xmlChar *ns,
183  const xmlChar *pfix,
184  const xmlChar *modname,
185  void *modptr,
186  xmlns_id_t *ns_id);
187 
188 
194 extern void
195  xmlns_unregister_ns (xmlns_id_t ns_id);
196 
197 
207 extern status_t
208  xmlns_register_temp_ns (const xmlChar *ns,
209  const xmlChar *pfix,
210  xmlns_id_t *ns_id);
211 
212 
223 extern status_t
224  xmlns_convert_temp_ns (xmlns_id_t nsid,
225  const xmlChar *pfix,
226  const xmlChar *modname,
227  void *modptr);
228 
229 
236 extern const xmlChar *
237  xmlns_get_ns_prefix (xmlns_id_t ns_id);
238 
239 
246 extern const xmlChar *
247  xmlns_get_ns_name (xmlns_id_t ns_id);
248 
249 
256 extern xmlns_id_t
257  xmlns_find_ns_by_module (const xmlChar *modname);
258 
259 
266 extern xmlns_id_t
267  xmlns_find_ns_by_prefix (const xmlChar *pfix);
268 
269 
276 extern xmlns_id_t
277  xmlns_find_ns_by_name (const xmlChar *name);
278 
279 
287 extern xmlns_id_t
288  xmlns_find_ns_by_name_str (const xmlChar *name,
289  uint32 namelen);
290 
291 
297 extern xmlns_id_t
298  xmlns_nc_id (void);
299 
300 
306 extern xmlns_id_t
307  xmlns_ncx_id (void);
308 
309 
315 extern xmlns_id_t
316  xmlns_ns_id (void);
317 
318 
324 extern xmlns_id_t
325  xmlns_inv_id (void);
326 
327 
333 extern xmlns_id_t
334  xmlns_xs_id (void);
335 
336 
342 extern xmlns_id_t
343  xmlns_xsi_id (void);
344 
345 
351 extern xmlns_id_t
352  xmlns_xml_id (void);
353 
354 
361 extern xmlns_id_t
362  xmlns_ncn_id (void);
363 
364 
371 extern xmlns_id_t
372  xmlns_yang_id (void);
373 
374 
381 extern xmlns_id_t
382  xmlns_yin_id (void);
383 
384 
391 extern xmlns_id_t
392  xmlns_wildcard_id (void);
393 
394 
401 extern xmlns_id_t
402  xmlns_wda_id (void);
403 
404 
411 extern xmlns_id_t
412  xmlns_ywattrs_id (void);
413 
414 
421 extern xmlns_id_t
422  xmlns_origin_id (void);
423 
424 
433 extern const xmlChar *
434  xmlns_get_module (xmlns_id_t nsid);
435 
436 
443 extern void *
444  xmlns_get_modptr (xmlns_id_t nsid);
445 
446 
453 extern void
454  xmlns_set_modptrs (const xmlChar *modname,
455  void *modptr);
456 
457 
463 extern void
464  xmlns_clear_modptrs (void *modptr);
465 
466 
474 extern xmlns_pmap_t *
475  xmlns_new_pmap (uint32 buffsize);
476 
477 
483 extern void
485 
486 
492 extern xmlns_qname_t *
493  xmlns_new_qname (void);
494 
495 
501 extern void
503 
504 
514 extern boolean
515  xmlns_ids_equal (xmlns_id_t ns1,
516  xmlns_id_t ns2);
517 
522 extern void
523  xmlns_check_deleted_ns (void);
524 
525 
534 extern uint16
535  xmlns_get_mod_count (void);
536 
537 
541 #ifdef __cplusplus
542 } /* end extern 'C' */
543 #endif
544 
545 #endif /* _H_xmlns */
xmlns_id_t xmlns_find_ns_by_name_str(const xmlChar *name, uint32 namelen)
Find the NS ID from its name (counted string version)
Definition: xmlns.c:831
void xmlns_clear_modptrs(void *modptr)
Clear the module pointer for the namespace ID.
Definition: xmlns.c:1216
xmlns_id_t xmlns_inv_id(void)
Get the INVALID namespace ID.
Definition: xmlns.c:931
xmlns_id_t xmlns_find_ns_by_prefix(const xmlChar *pfix)
Find the NS ID from its prefix.
Definition: xmlns.c:755
xmlChar * nm_pfix
namespace prefix in mapping
Definition: xmlns.h:136
dlq provides general double-linked list and queue support:
represents one registered namespace
Definition: xmlns.h:99
status_t xmlns_register_ns(const xmlChar *ns, const xmlChar *pfix, const xmlChar *modname, void *modptr, xmlns_id_t *ns_id)
Register the specified namespace.
Definition: xmlns.c:494
xmlns_id_t xmlns_ncn_id(void)
Get the ID for the NETCONF Notifications namespace or 0 if it doesn&#39;t exist.
Definition: xmlns.c:999
xmlns_id_t xmlns_ywattrs_id(void)
Get the ID for the YumaWorks attributes namespace or 0 if it doesn&#39;t exist.
Definition: xmlns.c:1090
xmlChar * ns_module
module name associated with this namespace
Definition: xmlns.h:110
struct ncx_module_t_ * ns_mod
module backptr if module loaded for this namespace
Definition: xmlns.h:113
void xmlns_cleanup(void)
Cleanup module static data.
Definition: xmlns.c:458
uint16 xmlns_id_t
integer handle for registered namespaces
Definition: xmlns.h:89
xmlns_id_t xmlns_wda_id(void)
Get the ID for the wd:default XML attribute namespace or 0 if it doesn&#39;t exist.
Definition: xmlns.c:1071
void xmlns_free_qname(xmlns_qname_t *qname)
free a xmlns_qname_t struct
Definition: xmlns.c:1334
represents one QName data element
Definition: xmlns.h:93
xmlns_id_t xmlns_ns_id(void)
Get the ID for the XMLNS namespace or 0 if it doesn&#39;t exist.
Definition: xmlns.c:914
void xmlns_unregister_ns(xmlns_id_t ns_id)
Unregister the specified namespace.
Definition: xmlns.c:525
status_t xmlns_register_temp_ns(const xmlChar *ns, const xmlChar *pfix, xmlns_id_t *ns_id)
Register the specified temporary namespace.
Definition: xmlns.c:561
xmlChar * ns_pfix
XML prefix for namespace usually same as YANG module prefix.
Definition: xmlns.h:104
xmlns_id_t xmlns_xsi_id(void)
Get the ID for the XSD Instance (XSI) namespace or 0 if it doesn&#39;t exist.
Definition: xmlns.c:964
xmlns_id_t xmlns_yang_id(void)
Get the ID for the YANG namespace or 0 if it doesn&#39;t exist.
Definition: xmlns.c:1017
const xmlChar * xmlns_get_ns_prefix(xmlns_id_t ns_id)
Get the prefix for the specified namespace.
Definition: xmlns.c:669
xmlns_pmap_t * xmlns_new_pmap(uint32 buffsize)
malloc and initialize a new xmlns_pmap_t struct
Definition: xmlns.c:1249
const xmlChar * xmlns_get_module(xmlns_id_t nsid)
get the module name of the namespace ID
Definition: xmlns.c:1126
void * xmlns_get_modptr(xmlns_id_t nsid)
get the module pointer for the namespace ID
Definition: xmlns.c:1151
represents one namespace prefix mapping
Definition: xmlns.h:128
xmlns_id_t xmlns_find_ns_by_module(const xmlChar *modname)
Find the NS ID from its module name that registered it.
Definition: xmlns.c:712
xmlns_id_t xmlns_wildcard_id(void)
Get the ID for the base:1.1 wildcard namespace or 0 if it doesn&#39;t exist.
Definition: xmlns.c:1053
boolean ns_temporary
temporary flag used for unknown and other runtime namespace assignments
Definition: xmlns.h:118
xmlns_id_t xmlns_find_ns_by_name(const xmlChar *name)
Find the NS ID from its name.
Definition: xmlns.c:797
status_t
global error return code
Definition: status_enum.h:186
xmlns_id_t nsid
namespace ID
Definition: xmlns.h:94
xmlns_qname_t * xmlns_new_qname(void)
malloc and initialize a new xmlns_qname_t struct
Definition: xmlns.c:1310
void xmlns_check_deleted_ns(void)
Check if a deleted namespace is pending and free it.
Definition: xmlns.c:1382
void xmlns_free_pmap(xmlns_pmap_t *pmap)
free a xmlns_pmap_t struct
Definition: xmlns.c:1284
boolean ns_deleted
flag that the namespace is deleted and only actually remove this entry when no message processing is ...
Definition: xmlns.h:123
Global error messages for status code enumerations.
xmlns_id_t xmlns_xml_id(void)
Get the ID for the 1998 XML namespace or 0 if it doesn&#39;t exist.
Definition: xmlns.c:981
xmlns_id_t xmlns_ncx_id(void)
Get the ID for the NETCONF Extensions namespace or 0 if it doesn&#39;t exist.
Definition: xmlns.c:897
xmlChar * ns_name
namespace URI value
Definition: xmlns.h:107
uint16 xmlns_get_mod_count(void)
Get the total count of the currently loaded modules in the array of the Namespaces.
Definition: xmlns.c:1422
xmlns_id_t xmlns_nc_id(void)
Get the ID for the NETCONF namespace or 0 if it doesn&#39;t exist.
Definition: xmlns.c:880
xmlns_id_t xmlns_yin_id(void)
Get the ID for the YIN namespace or 0 if it doesn&#39;t exist.
Definition: xmlns.c:1035
xmlns_id_t xmlns_xs_id(void)
Get the ID for the XSD namespace or 0 if it doesn&#39;t exist.
Definition: xmlns.c:948
boolean nm_topattr
flag set if this xmlns is a top-level attribute
Definition: xmlns.h:139
xmlns_id_t nm_id
namespace ID in mapping
Definition: xmlns.h:133
boolean xmlns_ids_equal(xmlns_id_t ns1, xmlns_id_t ns2)
compare 2 namespace IDs only if they are both non-zero and return TRUE if they are equal ...
Definition: xmlns.c:1363
xmlns_id_t xmlns_origin_id(void)
Get the ID for the ietf-origin namespace or 0 if it doesn&#39;t exist.
Definition: xmlns.c:1108
void xmlns_set_modptrs(const xmlChar *modname, void *modptr)
get the module pointer for the namespace ID
Definition: xmlns.c:1176
void xmlns_init(void)
Initialize the module static variables.
Definition: xmlns.c:437
status_t xmlns_convert_temp_ns(xmlns_id_t nsid, const xmlChar *pfix, const xmlChar *modname, void *modptr)
Register the specified permanent namespace by converting the specified temporary NSID to a permanent ...
Definition: xmlns.c:597
const xmlChar * xmlns_get_ns_name(xmlns_id_t ns_id)
Get the name for the specified namespace.
Definition: xmlns.c:690
xmlns_id_t ns_id
namespace ID is slot number + 1
Definition: xmlns.h:101
const xmlChar * name
local-name
Definition: xmlns.h:95