From f1c55803dd0c195cc42d886417667d2c445ed037 Mon Sep 17 00:00:00 2001 From: Jan Hutter Date: Thu, 17 Nov 2005 14:26:21 +0000 Subject: [PATCH] -added handling of ike sas which has to be deleted --- Source/charon/ike_sa.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/Source/charon/ike_sa.c b/Source/charon/ike_sa.c index e6de0679f..d84375ae8 100644 --- a/Source/charon/ike_sa.c +++ b/Source/charon/ike_sa.c @@ -141,6 +141,7 @@ static status_t process_message (private_ike_sa_t *this, message_t *message) this->logger->log(this->logger, CONTROL_MORE, "Process message of exchange type %s",mapping_find(exchange_type_m,message->get_exchange_type(message))); + /* parse body */ status = message->parse_body(message); switch (status) { @@ -150,11 +151,37 @@ static status_t process_message (private_ike_sa_t *this, message_t *message) } default: { - this->logger->log(this->logger, CONTROL_MORE, "Error of type %s while parsing message body",mapping_find(status_m,status)); + this->logger->log(this->logger, ERROR, "Error of type %s while parsing message body",mapping_find(status_m,status)); + switch (this->current_state) + { + case NO_STATE: + { + job_t *delete_job; + /* create delete job for this ike_sa */ + delete_job = (job_t *) delete_ike_sa_job_create(this->ike_sa_id); + if (delete_job == NULL) + { + this->logger->log(this->logger, ERROR, "Job to delete IKE SA could not be created"); + } + + status = global_job_queue->add(global_job_queue,delete_job); + if (status != SUCCESS) + { + this->logger->log(this->logger, ERROR, "%s Job to delete IKE SA could not be added to job queue",mapping_find(status_m,status)); + delete_job->destroy_all(delete_job); + } + + } + default: + { + break; + } + } + return FAILED; } } - + return status; }