Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add bittorrent example
[simgrid.git] / examples / msg / bittorrent / messages.c
diff --git a/examples/msg/bittorrent/messages.c b/examples/msg/bittorrent/messages.c
new file mode 100644 (file)
index 0000000..a2e5e31
--- /dev/null
@@ -0,0 +1,58 @@
+  /* Copyright (c) 2012. 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. */
+#include "messages.h"
+#include "bittorrent.h"
+/**
+ * Build a new empty message
+ * @param type type of the message
+ * @param issuer_host_name hostname of the issuer, for debuging purposes
+ * @param mailbox mailbox where the peer should answer
+ * @param peer_id id of the issuer
+ */
+msg_task_t task_message_new(e_message_type type, const char *issuer_host_name, const char *mailbox, int peer_id) {
+  message_t message = xbt_new(s_message_t,1);
+  message->issuer_host_name = issuer_host_name;
+  message->peer_id = peer_id;
+  message->mailbox = mailbox;
+  message->type = type;
+  msg_task_t task = MSG_task_create(NULL,0,MESSAGE_SIZE,message);
+  return task;
+}
+/**
+ * Builds a message containing an index.
+ */
+msg_task_t task_message_index_new(e_message_type type, const char *issuer_host_name, const char *mailbox, int peer_id, int index) {
+  msg_task_t task = task_message_new(type,issuer_host_name, mailbox, peer_id);
+  message_t message = MSG_task_get_data(task);
+  message->index = index;
+  return task;
+}
+msg_task_t task_message_bitfield_new(const char *issuer_host_name, const char *mailbox, int peer_id, char *bitfield) {
+  msg_task_t task = task_message_new(MESSAGE_BITFIELD,issuer_host_name, mailbox, peer_id);
+  message_t message = MSG_task_get_data(task);
+  message->bitfield = bitfield;
+  return task;
+}
+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) {
+  msg_task_t task = task_message_index_new(MESSAGE_REQUEST,issuer_host_name, mailbox, peer_id, index);
+  message_t message = MSG_task_get_data(task);
+  message->block_index = block_index;
+  message->block_length = block_length;
+  return task;
+}
+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) {
+  msg_task_t task = task_message_index_new(MESSAGE_PIECE,issuer_host_name, mailbox, peer_id, index);
+  message_t message = MSG_task_get_data(task);
+  message->stalled = stalled;
+  message->block_index = block_index;
+  message->block_length = block_length;
+  return task;
+}
+void task_message_free(void* task) {
+       message_t message = MSG_task_get_data(task);
+       xbt_free(message);
+       MSG_task_destroy(task);
+}