summaryrefslogtreecommitdiffstats
path: root/src/ftplib.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ftplib.h')
-rwxr-xr-xsrc/ftplib.h161
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