Skip to content
This repository was archived by the owner on Aug 11, 2020. It is now read-only.

Commit cb95abb

Browse files
jasnelladdaleax
authored andcommitted
quic: refactoring node_quic_util to inline
PR-URL: #207 Reviewed-By: #207
1 parent 5d9fbb2 commit cb95abb

11 files changed

+78
-58
lines changed

node.gyp

+1-1
Original file line numberDiff line numberDiff line change
@@ -853,14 +853,14 @@
853853
'src/node_quic_socket.h',
854854
'src/node_quic_stream.h',
855855
'src/node_quic_util.h',
856+
'src/node_quic_util-inl.h',
856857
'src/node_quic_state.h',
857858
'src/node_quic_default_application.h',
858859
'src/node_quic_http3_application.h',
859860
'src/node_quic_crypto.cc',
860861
'src/node_quic_session.cc',
861862
'src/node_quic_socket.cc',
862863
'src/node_quic_stream.cc',
863-
'src/node_quic_util.cc',
864864
'src/node_quic.cc',
865865
'src/node_quic_default_application.cc',
866866
'src/node_quic_http3_application.cc'

src/node_quic.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include "node_quic_socket.h"
1111
#include "node_quic_stream.h"
1212
#include "node_quic_state.h"
13-
#include "node_quic_util.h"
13+
#include "node_quic_util-inl.h"
1414

1515
#include <memory>
1616
#include <utility>

src/node_quic_crypto.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include "node_crypto.h"
44
#include "node_crypto_common.h"
55
#include "node_quic_session-inl.h"
6-
#include "node_quic_util.h"
6+
#include "node_quic_util-inl.h"
77
#include "node_url.h"
88
#include "string_bytes.h"
99
#include "v8.h"

src/node_quic_default_application.cc

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "node_quic_default_application.h"
33
#include "node_quic_session-inl.h"
44
#include "node_quic_stream.h"
5+
#include "node_quic_util-inl.h"
56
#include <ngtcp2/ngtcp2.h>
67

