Skip to content
This repository has been archived by the owner on May 26, 2022. It is now read-only.

Commit

Permalink
change ranking of addrs
Browse files Browse the repository at this point in the history
  • Loading branch information
aarshkshah1992 committed May 15, 2020
1 parent a928b5a commit 1f9d2a7
Showing 1 changed file with 32 additions and 33 deletions.
65 changes: 32 additions & 33 deletions swarm_dial.go
Original file line number Diff line number Diff line change
Expand Up @@ -358,45 +358,44 @@ func (s *Swarm) dial(ctx context.Context, p peer.ID) (*Conn, error) {
}

// sorts addresses in descending order of preference for dialing
// Private UDP > Private TCP > Public UDP > Public TCP > UDP Relay server > TCP Relay server
// Private UDP > Public UDP > Private TCP > Public TCP > UDP Relay server > TCP Relay server
sortAddrs := func(addrs []ma.Multiaddr) {
sort.Slice(addrs, func(i, j int) bool {
first := addrs[i]
second := addrs[j]

firstPriv := manet.IsPrivateAddr(first)
secondPriv := manet.IsPrivateAddr(second)
secondFd := s.IsFdConsumingAddr(second)

// First is private
if firstPriv {
// true if second is not private OR second is fd consuming.
return !secondPriv || secondFd
scoreFnc := func(addr ma.Multiaddr) int {
isPrivate := manet.IsPrivateAddr(addr)
isFdConsuming := s.IsFdConsumingAddr(addr)
_, err := addr.ValueForProtocol(ma.P_CIRCUIT)
relay := err == nil

// UDP
if !isFdConsuming {
// private UDP
if isPrivate {
return 1
}
// public udp
if !relay {
return 2
}
// Relay UDP
return 5
}

// Second is private
if secondPriv {
return false
// It's all TCP now
// private TCP
if isPrivate {
return 3
}

_, err := first.ValueForProtocol(ma.P_CIRCUIT)
firstNonRelay := err != nil
_, err = second.ValueForProtocol(ma.P_CIRCUIT)
secondNonRelay := err != nil

// First is NOT a relay address.
if firstNonRelay {
// true if second is relay OR second is fd consuming.
return !secondNonRelay || secondFd
// public tcp
if !relay {
return 4
}
return 6
}

// second is NOT a relay
if secondNonRelay {
return false
}
sort.Slice(addrs, func(i, j int) bool {
first := addrs[i]
second := addrs[j]

// both are relays
return secondFd
return scoreFnc(first) <= scoreFnc(second)
})
}

Expand Down

0 comments on commit 1f9d2a7

Please sign in to comment.