aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/objects/class_ftp.cpp
diff options
context:
space:
mode:
authorGravatar Noldor2008-09-12 14:27:09 +0000
committerGravatar Noldor2008-09-12 14:27:09 +0000
commit0012f2217579f97bb20c6371be8a7921a2119a04 (patch)
treef375c2a315776f79c663a8192029eee35c567af2 /src/modules/objects/class_ftp.cpp
parentfixed subversion message (diff)
downloadKVIrc-0012f2217579f97bb20c6371be8a7921a2119a04.tar.gz
KVIrc-0012f2217579f97bb20c6371be8a7921a2119a04.tar.bz2
KVIrc-0012f2217579f97bb20c6371be8a7921a2119a04.zip
QT4 new stuff and ftp/http(wip) new classes (lack of docs :\)
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@2441 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/objects/class_ftp.cpp')
-rw-r--r--src/modules/objects/class_ftp.cpp242
1 files changed, 242 insertions, 0 deletions
diff --git a/src/modules/objects/class_ftp.cpp b/src/modules/objects/class_ftp.cpp
new file mode 100644
index 000000000..d42178cef
--- /dev/null
+++ b/src/modules/objects/class_ftp.cpp
@@ -0,0 +1,242 @@
+//
+// File : class_ftp.cpp
+// Creation date : Mon Sep 1 08:13:45 2008 GMT by Carbone Alesssandro
+//
+// This file is part of the KVirc irc client distribution
+// Copyright (C) 2001 Szymon Stefanek (pragma at kvirc dot net)
+//
+// 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 opinion) any later version.
+//
+// This program 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+
+#include "kvi_debug.h"
+#include "kvi_error.h"
+#include "class_ftp.h"
+#include <QFtp>
+
+
+
+/*
+ @doc: ftp
+ @keyterms:
+ ftp object class
+ @title:
+ ftp class
+ @type:
+ class
+ @short:
+ An implementation of the client side of FTP protocol.
+ @inherits:
+ [class]object[/class]
+ @description:
+ This class provides a standard FTP functionality.[br]
+ @functions:
+ !fn: $dataAvailableEvent(<data_length>)
+ This function is called when some data is available to be read: the <data_length> parameter specifies
+ the length of the available data in bytes.[br]
+ You can use one of the $read* functions to obtain the data.
+
+ !fn: $connect(<host:string>,<remote_port:integer>)
+ Connects to the FTP server host using port port.The command is scheduled, and its execution is performed asynchronously.
+ The function returns a unique identifier which is passed by commandStarted() and commandFinished().[br]
+ !fn: $abort()
+ !fn: $login
+ !fn: $get
+ !fn: $cd
+ !fn: $list
+ !fn:
+ */
+
+KVSO_BEGIN_REGISTERCLASS(KviKvsObject_ftp,"ftp","object")
+ KVSO_REGISTER_HANDLER(KviKvsObject_ftp,"connect",functionConnect)
+ KVSO_REGISTER_HANDLER(KviKvsObject_ftp,"abort",functionAbort)
+ KVSO_REGISTER_HANDLER(KviKvsObject_ftp,"login",functionLogin)
+ KVSO_REGISTER_HANDLER(KviKvsObject_ftp,"get",functionGet)
+ KVSO_REGISTER_HANDLER(KviKvsObject_ftp,"cd",functionCd)
+ KVSO_REGISTER_HANDLER(KviKvsObject_ftp,"list",functionList)
+ KVSO_REGISTER_HANDLER(KviKvsObject_ftp,"commandFinishedEvent",function_commandFinishedEvent)
+ KVSO_REGISTER_HANDLER(KviKvsObject_ftp,"listInfoEvent",function_listInfoEvent)
+ KVSO_REGISTER_HANDLER(KviKvsObject_ftp,"dataTransferProgressEvent",function_dataTransferProgressEvent)
+KVSO_END_REGISTERCLASS(KviKvsObject_ftp)
+
+
+KVSO_BEGIN_CONSTRUCTOR(KviKvsObject_ftp,KviKvsObject)
+ m_pFtp = new QFtp();
+ m_pFile=0;
+ connect(m_pFtp,SIGNAL(commandFinished(int,bool)),this,SLOT(slotCommandFinished(int,bool)));
+ connect(m_pFtp,SIGNAL(commandStarted(int)),this,SLOT(slotCommandStarted(int)));
+ connect(m_pFtp,SIGNAL(dataTransferProgress(qint64,qint64)),this,SLOT(slotDataTransferProgress(qint64,qint64)));
+ connect(m_pFtp,SIGNAL(done(bool)),this,SLOT(slotDone(bool)));
+ connect(m_pFtp,SIGNAL(listInfo(const QUrlInfo)),this,SLOT(slotListInfo(const QUrlInfo)));
+ connect(m_pFtp,SIGNAL(rawCommandReply(int,QString)),this,SLOT(slotRawCommandReplay(int,QString)));
+ connect(m_pFtp,SIGNAL(readyRead()),this,SLOT(slotReadyRead()));
+ connect(m_pFtp,SIGNAL(stateChanged(int)),this,SLOT(slotStateChanged(int)));
+KVSO_END_CONSTRUCTOR(KviKvsObject_ftp)
+
+KVSO_BEGIN_DESTRUCTOR(KviKvsObject_ftp)
+ if (m_pFile) delete m_pFile;
+KVSO_END_DESTRUCTOR(KviKvsObject_ftp)
+//----------------------
+
+
+
+
+
+bool KviKvsObject_ftp::functionConnect(KviKvsObjectFunctionCall *c)
+{
+ QString szHost;
+ kvs_uint_t uRemotePort;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("host",KVS_PT_STRING,0,szHost)
+ KVSO_PARAMETER("remote_port",KVS_PT_UNSIGNEDINTEGER,KVS_PF_OPTIONAL,uRemotePort)
+ KVSO_PARAMETERS_END(c)
+ if (!uRemotePort) uRemotePort=21;
+ kvs_uint_t id=0;
+ if (m_pFtp) id=m_pFtp->connectToHost(szHost, uRemotePort);
+ c->returnValue()->setInteger(id);
+ return true;
+}
+bool KviKvsObject_ftp::functionLogin(KviKvsObjectFunctionCall *c)
+{
+ QString szUser,szPass;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("user",KVS_PT_STRING,0,szUser)
+ KVSO_PARAMETER("password",KVS_PT_STRING,0,szPass)
+ KVSO_PARAMETERS_END(c)
+ int id=0;
+ if (m_pFtp) id=m_pFtp->login(szUser, szPass);
+ c->returnValue()->setInteger(id);
+ return true;
+}
+bool KviKvsObject_ftp::functionGet(KviKvsObjectFunctionCall *c)
+{
+ QString szFile,szDest;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("remote_filename",KVS_PT_STRING,0,szFile)
+ KVSO_PARAMETER("local_filename",KVS_PT_STRING,0,szDest)
+ KVSO_PARAMETERS_END(c)
+ m_pFile=new QFile(szDest);
+ m_pFile->open(QIODevice::WriteOnly);
+ int id=0;
+ if (m_pFtp) id=m_pFtp->get(szFile,m_pFile);
+ c->returnValue()->setInteger(id);
+ return true;
+}
+bool KviKvsObject_ftp::functionCd(KviKvsObjectFunctionCall *c)
+{
+ QString szPath;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("remote_filename",KVS_PT_STRING,0,szPath)
+ KVSO_PARAMETERS_END(c)
+ int id=0;
+ if (m_pFtp) id=m_pFtp->cd(szPath);
+ c->returnValue()->setInteger(id);
+ return true;
+}
+bool KviKvsObject_ftp::functionList(KviKvsObjectFunctionCall *c)
+{
+ QString szPath;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("remote_dir",KVS_PT_STRING,0,szPath)
+ KVSO_PARAMETERS_END(c)
+ int id=0;
+ if (m_pFtp) id=m_pFtp->list(szPath);
+ c->returnValue()->setInteger(id);
+ return true;
+}
+bool KviKvsObject_ftp::functionAbort(KviKvsObjectFunctionCall *c)
+{
+ if (m_pFtp) m_pFtp->abort();
+ return true;
+}
+//signals & slots
+bool KviKvsObject_ftp::function_commandFinishedEvent(KviKvsObjectFunctionCall *c)
+{
+ emitSignal("commandFinished",c,c->params());
+ return true;
+}
+
+void KviKvsObject_ftp::slotCommandFinished ( int id, bool error )
+{
+ QString status="";
+ if (m_pFtp->currentCommand()==QFtp::Get){
+ status="Finished to load";
+ m_pFile->close();
+ delete m_pFile;
+ }
+ else if (m_pFtp->currentCommand()==QFtp:: ConnectToHost) status="connected";
+ else if (m_pFtp->currentCommand()==QFtp:: Login) status="logged";
+ else if (m_pFtp->currentCommand()==QFtp:: Cd) status="entered";
+ else if (m_pFtp->currentCommand()==QFtp:: List) status="listCompleted";
+ callFunction(this,"commandFinishedEvent",0,new KviKvsVariantList(new KviKvsVariant((kvs_int_t) id),
+ new KviKvsVariant(status),new KviKvsVariant(error)));
+}
+
+void KviKvsObject_ftp::slotCommandStarted ( int id )
+{
+}
+
+void KviKvsObject_ftp::slotDataTransferProgress ( qint64 done, qint64 total )
+{
+ callFunction(this,"dataTransferProgressEvent",0,new KviKvsVariantList(
+ new KviKvsVariant(done),new KviKvsVariant(total)));
+}
+bool KviKvsObject_ftp::function_dataTransferProgressEvent(KviKvsObjectFunctionCall *c)
+{
+ emitSignal("dataTransferProgress",c,c->params());
+ return true;
+}
+void KviKvsObject_ftp::slotDone ( bool error )
+{
+}
+
+void KviKvsObject_ftp::slotListInfo ( const QUrlInfo & i )
+{
+ callFunction(this,"listInfoEvent",0,new KviKvsVariantList(
+ new KviKvsVariant(i.name())));
+
+}
+bool KviKvsObject_ftp::function_listInfoEvent(KviKvsObjectFunctionCall *c)
+{
+ emitSignal("listInfo",c,c->params());
+ return true;
+}
+void KviKvsObject_ftp::slotRawCommandReply ( int replyCode, const QString & detail )
+{
+}
+
+void KviKvsObject_ftp::slotReadyRead ()
+{
+}
+
+void KviKvsObject_ftp::slotStateChanged ( int state)
+{
+ QString szState="";
+ if (state==QFtp::Unconnected) szState="Unconnected";
+ else if (state==QFtp::HostLookup) szState="HostLookup";
+ else if (state==QFtp::Connecting) szState="Connecting";
+ else if (state==QFtp::Connected) szState="Connected";
+ else if (state==QFtp::LoggedIn) szState="LoggedIn";
+ else if (state==QFtp::Closing) szState="Closing";
+ callFunction(this,"stateChangedEvent",0,new KviKvsVariantList(
+ new KviKvsVariant(szState)));
+}
+bool KviKvsObject_ftp::function_stateChangedEvent(KviKvsObjectFunctionCall *c)
+{
+ emitSignal("stateChanged",c,c->params());
+ return true;
+}
+#ifndef COMPILE_USE_STANDALONE_MOC_SOURCES
+#include "m_class_ftp.moc"
+#endif //!COMPILE_USE_STANDALONE_MOC_SOURCES