*/
int get_peers_data(peer_t peer)
{
- int success = 0, send_success = 0;
+ int success = 0;
+ int send_success = 0;
double timeout = MSG_get_clock() + GET_PEERS_TIMEOUT;
//Build the task to send to the tracker
tracker_task_data_t data = tracker_task_data_new(MSG_host_get_name(MSG_host_self()), peer->mailbox_tracker,
if ((remote_peer->interested != 0) && (remote_peer->choked_upload == 0)) {
//add in the active peers set
xbt_dict_set_ext(peer->active_peers, (char *) &remote_peer->id, sizeof(int), remote_peer, NULL);
- } else {
- //remove
- xbt_ex_t e;
- TRY {
- xbt_dict_remove_ext(peer->active_peers, (char *) &remote_peer->id, sizeof(int));
- }
- CATCH(e) {
- xbt_ex_free(e);
- }
+ } else if (xbt_dict_get_or_null_ext(peer->active_peers, (char *) &remote_peer->id, sizeof(int))) {
+ xbt_dict_remove_ext(peer->active_peers, (char *) &remote_peer->id, sizeof(int));
}
}
peer->bitfield[message->index] == '0') {
remote_peer->am_interested = 1;
send_interested(peer, message->mailbox);
- if ((remote_peer->choked_download == 0))
+ if (remote_peer->choked_download == 0)
request_new_piece_to_peer(peer, remote_peer);
}
break;
xbt_assert(remote_peer->interested, "WTF !!!");
xbt_assert((message->index >= 0 && message->index < FILE_PIECES), "Wrong request received");
- if ((remote_peer->choked_upload == 0)) {
+ if (remote_peer->choked_upload == 0) {
XBT_DEBUG("Received a REQUEST from %s (%s) for %d (%d,%d)", message->mailbox, message->issuer_host_name,
message->index, message->block_index, message->block_index + message->block_length);
if (peer->bitfield[message->index] == '1') {
case MESSAGE_CANCEL:
XBT_DEBUG("The received CANCEL from %s (%s)", message->mailbox, message->issuer_host_name);
break;
+ default:
+ THROW_IMPOSSIBLE;
}
//Update the peer speed.
if (remote_peer) {
/** remove current_piece from the list of currently downloaded pieces. */
void remove_current_piece(peer_t peer, connection_t remote_peer, int current_piece)
{
- int piece_index = -1, piece;
- unsigned int i;
- xbt_dynar_foreach(peer->current_pieces, i, piece) {
- if (piece == current_piece) {
- piece_index = i;
- break;
- }
- }
+ int piece_index = xbt_dynar_search_or_negative(peer->current_pieces, ¤t_piece);
if (piece_index != -1)
xbt_dynar_remove_at(peer->current_pieces, piece_index, NULL);
remote_peer->current_piece = -1;
int is_interested(peer_t peer, connection_t remote_peer)
{
xbt_assert(remote_peer->bitfield, "Bitfield not received");
- int i;
- for (i = 0; i < FILE_PIECES; i++) {
+ for (int i = 0; i < FILE_PIECES; i++) {
if (remote_peer->bitfield[i] == '1' && peer->bitfield[i] == '0') {
return 1;
}
int is_interested_and_free(peer_t peer, connection_t remote_peer)
{
xbt_assert(remote_peer->bitfield, "Bitfield not received");
- int i;
- for (i = 0; i < FILE_PIECES; i++) {
+ for (int i = 0; i < FILE_PIECES; i++) {
if (remote_peer->bitfield[i] == '1' && peer->bitfield[i] == '0' &&
(in_current_pieces(peer, i) == 0)) {
return 1;
int partially_downloaded_piece(peer_t peer, connection_t remote_peer)
{
xbt_assert(remote_peer->bitfield, "Bitfield not received");
- int i;
- for (i = 0; i < FILE_PIECES; i++) {
+ for (int i = 0; i < FILE_PIECES; i++) {
if (remote_peer->bitfield[i] == '1' && peer->bitfield[i] == '0' &&
(in_current_pieces(peer, i) == 0)) {
if (get_first_block(peer, i) > 0)
/** Indicates if a piece is currently being downloaded by the peer. */
int in_current_pieces(peer_t peer, int piece)
{
- unsigned i;
- int peer_piece;
- xbt_dynar_foreach(peer->current_pieces, i, peer_piece) {
- if (peer_piece == piece) {
- return 1;
- }
- }
- return 0;
+ return xbt_dynar_member(peer->current_pieces, &piece);
}
/***********************************************************