From ba425dc31afb44dbb349d7d596b6b8f77412ef53 Mon Sep 17 00:00:00 2001 From: Richard Nyberg Date: Sun, 17 Jul 2005 18:06:26 +0000 Subject: Make changes in the choke/interest state of a peer visible to the policy on a lower level. --- btpd/peer.c | 36 ++++++++++++++++++++---------------- btpd/policy.c | 28 ++++++++++++++++++++++++++++ btpd/policy.h | 5 ++++- 3 files changed, 52 insertions(+), 17 deletions(-) diff --git a/btpd/peer.c b/btpd/peer.c index b8646d7..ec5de83 100644 --- a/btpd/peer.c +++ b/btpd/peer.c @@ -205,41 +205,45 @@ peer_create_out_compact(struct torrent *tp, const char *compact) void peer_on_choke(struct peer *p) { - if ((p->flags & (PF_P_CHOKE|PF_I_WANT)) == PF_I_WANT) { - p->flags |= PF_P_CHOKE; - cm_on_undownload(p); - } else + if ((p->flags & PF_P_CHOKE) != 0) + return; + else { p->flags |= PF_P_CHOKE; + cm_on_choke(p); + } } void peer_on_unchoke(struct peer *p) { - if ((p->flags & (PF_P_CHOKE|PF_I_WANT)) == (PF_P_CHOKE|PF_I_WANT)) { - p->flags &= ~PF_P_CHOKE; - cm_on_download(p); - } else + if ((p->flags & PF_P_CHOKE) == 0) + return; + else { p->flags &= ~PF_P_CHOKE; + cm_on_unchoke(p); + } } void peer_on_interest(struct peer *p) { - if ((p->flags & (PF_P_WANT|PF_I_CHOKE)) == 0) { - p->flags |= PF_P_WANT; - cm_on_upload(p); - } else + if ((p->flags & PF_P_WANT) != 0) + return; + else { p->flags |= PF_P_WANT; + cm_on_interest(p); + } } void peer_on_uninterest(struct peer *p) { - if ((p->flags & (PF_P_WANT|PF_I_CHOKE)) == PF_P_WANT) { - p->flags &= ~PF_P_WANT; - cm_on_unupload(p); - } else + if ((p->flags & PF_P_WANT) == 0) + return; + else { p->flags &= ~PF_P_WANT; + cm_on_uninterest(p); + } } void diff --git a/btpd/policy.c b/btpd/policy.c index 6050351..5b8ea67 100644 --- a/btpd/policy.c +++ b/btpd/policy.c @@ -215,6 +215,20 @@ cm_on_unupload(struct peer *peer) choke_alg(peer->tp); } +void +cm_on_interest(struct peer *peer) +{ + if ((peer->flags & PF_I_CHOKE) == 0) + cm_on_upload(peer); +} + +void +cm_on_uninterest(struct peer *peer) +{ + if ((peer->flags & PF_I_CHOKE) == 0) + cm_on_unupload(peer); +} + void cm_by_second(struct torrent *tp) { @@ -246,6 +260,20 @@ cm_on_undownload(struct peer *peer) cm_unassign_requests_eg(peer); } +void +cm_on_unchoke(struct peer *peer) +{ + if ((peer->flags & PF_I_WANT) != 0) + cm_on_download(peer); +} + +void +cm_on_choke(struct peer *peer) +{ + if ((peer->flags & PF_I_WANT) != 0) + cm_on_undownload(peer); +} + void cm_on_piece_ann(struct peer *peer, uint32_t piece) { diff --git a/btpd/policy.h b/btpd/policy.h index 6ef850a..a57bbac 100644 --- a/btpd/policy.h +++ b/btpd/policy.h @@ -6,9 +6,12 @@ void cm_by_second(struct torrent *tp); void cm_on_new_peer(struct peer *peer); void cm_on_lost_peer(struct peer *peer); +void cm_on_choke(struct peer *peer); +void cm_on_unchoke(struct peer *peer); void cm_on_upload(struct peer *peer); void cm_on_unupload(struct peer *peer); - +void cm_on_interest(struct peer *peer); +void cm_on_uninterest(struct peer *peer); void cm_on_download(struct peer *peer); void cm_on_undownload(struct peer *peer); void cm_on_piece_ann(struct peer *peer, uint32_t piece); -- cgit 1.4.1