You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kasablanca/src/ftplib.h

162 lines
5.8 KiB

/***************************************************************************
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