mirror of
https://github.com/ipfs/kubo.git
synced 2025-08-06 11:31:54 +08:00
fix: correct list of addresses for delegated routing (#9920)
This commit is contained in:
@ -429,7 +429,7 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
|
|||||||
cfg.Routing.Routers,
|
cfg.Routing.Routers,
|
||||||
cfg.Routing.Methods,
|
cfg.Routing.Methods,
|
||||||
cfg.Identity.PeerID,
|
cfg.Identity.PeerID,
|
||||||
cfg.Addresses.Swarm,
|
cfg.Addresses,
|
||||||
cfg.Identity.PrivKey,
|
cfg.Identity.PrivKey,
|
||||||
)
|
)
|
||||||
default:
|
default:
|
||||||
|
@ -256,7 +256,7 @@ func GetNode(t *testing.T, reframeURLs ...string) *IpfsNode {
|
|||||||
cfg.Routing.Routers,
|
cfg.Routing.Routers,
|
||||||
cfg.Routing.Methods,
|
cfg.Routing.Methods,
|
||||||
cfg.Identity.PeerID,
|
cfg.Identity.PeerID,
|
||||||
cfg.Addresses.Swarm,
|
cfg.Addresses,
|
||||||
cfg.Identity.PrivKey,
|
cfg.Identity.PrivKey,
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
@ -47,7 +47,7 @@ func constructDefaultHTTPRouters(cfg *config.Config) ([]*routinghelpers.Parallel
|
|||||||
var routers []*routinghelpers.ParallelRouter
|
var routers []*routinghelpers.ParallelRouter
|
||||||
// Append HTTP routers for additional speed
|
// Append HTTP routers for additional speed
|
||||||
for _, endpoint := range defaultHTTPRouters {
|
for _, endpoint := range defaultHTTPRouters {
|
||||||
httpRouter, err := irouting.ConstructHTTPRouter(endpoint, cfg.Identity.PeerID, cfg.Addresses.Swarm, cfg.Identity.PrivKey)
|
httpRouter, err := irouting.ConstructHTTPRouter(endpoint, cfg.Identity.PeerID, httpAddrsFromConfig(cfg.Addresses), cfg.Identity.PrivKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -123,7 +123,7 @@ func constructDHTRouting(mode dht.ModeOpt) RoutingOption {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ConstructDelegatedRouting is used when Routing.Type = "custom"
|
// ConstructDelegatedRouting is used when Routing.Type = "custom"
|
||||||
func ConstructDelegatedRouting(routers config.Routers, methods config.Methods, peerID string, addrs []string, privKey string) RoutingOption {
|
func ConstructDelegatedRouting(routers config.Routers, methods config.Methods, peerID string, addrs config.Addresses, privKey string) RoutingOption {
|
||||||
return func(args RoutingOptionArgs) (routing.Routing, error) {
|
return func(args RoutingOptionArgs) (routing.Routing, error) {
|
||||||
return irouting.Parse(routers, methods,
|
return irouting.Parse(routers, methods,
|
||||||
&irouting.ExtraDHTParams{
|
&irouting.ExtraDHTParams{
|
||||||
@ -135,7 +135,7 @@ func ConstructDelegatedRouting(routers config.Routers, methods config.Methods, p
|
|||||||
},
|
},
|
||||||
&irouting.ExtraHTTPParams{
|
&irouting.ExtraHTTPParams{
|
||||||
PeerID: peerID,
|
PeerID: peerID,
|
||||||
Addrs: addrs,
|
Addrs: httpAddrsFromConfig(addrs),
|
||||||
PrivKeyB64: privKey,
|
PrivKeyB64: privKey,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -151,3 +151,31 @@ var (
|
|||||||
DHTServerOption = constructDHTRouting(dht.ModeServer)
|
DHTServerOption = constructDHTRouting(dht.ModeServer)
|
||||||
NilRouterOption = constructNilRouting
|
NilRouterOption = constructNilRouting
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// httpAddrsFromConfig creates a list of addresses from the provided configuration to be used by HTTP delegated routers.
|
||||||
|
func httpAddrsFromConfig(cfgAddrs config.Addresses) []string {
|
||||||
|
// Swarm addrs are announced by default
|
||||||
|
addrs := cfgAddrs.Swarm
|
||||||
|
// if Announce addrs are specified - override Swarm
|
||||||
|
if len(cfgAddrs.Announce) > 0 {
|
||||||
|
addrs = cfgAddrs.Announce
|
||||||
|
} else if len(cfgAddrs.NoAnnounce) > 0 {
|
||||||
|
// if Announce adds are not specified - filter Swarm addrs with NoAnnounce list
|
||||||
|
maddrs := map[string]struct{}{}
|
||||||
|
for _, addr := range addrs {
|
||||||
|
maddrs[addr] = struct{}{}
|
||||||
|
}
|
||||||
|
for _, addr := range cfgAddrs.NoAnnounce {
|
||||||
|
delete(maddrs, addr)
|
||||||
|
}
|
||||||
|
addrs = make([]string, 0, len(maddrs))
|
||||||
|
for k := range maddrs {
|
||||||
|
addrs = append(addrs, k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// append AppendAnnounce addrs to the result list
|
||||||
|
if len(cfgAddrs.AppendAnnounce) > 0 {
|
||||||
|
addrs = append(addrs, cfgAddrs.AppendAnnounce...)
|
||||||
|
}
|
||||||
|
return addrs
|
||||||
|
}
|
||||||
|
34
core/node/libp2p/routingopt_test.go
Normal file
34
core/node/libp2p/routingopt_test.go
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package libp2p
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
config "github.com/ipfs/kubo/config"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestHttpAddrsFromConfig(t *testing.T) {
|
||||||
|
require.Equal(t, []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
|
||||||
|
httpAddrsFromConfig(config.Addresses{
|
||||||
|
Swarm: []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
|
||||||
|
}), "Swarm addrs should be taken by default")
|
||||||
|
|
||||||
|
require.Equal(t, []string{"/ip4/192.168.0.1/tcp/4001"},
|
||||||
|
httpAddrsFromConfig(config.Addresses{
|
||||||
|
Swarm: []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
|
||||||
|
Announce: []string{"/ip4/192.168.0.1/tcp/4001"},
|
||||||
|
}), "Announce addrs should override Swarm if specified")
|
||||||
|
|
||||||
|
require.Equal(t, []string{"/ip4/0.0.0.0/udp/4001/quic"},
|
||||||
|
httpAddrsFromConfig(config.Addresses{
|
||||||
|
Swarm: []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
|
||||||
|
NoAnnounce: []string{"/ip4/0.0.0.0/tcp/4001"},
|
||||||
|
}), "Swarm addrs should not contain NoAnnounce addrs")
|
||||||
|
|
||||||
|
require.Equal(t, []string{"/ip4/192.168.0.1/tcp/4001", "/ip4/192.168.0.2/tcp/4001"},
|
||||||
|
httpAddrsFromConfig(config.Addresses{
|
||||||
|
Swarm: []string{"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"},
|
||||||
|
Announce: []string{"/ip4/192.168.0.1/tcp/4001"},
|
||||||
|
AppendAnnounce: []string{"/ip4/192.168.0.2/tcp/4001"},
|
||||||
|
}), "AppendAnnounce addrs should be included if specified")
|
||||||
|
}
|
Reference in New Issue
Block a user