Fixes to downloader range requests, improvements to input bufferFrame code
This commit is contained in:
parent
393fa9e403
commit
d097273859
2 changed files with 25 additions and 7 deletions
|
@ -270,8 +270,17 @@ namespace HTTP{
|
||||||
}else{
|
}else{
|
||||||
sprintf(tmp, "bytes=%zu-%zu", byteStart, byteEnd - 1);
|
sprintf(tmp, "bytes=%zu-%zu", byteStart, byteEnd - 1);
|
||||||
}
|
}
|
||||||
|
extraHeaders.erase("Range");
|
||||||
setHeader("Range", tmp);
|
setHeader("Range", tmp);
|
||||||
return getNonBlocking(link, 6);
|
if (!canRequest(link)){return false;}
|
||||||
|
nbLink = link;
|
||||||
|
nbMaxRecursiveDepth = 6;
|
||||||
|
nbLoop = retryCount + 1; // max 5 attempts
|
||||||
|
isComplete = false;
|
||||||
|
doRequest(nbLink);
|
||||||
|
nbReqTime = Util::bootSecs();
|
||||||
|
nbLastOff = getSocket().dataDown();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Downloader::getRange(const HTTP::URL &link, size_t byteStart, size_t byteEnd, Util::DataCallback &cb){
|
bool Downloader::getRange(const HTTP::URL &link, size_t byteStart, size_t byteEnd, Util::DataCallback &cb){
|
||||||
|
|
|
@ -1526,7 +1526,15 @@ namespace Mist{
|
||||||
size_t dataLen;
|
size_t dataLen;
|
||||||
thisPacket.getString("data", data, dataLen);
|
thisPacket.getString("data", data, dataLen);
|
||||||
if (dataLen != parts.getSize(partNo)){
|
if (dataLen != parts.getSize(partNo)){
|
||||||
INFO_MSG("Part %zu (@%" PRIu64 ") size mismatch: %zu (actual) != %zu (expected)", partNo, thisTime, dataLen, parts.getSize(partNo));
|
if (partNo && dataLen == parts.getSize(partNo-1)){
|
||||||
|
FAIL_MSG("Part size for part %zu (%" PRIu64 "ms) matches part before it, instead. Aborting page load!", partNo, thisTime);
|
||||||
|
break;
|
||||||
|
}else if (dataLen == parts.getSize(partNo+1)){
|
||||||
|
FAIL_MSG("Part size for part %zu (%" PRIu64 "ms) matches part after it, instead. Aborting page load!", partNo, thisTime);
|
||||||
|
break;
|
||||||
|
}else{
|
||||||
|
INFO_MSG("Part %zu (@%" PRIu64 ") size mismatch: %zu (actual) != %zu (expected)", partNo, thisTime, dataLen, parts.getSize(partNo));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
++partNo;
|
++partNo;
|
||||||
HIGH_MSG("Buffering VoD packet (%zuB) @%" PRIu64 " ms on track %zu with offset %" PRIu64, dataLen, thisTime, idx, thisPacket.getInt("offset"));
|
HIGH_MSG("Buffering VoD packet (%zuB) @%" PRIu64 " ms on track %zu with offset %" PRIu64, dataLen, thisTime, idx, thisPacket.getInt("offset"));
|
||||||
|
@ -1559,15 +1567,16 @@ namespace Mist{
|
||||||
bufferFinalize(idx, page);
|
bufferFinalize(idx, page);
|
||||||
bufferTimer = Util::bootMS() - bufferTimer;
|
bufferTimer = Util::bootMS() - bufferTimer;
|
||||||
if (packCounter != tPages.getInt("parts", pageIdx)){
|
if (packCounter != tPages.getInt("parts", pageIdx)){
|
||||||
FAIL_MSG("Track %zu, page %" PRIu32 " (%" PRIu64 " - %" PRIu64 " ms) NOT FULLY buffered in %" PRIu64 "ms",
|
FAIL_MSG("Track %zu, page %" PRIu32 " (" PRETTY_PRINT_MSTIME " - " PRETTY_PRINT_MSTIME ") NOT FULLY buffered in %" PRIu64 "ms - erasing for later retry",
|
||||||
idx, pageNumber, tPages.getInt("firsttime", pageIdx), thisTime, bufferTimer);
|
idx, pageNumber, PRETTY_ARG_MSTIME(tPages.getInt("firsttime", pageIdx)), PRETTY_ARG_MSTIME(thisTime), bufferTimer);
|
||||||
INFO_MSG(" (%" PRIu32 "/%" PRIu64 " parts, %" PRIu64 " bytes)", packCounter,
|
INFO_MSG(" (%" PRIu32 "/%" PRIu64 " parts, %" PRIu64 " bytes)", packCounter,
|
||||||
tPages.getInt("parts", pageIdx), byteCounter);
|
tPages.getInt("parts", pageIdx), byteCounter);
|
||||||
pageCounter[idx][pageNumber] = Util::bootSecs();
|
pageCounter[idx].erase(pageNumber);
|
||||||
|
bufferRemove(idx, pageNumber);
|
||||||
return false;
|
return false;
|
||||||
}else{
|
}else{
|
||||||
INFO_MSG("Track %zu, page %" PRIu32 " (%" PRIu64 " - %" PRIu64 " ms) buffered in %" PRIu64 "ms",
|
INFO_MSG("Track %zu, page %" PRIu32 " (" PRETTY_PRINT_MSTIME " - " PRETTY_PRINT_MSTIME ") buffered in %" PRIu64 "ms",
|
||||||
idx, pageNumber, tPages.getInt("firsttime", pageIdx), thisTime, bufferTimer);
|
idx, pageNumber, PRETTY_ARG_MSTIME(tPages.getInt("firsttime", pageIdx)), PRETTY_ARG_MSTIME(thisTime), bufferTimer);
|
||||||
INFO_MSG(" (%" PRIu32 "/%" PRIu64 " parts, %" PRIu64 " bytes)", packCounter,
|
INFO_MSG(" (%" PRIu32 "/%" PRIu64 " parts, %" PRIu64 " bytes)", packCounter,
|
||||||
tPages.getInt("parts", pageIdx), byteCounter);
|
tPages.getInt("parts", pageIdx), byteCounter);
|
||||||
pageCounter[idx][pageNumber] = Util::bootSecs();
|
pageCounter[idx][pageNumber] = Util::bootSecs();
|
||||||
|
|
Loading…
Add table
Reference in a new issue