1 | /* |
2 | * Summary: interface for the I/O interfaces used by the parser |
3 | * Description: interface for the I/O interfaces used by the parser |
4 | * |
5 | * Copy: See Copyright for the status of this software. |
6 | * |
7 | * Author: Daniel Veillard |
8 | */ |
9 | |
10 | #ifndef __XML_IO_H__ |
11 | #define __XML_IO_H__ |
12 | |
13 | #include <stdio.h> |
14 | #include <libxml/xmlversion.h> |
15 | |
16 | #ifdef __cplusplus |
17 | extern "C" { |
18 | #endif |
19 | |
20 | /* |
21 | * Those are the functions and datatypes for the parser input |
22 | * I/O structures. |
23 | */ |
24 | |
25 | /** |
26 | * xmlInputMatchCallback: |
27 | * @filename: the filename or URI |
28 | * |
29 | * Callback used in the I/O Input API to detect if the current handler |
30 | * can provide input functionality for this resource. |
31 | * |
32 | * Returns 1 if yes and 0 if another Input module should be used |
33 | */ |
34 | typedef int (XMLCALL *xmlInputMatchCallback) (char const *filename); |
35 | /** |
36 | * xmlInputOpenCallback: |
37 | * @filename: the filename or URI |
38 | * |
39 | * Callback used in the I/O Input API to open the resource |
40 | * |
41 | * Returns an Input context or NULL in case or error |
42 | */ |
43 | typedef void * (XMLCALL *xmlInputOpenCallback) (char const *filename); |
44 | /** |
45 | * xmlInputReadCallback: |
46 | * @context: an Input context |
47 | * @buffer: the buffer to store data read |
48 | * @len: the length of the buffer in bytes |
49 | * |
50 | * Callback used in the I/O Input API to read the resource |
51 | * |
52 | * Returns the number of bytes read or -1 in case of error |
53 | */ |
54 | typedef int (XMLCALL *xmlInputReadCallback) (void * context, char * buffer, int len); |
55 | /** |
56 | * xmlInputCloseCallback: |
57 | * @context: an Input context |
58 | * |
59 | * Callback used in the I/O Input API to close the resource |
60 | * |
61 | * Returns 0 or -1 in case of error |
62 | */ |
63 | typedef int (XMLCALL *xmlInputCloseCallback) (void * context); |
64 | |
65 | #ifdef LIBXML_OUTPUT_ENABLED |
66 | /* |
67 | * Those are the functions and datatypes for the library output |
68 | * I/O structures. |
69 | */ |
70 | |
71 | /** |
72 | * xmlOutputMatchCallback: |
73 | * @filename: the filename or URI |
74 | * |
75 | * Callback used in the I/O Output API to detect if the current handler |
76 | * can provide output functionality for this resource. |
77 | * |
78 | * Returns 1 if yes and 0 if another Output module should be used |
79 | */ |
80 | typedef int (XMLCALL *xmlOutputMatchCallback) (char const *filename); |
81 | /** |
82 | * xmlOutputOpenCallback: |
83 | * @filename: the filename or URI |
84 | * |
85 | * Callback used in the I/O Output API to open the resource |
86 | * |
87 | * Returns an Output context or NULL in case or error |
88 | */ |
89 | typedef void * (XMLCALL *xmlOutputOpenCallback) (char const *filename); |
90 | /** |
91 | * xmlOutputWriteCallback: |
92 | * @context: an Output context |
93 | * @buffer: the buffer of data to write |
94 | * @len: the length of the buffer in bytes |
95 | * |
96 | * Callback used in the I/O Output API to write to the resource |
97 | * |
98 | * Returns the number of bytes written or -1 in case of error |
99 | */ |
100 | typedef int (XMLCALL *xmlOutputWriteCallback) (void * context, const char * buffer, |
101 | int len); |
102 | /** |
103 | * xmlOutputCloseCallback: |
104 | * @context: an Output context |
105 | * |
106 | * Callback used in the I/O Output API to close the resource |
107 | * |
108 | * Returns 0 or -1 in case of error |
109 | */ |
110 | typedef int (XMLCALL *xmlOutputCloseCallback) (void * context); |
111 | #endif /* LIBXML_OUTPUT_ENABLED */ |
112 | |
113 | #ifdef __cplusplus |
114 | } |
115 | #endif |
116 | |
117 | #include <libxml/globals.h> |
118 | #include <libxml/tree.h> |
119 | #include <libxml/parser.h> |
120 | #include <libxml/encoding.h> |
121 | |
122 | #ifdef __cplusplus |
123 | extern "C" { |
124 | #endif |
125 | struct _xmlParserInputBuffer { |
126 | void* context; |
127 | xmlInputReadCallback readcallback; |
128 | xmlInputCloseCallback closecallback; |
129 | |
130 | xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */ |
131 | |
132 | xmlBufPtr buffer; /* Local buffer encoded in UTF-8 */ |
133 | xmlBufPtr raw; /* if encoder != NULL buffer for raw input */ |
134 | int compressed; /* -1=unknown, 0=not compressed, 1=compressed */ |
135 | int error; |
136 | unsigned long rawconsumed;/* amount consumed from raw */ |
137 | }; |
138 | |
139 | |
140 | #ifdef LIBXML_OUTPUT_ENABLED |
141 | struct _xmlOutputBuffer { |
142 | void* context; |
143 | xmlOutputWriteCallback writecallback; |
144 | xmlOutputCloseCallback closecallback; |
145 | |
146 | xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */ |
147 | |
148 | xmlBufPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */ |
149 | xmlBufPtr conv; /* if encoder != NULL buffer for output */ |
150 | int written; /* total number of byte written */ |
151 | int error; |
152 | }; |
153 | #endif /* LIBXML_OUTPUT_ENABLED */ |
154 | |
155 | /* |
156 | * Interfaces for input |
157 | */ |
158 | XMLPUBFUN void XMLCALL |
159 | xmlCleanupInputCallbacks (void); |
160 | |
161 | XMLPUBFUN int XMLCALL |
162 | xmlPopInputCallbacks (void); |
163 | |
164 | XMLPUBFUN void XMLCALL |
165 | xmlRegisterDefaultInputCallbacks (void); |
166 | XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
167 | xmlAllocParserInputBuffer (xmlCharEncoding enc); |
168 | |
169 | XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
170 | xmlParserInputBufferCreateFilename (const char *URI, |
171 | xmlCharEncoding enc); |
172 | XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
173 | xmlParserInputBufferCreateFile (FILE *file, |
174 | xmlCharEncoding enc); |
175 | XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
176 | xmlParserInputBufferCreateFd (int fd, |
177 | xmlCharEncoding enc); |
178 | XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
179 | xmlParserInputBufferCreateMem (const char *mem, int size, |
180 | xmlCharEncoding enc); |
181 | XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
182 | xmlParserInputBufferCreateStatic (const char *mem, int size, |
183 | xmlCharEncoding enc); |
184 | XMLPUBFUN xmlParserInputBufferPtr XMLCALL |
185 | xmlParserInputBufferCreateIO (xmlInputReadCallback ioread, |
186 | xmlInputCloseCallback ioclose, |
187 | void *ioctx, |
188 | xmlCharEncoding enc); |
189 | XMLPUBFUN int XMLCALL |
190 | xmlParserInputBufferRead (xmlParserInputBufferPtr in, |
191 | int len); |
192 | XMLPUBFUN int XMLCALL |
193 | xmlParserInputBufferGrow (xmlParserInputBufferPtr in, |
194 | int len); |
195 | XMLPUBFUN int XMLCALL |
196 | xmlParserInputBufferPush (xmlParserInputBufferPtr in, |
197 | int len, |
198 | const char *buf); |
199 | XMLPUBFUN void XMLCALL |
200 | xmlFreeParserInputBuffer (xmlParserInputBufferPtr in); |
201 | XMLPUBFUN char * XMLCALL |
202 | xmlParserGetDirectory (const char *filename); |
203 | |
204 | XMLPUBFUN int XMLCALL |
205 | xmlRegisterInputCallbacks (xmlInputMatchCallback matchFunc, |
206 | xmlInputOpenCallback openFunc, |
207 | xmlInputReadCallback readFunc, |
208 | xmlInputCloseCallback closeFunc); |
209 | |
210 | xmlParserInputBufferPtr |
211 | __xmlParserInputBufferCreateFilename(const char *URI, |
212 | xmlCharEncoding enc); |
213 | |
214 | #ifdef LIBXML_OUTPUT_ENABLED |
215 | /* |
216 | * Interfaces for output |
217 | */ |
218 | XMLPUBFUN void XMLCALL |
219 | xmlCleanupOutputCallbacks (void); |
220 | XMLPUBFUN int XMLCALL |
221 | xmlPopOutputCallbacks (void); |
222 | XMLPUBFUN void XMLCALL |
223 | xmlRegisterDefaultOutputCallbacks(void); |
224 | XMLPUBFUN xmlOutputBufferPtr XMLCALL |
225 | xmlAllocOutputBuffer (xmlCharEncodingHandlerPtr encoder); |
226 | |
227 | XMLPUBFUN xmlOutputBufferPtr XMLCALL |
228 | xmlOutputBufferCreateFilename (const char *URI, |
229 | xmlCharEncodingHandlerPtr encoder, |
230 | int compression); |
231 | |
232 | XMLPUBFUN xmlOutputBufferPtr XMLCALL |
233 | xmlOutputBufferCreateFile (FILE *file, |
234 | xmlCharEncodingHandlerPtr encoder); |
235 | |
236 | XMLPUBFUN xmlOutputBufferPtr XMLCALL |
237 | xmlOutputBufferCreateBuffer (xmlBufferPtr buffer, |
238 | xmlCharEncodingHandlerPtr encoder); |
239 | |
240 | XMLPUBFUN xmlOutputBufferPtr XMLCALL |
241 | xmlOutputBufferCreateFd (int fd, |
242 | xmlCharEncodingHandlerPtr encoder); |
243 | |
244 | XMLPUBFUN xmlOutputBufferPtr XMLCALL |
245 | xmlOutputBufferCreateIO (xmlOutputWriteCallback iowrite, |
246 | xmlOutputCloseCallback ioclose, |
247 | void *ioctx, |
248 | xmlCharEncodingHandlerPtr encoder); |
249 | |
250 | /* Couple of APIs to get the output without digging into the buffers */ |
251 | XMLPUBFUN const xmlChar * XMLCALL |
252 | xmlOutputBufferGetContent (xmlOutputBufferPtr out); |
253 | XMLPUBFUN size_t XMLCALL |
254 | xmlOutputBufferGetSize (xmlOutputBufferPtr out); |
255 | |
256 | XMLPUBFUN int XMLCALL |
257 | xmlOutputBufferWrite (xmlOutputBufferPtr out, |
258 | int len, |
259 | const char *buf); |
260 | XMLPUBFUN int XMLCALL |
261 | xmlOutputBufferWriteString (xmlOutputBufferPtr out, |
262 | const char *str); |
263 | XMLPUBFUN int XMLCALL |
264 | xmlOutputBufferWriteEscape (xmlOutputBufferPtr out, |
265 | const xmlChar *str, |
266 | xmlCharEncodingOutputFunc escaping); |
267 | |
268 | XMLPUBFUN int XMLCALL |
269 | xmlOutputBufferFlush (xmlOutputBufferPtr out); |
270 | XMLPUBFUN int XMLCALL |
271 | xmlOutputBufferClose (xmlOutputBufferPtr out); |
272 | |
273 | XMLPUBFUN int XMLCALL |
274 | xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc, |
275 | xmlOutputOpenCallback openFunc, |
276 | xmlOutputWriteCallback writeFunc, |
277 | xmlOutputCloseCallback closeFunc); |
278 | |
279 | xmlOutputBufferPtr |
280 | __xmlOutputBufferCreateFilename(const char *URI, |
281 | xmlCharEncodingHandlerPtr encoder, |
282 | int compression); |
283 | |
284 | #ifdef LIBXML_HTTP_ENABLED |
285 | /* This function only exists if HTTP support built into the library */ |
286 | XMLPUBFUN void XMLCALL |
287 | xmlRegisterHTTPPostCallbacks (void ); |
288 | #endif /* LIBXML_HTTP_ENABLED */ |
289 | |
290 | #endif /* LIBXML_OUTPUT_ENABLED */ |
291 | |
292 | XMLPUBFUN xmlParserInputPtr XMLCALL |
293 | xmlCheckHTTPInput (xmlParserCtxtPtr ctxt, |
294 | xmlParserInputPtr ret); |
295 | |
296 | /* |
297 | * A predefined entity loader disabling network accesses |
298 | */ |
299 | XMLPUBFUN xmlParserInputPtr XMLCALL |
300 | xmlNoNetExternalEntityLoader (const char *URL, |
301 | const char *ID, |
302 | xmlParserCtxtPtr ctxt); |
303 | |
304 | /* |
305 | * xmlNormalizeWindowsPath is obsolete, don't use it. |
306 | * Check xmlCanonicPath in uri.h for a better alternative. |
307 | */ |
308 | XMLPUBFUN xmlChar * XMLCALL |
309 | xmlNormalizeWindowsPath (const xmlChar *path); |
310 | |
311 | XMLPUBFUN int XMLCALL |
312 | xmlCheckFilename (const char *path); |
313 | /** |
314 | * Default 'file://' protocol callbacks |
315 | */ |
316 | XMLPUBFUN int XMLCALL |
317 | xmlFileMatch (const char *filename); |
318 | XMLPUBFUN void * XMLCALL |
319 | xmlFileOpen (const char *filename); |
320 | XMLPUBFUN int XMLCALL |
321 | xmlFileRead (void * context, |
322 | char * buffer, |
323 | int len); |
324 | XMLPUBFUN int XMLCALL |
325 | xmlFileClose (void * context); |
326 | |
327 | /** |
328 | * Default 'http://' protocol callbacks |
329 | */ |
330 | #ifdef LIBXML_HTTP_ENABLED |
331 | XMLPUBFUN int XMLCALL |
332 | xmlIOHTTPMatch (const char *filename); |
333 | XMLPUBFUN void * XMLCALL |
334 | xmlIOHTTPOpen (const char *filename); |
335 | #ifdef LIBXML_OUTPUT_ENABLED |
336 | XMLPUBFUN void * XMLCALL |
337 | xmlIOHTTPOpenW (const char * post_uri, |
338 | int compression ); |
339 | #endif /* LIBXML_OUTPUT_ENABLED */ |
340 | XMLPUBFUN int XMLCALL |
341 | xmlIOHTTPRead (void * context, |
342 | char * buffer, |
343 | int len); |
344 | XMLPUBFUN int XMLCALL |
345 | xmlIOHTTPClose (void * context); |
346 | #endif /* LIBXML_HTTP_ENABLED */ |
347 | |
348 | /** |
349 | * Default 'ftp://' protocol callbacks |
350 | */ |
351 | #ifdef LIBXML_FTP_ENABLED |
352 | XMLPUBFUN int XMLCALL |
353 | xmlIOFTPMatch (const char *filename); |
354 | XMLPUBFUN void * XMLCALL |
355 | xmlIOFTPOpen (const char *filename); |
356 | XMLPUBFUN int XMLCALL |
357 | xmlIOFTPRead (void * context, |
358 | char * buffer, |
359 | int len); |
360 | XMLPUBFUN int XMLCALL |
361 | xmlIOFTPClose (void * context); |
362 | #endif /* LIBXML_FTP_ENABLED */ |
363 | |
364 | #ifdef __cplusplus |
365 | } |
366 | #endif |
367 | |
368 | #endif /* __XML_IO_H__ */ |
369 | |