Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
clean user guide
[simgrid.git] / examples / msg / bittorrent / messages.c
1   /* Copyright (c) 2012. The SimGrid Team.
2    * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6 #include "messages.h"
7 #include "bittorrent.h"
8 /**
9  * Build a new empty message
10  * @param type type of the message
11  * @param issuer_host_name hostname of the issuer, for debuging purposes
12  * @param mailbox mailbox where the peer should answer
13  * @param peer_id id of the issuer
14  */
15 msg_task_t task_message_new(e_message_type type, const char *issuer_host_name,
16                             const char *mailbox, int peer_id)
17 {
18   message_t message = xbt_new(s_message_t, 1);
19   message->issuer_host_name = issuer_host_name;
20   message->peer_id = peer_id;
21   message->mailbox = mailbox;
22   message->type = type;
23   msg_task_t task = MSG_task_create(NULL, 0, MESSAGE_SIZE, message);
24   return task;
25 }
26
27 /**
28  * Builds a message containing an index.
29  */
30 msg_task_t task_message_index_new(e_message_type type,
31                                   const char *issuer_host_name,
32                                   const char *mailbox, int peer_id, int index)
33 {
34   msg_task_t task = task_message_new(type, issuer_host_name, mailbox, peer_id);
35   message_t message = MSG_task_get_data(task);
36   message->index = index;
37   return task;
38 }
39
40 msg_task_t task_message_bitfield_new(const char *issuer_host_name,
41                                      const char *mailbox, int peer_id,
42                                      char *bitfield)
43 {
44   msg_task_t task =
45       task_message_new(MESSAGE_BITFIELD, issuer_host_name, mailbox, peer_id);
46   message_t message = MSG_task_get_data(task);
47   message->bitfield = bitfield;
48   return task;
49 }
50
51 msg_task_t task_message_request_new(const char *issuer_host_name,
52                                     const char *mailbox, int peer_id, int index,
53                                     int block_index, int block_length)
54 {
55   msg_task_t task =
56       task_message_index_new(MESSAGE_REQUEST, issuer_host_name, mailbox,
57                              peer_id, index);
58   message_t message = MSG_task_get_data(task);
59   message->block_index = block_index;
60   message->block_length = block_length;
61   return task;
62 }
63
64 msg_task_t task_message_piece_new(const char *issuer_host_name,
65                                   const char *mailbox, int peer_id, int index,
66                                   int stalled, int block_index,
67                                   int block_length)
68 {
69   msg_task_t task =
70       task_message_index_new(MESSAGE_PIECE, issuer_host_name, mailbox, peer_id,
71                              index);
72   message_t message = MSG_task_get_data(task);
73   message->stalled = stalled;
74   message->block_index = block_index;
75   message->block_length = block_length;
76   return task;
77 }
78
79 void task_message_free(void *task)
80 {
81   message_t message = MSG_task_get_data(task);
82   xbt_free(message);
83   MSG_task_destroy(task);
84 }