MCPcopy
hub / github.com/windtf/wireproxy / ResolveAddrWithContext

Method ResolveAddrWithContext

routine.go:78–119  ·  view source on GitHub ↗

ResolveAddrWithContext resolves a hostname and returns an AddrPort. DNS traffic may or may not be routed depending on VirtualTun's setting

(ctx context.Context, name string)

Source from the content-addressed store, hash-verified

76// ResolveAddrWithContext resolves a hostname and returns an AddrPort.
77// DNS traffic may or may not be routed depending on VirtualTun's setting
78func (d VirtualTun) ResolveAddrWithContext(ctx context.Context, name string) (*netip.Addr, error) {
79 addrs, err := d.LookupAddr(ctx, name)
80 if err != nil {
81 return nil, err
82 }
83
84 addrs_v4 := []netip.Addr{}
85 addrs_v6 := []netip.Addr{}
86
87 for _, saddr := range addrs {
88 addr, err := netip.ParseAddr(saddr)
89 if err == nil {
90 if addr.Is4() {
91 addrs_v4 = append(addrs_v4, addr)
92 } else if addr.Is6() {
93 addrs_v6 = append(addrs_v6, addr)
94 }
95 }
96 }
97
98 rand.Shuffle(len(addrs_v4), func(i, j int) {
99 addrs_v4[i], addrs_v4[j] = addrs_v4[j], addrs_v4[i]
100 })
101 rand.Shuffle(len(addrs_v6), func(i, j int) {
102 addrs_v6[i], addrs_v6[j] = addrs_v6[j], addrs_v6[i]
103 })
104
105 addrs_all := []netip.Addr{}
106
107 switch d.ResolveConfig.ResolveStrategy {
108 case "ipv4":
109 addrs_all = append(addrs_v4, addrs_v6...)
110 case "ipv6":
111 addrs_all = append(addrs_v6, addrs_v4...)
112 }
113
114 if len(addrs_all) == 0 {
115 return nil, errors.New("no address found for: " + name)
116 }
117
118 return &addrs_all[0], nil
119}
120
121// Resolve resolves a hostname and returns an IP.
122// DNS traffic may or may not be routed depending on VirtualTun's setting

Callers 2

ResolveMethod · 0.95
resolveToAddrPortMethod · 0.95

Calls 1

LookupAddrMethod · 0.95

Tested by

no test coverage detected