clean up peer request queue after message send
This commit is contained in:
parent
e5e565272e
commit
17dbad3bce
3 changed files with 27 additions and 4 deletions
|
@ -672,13 +672,30 @@ int ipfs_bitswap_message_add_wantlist_items(struct BitswapMessage* message, stru
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* Look through vector for specific Cid, then mark it cancel
|
||||||
|
* @param vector the vector of CidEntrys
|
||||||
|
* @param incoming_cid the cid to look for
|
||||||
|
* @returns true(1) if found one, false(0) if not
|
||||||
|
*/
|
||||||
|
int ipfs_bitswap_message_cancel_cid(struct Libp2pVector* vector, struct Cid* incoming_cid) {
|
||||||
|
for(int i = 0; i < vector->total; i++) {
|
||||||
|
struct CidEntry* entry = (struct CidEntry*)libp2p_utils_vector_get(vector, i);
|
||||||
|
if (ipfs_cid_compare(entry->cid, incoming_cid) == 0) {
|
||||||
|
entry->cancel = 1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* Add the blocks to the BitswapMessage
|
* Add the blocks to the BitswapMessage
|
||||||
* @param message the message
|
* @param message the message
|
||||||
* @param blocks the requested blocks
|
* @param blocks the requested blocks
|
||||||
* @returns true(1) on success, false(0) otherwise
|
* @returns true(1) on success, false(0) otherwise
|
||||||
*/
|
*/
|
||||||
int ipfs_bitswap_message_add_blocks(struct BitswapMessage* message, struct Libp2pVector* blocks) {
|
int ipfs_bitswap_message_add_blocks(struct BitswapMessage* message, struct Libp2pVector* blocks, struct Libp2pVector* cids_they_want) {
|
||||||
// bitswap 1.0 uses blocks, bitswap 1.1 uses payload
|
// bitswap 1.0 uses blocks, bitswap 1.1 uses payload
|
||||||
|
|
||||||
if (message == NULL)
|
if (message == NULL)
|
||||||
|
@ -690,9 +707,15 @@ int ipfs_bitswap_message_add_blocks(struct BitswapMessage* message, struct Libp2
|
||||||
if (message->payload == NULL)
|
if (message->payload == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
for(int i = 0; i < blocks->total; i++) {
|
int tot_blocks = blocks->total;
|
||||||
|
for(int i = 0; i < tot_blocks; i++) {
|
||||||
const struct Block* current = (const struct Block*) libp2p_utils_vector_get(blocks, i);
|
const struct Block* current = (const struct Block*) libp2p_utils_vector_get(blocks, i);
|
||||||
libp2p_utils_vector_add(message->payload, current);
|
libp2p_utils_vector_add(message->payload, current);
|
||||||
|
ipfs_bitswap_message_cancel_cid(cids_they_want, current->cid);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < tot_blocks; i++) {
|
||||||
|
libp2p_utils_vector_delete(blocks, 0);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -321,7 +321,7 @@ int ipfs_bitswap_peer_request_process_entry(const struct BitswapContext* context
|
||||||
struct BitswapMessage* msg = ipfs_bitswap_message_new();
|
struct BitswapMessage* msg = ipfs_bitswap_message_new();
|
||||||
// see if we can fulfill any of their requests. If so, fill in msg->payload
|
// see if we can fulfill any of their requests. If so, fill in msg->payload
|
||||||
ipfs_bitswap_peer_request_get_blocks_they_want(context, request);
|
ipfs_bitswap_peer_request_get_blocks_they_want(context, request);
|
||||||
ipfs_bitswap_message_add_blocks(msg, request->blocks_we_want_to_send);
|
ipfs_bitswap_message_add_blocks(msg, request->blocks_we_want_to_send, request->cids_they_want);
|
||||||
// add requests that we would like
|
// add requests that we would like
|
||||||
ipfs_bitswap_message_add_wantlist_items(msg, request->cids_we_want);
|
ipfs_bitswap_message_add_wantlist_items(msg, request->cids_we_want);
|
||||||
// send message
|
// send message
|
||||||
|
|
|
@ -215,4 +215,4 @@ int ipfs_bitswap_message_add_wantlist_items(struct BitswapMessage* message, stru
|
||||||
* @param blocks the requested blocks
|
* @param blocks the requested blocks
|
||||||
* @returns true(1) on success, false(0) otherwise
|
* @returns true(1) on success, false(0) otherwise
|
||||||
*/
|
*/
|
||||||
int ipfs_bitswap_message_add_blocks(struct BitswapMessage* message, struct Libp2pVector* blocks);
|
int ipfs_bitswap_message_add_blocks(struct BitswapMessage* message, struct Libp2pVector* blocks, struct Libp2pVector* cids_they_want);
|
||||||
|
|
Loading…
Reference in a new issue