@@ -38,6 +38,7 @@ type Listener = net.Listener
3838type DialFn func (network , addr string ) (net.Conn , error )
3939
4040type RDialer interface {
41+ ID () string
4142 // Dial creates a connection to the given address,
4243 // the resulting net.Conn must be a *net.TCPConn if
4344 // network is "tcp" or "tcp4" or "tcp6" and must be
@@ -83,18 +84,21 @@ var (
8384 errAccept = errors .New ("cannot accept network" )
8485)
8586
86- // Handle implements RDialer.
87- func (d * RDial ) Handle () uintptr {
88- return core .Loc (d )
89- }
90-
9187func (d * RDial ) context () context.Context {
9288 if d .ctx != nil {
9389 return d .ctx
9490 }
9591 return context .Background ()
9692}
9793
94+ // ID implements RDialer.
95+ func (d * RDial ) ID () string {
96+ if d .owner != "" {
97+ return d .owner
98+ }
99+ return "xdial" // ownerless
100+ }
101+
98102// Dial implements RDialer.
99103func (d * RDial ) Dial (network , addr string ) (net.Conn , error ) {
100104 return d .dialer .DialContext (d .context (), network , addr )
@@ -190,7 +194,8 @@ func (d *RDial) Announce(network, local string) (net.PacketConn, error) {
190194 case * net.UDPConn :
191195 return x , nil
192196 default :
193- log .T ("xdial: Announce (o: %s): addr(%s) failed; %T is not net.UDPConn; other errs: %v" , d .owner , local , x , err )
197+ log .T ("xdial: Announce (o: %s): addr(%s) failed; %T is not net.UDPConn; other errs: %v" ,
198+ d .owner , local , x , err )
194199 clos (pc )
195200 return nil , errNoUDPMux
196201 }
@@ -225,13 +230,17 @@ func (d *RDial) Probe(network, local string) (PacketConn, error) {
225230// DialTCP creates a net.TCPConn to raddr.
226231// Helper method for d.Dial("tcp", laddr.String(), raddr.String())
227232func (d * RDial ) DialTCP (network string , laddr , raddr * net.TCPAddr ) (* net.TCPConn , error ) {
233+ return DialTCP (d , network , laddr , raddr )
234+ }
235+
236+ func DialTCP (d RDialer , network string , laddr , raddr * net.TCPAddr ) (* net.TCPConn , error ) {
228237 if c , err := d .DialBind (network , laddr .String (), raddr .String ()); err != nil {
229238 return nil , err
230239 } else if tc , ok := c .(* net.TCPConn ); ok {
231240 return tc , nil
232241 } else {
233242 log .T ("xdial: DialTCP: (%s) to %s => %s, %T is not %T (ok? %t); other errs: %v" ,
234- d .owner , laddr , raddr , c , tc , ok , err )
243+ d .ID () , laddr , raddr , c , tc , ok , err )
235244 // some proxies like wgproxy, socks5 do not vend *net.TCPConn
236245 // also errors if retrier (core.DuplexConn) is looped back here
237246 clos (c )
@@ -242,13 +251,17 @@ func (d *RDial) DialTCP(network string, laddr, raddr *net.TCPAddr) (*net.TCPConn
242251// DialUDP creates a net.UDPConn to raddr.
243252// Helper method for d.Dial("udp", laddr.String(), raddr.String())
244253func (d * RDial ) DialUDP (network string , laddr , raddr * net.UDPAddr ) (* net.UDPConn , error ) {
254+ return DialUDP (d , network , laddr , raddr )
255+ }
256+
257+ func DialUDP (d RDialer , network string , laddr , raddr * net.UDPAddr ) (* net.UDPConn , error ) {
245258 if c , err := d .DialBind (network , laddr .String (), raddr .String ()); err != nil {
246259 return nil , err
247260 } else if uc , ok := c .(* net.UDPConn ); ok {
248261 return uc , nil
249262 } else {
250263 log .T ("xdial: DialUDP: (%s) to %s => %s, %T is not %T (ok? %t); other errs: %v" ,
251- d .owner , laddr , raddr , c , uc , ok , err )
264+ d .ID () , laddr , raddr , c , uc , ok , err )
252265 // some proxies like wgproxy, socks5 do not vend *net.UDPConn
253266 clos (c )
254267 return nil , errNoUDP
@@ -258,13 +271,17 @@ func (d *RDial) DialUDP(network string, laddr, raddr *net.UDPAddr) (*net.UDPConn
258271// AnnounceUDP announces the local address. network must be "udp" or "udp4" or "udp6".
259272// Helper method for d.Announce("udp", local)
260273func (d * RDial ) AnnounceUDP (network , local string ) (* net.UDPConn , error ) {
274+ return AnnounceUDP (d , network , local )
275+ }
276+
277+ func AnnounceUDP (d RDialer , network , local string ) (* net.UDPConn , error ) {
261278 if c , err := d .Announce (network , local ); err != nil {
262279 return nil , err
263280 } else if uc , ok := c .(* net.UDPConn ); ok {
264281 return uc , nil
265282 } else {
266283 log .T ("xdial: AnnounceUDP: (%s) from %s, %T is not %T (ok? %t); other errs: %v" ,
267- d .owner , local , c , uc , ok , err )
284+ d .ID () , local , c , uc , ok , err )
268285 clos (c )
269286 return nil , errNoUDPMux
270287 }
@@ -273,13 +290,17 @@ func (d *RDial) AnnounceUDP(network, local string) (*net.UDPConn, error) {
273290// AcceptTCP creates a listener on the local address. network must be "tcp" or "tcp4" or "tcp6".
274291// Helper method for d.Accept("tcp", local)
275292func (d * RDial ) AcceptTCP (network string , local string ) (* net.TCPListener , error ) {
293+ return AcceptTCP (d , network , local )
294+ }
295+
296+ func AcceptTCP (d RDialer , network string , local string ) (* net.TCPListener , error ) {
276297 if ln , err := d .Accept (network , local ); err != nil {
277298 return nil , err
278299 } else if tl , ok := ln .(* net.TCPListener ); ok {
279300 return tl , nil
280301 } else {
281302 log .T ("xdial: AcceptTCP: (%s) from %s, %T is not %T (ok? %t); other errs: %v" ,
282- d .owner , local , ln , tl , ok , err )
303+ d .ID () , local , ln , tl , ok , err )
283304 clos (ln )
284305 return nil , errNoTCPMux
285306 }
0 commit comments