Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
[simgrid.git] / examples / msg / app-bittorrent / peer.h
index 4ba13ae..d08f1f2 100644 (file)
 typedef struct s_peer {
   int id;                       //peer id
 
-  int pieces;                   //number of pieces the peer has.
-  char *bitfield;               //list of pieces the peer has.
-  char *bitfield_blocks;        //list of blocks the peer has.
+  unsigned int bitfield;        //list of pieces the peer has.
+  unsigned long long bitfield_blocks; //list of blocks the peer has.
   short *pieces_count;          //number of peers that have each piece.
 
-  xbt_dynar_t current_pieces;   //current pieces the peer is downloading
+  unsigned int current_pieces;   //current pieces the peer is downloading
 
   xbt_dict_t peers;             //peers list
   xbt_dict_t active_peers;      //active peers list
   int round;                    //current round for the chocking algorithm.
 
-
   char mailbox[MAILBOX_SIZE];   //peer mailbox.
   char mailbox_tracker[MAILBOX_SIZE];   //pair mailbox while communicating with the tracker.
   const char *hostname;         //peer hostname
@@ -36,28 +34,29 @@ typedef struct s_peer {
   msg_task_t task_received;     //current task being received
   msg_comm_t comm_received;     //current comm
 
-
   RngStream stream;             //RngStream for
 
   double begin_receive_time;    //time when the receiving communication has begun, useful for calculating host speed.
-
-} s_peer_t, *peer_t;
+} s_peer_t;
+typedef s_peer_t *peer_t;
 
 /** Peer main function */
 int peer(int argc, char *argv[]);
+void get_status(char **status, unsigned int bitfield);
 
 int get_peers_data(peer_t peer);
 void leech_loop(peer_t peer, double deadline);
 void seed_loop(peer_t peer, double deadline);
 
-void peer_init(peer_t peer, int id, int seed);
+peer_t peer_init(int id, int seed);
 void peer_free(peer_t peer);
 
-int has_finished(char *bitfield);
+char* print_bitfield(unsigned int bitfield);
+int has_finished(unsigned int bitfield);
 
 void handle_message(peer_t peer, msg_task_t task);
 
-void update_pieces_count_from_bitfield(peer_t peer, char *bitfield);
+void update_pieces_count_from_bitfield(peer_t peer, unsigned int bitfield);
 void update_choked_peers(peer_t peer);
 
 void update_interested_after_receive(peer_t peer);
@@ -66,16 +65,18 @@ void update_bitfield_blocks(peer_t peer, int index, int block_index, int block_l
 int piece_complete(peer_t peer, int index);
 int get_first_block(peer_t peer, int piece);
 
+int peer_has_not_piece(peer_t peer, unsigned int piece);
+int peer_is_not_downloading_piece(peer_t peer, unsigned int piece);
+int count_pieces(unsigned int bitfield);
 
 int nb_interested_peers(peer_t peer);
 int is_interested(peer_t peer, connection_t remote_peer);
 int is_interested_and_free(peer_t peer, connection_t remote_peer);
-int in_current_pieces(peer_t peer, int piece);
 int partially_downloaded_piece(peer_t peer, connection_t remote_peer);
 
 void request_new_piece_to_peer(peer_t peer, connection_t remote_peer);
 void send_request_to_peer(peer_t peer, connection_t remote_peer, int piece);
-void remove_current_piece(peer_t peer, connection_t remote_peer, int current_piece);
+void remove_current_piece(peer_t peer, connection_t remote_peer, unsigned int current_piece);
 
 void update_active_peers_set(peer_t peer, connection_t remote_peer);
 int select_piece_to_download(peer_t peer, connection_t remote_peer);