Added reserved bit mangling wrapper functions to message
This commit is contained in:
@@ -490,6 +490,11 @@ struct private_message_t {
|
|||||||
*/
|
*/
|
||||||
bool is_request;
|
bool is_request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reserved bits in IKE header
|
||||||
|
*/
|
||||||
|
bool reserved[5];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sorting of message disabled?
|
* Sorting of message disabled?
|
||||||
*/
|
*/
|
||||||
@@ -653,6 +658,25 @@ METHOD(message_t, get_request, bool,
|
|||||||
return this->is_request;
|
return this->is_request;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
METHOD(message_t, get_reserved_header_bit, bool,
|
||||||
|
private_message_t *this, u_int nr)
|
||||||
|
{
|
||||||
|
if (nr < countof(this->reserved))
|
||||||
|
{
|
||||||
|
return this->reserved[nr];
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
METHOD(message_t, set_reserved_header_bit, void,
|
||||||
|
private_message_t *this, u_int nr)
|
||||||
|
{
|
||||||
|
if (nr < countof(this->reserved))
|
||||||
|
{
|
||||||
|
this->reserved[nr] = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is this message in an encoded form?
|
* Is this message in an encoded form?
|
||||||
*/
|
*/
|
||||||
@@ -1030,6 +1054,8 @@ METHOD(message_t, generate, status_t,
|
|||||||
chunk_t chunk;
|
chunk_t chunk;
|
||||||
char str[256];
|
char str[256];
|
||||||
u_int32_t *lenpos;
|
u_int32_t *lenpos;
|
||||||
|
bool *reserved;
|
||||||
|
int i;
|
||||||
|
|
||||||
if (is_encoded(this))
|
if (is_encoded(this))
|
||||||
{ /* already generated, return a new packet clone */
|
{ /* already generated, return a new packet clone */
|
||||||
@@ -1086,6 +1112,16 @@ METHOD(message_t, generate, status_t,
|
|||||||
ike_header->set_responder_spi(ike_header,
|
ike_header->set_responder_spi(ike_header,
|
||||||
this->ike_sa_id->get_responder_spi(this->ike_sa_id));
|
this->ike_sa_id->get_responder_spi(this->ike_sa_id));
|
||||||
|
|
||||||
|
for (i = 0; i < countof(this->reserved); i++)
|
||||||
|
{
|
||||||
|
reserved = payload_get_field(&ike_header->payload_interface,
|
||||||
|
RESERVED_BIT, i);
|
||||||
|
if (reserved)
|
||||||
|
{
|
||||||
|
*reserved = this->reserved[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
generator = generator_create();
|
generator = generator_create();
|
||||||
|
|
||||||
/* generate all payloads with proper next type */
|
/* generate all payloads with proper next type */
|
||||||
@@ -1154,6 +1190,8 @@ METHOD(message_t, parse_header, status_t,
|
|||||||
{
|
{
|
||||||
ike_header_t *ike_header;
|
ike_header_t *ike_header;
|
||||||
status_t status;
|
status_t status;
|
||||||
|
bool *reserved;
|
||||||
|
int i;
|
||||||
|
|
||||||
DBG2(DBG_ENC, "parsing header of message");
|
DBG2(DBG_ENC, "parsing header of message");
|
||||||
|
|
||||||
@@ -1188,7 +1226,15 @@ METHOD(message_t, parse_header, status_t,
|
|||||||
this->minor_version = ike_header->get_min_version(ike_header);
|
this->minor_version = ike_header->get_min_version(ike_header);
|
||||||
this->first_payload = ike_header->payload_interface.get_next_type(
|
this->first_payload = ike_header->payload_interface.get_next_type(
|
||||||
&ike_header->payload_interface);
|
&ike_header->payload_interface);
|
||||||
|
for (i = 0; i < countof(this->reserved); i++)
|
||||||
|
{
|
||||||
|
reserved = payload_get_field(&ike_header->payload_interface,
|
||||||
|
RESERVED_BIT, i);
|
||||||
|
if (reserved)
|
||||||
|
{
|
||||||
|
this->reserved[i] = *reserved;
|
||||||
|
}
|
||||||
|
}
|
||||||
DBG2(DBG_ENC, "parsed a %N %s", exchange_type_names, this->exchange_type,
|
DBG2(DBG_ENC, "parsed a %N %s", exchange_type_names, this->exchange_type,
|
||||||
this->is_request ? "request" : "response");
|
this->is_request ? "request" : "response");
|
||||||
|
|
||||||
@@ -1451,6 +1497,8 @@ message_t *message_create_from_packet(packet_t *packet)
|
|||||||
.get_first_payload_type = _get_first_payload_type,
|
.get_first_payload_type = _get_first_payload_type,
|
||||||
.set_request = _set_request,
|
.set_request = _set_request,
|
||||||
.get_request = _get_request,
|
.get_request = _get_request,
|
||||||
|
.get_reserved_header_bit = _get_reserved_header_bit,
|
||||||
|
.set_reserved_header_bit = _set_reserved_header_bit,
|
||||||
.add_payload = _add_payload,
|
.add_payload = _add_payload,
|
||||||
.add_notify = _add_notify,
|
.add_notify = _add_notify,
|
||||||
.disable_sort = _disable_sort,
|
.disable_sort = _disable_sort,
|
||||||
|
|||||||
@@ -153,6 +153,21 @@ struct message_t {
|
|||||||
*/
|
*/
|
||||||
bool (*get_request) (message_t *this);
|
bool (*get_request) (message_t *this);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a reserved bit in the IKE header.
|
||||||
|
*
|
||||||
|
* @param nr reserved bit to get in IKE header, 0-4
|
||||||
|
* @return TRUE if bit is set
|
||||||
|
*/
|
||||||
|
bool (*get_reserved_header_bit)(message_t *this, u_int nr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a reserved bit in the IKE header.
|
||||||
|
*
|
||||||
|
* @param nr reserved bit to set in IKE header, 0-4
|
||||||
|
*/
|
||||||
|
void (*set_reserved_header_bit)(message_t *this, u_int nr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Append a payload to the message.
|
* Append a payload to the message.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user