mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-12-01 01:36:09 +03:00
78 lines
2.5 KiB
C
78 lines
2.5 KiB
C
|
// Copyright 2016 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 NET_HTTP2_HPACK_HPACK_STRING_H_
|
||
|
#define NET_HTTP2_HPACK_HPACK_STRING_H_
|
||
|
|
||
|
// HpackString is currently a very simple container for a string, but allows us
|
||
|
// to relatively easily experiment with alternate string storage mechanisms for
|
||
|
// handling strings to be encoded with HPACK, or decoded from HPACK, such as
|
||
|
// a ref-counted string.
|
||
|
|
||
|
#include <stddef.h>
|
||
|
|
||
|
#include <iosfwd>
|
||
|
|
||
|
#include "net/http2/platform/api/http2_export.h"
|
||
|
#include "net/http2/platform/api/http2_string.h"
|
||
|
#include "net/http2/platform/api/http2_string_piece.h"
|
||
|
|
||
|
namespace net {
|
||
|
|
||
|
class HTTP2_EXPORT_PRIVATE HpackString {
|
||
|
public:
|
||
|
explicit HpackString(const char* data);
|
||
|
explicit HpackString(Http2StringPiece str);
|
||
|
explicit HpackString(Http2String str);
|
||
|
HpackString(const HpackString& other);
|
||
|
|
||
|
// Not sure yet whether this move ctor is required/sensible.
|
||
|
HpackString(HpackString&& other) = default;
|
||
|
|
||
|
HpackString& operator=(const HpackString& other) = default;
|
||
|
|
||
|
~HpackString();
|
||
|
|
||
|
size_t size() const { return str_.size(); }
|
||
|
const Http2String& ToString() const { return str_; }
|
||
|
Http2StringPiece ToStringPiece() const;
|
||
|
|
||
|
bool operator==(const HpackString& other) const;
|
||
|
|
||
|
bool operator==(Http2StringPiece str) const;
|
||
|
|
||
|
private:
|
||
|
Http2String str_;
|
||
|
};
|
||
|
|
||
|
HTTP2_EXPORT_PRIVATE bool operator==(Http2StringPiece a, const HpackString& b);
|
||
|
HTTP2_EXPORT_PRIVATE bool operator!=(Http2StringPiece a, const HpackString& b);
|
||
|
HTTP2_EXPORT_PRIVATE bool operator!=(const HpackString& a,
|
||
|
const HpackString& b);
|
||
|
HTTP2_EXPORT_PRIVATE bool operator!=(const HpackString& a, Http2StringPiece b);
|
||
|
HTTP2_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
|
||
|
const HpackString& v);
|
||
|
|
||
|
struct HTTP2_EXPORT_PRIVATE HpackStringPair {
|
||
|
HpackStringPair(const HpackString& name, const HpackString& value);
|
||
|
HpackStringPair(Http2StringPiece name, Http2StringPiece value);
|
||
|
~HpackStringPair();
|
||
|
|
||
|
// Returns the size of a header entry with this name and value, per the RFC:
|
||
|
// http://httpwg.org/specs/rfc7541.html#calculating.table.size
|
||
|
size_t size() const { return 32 + name.size() + value.size(); }
|
||
|
|
||
|
Http2String DebugString() const;
|
||
|
|
||
|
HpackString name;
|
||
|
HpackString value;
|
||
|
};
|
||
|
|
||
|
HTTP2_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
|
||
|
const HpackStringPair& p);
|
||
|
|
||
|
} // namespace net
|
||
|
|
||
|
#endif // NET_HTTP2_HPACK_HPACK_STRING_H_
|