|
@@ -13,6 +13,7 @@ import (
|
|
|
|
|
|
type Listener struct {
|
|
type Listener struct {
|
|
net.Listener
|
|
net.Listener
|
|
|
|
+ AcceptNoHeader bool
|
|
}
|
|
}
|
|
|
|
|
|
func (l *Listener) Accept() (net.Conn, error) {
|
|
func (l *Listener) Accept() (net.Conn, error) {
|
|
@@ -22,7 +23,7 @@ func (l *Listener) Accept() (net.Conn, error) {
|
|
}
|
|
}
|
|
bufReader := std_bufio.NewReader(conn)
|
|
bufReader := std_bufio.NewReader(conn)
|
|
header, err := proxyproto.Read(bufReader)
|
|
header, err := proxyproto.Read(bufReader)
|
|
- if err != nil {
|
|
|
|
|
|
+ if err != nil && !(l.AcceptNoHeader && err == proxyproto.ErrNoProxyProtocol) {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
if bufReader.Buffered() > 0 {
|
|
if bufReader.Buffered() > 0 {
|
|
@@ -33,8 +34,11 @@ func (l *Listener) Accept() (net.Conn, error) {
|
|
}
|
|
}
|
|
conn = bufio.NewCachedConn(conn, cache)
|
|
conn = bufio.NewCachedConn(conn, cache)
|
|
}
|
|
}
|
|
- return &bufio.AddrConn{Conn: conn, Metadata: M.Metadata{
|
|
|
|
- Source: M.SocksaddrFromNet(header.SourceAddr),
|
|
|
|
- Destination: M.SocksaddrFromNet(header.DestinationAddr),
|
|
|
|
- }}, nil
|
|
|
|
|
|
+ if header != nil {
|
|
|
|
+ return &bufio.AddrConn{Conn: conn, Metadata: M.Metadata{
|
|
|
|
+ Source: M.SocksaddrFromNet(header.SourceAddr),
|
|
|
|
+ Destination: M.SocksaddrFromNet(header.DestinationAddr),
|
|
|
|
+ }}, nil
|
|
|
|
+ }
|
|
|
|
+ return conn, nil
|
|
}
|
|
}
|