-
Notifications
You must be signed in to change notification settings - Fork 0
/
transfersegment.cpp
137 lines (117 loc) · 3.39 KB
/
transfersegment.cpp
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include "transfersegment.h"
TransferSegment::TransferSegment(QObject *parent) :
QObject(parent)
{
pDownloadBucketTable = 0;
maxUploadRequestOffset = 0;
segmentStart = 0;
segmentLength = 0;
segmentEnd = 0;
bytesTransferred = 0;
}
TransferSegment::~TransferSegment()
{
emit removeTransferSegmentPointer(segmentId);
//qDebug() << "TransferSegment DESTROYING: " << this;
}
void TransferSegment::transferTimerEvent(){}
void TransferSegment::setFileSize(quint64){}
qint64 TransferSegment::getBytesReceivedNotFlushed(){return 0;}
qint64 TransferSegment::getMaxUploadRequestOffset(){return maxUploadRequestOffset;}
void TransferSegment::setSegmentStart(qint64 start)
{
segmentStart = start;
segmentLength = segmentEnd - segmentStart > 0 ? segmentEnd - segmentStart : 0;
calculateLastBucketParams();
}
void TransferSegment::setSegmentEnd(qint64 end)
{
segmentEnd = end;
if (segmentEnd - segmentStart > 0)
{
segmentLength = segmentEnd - segmentStart;
}
else
{
segmentLength = 0;
segmentEnd = segmentStart;
}
calculateLastBucketParams();
}
void TransferSegment::calculateLastBucketParams()
{
lastBucketNumber = segmentEnd % HASH_BUCKET_SIZE == 0 ? (segmentEnd >> 20) - 1: segmentEnd >> 20;
lastBucketNumber = lastBucketNumber < 0 ? 0 : lastBucketNumber;
lastBucketSize = segmentLength % HASH_BUCKET_SIZE == 0 ? HASH_BUCKET_SIZE : segmentLength % HASH_BUCKET_SIZE;
}
qint64 TransferSegment::getSegmentStart()
{
return segmentStart;
}
qint64 TransferSegment::getSegmentEnd()
{
return segmentEnd;
}
qint64 TransferSegment::getSegmentStartTime()
{
return segmentStartTime;
}
QHostAddress TransferSegment::getSegmentRemotePeer()
{
return remoteHost;
}
int TransferSegment::getSegmentStatus()
{
return status;
}
quint32 TransferSegment::getSegmentId()
{
return segmentId;
}
quint64 TransferSegment::getBytesTransferred()
{
return bytesTransferred;
}
void TransferSegment::setTTH(QByteArray tth)
{
TTH = tth;
}
void TransferSegment::setRemoteHost(QHostAddress host)
{
remoteHost = host;
}
void TransferSegment::setRemoteCID(QByteArray cid)
{
remoteCID = cid;
}
void TransferSegment::setDownloadBucketTablePointer(QHash<int, QByteArray *> *dbt)
{
pDownloadBucketTable = dbt;
}
void TransferSegment::setSegmentId(quint32 id)
{
segmentId = id;
}
void TransferSegment::checkSendDownloadRequest(QHostAddress peer, QByteArray TTH,
qint64 requestingOffset, qint64 requestingLength, int status, quint8 protocol)
{
if (status & (TRANSFER_STATE_RUNNING | TRANSFER_STATE_STALLED))
{
if (segmentEnd < requestingOffset + requestingLength)
requestingLength = segmentEnd - requestingOffset;
if (requestingLength > 0)
{
//qDebug() << "TransferSegment::checkSendDownloadRequest() emit sendDownloadRequest() peer tth offset length segmentid "
// << peer << TTH.toBase64() << requestingOffset << requestingLength << segmentId;
emit sendDownloadRequest(protocol, peer, TTH, requestingOffset, requestingLength, segmentId, remoteCID);
}
}
else
{
qDebug() << "TransferSegment::checkSendDownloadRequest drop download request: invalid state: " << status;
}
}
int TransferSegment::calculateBucketNumber(quint64 fileOffset)
{
return (int)(fileOffset >> 20);
}