2 * @file rekey_ike_sa_job.c
4 * @brief Implementation of rekey_ike_sa_job_t.
9 * Copyright (C) 2006 Martin Willi
10 * Hochschule fuer Technik Rapperswil
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23 #include "rekey_ike_sa_job.h"
28 typedef struct private_rekey_ike_sa_job_t private_rekey_ike_sa_job_t
;
31 * Private data of an rekey_ike_sa_job_t object.
33 struct private_rekey_ike_sa_job_t
{
35 * Public rekey_ike_sa_job_t interface.
37 rekey_ike_sa_job_t
public;
40 * ID of the IKE_SA to rekey
42 ike_sa_id_t
*ike_sa_id
;
45 * force reauthentication of the peer (full IKE_SA setup)
51 * Implementation of job_t.get_type.
53 static job_type_t
get_type(private_rekey_ike_sa_job_t
*this)
59 * Implementation of job_t.execute.
61 static status_t
execute(private_rekey_ike_sa_job_t
*this)
64 status_t status
= SUCCESS
;
66 ike_sa
= charon
->ike_sa_manager
->checkout(charon
->ike_sa_manager
,
70 DBG2(DBG_JOB
, "IKE_SA %J to rekey not found", this->ike_sa_id
);
76 ike_sa
->reestablish(ike_sa
);
80 status
= ike_sa
->rekey(ike_sa
);
83 if (status
== DESTROY_ME
)
85 charon
->ike_sa_manager
->checkin_and_destroy(charon
->ike_sa_manager
, ike_sa
);
89 charon
->ike_sa_manager
->checkin(charon
->ike_sa_manager
, ike_sa
);
95 * Implementation of job_t.destroy.
97 static void destroy(private_rekey_ike_sa_job_t
*this)
99 this->ike_sa_id
->destroy(this->ike_sa_id
);
104 * Described in header
106 rekey_ike_sa_job_t
*rekey_ike_sa_job_create(ike_sa_id_t
*ike_sa_id
, bool reauth
)
108 private_rekey_ike_sa_job_t
*this = malloc_thing(private_rekey_ike_sa_job_t
);
110 /* interface functions */
111 this->public.job_interface
.get_type
= (job_type_t (*) (job_t
*)) get_type
;
112 this->public.job_interface
.execute
= (status_t (*) (job_t
*)) execute
;
113 this->public.job_interface
.destroy
= (void (*)(job_t
*)) destroy
;
115 /* private variables */
116 this->ike_sa_id
= ike_sa_id
->clone(ike_sa_id
);
117 this->reauth
= reauth
;
119 return &(this->public);