Browse Source

faking RegisterNodes and UnregisterNodes

Stasik0 10 years ago
parent
commit
39efbe1859

+ 8 - 0
src/server/ua_server_binary.c

@@ -318,6 +318,14 @@ static void processMSG(UA_Connection *connection, UA_Server *server, const UA_By
         INVOKE_SERVICE(AddReferences);
         break;
 
+    case UA_NS0ID_REGISTERNODESREQUEST:
+        INVOKE_SERVICE(RegisterNodes);
+        break;
+
+    case UA_NS0ID_UNREGISTERNODESREQUEST:
+        INVOKE_SERVICE(UnregisterNodes);
+        break;
+
     case UA_NS0ID_TRANSLATEBROWSEPATHSTONODEIDSREQUEST:
         INVOKE_SERVICE(TranslateBrowsePathsToNodeIds);
         break;

+ 7 - 0
src/server/ua_services.h

@@ -138,8 +138,15 @@ void Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *sessio
                                            const UA_TranslateBrowsePathsToNodeIdsRequest *request,
                                            UA_TranslateBrowsePathsToNodeIdsResponse *response);
 // Service_BrowseNext
+
 // Service_RegisterNodes
+void Service_RegisterNodes(UA_Server *server, UA_Session *session,
+                                           const UA_RegisterNodesRequest *request,
+                                           UA_RegisterNodesResponse *response);
 // Service_UnregisterNodes
+void Service_UnregisterNodes(UA_Server *server, UA_Session *session,
+                                           const UA_UnregisterNodesRequest *request,
+                                           UA_UnregisterNodesResponse *response);
 /** @} */
 
 /**

+ 31 - 0
src/server/ua_services_view.c

@@ -379,3 +379,34 @@ void Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *sessio
     for(UA_Int32 i = 0;i < response->resultsSize;i++)
         translateBrowsePath(server, session, &request->browsePaths[i], &response->results[i]);
 }
+
+void Service_RegisterNodes(UA_Server *server, UA_Session *session,
+                                           const UA_RegisterNodesRequest *request,
+                                           UA_RegisterNodesResponse *response) {
+
+	//TODO: hang the nodeids to the session if really needed
+	response->responseHeader.timestamp = UA_DateTime_now();
+	response->registeredNodeIdsSize = request->nodesToRegisterSize;
+	response->registeredNodeIds = request->nodesToRegister;
+	if(request->nodesToRegisterSize==0){
+		response->responseHeader.serviceResult = UA_STATUSCODE_BADNOTHINGTODO;
+	}
+	if(UA_NodeId_equal(&request->requestHeader.authenticationToken, &UA_NODEID_NULL) || !UA_NodeId_equal(&request->requestHeader.authenticationToken, &session->authenticationToken) ){
+		response->responseHeader.serviceResult = UA_STATUSCODE_BADSESSIONIDINVALID;
+	}
+
+}
+
+void Service_UnregisterNodes(UA_Server *server, UA_Session *session,
+                                           const UA_UnregisterNodesRequest *request,
+                                           UA_UnregisterNodesResponse *response) {
+
+	//TODO: remove the nodeids from the session if really needed
+	response->responseHeader.timestamp = UA_DateTime_now();
+	if(request->nodesToUnregisterSize==0){
+		response->responseHeader.serviceResult = UA_STATUSCODE_BADNOTHINGTODO;
+	}
+	if(UA_NodeId_equal(&request->requestHeader.authenticationToken, &UA_NODEID_NULL) || !UA_NodeId_equal(&request->requestHeader.authenticationToken, &session->authenticationToken) ){
+		response->responseHeader.serviceResult = UA_STATUSCODE_BADSESSIONIDINVALID;
+	}
+}

+ 2 - 1
tools/generate_datatypes.py

@@ -55,7 +55,8 @@ minimal_types = ["InvalidType", "Node", "NodeClass", "ReferenceNode", "Applicati
                  "ObjectNode", "DataTypeNode", "ObjectTypeNode", "IdType", "VariableAttributes", "ObjectAttributes",
                  "NodeAttributes","ReferenceTypeAttributes", "ViewAttributes", "ObjectTypeAttributes",
                  "NodeAttributesMask","DeleteNodesItem", "DeleteNodesRequest", "DeleteNodesResponse",
-                 "DeleteReferencesItem", "DeleteReferencesRequest", "DeleteReferencesResponse"]
+                 "DeleteReferencesItem", "DeleteReferencesRequest", "DeleteReferencesResponse",
+                 "RegisterNodesRequest", "RegisterNodesResponse", "UnregisterNodesRequest", "UnregisterNodesResponse"]
 
 class TypeDescription(object):
     def __init__(self, name, nodeid, namespaceid):