add tls and ws listener

This commit is contained in:
ginuerzh
2021-03-31 23:24:51 +08:00
parent b74e4cc8a4
commit 4e04e7ed86
18 changed files with 518 additions and 42 deletions

View File

@ -6,16 +6,29 @@ import (
"strconv"
"time"
"github.com/go-gost/gost/logger"
"github.com/go-gost/gost/server/listener"
"github.com/go-gost/gost/utils"
)
var (
_ listener.Listener = (*Listener)(nil)
)
type Listener struct {
md metadata
net.Listener
logger logger.Logger
}
func NewTCPListener() *Listener {
return &Listener{}
func NewListener(opts ...listener.Option) *Listener {
options := &listener.Options{}
for _, opt := range opts {
opt(options)
}
return &Listener{
logger: options.Logger,
}
}
func (l *Listener) Init(md listener.Metadata) (err error) {
@ -34,9 +47,9 @@ func (l *Listener) Init(md listener.Metadata) (err error) {
}
if l.md.keepAlive {
l.Listener = &keepAliveListener{
l.Listener = &utils.TCPKeepAliveListener{
TCPListener: ln,
keepAlivePeriod: l.md.keepAlivePeriod,
KeepAlivePeriod: l.md.keepAlivePeriod,
}
return
}
@ -49,7 +62,7 @@ func (l *Listener) parseMetadata(md listener.Metadata) (m metadata, err error) {
if val, ok := md[addr]; ok {
m.addr = val
} else {
err = errors.New("tcp listener: missing address")
err = errors.New("missing address")
return
}
@ -61,26 +74,6 @@ func (l *Listener) parseMetadata(md listener.Metadata) (m metadata, err error) {
if val, ok := md[keepAlivePeriod]; ok {
m.keepAlivePeriod, _ = time.ParseDuration(val)
}
if m.keepAlivePeriod <= 0 {
m.keepAlivePeriod = defaultKeepAlivePeriod
}
return
}
type keepAliveListener struct {
keepAlivePeriod time.Duration
*net.TCPListener
}
func (l *keepAliveListener) Accept() (c net.Conn, err error) {
tc, err := l.AcceptTCP()
if err != nil {
return
}
tc.SetKeepAlive(true)
tc.SetKeepAlivePeriod(l.keepAlivePeriod)
return tc, nil
}