| 289 | } |
| 290 | |
| 291 | Header::Iterator |
| 292 | Header::begin() |
| 293 | { |
| 294 | _ensure_initialized(this); |
| 295 | // Cleanup any lingering iterator state |
| 296 | if (_iterator_loc) { |
| 297 | TSHandleMLocRelease(_bufp, _hdr_loc, _iterator_loc); |
| 298 | _iterator_loc = nullptr; |
| 299 | } |
| 300 | |
| 301 | // Start the new iterator |
| 302 | ++_iterator_tag; |
| 303 | _iterator_loc = TSMimeHdrFieldGet(_bufp, _hdr_loc, 0); |
| 304 | |
| 305 | if (_iterator_loc) { |
| 306 | int name_len; |
| 307 | const char *name = TSMimeHdrFieldNameGet(_bufp, _hdr_loc, _iterator_loc, &name_len); |
| 308 | cripts::string_view name_view(name, name_len); |
| 309 | |
| 310 | return {name_view, _iterator_tag, this}; |
| 311 | |
| 312 | } else { |
| 313 | return Iterator::end(); // Seems unlikely that we'd not have any headers... |
| 314 | } |
| 315 | } |
| 316 | |
| 317 | cripts::string_view |
| 318 | Header::iterate() |