Commit 78c72d0c authored by David Kalnischkies's avatar David Kalnischkies

replace "filesize - 1" trick in http with proper 416 handling

Our http client requests the "filesize - 1" for the small edgecase of
handling a file which was completely downloaded, but not yet moved to
the correct place as we get 416 errors in that case, but as we can
handle 416 returns now we just special-case the situation of requesting
the exact filesize and handle it as a 200 without content instead.
parent 331e8396
......@@ -750,7 +750,7 @@ void HttpMethod::SendReq(FetchItem *Itm,CircleBuf &Out)
if (stat(Itm->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0)
{
// In this case we send an if-range query with a range header
sprintf(Buf,"Range: bytes=%lli-\r\nIf-Range: %s\r\n",(long long)SBuf.st_size - 1,
sprintf(Buf,"Range: bytes=%lli-\r\nIf-Range: %s\r\n",(long long)SBuf.st_size,
TimeRFC1123(SBuf.st_mtime).c_str());
Req += Buf;
}
......@@ -1004,11 +1004,24 @@ HttpMethod::DealWithHeaders(FetchResult &Res,ServerState *Srv)
/* else pass through for error message */
}
// retry after an invalid range response without partial data
else if (Srv->Result == 416 && FileExists(Queue->DestFile) == true &&
unlink(Queue->DestFile.c_str()) == 0)
else if (Srv->Result == 416)
{
NextURI = Queue->Uri;
return TRY_AGAIN_OR_REDIRECT;
struct stat SBuf;
if (stat(Queue->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0)
{
if ((unsigned long long)SBuf.st_size == Srv->Size)
{
// the file is completely downloaded, but was not moved
Srv->StartPos = Srv->Size;
Srv->Result = 200;
Srv->HaveContent = false;
}
else if (unlink(Queue->DestFile.c_str()) == 0)
{
NextURI = Queue->Uri;
return TRY_AGAIN_OR_REDIRECT;
}
}
}
/* We have a reply we dont handle. This should indicate a perm server
......@@ -1246,7 +1259,9 @@ int HttpMethod::Loop()
URIStart(Res);
// Run the data
bool Result = Server->RunData();
bool Result = true;
if (Server->HaveContent)
Result = Server->RunData();
/* If the server is sending back sizeless responses then fill in
the size now */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment