diff options
Diffstat (limited to 'src/libtnccs/plugins/tnccs_20/tnccs_20_server.c')
-rw-r--r-- | src/libtnccs/plugins/tnccs_20/tnccs_20_server.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/src/libtnccs/plugins/tnccs_20/tnccs_20_server.c b/src/libtnccs/plugins/tnccs_20/tnccs_20_server.c index aacb5aa5f..c75ecdc39 100644 --- a/src/libtnccs/plugins/tnccs_20/tnccs_20_server.c +++ b/src/libtnccs/plugins/tnccs_20/tnccs_20_server.c @@ -110,6 +110,11 @@ struct private_tnccs_20_server_t { */ bool mutual; + /** + * Mutual Capability message sent + */ + bool sent_mutual_capability; + }; /** @@ -117,8 +122,7 @@ struct private_tnccs_20_server_t { */ extern void tnccs_20_handle_ietf_error_msg(pb_tnc_msg_t *msg, bool *fatal_error); -extern void tnccs_20_handle_ita_mutual_capability_msg(pb_tnc_msg_t *msg, - bool *mutual); +extern bool tnccs_20_handle_ita_mutual_capability_msg(pb_tnc_msg_t *msg); /** * If the batch type changes then delete all accumulated PB-TNC messages @@ -224,18 +228,16 @@ static void handle_ita_message(private_tnccs_20_server_t *this, pb_tnc_msg_t *ms switch (msg_type.type) { case PB_ITA_MSG_MUTUAL_CAPABILITY: - tnccs_20_handle_ita_mutual_capability_msg(msg, &this->mutual); + this->mutual = tnccs_20_handle_ita_mutual_capability_msg(msg); - /* Respond with PB-TNC Mutual Capability message if activated */ - if (this->mutual && lib->settings->get_bool(lib->settings, - "%s.plugins.tnccs-20.mutual", FALSE, lib->ns)) + /* Respond with PB-TNC Mutual Capability message if necessary */ + if (this->mutual && !this->sent_mutual_capability) { - pb_tnc_mutual_protocol_type_t protocols = PB_MUTUAL_HALF_DUPLEX; - - msg = pb_mutual_capability_msg_create(protocols); + msg = pb_mutual_capability_msg_create(PB_MUTUAL_HALF_DUPLEX); this->mutex->lock(this->mutex); this->messages->insert_last(this->messages, msg); this->mutex->unlock(this->mutex); + this->sent_mutual_capability = TRUE; } break; default: @@ -537,7 +539,7 @@ METHOD(tnccs_20_handler_t, build, status_t, } METHOD(tnccs_20_handler_t, begin_handshake, void, - private_tnccs_20_server_t *this) + private_tnccs_20_server_t *this, bool mutual) { pb_tnc_msg_t *msg; identification_t *pdp_server; @@ -572,6 +574,12 @@ METHOD(tnccs_20_handler_t, get_mutual, bool, return this->mutual; } +METHOD(tnccs_20_handler_t, get_state, pb_tnc_state_t, + private_tnccs_20_server_t *this) +{ + return this->state_machine->get_state(this->state_machine); +} + METHOD(tnccs_20_handler_t, add_msg, void, private_tnccs_20_server_t *this, pb_tnc_msg_t *msg) { @@ -648,6 +656,7 @@ tnccs_20_handler_t* tnccs_20_server_create(tnccs_t *tnccs, .begin_handshake = _begin_handshake, .get_send_flag = _get_send_flag, .get_mutual = _get_mutual, + .get_state = _get_state, .add_msg = _add_msg, .handle_errors = _handle_errors, .destroy = _destroy, |