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