aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/encoding
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2010-11-24 17:45:12 +0100
committerMartin Willi <martin@revosec.ch>2011-01-05 16:45:52 +0100
commit2813be18f5978b430b960c9584a7b33c2c46e1e5 (patch)
tree144cce0f70d87b078258362ffb3b85cf4b9fdcea /src/libcharon/encoding
parent357e960e40f47e2c14b796981b3e610c78f6e0e5 (diff)
downloadstrongswan-2813be18f5978b430b960c9584a7b33c2c46e1e5.tar.bz2
strongswan-2813be18f5978b430b960c9584a7b33c2c46e1e5.tar.xz
Added a message method to set the "higher version supported" flag
Diffstat (limited to 'src/libcharon/encoding')
-rw-r--r--src/libcharon/encoding/message.c13
-rw-r--r--src/libcharon/encoding/message.h5
-rw-r--r--src/libcharon/encoding/payloads/ike_header.c7
-rw-r--r--src/libcharon/encoding/payloads/ike_header.h8
4 files changed, 33 insertions, 0 deletions
diff --git a/src/libcharon/encoding/message.c b/src/libcharon/encoding/message.c
index 9d66df573..c9959ab92 100644
--- a/src/libcharon/encoding/message.c
+++ b/src/libcharon/encoding/message.c
@@ -491,6 +491,11 @@ struct private_message_t {
bool is_request;
/**
+ * Higher version supported?
+ */
+ bool version_flag;
+
+ /**
* Reserved bits in IKE header
*/
bool reserved[5];
@@ -658,6 +663,12 @@ METHOD(message_t, get_request, bool,
return this->is_request;
}
+METHOD(message_t, set_version_flag, void,
+ private_message_t *this)
+{
+ this->version_flag = TRUE;
+}
+
METHOD(message_t, get_reserved_header_bit, bool,
private_message_t *this, u_int nr)
{
@@ -1105,6 +1116,7 @@ METHOD(message_t, generate, status_t,
ike_header->set_exchange_type(ike_header, this->exchange_type);
ike_header->set_message_id(ike_header, this->message_id);
ike_header->set_response_flag(ike_header, !this->is_request);
+ ike_header->set_version_flag(ike_header, this->version_flag);
ike_header->set_initiator_flag(ike_header,
this->ike_sa_id->is_initiator(this->ike_sa_id));
ike_header->set_initiator_spi(ike_header,
@@ -1497,6 +1509,7 @@ message_t *message_create_from_packet(packet_t *packet)
.get_first_payload_type = _get_first_payload_type,
.set_request = _set_request,
.get_request = _get_request,
+ .set_version_flag = _set_version_flag,
.get_reserved_header_bit = _get_reserved_header_bit,
.set_reserved_header_bit = _set_reserved_header_bit,
.add_payload = _add_payload,
diff --git a/src/libcharon/encoding/message.h b/src/libcharon/encoding/message.h
index 0cc00acba..a04048ed0 100644
--- a/src/libcharon/encoding/message.h
+++ b/src/libcharon/encoding/message.h
@@ -154,6 +154,11 @@ struct message_t {
bool (*get_request) (message_t *this);
/**
+ * Set the version flag in the IKE header.
+ */
+ void (*set_version_flag)(message_t *this);
+
+ /**
* Get a reserved bit in the IKE header.
*
* @param nr reserved bit to get in IKE header, 0-4
diff --git a/src/libcharon/encoding/payloads/ike_header.c b/src/libcharon/encoding/payloads/ike_header.c
index d061bd25a..e035b2ba1 100644
--- a/src/libcharon/encoding/payloads/ike_header.c
+++ b/src/libcharon/encoding/payloads/ike_header.c
@@ -292,6 +292,12 @@ METHOD(ike_header_t, get_version_flag, bool,
return this->flags.version;
}
+METHOD(ike_header_t, set_version_flag, void,
+ private_ike_header_t *this, bool version)
+{
+ this->flags.version = version;
+}
+
METHOD(ike_header_t, get_initiator_flag, bool,
private_ike_header_t *this)
{
@@ -363,6 +369,7 @@ ike_header_t *ike_header_create()
.get_response_flag = _get_response_flag,
.set_response_flag = _set_response_flag,
.get_version_flag = _get_version_flag,
+ .set_version_flag = _set_version_flag,
.get_initiator_flag = _get_initiator_flag,
.set_initiator_flag = _set_initiator_flag,
.get_exchange_type = _get_exchange_type,
diff --git a/src/libcharon/encoding/payloads/ike_header.h b/src/libcharon/encoding/payloads/ike_header.h
index 7bb33a586..f52c852c5 100644
--- a/src/libcharon/encoding/payloads/ike_header.h
+++ b/src/libcharon/encoding/payloads/ike_header.h
@@ -176,6 +176,7 @@ struct ike_header_t {
* @param response response flag
*/
void (*set_response_flag) (ike_header_t *this, bool response);
+
/**
* Get "higher version supported"-flag.
*
@@ -184,6 +185,13 @@ struct ike_header_t {
bool (*get_version_flag) (ike_header_t *this);
/**
+ * Set the "higher version supported"-flag.
+ *
+ * @param version flag value
+ */
+ void (*set_version_flag)(ike_header_t *this, bool version);
+
+ /**
* Get the initiator flag.
*
* @return initiator flag