diff options
-rw-r--r-- | Source/charon/message.c | 44 | ||||
-rw-r--r-- | Source/charon/message.h | 32 |
2 files changed, 62 insertions, 14 deletions
diff --git a/Source/charon/message.c b/Source/charon/message.c index 1dc5a15ac..96d553ece 100644 --- a/Source/charon/message.c +++ b/Source/charon/message.c @@ -1,7 +1,7 @@ /** * @file message.c * - * @brief Class message_t. Object of this type represents an IKEv2-Message + * @brief Class message_t. Object of this type represents an IKEv2-Message. * */ @@ -25,6 +25,7 @@ #include "allocator.h" #include "types.h" #include "message.h" +#include "linked_list.h" /** * Private data of an message_t object @@ -40,18 +41,31 @@ struct private_message_s { /* Private values */ - + + /** + * Assigned UDP packet. + * + * Stores incoming packet or last generated one. + */ + packet_t *packet; + + /** + * Linked List where payload data are stored in + */ + linked_list_t *payloads; }; /** - * @brief implements function destroy of message_t + * Implements message_t's destroy function. + * See #message_s.destroy. */ static status_t destroy (private_message_t *this) { - if (this == NULL) + if (this->packet != NULL) { - return FAILED; + this->packet->destroy(this->packet); } + this->payloads->destroy(this->payloads); allocator_free(this); return SUCCESS; } @@ -59,7 +73,7 @@ static status_t destroy (private_message_t *this) /* * Described in Header-File */ -message_t * message_create() +message_t *message_create_from_packet(packet_t *packet) { private_message_t *this = allocator_alloc_thing(private_message_t); if (this == NULL) @@ -67,9 +81,25 @@ message_t * message_create() return NULL; } - /* Public functions */ + /* public functions */ this->public.destroy = (status_t(*)(message_t*))destroy; + /* private values */ + this->packet = packet; + this->payloads = linked_list_create(); + if (this->payloads == NULL) + { + allocator_free(this); + return NULL; + } return (&this->public); } + +/* + * Described in Header-File + */ +message_t *message_create() +{ + return message_create_from_packet(NULL); +} diff --git a/Source/charon/message.h b/Source/charon/message.h index 1b014f7d9..249137e2b 100644 --- a/Source/charon/message.h +++ b/Source/charon/message.h @@ -1,7 +1,7 @@ /** * @file message.h * - * @brief Class message_t. Object of this type represents an IKEv2-Message + * @brief Class message_t. Object of this type represents an IKEv2-Message. * */ @@ -24,6 +24,7 @@ #define MESSAGE_H_ #include "types.h" +#include "packet.h" /** * @brief This class is used to represent an IKEv2-Message. @@ -35,20 +36,37 @@ typedef struct message_s message_t; struct message_s { /** - * @brief Destroys a message object + * @brief Destroys a message and all including objects * - * @param this message_t object - * @return SUCCESSFUL if succeeded, FAILED otherwise + * @param this message_t object + * @return + * - SUCCESSFUL if succeeded */ status_t (*destroy) (message_t *this); }; /** - * Creates an message_t object + * Creates an message_t object from a incoming UDP Packet. * - * @return created message_t object + * @warning the given packet_t object is not copied and gets + * destroyed in message_t's destroy call. + * + * @param packet packet_t object which is assigned to message + * + * @return + * - created message_t object + * - NULL if out of ressources */ -message_t * message_create(); +message_t * message_create_from_packet(packet_t *packet); + +/** + * Creates an empty message_t object. + * + * @return + * - created message_t object + * - NULL if out of ressources + */ +message_t * message_create(); #endif /*MESSAGE_H_*/ |