about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRichard Nyberg <rnyberg@murmeldjur.se>2005-10-08 14:50:40 +0000
committerRichard Nyberg <rnyberg@murmeldjur.se>2005-10-08 14:50:40 +0000
commita263d2f9f69b867be4beb351da0b65d0aeab6a80 (patch)
tree090c9a2ff8a8741861e0a946349fd7d1906b1094
parent74c5b19492d955e9b0123075962d33ed74629070 (diff)
downloadbtpd-a263d2f9f69b867be4beb351da0b65d0aeab6a80.tar.gz
btpd-a263d2f9f69b867be4beb351da0b65d0aeab6a80.zip
Accept pieces even if they arrive in a different order than the
requests were sent.

-rw-r--r--btpd/peer.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/btpd/peer.c b/btpd/peer.c
index bce0497..ba71f73 100644
--- a/btpd/peer.c
+++ b/btpd/peer.c
@@ -408,11 +408,13 @@ void
 peer_on_piece(struct peer *p, uint32_t index, uint32_t begin,
     uint32_t length, const char *data)
 {
-    struct block_request *req = BTPDQ_FIRST(&p->my_reqs);
-    if ((req != NULL &&
-	    nb_get_begin(req->blk->msg) == begin &&
-	    nb_get_index(req->blk->msg) == index &&
-	    nb_get_length(req->blk->msg) == length)) {
+    struct block_request *req;
+    BTPDQ_FOREACH(req, &p->my_reqs, p_entry)
+	if ((nb_get_begin(req->blk->msg) == begin &&
+		nb_get_index(req->blk->msg) == index &&
+		nb_get_length(req->blk->msg) == length))
+	    break;
+    if (req != NULL) {
 	btpd_log(BTPD_L_MSG, "received piece(%u,%u,%u) from %p\n",
 	    index, begin, length, p);
 	assert(p->nreqs_out > 0);