@@ -115,6 +115,7 @@ namespace quic {
115115#define SESSION_JS_METHODS (V ) \
116116 V (Destroy, destroy, SIDE_EFFECT) \
117117 V (GetRemoteAddress, getRemoteAddress, NO_SIDE_EFFECT) \
118+ V (GetLocalAddress, getLocalAddress, NO_SIDE_EFFECT) \
118119 V (GetCertificate, getCertificate, NO_SIDE_EFFECT) \
119120 V (GetEphemeralKeyInfo, getEphemeralKey, NO_SIDE_EFFECT) \
120121 V (GetPeerCertificate, getPeerCertificate, NO_SIDE_EFFECT) \
@@ -221,7 +222,7 @@ void ngtcp2_debug_log(void* user_data, const char* fmt, ...) {
221222 va_end (ap);
222223}
223224
224- template <typename Opt, PreferredAddress::Policy Opt::*member>
225+ template <typename Opt, PreferredAddress::Policy Opt::* member>
225226bool SetOption (Environment* env,
226227 Opt* options,
227228 const Local<Object>& object,
@@ -236,7 +237,7 @@ bool SetOption(Environment* env,
236237 return true ;
237238}
238239
239- template <typename Opt, TLSContext::Options Opt::*member>
240+ template <typename Opt, TLSContext::Options Opt::* member>
240241bool SetOption (Environment* env,
241242 Opt* options,
242243 const Local<Object>& object,
@@ -251,7 +252,7 @@ bool SetOption(Environment* env,
251252 return true ;
252253}
253254
254- template <typename Opt, TransportParams::Options Opt::*member>
255+ template <typename Opt, TransportParams::Options Opt::* member>
255256bool SetOption (Environment* env,
256257 Opt* options,
257258 const Local<Object>& object,
@@ -266,7 +267,7 @@ bool SetOption(Environment* env,
266267 return true ;
267268}
268269
269- template <typename Opt, ngtcp2_cc_algo Opt::*member>
270+ template <typename Opt, ngtcp2_cc_algo Opt::* member>
270271bool SetOption (Environment* env,
271272 Opt* options,
272273 const Local<Object>& object,
@@ -712,6 +713,21 @@ struct Session::Impl final : public MemoryRetainer {
712713 ->object ());
713714 }
714715
716+ JS_METHOD (GetLocalAddress) {
717+ auto env = Environment::GetCurrent (args);
718+ Session* session;
719+ ASSIGN_OR_RETURN_UNWRAP (&session, args.This ());
720+
721+ if (session->is_destroyed ()) {
722+ return THROW_ERR_INVALID_STATE (env, " Session is destroyed" );
723+ }
724+
725+ auto address = session->local_address ();
726+ args.GetReturnValue ().Set (
727+ SocketAddressBase::Create (env, std::make_shared<SocketAddress>(address))
728+ ->object ());
729+ }
730+
715731 JS_METHOD (GetCertificate) {
716732 auto env = Environment::GetCurrent (args);
717733 Session* session;
0 commit comments