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