fix: correct list of addresses for delegated routing (#9920)
Ivan Schasny committed
Jun 7, 2023 at 16:59 UTC
e5b33924a7730aa61c2cda0b8c63c3419a2511a0
4 files changed
+67
-5
cmd/ipfs/daemon.go
+1
-1
@@ -429,7 +429,7 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
429
cfg.Routing.Routers,
430
cfg.Routing.Methods,
431
cfg.Identity.PeerID,
432
- cfg.Addresses.Swarm,
432
+ cfg.Addresses,
433
cfg.Identity.PrivKey,
434
)
435
default:
core/core_test.go
+1
-1
@@ -256,7 +256,7 @@ func GetNode(t *testing.T, reframeURLs ...string) *IpfsNode {
256
cfg.Routing.Routers,
257
cfg.Routing.Methods,
258
cfg.Identity.PeerID,
259
- cfg.Addresses.Swarm,
259
+ cfg.Addresses,
260
cfg.Identity.PrivKey,
261
),
262
},
core/node/libp2p/routingopt.go
+31
-3
@@ -47,7 +47,7 @@ func constructDefaultHTTPRouters(cfg *config.Config) ([]*routinghelpers.Parallel
47
var routers []*routinghelpers.ParallelRouter
48
// Append HTTP routers for additional speed
49
for _, endpoint := range defaultHTTPRouters {
50
- httpRouter, err := irouting.ConstructHTTPRouter(endpoint, cfg.Identity.PeerID, cfg.Addresses.Swarm, cfg.Identity.PrivKey)
50
+ httpRouter, err := irouting.ConstructHTTPRouter(endpoint, cfg.Identity.PeerID, httpAddrsFromConfig(cfg.Addresses), cfg.Identity.PrivKey)
51
if err != nil {
52
return nil, err
53
}
@@ -123,7 +123,7 @@ func constructDHTRouting(mode dht.ModeOpt) RoutingOption {
123
}
124
125
// ConstructDelegatedRouting is used when Routing.Type = "custom"
126
-func ConstructDelegatedRouting(routers config.Routers, methods config.Methods, peerID string, addrs []string, privKey string) RoutingOption {
126
+func ConstructDelegatedRouting(routers config.Routers, methods config.Methods, peerID string, addrs config.Addresses, privKey string) RoutingOption {
127
return func(args RoutingOptionArgs) (routing.Routing, error) {
128
return irouting.Parse(routers, methods,
129
&irouting.ExtraDHTParams{
@@ -135,7 +135,7 @@ func ConstructDelegatedRouting(routers config.Routers, methods config.Methods, p
135
},
136
&irouting.ExtraHTTPParams{
137
PeerID: peerID,
138
- Addrs: addrs,
138
+ Addrs: httpAddrsFromConfig(addrs),
139
PrivKeyB64: privKey,
140
})
141
}
@@ -151,3 +151,31 @@ var (
151
DHTServerOption = constructDHTRouting(dht.ModeServer)
152
NilRouterOption = constructNilRouting
153
)
154
+
155
+// httpAddrsFromConfig creates a list of addresses from the provided configuration to be used by HTTP delegated routers.
156
+func httpAddrsFromConfig(cfgAddrs config.Addresses) []string {
157
+ // Swarm addrs are announced by default
158
+ addrs := cfgAddrs.Swarm
159
+ // if Announce addrs are specified - override Swarm
160
+ if len(cfgAddrs.Announce) > 0 {
161
+ addrs = cfgAddrs.Announce
162
+ } else if len(cfgAddrs.NoAnnounce) > 0 {
163
+ // if Announce adds are not specified - filter Swarm addrs with NoAnnounce list
164
+ maddrs := map[string]struct{}{}
165
+ for _, addr := range addrs {
166
+ maddrs[addr] = struct{}{}
167
+ }
168
+ for _, addr := range cfgAddrs.NoAnnounce {
169
+ delete(maddrs, addr)
170
+ }
171
+ addrs = make([]string, 0, len(maddrs))
172
+ for k := range maddrs {
173
+ addrs = append(addrs, k)
174
+ }
175
+ }
176
+ // append AppendAnnounce addrs to the result list
177
+ if len(cfgAddrs.AppendAnnounce) > 0 {
178
+ addrs = append(addrs, cfgAddrs.AppendAnnounce...)
179
+ }
180
+ return addrs
181
+}
core/node/libp2p/routingopt_test.go
new
+34
@@ -0,0 +1,34 @@
1
+package libp2p
2
+
3
+import (
4
+ "testing"
5
+
6
+ config "github.com/ipfs/kubo/config"
7
+ "github.com/stretchr/testify/require"
8
+)
9
+
10
+func TestHttpAddrsFromConfig(t *testing.T) {
11
+ require.Equal(t, []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
12
+ httpAddrsFromConfig(config.Addresses{
13
+ Swarm: []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
14
+ }), "Swarm addrs should be taken by default")
15
+
16
+ require.Equal(t, []string{"/ip4/192.168.0.1/tcp/4001"},
17
+ httpAddrsFromConfig(config.Addresses{
18
+ Swarm: []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
19
+ Announce: []string{"/ip4/192.168.0.1/tcp/4001"},
20
+ }), "Announce addrs should override Swarm if specified")
21
+
22
+ require.Equal(t, []string{"/ip4/0.0.0.0/udp/4001/quic"},
23
+ httpAddrsFromConfig(config.Addresses{
24
+ Swarm: []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
25
+ NoAnnounce: []string{"/ip4/0.0.0.0/tcp/4001"},
26
+ }), "Swarm addrs should not contain NoAnnounce addrs")
27
+
28
+ require.Equal(t, []string{"/ip4/192.168.0.1/tcp/4001", "/ip4/192.168.0.2/tcp/4001"},
29
+ httpAddrsFromConfig(config.Addresses{
30
+ Swarm: []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
31
+ Announce: []string{"/ip4/192.168.0.1/tcp/4001"},
32
+ AppendAnnounce: []string{"/ip4/192.168.0.2/tcp/4001"},
33
+ }), "AppendAnnounce addrs should be included if specified")
34
+}