diff options
Diffstat (limited to 'src/ftplib.h')
-rwxr-xr-x | src/ftplib.h | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/src/ftplib.h b/src/ftplib.h new file mode 100755 index 0000000..78a567f --- /dev/null +++ b/src/ftplib.h @@ -0,0 +1,161 @@ +/*************************************************************************** + ftplib.h - description + ------------------- + begin : Son Jul 27 2003 + copyright : (C) 2003 by mkulke + email : sikor_sxe@radicalapproach.de + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +/* original unmodified copyright notes from Thomas Pfau */ + +/***************************************************************************/ +/* */ +/* ftplib.c - callable ftp access routines */ +/* Copyright (C) 1996, 1997, 1998 Thomas Pfau, pfau@cnj.digex.net */ +/* 73 Catherine Street, South Bound Brook, NJ, 08880 */ +/* */ +/* This library is free software; you can redistribute it and/or */ +/* modify it under the terms of the GNU Library General Public */ +/* License as published by the Free Software Foundation; either */ +/* version 2 of the License, or (at your option) any later version. */ +/* */ +/* This library is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU */ +/* Library General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU Library General Public */ +/* License along with this progam; if not, write to the */ +/* Free Software Foundation, Inc., 59 Temple Place - Suite 330, */ +/* Boston, MA 02111-1307, USA. */ +/* */ +/***************************************************************************/ + +#ifndef FTPLIB_H +#define FTPLIB_H + +/* FtpAccess() type codes */ +#define FTPLIB_DIR 1 +#define FTPLIB_DIR_VERBOSE 2 +#define FTPLIB_FILE_READ 3 +#define FTPLIB_FILE_WRITE 4 +#define FTPLIB_FILE_READ_APPEND 5 +#define FTPLIB_FILE_WRITE_APPEND 6 +#define FTPLIB_ASCII 'A' +#define FTPLIB_IMAGE 'I' + +#include <sys/time.h> +#include <openssl/ssl.h> + +using namespace std; + +/** + *@author mkulke + */ + +typedef int (*FtpCallbackXfer)(off64_t xfered, void *arg); +typedef int (*FtpCallbackIdle)(void *arg); +typedef void (*FtpCallbackLog)(char *str, void* arg, bool out); + +struct netbuf { + char *cput,*cget; + int handle; + int cavail,cleft; + char *buf; + int dir; + netbuf *ctrl; + int cmode; + int tlsctrl; + int tlsdata; + struct timeval idletime; + FtpCallbackXfer xfercb; + FtpCallbackIdle idlecb; + FtpCallbackLog logcb; + void *cbarg; + off64_t xfered; + off64_t cbbytes; + off64_t xfered1; + char response[256]; + SSL* ssl; + SSL_CTX* ctx; + BIO* sbio; + off64_t offset; + bool correctpasv; +}; + +class ftplib { +public: + enum ftp + { + pasv = 1, + port = 2, + defaultconnmode = 1, + ascii = 'A', + image = 'I', + unencrypted = 0, + secure = 1, + defaultfxp = 0, + alternativefxp = 1 + }; + ftplib(); + ~ftplib(); + char* LastResponse(); + int Connect(const char *host); + int Login(const char *user, const char *pass); + int Site(const char *cmd); + int Raw(const char *cmd); + int SysType(char *buf, int max); + int Mkdir(const char *path); + int Chdir(const char *path); + int Cdup(); + int Rmdir(const char *path); + int Pwd(char *path, int max); + int Nlst(const char *outputfile, const char *path); + int Dir(const char *outputfile, const char *path); + int Size(const char *path, int *size, ftplib::ftp mode); + int ModDate(const char *path, char *dt, int max); + int Get(const char *outputfile, const char *path, ftplib::ftp mode, off64_t offset = 0); + int Put(const char *inputfile, const char *path, ftplib::ftp mode, off64_t offset= 0); + int Rename(const char *src, const char *dst); + int Delete(const char *fnm); + int SetDataEncryption(ftplib::ftp flag); + int NegotiateEncryption(); + int Quit(); + void SetCallbackIdleFunction(FtpCallbackIdle pointer); + void SetCallbackLogFunction(FtpCallbackLog pointer); + void SetCallbackXferFunction(FtpCallbackXfer pointer); + void SetCallbackArg(void *arg); + void SetCallbackBytes(off64_t bytes); + void SetCorrectPasv(bool b) { mp_netbuf->correctpasv = b; }; + void SetCallbackIdletime(int time); + void SetConnmode(ftplib::ftp mode); + static int Fxp(ftplib* src, ftplib* dst, const char *pathSrc, const char *pathDst, ftplib::ftp mode, ftplib::ftp method); + netbuf* mp_netbuf; + int FtpRead(void *buf, int max, netbuf *nData); + int FtpWrite(void *buf, int len, netbuf *nData); + int FtpAccess(const char *path, int typ, int mode, netbuf *nControl, netbuf **nData); + int FtpClose(netbuf *nData); +private: + int FtpXfer(const char *localfile, const char *path, netbuf *nControl, int typ, int mode); + int FtpOpenPasv(netbuf *nControl, netbuf **nData, int mode, int dir, char *cmd); + int FtpSendCmd(const char *cmd, char expresp, netbuf *nControl); + int FtpAcceptConnection(netbuf *nData, netbuf *nControl); + int FtpOpenPort(netbuf *nControl, netbuf **nData, int mode, int dir, char *cmd); + int socket_wait(netbuf *ctl); + int readline(char *buf,int max,netbuf *ctl); + int writeline(char *buf, int len, netbuf *nData); + int readresp(char c, netbuf *nControl); + void ClearNetbuf(); + int CorrectPasvResponse(unsigned char *v); +}; + +#endif |