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