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