Sfoglia il codice sorgente

Merge branch 'master' of https://github.com/Stasik0/Open62541

FlorianPalm 11 anni fa
parent
commit
30f23c6ce3

+ 41 - 0
open62541Stack/src/opcua_binaryEncDec.c

@@ -1020,6 +1020,47 @@ Int32 encodeExpandedNodeId(UA_ExpandedNodeId *nodeId, Int32 *pos, char *dstBuf)
 	return UA_NO_ERROR;
 }
 
+Int32 ExpandedNodeId_calcSize(UA_ExpandedNodeId *nodeId){
+	Int32 length = 0;
+
+	length += sizeof(UInt32); //nodeId->NodeId.EncodingByte
+
+	switch (nodeId->NodeId.EncodingByte)
+	{
+	case NIEVT_TWO_BYTE:
+		length += sizeof(Byte);//nodeId->NodeId.Identifier.Numeric
+		break;
+	case NIEVT_FOUR_BYTE:
+		length += sizeof(UInt16);//nodeId->NodeId.Identifier.Numeric
+		break;
+	case NIEVT_NUMERIC:
+		length += sizeof(UInt32);//nodeId->NodeId.Identifier.Numeric
+		break;
+	case NIEVT_STRING:
+		//nodeId->NodeId.Identifier.String
+		length += UAString_calcSize(&(nodeId->NodeId.Identifier.String));
+		break;
+	case NIEVT_GUID:
+		//nodeId->NodeId.Identifier.Guid
+		length += UAGuid_calcSize(&(nodeId->NodeId.Identifier.Guid));
+		break;
+	case NIEVT_BYTESTRING:
+		//nodeId->NodeId.Identifier.ByteString
+		length += UAByteString_calcSize(&(nodeId->NodeId.Identifier.ByteString));
+		break;
+	}
+	if (nodeId->NodeId.EncodingByte & NIEVT_NAMESPACE_URI_FLAG)
+	{
+		length += sizeof(UInt16);//nodeId->NodeId.Namespace
+		length += UAString_calcSize(&(nodeId->NamespaceUri));//nodeId->NamespaceUri
+	}
+	if (nodeId->NodeId.EncodingByte & NIEVT_SERVERINDEX_FLAG)
+	{
+		length += sizeof(UInt32); //nodeId->ServerIndex
+	}
+	return length;
+}
+
 Int32 decodeUAStatusCode(char * const buf, Int32 *pos, UA_StatusCode* dst)
 {
 	decoder_decodeBuiltInDatatype(buf, UINT32, pos, dst);

+ 24 - 0
open62541Stack/tests/check_stack.c

@@ -502,6 +502,15 @@ START_TEST(responseHeader_calcSize_test)
 }
 END_TEST
 
+//ToDo: Function needs to be filled
+START_TEST(expandedNodeId_calcSize_test)
+{
+	Int32 valreal = 300;
+	Int32 valcalc = 0;
+	ck_assert_int_eq(valcalc,valreal);
+}
+END_TEST
+
 START_TEST(encodeDataValue_test)
 {
 	UA_DataValue dataValue;
@@ -736,6 +745,15 @@ Suite* testSuite_encodeDataValue()
 	return s;
 }
 
+Suite* testSuite_expandedNodeId_calcSize(void)
+{
+	Suite *s = suite_create("expandedNodeId_calcSize");
+	TCase *tc_core = tcase_create("Core");
+	tcase_add_test(tc_core,expandedNodeId_calcSize_test);
+	suite_add_tcase(s,tc_core);
+	return s;
+}
+
 /*
 Suite* TL_<TESTSUITENAME>(void)
 {
@@ -909,6 +927,12 @@ int main (void)
 	number_failed += srunner_ntests_failed(sr);
 	srunner_free(sr);
 
+	s = testSuite_expandedNodeId_calcSize();
+	sr = srunner_create(s);
+	srunner_run_all(sr,CK_NORMAL);
+	number_failed += srunner_ntests_failed(sr);
+	srunner_free(sr);
+
 	/* <TESTSUITE_TEMPLATE>
 	s =  <TESTSUITENAME>;
 	sr = srunner_create(s);