Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
go-libp2p
Commits
c441a14b
Commit
c441a14b
authored
Jan 05, 2016
by
Jeromy
Browse files
add utp to have feature parity with go-ipfs
parent
ada8212c
Changes
2
Hide whitespace changes
Inline
Side-by-side
p2p/net/swarm/swarm.go
View file @
c441a14b
...
@@ -84,13 +84,16 @@ func NewSwarm(ctx context.Context, listenAddrs []ma.Multiaddr,
...
@@ -84,13 +84,16 @@ func NewSwarm(ctx context.Context, listenAddrs []ma.Multiaddr,
}
}
s
:=
&
Swarm
{
s
:=
&
Swarm
{
swarm
:
ps
.
NewSwarm
(
PSTransport
),
swarm
:
ps
.
NewSwarm
(
PSTransport
),
local
:
local
,
local
:
local
,
peers
:
peers
,
peers
:
peers
,
ctx
:
ctx
,
ctx
:
ctx
,
dialT
:
DialTimeout
,
dialT
:
DialTimeout
,
notifs
:
make
(
map
[
inet
.
Notifiee
]
ps
.
Notifiee
),
notifs
:
make
(
map
[
inet
.
Notifiee
]
ps
.
Notifiee
),
transports
:
[]
transport
.
Transport
{
transport
.
NewTCPTransport
()},
transports
:
[]
transport
.
Transport
{
transport
.
NewTCPTransport
(),
transport
.
NewUtpTransport
(),
},
bwc
:
bwc
,
bwc
:
bwc
,
fdRateLimit
:
make
(
chan
struct
{},
concurrentFdDials
),
fdRateLimit
:
make
(
chan
struct
{},
concurrentFdDials
),
Filters
:
filter
.
NewFilters
(),
Filters
:
filter
.
NewFilters
(),
...
...
p2p/net/transport/utp.go
0 → 100644
View file @
c441a14b
package
transport
import
(
"net"
"sync"
ma
"gx/ipfs/QmR3JkmZBKYXgNMNsNZawm914455Qof3PEopwuVSeXG7aV/go-multiaddr"
utp
"gx/ipfs/QmVs3wq4cN64TFCxANzgSHjGPrjMnRnwPrxU8bqc7YP42s/utp"
manet
"gx/ipfs/QmYtzQmUwPFGxjCXctJ8e6GXS8sYfoXy2pdeMbS5SFWqRi/go-multiaddr-net"
mautp
"gx/ipfs/QmYtzQmUwPFGxjCXctJ8e6GXS8sYfoXy2pdeMbS5SFWqRi/go-multiaddr-net/utp"
)
type
UtpTransport
struct
{
sockLock
sync
.
Mutex
sockets
map
[
string
]
*
UtpSocket
}
func
NewUtpTransport
()
*
UtpTransport
{
return
&
UtpTransport
{
sockets
:
make
(
map
[
string
]
*
UtpSocket
),
}
}
func
(
d
*
UtpTransport
)
Matches
(
a
ma
.
Multiaddr
)
bool
{
p
:=
a
.
Protocols
()
return
len
(
p
)
==
3
&&
p
[
2
]
.
Name
==
"utp"
}
type
UtpSocket
struct
{
s
*
utp
.
Socket
laddr
ma
.
Multiaddr
transport
Transport
}
func
(
t
*
UtpTransport
)
Listen
(
laddr
ma
.
Multiaddr
)
(
Listener
,
error
)
{
t
.
sockLock
.
Lock
()
defer
t
.
sockLock
.
Unlock
()
s
,
ok
:=
t
.
sockets
[
laddr
.
String
()]
if
ok
{
return
s
,
nil
}
ns
,
err
:=
t
.
newConn
(
laddr
)
if
err
!=
nil
{
return
nil
,
err
}
t
.
sockets
[
laddr
.
String
()]
=
ns
return
ns
,
nil
}
func
(
t
*
UtpTransport
)
Dialer
(
laddr
ma
.
Multiaddr
,
opts
...
DialOpt
)
(
Dialer
,
error
)
{
t
.
sockLock
.
Lock
()
defer
t
.
sockLock
.
Unlock
()
s
,
ok
:=
t
.
sockets
[
laddr
.
String
()]
if
ok
{
return
s
,
nil
}
ns
,
err
:=
t
.
newConn
(
laddr
,
opts
...
)
if
err
!=
nil
{
return
nil
,
err
}
t
.
sockets
[
laddr
.
String
()]
=
ns
return
ns
,
nil
}
func
(
t
*
UtpTransport
)
newConn
(
addr
ma
.
Multiaddr
,
opts
...
DialOpt
)
(
*
UtpSocket
,
error
)
{
network
,
netaddr
,
err
:=
manet
.
DialArgs
(
addr
)
if
err
!=
nil
{
return
nil
,
err
}
s
,
err
:=
utp
.
NewSocket
(
"udp"
+
network
[
3
:
],
netaddr
)
if
err
!=
nil
{
return
nil
,
err
}
laddr
,
err
:=
manet
.
FromNetAddr
(
mautp
.
MakeAddr
(
s
.
LocalAddr
()))
if
err
!=
nil
{
return
nil
,
err
}
return
&
UtpSocket
{
s
:
s
,
laddr
:
laddr
,
transport
:
t
,
},
nil
}
func
(
s
*
UtpSocket
)
Dial
(
raddr
ma
.
Multiaddr
)
(
Conn
,
error
)
{
_
,
addr
,
err
:=
manet
.
DialArgs
(
raddr
)
if
err
!=
nil
{
return
nil
,
err
}
con
,
err
:=
s
.
s
.
Dial
(
addr
)
if
err
!=
nil
{
return
nil
,
err
}
mnc
,
err
:=
manet
.
WrapNetConn
(
&
mautp
.
Conn
{
Conn
:
con
})
if
err
!=
nil
{
return
nil
,
err
}
return
&
connWrap
{
Conn
:
mnc
,
transport
:
s
.
transport
,
},
nil
}
func
(
s
*
UtpSocket
)
Accept
()
(
Conn
,
error
)
{
c
,
err
:=
s
.
s
.
Accept
()
if
err
!=
nil
{
return
nil
,
err
}
mnc
,
err
:=
manet
.
WrapNetConn
(
&
mautp
.
Conn
{
Conn
:
c
})
if
err
!=
nil
{
return
nil
,
err
}
return
&
connWrap
{
Conn
:
mnc
,
transport
:
s
.
transport
,
},
nil
}
func
(
s
*
UtpSocket
)
Matches
(
a
ma
.
Multiaddr
)
bool
{
p
:=
a
.
Protocols
()
return
len
(
p
)
==
3
&&
p
[
2
]
.
Name
==
"utp"
}
func
(
t
*
UtpSocket
)
Close
()
error
{
return
t
.
s
.
Close
()
}
func
(
t
*
UtpSocket
)
Addr
()
net
.
Addr
{
return
t
.
s
.
Addr
()
}
func
(
t
*
UtpSocket
)
Multiaddr
()
ma
.
Multiaddr
{
return
t
.
laddr
}
var
_
Transport
=
(
*
UtpTransport
)(
nil
)
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