Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}