| #ifndef QUICHE_HTTP2_ADAPTER_HEADER_VALIDATOR_BASE_H_ | |
| #define QUICHE_HTTP2_ADAPTER_HEADER_VALIDATOR_BASE_H_ | |
| #include <string> | |
| #include "absl/strings/string_view.h" | |
| #include "absl/types/optional.h" | |
| #include "quiche/common/platform/api/quiche_export.h" | |
| namespace http2 { | |
| namespace adapter { | |
| enum class HeaderType : uint8_t { | |
| REQUEST, | |
| REQUEST_TRAILER, | |
| RESPONSE_100, | |
| RESPONSE, | |
| RESPONSE_TRAILER, | |
| }; | |
| enum class ObsTextOption : uint8_t { | |
| kAllow, | |
| kDisallow, | |
| }; | |
| class QUICHE_EXPORT_PRIVATE HeaderValidatorBase { | |
| public: | |
| HeaderValidatorBase() = default; | |
| virtual ~HeaderValidatorBase() = default; | |
| virtual void StartHeaderBlock() { | |
| status_.clear(); | |
| content_length_ = absl::nullopt; | |
| } | |
| enum HeaderStatus { | |
| HEADER_OK, | |
| HEADER_SKIP, | |
| HEADER_FIELD_INVALID, | |
| HEADER_FIELD_TOO_LONG, | |
| }; | |
| virtual HeaderStatus ValidateSingleHeader(absl::string_view key, | |
| absl::string_view value) = 0; | |
| // Should return true if validation was successful. | |
| virtual bool FinishHeaderBlock(HeaderType type) = 0; | |
| // For responses, returns the value of the ":status" header, if present. | |
| absl::string_view status_header() const { return status_; } | |
| absl::optional<size_t> content_length() const { return content_length_; } | |
| void SetMaxFieldSize(uint32_t field_size) { max_field_size_ = field_size; } | |
| void SetObsTextOption(ObsTextOption option) { obs_text_option_ = option; } | |
| // Allows the "extended CONNECT" syntax described in RFC 8441. | |
| void SetAllowExtendedConnect() { allow_extended_connect_ = true; } | |
| protected: | |
| std::string status_; | |
| absl::optional<size_t> max_field_size_; | |
| absl::optional<size_t> content_length_; | |
| ObsTextOption obs_text_option_ = ObsTextOption::kDisallow; | |
| bool allow_extended_connect_ = false; | |
| }; | |
| } // namespace adapter | |
| } // namespace http2 | |
| #endif // QUICHE_HTTP2_ADAPTER_HEADER_VALIDATOR_BASE_H_ |