2017-08-23 16:35:39 +08:00
|
|
|
package main
|
|
|
|
|
|
|
|
import "net"
|
|
|
|
|
2017-09-10 20:33:35 +08:00
|
|
|
// Forwarder struct
|
2017-08-23 16:35:39 +08:00
|
|
|
type Forwarder struct {
|
|
|
|
addr string
|
|
|
|
cDialer Dialer
|
|
|
|
}
|
|
|
|
|
2017-09-10 20:33:35 +08:00
|
|
|
// NewForwarder returns a base forwarder
|
2017-08-23 16:35:39 +08:00
|
|
|
func NewForwarder(addr string, cDialer Dialer) *Forwarder {
|
|
|
|
if cDialer == nil {
|
|
|
|
cDialer = Direct
|
|
|
|
}
|
|
|
|
|
|
|
|
return &Forwarder{addr: addr, cDialer: cDialer}
|
|
|
|
}
|
|
|
|
|
2017-09-10 20:33:35 +08:00
|
|
|
// Addr returns forwarder's address
|
2017-08-23 16:35:39 +08:00
|
|
|
func (p *Forwarder) Addr() string { return p.addr }
|
|
|
|
|
2017-09-10 20:33:35 +08:00
|
|
|
// Dial to remote addr via cDialer
|
2017-08-23 16:35:39 +08:00
|
|
|
func (p *Forwarder) Dial(network, addr string) (net.Conn, error) {
|
|
|
|
return p.cDialer.Dial(network, addr)
|
|
|
|
}
|
2017-08-23 17:45:57 +08:00
|
|
|
|
2017-09-10 20:33:35 +08:00
|
|
|
// NextDialer returns the next cDialer
|
2017-08-23 17:45:57 +08:00
|
|
|
func (p *Forwarder) NextDialer(dstAddr string) Dialer {
|
|
|
|
return p.cDialer
|
|
|
|
}
|