Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add bittorrent example
[simgrid.git] / examples / msg / bittorrent / messages.h
diff --git a/examples/msg/bittorrent/messages.h b/examples/msg/bittorrent/messages.h
new file mode 100644 (file)
index 0000000..342df0f
--- /dev/null
@@ -0,0 +1,64 @@
+/* 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. */
+
+#ifndef BITTORRENT_MESSAGES_H_
+#define BITTORRENT_MESSAGES_H_
+#include <msg/msg.h>
+/**
+ * Types of messages exchanged between two peers.
+ */
+typedef enum {
+       MESSAGE_HANDSHAKE,
+       MESSAGE_CHOKE,
+       MESSAGE_UNCHOKE,
+       MESSAGE_INTERESTED,
+       MESSAGE_NOTINTERESTED,
+       MESSAGE_HAVE,
+       MESSAGE_BITFIELD,
+       MESSAGE_REQUEST,
+       MESSAGE_PIECE
+} e_message_type;
+
+/**
+ * Message data
+ */
+typedef struct s_message {
+       e_message_type type;
+       const char *mailbox;
+       const char *issuer_host_name;
+       int peer_id;
+       char *bitfield;
+       int index;
+       int block_index;
+       int block_length;
+       int stalled:1;
+} s_message_t, *message_t;
+/**
+ * Builds a new value-less message
+ */
+XBT_INLINE msg_task_t task_message_new(e_message_type type, const char *issuer_host_name, const char *mailbox, int peer_id);
+/**
+ * Builds a new "have/piece" message
+ */
+XBT_INLINE msg_task_t task_message_index_new(e_message_type type, const char *issuer_host_name, const char *mailbox, int peer_id, int index);
+/**
+ * Builds a new bitfield message
+ */
+msg_task_t task_message_bitfield_new(const char *issuer_host_name, const char *mailbox, int peer_id, char *bitfield);
+/**
+ * Builds a new "request" message
+ */
+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);
+
+/**
+ * Build a new "piece" message
+ */
+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);
+/**
+ * Free a message task
+ */
+void task_message_free(void*);
+#endif /* BITTORRENT_MESSAGES_H_ */