Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
a2e5e3139b8f33c53ddb08efd15db7b456b7c96d
[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, const char *mailbox, int peer_id) {
16   message_t message = xbt_new(s_message_t,1);
17   message->issuer_host_name = issuer_host_name;
18   message->peer_id = peer_id;
19   message->mailbox = mailbox;
20   message->type = type;
21   msg_task_t task = MSG_task_create(NULL,0,MESSAGE_SIZE,message);
22   return task;
23 }
24 /**
25  * Builds a message containing an index.
26  */
27 msg_task_t task_message_index_new(e_message_type type, const char *issuer_host_name, const char *mailbox, int peer_id, int index) {
28   msg_task_t task = task_message_new(type,issuer_host_name, mailbox, peer_id);
29   message_t message = MSG_task_get_data(task);
30   message->index = index;
31   return task;
32 }
33 msg_task_t task_message_bitfield_new(const char *issuer_host_name, const char *mailbox, int peer_id, char *bitfield) {
34   msg_task_t task = task_message_new(MESSAGE_BITFIELD,issuer_host_name, mailbox, peer_id);
35   message_t message = MSG_task_get_data(task);
36   message->bitfield = bitfield;
37   return task;
38 }
39 msg_task_t task_message_request_new(const char *issuer_host_name, const char *mailbox, int peer_id, int index, int block_index, int block_length) {
40   msg_task_t task = task_message_index_new(MESSAGE_REQUEST,issuer_host_name, mailbox, peer_id, index);
41   message_t message = MSG_task_get_data(task);
42   message->block_index = block_index;
43   message->block_length = block_length;
44   return task;
45 }
46 msg_task_t task_message_piece_new(const char *issuer_host_name, const char *mailbox, int peer_id, int index, int stalled, int block_index, int block_length) {
47   msg_task_t task = task_message_index_new(MESSAGE_PIECE,issuer_host_name, mailbox, peer_id, index);
48   message_t message = MSG_task_get_data(task);
49   message->stalled = stalled;
50   message->block_index = block_index;
51   message->block_length = block_length;
52   return task;
53 }
54 void task_message_free(void* task) {
55         message_t message = MSG_task_get_data(task);
56         xbt_free(message);
57         MSG_task_destroy(task);
58 }