aboutsummaryrefslogtreecommitdiffstats
path: root/Source/charon/encoding/payloads
diff options
context:
space:
mode:
Diffstat (limited to 'Source/charon/encoding/payloads')
-rw-r--r--Source/charon/encoding/payloads/auth_payload.c9
-rw-r--r--Source/charon/encoding/payloads/auth_payload.h10
-rw-r--r--Source/charon/encoding/payloads/id_payload.c13
-rw-r--r--Source/charon/encoding/payloads/id_payload.h12
4 files changed, 42 insertions, 2 deletions
diff --git a/Source/charon/encoding/payloads/auth_payload.c b/Source/charon/encoding/payloads/auth_payload.c
index 1070826c2..e9dad81b4 100644
--- a/Source/charon/encoding/payloads/auth_payload.c
+++ b/Source/charon/encoding/payloads/auth_payload.c
@@ -215,6 +215,14 @@ static void set_data (private_auth_payload_t *this, chunk_t data)
*/
static chunk_t get_data (private_auth_payload_t *this)
{
+ return (this->auth_data);
+}
+
+/**
+ * Implementation of auth_payload_t.get_data_clone.
+ */
+static chunk_t get_data_clone (private_auth_payload_t *this)
+{
chunk_t cloned_data;
if (this->auth_data.ptr == NULL)
{
@@ -259,6 +267,7 @@ auth_payload_t *auth_payload_create()
this->public.set_auth_method = (void (*) (auth_payload_t *,auth_method_t)) set_auth_method;
this->public.get_auth_method = (auth_method_t (*) (auth_payload_t *)) get_auth_method;
this->public.set_data = (void (*) (auth_payload_t *,chunk_t)) set_data;
+ this->public.get_data_clone = (chunk_t (*) (auth_payload_t *)) get_data_clone;
this->public.get_data = (chunk_t (*) (auth_payload_t *)) get_data;
/* private variables */
diff --git a/Source/charon/encoding/payloads/auth_payload.h b/Source/charon/encoding/payloads/auth_payload.h
index 3a2d4459d..2613288fe 100644
--- a/Source/charon/encoding/payloads/auth_payload.h
+++ b/Source/charon/encoding/payloads/auth_payload.h
@@ -115,6 +115,16 @@ struct auth_payload_t {
* @param this calling auth_payload_t object
* @return AUTH data as chunk_t
*/
+ chunk_t (*get_data_clone) (auth_payload_t *this);
+
+ /**
+ * @brief Get the AUTH data.
+ *
+ * Returned data are NOT copied
+ *
+ * @param this calling auth_payload_t object
+ * @return AUTH data as chunk_t
+ */
chunk_t (*get_data) (auth_payload_t *this);
/**
diff --git a/Source/charon/encoding/payloads/id_payload.c b/Source/charon/encoding/payloads/id_payload.c
index 285791279..9560d4f87 100644
--- a/Source/charon/encoding/payloads/id_payload.c
+++ b/Source/charon/encoding/payloads/id_payload.c
@@ -214,11 +214,20 @@ static void set_data (private_id_payload_t *this, chunk_t data)
this->payload_length = ID_PAYLOAD_HEADER_LENGTH + this->id_data.len;
}
+
/**
- * Implementation of id_payload_t.get_data.
+ * Implementation of id_payload_t.get_data_clone.
*/
static chunk_t get_data (private_id_payload_t *this)
{
+ return (this->id_data);
+}
+
+/**
+ * Implementation of id_payload_t.get_data_clone.
+ */
+static chunk_t get_data_clone (private_id_payload_t *this)
+{
chunk_t cloned_data;
if (this->id_data.ptr == NULL)
{
@@ -288,6 +297,8 @@ id_payload_t *id_payload_create(bool is_initiator)
this->public.get_id_type = (id_type_t (*) (id_payload_t *)) get_id_type;
this->public.set_data = (void (*) (id_payload_t *,chunk_t)) set_data;
this->public.get_data = (chunk_t (*) (id_payload_t *)) get_data;
+ this->public.get_data_clone = (chunk_t (*) (id_payload_t *)) get_data_clone;
+
this->public.get_initiator = (bool (*) (id_payload_t *)) get_initiator;
this->public.set_initiator = (void (*) (id_payload_t *,bool)) set_initiator;
this->public.get_identification = (identification_t * (*) (id_payload_t *this)) get_identification;
diff --git a/Source/charon/encoding/payloads/id_payload.h b/Source/charon/encoding/payloads/id_payload.h
index 7348f2668..c3951135b 100644
--- a/Source/charon/encoding/payloads/id_payload.h
+++ b/Source/charon/encoding/payloads/id_payload.h
@@ -87,9 +87,19 @@ struct id_payload_t {
* @param this calling id_payload_t object
* @return ID data as chunk_t
*/
- chunk_t (*get_data) (id_payload_t *this);
+ chunk_t (*get_data_clone) (id_payload_t *this);
/**
+ * @brief Get the ID data.
+ *
+ * Returned data are NOT copied.
+ *
+ * @param this calling id_payload_t object
+ * @return ID data as chunk_t
+ */
+ chunk_t (*get_data) (id_payload_t *this);
+
+ /**
* @brief Creates an identification object of this id payload.
*
* Returned object has to get destroyed by the caller.