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 fonctionnalities 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 fonctionnalities 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 void XMLCALL
221	xmlRegisterDefaultOutputCallbacks(void);
222XMLPUBFUN xmlOutputBufferPtr XMLCALL
223	xmlAllocOutputBuffer		(xmlCharEncodingHandlerPtr encoder);
224
225XMLPUBFUN xmlOutputBufferPtr XMLCALL
226	xmlOutputBufferCreateFilename	(const char *URI,
227					 xmlCharEncodingHandlerPtr encoder,
228					 int compression);
229
230XMLPUBFUN xmlOutputBufferPtr XMLCALL
231	xmlOutputBufferCreateFile	(FILE *file,
232					 xmlCharEncodingHandlerPtr encoder);
233
234XMLPUBFUN xmlOutputBufferPtr XMLCALL
235	xmlOutputBufferCreateBuffer	(xmlBufferPtr buffer,
236					 xmlCharEncodingHandlerPtr encoder);
237
238XMLPUBFUN xmlOutputBufferPtr XMLCALL
239	xmlOutputBufferCreateFd		(int fd,
240					 xmlCharEncodingHandlerPtr encoder);
241
242XMLPUBFUN 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 */
249XMLPUBFUN const xmlChar * XMLCALL
250        xmlOutputBufferGetContent       (xmlOutputBufferPtr out);
251XMLPUBFUN size_t XMLCALL
252        xmlOutputBufferGetSize          (xmlOutputBufferPtr out);
253
254XMLPUBFUN int XMLCALL
255	xmlOutputBufferWrite		(xmlOutputBufferPtr out,
256					 int len,
257					 const char *buf);
258XMLPUBFUN int XMLCALL
259	xmlOutputBufferWriteString	(xmlOutputBufferPtr out,
260					 const char *str);
261XMLPUBFUN int XMLCALL
262	xmlOutputBufferWriteEscape	(xmlOutputBufferPtr out,
263					 const xmlChar *str,
264					 xmlCharEncodingOutputFunc escaping);
265
266XMLPUBFUN int XMLCALL
267	xmlOutputBufferFlush		(xmlOutputBufferPtr out);
268XMLPUBFUN int XMLCALL
269	xmlOutputBufferClose		(xmlOutputBufferPtr out);
270
271XMLPUBFUN int XMLCALL
272	xmlRegisterOutputCallbacks	(xmlOutputMatchCallback matchFunc,
273					 xmlOutputOpenCallback openFunc,
274					 xmlOutputWriteCallback writeFunc,
275					 xmlOutputCloseCallback closeFunc);
276
277xmlOutputBufferPtr
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  */
284XMLPUBFUN void XMLCALL
285	xmlRegisterHTTPPostCallbacks	(void );
286#endif /* LIBXML_HTTP_ENABLED */
287
288#endif /* LIBXML_OUTPUT_ENABLED */
289
290XMLPUBFUN xmlParserInputPtr XMLCALL
291	xmlCheckHTTPInput		(xmlParserCtxtPtr ctxt,
292					 xmlParserInputPtr ret);
293
294/*
295 * A predefined entity loader disabling network accesses
296 */
297XMLPUBFUN 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 */
306XMLPUBFUN xmlChar * XMLCALL
307	xmlNormalizeWindowsPath		(const xmlChar *path);
308
309XMLPUBFUN int XMLCALL
310	xmlCheckFilename		(const char *path);
311/**
312 * Default 'file://' protocol callbacks
313 */
314XMLPUBFUN int XMLCALL
315	xmlFileMatch			(const char *filename);
316XMLPUBFUN void * XMLCALL
317	xmlFileOpen			(const char *filename);
318XMLPUBFUN int XMLCALL
319	xmlFileRead			(void * context,
320					 char * buffer,
321					 int len);
322XMLPUBFUN int XMLCALL
323	xmlFileClose			(void * context);
324
325/**
326 * Default 'http://' protocol callbacks
327 */
328#ifdef LIBXML_HTTP_ENABLED
329XMLPUBFUN int XMLCALL
330	xmlIOHTTPMatch			(const char *filename);
331XMLPUBFUN void * XMLCALL
332	xmlIOHTTPOpen			(const char *filename);
333#ifdef LIBXML_OUTPUT_ENABLED
334XMLPUBFUN void * XMLCALL
335	xmlIOHTTPOpenW			(const char * post_uri,
336					 int   compression );
337#endif /* LIBXML_OUTPUT_ENABLED */
338XMLPUBFUN int XMLCALL
339	xmlIOHTTPRead			(void * context,
340					 char * buffer,
341					 int len);
342XMLPUBFUN int XMLCALL
343	xmlIOHTTPClose			(void * context);
344#endif /* LIBXML_HTTP_ENABLED */
345
346/**
347 * Default 'ftp://' protocol callbacks
348 */
349#ifdef LIBXML_FTP_ENABLED
350XMLPUBFUN int XMLCALL
351	xmlIOFTPMatch			(const char *filename);
352XMLPUBFUN void * XMLCALL
353	xmlIOFTPOpen			(const char *filename);
354XMLPUBFUN int XMLCALL
355	xmlIOFTPRead			(void * context,
356					 char * buffer,
357					 int len);
358XMLPUBFUN 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