qint64 UploadDevice::readData(char* data, qint64 maxlen) { //qDebug() << Q_FUNC_INFO << maxlen << _read << _size << _bandwidthQuota; if (_data.size() - _read <= 0) { // at end if (_bandwidthManager) { _bandwidthManager->unregisterUploadDevice(this); } return -1; } maxlen = qMin(maxlen, _data.size() - _read); if (maxlen == 0) { return 0; } if (isChoked()) { return 0; } if (isBandwidthLimited()) { maxlen = qMin(maxlen, _bandwidthQuota); if (maxlen <= 0) { // no quota //qDebug() << "no quota"; return 0; } _bandwidthQuota -= maxlen; } std::memcpy(data, _data.data()+_read, maxlen); _read += maxlen; return maxlen; }
qint64 UploadDevice::readData(char* data, qint64 maxlen) { if (_file.isNull()) { qDebug() << Q_FUNC_INFO << "Upload file object deleted during upload"; close(); return -1; } _file.data()->seek(_start + _read); //qDebug() << Q_FUNC_INFO << maxlen << _read << _size << _bandwidthQuota; if (_size - _read <= 0) { // at end qDebug() << Q_FUNC_INFO << _read << _size << _bandwidthQuota << "at end"; _bandwidthManager->unregisterUploadDevice(this); return -1; } maxlen = qMin(maxlen, _size - _read); if (maxlen == 0) { return 0; } if (isChoked()) { qDebug() << Q_FUNC_INFO << this << "Upload Choked"; return 0; } if (isBandwidthLimited()) { qDebug() << Q_FUNC_INFO << "BW LIMITED" << maxlen << _bandwidthQuota << qMin(maxlen, _bandwidthQuota); maxlen = qMin(maxlen, _bandwidthQuota); if (maxlen <= 0) { // no quota qDebug() << Q_FUNC_INFO << "no quota"; return 0; } _bandwidthQuota -= maxlen; } qDebug() << Q_FUNC_INFO << "reading limited=" << isBandwidthLimited() << "maxlen=" << maxlen << "quota=" << _bandwidthQuota; qint64 ret = _file.data()->read(data, maxlen); //qDebug() << Q_FUNC_INFO << "returning " << ret; if (ret < 0) return -1; _read += ret; //qDebug() << Q_FUNC_INFO << "returning2 " << ret << _read; return ret; }