PeerSourcePex = "X"
)
-type peerImpl interface {
- updateRequests()
- writeInterested(interested bool) bool
- cancel(request) bool
- request(request) bool
- connectionFlags() string
- _close()
- postCancel(request)
- drop()
+type PeerImpl interface {
+ UpdateRequests()
+ WriteInterested(interested bool) bool
+ Cancel(request) bool
+ Request(request) bool
+ ConnectionFlags() string
+ Close()
+ PostCancel(request)
+ Drop()
}
type peer struct {
t *Torrent
- peerImpl
+ PeerImpl
connString string
outgoing bool
return fmt.Sprintf("%.2fs ago", time.Since(t).Seconds())
}
-func (cn *PeerConn) connectionFlags() (ret string) {
+func (cn *PeerConn) ConnectionFlags() (ret string) {
c := func(b byte) {
ret += string([]byte{b})
}
c('c')
}
c('-')
- ret += cn.connectionFlags()
+ ret += cn.ConnectionFlags()
c('-')
if cn.peerInterested {
c('i')
}
cn.discardPieceInclination()
cn._pieceRequestOrder.Clear()
- cn.peerImpl._close()
+ cn.PeerImpl.Close()
}
-func (cn *PeerConn) _close() {
+func (cn *PeerConn) Close() {
if cn.pex.IsEnabled() {
cn.pex.Close()
}
}
cn.updateExpectingChunks()
// log.Printf("%p: setting interest: %v", cn, interested)
- return cn.writeInterested(interested)
+ return cn.WriteInterested(interested)
}
-func (pc *PeerConn) writeInterested(interested bool) bool {
+func (pc *PeerConn) WriteInterested(interested bool) bool {
return pc.write(pp.Message{
Type: func() pp.MessageType {
if interested {
cn.t.pendingRequests[r]++
cn.t.requestStrategy.hooks().sentRequest(r)
cn.updateExpectingChunks()
- return cn.peerImpl.request(r)
+ return cn.PeerImpl.Request(r)
}
-func (me *PeerConn) request(r request) bool {
+func (me *PeerConn) Request(r request) bool {
return me.write(pp.Message{
Type: pp.Request,
Index: r.Index,
})
}
-func (me *PeerConn) cancel(r request) bool {
+func (me *PeerConn) Cancel(r request) bool {
return me.write(makeCancelMessage(r))
}
for r := range cn.requests {
cn.deleteRequest(r)
// log.Printf("%p: cancelling request: %v", cn, r)
- if !cn.peerImpl.cancel(r) {
+ if !cn.PeerImpl.Cancel(r) {
return false
}
}
cn.sentHaves = cn.t._completedPieces.Copy()
}
-func (cn *PeerConn) updateRequests() {
+func (cn *PeerConn) UpdateRequests() {
// log.Print("update requests")
cn.tickleWriter()
}
}
}
if prioritiesChanged {
- cn.updateRequests()
+ cn.UpdateRequests()
}
}
}
cn.raisePeerMinPieces(piece + 1)
cn._peerPieces.Set(bitmap.BitIndex(piece), true)
if cn.updatePiecePriority(piece) {
- cn.updateRequests()
+ cn.UpdateRequests()
}
return nil
}
c.deleteAllRequests()
}
// We can then reset our interest.
- c.updateRequests()
+ c.UpdateRequests()
c.updateExpectingChunks()
case pp.Unchoke:
c.peerChoking = false
case pp.Suggest:
torrent.Add("suggests received", 1)
log.Fmsg("peer suggested piece %d", msg.Index).AddValues(c, msg.Index).SetLevel(log.Debug).Log(c.t.logger)
- c.updateRequests()
+ c.UpdateRequests()
case pp.HaveAll:
err = c.onPeerSentHaveAll()
case pp.HaveNone:
torrent.Add("allowed fasts received", 1)
log.Fmsg("peer allowed fast: %d", msg.Index).AddValues(c).SetLevel(log.Debug).Log(c.t.logger)
c.peerAllowedFast.Add(int(msg.Index))
- c.updateRequests()
+ c.UpdateRequests()
case pp.Extended:
err = c.onReadExtendedMsg(msg.ExtendedID, msg.ExtendedPayload)
default:
// Cancel pending requests for this chunk.
for c := range t.conns {
- c.postCancel(req)
+ c.PostCancel(req)
}
err := func() error {
return c.choke(msg)
}
-func (cn *PeerConn) drop() {
+func (cn *PeerConn) Drop() {
cn.t.dropConnection(cn)
}
if n < 0 {
panic(n)
}
- c.updateRequests()
+ c.UpdateRequests()
c.t.iterPeers(func(_c *peer) {
if !_c.interested && _c != c && c.peerHasPiece(pieceIndex(r.Index)) {
- _c.updateRequests()
+ _c.UpdateRequests()
}
})
return true
if !c.deleteRequest(r) {
return false
}
- c.peerImpl.postCancel(r)
+ c.PeerImpl.PostCancel(r)
return true
}
-func (c *PeerConn) postCancel(r request) {
+func (c *PeerConn) PostCancel(r request) {
c.post(makeCancelMessage(r))
}
t.iterPeers(func(c *peer) {
if c.updatePiecePriority(piece) {
// log.Print("conn piece priority changed")
- c.updateRequests()
+ c.UpdateRequests()
}
})
t.maybeNewConns()
if len(bannableTouchers) >= 1 {
c := bannableTouchers[0]
t.cl.banPeerIP(c.remoteIp())
- c.drop()
+ c.Drop()
}
}
t.onIncompletePiece(piece)
// }
t.iterPeers(func(conn *peer) {
if conn.peerHasPiece(piece) {
- conn.updateRequests()
+ conn.UpdateRequests()
}
})
}
defer cb.t.cl.unlock()
cb.t.iterPeers(func(cn *peer) {
if cn.peerHasPiece(pieceIndex(r.Index)) {
- cn.updateRequests()
+ cn.UpdateRequests()
}
})
log.Printf("disallowing data download")
t.dataDownloadDisallowed = true
t.iterPeers(func(c *peer) {
- c.updateRequests()
+ c.UpdateRequests()
})
}
log.Printf("AllowDataDownload")
t.dataDownloadDisallowed = false
t.iterPeers(func(c *peer) {
- c.updateRequests()
+ c.UpdateRequests()
})
}
ws := webSeed{
peer: p,
}
- p.peerImpl = &ws
+ p.PeerImpl = &ws
t.webSeeds[url] = p
}
url string
}
-func (ws *webSeed) postCancel(r request) {
+func (ws *webSeed) PostCancel(r request) {
panic("implement me")
}
-func (ws *webSeed) writeInterested(interested bool) bool {
+func (ws *webSeed) WriteInterested(interested bool) bool {
return true
}
-func (ws *webSeed) cancel(r request) bool {
+func (ws *webSeed) Cancel(r request) bool {
panic("implement me")
}
-func (ws *webSeed) request(r request) bool {
+func (ws *webSeed) Request(r request) bool {
panic("implement me")
}
-func (ws *webSeed) connectionFlags() string {
+func (ws *webSeed) ConnectionFlags() string {
return "WS"
}
-func (ws *webSeed) drop() {
+func (ws *webSeed) Drop() {
}
-func (ws *webSeed) updateRequests() {
+func (ws *webSeed) UpdateRequests() {
ws.peer.doRequestState()
}
-func (ws *webSeed) _close() {}
+func (ws *webSeed) Close() {}