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