call the ConnStateCallback in the server for encryption level changes

ref #439
This commit is contained in:
Marten Seemann
2017-02-24 08:42:49 +07:00
parent d0777fe7fa
commit 820eb2e6ee
6 changed files with 63 additions and 20 deletions

View File

@@ -36,7 +36,7 @@ type server struct {
sessionsMutex sync.RWMutex
deleteClosedSessionsAfter time.Duration
newSession func(conn connection, v protocol.VersionNumber, connectionID protocol.ConnectionID, sCfg *handshake.ServerConfig, closeCallback closeCallback) (packetHandler, error)
newSession func(conn connection, v protocol.VersionNumber, connectionID protocol.ConnectionID, sCfg *handshake.ServerConfig, closeCallback closeCallback, cryptoChangeCallback cryptoChangeCallback) (packetHandler, error)
}
var _ Listener = &server{}
@@ -185,6 +185,7 @@ func (s *server) handlePacket(pconn net.PacketConn, remoteAddr net.Addr, packet
hdr.ConnectionID,
s.scfg,
s.closeCallback,
s.cryptoChangeCallback,
)
if err != nil {
return err
@@ -210,6 +211,18 @@ func (s *server) handlePacket(pconn net.PacketConn, remoteAddr net.Addr, packet
return nil
}
func (s *server) cryptoChangeCallback(session Session, isForwardSecure bool) {
var state ConnState
if isForwardSecure {
state = ConnStateForwardSecure
} else {
state = ConnStateSecure
}
if s.config.ConnState != nil {
go s.config.ConnState(session, state)
}
}
func (s *server) closeCallback(id protocol.ConnectionID) {
s.sessionsMutex.Lock()
s.sessions[id] = nil