...
1 package client
2
3 import (
4 "context"
5 "fmt"
6 "golang.conradwood.net/go-easyops/cmdline"
7 "golang.conradwood.net/go-easyops/standalone"
8 "net"
9 "strings"
10 )
11
12 const (
13 DIRECT_PREFIX = "direct://"
14 PROXY_PREFIX = "proxy://"
15 )
16
17
18 func CustomDialer(ctx context.Context, name string) (net.Conn, error) {
19 if cmdline.IsStandalone() {
20 return standalone.DialService(ctx, name)
21 }
22
23 if *dialer_debug {
24 fmt.Printf("[go-easyops] custom dialling \"%s\"\n", name)
25 }
26 t := name
27 if strings.HasPrefix(name, PROXY_PREFIX) {
28 sid := t[len(PROXY_PREFIX):]
29 pt, err := GetProxyTarget(ctx, sid)
30 if err != nil {
31 return nil, err
32 }
33 if pt == nil {
34 return nil, fmt.Errorf("no such proxy service: \"%s\"", name)
35 }
36 return pt.tcpConn, nil
37 }
38 if strings.HasPrefix(name, DIRECT_PREFIX) {
39 t = t[len(DIRECT_PREFIX):]
40 }
41 if *dialer_debug {
42 fmt.Printf("Dialing: %s (%s)\n", name, t)
43 }
44 return (&net.Dialer{}).DialContext(ctx, "tcp", t)
45 }
46
View as plain text