diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-07-19 12:44:24 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-07-19 12:44:24 +0000 |
| commit | 368037c7a1d077da4cb828e7cf5671d92e4eda02 (patch) | |
| tree | b767f813feb9817f97efd514a2aba76cafd1d433 /example | |
| parent | 046f9b04abdf3e2315744a7e548c6c860eecd07e (diff) | |
| download | qxmpp-368037c7a1d077da4cb828e7cf5671d92e4eda02.tar.gz | |
merge ibbTransferTarget code
Diffstat (limited to 'example')
| -rw-r--r-- | example/example_3_ibbTransferSource/ibbClient.cpp | 57 | ||||
| -rw-r--r-- | example/example_3_ibbTransferSource/ibbClient.h | 10 | ||||
| -rw-r--r-- | example/example_3_ibbTransferSource/main.cpp | 15 |
3 files changed, 74 insertions, 8 deletions
diff --git a/example/example_3_ibbTransferSource/ibbClient.cpp b/example/example_3_ibbTransferSource/ibbClient.cpp index 3db6973a..cfd78a42 100644 --- a/example/example_3_ibbTransferSource/ibbClient.cpp +++ b/example/example_3_ibbTransferSource/ibbClient.cpp @@ -22,7 +22,7 @@ * */ - +#include <QBuffer> #include <QDebug> #include "QXmppMessage.h" @@ -33,16 +33,36 @@ ibbClient::ibbClient(QObject *parent) : QXmppClient(parent) { - bool check = connect( this, SIGNAL(connected()), - this, SLOT(slotConnected()) ); + bool check = connect(this, SIGNAL(connected()), + this, SLOT(slotConnected()) ); + Q_ASSERT(check); + + check = connect(&transferManager(), SIGNAL(fileReceived(QXmppTransferJob*)), + this, SLOT(slotFileReceived(QXmppTransferJob*))); Q_ASSERT(check); - Q_UNUSED(check); +} + +/// Request that the given file be sent to the recipient once he/she is online. +/// +/// \param recipient +/// \param file + +void ibbClient::sendOnceAvailable(const QString &recipient, const QString &file) +{ + m_sendRecipient = recipient; + m_sendFile = file; } void ibbClient::slotConnected() { + const QLatin1String recipient("client@geiseri.com/QXmpp"); + + // if we are the recipient, do nothing + if (getConfiguration().jid() == recipient) + return; + transferManager().setSupportedMethods(QXmppTransferJob::InBandMethod); - QXmppTransferJob *job = transferManager().sendFile( "client@geiseri.com/QXmpp", "ibbClient.cpp" ); + QXmppTransferJob *job = transferManager().sendFile(recipient, "ibbClient.cpp"); bool check = connect( job, SIGNAL(error(QXmppTransferJob::Error)), this, SLOT(slotError(QXmppTransferJob::Error)) ); @@ -57,16 +77,43 @@ void ibbClient::slotConnected() Q_ASSERT(check); } +/// A file transfer failed. + void ibbClient::slotError(QXmppTransferJob::Error error) { qDebug() << "Transmission failed:" << error; } +/// A file transfer request was received. + +void ibbClient::slotFileReceived(QXmppTransferJob *job) +{ + qDebug() << "Got transfer request from:" << job->jid(); + + bool check = connect(job, SIGNAL(error(QXmppTransferJob::Error)), this, SLOT(slotError(QXmppTransferJob::Error))); + Q_ASSERT(check); + + check = connect(job, SIGNAL(finished()), this, SLOT(slotFinished())); + Q_ASSERT(check); + + check = connect(job, SIGNAL(progress(qint64,qint64)), this, SLOT(slotProgress(qint64,qint64))); + Q_ASSERT(check); + + // allocate a buffer to receive the file + QBuffer *buffer = new QBuffer(this); + buffer->open(QIODevice::WriteOnly); + job->accept(buffer); +} + +/// A file transfer finished. + void ibbClient::slotFinished() { qDebug() << "Transmission finished"; } +/// A file transfer has made progress. + void ibbClient::slotProgress(qint64 done, qint64 total) { qDebug() << "Transmission progress:" << done << "/" << total; diff --git a/example/example_3_ibbTransferSource/ibbClient.h b/example/example_3_ibbTransferSource/ibbClient.h index 46977a4d..5589aa6b 100644 --- a/example/example_3_ibbTransferSource/ibbClient.h +++ b/example/example_3_ibbTransferSource/ibbClient.h @@ -28,18 +28,26 @@ #include "QXmppClient.h" #include "QXmppTransferManager.h" +class QBuffer; + class ibbClient : public QXmppClient { Q_OBJECT public: ibbClient(QObject *parent = 0); + void sendOnceAvailable(const QString &recipient, const QString &file); -public slots: +private slots: void slotConnected(); void slotError(QXmppTransferJob::Error error); + void slotFileReceived(QXmppTransferJob *job); void slotFinished(); void slotProgress(qint64 done, qint64 total); + +private: + QString m_sendFile; + QString m_sendRecipient; }; #endif // IBBCLIENT_H diff --git a/example/example_3_ibbTransferSource/main.cpp b/example/example_3_ibbTransferSource/main.cpp index 3d176712..17dc7d10 100644 --- a/example/example_3_ibbTransferSource/main.cpp +++ b/example/example_3_ibbTransferSource/main.cpp @@ -21,10 +21,13 @@ * */ +#include <cstdlib> +#include <cstdio> #include <QtCore/QCoreApplication> -#include "ibbClient.h" + #include "QXmppLogger.h" +#include "ibbClient.h" int main(int argc, char *argv[]) { @@ -32,8 +35,16 @@ int main(int argc, char *argv[]) QXmppLogger::getLogger()->setLoggingType(QXmppLogger::StdoutLogging); + // we want one argument : "send" or "receive" + if (argc != 2 || (strcmp(argv[1], "send") && strcmp(argv[1], "receive"))) + { + fprintf(stderr, "Usage: ibbClient send|receive\n"); + return EXIT_FAILURE; + } + const QString username = strcmp(argv[1], "send") ? QLatin1String("client") : QLatin1String("server"); + ibbClient client; client.getConfiguration().setUseSASLAuthentication( false ); - client.connectToServer("jabber.geiseri.com", "server", "Passw0rd", "geiseri.com"); + client.connectToServer("jabber.geiseri.com", username, "Passw0rd", "geiseri.com"); return a.exec(); } |
