diff options
| author | Richard Nyberg <rnyberg@murmeldjur.se> | 2005-07-17 18:06:26 +0000 |
|---|---|---|
| committer | Richard Nyberg <rnyberg@murmeldjur.se> | 2005-07-17 18:06:26 +0000 |
| commit | ba425dc31afb44dbb349d7d596b6b8f77412ef53 (patch) | |
| tree | 99a6cc0292dc7c67f371cea23c7168c83db6caeb | |
| parent | 474c7b5b3ac5648274b8b1a824b7a99b92f0bf16 (diff) | |
| download | btpd-ba425dc31afb44dbb349d7d596b6b8f77412ef53.tar.gz btpd-ba425dc31afb44dbb349d7d596b6b8f77412ef53.zip | |
Make changes in the choke/interest state of a peer visible to the
policy on a lower level.
| -rw-r--r-- | btpd/peer.c | 36 | ||||
| -rw-r--r-- | btpd/policy.c | 28 | ||||
| -rw-r--r-- | 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 @@ -216,6 +216,20 @@ cm_on_unupload(struct peer *peer) } 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) { if (btpd.seconds == tp->tracker_time) @@ -247,6 +261,20 @@ cm_on_undownload(struct peer *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) { struct piece *p; 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); |