diff options
Diffstat (limited to 'src/HttpHeader.cc')
| -rw-r--r-- | src/HttpHeader.cc | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/HttpHeader.cc b/src/HttpHeader.cc index a9fe23a6..3708e723 100644 --- a/src/HttpHeader.cc +++ b/src/HttpHeader.cc @@ -113,13 +113,20 @@ Range HttpHeader::getRange() const } } } - // we expect that rangeStr looks like 'bytes 100-199/100' - // but some server returns '100-199/100', omitting bytes-unit specifier - // 'bytes'. + // we expect that rangeStr looks like 'bytes 100-199/200' but some + // server returns '100-199/200', omitting bytes-unit specifier + // 'bytes'. Moreover, some server may return like + // 'bytes=100-199/200'. auto byteRangeSpec = std::find(rangeStr.begin(), rangeStr.end(), ' '); if(byteRangeSpec == rangeStr.end()) { - // we assume bytes-unit specifier omitted. - byteRangeSpec = rangeStr.begin(); + // check for 'bytes=100-199/200' case + byteRangeSpec = std::find(rangeStr.begin(), rangeStr.end(), '='); + if (byteRangeSpec == rangeStr.end()) { + // we assume bytes-unit specifier omitted. + byteRangeSpec = rangeStr.begin(); + } else { + ++byteRangeSpec; + } } else { while(byteRangeSpec != rangeStr.end() && (*byteRangeSpec == ' ' || *byteRangeSpec == '\t')) { |
