diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn index cfa95dd9f9f2ac7888fb47b093bd3f583b850ed2..7332c1e930e5a1211800e99c927f740a53ed3fce 100644 --- a/LibOneM2M/OneM2M_Functions.ttcn +++ b/LibOneM2M/OneM2M_Functions.ttcn @@ -1051,6 +1051,7 @@ module OneM2M_Functions { f_checkAttributesToBeSaved(int2, v_request, v_response.primitive.responsePrimitive); vc_aeIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent, int2); + vc_componentRegistered := true; if(ispresent(v_response.primitive.responsePrimitive.primitiveContent.aE.aE_ID)){ f_sendAcPrimitive("AE-ID_changed", vc_aeIndex); @@ -1107,6 +1108,7 @@ module OneM2M_Functions { if(ischosen(vc_response.primitive.responsePrimitive.primitiveContent.aE)) { vc_aeIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, int2); + vc_componentRegistered := true; if(ispresent(vc_response.primitive.responsePrimitive.primitiveContent.aE.aE_ID)){ f_sendAcPrimitive("AE-ID_changed", vc_aeIndex); @@ -1428,6 +1430,7 @@ module OneM2M_Functions { v_resourceIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, p_resourceType, p_parentIndex); if(p_resourceType == int2) { vc_aeIndex := v_resourceIndex; + vc_componentRegistered := true; if(ispresent(vc_response.primitive.responsePrimitive.primitiveContent.aE.aE_ID)){ f_sendAcPrimitive("AE-ID_changed", vc_aeIndex); } @@ -2806,6 +2809,7 @@ module OneM2M_Functions { setverdict(pass, __SCOPE__&":INFO: Resource type remoteCSE created successfuly"); f_checkAttributesToBeSaved(int16, v_request, v_response.primitive.responsePrimitive); vc_remoteCseIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent, int16, -1); + vc_componentRegistered := true; v_localRemoteCSEResource := f_generateLocalResource(valueof(m_primitiveContentRemoteCSE(m_contentLocalRemoteCSEResource(f_getLocalPoA(PX_TS_CSE1.mccPortIn, "")))), vc_cSEBaseIndex, int16); // FIXME To be review not sure we have to use CSE1 vc_localRemoteCseIndex := f_setLocalResource(v_localRemoteCSEResource, int16, vc_cSEBaseIndex); } @@ -2861,6 +2865,7 @@ module OneM2M_Functions { f_send(e_mcc_in_port, m_response(v_response)); vc_remoteCseIndex := f_setResource(valueof(m_primitiveContentRemoteCSE(m_contentMyRemoteCSEResource(f_getLocalPoA(PX_TS_CSE1.mcaPortIn, "")))), int16, -1, true); + vc_componentRegistered := true; v_resourceIndex := vc_remoteCseIndex; v_remoteCSERegistered:=true; tc_ac.start(10.0); @@ -3437,6 +3442,7 @@ module OneM2M_Functions { v_resourceIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, p_resourceType, p_parentIndex); if(p_resourceType == int16) { //remoteCSE vc_remoteCseIndex := v_resourceIndex; + vc_componentRegistered := true; } } [] mccPort.receive(mw_response(mw_responsePrimitiveKO)) { @@ -5651,6 +5657,12 @@ module OneM2M_Functions { } } } + case ("MqttSetDefaultTopicToNotRegistration") { + acPort.send(AcRequestPrimitive:{p_event, {charstring := int2str(p_aeIndex)}}); + } + case ("MqttSetDefaultTopicToRegistration") { + acPort.send(AcRequestPrimitive:{p_event, {charstring := int2str(p_aeIndex)}}); + } } } }//end of group AcFunctions @@ -5971,6 +5983,24 @@ module OneM2M_Functions { if(ischosen(p_msgOut.primitive.requestPrimitive)){ p_msgOut.primitive.requestPrimitive.requestIdentifier := p_msgOut.primitive.requestPrimitive.requestIdentifier & f_rnd(1, 1000000); } + if(not(vc_componentRegistered)) { + if(valueof(p_msgOut.protocolBinding) == "MQTT") { + if(ischosen(p_msgOut.primitive.requestPrimitive)) { + if(ispresent(p_msgOut.primitive.requestPrimitive.resourceType)) { + if(valueof(p_msgOut.primitive.requestPrimitive.resourceType) != int2){ + //Modify default topic to publish a non-registration message + f_sendAcPrimitive("MqttSetDefaultTopicToNotRegistration", -1); + vc_myInterfaces[enum2int(p_interfaceIds)].myPort.send(p_msgOut); + f_sendAcPrimitive("MqttSetDefaultTopicToRegistration", -1); + return; + } //else { + //f_sendAcPrimitive("MqttSetDefaultTopicToRegistration", -1); + //} + } + } + } + } + //TODO: Handle response to normal messages before CSE registration occurs vc_myInterfaces[enum2int(p_interfaceIds)].myPort.send(p_msgOut); } diff --git a/LibOneM2M/OneM2M_TestSystem.ttcn b/LibOneM2M/OneM2M_TestSystem.ttcn index 02698923b09f1c8950fcd6622811acca3f357314..fe3b31aa6366f1aa0ec20a90e71b2d88fb9cb94a 100644 --- a/LibOneM2M/OneM2M_TestSystem.ttcn +++ b/LibOneM2M/OneM2M_TestSystem.ttcn @@ -49,6 +49,7 @@ module OneM2M_TestSystem { //About configuration of the component var Configurations vc_config; var TestSystemRole vc_testSystemRole; + var boolean vc_componentRegistered := false; //Default behaviour var default vc_aeSimu := null; var default vc_cseSimu := null;