feat(wrapper): add UnwrapConn to remaining TCP conn wrappers
Add UnwrapConn() to the admission, proxyproto, conn limiter, metrics, and observer/stats TCP connection wrappers, complementing the traffic limiter's limitConn added in the previous commit. This makes the unwrapConn() helper in handler/sshd able to peel through any combination of these wrappers uniformly, keeping the pattern complete and future-proof for handlers that assert on concrete connection types.
This commit is contained in:
@@ -44,6 +44,12 @@ func WrapConn(admission admission.Admission, c net.Conn) net.Conn {
|
||||
}
|
||||
}
|
||||
|
||||
// UnwrapConn returns the underlying connection, allowing type assertions
|
||||
// through wrapper layers.
|
||||
func (c *serverConn) UnwrapConn() net.Conn {
|
||||
return c.Conn
|
||||
}
|
||||
|
||||
// Read checks the remote address against the admission controller
|
||||
// before delegating to the underlying connection. If denied, it returns
|
||||
// io.EOF to signal end-of-stream.
|
||||
|
||||
@@ -14,6 +14,12 @@ type serverConn struct {
|
||||
ctx context.Context
|
||||
}
|
||||
|
||||
// UnwrapConn returns the underlying connection, allowing type assertions
|
||||
// through wrapper layers.
|
||||
func (c *serverConn) UnwrapConn() net.Conn {
|
||||
return c.Conn
|
||||
}
|
||||
|
||||
func (c *serverConn) Context() context.Context {
|
||||
return c.ctx
|
||||
}
|
||||
|
||||
@@ -36,6 +36,12 @@ func WrapConn(limiter limiter.Limiter, c net.Conn) net.Conn {
|
||||
}
|
||||
}
|
||||
|
||||
// UnwrapConn returns the underlying connection, allowing type assertions
|
||||
// through wrapper layers.
|
||||
func (c *serverConn) UnwrapConn() net.Conn {
|
||||
return c.Conn
|
||||
}
|
||||
|
||||
func (c *serverConn) SyscallConn() (rc syscall.RawConn, err error) {
|
||||
if sc, ok := c.Conn.(syscall.Conn); ok {
|
||||
rc, err = sc.SyscallConn()
|
||||
|
||||
@@ -42,6 +42,12 @@ func WrapConn(service string, c net.Conn) net.Conn {
|
||||
}
|
||||
}
|
||||
|
||||
// UnwrapConn returns the underlying connection, allowing type assertions
|
||||
// through wrapper layers.
|
||||
func (c *serverConn) UnwrapConn() net.Conn {
|
||||
return c.Conn
|
||||
}
|
||||
|
||||
func (c *serverConn) Read(b []byte) (n int, err error) {
|
||||
n, err = c.Conn.Read(b)
|
||||
if counter := xmetrics.GetCounter(
|
||||
|
||||
@@ -45,6 +45,12 @@ func WrapConn(c net.Conn, pStats stats.Stats) net.Conn {
|
||||
}
|
||||
}
|
||||
|
||||
// UnwrapConn returns the underlying connection, allowing type assertions
|
||||
// through wrapper layers.
|
||||
func (c *conn) UnwrapConn() net.Conn {
|
||||
return c.Conn
|
||||
}
|
||||
|
||||
func (c *conn) Read(b []byte) (n int, err error) {
|
||||
n, err = c.Conn.Read(b)
|
||||
c.stats.Add(stats.KindInputBytes, int64(n))
|
||||
|
||||
Reference in New Issue
Block a user