2019-09-18 19:40:14 +08:00
|
|
|
package proxy
|
|
|
|
|
2022-03-13 18:03:10 +08:00
|
|
|
import (
|
|
|
|
"net"
|
|
|
|
"strings"
|
|
|
|
)
|
2019-09-18 19:40:14 +08:00
|
|
|
|
2020-09-24 18:50:04 +08:00
|
|
|
// Proxy is a dialer manager.
|
2019-09-18 19:40:14 +08:00
|
|
|
type Proxy interface {
|
|
|
|
// Dial connects to the given address via the proxy.
|
2020-04-28 15:18:19 +08:00
|
|
|
Dial(network, addr string) (c net.Conn, dialer Dialer, err error)
|
2019-09-18 19:40:14 +08:00
|
|
|
|
|
|
|
// DialUDP connects to the given address via the proxy.
|
2022-03-11 19:08:07 +08:00
|
|
|
DialUDP(network, addr string) (pc net.PacketConn, dialer UDPDialer, err error)
|
2019-09-18 19:40:14 +08:00
|
|
|
|
2020-04-29 18:45:58 +08:00
|
|
|
// Get the dialer by dstAddr.
|
2019-09-18 19:40:14 +08:00
|
|
|
NextDialer(dstAddr string) Dialer
|
2020-04-28 15:18:19 +08:00
|
|
|
|
|
|
|
// Record records result while using the dialer from proxy.
|
|
|
|
Record(dialer Dialer, success bool)
|
2019-09-18 19:40:14 +08:00
|
|
|
}
|
2022-03-13 18:03:10 +08:00
|
|
|
|
2022-03-14 13:06:26 +08:00
|
|
|
var (
|
|
|
|
msg strings.Builder
|
|
|
|
usages = make(map[string]string)
|
|
|
|
)
|
2022-03-13 18:03:10 +08:00
|
|
|
|
|
|
|
// AddUsage adds help message for the named proxy.
|
2022-03-14 13:06:26 +08:00
|
|
|
func AddUsage(name, usage string) {
|
|
|
|
usages[name] = usage
|
|
|
|
msg.WriteString(usage)
|
|
|
|
msg.WriteString("\n--")
|
|
|
|
}
|
2022-03-13 18:03:10 +08:00
|
|
|
|
|
|
|
// Usage returns help message of the named proxy.
|
|
|
|
func Usage(name string) string {
|
|
|
|
if name == "all" {
|
|
|
|
return msg.String()
|
|
|
|
}
|
|
|
|
|
|
|
|
if usage, ok := usages[name]; ok {
|
|
|
|
return usage
|
|
|
|
}
|
|
|
|
|
|
|
|
return "can not find usage for: " + name
|
|
|
|
}
|