From 10c5d09927d73f659e5f8e62d43a7a2130fcf67f Mon Sep 17 00:00:00 2001
From: reinaortega <miguelangel.reinaortega@etsi.org>
Date: Mon, 9 May 2022 09:22:11 +0200
Subject: [PATCH] Fixes for crossResourceSubscription support

Signed-off-by: reinaortega <miguelangel.reinaortega@etsi.org>
---
 LibOneM2M/OneM2M_Functions.ttcn      | 25 +++++++++++++++++++++++--
 LibOneM2M/OneM2M_Templates.ttcn      |  2 +-
 LibOneM2M/OneM2M_TypesAndValues.ttcn |  1 +
 OneM2M_PermutationFunctions.ttcn     |  8 ++++----
 4 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn
index 0252a5d..805c07e 100644
--- a/LibOneM2M/OneM2M_Functions.ttcn
+++ b/LibOneM2M/OneM2M_Functions.ttcn
@@ -2592,7 +2592,7 @@ module OneM2M_Functions {
 				 * @param p_primitiveContent Expected primitiveContent in the notification
 				 * @verdict 
 				 */
-				function f_cse_notifyProcedure_representationHandler(template PrimitiveContent p_primitiveContent) runs on AeSimu {
+				function f_cse_notifyProcedure_representationHandler(template PrimitiveContent p_primitiveContent, in ResponseStatusCode p_responseStatusCode := int2000) runs on AeSimu {
 					// Local variables
 					var ResponsePrimitive v_responsePrimitive;
 					
@@ -2610,7 +2610,7 @@ module OneM2M_Functions {
 								setverdict(fail, __SCOPE__ & ":ERROR: Notification received but the content doesn't match");
 							}
 							//Send response in any case
-							v_responsePrimitive := valueof(m_responseNotification(int2000, omit));
+							v_responsePrimitive := valueof(m_responseNotification(p_responseStatusCode, omit));
 							v_responsePrimitive.requestIdentifier := vc_request.primitive.requestPrimitive.requestIdentifier;
 							f_send(e_mcaPortIn, m_response(v_responsePrimitive));
 						}
@@ -5579,6 +5579,27 @@ module OneM2M_Functions {
 						p_request.primitiveContent.token.tokenObject := fx_generateJWT();
 					}
 				}
+			} else if (p_resourceType == int48) {//crossResourceSubscription
+				//notificationURI
+				if(match(valueof(p_request.primitiveContent.crossResourceSubscription.notificationURI), v_defaultListOfURIs )){
+					p_request.primitiveContent.crossResourceSubscription.notificationURI := {f_getResourceAddress(f_getResourceIndex(f_getOriginator(p_parentIndex)))};
+				}
+				//subscriberURI
+				if(ispresent(p_request.primitiveContent.crossResourceSubscription.subscriberURI)) {
+					if(match(valueof(p_request.primitiveContent.crossResourceSubscription.subscriberURI), "NotInitialized" )){
+						p_request.primitiveContent.crossResourceSubscription.subscriberURI := valueof(p_request.from_);
+					}
+				}
+				//accessControlPolicyIds
+				if(ispresent(p_request.primitiveContent.crossResourceSubscription.accessControlPolicyIDs)) {
+					if(match(valueof(p_request.primitiveContent.crossResourceSubscription.accessControlPolicyIDs), v_defaultAcpIDs )){
+						p_request.primitiveContent.crossResourceSubscription.accessControlPolicyIDs := {f_getResourceId(vc_resourcesList[vc_acpIndex].resource)};
+					}	
+				} 
+				//creator
+				if(match(valueof(p_request.primitiveContent.crossResourceSubscription.creator), "NotInitialized" )){
+					p_request.primitiveContent.crossResourceSubscription.creator := valueof(p_request.from_);
+				} 
 			} 
 			
 			return valueof(p_request);
diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn
index 3ca1f60..6a106a7 100644
--- a/LibOneM2M/OneM2M_Templates.ttcn
+++ b/LibOneM2M/OneM2M_Templates.ttcn
@@ -2771,7 +2771,7 @@ module OneM2M_Templates {
 				primitiveContent := {crossResourceSubscription := m_contentCreateCrossResourceSubscription ({"NotInitialized"}, -, -, omit)}
 			};*/
         	
