@@ -58,7 +58,7 @@ type serverinfo struct {
5858 UDPAddr * net.UDPAddr
5959 TCPAddr * net.TCPAddr
6060 proxies ipn.ProxyProvider // proxy-provider, may be nil
61- relay ipn. Proxy // proxy relay to use, may be nil
61+ relay string // proxy relay to use, may be nil
6262 est core.P2QuantileEstimator
6363
6464 // fields below are mutable
@@ -260,7 +260,7 @@ func fetchDNSCryptServerInfo(proxy *DcMulti, name string, stamp stamps.ServerSta
260260 RelayTCPAddrs : core .NewZeroVolatile [[]* net.TCPAddr ](), // populated later; see proxy.refreshRoutes()
261261 RelayUDPAddrs : core .NewZeroVolatile [[]* net.UDPAddr ](), // populated later; see proxy.refreshRoutes()
262262 proxies : px ,
263- relay : relay ,
263+ relay : relay . ID (). V () ,
264264 est : core .NewP50Estimator (ctx ),
265265 status : core .NewVolatile (dnsx .Start ),
266266 }
@@ -393,6 +393,18 @@ func (s *serverinfo) getAddr() string {
393393 return s .HostName
394394}
395395
396+ func (s * serverinfo ) GetRelay () x.Proxy {
397+ return s .getRelay ()
398+ }
399+
400+ func (s * serverinfo ) getRelay () ipn.Proxy {
401+ if r := s .relay ; len (r ) > 0 {
402+ px , _ := s .proxies .ProxyFor (r )
403+ return px
404+ }
405+ return nil
406+ }
407+
396408func (s * serverinfo ) IPPorts () []netip.AddrPort {
397409 if relay := s .RelayUDPAddrs .Load (); relay != nil {
398410 return addr2ipp (relay ... )
@@ -413,7 +425,7 @@ func (s *serverinfo) Stop() error {
413425}
414426
415427func (s * serverinfo ) dialudp (pid string , addr * net.UDPAddr ) (net.Conn , error ) {
416- userelay := s .relay != nil
428+ userelay := s .GetRelay () != nil
417429 useproxy := len (pid ) != 0 // pid == dnsx.NetNoProxy => ipn.Base
418430 if userelay || useproxy {
419431 return s .dialpx (pid , "udp" , addr .String ())
@@ -422,7 +434,7 @@ func (s *serverinfo) dialudp(pid string, addr *net.UDPAddr) (net.Conn, error) {
422434}
423435
424436func (s * serverinfo ) dialtcp (pid string , addr * net.TCPAddr ) (net.Conn , error ) {
425- userelay := s .relay != nil
437+ userelay := s .GetRelay () != nil
426438 useproxy := len (pid ) != 0 // pid == dnsx.NetNoProxy => ipn.Base
427439 if userelay || useproxy {
428440 return s .dialpx (pid , "tcp" , addr .String ())
@@ -431,7 +443,7 @@ func (s *serverinfo) dialtcp(pid string, addr *net.TCPAddr) (net.Conn, error) {
431443}
432444
433445func (s * serverinfo ) dialpx (pid , proto string , addr string ) (net.Conn , error ) {
434- relay := s .relay
446+ relay := s .getRelay ()
435447 if relay != nil {
436448 // addr is always ip:port; hence protect.dialers are not needed
437449 return relay .Dialer ().Dial (proto , addr )
0 commit comments