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
17extern "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 */
34typedef 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 */
43typedef 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 */
54typedef 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 */
63typedef 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 */
80typedef 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 */
89typedef 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 */
100typedef 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 */
110typedef 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
123extern "C" {
124#endif
125struct _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
141struct _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 */
158XMLPUBFUN void XMLCALL
159 xmlCleanupInputCallbacks (void);
160
161XMLPUBFUN int XMLCALL
162 xmlPopInputCallbacks (void);
163
164XMLPUBFUN void XMLCALL
165 xmlRegisterDefaultInputCallbacks (void);
166XMLPUBFUN xmlParserInputBufferPtr XMLCALL
167 xmlAllocParserInputBuffer (xmlCharEncoding enc);
168
169XMLPUBFUN xmlParserInputBufferPtr XMLCALL
170 xmlParserInputBufferCreateFilename (const char *URI,
171 xmlCharEncoding enc);
172XMLPUBFUN xmlParserInputBufferPtr XMLCALL
173 xmlParserInputBufferCreateFile (FILE *file,
174 xmlCharEncoding enc);
175XMLPUBFUN xmlParserInputBufferPtr XMLCALL
176 xmlParserInputBufferCreateFd (int fd,
177 xmlCharEncoding enc);
178XMLPUBFUN xmlParserInputBufferPtr XMLCALL
179 xmlParserInputBufferCreateMem (const char *mem, int size,
180 xmlCharEncoding enc);
181XMLPUBFUN xmlParserInputBufferPtr XMLCALL
182 xmlParserInputBufferCreateStatic (const char *mem, int size,
183 xmlCharEncoding enc);
184XMLPUBFUN xmlParserInputBufferPtr XMLCALL
185 xmlParserInputBufferCreateIO (xmlInputReadCallback ioread,
186 xmlInputCloseCallback ioclose,
187 void *ioctx,
188 xmlCharEncoding enc);
189XMLPUBFUN int XMLCALL
190 xmlParserInputBufferRead (xmlParserInputBufferPtr in,
191 int len);
192XMLPUBFUN int XMLCALL
193 xmlParserInputBufferGrow (xmlParserInputBufferPtr in,
194 int len);
195XMLPUBFUN int XMLCALL
196 xmlParserInputBufferPush (xmlParserInputBufferPtr in,
197 int len,
198 const char *buf);
199XMLPUBFUN void XMLCALL
200 xmlFreeParserInputBuffer (xmlParserInputBufferPtr in);
201XMLPUBFUN char * XMLCALL
202 xmlParserGetDirectory (const char *filename);
203
204XMLPUBFUN int XMLCALL
205 xmlRegisterInputCallbacks (xmlInputMatchCallback matchFunc,
206 xmlInputOpenCallback openFunc,
207 xmlInputReadCallback readFunc,
208 xmlInputCloseCallback closeFunc);
209
210xmlParserInputBufferPtr
211 __xmlParserInputBufferCreateFilename(const char *URI,
212 xmlCharEncoding enc);
213
214#ifdef LIBXML_OUTPUT_ENABLED
215/*
216 * Interfaces for output
217 */
218XMLPUBFUN void XMLCALL
219 xmlCleanupOutputCallbacks (void);
220XMLPUBFUN int XMLCALL
221 xmlPopOutputCallbacks (void);
222XMLPUBFUN void XMLCALL
223 xmlRegisterDefaultOutputCallbacks(void);
224XMLPUBFUN xmlOutputBufferPtr XMLCALL
225 xmlAllocOutputBuffer (xmlCharEncodingHandlerPtr encoder);
226
227XMLPUBFUN xmlOutputBufferPtr XMLCALL
228 xmlOutputBufferCreateFilename (const char *URI,
229 xmlCharEncodingHandlerPtr encoder,
230 int compression);
231
232XMLPUBFUN xmlOutputBufferPtr XMLCALL
233 xmlOutputBufferCreateFile (FILE *file,
234 xmlCharEncodingHandlerPtr encoder);
235
236XMLPUBFUN xmlOutputBufferPtr XMLCALL
237 xmlOutputBufferCreateBuffer (xmlBufferPtr buffer,
238 xmlCharEncodingHandlerPtr encoder);
239
240XMLPUBFUN xmlOutputBufferPtr XMLCALL
241 xmlOutputBufferCreateFd (int fd,
242 xmlCharEncodingHandlerPtr encoder);
243
244XMLPUBFUN 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 */
251XMLPUBFUN const xmlChar * XMLCALL
252 xmlOutputBufferGetContent (xmlOutputBufferPtr out);
253XMLPUBFUN size_t XMLCALL
254 xmlOutputBufferGetSize (xmlOutputBufferPtr out);
255
256XMLPUBFUN int XMLCALL
257 xmlOutputBufferWrite (xmlOutputBufferPtr out,
258 int len,
259 const char *buf);
260XMLPUBFUN int XMLCALL
261 xmlOutputBufferWriteString (xmlOutputBufferPtr out,
262 const char *str);
263XMLPUBFUN int XMLCALL
264 xmlOutputBufferWriteEscape (xmlOutputBufferPtr out,
265 const xmlChar *str,
266 xmlCharEncodingOutputFunc escaping);
267
268XMLPUBFUN int XMLCALL
269 xmlOutputBufferFlush (xmlOutputBufferPtr out);
270XMLPUBFUN int XMLCALL
271 xmlOutputBufferClose (xmlOutputBufferPtr out);
272
273XMLPUBFUN int XMLCALL
274 xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc,
275 xmlOutputOpenCallback openFunc,
276 xmlOutputWriteCallback writeFunc,
277 xmlOutputCloseCallback closeFunc);
278
279xmlOutputBufferPtr
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 */
286XMLPUBFUN void XMLCALL
287 xmlRegisterHTTPPostCallbacks (void );
288#endif /* LIBXML_HTTP_ENABLED */
289
290#endif /* LIBXML_OUTPUT_ENABLED */
291
292XMLPUBFUN xmlParserInputPtr XMLCALL
293 xmlCheckHTTPInput (xmlParserCtxtPtr ctxt,
294 xmlParserInputPtr ret);
295
296/*
297 * A predefined entity loader disabling network accesses
298 */
299XMLPUBFUN 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 */
308XMLPUBFUN xmlChar * XMLCALL
309 xmlNormalizeWindowsPath (const xmlChar *path);
310
311XMLPUBFUN int XMLCALL
312 xmlCheckFilename (const char *path);
313/**
314 * Default 'file://' protocol callbacks
315 */
316XMLPUBFUN int XMLCALL
317 xmlFileMatch (const char *filename);
318XMLPUBFUN void * XMLCALL
319 xmlFileOpen (const char *filename);
320XMLPUBFUN int XMLCALL
321 xmlFileRead (void * context,
322 char * buffer,
323 int len);
324XMLPUBFUN int XMLCALL
325 xmlFileClose (void * context);
326
327/**
328 * Default 'http://' protocol callbacks
329 */
330#ifdef LIBXML_HTTP_ENABLED
331XMLPUBFUN int XMLCALL
332 xmlIOHTTPMatch (const char *filename);
333XMLPUBFUN void * XMLCALL
334 xmlIOHTTPOpen (const char *filename);
335#ifdef LIBXML_OUTPUT_ENABLED
336XMLPUBFUN void * XMLCALL
337 xmlIOHTTPOpenW (const char * post_uri,
338 int compression );
339#endif /* LIBXML_OUTPUT_ENABLED */
340XMLPUBFUN int XMLCALL
341 xmlIOHTTPRead (void * context,
342 char * buffer,
343 int len);
344XMLPUBFUN int XMLCALL
345 xmlIOHTTPClose (void * context);
346#endif /* LIBXML_HTTP_ENABLED */
347
348/**
349 * Default 'ftp://' protocol callbacks
350 */
351#ifdef LIBXML_FTP_ENABLED
352XMLPUBFUN int XMLCALL
353 xmlIOFTPMatch (const char *filename);
354XMLPUBFUN void * XMLCALL
355 xmlIOFTPOpen (const char *filename);
356XMLPUBFUN int XMLCALL
357 xmlIOFTPRead (void * context,
358 char * buffer,
359 int len);
360XMLPUBFUN 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