@@ -58,13 +58,15 @@ void BindingData::DecreaseAllocatedSize(size_t size) {
5858
5959void BindingData::Initialize (Environment* env, Local<Object> target) {
6060 SetMethod (env->context (), target, " setCallbacks" , SetCallbacks);
61+ SetMethod (env->context (), target, " flushPacketFreelist" , FlushPacketFreelist);
6162 Realm::GetCurrent (env->context ())
6263 ->AddBindingData <BindingData>(env->context (), target);
6364}
6465
6566void BindingData::RegisterExternalReferences (
6667 ExternalReferenceRegistry* registry) {
6768 registry->Register (SetCallbacks);
69+ registry->Register (FlushPacketFreelist);
6870}
6971
7072BindingData::BindingData (Realm* realm, Local<Object> object)
@@ -140,7 +142,7 @@ QUIC_JS_CALLBACKS(V)
140142void BindingData::SetCallbacks (const FunctionCallbackInfo<Value>& args) {
141143 auto env = Environment::GetCurrent (args);
142144 auto isolate = env->isolate ();
143- BindingData & state = BindingData::Get (env);
145+ auto & state = BindingData::Get (env);
144146 CHECK (args[0 ]->IsObject ());
145147 Local<Object> obj = args[0 ].As <Object>();
146148
@@ -159,6 +161,48 @@ void BindingData::SetCallbacks(const FunctionCallbackInfo<Value>& args) {
159161#undef V
160162}
161163
164+ void BindingData::FlushPacketFreelist (const FunctionCallbackInfo<Value>& args) {
165+ auto env = Environment::GetCurrent (args);
166+ auto & state = BindingData::Get (env);
167+ state.packet_freelist .clear ();
168+ }
169+
170+ NgTcp2CallbackScope::NgTcp2CallbackScope (Environment* env) : env(env) {
171+ auto & binding = BindingData::Get (env);
172+ CHECK (!binding.in_ngtcp2_callback_scope );
173+ binding.in_ngtcp2_callback_scope = true ;
174+ }
175+
176+ NgTcp2CallbackScope::~NgTcp2CallbackScope () {
177+ auto & binding = BindingData::Get (env);
178+ binding.in_ngtcp2_callback_scope = false ;
179+ }
180+
181+ bool NgTcp2CallbackScope::in_ngtcp2_callback (Environment* env) {
182+ auto & binding = BindingData::Get (env);
183+ return binding.in_ngtcp2_callback_scope ;
184+ }
185+
186+ NgHttp3CallbackScope::NgHttp3CallbackScope (Environment* env) : env(env) {
187+ auto & binding = BindingData::Get (env);
188+ CHECK (!binding.in_nghttp3_callback_scope );
189+ binding.in_nghttp3_callback_scope = true ;
190+ }
191+
192+ NgHttp3CallbackScope::~NgHttp3CallbackScope () {
193+ auto & binding = BindingData::Get (env);
194+ binding.in_nghttp3_callback_scope = false ;
195+ }
196+
197+ bool NgHttp3CallbackScope::in_nghttp3_callback (Environment* env) {
198+ auto & binding = BindingData::Get (env);
199+ return binding.in_nghttp3_callback_scope ;
200+ }
201+
202+ void IllegalConstructor (const FunctionCallbackInfo<Value>& args) {
203+ THROW_ERR_ILLEGAL_CONSTRUCTOR (Environment::GetCurrent (args));
204+ }
205+
162206} // namespace quic
163207} // namespace node
164208