Implement connection.{Cancel,Choke}
This commit is contained in:
parent
ef9e334479
commit
309f70bcb5
@ -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:
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user