|
|
|
|
@ -96,6 +96,7 @@ type Dialer struct { |
|
|
|
|
dnsCache *dnscache.MessageCache // nil until first non-empty SetExitDNSDoH
|
|
|
|
|
nextSysConnID int |
|
|
|
|
activeSysConns map[int]net.Conn // active connections not yet closed
|
|
|
|
|
bus *eventbus.Bus // only used for comparison with already set bus.
|
|
|
|
|
eventClient *eventbus.Client |
|
|
|
|
eventBusSubs eventbus.Monitor |
|
|
|
|
} |
|
|
|
|
@ -226,14 +227,17 @@ func (d *Dialer) NetMon() *netmon.Monitor { |
|
|
|
|
func (d *Dialer) SetBus(bus *eventbus.Bus) { |
|
|
|
|
d.mu.Lock() |
|
|
|
|
defer d.mu.Unlock() |
|
|
|
|
if d.eventClient != nil { |
|
|
|
|
panic("eventbus has already been set") |
|
|
|
|
if d.bus == bus { |
|
|
|
|
return |
|
|
|
|
} else if d.bus != nil { |
|
|
|
|
panic("different eventbus has already been set") |
|
|
|
|
} |
|
|
|
|
// Having multiple watchers could lead to problems,
|
|
|
|
|
// so unregister the callback if it exists.
|
|
|
|
|
if d.netMonUnregister != nil { |
|
|
|
|
d.netMonUnregister() |
|
|
|
|
} |
|
|
|
|
d.bus = bus |
|
|
|
|
d.eventClient = bus.Client("tsdial.Dialer") |
|
|
|
|
d.eventBusSubs = d.eventClient.Monitor(d.linkChangeWatcher(d.eventClient)) |
|
|
|
|
} |
|
|
|
|
|