lib/connections: Accept new connections in place of old ones (fixes #5224) (#6548)

This commit is contained in:
MikolajTwarog 2020-04-20 08:23:38 +02:00 committed by GitHub
parent 49798552f2
commit 4aa2199d5b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 6 deletions

View File

@ -46,8 +46,9 @@ var (
)
const (
perDeviceWarningIntv = 15 * time.Minute
tlsHandshakeTimeout = 10 * time.Second
perDeviceWarningIntv = 15 * time.Minute
tlsHandshakeTimeout = 10 * time.Second
minConnectionReplaceAge = 10 * time.Second
)
// From go/src/crypto/tls/cipher_suites.go
@ -276,7 +277,7 @@ func (s *service) handle(ctx context.Context) {
ct, connected := s.model.Connection(remoteID)
// Lower priority is better, just like nice etc.
if connected && ct.Priority() > c.priority {
if connected && (ct.Priority() > c.priority || time.Since(ct.Statistics().StartedAt) > minConnectionReplaceAge) {
l.Debugf("Switching connections %s (existing: %s new: %s)", remoteID, ct, c)
} else if connected {
// We should not already be connected to the other party. TODO: This

View File

@ -145,9 +145,10 @@ type Connection interface {
}
type rawConnection struct {
id DeviceID
name string
receiver Model
id DeviceID
name string
receiver Model
startTime time.Time
cr *countingReader
cw *countingWriter
@ -236,6 +237,7 @@ func (c *rawConnection) Start() {
go c.writerLoop()
go c.pingSender()
go c.pingReceiver()
c.startTime = time.Now()
}
func (c *rawConnection) ID() DeviceID {
@ -958,6 +960,7 @@ type Statistics struct {
At time.Time
InBytesTotal int64
OutBytesTotal int64
StartedAt time.Time
}
func (c *rawConnection) Statistics() Statistics {
@ -965,6 +968,7 @@ func (c *rawConnection) Statistics() Statistics {
At: time.Now(),
InBytesTotal: c.cr.Tot(),
OutBytesTotal: c.cw.Tot(),
StartedAt: c.startTime,
}
}