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 xmlBufferPtr buffer; /* Local buffer encoded in UTF-8 */ 133 xmlBufferPtr 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 xmlBufferPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */ 149 xmlBufferPtr 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 XMLPUBFUN int XMLCALL 249 xmlOutputBufferWrite (xmlOutputBufferPtr out, 250 int len, 251 const char *buf); 252 XMLPUBFUN int XMLCALL 253 xmlOutputBufferWriteString (xmlOutputBufferPtr out, 254 const char *str); 255 XMLPUBFUN int XMLCALL 256 xmlOutputBufferWriteEscape (xmlOutputBufferPtr out, 257 const xmlChar *str, 258 xmlCharEncodingOutputFunc escaping); 259 260 XMLPUBFUN int XMLCALL 261 xmlOutputBufferFlush (xmlOutputBufferPtr out); 262 XMLPUBFUN int XMLCALL 263 xmlOutputBufferClose (xmlOutputBufferPtr out); 264 265 XMLPUBFUN int XMLCALL 266 xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc, 267 xmlOutputOpenCallback openFunc, 268 xmlOutputWriteCallback writeFunc, 269 xmlOutputCloseCallback closeFunc); 270 271 xmlOutputBufferPtr 272 __xmlOutputBufferCreateFilename(const char *URI, 273 xmlCharEncodingHandlerPtr encoder, 274 int compression); 275 276 #ifdef LIBXML_HTTP_ENABLED 277 /* This function only exists if HTTP support built into the library */ 278 XMLPUBFUN void XMLCALL 279 xmlRegisterHTTPPostCallbacks (void ); 280 #endif /* LIBXML_HTTP_ENABLED */ 281 282 #endif /* LIBXML_OUTPUT_ENABLED */ 283 284 XMLPUBFUN xmlParserInputPtr XMLCALL 285 xmlCheckHTTPInput (xmlParserCtxtPtr ctxt, 286 xmlParserInputPtr ret); 287 288 /* 289 * A predefined entity loader disabling network accesses 290 */ 291 XMLPUBFUN xmlParserInputPtr XMLCALL 292 xmlNoNetExternalEntityLoader (const char *URL, 293 const char *ID, 294 xmlParserCtxtPtr ctxt); 295 296 /* 297 * xmlNormalizeWindowsPath is obsolete, don't use it. 298 * Check xmlCanonicPath in uri.h for a better alternative. 299 */ 300 XMLPUBFUN xmlChar * XMLCALL 301 xmlNormalizeWindowsPath (const xmlChar *path); 302 303 XMLPUBFUN int XMLCALL 304 xmlCheckFilename (const char *path); 305 /** 306 * Default 'file://' protocol callbacks 307 */ 308 XMLPUBFUN int XMLCALL 309 xmlFileMatch (const char *filename); 310 XMLPUBFUN void * XMLCALL 311 xmlFileOpen (const char *filename); 312 XMLPUBFUN int XMLCALL 313 xmlFileRead (void * context, 314 char * buffer, 315 int len); 316 XMLPUBFUN int XMLCALL 317 xmlFileClose (void * context); 318 319 /** 320 * Default 'http://' protocol callbacks 321 */ 322 #ifdef LIBXML_HTTP_ENABLED 323 XMLPUBFUN int XMLCALL 324 xmlIOHTTPMatch (const char *filename); 325 XMLPUBFUN void * XMLCALL 326 xmlIOHTTPOpen (const char *filename); 327 #ifdef LIBXML_OUTPUT_ENABLED 328 XMLPUBFUN void * XMLCALL 329 xmlIOHTTPOpenW (const char * post_uri, 330 int compression ); 331 #endif /* LIBXML_OUTPUT_ENABLED */ 332 XMLPUBFUN int XMLCALL 333 xmlIOHTTPRead (void * context, 334 char * buffer, 335 int len); 336 XMLPUBFUN int XMLCALL 337 xmlIOHTTPClose (void * context); 338 #endif /* LIBXML_HTTP_ENABLED */ 339 340 /** 341 * Default 'ftp://' protocol callbacks 342 */ 343 #ifdef LIBXML_FTP_ENABLED 344 XMLPUBFUN int XMLCALL 345 xmlIOFTPMatch (const char *filename); 346 XMLPUBFUN void * XMLCALL 347 xmlIOFTPOpen (const char *filename); 348 XMLPUBFUN int XMLCALL 349 xmlIOFTPRead (void * context, 350 char * buffer, 351 int len); 352 XMLPUBFUN int XMLCALL 353 xmlIOFTPClose (void * context); 354 #endif /* LIBXML_FTP_ENABLED */ 355 356 #ifdef __cplusplus 357 } 358 #endif 359 360 #endif /* __XML_IO_H__ */ 361