@@ -443,6 +443,21 @@ func (proxy *DcMulti) Stop() error {
443
443
return nil
444
444
}
445
445
446
+ // refreshRoutes re-adds relay routes to all live/tracked servers
447
+ func (proxy * DcMulti ) refreshRoutes () {
448
+ udp , tcp := route (proxy )
449
+ if len (udp ) <= 0 || len (tcp ) <= 0 {
450
+ log .W ("dnscrypt: refreshRoutes: null relays" )
451
+ }
452
+ n := 0
453
+ for _ , x := range proxy .serversInfo .getAll () {
454
+ x .RelayUDPAddrs = udp // may be empty or nil
455
+ x .RelayTCPAddrs = tcp // may be empty or nil
456
+ n ++
457
+ }
458
+ log .I ("dnscrypt: refreshRoutes: %d/%d for %d servers" , len (udp ), len (tcp ), n )
459
+ }
460
+
446
461
// AddGateways adds relay servers
447
462
func (proxy * DcMulti ) AddGateways (routescsv string ) (int , error ) {
448
463
if len (routescsv ) <= 0 {
@@ -455,7 +470,10 @@ func (proxy *DcMulti) AddGateways(routescsv string) (int, error) {
455
470
r := strings .Split (routescsv , "," )
456
471
cat := xdns .FindUnique (proxy .routes , r )
457
472
proxy .routes = append (proxy .routes , cat ... )
458
- log .I ("dnscrypt: added %d relays %s" , len (cat ), routescsv )
473
+ log .I ("dnscrypt: added %d/%d relays %s" , len (cat ), len (r ), cat )
474
+ if len (cat ) > 0 {
475
+ go proxy .refreshRoutes ()
476
+ }
459
477
return len (cat ), nil
460
478
}
461
479
@@ -471,6 +489,9 @@ func (proxy *DcMulti) RemoveGateways(routescsv string) (int, error) {
471
489
rm := strings .Split (routescsv , "," )
472
490
l := len (proxy .routes )
473
491
proxy .routes = xdns .FindUnique (rm , proxy .routes )
492
+ if l != len (proxy .routes ) { // routes changed
493
+ go proxy .refreshRoutes ()
494
+ }
474
495
return l - len (proxy .routes ), nil
475
496
}
476
497
0 commit comments