Skip to content

Commit

Permalink
src: small modification to NgHeader
Browse files Browse the repository at this point in the history
This is separated out of the QUIC PR. It is not specific to QUIC but
provides a new base class that is used there as an abstraction of
the actual implementation. This is a purely internal implementation
detail that has no outward functional changes (so no need for tests)

Signed-off-by: James M Snell <jasnell@gmail.com>

PR-URL: #33289
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: David Carlier <devnexen@gmail.com>
  • Loading branch information
jasnell authored and codebytere committed May 16, 2020
1 parent 6d2aaaf commit 354ff4f
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 17 deletions.
14 changes: 14 additions & 0 deletions src/node_http_common-inl.h
Expand Up @@ -76,6 +76,14 @@ size_t GetServerMaxHeaderPairs(size_t max_header_pairs) {
return std::max(max_header_pairs, min_header_pairs);
}

template <typename allocator_t>
std::string NgHeaderBase<allocator_t>::ToString() const {
std::string ret = name();
ret += " = ";
ret += value();
return ret;
}

template <typename T>
bool NgHeader<T>::IsZeroLength(
NgHeader<T>::rcbuf_t* name,
Expand Down Expand Up @@ -132,6 +140,12 @@ NgHeader<T>::NgHeader(NgHeader<T>&& other) noexcept
other.env_ = nullptr;
}

template <typename T>
void NgHeader<T>::MemoryInfo(MemoryTracker* tracker) const {
tracker->TrackField("name", name_);
tracker->TrackField("value", value_);
}

template <typename T>
v8::MaybeLocal<v8::String> NgHeader<T>::GetName(
NgHeader<T>::allocator_t* allocator) const {
Expand Down
36 changes: 19 additions & 17 deletions src/node_http_common.h
Expand Up @@ -453,6 +453,16 @@ class NgRcBufPointer : public MemoryRetainer {
bool internalizable_ = false;
};

template <typename allocator_t>
struct NgHeaderBase : public MemoryRetainer {
virtual v8::MaybeLocal<v8::String> GetName(allocator_t* allocator) const = 0;
virtual v8::MaybeLocal<v8::String> GetValue(allocator_t* allocator) const = 0;
virtual std::string name() const = 0;
virtual std::string value() const = 0;
virtual size_t length() const = 0;
virtual std::string ToString() const;
};

// The ng libraries use nearly identical structs to represent
// received http headers. The NgHeader class wraps those in a
// consistent way and allows converting the name and value to
Expand All @@ -461,7 +471,7 @@ class NgRcBufPointer : public MemoryRetainer {
// memory tracking, and implementation of static utility functions.
// See Http2HeaderTraits in node_http2.h for an example.
template <typename T>
class NgHeader : public MemoryRetainer {
class NgHeader final : public NgHeaderBase<typename T::allocator_t> {
public:
typedef typename T::rcbufferpointer_t rcbufferpointer_t;
typedef typename T::rcbufferpointer_t::rcbuf_t rcbuf_t;
Expand All @@ -487,28 +497,20 @@ class NgHeader : public MemoryRetainer {
// object to the v8 string. Once the v8 string is garbage collected,
// the reference counter will be decremented.

inline v8::MaybeLocal<v8::String> GetName(allocator_t* allocator) const;
inline v8::MaybeLocal<v8::String> GetValue(allocator_t* allocator) const;
inline v8::MaybeLocal<v8::String> GetName(
allocator_t* allocator) const override;
inline v8::MaybeLocal<v8::String> GetValue(
allocator_t* allocator) const override;

inline std::string name() const;
inline std::string value() const;
inline size_t length() const;
inline std::string name() const override;
inline std::string value() const override;
inline size_t length() const override;

void MemoryInfo(MemoryTracker* tracker) const override {
tracker->TrackField("name", name_);
tracker->TrackField("value", value_);
}
void MemoryInfo(MemoryTracker* tracker) const override;

SET_MEMORY_INFO_NAME(NgHeader)
SET_SELF_SIZE(NgHeader)

std::string ToString() const {
std::string ret = name();
ret += " = ";
ret += value();
return ret;
}

private:
Environment* env_;
rcbufferpointer_t name_;
Expand Down

0 comments on commit 354ff4f

Please sign in to comment.