aboutsummaryrefslogtreecommitdiff
path: root/source/QXmppIbbTransferJob.h
blob: 2c14c03d83e71e201fab22ab56d706cc9d8b560d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#ifndef QXMPPIBBTRANSFERJOB_H
#define QXMPPIBBTRANSFERJOB_H

#include <QObject>
class QIODevice;
class QXmppIbbOpenIq;
class QXmppIbbCloseIq;
class QXmppIbbErrorIq;
class QXmppDataIq;
class QXmppClient;

class QXmppIbbTransferJob : public QObject
{
    Q_OBJECT
public:

    QXmppIbbTransferJob(QXmppClient *parent = 0);
    ~QXmppIbbTransferJob();
    QString getSid() const;
    void setSid( const QString &sid );
    QString getRemoteJid( ) const;
    void setRemoteJid( const QString &jid );
    QString getId() const;
    void setId( const QString &id );

// Used by the client
public slots:
    void requestTransfer( );
    void acceptTransfer( );
    void cancelTransfer( );

signals:
    void transferRequested( const QString &sid,  const QString &remoteJid );
    void transferStarted( const QString &sid );
    void transferFinished( const QString &sid, const QString &reason);
    void transferCanceled( const QString &sid, const QString &reason );
    void readyForTeardown( const QString &sid );

public:
    void setIoDevice( QIODevice *io );
    void setBlockSize( long size);

    // Used by the stream.
    void gotAck();
    void gotOpen( const QXmppIbbOpenIq &open );
    void gotClose( const QXmppIbbCloseIq &close );
    void gotError( const QXmppIbbErrorIq &err );
    void gotData( const  QXmppDataIq &data );

private:
    enum TransferState { Idle, Requesting, Pending, TransferringIn, TransferringOut };
    void sendNextBlock();

    QXmppClient *m_client;
    QIODevice *m_io;
    long m_blockSize;
    qint64 m_streamBlockSize;
    quint16 m_sequence;
    QString m_sid;
    QString m_id;
    QString m_localJid;
    QString m_remoteJid;
    TransferState m_state;
};

#endif // QXMPPIBBTRANSFERJOB_H