initial commit
This commit is contained in:
commit
9d20827c46
2469 changed files with 470994 additions and 0 deletions
183
iris-legacy/iris/jabber/filetransfer.h
Normal file
183
iris-legacy/iris/jabber/filetransfer.h
Normal file
|
|
@ -0,0 +1,183 @@
|
|||
/*
|
||||
* filetransfer.h - File Transfer
|
||||
* Copyright (C) 2004 Justin Karneges
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef XMPP_FILETRANSFER_H
|
||||
#define XMPP_FILETRANSFER_H
|
||||
|
||||
#include "im.h"
|
||||
|
||||
namespace XMPP
|
||||
{
|
||||
class S5BConnection;
|
||||
struct FTRequest;
|
||||
|
||||
/*class AbstractFileTransfer
|
||||
{
|
||||
public:
|
||||
// Receive
|
||||
virtual Jid peer() const = 0;
|
||||
virtual QString fileName() const = 0;
|
||||
virtual qlonglong fileSize() const = 0;
|
||||
virtual QString description() const { return ""; }
|
||||
virtual bool rangeSupported() const { return false; }
|
||||
virtual void accept(qlonglong offset=0, qlonglong length=0) = 0;
|
||||
};*/
|
||||
|
||||
class FileTransfer : public QObject /*, public AbstractFileTransfer */
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum { ErrReject, ErrNeg, ErrConnect, ErrProxy, ErrStream };
|
||||
enum { Idle, Requesting, Connecting, WaitingForAccept, Active };
|
||||
~FileTransfer();
|
||||
|
||||
FileTransfer *copy() const;
|
||||
|
||||
void setProxy(const Jid &proxy);
|
||||
|
||||
// send
|
||||
void sendFile(const Jid &to, const QString &fname, qlonglong size, const QString &desc);
|
||||
qlonglong offset() const;
|
||||
qlonglong length() const;
|
||||
int dataSizeNeeded() const;
|
||||
void writeFileData(const QByteArray &a);
|
||||
|
||||
// receive
|
||||
Jid peer() const;
|
||||
QString fileName() const;
|
||||
qlonglong fileSize() const;
|
||||
QString description() const;
|
||||
bool rangeSupported() const;
|
||||
void accept(qlonglong offset=0, qlonglong length=0);
|
||||
|
||||
// both
|
||||
void close(); // reject, or stop sending/receiving
|
||||
S5BConnection *s5bConnection() const; // active link
|
||||
|
||||
signals:
|
||||
void accepted(); // indicates S5BConnection has started
|
||||
void connected();
|
||||
void readyRead(const QByteArray &a);
|
||||
void bytesWritten(int);
|
||||
void error(int);
|
||||
|
||||
private slots:
|
||||
void ft_finished();
|
||||
void s5b_connected();
|
||||
void s5b_connectionClosed();
|
||||
void s5b_readyRead();
|
||||
void s5b_bytesWritten(int);
|
||||
void s5b_error(int);
|
||||
void doAccept();
|
||||
|
||||
private:
|
||||
class Private;
|
||||
Private *d;
|
||||
|
||||
void reset();
|
||||
|
||||
friend class FileTransferManager;
|
||||
FileTransfer(FileTransferManager *, QObject *parent=0);
|
||||
FileTransfer(const FileTransfer& other);
|
||||
void man_waitForAccept(const FTRequest &req);
|
||||
void takeConnection(S5BConnection *c);
|
||||
};
|
||||
|
||||
class FileTransferManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
FileTransferManager(Client *);
|
||||
~FileTransferManager();
|
||||
|
||||
bool isActive(const FileTransfer *ft) const;
|
||||
|
||||
Client *client() const;
|
||||
FileTransfer *createTransfer();
|
||||
FileTransfer *takeIncoming();
|
||||
|
||||
signals:
|
||||
void incomingReady();
|
||||
|
||||
private slots:
|
||||
void pft_incoming(const FTRequest &req);
|
||||
|
||||
private:
|
||||
class Private;
|
||||
Private *d;
|
||||
|
||||
friend class Client;
|
||||
void s5b_incomingReady(S5BConnection *);
|
||||
|
||||
friend class FileTransfer;
|
||||
QString link(FileTransfer *);
|
||||
void con_accept(FileTransfer *);
|
||||
void con_reject(FileTransfer *);
|
||||
void unlink(FileTransfer *);
|
||||
};
|
||||
|
||||
class JT_FT : public Task
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
JT_FT(Task *parent);
|
||||
~JT_FT();
|
||||
|
||||
void request(const Jid &to, const QString &id, const QString &fname, qlonglong size, const QString &desc, const QStringList &streamTypes);
|
||||
qlonglong rangeOffset() const;
|
||||
qlonglong rangeLength() const;
|
||||
QString streamType() const;
|
||||
|
||||
void onGo();
|
||||
bool take(const QDomElement &);
|
||||
|
||||
private:
|
||||
class Private;
|
||||
Private *d;
|
||||
};
|
||||
|
||||
struct FTRequest
|
||||
{
|
||||
Jid from;
|
||||
QString iq_id, id;
|
||||
QString fname;
|
||||
qlonglong size;
|
||||
QString desc;
|
||||
bool rangeSupported;
|
||||
QStringList streamTypes;
|
||||
};
|
||||
class JT_PushFT : public Task
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
JT_PushFT(Task *parent);
|
||||
~JT_PushFT();
|
||||
|
||||
void respondSuccess(const Jid &to, const QString &id, qlonglong rangeOffset, qlonglong rangeLength, const QString &streamType);
|
||||
void respondError(const Jid &to, const QString &id, int code, const QString &str);
|
||||
|
||||
bool take(const QDomElement &);
|
||||
|
||||
signals:
|
||||
void incoming(const FTRequest &req);
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in a new issue