tnccs-20: Defer handshake retry when sending SRETRY batch
Set a retry_handshake flag on a TNC server when sending a SRETRY batch and do the retry only after receiving the next CDATA batch from the TNC client.
This commit is contained in:
@@ -91,6 +91,11 @@ struct private_tnccs_20_server_t {
|
|||||||
*/
|
*/
|
||||||
bool request_handshake_retry;
|
bool request_handshake_retry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flag set after sending SRETRY batch
|
||||||
|
*/
|
||||||
|
bool retry_handshake;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SendMessage() by IMV only allowed if flag is set
|
* SendMessage() by IMV only allowed if flag is set
|
||||||
*/
|
*/
|
||||||
@@ -279,8 +284,9 @@ static void build_retry_batch(private_tnccs_20_server_t *this)
|
|||||||
change_batch_type(this, PB_BATCH_SRETRY);
|
change_batch_type(this, PB_BATCH_SRETRY);
|
||||||
|
|
||||||
this->recs->clear_recommendation(this->recs);
|
this->recs->clear_recommendation(this->recs);
|
||||||
tnc->imvs->notify_connection_change(tnc->imvs, this->connection_id,
|
|
||||||
TNC_CONNECTION_STATE_HANDSHAKE);
|
/* Handshake will be retried with next incoming CDATA batch */
|
||||||
|
this->retry_handshake = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(tnccs_20_handler_t, process, status_t,
|
METHOD(tnccs_20_handler_t, process, status_t,
|
||||||
@@ -301,7 +307,17 @@ METHOD(tnccs_20_handler_t, process, status_t,
|
|||||||
pb_tnc_msg_t *msg;
|
pb_tnc_msg_t *msg;
|
||||||
bool empty = TRUE;
|
bool empty = TRUE;
|
||||||
|
|
||||||
if (batch_type == PB_BATCH_CRETRY)
|
if (batch_type == PB_BATCH_CDATA)
|
||||||
|
{
|
||||||
|
/* retry handshake after a previous SRETRY batch */
|
||||||
|
if (this->retry_handshake)
|
||||||
|
{
|
||||||
|
tnc->imvs->notify_connection_change(tnc->imvs,
|
||||||
|
this->connection_id, TNC_CONNECTION_STATE_HANDSHAKE);
|
||||||
|
this->retry_handshake = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (batch_type == PB_BATCH_CRETRY)
|
||||||
{
|
{
|
||||||
/* Send an SRETRY batch in response */
|
/* Send an SRETRY batch in response */
|
||||||
this->mutex->lock(this->mutex);
|
this->mutex->lock(this->mutex);
|
||||||
|
|||||||
Reference in New Issue
Block a user