aboutsummaryrefslogtreecommitdiffstats
path: root/src/libtnccs/plugins/tnccs_20/tnccs_20_server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libtnccs/plugins/tnccs_20/tnccs_20_server.c')
-rw-r--r--src/libtnccs/plugins/tnccs_20/tnccs_20_server.c29
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,