MCPcopy
hub / github.com/benoitc/gunicorn / _parse_headers

Method _parse_headers

gunicorn/asgi/parser.py:527–569  ·  gunicorn/asgi/parser.py::PythonProtocol._parse_headers

Parse headers, return True if headers are complete.

(self)

Source from the content-addressed store, hash-verified

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.

Callers 1

feedMethod · 0.95

Calls 7

_finalize_headersMethod · 0.95
_is_valid_tokenMethod · 0.95
decodeMethod · 0.80
LimitRequestHeadersClass · 0.70
InvalidHeaderClass · 0.70
InvalidHeaderNameClass · 0.70

Tested by

no test coverage detected