// Copyright 2022 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef QUICHE_BALSA_HTTP_VALIDATION_POLICY_H_
#define QUICHE_BALSA_HTTP_VALIDATION_POLICY_H_

#include <ostream>

#include "quiche/common/platform/api/quiche_export.h"

namespace quiche {

// An HttpValidationPolicy captures policy choices affecting parsing of HTTP
// requests.  It offers individual Boolean member functions to be consulted
// during the parsing of an HTTP request.
class QUICHE_EXPORT_PRIVATE HttpValidationPolicy {
 public:
  HttpValidationPolicy(bool enforce_all);

  static HttpValidationPolicy CreateDefault();

  // https://tools.ietf.org/html/rfc7230#section-3.2.4 deprecates "folding"
  // of long header lines onto continuation lines.
  bool disallow_header_continuation_lines() const { return enforce_all_; }

  // A valid header line requires a header name and a colon.
  bool require_header_colon() const { return enforce_all_; }

  // https://tools.ietf.org/html/rfc7230#section-3.3.2 disallows multiple
  // Content-Length header fields with the same value.
  bool disallow_multiple_content_length() const { return enforce_all_; }

  // https://tools.ietf.org/html/rfc7230#section-3.3.2 disallows
  // Transfer-Encoding and Content-Length header fields together.
  bool disallow_transfer_encoding_with_content_length() const {
    return enforce_all_;
  }

  bool operator==(const HttpValidationPolicy& other) const;

  friend QUICHE_EXPORT_PRIVATE std::ostream& operator<<(
      std::ostream& os, const HttpValidationPolicy& policy) {
    os << "HttpValidationPolicy(enforce_all_=" << policy.enforce_all_ << ")";
    return os;
  }

 private:
  // Enforce "everything": set for strictest possible parsing.
  bool enforce_all_;
};

}  // namespace quiche

#endif  // QUICHE_BALSA_HTTP_VALIDATION_POLICY_H_
