| 1105 | } |
| 1106 | |
| 1107 | bool SC::HttpClientResponse::getNextTransferCoding(HttpClientTransferCodingIterator& iterator, |
| 1108 | HttpClientTransferCoding& transferCoding) const |
| 1109 | { |
| 1110 | transferCoding = {}; |
| 1111 | |
| 1112 | for (;;) |
| 1113 | { |
| 1114 | if (not iterator.hasHeaderValue or iterator.valueOffset >= iterator.headerValue.sizeInBytes()) |
| 1115 | { |
| 1116 | if (not findNextHeader("Transfer-Encoding", iterator.headerIterator, iterator.headerValue)) |
| 1117 | { |
| 1118 | iterator.hasHeaderValue = false; |
| 1119 | return false; |
| 1120 | } |
| 1121 | iterator.valueOffset = 0; |
| 1122 | iterator.hasHeaderValue = true; |
| 1123 | } |
| 1124 | |
| 1125 | const Span<const char> bytes = iterator.headerValue.toCharSpan(); |
| 1126 | while (iterator.valueOffset < bytes.sizeInBytes() and |
| 1127 | (bytes[iterator.valueOffset] == ',' or bytes[iterator.valueOffset] == ' ' or |
| 1128 | bytes[iterator.valueOffset] == '\t')) |
| 1129 | { |
| 1130 | iterator.valueOffset += 1; |
| 1131 | } |
| 1132 | |
| 1133 | const size_t tokenStart = iterator.valueOffset; |
| 1134 | while (iterator.valueOffset < bytes.sizeInBytes() and bytes[iterator.valueOffset] != ',') |
| 1135 | { |
| 1136 | iterator.valueOffset += 1; |
| 1137 | } |
| 1138 | |
| 1139 | const StringSpan token = trimAsciiWhiteSpace({bytes.data() + tokenStart, iterator.valueOffset - tokenStart}); |
| 1140 | if (iterator.valueOffset < bytes.sizeInBytes() and bytes[iterator.valueOffset] == ',') |
| 1141 | { |
| 1142 | iterator.valueOffset += 1; |
| 1143 | } |
| 1144 | |
| 1145 | if (token.sizeInBytes() == 0) |
| 1146 | { |
| 1147 | continue; |
| 1148 | } |
| 1149 | |
| 1150 | transferCoding.name = token; |
| 1151 | transferCoding.type = HttpClientTransferCoding::parseName(token); |
| 1152 | return true; |
| 1153 | } |
| 1154 | } |
| 1155 | |
| 1156 | bool SC::HttpClientResponse::hasContentCoding(HttpClientContentCoding::Type type) const |
| 1157 | { |