aboutsummaryrefslogtreecommitdiffstats
path: root/Source/charon/message.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/charon/message.h')
-rw-r--r--Source/charon/message.h109
1 files changed, 106 insertions, 3 deletions
diff --git a/Source/charon/message.h b/Source/charon/message.h
index 249137e2b..906c5410a 100644
--- a/Source/charon/message.h
+++ b/Source/charon/message.h
@@ -27,6 +27,38 @@
#include "packet.h"
/**
+ * @brief Different types of IKE-Exchanges.
+ *
+ * See RFC for different types.
+ */
+typedef enum exchange_type_e exchange_type_t;
+
+enum exchange_type_e{
+
+ /**
+ * NOT_SET, not a official message type :-)
+ */
+ NOT_SET = 0,
+
+ /**
+ * IKE_SA_INIT
+ */
+ IKE_SA_INIT = 34,
+ /**
+ * IKE_AUTH
+ */
+ IKE_AUTH = 35,
+ /**
+ * CREATE_CHILD_SA
+ */
+ CREATE_CHILD_SA = 36,
+ /**
+ * INFORMATIONAL
+ */
+ INFORMATIONAL = 37
+};
+
+/**
* @brief This class is used to represent an IKEv2-Message.
*
* An IKEv2-Message is either a request or response.
@@ -36,21 +68,88 @@ typedef struct message_s message_t;
struct message_s {
/**
+ * @brief Sets the exchange type of the message.
+ *
+ * @param this message_t object
+ * @param exchange_type exchange_type to set
+ * @return SUCCESS
+ */
+ status_t (*set_exchange_type) (message_t *this,exchange_type_t exchange_type);
+
+ /**
+ * @brief Gets the exchange type of the message.
+ *
+ * @param this message_t object
+ * @return exchange type of the message
+ */
+ exchange_type_t (*get_exchange_type) (message_t *this);
+
+ /**
+ * @brief Sets the original initiator flag.
+ *
+ * @param this message_t object
+ * @param original_initiator TRUE if message is from original initiator
+ * @return SUCCESS
+ */
+ status_t (*set_original_initiator) (message_t *this,bool original_initiator);
+
+ /**
+ * @brief Gets original initiator flag.
+ *
+ * @param this message_t object
+ * @return TRUE if message is from original initiator, FALSE otherwise
+ */
+ bool (*get_original_initiator) (message_t *this);
+
+ /**
+ * @brief Sets the request flag.
+ *
+ * @param this message_t object
+ * @param original_initiator TRUE if message is a request, FALSE if it is a reply
+ * @return SUCCESS
+ */
+ status_t (*set_request) (message_t *this,bool request);
+
+ /**
+ * @brief Gets request flag.
+ *
+ * @param this message_t object
+ * @return TRUE if message is a request, FALSE if it is a reply
+ */
+ bool (*get_request) (message_t *this);
+
+ /**
+ * @brief Generates the UDP packet of specific message
+ *
+ * @param this message_t object
+ * @return
+ * - SUCCESS if packet could be generated
+ * - EXCHANGE_TYPE_NOT_SET if exchange type is currently not set
+ * ....
+ */
+ status_t (*generate_packet) (message_t *this, packet_t **packet);
+
+ /**
* @brief Destroys a message and all including objects
*
* @param this message_t object
- * @return
- * - SUCCESSFUL if succeeded
+ * @return SUCCESS
*/
status_t (*destroy) (message_t *this);
};
/**
* Creates an message_t object from a incoming UDP Packet.
- *
+ *
* @warning the given packet_t object is not copied and gets
* destroyed in message_t's destroy call.
*
+ * @warning Packet is not parsed in here!
+ *
+ * - exchange_type is set to NOT_SET
+ * - original_initiator is set to TRUE
+ * - is_request is set to TRUE
+ *
* @param packet packet_t object which is assigned to message
*
* @return
@@ -63,6 +162,10 @@ message_t * message_create_from_packet(packet_t *packet);
/**
* Creates an empty message_t object.
*
+ * - exchange_type is set to NOT_SET
+ * - original_initiator is set to TRUE
+ * - is_request is set to TRUE
+ *
* @return
* - created message_t object
* - NULL if out of ressources