ListenHost func(network string) string
ListenPort int
NoDefaultPortForwarding bool
- UpnpID string
+ UpnpID string
// Don't announce to trackers. This only leaves DHT to discover peers.
DisableTrackers bool `long:"disable-trackers"`
DisablePEX bool `long:"disable-pex"`
HTTPUserAgent: DefaultHTTPUserAgent,
ExtendedHandshakeClientVersion: "go.torrent dev 20181121",
Bep20: "-GT0002-",
- UpnpID: "anacrolix/torrent",
+ UpnpID: "anacrolix/torrent",
NominalDialTimeout: 20 * time.Second,
MinDialTimeout: 3 * time.Second,
EstablishedConnsPerTorrent: 50,
"github.com/anacrolix/missinggo/bitmap"
"github.com/anacrolix/missinggo/iter"
"github.com/anacrolix/missinggo/prioritybitmap"
+ "github.com/anacrolix/multiless"
"github.com/pkg/errors"
"github.com/anacrolix/torrent/bencode"
}
func (l connectionTrust) Less(r connectionTrust) bool {
- var ml missinggo.MultiLess
- ml.NextBool(!l.Implicit, !r.Implicit)
- ml.StrictNext(l.NetGoodPiecesDirted == r.NetGoodPiecesDirted, l.NetGoodPiecesDirted < r.NetGoodPiecesDirted)
- return ml.Less()
+ return multiless.New().Bool(l.Implicit, r.Implicit).Int64(l.NetGoodPiecesDirted, r.NetGoodPiecesDirted).Less()
}
github.com/anacrolix/missinggo v1.2.1
github.com/anacrolix/missinggo/perf v1.0.0
github.com/anacrolix/missinggo/v2 v2.3.1
+ github.com/anacrolix/multiless v0.0.0-20191223025854-070b7994e841
github.com/anacrolix/sync v0.2.0
github.com/anacrolix/tagflag v1.0.1
github.com/anacrolix/upnp v0.1.1
github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb/go.mod h1:x2/ErsYUmT77kezS63+wzZp8E3byYB0gzirM/WMBLfw=
github.com/anacrolix/mmsg v1.0.0 h1:btC7YLjOn29aTUAExJiVUhQOuf/8rhm+/nWCMAnL3Hg=
github.com/anacrolix/mmsg v1.0.0/go.mod h1:x8kRaJY/dCrY9Al0PEcj1mb/uFHwP6GCJ9fLl4thEPc=
+github.com/anacrolix/multiless v0.0.0-20191223025854-070b7994e841 h1:AIQdjlpS6GLF/OrfLjWXTEneg7ZnXnlblcbAP83PJTk=
+github.com/anacrolix/multiless v0.0.0-20191223025854-070b7994e841/go.mod h1:TrCLEZfIDbMVfLoQt5tOoiBS/uq4y8+ojuEVVvTNPX4=
github.com/anacrolix/stm v0.1.0 h1:B/Kt3e4+0uqJoLcNZFW69cCBASok6WxX9CEhz9PqIPM=
github.com/anacrolix/stm v0.1.0/go.mod h1:ZKz7e7ERWvP0KgL7WXfRjBXHNRhlVRlbBQecqFtPq+A=
github.com/anacrolix/stm v0.1.1-0.20191106051447-e749ba3531cf/go.mod h1:zoVQRvSiGjGoTmbM0vSLIiaKjWtNPeTvXUSdJQA4hsg=
package torrent
-import "github.com/google/btree"
+import (
+ "github.com/anacrolix/multiless"
+ "github.com/google/btree"
+)
// Peers are stored with their priority at insertion. Their priority may
// change if our apparent IP changes, we don't currently handle that.
}
func (me prioritizedPeersItem) Less(than btree.Item) bool {
- return me.prio < than.(prioritizedPeersItem).prio
+ other := than.(prioritizedPeersItem)
+ return multiless.New().Bool(
+ me.p.Trusted, other.p.Trusted).Uint32(
+ me.prio, other.prio,
+ ).Less()
}
type prioritizedPeers struct {
import (
"net"
- "sort"
"testing"
"github.com/google/btree"
{IP: net.ParseIP("1.2.3.4")},
{IP: net.ParseIP("1::2")},
{IP: net.ParseIP("")},
+ {IP: net.ParseIP(""), Trusted: true},
}
for i, p := range ps {
- t.Logf("peer %d priority: %08x\n", i, pp.getPrio(p))
+ t.Logf("peer %d priority: %08x trusted: %t\n", i, pp.getPrio(p), p.Trusted)
assert.False(t, pp.Add(p))
assert.True(t, pp.Add(p))
assert.Equal(t, i+1, pp.Len())
}
- sort.Slice(ps, func(i, j int) bool {
- return pp.getPrio(ps[i]) < pp.getPrio(ps[j])
- })
pop := func(expected *Peer) {
if expected == nil {
assert.Panics(t, func() { pp.PopMax() })
assert.Equal(t, *expected, i.p)
}
}
- pop(&ps[2])
- min(&ps[0])
+ pop(&ps[3])
pop(&ps[1])
+ min(&ps[2])
+ pop(&ps[0])
min(nil)
pop(nil)
}
"container/heap"
"fmt"
"unsafe"
+
+ "github.com/anacrolix/multiless"
)
func worseConn(l, r *connection) bool {
- var ml multiLess
- ml.NextBool(!l.useful(), !r.useful())
- ml.StrictNext(
- l.lastHelpful().Equal(r.lastHelpful()),
- l.lastHelpful().Before(r.lastHelpful()))
- ml.StrictNext(
- l.completedHandshake.Equal(r.completedHandshake),
- l.completedHandshake.Before(r.completedHandshake))
- ml.Next(func() (bool, bool) {
- return l.peerPriority() == r.peerPriority(), l.peerPriority() < r.peerPriority()
- })
- ml.StrictNext(l == r, uintptr(unsafe.Pointer(l)) < uintptr(unsafe.Pointer(r)))
- less, ok := ml.FinalOk()
+ less, ok := multiless.New().Bool(
+ l.useful(), r.useful()).CmpInt64(
+ l.lastHelpful().Sub(r.lastHelpful()).Nanoseconds()).CmpInt64(
+ l.completedHandshake.Sub(r.completedHandshake).Nanoseconds()).Uint32(
+ l.peerPriority(), r.peerPriority()).Uintptr(
+ uintptr(unsafe.Pointer(l)), uintptr(unsafe.Pointer(r))).LessOk()
if !ok {
panic(fmt.Sprintf("cannot differentiate %#v and %#v", l, r))
}