add proxyProtocol support for dialer
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user