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 fonctionnalities 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 fonctionnalities 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 void XMLCALL |
221 | xmlRegisterDefaultOutputCallbacks(void); |
222 | XMLPUBFUN xmlOutputBufferPtr XMLCALL |
223 | xmlAllocOutputBuffer (xmlCharEncodingHandlerPtr encoder); |
224 | |
225 | XMLPUBFUN xmlOutputBufferPtr XMLCALL |
226 | xmlOutputBufferCreateFilename (const char *URI, |
227 | xmlCharEncodingHandlerPtr encoder, |
228 | int compression); |
229 | |
230 | XMLPUBFUN xmlOutputBufferPtr XMLCALL |
231 | xmlOutputBufferCreateFile (FILE *file, |
232 | xmlCharEncodingHandlerPtr encoder); |
233 | |
234 | XMLPUBFUN xmlOutputBufferPtr XMLCALL |
235 | xmlOutputBufferCreateBuffer (xmlBufferPtr buffer, |
236 | xmlCharEncodingHandlerPtr encoder); |
237 | |
238 | XMLPUBFUN xmlOutputBufferPtr XMLCALL |
239 | xmlOutputBufferCreateFd (int fd, |
240 | xmlCharEncodingHandlerPtr encoder); |
241 | |
242 | XMLPUBFUN xmlOutputBufferPtr XMLCALL |
243 | xmlOutputBufferCreateIO (xmlOutputWriteCallback iowrite, |
244 | xmlOutputCloseCallback ioclose, |
245 | void *ioctx, |
246 | xmlCharEncodingHandlerPtr encoder); |
247 | |
248 | /* Couple of APIs to get the output without digging into the buffers */ |
249 | XMLPUBFUN const xmlChar * XMLCALL |
250 | xmlOutputBufferGetContent (xmlOutputBufferPtr out); |
251 | XMLPUBFUN size_t XMLCALL |
252 | xmlOutputBufferGetSize (xmlOutputBufferPtr out); |
253 | |
254 | XMLPUBFUN int XMLCALL |
255 | xmlOutputBufferWrite (xmlOutputBufferPtr out, |
256 | int len, |
257 | const char *buf); |
258 | XMLPUBFUN int XMLCALL |
259 | xmlOutputBufferWriteString (xmlOutputBufferPtr out, |
260 | const char *str); |
261 | XMLPUBFUN int XMLCALL |
262 | xmlOutputBufferWriteEscape (xmlOutputBufferPtr out, |
263 | const xmlChar *str, |
264 | xmlCharEncodingOutputFunc escaping); |
265 | |
266 | XMLPUBFUN int XMLCALL |
267 | xmlOutputBufferFlush (xmlOutputBufferPtr out); |
268 | XMLPUBFUN int XMLCALL |
269 | xmlOutputBufferClose (xmlOutputBufferPtr out); |
270 | |
271 | XMLPUBFUN int XMLCALL |
272 | xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc, |
273 | xmlOutputOpenCallback openFunc, |
274 | xmlOutputWriteCallback writeFunc, |
275 | xmlOutputCloseCallback closeFunc); |
276 | |
277 | xmlOutputBufferPtr |
278 | __xmlOutputBufferCreateFilename(const char *URI, |
279 | xmlCharEncodingHandlerPtr encoder, |
280 | int compression); |
281 | |
282 | #ifdef LIBXML_HTTP_ENABLED |
283 | /* This function only exists if HTTP support built into the library */ |
284 | XMLPUBFUN void XMLCALL |
285 | xmlRegisterHTTPPostCallbacks (void ); |
286 | #endif /* LIBXML_HTTP_ENABLED */ |
287 | |
288 | #endif /* LIBXML_OUTPUT_ENABLED */ |
289 | |
290 | XMLPUBFUN xmlParserInputPtr XMLCALL |
291 | xmlCheckHTTPInput (xmlParserCtxtPtr ctxt, |
292 | xmlParserInputPtr ret); |
293 | |
294 | /* |
295 | * A predefined entity loader disabling network accesses |
296 | */ |
297 | XMLPUBFUN xmlParserInputPtr XMLCALL |
298 | xmlNoNetExternalEntityLoader (const char *URL, |
299 | const char *ID, |
300 | xmlParserCtxtPtr ctxt); |
301 | |
302 | /* |
303 | * xmlNormalizeWindowsPath is obsolete, don't use it. |
304 | * Check xmlCanonicPath in uri.h for a better alternative. |
305 | */ |
306 | XMLPUBFUN xmlChar * XMLCALL |
307 | xmlNormalizeWindowsPath (const xmlChar *path); |
308 | |
309 | XMLPUBFUN int XMLCALL |
310 | xmlCheckFilename (const char *path); |
311 | /** |
312 | * Default 'file://' protocol callbacks |
313 | */ |
314 | XMLPUBFUN int XMLCALL |
315 | xmlFileMatch (const char *filename); |
316 | XMLPUBFUN void * XMLCALL |
317 | xmlFileOpen (const char *filename); |
318 | XMLPUBFUN int XMLCALL |
319 | xmlFileRead (void * context, |
320 | char * buffer, |
321 | int len); |
322 | XMLPUBFUN int XMLCALL |
323 | xmlFileClose (void * context); |
324 | |
325 | /** |
326 | * Default 'http://' protocol callbacks |
327 | */ |
328 | #ifdef LIBXML_HTTP_ENABLED |
329 | XMLPUBFUN int XMLCALL |
330 | xmlIOHTTPMatch (const char *filename); |
331 | XMLPUBFUN void * XMLCALL |
332 | xmlIOHTTPOpen (const char *filename); |
333 | #ifdef LIBXML_OUTPUT_ENABLED |
334 | XMLPUBFUN void * XMLCALL |
335 | xmlIOHTTPOpenW (const char * post_uri, |
336 | int compression ); |
337 | #endif /* LIBXML_OUTPUT_ENABLED */ |
338 | XMLPUBFUN int XMLCALL |
339 | xmlIOHTTPRead (void * context, |
340 | char * buffer, |
341 | int len); |
342 | XMLPUBFUN int XMLCALL |
343 | xmlIOHTTPClose (void * context); |
344 | #endif /* LIBXML_HTTP_ENABLED */ |
345 | |
346 | /** |
347 | * Default 'ftp://' protocol callbacks |
348 | */ |
349 | #ifdef LIBXML_FTP_ENABLED |
350 | XMLPUBFUN int XMLCALL |
351 | xmlIOFTPMatch (const char *filename); |
352 | XMLPUBFUN void * XMLCALL |
353 | xmlIOFTPOpen (const char *filename); |
354 | XMLPUBFUN int XMLCALL |
355 | xmlIOFTPRead (void * context, |
356 | char * buffer, |
357 | int len); |
358 | XMLPUBFUN int XMLCALL |
359 | xmlIOFTPClose (void * context); |
360 | #endif /* LIBXML_FTP_ENABLED */ |
361 | |
362 | #ifdef __cplusplus |
363 | } |
364 | #endif |
365 | |
366 | #endif /* __XML_IO_H__ */ |
367 | |