-			template (value) RequestPrimitive m_createCrossResourceSubscription(XSD.ID p_parentResourceAddress, in template (omit)  XSD.String p_name := c_defaultSubscriptionResourceName, in template (value) ListOfURIs p_notificationURI := {"NotInitialized"},
+			template (value) RequestPrimitive m_createCrossResourceSubscription(XSD.ID p_parentResourceAddress, in template (omit)  XSD.String p_name := c_defaultCrossResourceSubscriptionResourceName, in template (value) ListOfURIs p_notificationURI := {"NotInitialized"},
 				in template (omit) TimeWindowType p_timeWindowType, in template (value) AbsRelTimestamp p_timeWindowSize, in template (value) XSD.ID p_creator) modifies m_create := {
 				to_ := p_parentResourceAddress,
 				requestIdentifier := testcasename() & "-m_createCrossResourceSubscription",
diff --git a/LibOneM2M/OneM2M_TypesAndValues.ttcn b/LibOneM2M/OneM2M_TypesAndValues.ttcn
index 3bb4498..2e9e908 100644
--- a/LibOneM2M/OneM2M_TypesAndValues.ttcn
+++ b/LibOneM2M/OneM2M_TypesAndValues.ttcn
@@ -26,6 +26,7 @@ module OneM2M_TypesAndValues {
 		const XSD.String c_defaultScheduleResourceName := "MyScheduleResource";
 		const XSD.String c_defaultPollingChannelResourceName := "MyPollingChannelResource";
 		const XSD.String c_defaultSubscriptionResourceName := "MySubscriptionResource";
+		const XSD.String c_defaultCrossResourceSubscriptionResourceName := "MyCrossResourceSubscriptionResource";
 		const XSD.String c_defaultContentInstanceResourceName := "MyContentInstanceResource";
 		const XSD.String c_defaultContainerResourceName := "MyContainerResource";
 		const XSD.String c_defaultContainerAnncResourceName := "MyContainerAnncResource";
diff --git a/OneM2M_PermutationFunctions.ttcn b/OneM2M_PermutationFunctions.ttcn
index 7af70ca..009c818 100644
--- a/OneM2M_PermutationFunctions.ttcn
+++ b/OneM2M_PermutationFunctions.ttcn
@@ -10719,7 +10719,7 @@ module OneM2M_PermutationFunctions {
 					var integer v_resourceIndex := -1;
 					var integer v_resourceIndex_1 := -1;
 					var integer v_resourceIndex_2 := -1;				 
-					var template RequestPrimitive v_createRequest := m_createContainerBase;
+					var template RequestPrimitive v_createRequest := m_createContainer_noResourceName;
 					const ResourceType c_containerResourceType := int3;
 					var template RequestPrimitive v_updateRequest_1 := m_updateContainerBase;
 					var template RequestPrimitive v_updateRequest_2 := m_updateContainerBase;
@@ -10737,12 +10737,12 @@ module OneM2M_PermutationFunctions {
 					// Test adapter configuration
 
 					// Preamble
-					v_aeIndex_1 := f_cse_preamble_registerAe();//c_CRUDNDi);
+					v_aeIndex_1 := f_cse_preamble_registerAe(-, {f_getLocalPoA(vc_aeSimuDesc.mcaPortIn)}, -);//c_CRUDNDi);
 					v_resourceIndex_1 := f_cse_createResource(c_containerResourceType, v_createRequest, v_aeIndex_1);//Container_1					
 					v_resourceIndex_2 := f_cse_createResource(c_containerResourceType, v_createRequest, v_aeIndex_1);//Container_2										
 					
-					v_createRequest := m_createCrossResourceSubscription("NotInitialized", -, {f_getResourceAddress(v_aeIndex_2)}, p_timeWindowType, myAbsRelTimestamp, "NullValue");
-					v_createRequest.primitiveContent.crossResourceSubscription.regularResourcesAsTarget := {f_getResourceAddress(v_resourceIndex_1), f_getResourceAddress(v_resourceIndex_2)};
+					v_createRequest := m_createCrossResourceSubscription("NotInitialized", -, {f_getResourceAddress(v_aeIndex_2)}, p_timeWindowType, myAbsRelTimestamp, "NotInitialized");
+					v_createRequest.primitiveContent.crossResourceSubscription.regularResourcesAsTarget := {f_getResourceAddress(v_resourceIndex_1, e_nonHierarchical, e_cseRelative), f_getResourceAddress(v_resourceIndex_2, e_nonHierarchical, e_cseRelative)};
 					v_createRequest.primitiveContent.crossResourceSubscription.eventNotificationCriteriaSet.eventNotificationCriteriaEntry_list := {m_eventNotificationCriteria({int1})}; // Update_of_Resource
 					f_cse_preamble_subscriptionVerification(v_aeIndex_2, v_createRequest, int48);//AE2 registration			
 						
-- 
GitLab