Add a return value to simaka_message_t.generate()

This commit is contained in:
Martin Willi
2012-07-16 14:53:33 +02:00
parent cbfbba7d86
commit 264e702109
6 changed files with 264 additions and 90 deletions
+31 -10
View File
@@ -113,6 +113,24 @@ struct private_eap_sim_server_t {
/* version of SIM protocol we speak */
static chunk_t version = chunk_from_chars(0x00,0x01);
/**
* Generate a payload from a message, destroy message
*/
static bool generate_payload(simaka_message_t *message, chunk_t data,
eap_payload_t **out)
{
chunk_t chunk;
bool ok;
ok = message->generate(message, data, &chunk);
if (ok)
{
*out = eap_payload_create_data_own(chunk);
}
message->destroy(message);
return ok;
}
METHOD(eap_method_t, initiate, status_t,
private_eap_sim_server_t *this, eap_payload_t **out)
{
@@ -133,9 +151,10 @@ METHOD(eap_method_t, initiate, status_t,
{
message->add_attribute(message, AT_PERMANENT_ID_REQ, chunk_empty);
}
*out = eap_payload_create_data_own(message->generate(message, chunk_empty));
message->destroy(message);
if (!generate_payload(message, chunk_empty, out))
{
return FAILED;
}
this->pending = SIM_START;
return NEED_MORE;
}
@@ -176,9 +195,10 @@ static status_t reauthenticate(private_eap_sim_server_t *this,
next->get_encoding(next));
next->destroy(next);
}
*out = eap_payload_create_data_own(message->generate(message, chunk_empty));
message->destroy(message);
if (!generate_payload(message, chunk_empty, out))
{
return FAILED;
}
this->pending = SIM_REAUTHENTICATION;
return NEED_MORE;
}
@@ -393,6 +413,7 @@ static status_t process_start(private_eap_sim_server_t *this,
SIM_CHALLENGE, this->crypto);
message->add_attribute(message, AT_RAND, rands);
id = this->mgr->provider_gen_reauth(this->mgr, this->permanent, mk.ptr);
free(mk.ptr);
if (id)
{
message->add_attribute(message, AT_NEXT_REAUTH_ID,
@@ -406,10 +427,10 @@ static status_t process_start(private_eap_sim_server_t *this,
id->get_encoding(id));
id->destroy(id);
}
*out = eap_payload_create_data_own(message->generate(message, nonce));
message->destroy(message);
free(mk.ptr);
if (!generate_payload(message, nonce, out))
{
return FAILED;
}
this->pending = SIM_CHALLENGE;
return NEED_MORE;
}