78
namespace node {

src/node_quic_http3_application.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include "node_quic_http3_application.h"
55
#include "node_quic_session-inl.h"
66
#include "node_quic_stream.h"
7-
#include "node_quic_util.h"
7+
#include "node_quic_util-inl.h"
88
#include "node_http_common-inl.h"
99

1010
#include <nghttp3/nghttp3.h>

src/node_quic_session.cc

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@
1010
#include "node_crypto.h"
1111
#include "node_internals.h"
1212
#include "node_mem-inl.h"
13+
#include "node_quic_buffer.h"
1314
#include "node_quic_crypto.h"
1415
#include "node_quic_session.h" // NOLINT(build/include_inline)
1516
#include "node_quic_session-inl.h"
1617
#include "node_quic_socket.h"
1718
#include "node_quic_stream.h"
1819
#include "node_quic_state.h"
19-
#include "node_quic_util.h"
20+
#include "node_quic_util-inl.h"
2021
#include "node_quic_default_application.h"
2122
#include "node_quic_http3_application.h"
2223
#include "v8.h"

src/node_quic_session.h

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "node.h"
1212
#include "node_crypto.h"
1313
#include "node_mem.h"
14+
#include "node_quic_buffer.h"
1415
#include "node_quic_crypto.h"
1516
#include "node_quic_util.h"
1617
#include "v8.h"

src/node_quic_socket.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include "node_quic_crypto.h"
1111
#include "node_quic_session-inl.h"
1212
#include "node_quic_socket.h"
13-
#include "node_quic_util.h"
13+
#include "node_quic_util-inl.h"
1414
#include "req_wrap-inl.h"
1515
#include "util.h"
1616
#include "uv.h"

src/node_quic_stream.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include "node_quic_session-inl.h"
99
#include "node_quic_stream.h"
1010
#include "node_quic_socket.h"
11-
#include "node_quic_util.h"
11+
#include "node_quic_util-inl.h"
1212
#include "v8.h"
1313
#include "uv.h"
1414

src/node_quic_util.cc renamed to src/node_quic_util-inl.h

+52
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,63 @@
1+
#ifndef SRC_NODE_QUIC_UTIL_INL_H_
2+
#define SRC_NODE_QUIC_UTIL_INL_H_
3+
14
#include "node_internals.h"
25
#include "node_quic_util.h"
36
#include "env-inl.h"
7+
#include "string_bytes.h"
48
#include "util-inl.h"
59
#include "uv.h"
610

11+
#include <string>
12+
713
namespace node {
814

915
namespace quic {
1016

17+
std::string QuicCID::ToStr() const {
18+
return std::string(cid_.data, cid_.data + cid_.datalen);
19+
}
20+
21+
std::string QuicCID::ToHex() const {
22+
MaybeStackBuffer<char, 64> dest;
23+
dest.AllocateSufficientStorage(cid_.datalen * 2);
24+
dest.SetLengthAndZeroTerminate(cid_.datalen * 2);
25+
size_t written = StringBytes::hex_encode(
26+
reinterpret_cast<const char*>(cid_.data),
27+
cid_.datalen,
28+
*dest,
29+
dest.length());
30+
return std::string(*dest, written);
31+
}
32+
33+
34+
Timer::Timer(Environment* env, std::function<void()> fn)
35+
: env_(env),
36+
fn_(fn) {
37+
uv_timer_init(env_->event_loop(), &timer_);
38+
timer_.data = this;
39+
}
40+
41+
void Timer::Stop() {
42+
if (stopped_)
43+
return;
44+
stopped_ = true;
45+
46+
if (timer_.data == this) {
47+
uv_timer_stop(&timer_);
48+
timer_.data = nullptr;
49+
}
50+
}
51+
52+
// If the timer is not currently active, interval must be either 0 or greater.
53+
// If the timer is already active, interval is ignored.
54+
void Timer::Update(uint64_t interval) {
55+
if (stopped_)
56+
return;
57+
uv_timer_start(&timer_, OnTimeout, interval, interval);
58+
uv_unref(reinterpret_cast<uv_handle_t*>(&timer_));
59+
}
60+
1161
void Timer::Free(Timer* timer) {
1262
timer->env_->CloseHandle(
1363
reinterpret_cast<uv_handle_t*>(&timer->timer_),
@@ -112,3 +162,5 @@ const char* QuicError::GetFamilyName() {
112162

113163
} // namespace quic
114164
} // namespace node
165+
166+
#endif // SRC_NODE_QUIC_UTIL_INL_H_

src/node_quic_util.h

+16-51
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
55

66
#include "node.h"
7-
#include "node_quic_buffer.h"
8-
#include "string_bytes.h"
97
#include "uv.h"
108
#include "v8.h"
119

@@ -80,18 +78,18 @@ enum QuicErrorFamily : int32_t {
8078
struct QuicError {
8179
int32_t family;
8280
uint64_t code;
83-
QuicError(
81+
inline QuicError(
8482
int32_t family_ = QUIC_ERROR_SESSION,
8583
int code_ = NGTCP2_NO_ERROR);
86-
QuicError(
84+
inline QuicError(
8785
int32_t family_ = QUIC_ERROR_SESSION,
8886
uint64_t code_ = NGTCP2_NO_ERROR);
89-
QuicError(
87+
inline QuicError(
9088
Environment* env,
9189
v8::Local<v8::Value> codeArg,
9290
v8::Local<v8::Value> familyArg = v8::Local<v8::Object>(),
9391
int32_t family_ = QUIC_ERROR_SESSION);
94-
const char* GetFamilyName();
92+
inline const char* GetFamilyName();
9593
};
9694

9795
class SocketAddress {
@@ -269,8 +267,8 @@ class SocketAddress {
269267

270268
struct QuicPath : public ngtcp2_path {
271269
QuicPath(
272-
SocketAddress* local,
273-
SocketAddress* remote) {
270+
SocketAddress* local,
271+
SocketAddress* remote) {
274272
ngtcp2_addr_init(&this->local, **local, local->Size(), nullptr);
275273
ngtcp2_addr_init(&this->remote, **remote, remote->Size(), nullptr);
276274
}
@@ -300,23 +298,9 @@ class QuicCID {
300298
str_ = std::string(cid_.data, cid_.data + cid_.datalen);
301299
}
302300

303-
std::string ToStr() const { return str_; }
304-
305-
std::string ToHex() const {
306-
if (hex_.empty() && cid_.datalen > 0) {
307-
size_t len = cid_.datalen * 2;
308-
MaybeStackBuffer<char, 64> dest;
309-
dest.AllocateSufficientStorage(len);
310-
dest.SetLengthAndZeroTerminate(len);
311-
size_t written = StringBytes::hex_encode(
312-
reinterpret_cast<const char*>(cid_.data),
313-
cid_.datalen,
314-
*dest,
315-
dest.length());
316-
hex_ = std::string(*dest, written);
317-
}
318-
return hex_;
319-
}
301+
inline std::string ToStr() const;
302+
303+
inline std::string ToHex() const;
320304

321305
const ngtcp2_cid* operator*() const { return &cid_; }
322306

@@ -356,43 +340,24 @@ void IncrementStat(
356340
// reset the timer; Stop to halt the timer.
357341
class Timer final : public MemoryRetainer {
358342
public:
359-
explicit Timer(Environment* env, std::function<void()> fn)
360-
: env_(env),
361-
fn_(fn) {
362-
uv_timer_init(env_->event_loop(), &timer_);
363-
timer_.data = this;
364-
}
343+
inline explicit Timer(Environment* env, std::function<void()> fn);
365344

366345
// Stops the timer with the side effect of the timer no longer being usable.
367346
// It will be cleaned up and the Timer object will be destroyed.
368-
void Stop() {
369-
if (stopped_)
370-
return;
371-
stopped_ = true;
372-
373-
if (timer_.data == this) {
374-
uv_timer_stop(&timer_);
375-
timer_.data = nullptr;
376-
}
377-
}
347+
inline void Stop();
378348

379349
// If the timer is not currently active, interval must be either 0 or greater.
380350
// If the timer is already active, interval is ignored.
381-
void Update(uint64_t interval) {
382-
if (stopped_)
383-
return;
384-
uv_timer_start(&timer_, OnTimeout, interval, interval);
385-
uv_unref(reinterpret_cast<uv_handle_t*>(&timer_));
386-
}
351+
inline void Update(uint64_t interval);
387352

388-
static void Free(Timer* timer);
353+
static inline void Free(Timer* timer);
389354

390355
SET_NO_MEMORY_INFO()
391356
SET_MEMORY_INFO_NAME(Timer)
392357
SET_SELF_SIZE(Timer)
393358

394359
private:
395-
static void OnTimeout(uv_timer_t* timer);
360+
static inline void OnTimeout(uv_timer_t* timer);
396361

397362
bool stopped_ = false;
398363
Environment* env_;
@@ -402,8 +367,8 @@ class Timer final : public MemoryRetainer {
402367

403368
using TimerPointer = DeleteFnPtr<Timer, Timer::Free>;
404369

405-
ngtcp2_crypto_level from_ossl_level(OSSL_ENCRYPTION_LEVEL ossl_level);
406-
const char* crypto_level_name(ngtcp2_crypto_level level);
370+
inline ngtcp2_crypto_level from_ossl_level(OSSL_ENCRYPTION_LEVEL ossl_level);
371+
inline const char* crypto_level_name(ngtcp2_crypto_level level);
407372

408373
} // namespace quic
409374
} // namespace node

0 commit comments

Comments
 (0)