2
0
mirror of synced 2025-02-23 14:18:13 +00:00

Implement connection.{Cancel,Choke}

This commit is contained in:
Matt Joiner 2014-05-21 17:49:28 +10:00
parent ef9e334479
commit 309f70bcb5
2 changed files with 29 additions and 0 deletions

View File

@ -401,6 +401,7 @@ func (me *Client) connectionLoop(torrent *torrent, conn *connection) error {
conn.Unchoke()
case peer_protocol.NotInterested:
conn.PeerInterested = false
conn.Choke()
case peer_protocol.Have:
me.peerGotPiece(torrent, conn, int(msg.Index))
case peer_protocol.Request:

View File

@ -89,6 +89,24 @@ func (c *connection) Request(chunk request) bool {
return true
}
// Returns true if an unsatisfied request was canceled.
func (c *connection) Cancel(r request) bool {
if c.Requests == nil {
return false
}
if _, ok := c.Requests[r]; !ok {
return false
}
delete(c.Requests, r)
c.Post(peer_protocol.Message{
Type: peer_protocol.Cancel,
Index: r.Index,
Begin: r.Begin,
Length: r.Length,
})
return true
}
// Returns true if an unsatisfied request was canceled.
func (c *connection) PeerCancel(r request) bool {
if c.PeerRequests == nil {
@ -101,6 +119,16 @@ func (c *connection) PeerCancel(r request) bool {
return true
}
func (c *connection) Choke() {
if c.Choked {
return
}
c.Post(peer_protocol.Message{
Type: peer_protocol.Choke,
})
c.Choked = true
}
func (c *connection) Unchoke() {
if !c.Choked {
return