package dtls
import (
"net"
"github.com/pion/dtls/v2/pkg/protocol"
"github.com/pion/dtls/v2/pkg/protocol/recordlayer"
"github.com/pion/transport/v2/udp"
)
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
},
}
parent , err := lc .Listen (network , laddr )
if err != nil {
return nil , err
}
return &listener {
config : config ,
parent : parent ,
}, nil
}
func NewListener (inner net .Listener , 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 net .Listener
}
func (l *listener ) Accept () (net .Conn , error ) {
c , err := l .parent .Accept ()
if err != nil {
return nil , err
}
return Server (c , 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 .