# HG changeset patch # User Edouard Tisserant # Date 1492788339 -7200 # Node ID 4bfa4eb35ca30f5466483fb42d5580a392222795 # Parent 7a905529fc0e7bad782a4ee51f8d4188060fe4ec# Parent cb009a53b1c8e736e546638ef4f89181c02be052 merged diff -r 7a905529fc0e -r 4bfa4eb35ca3 src/sync.h --- a/src/sync.h Thu Apr 20 10:10:52 2017 +0200 +++ b/src/sync.h Fri Apr 21 17:25:39 2017 +0200 @@ -309,11 +309,12 @@ // parameters: // management (in) application defined // timeout (in,out) do not wait longer than timeout for message +// timeout == NULL or *timeout == 0 is blocking // // return value: -// next message or : -// NULL and timeout == 0 for termination -// NULL and timeout != 0 for timeout occurence +// next message, then timeout[out] == remaining time +// NULL and timeout[out] != 0 for timeout occurence +// NULL and timeout[out] == 0 for termination typedef void *(*retrieve_next_sync_msg_t)(void *management, time_t *timeout); diff -r 7a905529fc0e -r 4bfa4eb35ca3 sync/gen_statemachine.ysl2 --- a/sync/gen_statemachine.ysl2 Thu Apr 20 10:10:52 2017 +0200 +++ b/sync/gen_statemachine.ysl2 Fri Apr 21 17:25:39 2017 +0200 @@ -231,7 +231,6 @@ || || - *timeout = «@timeout»; switch (event) { || @@ -239,6 +238,7 @@ || case Init: DEBUG_LOG("FSM event", "«../@filename»_fsm.c, state=«@name»", "event=Init") + *timeout = «@timeout»; break; || @@ -300,13 +300,16 @@ case «@name»: { DEBUG_LOG("FSM event", "«../../@filename»_fsm.c, state=«../@name»", "event=«@name»") + `` if "@name='Init'" |> *timeout = «../@timeout»; || + if "count(parm) > 1" { // TODO get ride of void *extra, pass per-event struct incl all params. const "extrapEpType" call "pEp_type" with "type","name(parm[2]/*[1])"; const "extraArgName","name(parm[2]/*[2])"; |> «$extrapEpType» «$extraArgName» = («$extrapEpType»)extra; } + || `` apply "action|transition|condition"; `` if "name(*[position()=last()]) != 'transition'" |> break; diff -r 7a905529fc0e -r 4bfa4eb35ca3 sync/generated/sync_fsm.c --- a/sync/generated/sync_fsm.c Thu Apr 20 10:10:52 2017 +0200 +++ b/sync/generated/sync_fsm.c Fri Apr 21 17:25:39 2017 +0200 @@ -56,11 +56,11 @@ case InitState: { DEBUG_LOG("Entering FSM state", "sync_fsm.c", "state=InitState") - *timeout = 0; switch (event) { case Init: { DEBUG_LOG("FSM event", "sync_fsm.c, state=InitState", "event=Init") + *timeout = 0; { int cond_result = deviceGrouped(session); #ifndef NDEBUG @@ -86,10 +86,10 @@ case Sole: { DEBUG_LOG("Entering FSM state", "sync_fsm.c", "state=Sole") - *timeout = 0; switch (event) { case Init: DEBUG_LOG("FSM event", "sync_fsm.c, state=Sole", "event=Init") + *timeout = 0; break; case KeyGen: { @@ -158,10 +158,10 @@ assert(session->sync_state_payload); if(!session->sync_state_payload) return (DeviceState_state) invalid_state; Identity expected = ((SoleBeaconed_state_payload_t*)session->sync_state_payload)->expected; - *timeout = 600; switch (event) { case Init: DEBUG_LOG("FSM event", "sync_fsm.c, state=SoleBeaconed", "event=Init") + *timeout = 600; break; case KeyGen: { @@ -277,11 +277,11 @@ assert(session->sync_state_payload); if(!session->sync_state_payload) return (DeviceState_state) invalid_state; Identity expected = ((HandshakingSole_state_payload_t*)session->sync_state_payload)->expected; - *timeout = 600; switch (event) { case Init: { DEBUG_LOG("FSM event", "sync_fsm.c, state=HandshakingSole", "event=Init") + *timeout = 600; { int cond_result = keyElectionWon(session, expected); #ifndef NDEBUG @@ -502,10 +502,10 @@ assert(session->sync_state_payload); if(!session->sync_state_payload) return (DeviceState_state) invalid_state; Identity expected = ((WaitForGroupKeysSole_state_payload_t*)session->sync_state_payload)->expected; - *timeout = 600; switch (event) { case Init: DEBUG_LOG("FSM event", "sync_fsm.c, state=WaitForGroupKeysSole", "event=Init") + *timeout = 600; break; case GroupKeys: { @@ -585,10 +585,10 @@ if(!session->sync_state_payload) return (DeviceState_state) invalid_state; Identity expected = ((WaitForAcceptSole_state_payload_t*)session->sync_state_payload)->expected; group_keys_extra_t* groupkeys = ((WaitForAcceptSole_state_payload_t*)session->sync_state_payload)->groupkeys; - *timeout = 600; switch (event) { case Init: DEBUG_LOG("FSM event", "sync_fsm.c, state=WaitForAcceptSole", "event=Init") + *timeout = 600; break; case HandshakeRejected: { @@ -708,10 +708,10 @@ case Grouped: { DEBUG_LOG("Entering FSM state", "sync_fsm.c", "state=Grouped") - *timeout = 0; switch (event) { case Init: DEBUG_LOG("FSM event", "sync_fsm.c, state=Grouped", "event=Init") + *timeout = 0; break; case KeyGen: { @@ -809,10 +809,10 @@ assert(session->sync_state_payload); if(!session->sync_state_payload) return (DeviceState_state) invalid_state; Identity expected = ((GroupedBeaconed_state_payload_t*)session->sync_state_payload)->expected; - *timeout = 600; switch (event) { case Init: DEBUG_LOG("FSM event", "sync_fsm.c, state=GroupedBeaconed", "event=Init") + *timeout = 600; break; case KeyGen: { @@ -945,11 +945,11 @@ assert(session->sync_state_payload); if(!session->sync_state_payload) return (DeviceState_state) invalid_state; Identity expected = ((HandshakingGrouped_state_payload_t*)session->sync_state_payload)->expected; - *timeout = 600; switch (event) { case Init: { DEBUG_LOG("FSM event", "sync_fsm.c, state=HandshakingGrouped", "event=Init") + *timeout = 600; { int cond_result = keyElectionWon(session, expected); #ifndef NDEBUG @@ -1169,10 +1169,10 @@ assert(session->sync_state_payload); if(!session->sync_state_payload) return (DeviceState_state) invalid_state; Identity expected = ((WaitForGroupKeysGrouped_state_payload_t*)session->sync_state_payload)->expected; - *timeout = 600; switch (event) { case Init: DEBUG_LOG("FSM event", "sync_fsm.c, state=WaitForGroupKeysGrouped", "event=Init") + *timeout = 600; break; case GroupKeys: { @@ -1276,10 +1276,10 @@ if(!session->sync_state_payload) return (DeviceState_state) invalid_state; Identity expected = ((WaitForAcceptGrouped_state_payload_t*)session->sync_state_payload)->expected; group_keys_extra_t* groupkeys = ((WaitForAcceptGrouped_state_payload_t*)session->sync_state_payload)->groupkeys; - *timeout = 600; switch (event) { case Init: DEBUG_LOG("FSM event", "sync_fsm.c, state=WaitForAcceptGrouped", "event=Init") + *timeout = 600; break; case HandshakeRejected: {