Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
p2p
go-p2p-swarm
Commits
56b62620
Unverified
Commit
56b62620
authored
Feb 12, 2021
by
Steven Allen
Committed by
GitHub
Feb 12, 2021
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #239 from libp2p/avoid-func-in-variable
avoid assigning a function to a variable
parents
0f85476c
d5c62950
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
40 additions
and
41 deletions
+40
-41
swarm_dial.go
swarm_dial.go
+40
-41
No files found.
swarm_dial.go
View file @
56b62620
...
...
@@ -321,6 +321,45 @@ func (s *Swarm) canDial(addr ma.Multiaddr) bool {
return
t
!=
nil
&&
t
.
CanDial
(
addr
)
}
// ranks addresses in descending order of preference for dialing
// Private UDP > Public UDP > Private TCP > Public TCP > UDP Relay server > TCP Relay server
func
(
s
*
Swarm
)
rankAddrs
(
addrs
[]
ma
.
Multiaddr
)
[]
ma
.
Multiaddr
{
var
localUdpAddrs
[]
ma
.
Multiaddr
// private udp
var
relayUdpAddrs
[]
ma
.
Multiaddr
// relay udp
var
othersUdp
[]
ma
.
Multiaddr
// public udp
var
localFdAddrs
[]
ma
.
Multiaddr
// private fd consuming
var
relayFdAddrs
[]
ma
.
Multiaddr
// relay fd consuming
var
othersFd
[]
ma
.
Multiaddr
// public fd consuming
for
_
,
a
:=
range
addrs
{
if
_
,
err
:=
a
.
ValueForProtocol
(
ma
.
P_CIRCUIT
);
err
==
nil
{
if
s
.
IsFdConsumingAddr
(
a
)
{
relayFdAddrs
=
append
(
relayFdAddrs
,
a
)
continue
}
relayUdpAddrs
=
append
(
relayUdpAddrs
,
a
)
}
else
if
manet
.
IsPrivateAddr
(
a
)
{
if
s
.
IsFdConsumingAddr
(
a
)
{
localFdAddrs
=
append
(
localFdAddrs
,
a
)
continue
}
localUdpAddrs
=
append
(
localUdpAddrs
,
a
)
}
else
{
if
s
.
IsFdConsumingAddr
(
a
)
{
othersFd
=
append
(
othersFd
,
a
)
continue
}
othersUdp
=
append
(
othersUdp
,
a
)
}
}
relays
:=
append
(
relayUdpAddrs
,
relayFdAddrs
...
)
fds
:=
append
(
localFdAddrs
,
othersFd
...
)
return
append
(
append
(
append
(
localUdpAddrs
,
othersUdp
...
),
fds
...
),
relays
...
)
}
// dial is the actual swarm's dial logic, gated by Dial.
func
(
s
*
Swarm
)
dial
(
ctx
context
.
Context
,
p
peer
.
ID
)
(
*
Conn
,
error
)
{
var
logdial
=
lgbl
.
Dial
(
"swarm"
,
s
.
LocalPeer
(),
p
,
nil
,
nil
)
...
...
@@ -360,47 +399,7 @@ func (s *Swarm) dial(ctx context.Context, p peer.ID) (*Conn, error) {
return
nil
,
ErrDialBackoff
}
// ranks addresses in descending order of preference for dialing
// Private UDP > Public UDP > Private TCP > Public TCP > UDP Relay server > TCP Relay server
rankAddrsFnc
:=
func
(
addrs
[]
ma
.
Multiaddr
)
[]
ma
.
Multiaddr
{
var
localUdpAddrs
[]
ma
.
Multiaddr
// private udp
var
relayUdpAddrs
[]
ma
.
Multiaddr
// relay udp
var
othersUdp
[]
ma
.
Multiaddr
// public udp
var
localFdAddrs
[]
ma
.
Multiaddr
// private fd consuming
var
relayFdAddrs
[]
ma
.
Multiaddr
// relay fd consuming
var
othersFd
[]
ma
.
Multiaddr
// public fd consuming
for
_
,
a
:=
range
addrs
{
if
_
,
err
:=
a
.
ValueForProtocol
(
ma
.
P_CIRCUIT
);
err
==
nil
{
if
s
.
IsFdConsumingAddr
(
a
)
{
relayFdAddrs
=
append
(
relayFdAddrs
,
a
)
continue
}
relayUdpAddrs
=
append
(
relayUdpAddrs
,
a
)
}
else
if
manet
.
IsPrivateAddr
(
a
)
{
if
s
.
IsFdConsumingAddr
(
a
)
{
localFdAddrs
=
append
(
localFdAddrs
,
a
)
continue
}
localUdpAddrs
=
append
(
localUdpAddrs
,
a
)
}
else
{
if
s
.
IsFdConsumingAddr
(
a
)
{
othersFd
=
append
(
othersFd
,
a
)
continue
}
othersUdp
=
append
(
othersUdp
,
a
)
}
}
relays
:=
append
(
relayUdpAddrs
,
relayFdAddrs
...
)
fds
:=
append
(
localFdAddrs
,
othersFd
...
)
return
append
(
append
(
append
(
localUdpAddrs
,
othersUdp
...
),
fds
...
),
relays
...
)
}
connC
,
dialErr
:=
s
.
dialAddrs
(
ctx
,
p
,
rankAddrsFnc
(
goodAddrs
))
connC
,
dialErr
:=
s
.
dialAddrs
(
ctx
,
p
,
s
.
rankAddrs
(
goodAddrs
))
if
dialErr
!=
nil
{
logdial
[
"error"
]
=
dialErr
.
Cause
.
Error
()
switch
dialErr
.
Cause
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment