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 38 extern "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 */ 59 typedef 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 */ 73 typedef void (*ftpDataCallback) (void *userData, 74 const char *data, 75 int len); 76 77 /* 78 * Init 79 */ 80 XMLPUBFUN void XMLCALL 81 xmlNanoFTPInit (void); 82 XMLPUBFUN void XMLCALL 83 xmlNanoFTPCleanup (void); 84 85 /* 86 * Creating/freeing contexts. 87 */ 88 XMLPUBFUN void * XMLCALL 89 xmlNanoFTPNewCtxt (const char *URL); 90 XMLPUBFUN void XMLCALL 91 xmlNanoFTPFreeCtxt (void * ctx); 92 XMLPUBFUN void * XMLCALL 93 xmlNanoFTPConnectTo (const char *server, 94 int port); 95 /* 96 * Opening/closing session connections. 97 */ 98 XMLPUBFUN void * XMLCALL 99 xmlNanoFTPOpen (const char *URL); 100 XMLPUBFUN int XMLCALL 101 xmlNanoFTPConnect (void *ctx); 102 XMLPUBFUN int XMLCALL 103 xmlNanoFTPClose (void *ctx); 104 XMLPUBFUN int XMLCALL 105 xmlNanoFTPQuit (void *ctx); 106 XMLPUBFUN void XMLCALL 107 xmlNanoFTPScanProxy (const char *URL); 108 XMLPUBFUN void XMLCALL 109 xmlNanoFTPProxy (const char *host, 110 int port, 111 const char *user, 112 const char *passwd, 113 int type); 114 XMLPUBFUN int XMLCALL 115 xmlNanoFTPUpdateURL (void *ctx, 116 const char *URL); 117 118 /* 119 * Rather internal commands. 120 */ 121 XMLPUBFUN int XMLCALL 122 xmlNanoFTPGetResponse (void *ctx); 123 XMLPUBFUN int XMLCALL 124 xmlNanoFTPCheckResponse (void *ctx); 125 126 /* 127 * CD/DIR/GET handlers. 128 */ 129 XMLPUBFUN int XMLCALL 130 xmlNanoFTPCwd (void *ctx, 131 const char *directory); 132 XMLPUBFUN int XMLCALL 133 xmlNanoFTPDele (void *ctx, 134 const char *file); 135 136 XMLPUBFUN SOCKET XMLCALL 137 xmlNanoFTPGetConnection (void *ctx); 138 XMLPUBFUN int XMLCALL 139 xmlNanoFTPCloseConnection(void *ctx); 140 XMLPUBFUN int XMLCALL 141 xmlNanoFTPList (void *ctx, 142 ftpListCallback callback, 143 void *userData, 144 const char *filename); 145 XMLPUBFUN SOCKET XMLCALL 146 xmlNanoFTPGetSocket (void *ctx, 147 const char *filename); 148 XMLPUBFUN int XMLCALL 149 xmlNanoFTPGet (void *ctx, 150 ftpDataCallback callback, 151 void *userData, 152 const char *filename); 153 XMLPUBFUN 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