Skip to content

Commit

Permalink
feat: init local discovery
Browse files Browse the repository at this point in the history
Signed-off-by: D4ryl00 <remi@berty.tech>
  • Loading branch information
d4ryl00-sudo committed Jun 23, 2020
1 parent 8aa6203 commit 72c6c89
Show file tree
Hide file tree
Showing 7 changed files with 839 additions and 1 deletion.
16 changes: 16 additions & 0 deletions api/go-internal/localrecord.proto
@@ -0,0 +1,16 @@
syntax = "proto3";

package tinder;

import "github.com/gogo/protobuf/gogoproto/gogo.proto";

option go_package = "berty.tech/berty/go/internal/tinder";

option (gogoproto.goproto_enum_prefix_all) = false;
option (gogoproto.marshaler_all) = true;
option (gogoproto.unmarshaler_all) = true;
option (gogoproto.sizer_all) = true;

message LocalRecord {
map<string, int64> records = 1;
}
1 change: 1 addition & 0 deletions go.mod

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion go/gen.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

71 changes: 71 additions & 0 deletions go/internal/ipfsutil/localrecord.go
@@ -0,0 +1,71 @@
package ipfsutil

import (
"context"
"os"

mcma "berty.tech/berty/v2/go/internal/multipeer-connectivity-transport/multiaddr"
ipfs_core "github.com/ipfs/go-ipfs/core"
ipfs_interface "github.com/ipfs/interface-go-ipfs-core"
"github.com/libp2p/go-libp2p-core/host"
"github.com/libp2p/go-libp2p-core/network"
"github.com/libp2p/go-libp2p-core/protocol"
ma "github.com/multiformats/go-multiaddr"
manet "github.com/multiformats/go-multiaddr-net"
)

const recProtocolID = protocol.ID("berty/p2p/localrecord")

type LocalRecord struct {
host host.Host
}

// OptionLocalRecord is given to CoreAPIOption.Options when the ipfs node setup
func OptionLocalRecord(ctx context.Context, node *ipfs_core.IpfsNode, api ipfs_interface.CoreAPI) error {
lr := &LocalRecord{
host: node.PeerHost,
}
lr.host.Network().Notify(lr)
lr.host.SetStreamHandler(recProtocolID, lr.handleLocalRecords)

return nil
}

// called when network starts listening on an addr
func (lr *LocalRecord) Listen(network.Network, ma.Multiaddr) {}

// called when network stops listening on an addr
func (lr *LocalRecord) ListenClose(network.Network, ma.Multiaddr) {}

// called when a connection opened
func (lr *LocalRecord) Connected(net network.Network, c network.Conn) {
go func() {
if manet.IsPrivateAddr(c.RemoteMultiaddr()) || mcma.MC.Matches(c.RemoteMultiaddr()) {
if err := lr.sendLocalRecord(c); err != nil {
return
}
}
}()
}

// called when a connection closed
func (lr *LocalRecord) Disconnected(network.Network, network.Conn) {}

// called when a stream opened
func (lr *LocalRecord) OpenedStream(network.Network, network.Stream) {}

// called when a stream closed
func (lr *LocalRecord) ClosedStream(network.Network, network.Stream) {}

func (lr *LocalRecord) sendLocalRecord(c network.Conn) error {
s, err := c.NewStream()
if err != nil {
return err
}
s.SetProtocol(recProtocolID)
return nil
}

func (lr *LocalRecord) handleLocalRecords(s network.Stream) {
os.Stderr.WriteString("handleLocalRecords")
}
3 changes: 3 additions & 0 deletions go/internal/ipfsutil/routing.go
Expand Up @@ -47,6 +47,9 @@ func NewTinderRouting(logger *zap.Logger, rdvpeer *peer.AddrInfo, dhtclient bool
drivers = append(drivers, rdvClient)
}

localDiscovery := tinder.NewLocalDiscovery(logger, h, rand.New(rand.NewSource(rand.Int63())))
drivers = append(drivers, localDiscovery)

tinderRouting := tinder.NewRouting(logger, "dht", dht, drivers...)
crout <- &RoutingOut{dht, tinderRouting}

Expand Down

0 comments on commit 72c6c89

Please sign in to comment.