* List of registered listeners
*/
array_t *listeners;
+
+ /**
+ * Config backend
+ */
+ private_backend_t *backend;
};
/**
return enumerator_create_single(this->peer_cfg, NULL);
}
+/**
+ * Sets the config objects provided by the backend
+ */
+static void set_config(private_backend_t *this, ike_cfg_t *ike,
+ peer_cfg_t *peer)
+{
+ DESTROY_IF(this->ike_cfg);
+ this->ike_cfg = ike;
+ DESTROY_IF(this->peer_cfg);
+ this->peer_cfg = peer;
+}
+
METHOD(exchange_test_helper_t, process_message, status_t,
private_exchange_test_helper_t *this, ike_sa_t *ike_sa, message_t *message)
{
return status;
}
-METHOD(exchange_test_helper_t, establish_sa, void,
+METHOD(exchange_test_helper_t, create_sa, child_cfg_t*,
private_exchange_test_helper_t *this, ike_sa_t **init, ike_sa_t **resp,
exchange_test_sa_conf_t *conf)
{
- private_backend_t backend = {
- .public = {
- .create_ike_cfg_enumerator = _create_ike_cfg_enumerator,
- .create_peer_cfg_enumerator = _create_peer_cfg_enumerator,
- .get_peer_cfg_by_name = (void*)return_null,
- },
- };
- ike_sa_id_t *id_i, *id_r;
- ike_sa_t *sa_i, *sa_r;
peer_cfg_t *peer_cfg;
child_cfg_t *child_cfg;
- sa_i = *init = charon->ike_sa_manager->checkout_new(charon->ike_sa_manager,
- IKEV2, TRUE);
- id_i = sa_i->get_id(sa_i);
+ *init = charon->ike_sa_manager->checkout_new(charon->ike_sa_manager,
+ IKEV2, TRUE);
- sa_r = *resp = charon->ike_sa_manager->checkout_new(charon->ike_sa_manager,
- IKEV2, FALSE);
- id_r = sa_r->get_id(sa_r);
+ *resp = charon->ike_sa_manager->checkout_new(charon->ike_sa_manager,
+ IKEV2, FALSE);
+
+ peer_cfg = create_peer_cfg(FALSE, conf);
+ child_cfg = create_child_cfg(FALSE, conf);
+ peer_cfg->add_child_cfg(peer_cfg, child_cfg->get_ref(child_cfg));
+ child_cfg->destroy(child_cfg);
+ set_config(this->backend, create_ike_cfg(FALSE, conf), peer_cfg);
peer_cfg = create_peer_cfg(TRUE, conf);
child_cfg = create_child_cfg(TRUE, conf);
peer_cfg->add_child_cfg(peer_cfg, child_cfg->get_ref(child_cfg));
- sa_i->set_peer_cfg(sa_i, peer_cfg);
+ (*init)->set_peer_cfg(*init, peer_cfg);
peer_cfg->destroy(peer_cfg);
- call_ikesa(sa_i, initiate, child_cfg, 0, NULL, NULL);
+ return child_cfg;
+}
- backend.ike_cfg = create_ike_cfg(FALSE, conf);
- peer_cfg = backend.peer_cfg = create_peer_cfg(FALSE, conf);
- child_cfg = create_child_cfg(FALSE, conf);
- peer_cfg->add_child_cfg(peer_cfg, child_cfg->get_ref(child_cfg));
- child_cfg->destroy(child_cfg);
- charon->backends->add_backend(charon->backends, &backend.public);
+METHOD(exchange_test_helper_t, establish_sa, void,
+ private_exchange_test_helper_t *this, ike_sa_t **init, ike_sa_t **resp,
+ exchange_test_sa_conf_t *conf)
+{
+ ike_sa_id_t *id_i, *id_r;
+ ike_sa_t *sa_i, *sa_r;
+ child_cfg_t *child_i;
+
+ child_i = create_sa(this, init, resp, conf);
+
+ sa_i = *init;
+ sa_r = *resp;
+
+ id_i = sa_i->get_id(sa_i);
+ id_r = sa_r->get_id(sa_r);
+
+ call_ikesa(sa_i, initiate, child_i, 0, NULL, NULL);
/* IKE_SA_INIT --> */
id_r->set_initiator_spi(id_r, id_i->get_initiator_spi(id_i));
process_message(this, sa_r, NULL);
/* <-- IKE_AUTH */
process_message(this, sa_i, NULL);
-
- charon->backends->remove_backend(charon->backends, &backend.public);
- DESTROY_IF(backend.peer_cfg);
- DESTROY_IF(backend.ike_cfg);
}
METHOD(exchange_test_helper_t, add_listener, void,
void exchange_test_helper_init(char *plugins)
{
private_exchange_test_helper_t *this;
+ private_backend_t *backend;
plugin_feature_t features[] = {
PLUGIN_REGISTER(DH, mock_dh_create),
/* we only need to support a limited number of DH groups */
PLUGIN_DEPENDS(RNG, RNG_WEAK),
};
+ INIT(backend,
+ .public = {
+ .create_ike_cfg_enumerator = _create_ike_cfg_enumerator,
+ .create_peer_cfg_enumerator = _create_peer_cfg_enumerator,
+ .get_peer_cfg_by_name = (void*)return_null,
+ },
+ );
+
INIT(this,
.public = {
.sender = mock_sender_create(),
.establish_sa = _establish_sa,
+ .create_sa = _create_sa,
.process_message = _process_message,
.add_listener = _add_listener,
},
.creds = mem_cred_create(),
+ .backend = backend,
);
initialize_logging();
charon->ike_sa_manager->set_spi_cb(charon->ike_sa_manager, get_ike_spi,
this);
+ charon->backends->add_backend(charon->backends, &backend->public);
+
lib->credmgr->add_set(lib->credmgr, &this->creds->set);
this->creds->add_shared(this->creds,
{
charon->bus->remove_listener(charon->bus, listener);
}
+ charon->backends->remove_backend(charon->backends, &this->backend->public);
+ set_config(this->backend, NULL, NULL);
+ free(this->backend);
lib->credmgr->remove_set(lib->credmgr, &this->creds->set);
this->creds->destroy(this->creds);
/* flush SAs before destroying the sender (in case of test failures) */