Home | History | Annotate | Download | only in libxml
      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