Replace sleep in func_validate_remote_identity by an FSM wait-state before state_validate_remote_identity
Signed-off-by: Dennis Potman <dennis.potman@adlinktech.com>
This commit is contained in:
parent
b2b9630c38
commit
3a838f6912
1 changed files with 23 additions and 8 deletions
|
@ -141,6 +141,7 @@ static bool validate_handshake(struct ddsi_handshake *handshake, struct particip
|
|||
#define RESEND_TIMEOUT DDS_SECS(1)
|
||||
#define SEND_TOKENS_TIMEOUT DDS_MSECS(100)
|
||||
#define AUTHENTICATION_TIMEOUT DDS_SECS(100)
|
||||
#define INITIAL_DELAY DDS_MSECS(10)
|
||||
|
||||
static void func_validate_remote_identity (struct dds_security_fsm *fsm, void *arg);
|
||||
static void func_handshake_init_message_resend(struct dds_security_fsm *fsm, void *arg);
|
||||
|
@ -153,6 +154,7 @@ static void func_validation_failed (struct dds_security_fsm *fsm, voi
|
|||
static void func_send_crypto_tokens_final (struct dds_security_fsm *fsm, void *arg);
|
||||
static void func_send_crypto_tokens (struct dds_security_fsm *fsm, void *arg);
|
||||
|
||||
static dds_security_fsm_state state_initial_delay = { NULL, INITIAL_DELAY };
|
||||
static dds_security_fsm_state state_validate_remote_identity = { func_validate_remote_identity, 0 };
|
||||
static dds_security_fsm_state state_validate_remote_identity_retry_wait = { NULL, RETRY_TIMEOUT };
|
||||
static dds_security_fsm_state state_handshake_init_message_resend = { func_handshake_init_message_resend, 0 };
|
||||
|
@ -192,6 +194,7 @@ static void q_handshake_fsm_debug(
|
|||
|
||||
|
||||
if (current == NULL) state = "NULL";
|
||||
else if (current == &state_initial_delay) state = "state_initial_delay";
|
||||
else if (current == &state_validate_remote_identity) state = "state_validate_remote_identity";
|
||||
else if (current == &state_validate_remote_identity_retry_wait) state = "state_validate_remote_identity_retry_wait";
|
||||
else if (current == &state_handshake_init_message_resend) state = "state_handshake_init_message_resend";
|
||||
|
@ -250,6 +253,15 @@ static void q_handshake_fsm_debug(
|
|||
|
||||
[START]
|
||||
|
|
||||
.---------------------.
|
||||
| state_initial_delay |
|
||||
|---------------------|
|
||||
| initial_delay |
|
||||
'---------------------'
|
||||
|
|
||||
TIMEOUT
|
||||
EVENT_RECEIVED_MESSAGE_REQUEST
|
||||
|
|
||||
v
|
||||
.---------------------------------.
|
||||
| state_validate_remote_identity |
|
||||
|
@ -367,6 +379,17 @@ VALIDATION_FAILED | |
|
|||
static const dds_security_fsm_transition handshake_transistions [] =
|
||||
{ /* Start */
|
||||
{ NULL, EVENT_AUTO, NULL,
|
||||
&state_initial_delay },
|
||||
/* initial delay: a short delay to give the remote node some time for matching the
|
||||
BuiltinParticipantStatelessMessageWriter, so that it won't drop the auth_request
|
||||
we're sending (that would result in a time-out and the handshake taking longer
|
||||
than required). For the node that receives the auth_request, the transition for
|
||||
the event EVENT_RECEIVED_MESSAGE_REQUEST is added, because that node may receive the
|
||||
auth_request during this delay and can continue immediately (as the sender already
|
||||
waited for this delay before sending the request) */
|
||||
{ &state_initial_delay, EVENT_TIMEOUT, NULL,
|
||||
&state_validate_remote_identity },
|
||||
{ &state_initial_delay, EVENT_RECEIVED_MESSAGE_REQUEST, NULL,
|
||||
&state_validate_remote_identity },
|
||||
/* validate remote identity */
|
||||
{ &state_validate_remote_identity, EVENT_VALIDATION_PENDING_RETRY, NULL,
|
||||
|
@ -553,15 +576,7 @@ static void func_validate_remote_identity(struct dds_security_fsm *fsm, void *ar
|
|||
* to be send.
|
||||
*/
|
||||
if (handshake->local_auth_request_token.class_id && strlen(handshake->local_auth_request_token.class_id) != 0)
|
||||
{
|
||||
/* A short sleep to give the remote node some time for matching the
|
||||
BuiltinParticipantStatelessMessageWriter, so that it won't drop the
|
||||
sample we're sending (that would result in a time-out and the
|
||||
handshake taking 1s longer than required) */
|
||||
dds_sleepfor (DDS_MSECS(10));
|
||||
HSTRACE("FSM: validate_remote_identity: send_handshake_message AUTH_REQUEST\n");
|
||||
(void)send_handshake_message(handshake, &handshake->local_auth_request_token, pp, proxypp, 1);
|
||||
}
|
||||
|
||||
validation_failed:
|
||||
ident_token_missing:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue