Skip to content

Commit

Permalink
Merge pull request #7 from gfanton/feat/advertise-addr-factory
Browse files Browse the repository at this point in the history
  • Loading branch information
gfanton authored Jan 16, 2023
2 parents ea43c80 + cc08932 commit ac45664
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 9 deletions.
18 changes: 16 additions & 2 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,14 @@ jobs:
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.golang }}

# https://github.com/mattn/go-sqlite3/tree/v1.14.16#mac-osx
- name: install sqlight (macos)
if: matrix.os == 'macos-latest'
run: |
brew install sqlite3
brew upgrade icu4c
- name: Cache Go modules
uses: actions/cache@v1
with:
Expand All @@ -58,5 +66,11 @@ jobs:
go mod tidy -v
git --no-pager diff go.mod go.sum
git --no-pager diff --quiet go.mod go.sum
- name: Run tests with race
run: go test -v -tags "libsqlite3" -race ./... -test.timeout=10m
- name: Run tests with race (macos)
if: matrix.os == 'macos-latest'
run: go test -v -tags "darwin" -race ./... -test.timeout=10m

- name: Run tests with race (linux)
if: matrix.os == 'ubuntu-latest'
run: go test -v -race ./... -test.timeout=10m
24 changes: 17 additions & 7 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,20 @@ type RendezvousClient interface {
DiscoverSubscribe(ctx context.Context, ns string) (<-chan peer.AddrInfo, error)
}

func NewRendezvousPoint(host host.Host, p peer.ID) RendezvousPoint {
func NewRendezvousPoint(host host.Host, p peer.ID, opts ...RendezvousPointOption) RendezvousPoint {
cfg := defaultRendezvousPointConfig
cfg.apply(opts...)
return &rendezvousPoint{
host: host,
p: p,
addrFactory: cfg.AddrsFactory,
host: host,
p: p,
}
}

type rendezvousPoint struct {
host host.Host
p peer.ID
addrFactory AddrsFactory
host host.Host
p peer.ID
}

func NewRendezvousClient(host host.Host, rp peer.ID, sync ...RendezvousSyncClient) RendezvousClient {
Expand All @@ -75,7 +79,13 @@ func (rp *rendezvousPoint) Register(ctx context.Context, ns string, ttl int) (ti
r := ggio.NewDelimitedReader(s, inet.MessageSizeMax)
w := ggio.NewDelimitedWriter(s)

req := newRegisterMessage(ns, peer.AddrInfo{ID: rp.host.ID(), Addrs: rp.host.Addrs()}, ttl)
addrs := rp.addrFactory(rp.host.Addrs())
if len(addrs) == 0 {
return 0, fmt.Errorf("no addrs available to advertise: %s", ns)
}

log.Debugf("advertising on `%s` with: %v", ns, addrs)
req := newRegisterMessage(ns, peer.AddrInfo{ID: rp.host.ID(), Addrs: addrs}, ttl)
err = w.WriteMsg(req)
if err != nil {
return 0, err
Expand All @@ -88,7 +98,7 @@ func (rp *rendezvousPoint) Register(ctx context.Context, ns string, ttl int) (ti
}

if res.GetType() != pb.Message_REGISTER_RESPONSE {
return 0, fmt.Errorf("Unexpected response: %s", res.GetType().String())
return 0, fmt.Errorf("unexpected response: %s", res.GetType().String())
}

response := res.GetRegisterResponse()
Expand Down
32 changes: 32 additions & 0 deletions options.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package rendezvous

import (
ma "github.com/multiformats/go-multiaddr"
)

type RendezvousPointOption func(cfg *rendezvousPointConfig)

type AddrsFactory func(addrs []ma.Multiaddr) []ma.Multiaddr

var DefaultAddrFactory = func(addrs []ma.Multiaddr) []ma.Multiaddr { return addrs }

var defaultRendezvousPointConfig = rendezvousPointConfig{
AddrsFactory: DefaultAddrFactory,
}

type rendezvousPointConfig struct {
AddrsFactory AddrsFactory
}

func (cfg *rendezvousPointConfig) apply(opts ...RendezvousPointOption) {
for _, opt := range opts {
opt(cfg)
}
}

// AddrsFactory configures libp2p to use the given address factory.
func ClientWithAddrsFactory(factory AddrsFactory) RendezvousPointOption {
return func(cfg *rendezvousPointConfig) {
cfg.AddrsFactory = factory
}
}

0 comments on commit ac45664

Please sign in to comment.