Parse headers, return True if headers are complete.
(self)
| 525 | return True |
| 526 | |
| 527 | def _parse_headers(self): |
| 528 | class="st">""class="st">"Parse headers, return True if headers are complete."class="st">"" |
| 529 | while True: |
| 530 | idx = self._buffer.find(b&class="cm">#x27;\r\n') |
| 531 | if idx == -1: |
| 532 | return False |
| 533 | |
| 534 | line = bytes(self._buffer[:idx]) |
| 535 | del self._buffer[:idx + 2] |
| 536 | |
| 537 | if not line: |
| 538 | class="cm"># Empty line = end of headers |
| 539 | self._finalize_headers() |
| 540 | return True |
| 541 | |
| 542 | class="cm"># Check header field size limit (include CRLF in size to match WSGI parser) |
| 543 | if self._limit_request_field_size > 0 and len(line) + 2 > self._limit_request_field_size: |
| 544 | raise LimitRequestHeaders(class="st">"Request header field is too large") |
| 545 | |
| 546 | class="cm"># Check header count limit |
| 547 | self._header_count += 1 |
| 548 | if self._limit_request_fields > 0 and self._header_count > self._limit_request_fields: |
| 549 | raise LimitRequestHeaders(class="st">"Too many headers") |
| 550 | |
| 551 | class="cm"># Parse header |
| 552 | colon = line.find(b&class="cm">#x27;:') |
| 553 | if colon == -1: |
| 554 | raise InvalidHeader(class="st">"Missing colon in header") |
| 555 | |
| 556 | name = line[:colon].strip() |
| 557 | if not self._is_valid_token(name): |
| 558 | raise InvalidHeaderName(name.decode(&class="cm">#x27;latin-1')) |
| 559 | |
| 560 | value = line[colon + 1:].strip() |
| 561 | if self._has_invalid_header_chars(value): |
| 562 | raise InvalidHeader(class="st">"Invalid characters in header value") |
| 563 | |
| 564 | class="cm"># Store lowercase name for internal use |
| 565 | name_lower = name.lower() |
| 566 | self._headers_list.append((name_lower, value)) |
| 567 | |
| 568 | if self._on_header: |
| 569 | self._on_header(name_lower, value) |
| 570 | |
| 571 | def _finalize_headers(self): |
| 572 | class="st">"""Called when all headers received. |
no test coverage detected