magicsock: plumb through derpTLSConfig variable (for testing)

Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
This commit is contained in:
David Crawshaw 2020-03-04 11:48:24 -05:00 committed by David Crawshaw
parent 9be9738f62
commit a33419167b

View File

@ -8,6 +8,7 @@
import ( import (
"context" "context"
"crypto/tls"
"encoding/binary" "encoding/binary"
"errors" "errors"
"fmt" "fmt"
@ -78,12 +79,13 @@ type Conn struct {
udpRecvCh chan udpReadResult udpRecvCh chan udpReadResult
derpRecvCh chan derpReadResult derpRecvCh chan derpReadResult
derpMu sync.Mutex derpMu sync.Mutex
privateKey key.Private privateKey key.Private
myDerp int // nearest DERP server; 0 means none/unknown myDerp int // nearest DERP server; 0 means none/unknown
derpConn map[int]*derphttp.Client // magic derp port (see derpmap.go) to its client derpConn map[int]*derphttp.Client // magic derp port (see derpmap.go) to its client
derpCancel map[int]context.CancelFunc // to close derp goroutines derpCancel map[int]context.CancelFunc // to close derp goroutines
derpWriteCh map[int]chan<- derpWriteRequest derpWriteCh map[int]chan<- derpWriteRequest
derpTLSConfig *tls.Config // normally nil; used by tests
} }
// udpAddr is the key in the addrsByUDP map. // udpAddr is the key in the addrsByUDP map.
@ -612,6 +614,7 @@ func (c *Conn) derpWriteChanOfAddr(addr *net.UDPAddr) chan<- derpWriteRequest {
c.logf("derphttp.NewClient: port %d, host %q invalid? err: %v", addr.Port, host, err) c.logf("derphttp.NewClient: port %d, host %q invalid? err: %v", addr.Port, host, err)
return nil return nil
} }
dc.TLSConfig = c.derpTLSConfig
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
// TODO: close derp channels (if addr.Port != myDerp) on inactivity timer // TODO: close derp channels (if addr.Port != myDerp) on inactivity timer