X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/ebdb6f1810a20ac240b5b2192dc2e6532ff149d2..865b46c18e38cab493141e9888eea74ed0d7da21:/methods/server.cc?ds=sidebyside diff --git a/methods/server.cc b/methods/server.cc index d0b6ef3d7..af7276bad 100644 --- a/methods/server.cc +++ b/methods/server.cc @@ -208,8 +208,16 @@ bool ServerState::HeaderLine(string Line) if (stringcasecmp(Tag,"Connection:") == 0) { if (stringcasecmp(Val,"close") == 0) + { Persistent = false; - if (stringcasecmp(Val,"keep-alive") == 0) + Pipeline = false; + /* Some servers send error pages (as they are dynamically generated) + for simplicity via a connection close instead of e.g. chunked, + so assuming an always closing server only if we get a file + close */ + if (Result >= 200 && Result < 300) + PipelineAllowed = false; + } + else if (stringcasecmp(Val,"keep-alive") == 0) Persistent = true; return true; } @@ -227,6 +235,15 @@ bool ServerState::HeaderLine(string Line) return true; } + if (stringcasecmp(Tag, "Accept-Ranges:") == 0) + { + std::string ranges = ',' + Val + ','; + ranges.erase(std::remove(ranges.begin(), ranges.end(), ' '), ranges.end()); + if (ranges.find(",bytes,") == std::string::npos) + RangesAllowed = false; + return true; + } + return true; } /*}}}*/ @@ -252,6 +269,7 @@ void ServerState::Reset(bool const Everything) /*{{{*/ if (Everything) { Persistent = false; Pipeline = false; PipelineAllowed = true; + RangesAllowed = true; } } /*}}}*/