...
1
18
19
20 package unix
21
22 import (
23 "fmt"
24
25 "google.golang.org/grpc/internal/transport/networktype"
26 "google.golang.org/grpc/resolver"
27 )
28
29 const unixScheme = "unix"
30 const unixAbstractScheme = "unix-abstract"
31
32 type builder struct {
33 scheme string
34 }
35
36 func (b *builder) Build(target resolver.Target, cc resolver.ClientConn, _ resolver.BuildOptions) (resolver.Resolver, error) {
37 if target.URL.Host != "" {
38 return nil, fmt.Errorf("invalid (non-empty) authority: %v", target.URL.Host)
39 }
40
41
42
43
44
45
46 endpoint := target.URL.Path
47 if endpoint == "" {
48 endpoint = target.URL.Opaque
49 }
50 addr := resolver.Address{Addr: endpoint}
51 if b.scheme == unixAbstractScheme {
52
53
54 addr.Addr = "@" + addr.Addr
55 }
56 cc.UpdateState(resolver.State{Addresses: []resolver.Address{networktype.Set(addr, "unix")}})
57 return &nopResolver{}, nil
58 }
59
60 func (b *builder) Scheme() string {
61 return b.scheme
62 }
63
64 func (b *builder) OverrideAuthority(resolver.Target) string {
65 return "localhost"
66 }
67
68 type nopResolver struct {
69 }
70
71 func (*nopResolver) ResolveNow(resolver.ResolveNowOptions) {}
72
73 func (*nopResolver) Close() {}
74
75 func init() {
76 resolver.Register(&builder{scheme: unixScheme})
77 resolver.Register(&builder{scheme: unixAbstractScheme})
78 }
79
View as plain text