浏览代码

fix integer conversion for the external namespace code

Julius Pfrommer 9 年之前
父节点
当前提交
c4b386c499
共有 4 个文件被更改,包括 55 次插入54 次删除
  1. 40 41
      src/server/ua_server.c
  2. 3 3
      src/server/ua_services_attribute.c
  3. 5 5
      src/server/ua_services_nodemanagement.c
  4. 7 5
      src/server/ua_services_view.c

+ 40 - 41
src/server/ua_server.c

@@ -45,6 +45,25 @@ static const UA_NodeId nodeIdNonHierarchicalReferences = {
 /* Namespace Handling */
 /**********************/
 
+static UA_UInt16 addNamespaceInternal(UA_Server *server, const UA_String *name) {
+    //check if the namespace already exists in the server's namespace array
+    for(UA_UInt16 i=0;i<server->namespacesSize;i++) {
+        if(UA_String_equal(name, &server->namespaces[i]))
+            return i;
+    }
+    //the namespace URI did not match - add a new namespace to the namsepace array
+    server->namespaces = UA_realloc(server->namespaces,
+        sizeof(UA_String) * (server->namespacesSize + 1));
+    UA_String_copy(name, &(server->namespaces[server->namespacesSize]));
+    server->namespacesSize++;
+    return (UA_UInt16)(server->namespacesSize - 1);
+}
+
+UA_UInt16 UA_Server_addNamespace(UA_Server *server, const char* name) {
+    UA_String nameString = UA_STRING_ALLOC(name);
+    return addNamespaceInternal(server, &nameString);
+}
+
 #ifdef UA_ENABLE_EXTERNAL_NAMESPACES
 static void UA_ExternalNamespace_init(UA_ExternalNamespace *ens) {
     ens->index = 0;
@@ -57,53 +76,33 @@ static void UA_ExternalNamespace_deleteMembers(UA_ExternalNamespace *ens) {
 }
 
 static void UA_Server_deleteExternalNamespaces(UA_Server *server) {
-	for(UA_UInt32 i = 0; i < server->externalNamespacesSize; i++){
-		UA_ExternalNamespace_deleteMembers(&(server->externalNamespaces[i]));
-	}
-	if(server->externalNamespacesSize > 0){
-		UA_free(server->externalNamespaces);
-		server->externalNamespaces = NULL;
-		server->externalNamespacesSize = 0;
-	}
+    for(UA_UInt32 i = 0; i < server->externalNamespacesSize; i++)
+        UA_ExternalNamespace_deleteMembers(&server->externalNamespaces[i]);
+    if(server->externalNamespacesSize > 0) {
+        UA_free(server->externalNamespaces);
+        server->externalNamespaces = NULL;
+        server->externalNamespacesSize = 0;
+    }
 }
 
 UA_StatusCode UA_EXPORT
-UA_Server_addExternalNamespace(UA_Server *server,
-                               const UA_String *url, UA_ExternalNodeStore *nodeStore,UA_UInt16 *assignedNamespaceIndex) {
-	if (nodeStore == NULL)
-		return UA_STATUSCODE_BADARGUMENTSMISSING;
-	UA_UInt32 size = server->externalNamespacesSize;
-	server->externalNamespaces =
-		UA_realloc(server->externalNamespaces, sizeof(UA_ExternalNamespace) * (size + 1));
-	server->externalNamespaces[size].externalNodeStore = *nodeStore;
-	server->externalNamespaces[size].index = server->namespacesSize;
-	*assignedNamespaceIndex  = server->namespacesSize;
-	UA_String_copy(url, &server->externalNamespaces[size].url);
-	server->externalNamespacesSize++;
-	UA_Server_addNamespace(server, url);
-	return UA_STATUSCODE_GOOD;
+UA_Server_addExternalNamespace(UA_Server *server, const UA_String *url,
+                               UA_ExternalNodeStore *nodeStore, UA_UInt16 *assignedNamespaceIndex) {
+    if(!nodeStore)
+        return UA_STATUSCODE_BADARGUMENTSMISSING;
+    size_t size = server->externalNamespacesSize;
+    server->externalNamespaces =
+        UA_realloc(server->externalNamespaces, sizeof(UA_ExternalNamespace) * (size + 1));
+    server->externalNamespaces[size].externalNodeStore = *nodeStore;
+    server->externalNamespaces[size].index = (UA_UInt16)server->namespacesSize;
+    *assignedNamespaceIndex = (UA_UInt16)server->namespacesSize;
+    UA_String_copy(url, &server->externalNamespaces[size].url);
+    server->externalNamespacesSize++;
+    addNamespaceInternal(server, url);
+    return UA_STATUSCODE_GOOD;
 }
 #endif /* UA_ENABLE_EXTERNAL_NAMESPACES*/
 
-static UA_UInt16 addNamespaceInternal(UA_Server *server, UA_String *name) {
-    //check if the namespace already exists in the server's namespace array
-    for(UA_UInt16 i=0;i<server->namespacesSize;i++){
-        if(UA_String_equal(name, &(server->namespaces[i])))
-            return i;
-    }
-    //the namespace URI did not match - add a new namespace to the namsepace array
-	server->namespaces = UA_realloc(server->namespaces,
-		sizeof(UA_String) * (server->namespacesSize + 1));
-	UA_String_copy(name, &(server->namespaces[server->namespacesSize]));
-	server->namespacesSize++;
-	return (UA_UInt16)(server->namespacesSize - 1);
-}
-
-UA_UInt16 UA_Server_addNamespace(UA_Server *server, const char* name) {
-	UA_String nameString = UA_STRING_ALLOC(name);
-	return addNamespaceInternal(server, &nameString);
-}
-
 UA_StatusCode
 UA_Server_deleteNode(UA_Server *server, const UA_NodeId nodeId, UA_Boolean deleteReferences) {
     UA_RCU_LOCK();

+ 3 - 3
src/server/ua_services_attribute.c

@@ -381,14 +381,14 @@ void Service_Read(UA_Server *server, UA_Session *session,
             if(request->nodesToRead[i].nodeId.namespaceIndex != server->externalNamespaces[j].index)
                 continue;
             isExternal[i] = true;
-            indices[indexSize] = i;
+            indices[indexSize] = (UA_UInt32)i;
             indexSize++;
         }
         if(indexSize == 0)
             continue;
         UA_ExternalNodeStore *ens = &server->externalNamespaces[j].externalNodeStore;
         ens->readNodes(ens->ensHandle, &request->requestHeader, request->nodesToRead,
-                       indices, indexSize, response->results, false, response->diagnosticInfos);
+                       indices, (UA_UInt32)indexSize, response->results, false, response->diagnosticInfos);
     }
 #endif
 
@@ -731,7 +731,7 @@ void Service_Write(UA_Server *server, UA_Session *session, const UA_WriteRequest
                server->externalNamespaces[j].index)
                 continue;
             isExternal[i] = true;
-            indices[indexSize] = i;
+            indices[indexSize] = (UA_UInt32)i;
             indexSize++;
         }
         if(indexSize == 0)

+ 5 - 5
src/server/ua_services_nodemanagement.c

@@ -49,7 +49,7 @@ Service_AddNodes_existing(UA_Server *server, UA_Session *session, UA_Node *node,
         result->statusCode = UA_NodeId_copy(&node->nodeId, &result->addedNodeId);
     else
         return;
-    
+
     // reference back to the parent
     UA_AddReferencesItem item;
     UA_AddReferencesItem_init(&item);
@@ -557,14 +557,14 @@ void Service_AddNodes(UA_Server *server, UA_Session *session, const UA_AddNodesR
                server->externalNamespaces[j].index)
                 continue;
             isExternal[i] = true;
-            indices[indexSize] = i;
+            indices[indexSize] = (UA_UInt32)i;
             indexSize++;
         }
         if(indexSize == 0)
             continue;
         UA_ExternalNodeStore *ens = &server->externalNamespaces[j].externalNodeStore;
         ens->addNodes(ens->ensHandle, &request->requestHeader, request->nodesToAdd,
-                      indices, indexSize, response->results, response->diagnosticInfos);
+                      indices, (UA_UInt32)indexSize, response->results, response->diagnosticInfos);
     }
 #endif
     
