Use go-libutp if cgo is enabled
This commit is contained in:
parent
cc17c8a54c
commit
ae8b03d586
13
client.go
13
client.go
|
@ -22,7 +22,6 @@ import (
|
|||
"github.com/anacrolix/missinggo/pubsub"
|
||||
"github.com/anacrolix/missinggo/slices"
|
||||
"github.com/anacrolix/sync"
|
||||
"github.com/anacrolix/utp"
|
||||
"github.com/dustin/go-humanize"
|
||||
"golang.org/x/time/rate"
|
||||
|
||||
|
@ -48,7 +47,7 @@ type Client struct {
|
|||
defaultStorage *storage.Client
|
||||
onClose []func()
|
||||
tcpListener net.Listener
|
||||
utpSock *utp.Socket
|
||||
utpSock utpSocket
|
||||
dHT *dht.Server
|
||||
ipBlockList iplist.Ranger
|
||||
// Our BitTorrent protocol extension bytes, sent in our BT handshakes.
|
||||
|
@ -152,15 +151,15 @@ func (cl *Client) WriteStatus(_w io.Writer) {
|
|||
}
|
||||
}
|
||||
|
||||
func listenUTP(networkSuffix, addr string) (*utp.Socket, error) {
|
||||
return utp.NewSocket("udp"+networkSuffix, addr)
|
||||
func listenUTP(networkSuffix, addr string) (utpSocket, error) {
|
||||
return NewUtpSocket("udp"+networkSuffix, addr)
|
||||
}
|
||||
|
||||
func listenTCP(networkSuffix, addr string) (net.Listener, error) {
|
||||
return net.Listen("tcp"+networkSuffix, addr)
|
||||
}
|
||||
|
||||
func listenBothSameDynamicPort(networkSuffix, host string) (tcpL net.Listener, utpSock *utp.Socket, listenedAddr string, err error) {
|
||||
func listenBothSameDynamicPort(networkSuffix, host string) (tcpL net.Listener, utpSock utpSocket, listenedAddr string, err error) {
|
||||
for {
|
||||
tcpL, err = listenTCP(networkSuffix, net.JoinHostPort(host, "0"))
|
||||
if err != nil {
|
||||
|
@ -179,7 +178,7 @@ func listenBothSameDynamicPort(networkSuffix, host string) (tcpL net.Listener, u
|
|||
}
|
||||
|
||||
// Listen to enabled protocols, ensuring ports match.
|
||||
func listen(tcp, utp bool, networkSuffix, addr string) (tcpL net.Listener, utpSock *utp.Socket, listenedAddr string, err error) {
|
||||
func listen(tcp, utp bool, networkSuffix, addr string) (tcpL net.Listener, utpSock utpSocket, listenedAddr string, err error) {
|
||||
if addr == "" {
|
||||
addr = ":50007"
|
||||
}
|
||||
|
@ -341,7 +340,7 @@ func (cl *Client) Close() {
|
|||
cl.dHT.Close()
|
||||
}
|
||||
if cl.utpSock != nil {
|
||||
cl.utpSock.CloseNow()
|
||||
cl.utpSock.Close()
|
||||
}
|
||||
if cl.tcpListener != nil {
|
||||
cl.tcpListener.Close()
|
||||
|
|
|
@ -21,7 +21,6 @@ import (
|
|||
"github.com/anacrolix/missinggo"
|
||||
"github.com/anacrolix/missinggo/filecache"
|
||||
"github.com/anacrolix/missinggo/pubsub"
|
||||
"github.com/anacrolix/utp"
|
||||
"github.com/bradfitz/iter"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
@ -171,7 +170,7 @@ func TestReducedDialTimeout(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestUTPRawConn(t *testing.T) {
|
||||
l, err := utp.NewSocket("udp", "")
|
||||
l, err := NewUtpSocket("udp", "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -185,7 +184,7 @@ func TestUTPRawConn(t *testing.T) {
|
|||
}
|
||||
}()
|
||||
// Connect a UTP peer to see if the RawConn will still work.
|
||||
s, _ := utp.NewSocket("udp", "")
|
||||
s, _ := NewUtpSocket("udp", "")
|
||||
defer s.Close()
|
||||
utpPeer, err := s.Dial(fmt.Sprintf("localhost:%d", missinggo.AddrPort(l.Addr())))
|
||||
if err != nil {
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
package torrent
|
||||
|
||||
import (
|
||||
"net"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Abstracts the utp Socket, so the implementation can be selected from
|
||||
// different packages.
|
||||
type utpSocket interface {
|
||||
Accept() (net.Conn, error)
|
||||
Addr() net.Addr
|
||||
Close() error
|
||||
LocalAddr() net.Addr
|
||||
ReadFrom([]byte) (int, net.Addr, error)
|
||||
SetDeadline(time.Time) error
|
||||
SetWriteDeadline(time.Time) error
|
||||
SetReadDeadline(time.Time) error
|
||||
WriteTo([]byte, net.Addr) (int, error)
|
||||
DialTimeout(string, time.Duration) (net.Conn, error)
|
||||
Dial(string) (net.Conn, error)
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
// +build !cgo
|
||||
|
||||
package torrent
|
||||
|
||||
import (
|
||||
"github.com/anacrolix/utp"
|
||||
)
|
||||
|
||||
func NewUtpSocket(network, addr string) (utpSocket, error) {
|
||||
return utp.NewSocket(network, addr)
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
// +build cgo
|
||||
|
||||
package torrent
|
||||
|
||||
import (
|
||||
"github.com/anacrolix/go-libutp"
|
||||
)
|
||||
|
||||
func NewUtpSocket(network, addr string) (utpSocket, error) {
|
||||
return utp.NewSocket(network, addr)
|
||||
}
|
Loading…
Reference in New Issue