Add accessors for the amount of transferred data to Transfer classes
[quassel.git] / src / core / coretransfer.h
index 9d57db3..66028b5 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2013 by the Quassel Project                        *
+ *   Copyright (C) 2005-2015 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
 #ifndef CORETRANSFER_H
 #define CORETRANSFER_H
 
+#include <QPointer>
+
 #include "transfer.h"
+#include "peer.h"
+
+class QTcpSocket;
 
 class CoreTransfer : public Transfer
 {
@@ -31,11 +36,31 @@ class CoreTransfer : public Transfer
 public:
     CoreTransfer(Direction direction, const QString &nick, const QString &fileName, const QHostAddress &address, quint16 port, quint64 size = 0, QObject *parent = 0);
 
+    quint64 transferred() const override;
+
 public slots:
+    void start();
+
     // called through sync calls
-    void requestAccepted(PeerPtr peer);
-    void requestRejected(PeerPtr peer);
+    void requestAccepted(PeerPtr peer) override;
+    void requestRejected(PeerPtr peer) override;
+
+private slots:
+    void startReceiving();
+    void onDataReceived();
+    void onSocketDisconnected();
+    void onSocketError(QAbstractSocket::SocketError error);
+
+private:
+    void setupConnectionForReceive();
+    bool relayData(const QByteArray &data, bool requireChunkSize);
+    void cleanUp() override;
 
+    QPointer<Peer> _peer;
+    QTcpSocket *_socket;
+    quint64 _pos;
+    QByteArray _buffer;
+    bool _reading;
 };
 
 #endif