header_coalescer.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright (c) 2016 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef NET_SPDY_HEADER_COALESCER_H_
  5. #define NET_SPDY_HEADER_COALESCER_H_
  6. #include "base/strings/string_piece.h"
  7. #include "net/base/net_export.h"
  8. #include "net/log/net_log_with_source.h"
  9. #include "net/third_party/quiche/src/quiche/spdy/core/http2_header_block.h"
  10. #include "net/third_party/quiche/src/quiche/spdy/core/spdy_headers_handler_interface.h"
  11. namespace net {
  12. class NET_EXPORT_PRIVATE HeaderCoalescer
  13. : public spdy::SpdyHeadersHandlerInterface {
  14. public:
  15. HeaderCoalescer(uint32_t max_header_list_size,
  16. const NetLogWithSource& net_log);
  17. void OnHeaderBlockStart() override {}
  18. void OnHeader(absl::string_view key, absl::string_view value) override;
  19. void OnHeaderBlockEnd(size_t uncompressed_header_bytes,
  20. size_t compressed_header_bytes) override {}
  21. spdy::Http2HeaderBlock release_headers();
  22. bool error_seen() const { return error_seen_; }
  23. private:
  24. // Helper to add a header. Return true on success.
  25. bool AddHeader(base::StringPiece key, base::StringPiece value);
  26. spdy::Http2HeaderBlock headers_;
  27. bool headers_valid_ = true;
  28. size_t header_list_size_ = 0;
  29. bool error_seen_ = false;
  30. bool regular_header_seen_ = false;
  31. const uint32_t max_header_list_size_;
  32. NetLogWithSource net_log_;
  33. };
  34. } // namespace net
  35. #endif // NET_SPDY_HEADER_COALESCER_H_