aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/encoding
diff options
context:
space:
mode:
authorClavister OpenSource <opensource@clavister.com>2011-12-09 15:43:36 +0100
committerClavister OpenSource <opensource@clavister.com>2012-03-20 17:31:14 +0100
commit9ce5d0c0e8af70ca2a88483b57e6aaa47d2f2961 (patch)
tree36c9957b60001b60abe97a5179260b9980ff5871 /src/libcharon/encoding
parenta064eaa8a63a7ed2b3d8b5f0807d791d9ed89f5c (diff)
downloadstrongswan-9ce5d0c0e8af70ca2a88483b57e6aaa47d2f2961.tar.bz2
strongswan-9ce5d0c0e8af70ca2a88483b57e6aaa47d2f2961.tar.xz
added functions for getting/setting ISAKMP SPI to notify payload
Diffstat (limited to 'src/libcharon/encoding')
-rwxr-xr-x[-rw-r--r--]src/libcharon/encoding/payloads/notify_payload.c33
-rwxr-xr-x[-rw-r--r--]src/libcharon/encoding/payloads/notify_payload.h18
2 files changed, 51 insertions, 0 deletions
diff --git a/src/libcharon/encoding/payloads/notify_payload.c b/src/libcharon/encoding/payloads/notify_payload.c
index a72a0f37e..6b6c28de1 100644..100755
--- a/src/libcharon/encoding/payloads/notify_payload.c
+++ b/src/libcharon/encoding/payloads/notify_payload.c
@@ -600,6 +600,37 @@ METHOD(notify_payload_t, set_spi, void,
compute_length(this);
}
+METHOD(notify_payload_t, get_spi_data, chunk_t,
+ private_notify_payload_t *this)
+{
+ switch (this->protocol_id)
+ {
+ case PROTO_IKE:
+ if (this->spi.len == 16)
+ {
+ return this->spi;
+ }
+ default:
+ break;
+ }
+ return chunk_empty;
+}
+
+METHOD(notify_payload_t, set_spi_data, void,
+ private_notify_payload_t *this, chunk_t spi)
+{
+ chunk_free(&this->spi);
+ switch (this->protocol_id)
+ {
+ case PROTO_IKE:
+ this->spi = chunk_clone(spi);
+ default:
+ break;
+ }
+ this->spi_size = this->spi.len;
+ compute_length(this);
+}
+
METHOD(notify_payload_t, get_notification_data, chunk_t,
private_notify_payload_t *this)
{
@@ -647,6 +678,8 @@ notify_payload_t *notify_payload_create(payload_type_t type)
.set_notify_type = _set_notify_type,
.get_spi = _get_spi,
.set_spi = _set_spi,
+ .get_spi_data = _get_spi_data,
+ .set_spi_data = _set_spi_data,
.get_notification_data = _get_notification_data,
.set_notification_data = _set_notification_data,
.destroy = _destroy,
diff --git a/src/libcharon/encoding/payloads/notify_payload.h b/src/libcharon/encoding/payloads/notify_payload.h
index 9539231ca..2f5294ee3 100644..100755
--- a/src/libcharon/encoding/payloads/notify_payload.h
+++ b/src/libcharon/encoding/payloads/notify_payload.h
@@ -210,6 +210,24 @@ struct notify_payload_t {
void (*set_spi) (notify_payload_t *this, u_int32_t spi);
/**
+ * Returns the currently set spi of this payload.
+ *
+ * This is only valid for notifys with protocol ISAKMP
+ *
+ * @return SPI value
+ */
+ chunk_t (*get_spi_data) (notify_payload_t *this);
+
+ /**
+ * Sets the spi of this payload.
+ *
+ * This is only valid for notifys with protocol ISAKMP
+ *
+ * @param spi SPI value
+ */
+ void (*set_spi_data) (notify_payload_t *this, chunk_t spi);
+
+ /**
* Returns the currently set notification data of payload.
*
* Returned data are not copied.