4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _POOL_XML_IMPL_H
28 #define _POOL_XML_IMPL_H
30 #pragma ident "%Z%%M% %I% %E% SMI"
37 * This file contains the definitions of types and supporting
38 * functions to implement the libpool XML specific data manipulation
41 * For more information on the libpool generic data manipulation
42 * facility, look at pool_impl.h.
44 * The central types for the generic data representation/storage
45 * facility are here enhanced to provide additional XML specific
50 * pool_xml_elem_t is the XML (to be precise, libxml - although this
51 * could be easily ported to an alternative C-API xml library)
52 * specific representation of the pool_elem_t structure.
54 * The pxe_node pointer is a pointer to an XML element which
55 * represents the element in the XML document
57 typedef struct pool_xml_elem
{
59 * Common to pool_elem_t
65 * Common to pool_xml_elem_t
67 xmlNodePtr pxe_node
; /* XML Element */
70 typedef pool_xml_elem_t pool_xml_system_t
;
72 typedef struct pool_xml_resource
{
74 * Common to pool_elem_t
78 * Specific to pool_resource_t
80 int (*pr_is_system
)(const pool_resource_t
*);
81 int (*pr_can_associate
)(const pool_resource_t
*);
83 * Common to pool_xml_elem_t
85 xmlNodePtr pxe_node
; /* XML Element */
86 } pool_xml_resource_t
;
88 typedef struct pool_xml_pool
{
90 * Common to pool_elem_t
96 int (*pp_associate
)(pool_t
*, const pool_resource_t
*);
97 int (*pp_dissociate
)(pool_t
*, const pool_resource_t
*);
99 * Common to pool_xml_elem_t
101 xmlNodePtr pxe_node
; /* XML Element */
104 typedef pool_xml_elem_t pool_xml_component_t
;
107 * pool_xml_result_set_t is the XML (to be precise, libxml - although
108 * this could be easily ported to an alternative C-API xml library)
109 * specific representation of the pool_result_set_t structure.
111 * The pxr_ctx member is a pointer to an XML XPath Context which
112 * represents the context in which this result set is valid. AN
113 * alternative way of thinking about this is to envisage the context
114 * as the root of the search which is used to build the result set.
116 * The pxr_path member is a pointer to the compiled XPath statement
117 * used to generate this result set.
119 * The prs_index member is a cursor into the result set and is used by
120 * the various result set functions to determine which result set
124 typedef struct pool_xml_result_set
{
125 const pool_conf_t
*prs_conf
; /* Configuration */
126 int prs_active
; /* Query active? */
127 int prs_index
; /* Result Index */
128 pool_elem_t
*(*prs_next
)(pool_result_set_t
*);
129 pool_elem_t
*(*prs_prev
)(pool_result_set_t
*);
130 pool_elem_t
*(*prs_first
)(pool_result_set_t
*);
131 pool_elem_t
*(*prs_last
)(pool_result_set_t
*);
132 int (*prs_set_index
)(pool_result_set_t
*, int);
133 int (*prs_get_index
)(pool_result_set_t
*);
134 int (*prs_close
)(pool_result_set_t
*);
135 int (*prs_count
)(pool_result_set_t
*);
139 xmlXPathContextPtr pxr_ctx
; /* Result Context */
140 xmlXPathObjectPtr pxr_path
; /* Result Path Object */
141 } pool_xml_result_set_t
;
144 * pool_xml_connection_t is the XML (to be precise, libxml - although
145 * this could be easily ported to an alternative C-API xml library)
146 * specific representation of the pool_result_set_t structure.
148 * The pxc_doc member is a pointer to an XML document structure which
149 * contains information about the XML document which acts as the data
150 * store for this connection.
152 * The pxc_file member is a FILE pointer to the data file used to
153 * store the XML document.
155 * The pxc_oflags member is the OR'd list of options specified when
156 * opening this connection.
158 * The pxc_cleanup member is a boolean flag indicating whether a
159 * configuration has a backup which needs to be cleaned up. This is
160 * used as a means of providing resilient configuration changes in the
161 * face of potential failure.
164 typedef struct pool_xml_connection
{
165 const char *pc_name
; /* Provider name */
166 int pc_store_type
; /* Datastore type */
167 int pc_oflags
; /* Open flags */
168 int (*pc_close
)(pool_conf_t
*);
169 int (*pc_validate
)(const pool_conf_t
*, pool_valid_level_t
);
170 int (*pc_commit
)(pool_conf_t
*);
171 int (*pc_export
)(const pool_conf_t
*, const char *,
172 pool_export_format_t
);
173 int (*pc_rollback
)(pool_conf_t
*);
174 pool_result_set_t
*(*pc_exec_query
)(const pool_conf_t
*,
175 const pool_elem_t
*, const char *,
176 pool_elem_class_t
, pool_value_t
**);
177 pool_elem_t
*(*pc_elem_create
)(pool_conf_t
*, pool_elem_class_t
,
178 pool_resource_elem_class_t
, pool_component_elem_class_t
);
179 int (*pc_remove
)(pool_conf_t
*);
180 int (*pc_res_xfer
)(pool_resource_t
*, pool_resource_t
*, uint64_t);
181 int (*pc_res_xxfer
)(pool_resource_t
*, pool_resource_t
*,
182 pool_component_t
**);
183 char *(*pc_get_binding
)(pool_conf_t
*, pid_t
);
184 int (*pc_set_binding
)(pool_conf_t
*, const char *, idtype_t
, id_t
);
185 char *(*pc_get_resource_binding
)(pool_conf_t
*,
186 pool_resource_elem_class_t
, pid_t
);
190 xmlDocPtr pxc_doc
; /* XML document */
191 FILE *pxc_file
; /* XML File */
192 } pool_xml_connection_t
;
198 #endif /* _POOL_XML_IMPL_H */