You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by sh...@apache.org on 2020/05/13 00:51:19 UTC

[trafficserver] branch master updated: Promote netvc to ProxySession (#6759)

This is an automated email from the ASF dual-hosted git repository.

shinrich pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new dd123e1  Promote netvc to ProxySession (#6759)
dd123e1 is described below

commit dd123e1eaa473bb466266e64873b541a4a50be7c
Author: Susan Hinrichs <sh...@yahoo-inc.com>
AuthorDate: Tue May 12 19:51:09 2020 -0500

    Promote netvc to ProxySession (#6759)
    
    Co-authored-by: Susan Hinrichs <sh...@verizonmedia.com>
---
 proxy/ProxySession.cc             |  53 ++++++++++++++++---
 proxy/ProxySession.h              |  19 ++++++-
 proxy/http/Http1ClientSession.cc  | 106 +++++++++-----------------------------
 proxy/http/Http1ClientSession.h   |  12 -----
 proxy/http2/Http2ClientSession.cc |  89 +++++++++-----------------------
 proxy/http2/Http2ClientSession.h  |   8 ---
 proxy/http3/Http3Session.cc       |  16 +-----
 proxy/http3/Http3Session.h        |   7 +--
 8 files changed, 111 insertions(+), 199 deletions(-)

diff --git a/proxy/ProxySession.cc b/proxy/ProxySession.cc
index ef910ea..3d9c203 100644
--- a/proxy/ProxySession.cc
+++ b/proxy/ProxySession.cc
@@ -28,6 +28,8 @@
 
 ProxySession::ProxySession() : VConnection(nullptr) {}
 
+ProxySession::ProxySession(NetVConnection *vc) : VConnection(nullptr), _vc(vc) {}
+
 void
 ProxySession::set_session_active()
 {
@@ -212,44 +214,49 @@ ProxySession::get_server_session() const
 void
 ProxySession::set_active_timeout(ink_hrtime timeout_in)
 {
+  if (_vc) {
+    _vc->set_active_timeout(timeout_in);
+  }
 }
 
 void
 ProxySession::set_inactivity_timeout(ink_hrtime timeout_in)
 {
+  if (_vc) {
+    _vc->set_inactivity_timeout(timeout_in);
+  }
 }
 
 void
 ProxySession::cancel_inactivity_timeout()
 {
+  if (_vc) {
+    _vc->cancel_inactivity_timeout();
+  }
 }
 
 int
 ProxySession::populate_protocol(std::string_view *result, int size) const
 {
-  auto vc = this->get_netvc();
-  return vc ? vc->populate_protocol(result, size) : 0;
+  return _vc ? _vc->populate_protocol(result, size) : 0;
 }
 
 const char *
 ProxySession::protocol_contains(std::string_view tag_prefix) const
 {
-  auto vc = this->get_netvc();
-  return vc ? vc->protocol_contains(tag_prefix) : nullptr;
+  return _vc ? _vc->protocol_contains(tag_prefix) : nullptr;
 }
 
 sockaddr const *
 ProxySession::get_client_addr()
 {
-  NetVConnection *netvc = get_netvc();
-  return netvc ? netvc->get_remote_addr() : nullptr;
+  return _vc ? _vc->get_remote_addr() : nullptr;
 }
 
 sockaddr const *
 ProxySession::get_local_addr()
 {
-  NetVConnection *netvc = get_netvc();
-  return netvc ? netvc->get_local_addr() : nullptr;
+  return _vc ? _vc->get_local_addr() : nullptr;
 }
 
 void
@@ -261,3 +268,33 @@ ProxySession::_handle_if_ssl(NetVConnection *new_vc)
     _ssl.get()->init(*ssl_vc);
   }
 }
+
+VIO *
+ProxySession::do_io_read(Continuation *c, int64_t nbytes, MIOBuffer *buf)
+{
+  return _vc ? this->_vc->do_io_read(c, nbytes, buf) : nullptr;
+}
+
+VIO *
+ProxySession::do_io_write(Continuation *c, int64_t nbytes, IOBufferReader *buf, bool owner)
+{
+  return _vc ? this->_vc->do_io_write(c, nbytes, buf, owner) : nullptr;
+}
+
+void
+ProxySession::do_io_shutdown(ShutdownHowTo_t howto)
+{
+  this->_vc->do_io_shutdown(howto);
+}
+
+void
+ProxySession::reenable(VIO *vio)
+{
+  this->_vc->reenable(vio);
+}
+
+bool
+ProxySession::support_sni() const
+{
+  return _vc ? _vc->support_sni() : false;
+}
diff --git a/proxy/ProxySession.h b/proxy/ProxySession.h
index d75b84d..f306ffc 100644
--- a/proxy/ProxySession.h
+++ b/proxy/ProxySession.h
@@ -78,6 +78,7 @@ class ProxySession : public VConnection, public PluginUserArgs<TS_USER_ARGS_SSN>
 {
 public:
   ProxySession();
+  ProxySession(NetVConnection *vc);
 
   // noncopyable
   ProxySession(ProxySession &) = delete;
@@ -99,7 +100,7 @@ public:
   virtual void decrement_current_active_client_connections_stat() = 0;
 
   // Virtual Accessors
-  virtual NetVConnection *get_netvc() const       = 0;
+  NetVConnection *get_netvc() const;
   virtual int get_transact_count() const          = 0;
   virtual const char *get_protocol_string() const = 0;
 
@@ -139,7 +140,7 @@ public:
   TSHttpHookID get_hookid() const;
   bool has_hooks() const;
 
-  virtual bool support_sni() const = 0;
+  virtual bool support_sni() const;
 
   APIHook *hook_get(TSHttpHookID id) const;
   HttpAPIHooks const *feature_hooks() const;
@@ -147,6 +148,12 @@ public:
   // Returns null pointer if session does not use a TLS connection.
   SSLProxySession const *ssl() const;
 
+  // Implement VConnection interface
+  VIO *do_io_read(Continuation *c, int64_t nbytes = INT64_MAX, MIOBuffer *buf = nullptr) override;
+  VIO *do_io_write(Continuation *c = nullptr, int64_t nbytes = INT64_MAX, IOBufferReader *buf = 0, bool owner = false) override;
+  void do_io_shutdown(ShutdownHowTo_t howto) override;
+  void reenable(VIO *vio) override;
+
   ////////////////////
   // Members
 
@@ -175,6 +182,8 @@ protected:
   // the new_vc may be an SSLNetVConnection object.
   void _handle_if_ssl(NetVConnection *new_vc);
 
+  NetVConnection *_vc = nullptr; // The netvc associated with the concrete session class
+
 private:
   void handle_api_return(int event);
   int state_api_callout(int event, void *edata);
@@ -267,3 +276,9 @@ ProxySession::ssl() const
 {
   return _ssl.get();
 }
+
+inline NetVConnection *
+ProxySession::get_netvc() const
+{
+  return _vc;
+}
diff --git a/proxy/http/Http1ClientSession.cc b/proxy/http/Http1ClientSession.cc
index 0c402bf..a998a80 100644
--- a/proxy/http/Http1ClientSession.cc
+++ b/proxy/http/Http1ClientSession.cc
@@ -117,9 +117,9 @@ Http1ClientSession::free()
   // Free the transaction resources
   this->trans.super_type::destroy();
 
-  if (client_vc) {
-    client_vc->do_io_close();
-    client_vc = nullptr;
+  if (_vc) {
+    _vc->do_io_close();
+    _vc = nullptr;
   }
 
   super::free();
@@ -130,8 +130,8 @@ void
 Http1ClientSession::new_connection(NetVConnection *new_vc, MIOBuffer *iobuf, IOBufferReader *reader)
 {
   ink_assert(new_vc != nullptr);
-  ink_assert(client_vc == nullptr);
-  client_vc      = new_vc;
+  ink_assert(_vc == nullptr);
+  _vc            = new_vc;
   magic          = HTTP_CS_MAGIC_ALIVE;
   mutex          = new_vc->mutex;
   trans.mutex    = mutex; // Share this mutex with the transaction
@@ -188,7 +188,7 @@ Http1ClientSession::new_connection(NetVConnection *new_vc, MIOBuffer *iobuf, IOB
 
   HttpSsnDebug("[%" PRId64 "] session born, netvc %p", con_id, new_vc);
 
-  client_vc->set_tcp_congestion_control(CLIENT_SIDE);
+  _vc->set_tcp_congestion_control(CLIENT_SIDE);
 
   read_buffer = iobuf ? iobuf : new_MIOBuffer(HTTP_HEADER_BUFFER_SIZE_INDEX);
   _reader     = reader ? reader : read_buffer->alloc_reader();
@@ -207,28 +207,6 @@ Http1ClientSession::new_connection(NetVConnection *new_vc, MIOBuffer *iobuf, IOB
   lmutex.clear();
 }
 
-VIO *
-Http1ClientSession::do_io_read(Continuation *c, int64_t nbytes, MIOBuffer *buf)
-{
-  return (client_vc) ? client_vc->do_io_read(c, nbytes, buf) : nullptr;
-}
-
-VIO *
-Http1ClientSession::do_io_write(Continuation *c, int64_t nbytes, IOBufferReader *buf, bool owner)
-{
-  if (client_vc) {
-    return client_vc->do_io_write(c, nbytes, buf, owner);
-  } else {
-    return nullptr;
-  }
-}
-
-void
-Http1ClientSession::do_io_shutdown(ShutdownHowTo_t howto)
-{
-  client_vc->do_io_shutdown(howto);
-}
-
 void
 Http1ClientSession::do_io_close(int alerrno)
 {
@@ -262,22 +240,22 @@ Http1ClientSession::do_io_close(int alerrno)
     SET_HANDLER(&Http1ClientSession::state_wait_for_close);
     HttpSsnDebug("[%" PRId64 "] session half close", con_id);
 
-    if (client_vc) {
+    if (_vc) {
       // We want the client to know that that we're finished
       //  writing.  The write shutdown accomplishes this.  Unfortunately,
       //  the IO Core semantics don't stop us from getting events
       //  on the write side of the connection like timeouts so we
       //  need to zero out the write of the continuation with
       //  the do_io_write() call (INKqa05309)
-      client_vc->do_io_shutdown(IO_SHUTDOWN_WRITE);
+      _vc->do_io_shutdown(IO_SHUTDOWN_WRITE);
 
-      ka_vio = client_vc->do_io_read(this, INT64_MAX, read_buffer);
+      ka_vio = _vc->do_io_read(this, INT64_MAX, read_buffer);
       ink_assert(slave_ka_vio != ka_vio);
 
       // Set the active timeout to the same as the inactive time so
       //   that this connection does not hang around forever if
       //   the ua hasn't closed
-      client_vc->set_active_timeout(HRTIME_SECONDS(trans.get_sm()->t_state.txn_conf->keep_alive_no_activity_timeout_in));
+      _vc->set_active_timeout(HRTIME_SECONDS(trans.get_sm()->t_state.txn_conf->keep_alive_no_activity_timeout_in));
     }
 
     // [bug 2610799] Drain any data read.
@@ -316,9 +294,9 @@ Http1ClientSession::state_wait_for_close(int event, void *data)
   case VC_EVENT_INACTIVITY_TIMEOUT:
     half_close = false;
     this->do_io_close();
-    if (client_vc != nullptr) {
-      client_vc->do_io_close();
-      client_vc = nullptr;
+    if (_vc != nullptr) {
+      _vc->do_io_close();
+      _vc = nullptr;
     }
     break;
   case VC_EVENT_READ_READY:
@@ -376,7 +354,7 @@ Http1ClientSession::state_slave_keep_alive(int event, void *data)
 int
 Http1ClientSession::state_keep_alive(int event, void *data)
 {
-  // Route the event.  It is either for client vc or
+  // Route the event.  It is either for vc or
   //  the origin server slave vc
   if (data && data == slave_ka_vio) {
     return state_slave_keep_alive(event, data);
@@ -396,9 +374,9 @@ Http1ClientSession::state_keep_alive(int event, void *data)
 
   case VC_EVENT_EOS:
     this->do_io_close();
-    if (client_vc != nullptr) {
-      client_vc->do_io_close();
-      client_vc = nullptr;
+    if (_vc != nullptr) {
+      _vc->do_io_close();
+      _vc = nullptr;
     }
     break;
 
@@ -417,11 +395,6 @@ Http1ClientSession::state_keep_alive(int event, void *data)
 
   return 0;
 }
-void
-Http1ClientSession::reenable(VIO *vio)
-{
-  client_vc->reenable(vio);
-}
 
 // Called from the Http1Transaction::release
 void
@@ -448,9 +421,9 @@ Http1ClientSession::release(ProxyTransaction *trans)
     ka_vio = this->do_io_read(this, INT64_MAX, read_buffer);
     ink_assert(slave_ka_vio != ka_vio);
 
-    if (client_vc) {
-      client_vc->cancel_active_timeout();
-      client_vc->add_to_keep_alive_queue();
+    if (_vc) {
+      _vc->cancel_active_timeout();
+      _vc->add_to_keep_alive_queue();
     }
     trans->destroy();
   }
@@ -460,12 +433,12 @@ void
 Http1ClientSession::new_transaction()
 {
   // If the client connection terminated during API callouts we're done.
-  if (nullptr == client_vc) {
+  if (nullptr == _vc) {
     this->do_io_close(); // calls the SSN_CLOSE hooks to match the SSN_START hooks.
     return;
   }
 
-  if (!client_vc->add_to_active_queue()) {
+  if (!_vc->add_to_active_queue()) {
     // no room in the active queue close the connection
     this->do_io_close();
     return;
@@ -546,7 +519,7 @@ bool
 Http1ClientSession::allow_half_open() const
 {
   // Only allow half open connections if the not over TLS
-  return (client_vc && dynamic_cast<SSLNetVConnection *>(client_vc) == nullptr);
+  return (_vc && dynamic_cast<SSLNetVConnection *>(_vc) == nullptr);
 }
 
 void
@@ -567,12 +540,6 @@ Http1ClientSession::is_chunked_encoding_supported() const
   return true;
 }
 
-NetVConnection *
-Http1ClientSession::get_netvc() const
-{
-  return client_vc;
-}
-
 int
 Http1ClientSession::get_transact_count() const
 {
@@ -591,35 +558,8 @@ Http1ClientSession::get_server_session() const
   return bound_ss;
 }
 
-void
-Http1ClientSession::set_active_timeout(ink_hrtime timeout_in)
-{
-  if (client_vc)
-    client_vc->set_active_timeout(timeout_in);
-}
-
-void
-Http1ClientSession::set_inactivity_timeout(ink_hrtime timeout_in)
-{
-  if (client_vc)
-    client_vc->set_inactivity_timeout(timeout_in);
-}
-
-void
-Http1ClientSession::cancel_inactivity_timeout()
-{
-  if (client_vc)
-    client_vc->cancel_inactivity_timeout();
-}
-
 const char *
 Http1ClientSession::get_protocol_string() const
 {
   return "http";
 }
-
-bool
-Http1ClientSession::support_sni() const
-{
-  return client_vc ? client_vc->support_sni() : false;
-}
diff --git a/proxy/http/Http1ClientSession.h b/proxy/http/Http1ClientSession.h
index 0a624d2..0076219 100644
--- a/proxy/http/Http1ClientSession.h
+++ b/proxy/http/Http1ClientSession.h
@@ -63,34 +63,22 @@ public:
   void attach_server_session(Http1ServerSession *ssession, bool transaction_done = true) override;
 
   // Implement VConnection interface.
-  VIO *do_io_read(Continuation *c, int64_t nbytes = INT64_MAX, MIOBuffer *buf = nullptr) override;
-  VIO *do_io_write(Continuation *c = nullptr, int64_t nbytes = INT64_MAX, IOBufferReader *buf = nullptr,
-                   bool owner = false) override;
-
   void do_io_close(int lerrno = -1) override;
-  void do_io_shutdown(ShutdownHowTo_t howto) override;
-  void reenable(VIO *vio) override;
 
   // Accessor Methods
   bool allow_half_open() const;
   void set_half_close_flag(bool flag) override;
   bool get_half_close_flag() const override;
   bool is_chunked_encoding_supported() const override;
-  NetVConnection *get_netvc() const override;
   int get_transact_count() const override;
   virtual bool is_outbound_transparent() const;
 
   Http1ServerSession *get_server_session() const override;
-  void set_active_timeout(ink_hrtime timeout_in) override;
-  void set_inactivity_timeout(ink_hrtime timeout_in) override;
-  void cancel_inactivity_timeout() override;
   const char *get_protocol_string() const override;
 
   void increment_current_active_client_connections_stat() override;
   void decrement_current_active_client_connections_stat() override;
 
-  bool support_sni() const override;
-
 private:
   Http1ClientSession(Http1ClientSession &);
 
diff --git a/proxy/http2/Http2ClientSession.cc b/proxy/http2/Http2ClientSession.cc
index 2ecfa2e..361f2f8 100644
--- a/proxy/http2/Http2ClientSession.cc
+++ b/proxy/http2/Http2ClientSession.cc
@@ -87,9 +87,9 @@ Http2ClientSession::free()
     this->_reenable_event = nullptr;
   }
 
-  if (client_vc) {
-    client_vc->do_io_close();
-    client_vc = nullptr;
+  if (_vc) {
+    _vc->do_io_close();
+    _vc = nullptr;
   }
 
   // Make sure the we are at the bottom of the stack
@@ -151,7 +151,7 @@ Http2ClientSession::free()
     }
   }
 
-  ink_release_assert(this->client_vc == nullptr);
+  ink_release_assert(this->_vc == nullptr);
 
   delete _h2_pushed_urls;
   this->connection_state.destroy();
@@ -191,9 +191,9 @@ Http2ClientSession::new_connection(NetVConnection *new_vc, MIOBuffer *iobuf, IOB
   this->_milestones.mark(Http2SsnMilestone::OPEN);
 
   // Unique client session identifier.
-  this->con_id    = ProxySession::next_connection_id();
-  this->client_vc = new_vc;
-  client_vc->set_inactivity_timeout(HRTIME_SECONDS(Http2::accept_no_activity_timeout));
+  this->con_id = ProxySession::next_connection_id();
+  this->_vc    = new_vc;
+  _vc->set_inactivity_timeout(HRTIME_SECONDS(Http2::accept_no_activity_timeout));
   this->schedule_event = nullptr;
   this->mutex          = new_vc->mutex;
   this->in_destroy     = false;
@@ -206,9 +206,9 @@ Http2ClientSession::new_connection(NetVConnection *new_vc, MIOBuffer *iobuf, IOB
     Debug("ssl_early_data", "read_from_early_data = %" PRId64, this->read_from_early_data);
   }
 
-  Http2SsnDebug("session born, netvc %p", this->client_vc);
+  Http2SsnDebug("session born, netvc %p", this->_vc);
 
-  this->client_vc->set_tcp_congestion_control(CLIENT_SIDE);
+  this->_vc->set_tcp_congestion_control(CLIENT_SIDE);
 
   this->read_buffer             = iobuf ? iobuf : new_MIOBuffer(HTTP2_HEADER_BUFFER_SIZE_INDEX);
   this->read_buffer->water_mark = connection_state.server_settings.get(HTTP2_SETTINGS_MAX_FRAME_SIZE);
@@ -262,32 +262,6 @@ Http2ClientSession::set_upgrade_context(HTTPHdr *h)
   upgrade_context.req_header->field_delete(MIME_FIELD_HTTP2_SETTINGS, MIME_LEN_HTTP2_SETTINGS);
 }
 
-VIO *
-Http2ClientSession::do_io_read(Continuation *c, int64_t nbytes, MIOBuffer *buf)
-{
-  if (client_vc) {
-    return this->client_vc->do_io_read(c, nbytes, buf);
-  } else {
-    return nullptr;
-  }
-}
-
-VIO *
-Http2ClientSession::do_io_write(Continuation *c, int64_t nbytes, IOBufferReader *buf, bool owner)
-{
-  if (client_vc) {
-    return this->client_vc->do_io_write(c, nbytes, buf, owner);
-  } else {
-    return nullptr;
-  }
-}
-
-void
-Http2ClientSession::do_io_shutdown(ShutdownHowTo_t howto)
-{
-  this->client_vc->do_io_shutdown(howto);
-}
-
 // XXX Currently, we don't have a half-closed state, but we will need to
 // implement that. After we send a GOAWAY, there
 // are scenarios where we would like to complete the outstanding streams.
@@ -313,12 +287,6 @@ Http2ClientSession::do_io_close(int alerrno)
 }
 
 void
-Http2ClientSession::reenable(VIO *vio)
-{
-  this->client_vc->reenable(vio);
-}
-
-void
 Http2ClientSession::set_half_close_local_flag(bool flag)
 {
   if (!half_close_local && flag) {
@@ -377,9 +345,9 @@ Http2ClientSession::main_event_handler(int event, void *edata)
   case VC_EVENT_EOS:
     this->set_dying_event(event);
     this->do_io_close();
-    if (client_vc != nullptr) {
-      client_vc->do_io_close();
-      client_vc = nullptr;
+    if (_vc != nullptr) {
+      _vc->do_io_close();
+      _vc = nullptr;
     }
     retval = 0;
     break;
@@ -461,8 +429,8 @@ Http2ClientSession::state_read_connection_preface(int event, void *edata)
     this->_reader->consume(nbytes);
     HTTP2_SET_SESSION_HANDLER(&Http2ClientSession::state_start_frame_read);
 
-    client_vc->set_inactivity_timeout(HRTIME_SECONDS(Http2::no_activity_timeout_in));
-    client_vc->set_active_timeout(HRTIME_SECONDS(Http2::active_timeout_in));
+    _vc->set_inactivity_timeout(HRTIME_SECONDS(Http2::no_activity_timeout_in));
+    _vc->set_active_timeout(HRTIME_SECONDS(Http2::active_timeout_in));
 
     // XXX start the write VIO ...
 
@@ -676,29 +644,24 @@ Http2ClientSession::_should_do_something_else()
   return (this->_n_frame_read & 0x7F) == 0;
 }
 
-int64_t
-Http2ClientSession::write_avail()
-{
-  return this->write_buffer->write_avail();
-}
-
-NetVConnection *
-Http2ClientSession::get_netvc() const
-{
-  return client_vc;
-}
-
 sockaddr const *
 Http2ClientSession::get_client_addr()
 {
-  return client_vc ? client_vc->get_remote_addr() : &cached_client_addr.sa;
+  return _vc ? _vc->get_remote_addr() : &cached_client_addr.sa;
 }
 
 sockaddr const *
 Http2ClientSession::get_local_addr()
 {
-  return client_vc ? client_vc->get_local_addr() : &cached_local_addr.sa;
+  return _vc ? _vc->get_local_addr() : &cached_local_addr.sa;
 }
+
+int64_t
+Http2ClientSession::write_avail()
+{
+  return this->write_buffer->write_avail();
+}
+
 void
 Http2ClientSession::write_reenable()
 {
@@ -761,9 +724,3 @@ Http2ClientSession::add_url_to_pushed_table(const char *url, int url_len)
     _h2_pushed_urls->emplace(url);
   }
 }
-
-bool
-Http2ClientSession::support_sni() const
-{
-  return client_vc ? client_vc->support_sni() : false;
-}
diff --git a/proxy/http2/Http2ClientSession.h b/proxy/http2/Http2ClientSession.h
index dfdb34c..0f1f64b 100644
--- a/proxy/http2/Http2ClientSession.h
+++ b/proxy/http2/Http2ClientSession.h
@@ -90,11 +90,7 @@ public:
   // Methods
 
   // Implement VConnection interface
-  VIO *do_io_read(Continuation *c, int64_t nbytes = INT64_MAX, MIOBuffer *buf = nullptr) override;
-  VIO *do_io_write(Continuation *c = nullptr, int64_t nbytes = INT64_MAX, IOBufferReader *buf = 0, bool owner = false) override;
   void do_io_close(int lerrno = -1) override;
-  void do_io_shutdown(ShutdownHowTo_t howto) override;
-  void reenable(VIO *vio) override;
 
   // Implement ProxySession interface
   void new_connection(NetVConnection *new_vc, MIOBuffer *iobuf, IOBufferReader *reader) override;
@@ -109,7 +105,6 @@ public:
 
   ////////////////////
   // Accessors
-  NetVConnection *get_netvc() const override;
   sockaddr const *get_client_addr() override;
   sockaddr const *get_local_addr() override;
   int get_transact_count() const override;
@@ -144,8 +139,6 @@ public:
   // Variables
   Http2ConnectionState connection_state;
 
-  bool support_sni() const override;
-
 private:
   int main_event_handler(int, void *);
 
@@ -163,7 +156,6 @@ private:
 
   int64_t total_write_len        = 0;
   SessionHandler session_handler = nullptr;
-  NetVConnection *client_vc      = nullptr;
   MIOBuffer *read_buffer         = nullptr;
   IOBufferReader *_reader        = nullptr;
   MIOBuffer *write_buffer        = nullptr;
diff --git a/proxy/http3/Http3Session.cc b/proxy/http3/Http3Session.cc
index c393c30..db56c3c 100644
--- a/proxy/http3/Http3Session.cc
+++ b/proxy/http3/Http3Session.cc
@@ -118,24 +118,12 @@ HQSession::release(ProxyTransaction *trans)
   return;
 }
 
-NetVConnection *
-HQSession::get_netvc() const
-{
-  return this->_client_vc;
-}
-
 int
 HQSession::get_transact_count() const
 {
   return 0;
 }
 
-bool
-HQSession::support_sni() const
-{
-  return this->_client_vc ? this->_client_vc->support_sni() : false;
-}
-
 //
 // Http3Session
 //
@@ -149,7 +137,7 @@ Http3Session::Http3Session(NetVConnection *vc) : HQSession(vc)
 
 Http3Session::~Http3Session()
 {
-  this->_client_vc = nullptr;
+  this->_vc = nullptr;
   delete this->_local_qpack;
   delete this->_remote_qpack;
 }
@@ -202,7 +190,7 @@ Http3Session::remote_qpack()
 //
 Http09Session::~Http09Session()
 {
-  this->_client_vc = nullptr;
+  this->_vc = nullptr;
 }
 
 const char *
diff --git a/proxy/http3/Http3Session.h b/proxy/http3/Http3Session.h
index f688f8c..6bf5fd2 100644
--- a/proxy/http3/Http3Session.h
+++ b/proxy/http3/Http3Session.h
@@ -32,7 +32,7 @@ class HQSession : public ProxySession
 public:
   using super = ProxySession; ///< Parent type
 
-  HQSession(NetVConnection *vc) : _client_vc(vc){};
+  HQSession(NetVConnection *vc) : ProxySession(vc){};
   virtual ~HQSession();
 
   // Implement VConnection interface
@@ -47,17 +47,12 @@ public:
   void start() override;
   void destroy() override;
   void release(ProxyTransaction *trans) override;
-  NetVConnection *get_netvc() const override;
   int get_transact_count() const override;
-  bool support_sni() const override;
 
   // HQSession
   void add_transaction(HQTransaction *);
   HQTransaction *get_transaction(QUICStreamId);
 
-protected:
-  NetVConnection *_client_vc = nullptr;
-
 private:
   // this should be unordered map?
   Queue<HQTransaction> _transaction_list;