From: Matt Joiner Date: Tue, 2 Jun 2015 14:03:43 +0000 (+1000) Subject: Miscellaneous changes X-Git-Tag: v1.0.0~1167 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=a2df9f8b018ed62f97cbe9f57a4655ecf7420006;p=btrtrc.git Miscellaneous changes --- diff --git a/client.go b/client.go index 7e743b8f..9f7051a5 100644 --- a/client.go +++ b/client.go @@ -1444,7 +1444,7 @@ func (me *Client) connectionLoop(t *torrent, c *connection) error { case pp.Have: me.peerGotPiece(t, c, int(msg.Index)) case pp.Request: - if me.config.NoUpload { + if c.Choked { break } request := newRequest(msg.Index, msg.Begin, msg.Length) @@ -1456,6 +1456,7 @@ func (me *Client) connectionLoop(t *torrent, c *connection) error { // } p := make([]byte, msg.Length) n, err := dataReadAt(t.data, p, int64(t.pieceLength(0))*int64(msg.Index)+int64(msg.Begin)) + // TODO: Failing to read for a request should not be fatal to the connection. if err != nil { return fmt.Errorf("reading t data to serve request %q: %s", request, err) } @@ -1771,6 +1772,10 @@ func (me *Client) addPeers(t *torrent, peers []Peer) { if me.ipBlockRange(p.IP) != nil { continue } + if p.Port == 0 { + log.Printf("got bad peer: %v", p) + continue + } t.addPeer(p) } me.openNewConns(t) @@ -2498,7 +2503,8 @@ func (me *Client) downloadedChunk(t *torrent, c *connection, msg *pp.Message) er // Write the chunk out. err := t.writeChunk(int(msg.Index), int64(msg.Begin), msg.Piece) if err != nil { - return fmt.Errorf("error writing chunk: %s", err) + log.Printf("error writing chunk: %s", err) + return nil } // log.Println("got chunk", req) @@ -2531,12 +2537,10 @@ func (me *Client) pieceHashed(t *torrent, piece pp.Integer, correct bool) { } p.EverHashed = true if correct { - if sd, ok := t.data.(StatefulData); ok { - err := sd.PieceCompleted(int(piece)) - if err != nil { - log.Printf("error completing piece: %s", err) - correct = false - } + err := t.data.PieceCompleted(int(piece)) + if err != nil { + log.Printf("error completing piece: %s", err) + correct = false } } me.pieceChanged(t, int(piece)) diff --git a/connection.go b/connection.go index 51034e93..943e1a7c 100644 --- a/connection.go +++ b/connection.go @@ -385,6 +385,7 @@ func (c *connection) Choke() { c.Post(pp.Message{ Type: pp.Choke, }) + c.PeerRequests = nil c.Choked = true } diff --git a/torrent.go b/torrent.go index 2fa69be3..ef82e992 100644 --- a/torrent.go +++ b/torrent.go @@ -545,7 +545,10 @@ func (t *torrent) offsetRequest(off int64) (req request, ok bool) { } func (t *torrent) writeChunk(piece int, begin int64, data []byte) (err error) { - _, err = t.data.WriteAt(data, int64(piece)*t.Info.PieceLength+begin) + n, err := t.data.WriteAt(data, int64(piece)*t.Info.PieceLength+begin) + if err == nil && n != len(data) { + err = io.ErrShortWrite + } return }