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#define INVALID_SOCKET (-1)
35#endif
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41/**
42 * ftpListCallback:
43 * @userData:  user provided data for the callback
44 * @filename:  the file name (including "->" when links are shown)
45 * @attrib:  the attribute string
46 * @owner:  the owner string
47 * @group:  the group string
48 * @size:  the file size
49 * @links:  the link count
50 * @year:  the year
51 * @month:  the month
52 * @day:  the day
53 * @hour:  the hour
54 * @minute:  the minute
55 *
56 * A callback for the xmlNanoFTPList command.
57 * Note that only one of year and day:minute are specified.
58 */
59typedef void (*ftpListCallback) (void *userData,
60	                         const char *filename, const char *attrib,
61	                         const char *owner, const char *group,
62				 unsigned long size, int links, int year,
63				 const char *month, int day, int hour,
64				 int minute);
65/**
66 * ftpDataCallback:
67 * @userData: the user provided context
68 * @data: the data received
69 * @len: its size in bytes
70 *
71 * A callback for the xmlNanoFTPGet command.
72 */
73typedef void (*ftpDataCallback) (void *userData,
74				 const char *data,
75				 int len);
76
77/*
78 * Init
79 */
80XMLPUBFUN void XMLCALL
81	xmlNanoFTPInit		(void);
82XMLPUBFUN void XMLCALL
83	xmlNanoFTPCleanup	(void);
84
85/*
86 * Creating/freeing contexts.
87 */
88XMLPUBFUN void * XMLCALL
89	xmlNanoFTPNewCtxt	(const char *URL);
90XMLPUBFUN void XMLCALL
91	xmlNanoFTPFreeCtxt	(void * ctx);
92XMLPUBFUN void * XMLCALL
93	xmlNanoFTPConnectTo	(const char *server,
94				 int port);
95/*
96 * Opening/closing session connections.
97 */
98XMLPUBFUN void * XMLCALL
99	xmlNanoFTPOpen		(const char *URL);
100XMLPUBFUN int XMLCALL
101	xmlNanoFTPConnect	(void *ctx);
102XMLPUBFUN int XMLCALL
103	xmlNanoFTPClose		(void *ctx);
104XMLPUBFUN int XMLCALL
105	xmlNanoFTPQuit		(void *ctx);
106XMLPUBFUN void XMLCALL
107	xmlNanoFTPScanProxy	(const char *URL);
108XMLPUBFUN void XMLCALL
109	xmlNanoFTPProxy		(const char *host,
110				 int port,
111				 const char *user,
112				 const char *passwd,
113				 int type);
114XMLPUBFUN int XMLCALL
115	xmlNanoFTPUpdateURL	(void *ctx,
116				 const char *URL);
117
118/*
119 * Rather internal commands.
120 */
121XMLPUBFUN int XMLCALL
122	xmlNanoFTPGetResponse	(void *ctx);
123XMLPUBFUN int XMLCALL
124	xmlNanoFTPCheckResponse	(void *ctx);
125
126/*
127 * CD/DIR/GET handlers.
128 */
129XMLPUBFUN int XMLCALL
130	xmlNanoFTPCwd		(void *ctx,
131				 const char *directory);
132XMLPUBFUN int XMLCALL
133	xmlNanoFTPDele		(void *ctx,
134				 const char *file);
135
136XMLPUBFUN SOCKET XMLCALL
137	xmlNanoFTPGetConnection	(void *ctx);
138XMLPUBFUN int XMLCALL
139	xmlNanoFTPCloseConnection(void *ctx);
140XMLPUBFUN int XMLCALL
141	xmlNanoFTPList		(void *ctx,
142				 ftpListCallback callback,
143				 void *userData,
144				 const char *filename);
145XMLPUBFUN SOCKET XMLCALL
146	xmlNanoFTPGetSocket	(void *ctx,
147				 const char *filename);
148XMLPUBFUN int XMLCALL
149	xmlNanoFTPGet		(void *ctx,
150				 ftpDataCallback callback,
151				 void *userData,
152				 const char *filename);
153XMLPUBFUN int XMLCALL
154	xmlNanoFTPRead		(void *ctx,
155				 void *dest,
156				 int len);
157
158#ifdef __cplusplus
159}
160#endif
161#endif /* LIBXML_FTP_ENABLED */
162#endif /* __NANO_FTP_H__ */
163