add a quic.Config option to verify source address tokes

This commit is contained in:
Marten Seemann
2017-05-21 00:28:31 +08:00
parent eb72b494b2
commit 87df63dd5f
9 changed files with 245 additions and 82 deletions

View File

@@ -85,15 +85,36 @@ func Listen(conn net.PacketConn, config *Config) (Listener, error) {
return s, nil
}
var defaultAcceptSTK = func(clientAddr net.Addr, stk *STK) bool {
if stk == nil {
return false
}
if time.Now().After(stk.sentTime.Add(protocol.STKExpiryTime)) {
return false
}
var sourceAddr string
if udpAddr, ok := clientAddr.(*net.UDPAddr); ok {
sourceAddr = udpAddr.IP.String()
} else {
sourceAddr = clientAddr.String()
}
return sourceAddr == stk.remoteAddr
}
func populateServerConfig(config *Config) *Config {
versions := config.Versions
if len(versions) == 0 {
versions = protocol.SupportedVersions
}
vsa := defaultAcceptSTK
if config.AcceptSTK != nil {
vsa = config.AcceptSTK
}
return &Config{
TLSConfig: config.TLSConfig,
Versions: versions,
AcceptSTK: vsa,
}
}
@@ -116,7 +137,7 @@ func (s *server) serve() {
utils.Errorf("error handling packet: %s", err.Error())
}
}
}
}
// Accept returns newly openend sessions
func (s *server) Accept() (Session, error) {