add proxyProtocol support for dialer

This commit is contained in:
ginuerzh
2025-08-03 15:36:29 +08:00
parent f71351f5ef
commit ad5cf6fd61
23 changed files with 260 additions and 48 deletions
-4
View File
@@ -214,10 +214,6 @@ func (c *conn) RemoteAddr() net.Addr {
return c.remoteAddr
}
func (c *conn) SetReadDeadline(t time.Time) error {
return nil
}
func (c *conn) IsIdle() bool {
return atomic.LoadInt32(&c.idle) > 0
}
+23
View File
@@ -4,6 +4,8 @@ import (
"net"
"time"
"github.com/go-gost/core/metadata"
xnet "github.com/go-gost/x/internal/net"
smux "github.com/xtaci/smux"
)
@@ -143,6 +145,27 @@ func (c *streamConn) Write(b []byte) (n int, err error) {
return c.stream.Write(b)
}
func (c *streamConn) Metadata() metadata.Metadata {
if md, ok := c.Conn.(metadata.Metadatable); ok {
return md.Metadata()
}
return nil
}
func (c *streamConn) SrcAddr() net.Addr {
if sc, ok := c.Conn.(xnet.SrcAddr); ok {
return sc.SrcAddr()
}
return nil
}
func (c *streamConn) DstAddr() net.Addr {
if sc, ok := c.Conn.(xnet.DstAddr); ok {
return sc.DstAddr()
}
return nil
}
func (c *streamConn) Close() error {
return c.stream.Close()
}
+56
View File
@@ -0,0 +1,56 @@
package tls
import (
"crypto/tls"
"net"
"github.com/go-gost/core/metadata"
xnet "github.com/go-gost/x/internal/net"
)
type listener struct {
net.Listener
config *tls.Config
}
func NewListener(inner net.Listener, config *tls.Config) net.Listener {
l := new(listener)
l.Listener = inner
l.config = config
return l
}
func (l *listener) Accept() (net.Conn, error) {
c, err := l.Listener.Accept()
if err != nil {
return nil, err
}
return &tlsConn{
Conn: tls.Server(c, l.config),
}, nil
}
type tlsConn struct {
*tls.Conn
}
func (c *tlsConn) Metadata() metadata.Metadata {
if md, ok := c.NetConn().(metadata.Metadatable); ok {
return md.Metadata()
}
return nil
}
func (c *tlsConn) SrcAddr() net.Addr {
if sc, ok := c.NetConn().(xnet.SrcAddr); ok {
return sc.SrcAddr()
}
return nil
}
func (c *tlsConn) DstAddr() net.Addr {
if sc, ok := c.NetConn().(xnet.DstAddr); ok {
return sc.DstAddr()
}
return nil
}
+3
View File
@@ -81,6 +81,9 @@ func (c *websocketConn) SetWriteDeadline(t time.Time) error {
}
func (c *websocketConn) SrcAddr() net.Addr {
if sa, ok := c.Conn.NetConn().(xnet.SrcAddr); ok {
return sa.SrcAddr()
}
return c.srcAddr
}