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