Skip to content

Commit

Permalink
Merge branch 'master' into fix/drop-gogo
Browse files Browse the repository at this point in the history
  • Loading branch information
guillaumemichel committed Jan 23, 2025
2 parents 1e26fb8 + dbb8d9e commit 1f64f32
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 0 deletions.
3 changes: 3 additions & 0 deletions dht.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,8 @@ type IpfsDHT struct {
// addrFilter is used to filter the addresses we put into the peer store.
// Mostly used to filter out localhost and local addresses.
addrFilter func([]ma.Multiaddr) []ma.Multiaddr

onRequestHook func(ctx context.Context, s network.Stream, req pb.Message)
}

// Assert that IPFS assumptions about interfaces aren't broken. These aren't a
Expand Down Expand Up @@ -306,6 +308,7 @@ func makeDHT(h host.Host, cfg dhtcfg.Config) (*IpfsDHT, error) {
routingTablePeerFilter: cfg.RoutingTable.PeerFilter,
rtPeerDiversityFilter: cfg.RoutingTable.DiversityFilter,
addrFilter: cfg.AddressFilter,
onRequestHook: cfg.OnRequestHook,

fixLowPeersChan: make(chan struct{}, 1),

Expand Down
4 changes: 4 additions & 0 deletions dht_net.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,10 @@ func (dht *IpfsDHT) handleNewMessage(s network.Stream) bool {
metrics.ReceivedBytes.M(int64(msgLen)),
)

if dht.onRequestHook != nil {
dht.onRequestHook(ctx, s, req)

Check failure on line 105 in dht_net.go

View workflow job for this annotation

GitHub Actions / go-check / All

call of dht.onRequestHook copies lock value: github.com/libp2p/go-libp2p-kad-dht/pb.Message contains google.golang.org/protobuf/internal/impl.MessageState contains sync.Mutex
}

handler := dht.handlerForMsgType(req.GetType())
if handler == nil {
stats.Record(ctx, metrics.ReceivedMessageErrors.M(1))
Expand Down
13 changes: 13 additions & 0 deletions dht_options.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dht

import (
"context"
"fmt"
"testing"
"time"
Expand All @@ -12,6 +13,7 @@ import (
"github.com/libp2p/go-libp2p-kbucket/peerdiversity"
record "github.com/libp2p/go-libp2p-record"
"github.com/libp2p/go-libp2p/core/host"
"github.com/libp2p/go-libp2p/core/network"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/libp2p/go-libp2p/core/protocol"

Expand Down Expand Up @@ -368,3 +370,14 @@ func WithCustomMessageSender(messageSenderBuilder func(h host.Host, protos []pro
return nil
}
}

// OnRequestHook registers a callback function that will be invoked for every
// incoming DHT protocol message.
// Note: Ensure that the callback executes efficiently, as it will block the
// entire message handler.
func OnRequestHook(f func(ctx context.Context, s network.Stream, req pb.Message)) Option {
return func(c *dhtcfg.Config) error {
c.OnRequestHook = f
return nil
}
}
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ require (
github.com/ipfs/go-datastore v0.6.0
github.com/ipfs/go-detect-race v0.0.1
github.com/ipfs/go-log/v2 v2.5.1
github.com/ipfs/go-test v0.0.4
github.com/libp2p/go-libp2p v0.38.2
github.com/libp2p/go-libp2p-kbucket v0.6.4
github.com/libp2p/go-libp2p-record v0.3.1
Expand Down Expand Up @@ -63,6 +64,8 @@ require (
github.com/gorilla/websocket v1.5.3 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/huin/goupnp v1.3.0 // indirect
github.com/ipfs/go-block-format v0.2.0 // indirect
github.com/ipfs/go-ipfs-util v0.0.3 // indirect
github.com/ipfs/go-log v1.0.5 // indirect
github.com/ipld/go-ipld-prime v0.21.0 // indirect
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
Expand Down
3 changes: 3 additions & 0 deletions internal/config/config.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package config

import (
"context"
"fmt"
"time"

Expand All @@ -14,6 +15,7 @@ import (
"github.com/libp2p/go-libp2p-kbucket/peerdiversity"
record "github.com/libp2p/go-libp2p-record"
"github.com/libp2p/go-libp2p/core/host"
"github.com/libp2p/go-libp2p/core/network"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/libp2p/go-libp2p/core/protocol"
ma "github.com/multiformats/go-multiaddr"
Expand Down Expand Up @@ -63,6 +65,7 @@ type Config struct {

BootstrapPeers func() []peer.AddrInfo
AddressFilter func([]ma.Multiaddr) []ma.Multiaddr
OnRequestHook func(ctx context.Context, s network.Stream, req pb.Message)

// test specific Config options
DisableFixLowPeers bool
Expand Down

0 comments on commit 1f64f32

Please sign in to comment.