1/*
2 * Summary: minimal FTP implementation
3 * Description: minimal FTP implementation allowing to fetch resources
4 *              like external subset.
5 *
6 * Copy: See Copyright for the status of this software.
7 *
8 * Author: Daniel Veillard
9 */
10
11#ifndef __NANO_FTP_H__
12#define __NANO_FTP_H__
13
14#include <libxml/xmlversion.h>
15
16#ifdef LIBXML_FTP_ENABLED
17
18/* Needed for portability to Windows 64 bits */
19#if defined(__MINGW32__) || defined(_WIN32_WCE)
20#include <winsock2.h>
21#else
22/**
23 * SOCKET:
24 *
25 * macro used to provide portability of code to windows sockets
26 */
27#define SOCKET int
28/**
29 * INVALID_SOCKET:
30 *
31 * macro used to provide portability of code to windows sockets
32 * the value to be used when the socket is not valid
33 */
34#undef  INVALID_SOCKET
35#define INVALID_SOCKET (-1)
36#endif
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42/**
43 * ftpListCallback:
44 * @userData:  user provided data for the callback
45 * @filename:  the file name (including "->" when links are shown)
46 * @attrib:  the attribute string
47 * @owner:  the owner string
48 * @group:  the group string
49 * @size:  the file size
50 * @links:  the link count
51 * @year:  the year
52 * @month:  the month
53 * @day:  the day
54 * @hour:  the hour
55 * @minute:  the minute
56 *
57 * A callback for the xmlNanoFTPList command.
58 * Note that only one of year and day:minute are specified.
59 */
60typedef void (*ftpListCallback) (void *userData,
61	                         const char *filename, const char *attrib,
62	                         const char *owner, const char *group,
63				 unsigned long size, int links, int year,
64				 const char *month, int day, int hour,
65				 int minute);
66/**
67 * ftpDataCallback:
68 * @userData: the user provided context
69 * @data: the data received
70 * @len: its size in bytes
71 *
72 * A callback for the xmlNanoFTPGet command.
73 */
74typedef void (*ftpDataCallback) (void *userData,
75				 const char *data,
76				 int len);
77
78/*
79 * Init
80 */
81XMLPUBFUN void XMLCALL
82	xmlNanoFTPInit		(void);
83XMLPUBFUN void XMLCALL
84	xmlNanoFTPCleanup	(void);
85
86/*
87 * Creating/freeing contexts.
88 */
89XMLPUBFUN void * XMLCALL
90	xmlNanoFTPNewCtxt	(const char *URL);
91XMLPUBFUN void XMLCALL
92	xmlNanoFTPFreeCtxt	(void * ctx);
93XMLPUBFUN void * XMLCALL
94	xmlNanoFTPConnectTo	(const char *server,
95				 int port);
96/*
97 * Opening/closing session connections.
98 */
99XMLPUBFUN void * XMLCALL
100	xmlNanoFTPOpen		(const char *URL);
101XMLPUBFUN int XMLCALL
102	xmlNanoFTPConnect	(void *ctx);
103XMLPUBFUN int XMLCALL
104	xmlNanoFTPClose		(void *ctx);
105XMLPUBFUN int XMLCALL
106	xmlNanoFTPQuit		(void *ctx);
107XMLPUBFUN void XMLCALL
108	xmlNanoFTPScanProxy	(const char *URL);
109XMLPUBFUN void XMLCALL
110	xmlNanoFTPProxy		(const char *host,
111				 int port,
112				 const char *user,
113				 const char *passwd,
114				 int type);
115XMLPUBFUN int XMLCALL
116	xmlNanoFTPUpdateURL	(void *ctx,
117				 const char *URL);
118
119/*
120 * Rather internal commands.
121 */
122XMLPUBFUN int XMLCALL
123	xmlNanoFTPGetResponse	(void *ctx);
124XMLPUBFUN int XMLCALL
125	xmlNanoFTPCheckResponse	(void *ctx);
126
127/*
128 * CD/DIR/GET handlers.
129 */
130XMLPUBFUN int XMLCALL
131	xmlNanoFTPCwd		(void *ctx,
132				 const char *directory);
133XMLPUBFUN int XMLCALL
134	xmlNanoFTPDele		(void *ctx,
135				 const char *file);
136
137XMLPUBFUN SOCKET XMLCALL
138	xmlNanoFTPGetConnection	(void *ctx);
139XMLPUBFUN int XMLCALL
140	xmlNanoFTPCloseConnection(void *ctx);
141XMLPUBFUN int XMLCALL
142	xmlNanoFTPList		(void *ctx,
143				 ftpListCallback callback,
144				 void *userData,
145				 const char *filename);
146XMLPUBFUN SOCKET XMLCALL
147	xmlNanoFTPGetSocket	(void *ctx,
148				 const char *filename);
149XMLPUBFUN int XMLCALL
150	xmlNanoFTPGet		(void *ctx,
151				 ftpDataCallback callback,
152				 void *userData,
153				 const char *filename);
154XMLPUBFUN int XMLCALL
155	xmlNanoFTPRead		(void *ctx,
156				 void *dest,
157				 int len);
158
159#ifdef __cplusplus
160}
161#endif
162#endif /* LIBXML_FTP_ENABLED */
163#endif /* __NANO_FTP_H__ */
164