randomizer_t *randomizer;
/**
- * contains the last X sent messages
+ * contains the last X responded messages
*
* X is windows size (here 1)
*/
- linked_list_t *sent_messages;
+ linked_list_t *responded_messages;
+
+ /**
+ * contains the last X requested messages
+ *
+ * X is windows size (here 1)
+ */
+ linked_list_t *requested_messages;
struct {
host_t *host;
static status_t process_message (private_ike_sa_t *this, message_t *message)
{
u_int32_t message_id;
- this->logger->log(this->logger, CONTROL|MORE, "Process message of exchange type %s",
+ bool is_request;
+ is_request = message->get_request(message);
+ this->logger->log(this->logger, CONTROL|MORE, "Process %s message of exchange type %s",(is_request) ? "REQUEST" : "RESPONSE",
mapping_find(exchange_type_m,message->get_exchange_type(message)));
- /* check message id */
-
-// message_id = message->get_message_id(message);
-// if (message_id < (message_id_in - WINDOW_SIZE))
-// {
-// this->logger->log(this->logger, ERROR, "message cause of message id not handled");
-// /* message is to old */
-// return FAILED;
-// }
-// if (message_id > (message_id_in))
-// {
-// this->logger->log(this->logger, ERROR, "message id %d not as expected %d",message_id,message_id_in);
-// /* message is to old */
-// return FAILED;
-// }
-//
-//
-//
-// message->get_exchange_type(message);
+
+ //message->get_exchange_type(message);
switch (message->get_exchange_type(message))
new_message->set_exchange_type(new_message, type);
new_message->set_request(new_message, request);
- new_message->set_message_id(new_message, this->message_id_in);
+ if (request)
+ {
+ new_message->set_message_id(new_message, this->message_id_out);
+ }else
+ {
+ new_message->set_message_id(new_message, this->message_id_in);
+ }
new_message->set_ike_sa_id(new_message, this->ike_sa_id);
return status;
}
- if ( this->sent_messages->get_count(this->sent_messages) >= WINDOW_SIZE)
+ if ( this->requested_messages->get_count(this->requested_messages) >= WINDOW_SIZE)
{
message_t *removed_message;
/* destroy message */
- this->sent_messages->remove_last(this->sent_messages,(void **)&removed_message);
+ this->requested_messages->remove_last(this->requested_messages,(void **)&removed_message);
removed_message->destroy(removed_message);
}
- status = this->sent_messages->insert_first(this->sent_messages,(void *) message);
+ status = this->requested_messages->insert_first(this->requested_messages,(void *) message);
if (status != SUCCESS)
{
this->logger->log(this->logger, ERROR, "Could not store last received message");
return status;
}
- /* message counter can no be increased */
- this->message_id_in++;
+ /* message counter can now be increased */
+ this->message_id_out++;
/* states has NOW changed :-) */
this->state = IKE_SA_INIT_REQUESTED;
/* destroy ike_sa_id */
this->ike_sa_id->destroy(this->ike_sa_id);
- /* destroy stored sent messages */
- while (this->sent_messages->get_count(this->sent_messages) > 0)
+ /* destroy stored requested messages */
+ while (this->requested_messages->get_count(this->requested_messages) > 0)
{
message_t *message;
- if (this->sent_messages->remove_first(this->sent_messages,(void **) &message) != SUCCESS)
+ if (this->requested_messages->remove_first(this->requested_messages,(void **) &message) != SUCCESS)
{
break;
}
message->destroy(message);
}
- this->sent_messages->destroy(this->sent_messages);
+ this->requested_messages->destroy(this->requested_messages);
+ /* destroy stored responded messages */
+ while (this->responded_messages->get_count(this->responded_messages) > 0)
+ {
+ message_t *message;
+ if (this->responded_messages->remove_first(this->responded_messages,(void **) &message) != SUCCESS)
+ {
+ break;
+ }
+ message->destroy(message);
+ }
+ this->responded_messages->destroy(this->responded_messages);
+
+
this->randomizer->destroy(this->randomizer);
if (this->ike_sa_init_data.diffie_hellman != NULL)
{
this->ike_sa_id->destroy(this->ike_sa_id);
allocator_free(this);
}
- this->sent_messages = linked_list_create();
- if (this->sent_messages == NULL)
+ this->responded_messages = linked_list_create();
+ if (this->responded_messages == NULL)
+ {
+ this->randomizer->destroy(this->randomizer);
+ this->child_sas->destroy(this->child_sas);
+ this->ike_sa_id->destroy(this->ike_sa_id);
+ allocator_free(this);
+ }
+ this->requested_messages = linked_list_create();
+ if (this->requested_messages == NULL)
{
this->randomizer->destroy(this->randomizer);
this->child_sas->destroy(this->child_sas);
this->ike_sa_id->destroy(this->ike_sa_id);
+ this->responded_messages->destroy(this->responded_messages);
allocator_free(this);
}
+
this->logger = global_logger_manager->create_logger(global_logger_manager, IKE_SA, NULL);
if (this->logger == NULL)
{
this->randomizer->destroy(this->randomizer);
this->child_sas->destroy(this->child_sas);
this->ike_sa_id->destroy(this->ike_sa_id);
- this->sent_messages->destroy(this->sent_messages);
+ this->responded_messages->destroy(this->responded_messages);
+ this->requested_messages->destroy(this->requested_messages);
allocator_free(this);
}