firstIndex := int(off / int64(t.UsualPieceSize()))
for i := 0; i < 5; i++ {
index := firstIndex + i
- if index >= t.NumPieces() {
+ if index >= t.numPieces() {
continue
}
me.queueFirstHash(t, index)
index := int(off / int64(t.UsualPieceSize()))
cl.raisePiecePriority(t, index, piecePriorityNow)
index++
- if index >= t.NumPieces() {
+ if index >= t.numPieces() {
return
}
cl.raisePiecePriority(t, index, piecePriorityNext)
for i := 0; i < t.numConnsUnchoked()-2; i++ {
index++
- if index >= t.NumPieces() {
+ if index >= t.numPieces() {
break
}
cl.raisePiecePriority(t, index, piecePriorityReadahead)
}
me.event.Broadcast()
for _, t := range me.torrents {
- t.Close()
+ t.close()
}
me.mu.Unlock()
}
if c.pieceRequestOrder != nil || c.piecePriorities != nil {
panic("double init of request ordering")
}
- c.piecePriorities = mathRand.Perm(t.NumPieces())
+ c.piecePriorities = mathRand.Perm(t.numPieces())
c.pieceRequestOrder = pieceordering.New()
- for i := 0; i < t.NumPieces(); i++ {
+ for i := 0; i < t.numPieces(); i++ {
if !c.PeerHasPiece(pp.Integer(i)) {
continue
}
func (me *Client) peerGotPiece(t *torrent, c *connection, piece int) {
if t.haveInfo() {
if c.PeerPieces == nil {
- c.PeerPieces = make([]bool, t.NumPieces())
+ c.PeerPieces = make([]bool, t.numPieces())
}
} else {
for piece >= len(c.PeerPieces) {
break
}
if t.haveInfo() {
- if len(msg.Bitfield) < t.NumPieces() {
+ if len(msg.Bitfield) < t.numPieces() {
err = errors.New("received invalid bitfield")
break
}
- msg.Bitfield = msg.Bitfield[:t.NumPieces()]
+ msg.Bitfield = msg.Bitfield[:t.numPieces()]
}
c.PeerPieces = msg.Bitfield
for index, has := range c.PeerPieces {
*torrent
}
+func (t Torrent) NumPieces() int {
+ return t.numPieces()
+}
+
func (t Torrent) Drop() {
t.cl.dropTorrent(t.InfoHash)
}
func (t Torrent) DownloadAll() {
t.cl.mu.Lock()
- for i := 0; i < t.NumPieces(); i++ {
+ for i := 0; i < t.numPieces(); i++ {
// TODO: Leave higher priorities as they were?
t.cl.prioritizePiece(t.torrent, i, piecePriorityNormal)
}
// Nice to have the first and last pieces soon for various interactive
// purposes.
t.cl.prioritizePiece(t.torrent, 0, piecePriorityReadahead)
- t.cl.prioritizePiece(t.torrent, t.NumPieces()-1, piecePriorityReadahead)
+ t.cl.prioritizePiece(t.torrent, t.numPieces()-1, piecePriorityReadahead)
t.cl.mu.Unlock()
}
err = fmt.Errorf("no such torrent")
return
}
- err = t.Close()
+ err = t.close()
if err != nil {
panic(err)
}
if !t.haveInfo() {
return false
}
- if t.NumPiecesCompleted() != t.NumPieces() {
+ if t.NumPiecesCompleted() != t.numPieces() {
return false
}
}
}
}
if t.haveAllPieces() && me.noUpload {
- t.CeaseNetworking()
+ t.ceaseNetworking()
}
me.event.Broadcast()
}
return
}
-func (t *torrent) CeaseNetworking() {
+func (t *torrent) ceaseNetworking() {
t.stateMu.Lock()
defer t.stateMu.Unlock()
select {
}
for _, conn := range t.Conns {
t.initRequestOrdering(conn)
- if err := conn.setNumPieces(t.NumPieces()); err != nil {
+ if err := conn.setNumPieces(t.numPieces()); err != nil {
log.Printf("closing connection: %s", err)
conn.Close()
}
if !t.haveInfo() {
return -1
}
- for i := pp.Integer(0); i < pp.Integer(t.NumPieces()); i++ {
+ for i := pp.Integer(0); i < pp.Integer(t.numPieces()); i++ {
left += int64(t.PieceNumPendingBytes(i))
}
return
return (pieceSize + chunkSize - 1) / chunkSize
}
-func (t *torrent) ChunkCount() (num int) {
- num += (t.NumPieces() - 1) * NumChunksForPiece(chunkSize, int(t.PieceLength(0)))
- num += NumChunksForPiece(chunkSize, int(t.PieceLength(pp.Integer(t.NumPieces()-1))))
- return
-}
-
func (t *torrent) UsualPieceSize() int {
return int(t.Info.PieceLength)
}
func (t *torrent) LastPieceSize() int {
- return int(t.PieceLength(pp.Integer(t.NumPieces() - 1)))
+ return int(t.PieceLength(pp.Integer(t.numPieces() - 1)))
}
-func (t *torrent) NumPieces() int {
+func (t *torrent) numPieces() int {
return len(t.Info.Pieces) / 20
}
}
}
-func (t *torrent) Close() (err error) {
+func (t *torrent) close() (err error) {
if t.isClosed() {
return
}
- t.CeaseNetworking()
+ t.ceaseNetworking()
close(t.closing)
t.dataLock.Lock()
if t.Data != nil {
}
func (t *torrent) PieceLength(piece pp.Integer) (len_ pp.Integer) {
- if int(piece) == t.NumPieces()-1 {
+ if int(piece) == t.numPieces()-1 {
len_ = pp.Integer(t.Length() % t.Info.PieceLength)
}
if len_ == 0 {