diff --git a/listener/http3/wt/listener.go b/listener/http3/wt/listener.go index 91b4b059..3212736d 100644 --- a/listener/http3/wt/listener.go +++ b/listener/http3/wt/listener.go @@ -74,10 +74,12 @@ func (l *wtListener) Init(md md.Metadata) (err error) { return } - pc = metrics.WrapPacketConn(l.options.Service, pc) - pc = stats.WrapPacketConn(pc, l.options.Stats) - pc = admission.WrapPacketConn(l.options.Admission, pc) - pc = limiter_wrapper.WrapPacketConn( + pc = metrics.WrapUDPConn(l.options.Service, pc) + if l.options.Stats != nil { + pc = stats.WrapUDPConn(pc, l.options.Stats) + } + pc = admission.WrapUDPConn(l.options.Admission, pc) + pc = limiter_wrapper.WrapUDPConn( pc, l.options.TrafficLimiter, traffic_limiter.ServiceLimitKey, diff --git a/listener/quic/listener.go b/listener/quic/listener.go index 939c5701..455cc748 100644 --- a/listener/quic/listener.go +++ b/listener/quic/listener.go @@ -70,20 +70,33 @@ func (l *quicListener) Init(md md.Metadata) (err error) { } if l.md.cipherKey != nil { conn = quic_util.CipherPacketConn(conn, l.md.cipherKey) + conn = metrics.WrapPacketConn(l.options.Service, conn) + conn = stats.WrapPacketConn(conn, l.options.Stats) + conn = admission.WrapPacketConn(l.options.Admission, conn) + conn = limiter_wrapper.WrapPacketConn( + conn, + l.options.TrafficLimiter, + traffic_limiter.ServiceLimitKey, + limiter.ScopeOption(limiter.ScopeService), + limiter.ServiceOption(l.options.Service), + limiter.NetworkOption(conn.LocalAddr().Network()), + ) + } else { + conn = metrics.WrapUDPConn(l.options.Service, conn) + if l.options.Stats != nil { + conn = stats.WrapUDPConn(conn, l.options.Stats) + } + conn = admission.WrapUDPConn(l.options.Admission, conn) + conn = limiter_wrapper.WrapUDPConn( + conn, + l.options.TrafficLimiter, + traffic_limiter.ServiceLimitKey, + limiter.ScopeOption(limiter.ScopeService), + limiter.ServiceOption(l.options.Service), + limiter.NetworkOption(conn.LocalAddr().Network()), + ) } - conn = metrics.WrapPacketConn(l.options.Service, conn) - conn = stats.WrapPacketConn(conn, l.options.Stats) - conn = admission.WrapPacketConn(l.options.Admission, conn) - conn = limiter_wrapper.WrapPacketConn( - conn, - l.options.TrafficLimiter, - traffic_limiter.ServiceLimitKey, - limiter.ScopeOption(limiter.ScopeService), - limiter.ServiceOption(l.options.Service), - limiter.NetworkOption(conn.LocalAddr().Network()), - ) - config := &quic.Config{ KeepAlivePeriod: l.md.keepAlivePeriod, HandshakeIdleTimeout: l.md.handshakeTimeout,