@@ -813,14 +813,14 @@ void Service_AddReferences(UA_Server *server, UA_Session *session, const UA_AddR
                != server->externalNamespaces[j].index)
                 continue;
             isExternal[i] = true;
-            indices[indicesSize] = i;
+            indices[indicesSize] = (UA_UInt32)i;
             indicesSize++;
         }
         if (indicesSize == 0)
             continue;
         UA_ExternalNodeStore *ens = &server->externalNamespaces[j].externalNodeStore;
         ens->addReferences(ens->ensHandle, &request->requestHeader, request->referencesToAdd,
-                           indices, indicesSize, response->results, response->diagnosticInfos);
+                           indices, (UA_UInt32)indicesSize, response->results, response->diagnosticInfos);
     }
 #endif
 

+ 7 - 5
src/server/ua_services_view.c

@@ -395,14 +395,15 @@ void Service_Browse(UA_Server *server, UA_Session *session, const UA_BrowseReque
             if(request->nodesToBrowse[i].nodeId.namespaceIndex != server->externalNamespaces[j].index)
                 continue;
             isExternal[i] = true;
-            indices[indexSize] = i;
+            indices[indexSize] = (UA_UInt32)i;
             indexSize++;
         }
         if(indexSize == 0)
             continue;
         UA_ExternalNodeStore *ens = &server->externalNamespaces[j].externalNodeStore;
-        ens->browseNodes(ens->ensHandle, &request->requestHeader, request->nodesToBrowse, indices, indexSize,
-                         request->requestedMaxReferencesPerNode, response->results, response->diagnosticInfos);
+        ens->browseNodes(ens->ensHandle, &request->requestHeader, request->nodesToBrowse, indices,
+                         (UA_UInt32)indexSize, request->requestedMaxReferencesPerNode,
+                         response->results, response->diagnosticInfos);
     }
 #endif
 
@@ -591,14 +592,15 @@ void Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *sessio
             if(request->browsePaths[i].startingNode.namespaceIndex != server->externalNamespaces[j].index)
                 continue;
             isExternal[i] = true;
-            indices[indexSize] = i;
+            indices[indexSize] = (UA_UInt32)i;
             indexSize++;
         }
         if(indexSize == 0)
             continue;
         UA_ExternalNodeStore *ens = &server->externalNamespaces[j].externalNodeStore;
         ens->translateBrowsePathsToNodeIds(ens->ensHandle, &request->requestHeader, request->browsePaths,
-                indices, indexSize, response->results, response->diagnosticInfos);
+                                           indices, (UA_UInt32)indexSize, response->results,
+                                           response->diagnosticInfos);
     }
 #endif