KVIrc 5.2.6
Developer APIs
DccFileTransfer.h
Go to the documentation of this file.
1#ifndef _SEND_H_
2#define _SEND_H_
3//=============================================================================
4//
5// File : DccFileTransfer.h
6// Creation date : Tue Sep 24 09 2000 15:06:12 by Szymon Stefanek
7//
8// This file is part of the KVIrc IRC client distribution
9// Copyright (C) 2000-2010 Szymon Stefanek (pragma at kvirc dot net)
10//
11// This program is FREE software. You can redistribute it and/or
12// modify it under the terms of the GNU General Public License
13// as published by the Free Software Foundation; either version 2
14// of the License, or (at your option) any later version.
15//
16// This program is distributed in the HOPE that it will be USEFUL,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19// See the GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program. If not, write to the Free Software Foundation,
23// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24//
25//=============================================================================
26
27#include "DccDescriptor.h"
28#include "DccWindow.h"
29#include "DccThread.h"
30
31#include "KviWindow.h"
32#include "KviCString.h"
33#include "kvi_sockettype.h"
34#include "KviPointerList.h"
35#include "KviFileTransfer.h"
36#include "KviTimeUtils.h"
37#include "KviTalHBox.h"
38#include "KviTalVBox.h"
39
40#include <QLabel>
41#include <QProgressBar>
42#include <QFile>
43#include <QDialog>
44#include <QCheckBox>
45#include <QMenu>
46
47class QSpinBox;
48class QTimer;
49class QPainter;
50class DccFileTransfer;
51class DccMarshal;
52class QMenu;
53
65
67{
68public:
69 DccSendThread(QObject * par, kvi_socket_t fd, KviDccSendThreadOptions * opt);
71
72private:
73 // stats: SHARED!!!
77 quint64 m_uAckedBytes = 0;
78 quint64 m_uTotalSentBytes = 0;
79 // internal
80 unsigned long m_uStartTime;
84 KviMSecTimeInterval * m_pTimeInterval; // used for computing the instant bandwidth but not only
85public:
86 void initGetInfo();
87 uint averageSpeed() { return m_uAverageSpeed; };
88 uint instantSpeed() { return m_uInstantSpeed; };
89 quint64 filePosition() { return m_uFilePosition; };
90 // sent ONLY in this session
91 quint64 sentBytes() { return m_uTotalSentBytes; };
92 quint64 ackedBytes() { return m_uAckedBytes; };
93 unsigned int bandwidthLimit() { return m_pOpt->uMaxBandwidth; };
94 void setBandwidthLimit(unsigned int uMaxBandwidth) { m_pOpt->uMaxBandwidth = uMaxBandwidth; };
95 void doneGetInfo();
96
97protected:
98 void updateStats();
99 virtual void run();
100};
101
114
116{
117public:
118 DccRecvThread(QObject * par, kvi_socket_t fd, KviDccRecvThreadOptions * opt);
120
121protected:
123
124 // stats: SHARED!
129
130 // internal
131 unsigned long m_uStartTime;
132 KviMSecTimeInterval * m_pTimeInterval; // used for computing the instant bandwidth
135 QFile * m_pFile;
136
137public:
138 void initGetInfo();
139 uint averageSpeed() { return m_uAverageSpeed; };
140 uint instantSpeed() { return m_uInstantSpeed; };
141 quint64 filePosition() { return m_uFilePosition; };
142 // received ONLY in this session
144 unsigned int bandwidthLimit() { return m_pOpt->uMaxBandwidth; };
145 void setBandwidthLimit(unsigned int uMaxBandwidth) { m_pOpt->uMaxBandwidth = uMaxBandwidth; };
146 void doneGetInfo();
147
148protected:
149 void postMessageEvent(const char * msg);
150 void updateStats();
151 bool sendAck(qint64 filePos, bool bUse64BitAck = false);
152 virtual void run();
153};
154
155class DccFileTransferBandwidthDialog : public QDialog
156{
157 Q_OBJECT
158public:
161
162protected:
165 QSpinBox * m_pLimitBox;
166
167protected:
168 void closeEvent(QCloseEvent * e) override;
169protected slots:
170 void okClicked();
171 void cancelClicked();
172};
173
175{
183 Q_OBJECT
184public:
187
188private:
193
197
200
201 QString m_szTransferLog; // html
202
205 // cached stats
206 quint64 m_uTotalFileSize; // total file size to transfer
207
208 unsigned int m_uMaxBandwidth;
210
211 QTimer * m_pResumeTimer; // used to signal resume timeout
212public:
213 bool resumeAccepted(const char * filename, const char * port, const char * szZeroPortTag);
214 bool doResume(const char * filename, const char * port, quint64 filePos);
215
216 static void init();
217 static void done();
218 static unsigned int runningTransfersCount();
219 static DccFileTransfer * nonFailedTransferWithLocalFileName(const QString & szLocalFileName);
220 static unsigned int transferCount();
221 static bool handleResumeAccepted(const char * filename, const char * port, const char * szZeroPortTag);
222 static bool handleResumeRequest(const char * filename, const char * port, quint64 filePos);
223
224 bool event(QEvent * e) override;
225
227 const char * dccMarshalOutputContextString() override;
228
229 void displayPaint(QPainter * p, int column, QRect rect) override;
230 int displayHeight(int iLineSpacing) override;
231 void fillContextPopup(QMenu * m) override;
232 virtual void fillStatusString(QString & szBuffer);
233 bool active() override;
234 QString tipText() override;
235 QString localFileName() override;
236
238
239 unsigned int averageSpeed();
240 unsigned int instantSpeed();
241 unsigned int transferredBytes();
242
243 int bandwidthLimit();
244 void setBandwidthLimit(int iVal);
245 virtual DccThread * getSlaveThread();
246
247protected:
248 void startConnection();
249 void listenOrConnect();
250 void addToTransferLog(const QString & s);
251 void outputAndLog(const QString & s);
252 void outputAndLog(int msgtype, const QString & s);
254protected slots:
256 void sslError(const char * msg);
259 void connected();
261 void configureBandwidth();
262 void resumeTimedOut();
263public slots:
264 void abort();
265 void retryDCC();
266 void retryTDCC();
267 void retryRevDCC();
268};
269
270#endif //_SEND_H_
C++ Template based double linked pointer list class.
Class for horizontal box.
Class for vertical box.
Time management.
#define kvi_time_t
Definition KviTimeUtils.h:43
Contains the KviWindow class.
Definition DccDescriptor.h:34
bool isFileUpload()
Definition DccDescriptor.cpp:200
Definition DccFileTransfer.h:156
DccFileTransferBandwidthDialog(QWidget *pParent, DccFileTransfer *t)
Definition DccFileTransfer.cpp:2443
void okClicked()
Definition DccFileTransfer.cpp:2492
void cancelClicked()
Definition DccFileTransfer.cpp:2507
QSpinBox * m_pLimitBox
Definition DccFileTransfer.h:165
void closeEvent(QCloseEvent *e) override
Definition DccFileTransfer.cpp:2512
DccFileTransfer * m_pTransfer
Definition DccFileTransfer.h:163
QCheckBox * m_pEnableLimitCheck
Definition DccFileTransfer.h:164
Definition DccFileTransfer.h:175
static bool handleResumeAccepted(const char *filename, const char *port, const char *szZeroPortTag)
Definition DccFileTransfer.cpp:1965
void sslError(const char *msg)
Definition DccFileTransfer.cpp:2147
void addToTransferLog(const QString &s)
Definition DccFileTransfer.cpp:2009
kvi_time_t m_tTransferEndTime
Definition DccFileTransfer.h:204
DccFileTransfer(DccDescriptor *dcc)
Definition DccFileTransfer.cpp:1181
QString m_szStatusString
Definition DccFileTransfer.h:198
KviWindow * dccMarshalOutputWindow() override
Definition DccFileTransfer.cpp:1374
void handleMarshalError(KviError::Code)
Definition DccFileTransfer.cpp:2239
void retryDCC()
Definition DccFileTransfer.cpp:1443
QTimer * m_pResumeTimer
Definition DccFileTransfer.h:211
void fillContextPopup(QMenu *m) override
Definition DccFileTransfer.cpp:1421
DccRecvThread * m_pSlaveRecvThread
Definition DccFileTransfer.h:190
GeneralStatus
Definition DccFileTransfer.h:177
@ Success
Definition DccFileTransfer.h:180
@ Failure
Definition DccFileTransfer.h:181
@ Connecting
Definition DccFileTransfer.h:178
@ Transferring
Definition DccFileTransfer.h:179
quint64 m_uTotalFileSize
Definition DccFileTransfer.h:206
static void init()
Definition DccFileTransfer.cpp:1898
unsigned int m_uMaxBandwidth
Definition DccFileTransfer.h:208
static void done()
Definition DccFileTransfer.cpp:1912
void bandwidthDialogDestroyed()
Definition DccFileTransfer.cpp:1263
void listenOrConnect()
Definition DccFileTransfer.cpp:1338
unsigned int averageSpeed()
Definition DccFileTransfer.cpp:1564
static unsigned int transferCount()
Definition DccFileTransfer.cpp:1925
kvi_time_t m_tTransferStartTime
Definition DccFileTransfer.h:203
bool event(QEvent *e) override
Definition DccFileTransfer.cpp:2154
int displayHeight(int iLineSpacing) override
Definition DccFileTransfer.cpp:1875
void setBandwidthLimit(int iVal)
Definition DccFileTransfer.cpp:1537
void connected()
Definition DccFileTransfer.cpp:2250
void startingSSLHandshake()
Definition DccFileTransfer.cpp:2139
KviWindow * eventWindow()
Definition DccFileTransfer.cpp:1268
DccFileTransferBandwidthDialog * m_pBandwidthDialog
Definition DccFileTransfer.h:209
void retryTDCC()
Definition DccFileTransfer.cpp:1456
virtual void fillStatusString(QString &szBuffer)
Definition DccFileTransfer.cpp:1482
DccMarshal * m_pMarshal
Definition DccFileTransfer.h:192
~DccFileTransfer()
Definition DccFileTransfer.cpp:1234
void connectionInProgress()
Definition DccFileTransfer.cpp:2018
void outputAndLog(const QString &s)
Definition DccFileTransfer.cpp:1993
unsigned int transferredBytes()
Definition DccFileTransfer.cpp:1612
void retryRevDCC()
Definition DccFileTransfer.cpp:1469
bool active() override
Definition DccFileTransfer.cpp:1504
void configureBandwidth()
Definition DccFileTransfer.cpp:1433
void displayPaint(QPainter *p, int column, QRect rect) override
Definition DccFileTransfer.cpp:1636
virtual DccThread * getSlaveThread()
Definition DccFileTransfer.cpp:2431
static DccFileTransfer * nonFailedTransferWithLocalFileName(const QString &szLocalFileName)
Definition DccFileTransfer.cpp:1932
void abort()
Definition DccFileTransfer.cpp:1389
unsigned int instantSpeed()
Definition DccFileTransfer.cpp:1588
int bandwidthLimit()
Definition DccFileTransfer.cpp:1509
void resumeTimedOut()
Definition DccFileTransfer.cpp:1364
QString m_szTransferLog
Definition DccFileTransfer.h:201
GeneralStatus m_eGeneralStatus
Definition DccFileTransfer.h:199
QString tipText() override
Definition DccFileTransfer.cpp:1881
void startConnection()
Definition DccFileTransfer.cpp:1276
KviCString m_szDccType
Definition DccFileTransfer.h:195
bool resumeAccepted(const char *filename, const char *port, const char *szZeroPortTag)
Definition DccFileTransfer.cpp:2326
static bool handleResumeRequest(const char *filename, const char *port, quint64 filePos)
Definition DccFileTransfer.cpp:1979
bool isFileUpload()
Definition DccFileTransfer.h:237
QString m_szTransferIdString
Definition DccFileTransfer.h:196
static unsigned int runningTransfersCount()
Definition DccFileTransfer.cpp:1952
QString localFileName() override
Definition DccFileTransfer.cpp:1384
DccSendThread * m_pSlaveSendThread
Definition DccFileTransfer.h:189
KviCString m_szTarget
Definition DccFileTransfer.h:194
bool doResume(const char *filename, const char *port, quint64 filePos)
Definition DccFileTransfer.cpp:2350
const char * dccMarshalOutputContextString() override
Definition DccFileTransfer.cpp:1379
DccDescriptor * m_pDescriptor
Definition DccFileTransfer.h:191
Definition DccMarshal.h:44
Definition DccMarshal.h:57
Definition DccFileTransfer.h:116
virtual void run()
Definition DccFileTransfer.cpp:264
void doneGetInfo()
Definition DccFileTransfer.cpp:598
QFile * m_pFile
Definition DccFileTransfer.h:135
uint m_uInstantSpeed
Definition DccFileTransfer.h:126
quint64 m_uInstantReceivedBytes
Definition DccFileTransfer.h:133
unsigned int bandwidthLimit()
Definition DccFileTransfer.h:144
quint64 receivedBytes()
Definition DccFileTransfer.h:143
~DccRecvThread()
Definition DccFileTransfer.cpp:106
DccRecvThread(QObject *par, kvi_socket_t fd, KviDccRecvThreadOptions *opt)
Definition DccFileTransfer.cpp:90
uint averageSpeed()
Definition DccFileTransfer.h:139
void updateStats()
Definition DccFileTransfer.cpp:221
void postMessageEvent(const char *msg)
Definition DccFileTransfer.cpp:251
void initGetInfo()
Definition DccFileTransfer.cpp:593
KviMSecTimeInterval * m_pTimeInterval
Definition DccFileTransfer.h:132
quint64 filePosition()
Definition DccFileTransfer.h:141
quint64 m_uFilePosition
Definition DccFileTransfer.h:127
quint64 m_uInstantSpeedInterval
Definition DccFileTransfer.h:134
quint64 m_uTotalReceivedBytes
Definition DccFileTransfer.h:128
unsigned long m_uStartTime
Definition DccFileTransfer.h:131
uint instantSpeed()
Definition DccFileTransfer.h:140
bool sendAck(qint64 filePos, bool bUse64BitAck=false)
Definition DccFileTransfer.cpp:115
void setBandwidthLimit(unsigned int uMaxBandwidth)
Definition DccFileTransfer.h:145
uint m_uAverageSpeed
Definition DccFileTransfer.h:125
KviDccRecvThreadOptions * m_pOpt
Definition DccFileTransfer.h:122
Definition DccFileTransfer.h:67
quint64 m_uInstantSentBytes
Definition DccFileTransfer.h:82
DccSendThread(QObject *par, kvi_socket_t fd, KviDccSendThreadOptions *opt)
Definition DccFileTransfer.cpp:603
quint64 filePosition()
Definition DccFileTransfer.h:89
void setBandwidthLimit(unsigned int uMaxBandwidth)
Definition DccFileTransfer.h:94
KviMSecTimeInterval * m_pTimeInterval
Definition DccFileTransfer.h:84
virtual void run()
Definition DccFileTransfer.cpp:678
uint m_uInstantSpeed
Definition DccFileTransfer.h:75
void updateStats()
Definition DccFileTransfer.cpp:624
void initGetInfo()
Definition DccFileTransfer.cpp:1171
uint averageSpeed()
Definition DccFileTransfer.h:87
unsigned long m_uStartTime
Definition DccFileTransfer.h:80
quint64 ackedBytes()
Definition DccFileTransfer.h:92
void doneGetInfo()
Definition DccFileTransfer.cpp:1176
quint64 m_uAckedBytes
Definition DccFileTransfer.h:77
unsigned int bandwidthLimit()
Definition DccFileTransfer.h:93
uint m_uAverageSpeed
Definition DccFileTransfer.h:74
quint64 m_uFilePosition
Definition DccFileTransfer.h:76
uint instantSpeed()
Definition DccFileTransfer.h:88
unsigned long m_uInstantSpeedInterval
Definition DccFileTransfer.h:81
~DccSendThread()
Definition DccFileTransfer.cpp:617
quint64 sentBytes()
Definition DccFileTransfer.h:91
KviDccSendThreadOptions * m_pOpt
Definition DccFileTransfer.h:83
quint64 m_uTotalSentBytes
Definition DccFileTransfer.h:78
Definition DccThread.h:56
Definition KviCString.h:102
Definition KviFileTransfer.h:78
A class to retrieve the time interval This works for time intervals a bit longer than 24 days.
Definition KviTimeUtils.h:76
Base class for all windows in KVIrc.
Definition KviWindow.h:75
#define m
Definition detector.cpp:78
#define t
Definition detector.cpp:85
#define e
Definition detector.cpp:70
#define s
Definition detector.cpp:84
#define p
Definition detector.cpp:81
int kvi_socket_t
Definition kvi_sockettype.h:40
Code
Contains all error codes.
Definition KviError.h:48
Definition DccFileTransfer.h:103
KviCString szFileName
Definition DccFileTransfer.h:105
bool bIsTdcc
Definition DccFileTransfer.h:111
bool bSend64BitAck
Definition DccFileTransfer.h:109
bool bResume
Definition DccFileTransfer.h:104
bool bNoAcks
Definition DccFileTransfer.h:110
int iIdleStepLengthInMSec
Definition DccFileTransfer.h:107
bool bSendZeroAck
Definition DccFileTransfer.h:108
unsigned int uMaxBandwidth
Definition DccFileTransfer.h:112
quint64 uTotalFileSize
Definition DccFileTransfer.h:106
Definition DccFileTransfer.h:55
int iPacketSize
Definition DccFileTransfer.h:58
bool bFastSend
Definition DccFileTransfer.h:60
quint64 uStartPosition
Definition DccFileTransfer.h:57
KviCString szFileName
Definition DccFileTransfer.h:56
unsigned int uMaxBandwidth
Definition DccFileTransfer.h:63
int iIdleStepLengthInMSec
Definition DccFileTransfer.h:59
bool bIsTdcc
Definition DccFileTransfer.h:62
bool bNoAcks
Definition DccFileTransfer.h:61
char szBuffer[4096]
Definition winamp.cpp:77