| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 
 | /* Copyright (c) 2012-2025. The SimGrid Team.  All rights reserved.         */
/* This program is free software; you can redistribute it and/or modify it
 * under the terms of the license (GNU LGPL) which comes with this package. */
#ifndef BITTORRENT_BITTORRENT_HPP_
#define BITTORRENT_BITTORRENT_HPP_
#include <simgrid/s4u.hpp>
#include <xbt/random.hpp>
constexpr char TRACKER_MAILBOX[] = "tracker_mailbox";
/** Max number of peers sent by the tracker to clients */
constexpr int MAXIMUM_PEERS = 50;
/** Interval of time where the peer should send a request to the tracker */
constexpr int TRACKER_QUERY_INTERVAL = 1000;
/** Communication size for a task to the tracker */
constexpr unsigned TRACKER_COMM_SIZE = 1;
constexpr double GET_PEERS_TIMEOUT   = 10000.0;
/** Number of peers that can be unchocked at a given time */
constexpr int MAX_UNCHOKED_PEERS = 4;
/** Interval between each update of the choked peers */
constexpr int UPDATE_CHOKED_INTERVAL = 30;
/** Types of messages exchanged between two peers. */
enum class MessageType { HANDSHAKE, CHOKE, UNCHOKE, INTERESTED, NOTINTERESTED, HAVE, BITFIELD, REQUEST, PIECE, CANCEL };
class Message {
public:
  MessageType type;
  int peer_id;
  simgrid::s4u::Mailbox* return_mailbox;
  unsigned int bitfield = 0U;
  int piece             = 0;
  int block_index       = 0;
  int block_length      = 0;
  Message(MessageType type, int peer_id, simgrid::s4u::Mailbox* return_mailbox)
      : type(type), peer_id(peer_id), return_mailbox(return_mailbox){};
  Message(MessageType type, int peer_id, unsigned int bitfield, simgrid::s4u::Mailbox* return_mailbox)
      : type(type), peer_id(peer_id), return_mailbox(return_mailbox), bitfield(bitfield){};
  Message(MessageType type, int peer_id, simgrid::s4u::Mailbox* return_mailbox, int piece, int block_index,
          int block_length)
      : type(type)
      , peer_id(peer_id)
      , return_mailbox(return_mailbox)
      , piece(piece)
      , block_index(block_index)
      , block_length(block_length){};
  Message(MessageType type, int peer_id, simgrid::s4u::Mailbox* return_mailbox, int piece)
      : type(type), peer_id(peer_id), return_mailbox(return_mailbox), piece(piece){};
};
#endif /* BITTORRENT_BITTORRENT_HPP_ */
 |