IKEv1 XAuth: Added new "swap_initiator" method to the standard task_t interface. This is needed for when we move a task from the passive queue to the active one. I'm not a huge fan of this method of doing things. Perhaps we should change task_t to have build_i, build_r, process_i, and process_r methods, and call the appropriate one from the task manager, since we have these methods for most tasks anyways.
This commit is contained in:
@@ -151,6 +151,11 @@ struct task_t {
|
|||||||
* Destroys a task_t object.
|
* Destroys a task_t object.
|
||||||
*/
|
*/
|
||||||
void (*destroy) (task_t *this);
|
void (*destroy) (task_t *this);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Swaps the initiator flag in a task (if applicable, NULL OK)
|
||||||
|
*/
|
||||||
|
void (*swap_initiator) (task_t *this);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /** TASK_H_ @}*/
|
#endif /** TASK_H_ @}*/
|
||||||
|
|||||||
@@ -221,6 +221,23 @@ METHOD(task_t, destroy, void,
|
|||||||
free(this);
|
free(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
METHOD(task_t, swap_initiator, void,
|
||||||
|
private_xauth_request_t *this)
|
||||||
|
{
|
||||||
|
if(this->initiator)
|
||||||
|
{
|
||||||
|
this->public.task.build = _build_r;
|
||||||
|
this->public.task.process = _process_r;
|
||||||
|
this->initiator = FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->public.task.build = _build_i;
|
||||||
|
this->public.task.process = _process_i;
|
||||||
|
this->initiator = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Described in header.
|
* Described in header.
|
||||||
*/
|
*/
|
||||||
@@ -234,6 +251,7 @@ xauth_request_t *xauth_request_create(ike_sa_t *ike_sa, bool initiator)
|
|||||||
.get_type = _get_type,
|
.get_type = _get_type,
|
||||||
.migrate = _migrate,
|
.migrate = _migrate,
|
||||||
.destroy = _destroy,
|
.destroy = _destroy,
|
||||||
|
.swap_initiator = _swap_initiator,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.initiator = initiator,
|
.initiator = initiator,
|
||||||
|
|||||||
Reference in New Issue
Block a user