/ libxml2 / include / libxml / xmlIO.h
xmlIO.h
  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__ */