Browse Source

added namespace files

Julius Pfrommer 11 years ago
parent
commit
21c4dde219
4 changed files with 78 additions and 3 deletions
  1. 47 0
      OPCUAServer/tests/check_namespace.c
  2. 2 0
      include/opcua_basictypes.h
  3. 2 2
      src/Makefile.am
  4. 27 1
      src/opcua_basictypes.c

+ 47 - 0
OPCUAServer/tests/check_namespace.c

@@ -0,0 +1,47 @@
+/*
+ ============================================================================
+ Name        : check_stack.c
+ Author      :
+ Version     :
+ Copyright   : Your copyright notice
+ Description :
+ ============================================================================
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "opcua.h"
+#include "namespace.h"
+#include "check.h"
+
+
+
+START_TEST(test_Namespace) {
+	namespace *ns = UA_NULL;
+	create_ns(ns, 512);
+	delete_ns(ns);
+}
+END_TEST
+
+Suite * namespace_suite (void) {
+	Suite *s = suite_create ("Namespace");
+
+	TCase *tc_cd = tcase_create ("Create/Delete");
+	tcase_add_test (tc_cd, test_Namespace);
+	suite_add_tcase (s, tc_cd);
+
+	return s;
+}
+
+int main (void) {
+	return 0;
+	int number_failed;
+	Suite *s = namespace_suite ();
+	SRunner *sr = srunner_create (s);
+	srunner_run_all (sr, CK_NORMAL);
+	number_failed = srunner_ntests_failed (sr);
+	srunner_free (sr);
+	number_failed = 1;
+	return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}

+ 2 - 0
include/opcua_basictypes.h

@@ -189,6 +189,7 @@ typedef struct T_UA_Guid
 	UA_ByteString data4;
 } UA_Guid;
 UA_TYPE_METHOD_PROTOTYPES (UA_Guid)
+UA_Int32 UA_Guid_compare(UA_Guid *g1, UA_Guid *g2);
 
 /* DateTime - Part: 6, Chapter: 5.2.2.5, Page: 16 */
 typedef UA_Int64 UA_DateTime; //100 nanosecond resolution
@@ -209,6 +210,7 @@ typedef struct T_UA_NodeId
     identifier;
 } UA_NodeId;
 UA_TYPE_METHOD_PROTOTYPES (UA_NodeId)
+UA_Int32 UA_NodeId_compare(UA_NodeId *n1, UA_NodeId *n2);
 
 /** XmlElement - Part: 6, Chapter: 5.2.2.8, Page: 17 */
 typedef struct T_UA_XmlElement

+ 2 - 2
src/Makefile.am

@@ -3,7 +3,6 @@ opcua.c: $(TOOL_DIR)/opcua.c
 	cp $< $@
 opcua_namespace_0.c: $(TOOL_DIR)/opcua_namespace_0.c
 	cp $< $@
-
 #__top_builddir__bin_stackTest_out_SOURCES =	opcuaServer.c\
 #											opcua_builtInDatatypes.c\
 #											opcua_binaryEncDec.c\
@@ -36,7 +35,8 @@ libopen62541_la_SOURCES = include/opcua.h\
 						opcua_secureChannelLayer.h\
 						tcp_layer.h\
 						util/UA_list.c\
-						util/UA_indexedList.c
+						util/UA_indexedList.c\
+						namespace.c
 libopen62541_la_CFLAGS = -I $(top_builddir)/include
 
 #bin_PROGRAMS= $(top_builddir)/bin/open62541.out

+ 27 - 1
src/opcua_basictypes.c

@@ -407,6 +407,9 @@ UA_Int32 UA_Guid_decode(char const * src, UA_Int32* pos, UA_Guid *dst) {
 }
 UA_TYPE_METHOD_DELETE_STRUCT(UA_Guid)
 UA_Int32 UA_Guid_deleteMembers(UA_Guid* p) { return UA_ByteString_delete(&(p->data4)); }
+UA_Int32 UA_Guid_compare(UA_Guid *g1, UA_Guid *g2) {
+	return memcmp(g1, g2, sizeof(UA_Guid));
+}
 
 UA_Int32 UA_LocalizedText_calcSize(UA_LocalizedText const * p) {
 	UA_Int32 length = 0;
@@ -566,6 +569,7 @@ UA_Int32 UA_NodeId_decode(char const * src, UA_Int32* pos, UA_NodeId *dst) {
 	}
 	return retval;
 }
+
 UA_TYPE_METHOD_DELETE_STRUCT(UA_NodeId)
 UA_Int32 UA_NodeId_deleteMembers(UA_NodeId* p) {
 	int retval = UA_SUCCESS;
@@ -621,8 +625,30 @@ void UA_NodeId_printf(char* label, UA_NodeId* node) {
 	printf("}\n");
 }
 
+UA_Int32 UA_NodeId_compare(UA_NodeId *n1, UA_NodeId *n2) {
+	if (n1->encodingByte != n2->encodingByte || n1->namespace != n2->namespace)
+		return FALSE;
+
+	switch (n1->encodingByte) {
+	case UA_NODEIDTYPE_TWOBYTE:
+	case UA_NODEIDTYPE_FOURBYTE:
+	case UA_NODEIDTYPE_NUMERIC:
+		if(n1->identifier.numeric == n2->identifier.numeric)
+			return UA_EQUAL;
+		else
+			return UA_NOT_EQUAL;
+	case UA_NODEIDTYPE_STRING:
+		return UA_String_compare(&(n1->identifier.string), &(n2->identifier.string));
+	case UA_NODEIDTYPE_GUID:
+		return UA_Guid_compare(&(n1->identifier.guid), &(n2->identifier.guid));
+	case UA_NODEIDTYPE_BYTESTRING:
+		return UA_ByteString_compare(&(n1->identifier.byteString), &(n2->identifier.byteString));
+	}
+	return UA_NOT_EQUAL;
+}
 
-//FIXME: Sten Where do these two flags come from?
+//FIXME: Sten Where do these two flags come from? .. These are the higher bits
+//in the encodingByte that tell whether uri and serverindex have been changed
 #define NIEVT_NAMESPACE_URI_FLAG 0x80 	//Is only for ExpandedNodeId required
 #define NIEVT_SERVERINDEX_FLAG 0x40 //Is only for ExpandedNodeId required
 UA_Int32 UA_ExpandedNodeId_calcSize(UA_ExpandedNodeId const * p) {