package dtls
import (
"net"
"github.com/pion/dtls/v3/internal/net/udp"
dtlsnet "github.com/pion/dtls/v3/pkg/net"
"github.com/pion/dtls/v3/pkg/protocol"
"github.com/pion/dtls/v3/pkg/protocol/recordlayer"
)
func Listen (network string , laddr *net .UDPAddr , config *Config ) (net .Listener , error ) {
if err := validateConfig (config ); err != nil {
return nil , err
}
lc := udp .ListenConfig {
AcceptFilter : func (packet []byte ) bool {
pkts , err := recordlayer .UnpackDatagram (packet )
if err != nil || len (pkts ) < 1 {
return false
}
h := &recordlayer .Header {}
if err := h .Unmarshal (pkts [0 ]); err != nil {
return false
}
return h .ContentType == protocol .ContentTypeHandshake
},
}
if config .ConnectionIDGenerator != nil {
lc .DatagramRouter = cidDatagramRouter (len (config .ConnectionIDGenerator ()))
lc .ConnectionIdentifier = cidConnIdentifier ()
}
parent , err := lc .Listen (network , laddr )
if err != nil {
return nil , err
}
return &listener {
config : config ,
parent : parent ,
}, nil
}
func NewListener (inner dtlsnet .PacketListener , config *Config ) (net .Listener , error ) {
if err := validateConfig (config ); err != nil {
return nil , err
}
return &listener {
config : config ,
parent : inner ,
}, nil
}
type listener struct {
config *Config
parent dtlsnet .PacketListener
}
func (l *listener ) Accept () (net .Conn , error ) {
c , raddr , err := l .parent .Accept ()
if err != nil {
return nil , err
}
return Server (c , raddr , l .config )
}
func (l *listener ) Close () error {
return l .parent .Close ()
}
func (l *listener ) Addr () net .Addr {
return l .parent .Addr ()
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .