/***************************************************************************
- * Copyright (C) 2005-2013 by the Quassel Project *
+ * Copyright (C) 2005-2020 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#ifndef CORETRANSFER_H
-#define CORETRANSFER_H
+#pragma once
+#include <QPointer>
+
+#include "peer.h"
#include "transfer.h"
+class QTcpSocket;
+
class CoreTransfer : public Transfer
{
Q_OBJECT
- SYNCABLE_OBJECT
public:
- CoreTransfer(Direction direction, const QString &nick, const QString &fileName, const QHostAddress &address, quint16 port, quint64 size = 0, QObject *parent = 0);
+ CoreTransfer(Direction direction,
+ const QString& nick,
+ const QString& fileName,
+ const QHostAddress& address,
+ quint16 port,
+ quint64 size = 0,
+ QObject* parent = nullptr);
+
+ 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;
-#endif
+ QPointer<Peer> _peer;
+ QTcpSocket* _socket;
+ quint64 _pos;
+ QByteArray _buffer;
+ bool _reading;
+};