Julius Pfrommer 10 éve
szülő
commit
ada8432102

+ 16 - 69
README.md

@@ -84,78 +84,25 @@ int main(int argc, char *argv[]) {
     	return retval;
     }
 
-    // Browse nodes in objects folder    
-    UA_BrowseRequest bReq;
-    UA_BrowseRequest_init(&bReq);
-    bReq.requestedMaxReferencesPerNode = 0;
-    bReq.nodesToBrowse = UA_BrowseDescription_new();
-    bReq.nodesToBrowseSize = 1;
-    bReq.nodesToBrowse[0].nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER); //browse objects folder
-    bReq.nodesToBrowse[0].resultMask = UA_BROWSERESULTMASK_ALL;	//return everything
-
-    UA_BrowseResponse bResp = UA_Client_browse(client, &bReq);
-    printf("%-9s %-16s %-16s %-16s\n", "NAMESPACE", "NODEID", "BROWSE NAME", "DISPLAY NAME");
-    for (int i = 0; i < bResp.resultsSize; ++i) {
-        for (int j = 0; j < bResp.results[i].referencesSize; ++j) {
-            UA_ReferenceDescription *ref = &(bResp.results[i].references[j]);
-            if(ref->nodeId.nodeId.identifierType == UA_NODEIDTYPE_NUMERIC){
-                printf("%-9d %-16d %-16.*s %-16.*s\n", ref->browseName.namespaceIndex,
-                ref->nodeId.nodeId.identifier.numeric, ref->browseName.name.length, 
-                ref->browseName.name.data, ref->displayName.text.length, ref->displayName.text.data);
-            }else if(ref->nodeId.nodeId.identifierType == UA_NODEIDTYPE_STRING){
-                printf("%-9d %-16.*s %-16.*s %-16.*s\n", ref->browseName.namespaceIndex,
-                ref->nodeId.nodeId.identifier.string.length, ref->nodeId.nodeId.identifier.string.data,
-                ref->browseName.name.length, ref->browseName.name.data, ref->displayName.text.length,
-                ref->displayName.text.data);
-            }
-            //TODO: distinguish further types
-        }
-    }
-    UA_BrowseRequest_deleteMembers(&bReq);
-    UA_BrowseResponse_deleteMembers(&bResp);
-
-    UA_Int32 value = 0;	
-    //Read node's value
-    UA_ReadRequest rReq;
-    UA_ReadRequest_init(&rReq);
-    rReq.nodesToRead = UA_ReadValueId_new();
-    rReq.nodesToReadSize = 1;
-    rReq.nodesToRead[0].nodeId = UA_NODEID_STRING(1, "the.answer");
-    rReq.nodesToRead[0].attributeId = UA_ATTRIBUTEID_VALUE;
-
-    UA_ReadResponse rResp = UA_Client_read(client, &rReq);
-    if(rResp.responseHeader.serviceResult == UA_STATUSCODE_GOOD &&
-       rResp.resultsSize > 0 && rResp.results[0].hasValue &&
-       rResp.results[0].value.data /* an empty array returns a null-ptr */ &&
-       rResp.results[0].value.type == &UA_TYPES[UA_TYPES_INT32]){
-           value = *(UA_Int32*)rResp.results[0].value.data;
+    /* Read a node's value-attribute */
+    UA_ReadRequest req;
+    UA_ReadRequest_init(&req);
+    req.nodesToRead = UA_ReadValueId_new();
+    req.nodesToReadSize = 1;
+    req.nodesToRead[0].nodeId = UA_NODEID_STRING(1, "the.answer");
+    req.nodesToRead[0].attributeId = UA_ATTRIBUTEID_VALUE;
+
+    UA_ReadResponse resp = UA_Client_read(client, &req);
+    if(resp.responseHeader.serviceResult == UA_STATUSCODE_GOOD &&
+       resp.resultsSize > 0 && resp.results[0].hasValue &&
+       resp.results[0].value.data /* an empty array returns a null-ptr */ &&
+       resp.results[0].value.type == &UA_TYPES[UA_TYPES_INT32]){
+           UA_Int32 value = *(UA_Int32*)resp.results[0].value.data;
            printf("the value is: %i\n", value);
    }
 
-    UA_ReadRequest_deleteMembers(&rReq);
-    UA_ReadResponse_deleteMembers(&rResp);
-    
-    value++;
-	// Write node's value
-	printf("\nWriting a value of node (1, \"the.answer\"):\n");
-	UA_WriteRequest wReq;
-	UA_WriteRequest_init(&wReq);
-	wReq.nodesToWrite = UA_WriteValue_new();
-	wReq.nodesToWriteSize = 1;
-	wReq.nodesToWrite[0].nodeId = UA_NODEID_STRING_ALLOC(1, "the.answer"); /* assume this node exists */
-	wReq.nodesToWrite[0].attributeId = UA_ATTRIBUTEID_VALUE;
-	wReq.nodesToWrite[0].value.hasValue = UA_TRUE;
-	wReq.nodesToWrite[0].value.value.type = &UA_TYPES[UA_TYPES_INT32];
-	wReq.nodesToWrite[0].value.value.storageType = UA_VARIANT_DATA_NODELETE; //do not free the integer on deletion
-	wReq.nodesToWrite[0].value.value.data = &value;
-
-	UA_WriteResponse wResp = UA_Client_write(client, &wReq);
-	if(wResp.responseHeader.serviceResult == UA_STATUSCODE_GOOD)
-			printf("the new value is: %i\n", value);
-
-	UA_WriteRequest_deleteMembers(&wReq);
-	UA_WriteResponse_deleteMembers(&wResp);
-    
+    UA_ReadRequest_deleteMembers(&req);
+    UA_ReadResponse_deleteMembers(&resp);
     UA_Client_disconnect(client);
     UA_Client_delete(client);
     return UA_STATUSCODE_GOOD;

+ 19 - 20
src/server/ua_securechannel_manager.c

@@ -2,10 +2,10 @@
 #include "ua_session.h"
 #include "ua_statuscodes.h"
 
-struct channel_list_entry {
+typedef struct channel_list_entry {
     UA_SecureChannel channel;
     LIST_ENTRY(channel_list_entry) pointers;
-};
+} channel_list_entry;
 
 UA_StatusCode UA_SecureChannelManager_init(UA_SecureChannelManager *cm, UA_UInt32 maxChannelCount,
                                            UA_UInt32 tokenLifetime, UA_UInt32 startChannelId,
@@ -19,8 +19,7 @@ UA_StatusCode UA_SecureChannelManager_init(UA_SecureChannelManager *cm, UA_UInt3
 }
 
 void UA_SecureChannelManager_deleteMembers(UA_SecureChannelManager *cm) {
-    struct channel_list_entry *current;
-    struct channel_list_entry *next = LIST_FIRST(&cm->channels);
+    channel_list_entry *current, *next = LIST_FIRST(&cm->channels);
     while(next) {
         current = next;
         next = LIST_NEXT(current, pointers);
@@ -34,10 +33,10 @@ void UA_SecureChannelManager_deleteMembers(UA_SecureChannelManager *cm) {
     }
 }
 
-UA_StatusCode UA_SecureChannelManager_open(UA_SecureChannelManager           *cm,
-                                           UA_Connection                     *conn,
+UA_StatusCode UA_SecureChannelManager_open(UA_SecureChannelManager *cm, UA_Connection *conn,
                                            const UA_OpenSecureChannelRequest *request,
-                                           UA_OpenSecureChannelResponse      *response) {
+                                           UA_OpenSecureChannelResponse *response)
+{
     switch(request->securityMode) {
     case UA_MESSAGESECURITYMODE_INVALID:
         response->responseHeader.serviceResult = UA_STATUSCODE_BADSECURITYMODEREJECTED;
@@ -58,7 +57,7 @@ UA_StatusCode UA_SecureChannelManager_open(UA_SecureChannelManager           *cm
         break;
     }
 
-    struct channel_list_entry *entry = UA_malloc(sizeof(struct channel_list_entry));
+    channel_list_entry *entry = UA_malloc(sizeof(channel_list_entry));
     if(!entry) return UA_STATUSCODE_BADOUTOFMEMORY;
     UA_SecureChannel_init(&entry->channel);
 
@@ -70,9 +69,8 @@ UA_StatusCode UA_SecureChannelManager_open(UA_SecureChannelManager           *cm
     entry->channel.securityToken.channelId       = cm->lastChannelId++;
     entry->channel.securityToken.tokenId         = cm->lastTokenId++;
     entry->channel.securityToken.createdAt       = UA_DateTime_now();
-    entry->channel.securityToken.revisedLifetime =
-        request->requestedLifetime > cm->maxChannelLifetime ?
-        cm->maxChannelLifetime : request->requestedLifetime;
+    entry->channel.securityToken.revisedLifetime = (request->requestedLifetime > cm->maxChannelLifetime) ?
+                                                   cm->maxChannelLifetime : request->requestedLifetime;
 
     UA_ByteString_copy(&request->clientNonce, &entry->channel.clientNonce);
     entry->channel.serverAsymAlgSettings.securityPolicyUri =
@@ -88,16 +86,17 @@ UA_StatusCode UA_SecureChannelManager_open(UA_SecureChannelManager           *cm
     return UA_STATUSCODE_GOOD;
 }
 
-UA_StatusCode UA_SecureChannelManager_renew(UA_SecureChannelManager           *cm,
-                                            UA_Connection                     *conn,
+UA_StatusCode UA_SecureChannelManager_renew(UA_SecureChannelManager *cm, UA_Connection *conn,
                                             const UA_OpenSecureChannelRequest *request,
-                                            UA_OpenSecureChannelResponse      *response) {
+                                            UA_OpenSecureChannelResponse *response)
+{
     UA_SecureChannel *channel = conn->channel;
-    if(channel == UA_NULL) return UA_STATUSCODE_BADINTERNALERROR;
+    if(channel == UA_NULL)
+        return UA_STATUSCODE_BADINTERNALERROR;
 
     channel->securityToken.tokenId         = cm->lastTokenId++;
     channel->securityToken.createdAt       = UA_DateTime_now(); // todo: is wanted?
-    channel->securityToken.revisedLifetime = request->requestedLifetime > cm->maxChannelLifetime ?
+    channel->securityToken.revisedLifetime = (request->requestedLifetime > cm->maxChannelLifetime) ?
                                              cm->maxChannelLifetime : request->requestedLifetime;
 
     if(channel->serverNonce.data != UA_NULL)
@@ -110,7 +109,7 @@ UA_StatusCode UA_SecureChannelManager_renew(UA_SecureChannelManager           *c
 }
 
 UA_SecureChannel * UA_SecureChannelManager_get(UA_SecureChannelManager *cm, UA_UInt32 channelId) {
-    struct channel_list_entry *entry;
+    channel_list_entry *entry;
     LIST_FOREACH(entry, &cm->channels, pointers) {
         if(entry->channel.securityToken.channelId == channelId)
             return &entry->channel;
@@ -119,9 +118,9 @@ UA_SecureChannel * UA_SecureChannelManager_get(UA_SecureChannelManager *cm, UA_U
 }
 
 UA_StatusCode UA_SecureChannelManager_close(UA_SecureChannelManager *cm, UA_UInt32 channelId) {
-    //TODO lock access
-    // TODO: close the binaryconnection if it is still open. So we dö not have stray pointers..
-    struct channel_list_entry *entry;
+    // TODO lock access
+    // TODO: close the binaryconnection if it is still open. So we do not have stray pointers..
+    channel_list_entry *entry;
     LIST_FOREACH(entry, &cm->channels, pointers) {
         if(entry->channel.securityToken.channelId == channelId) {
             if(entry->channel.connection)

+ 5 - 6
src/server/ua_services_nodemanagement.c

@@ -250,7 +250,8 @@ void Service_AddNodes(UA_Server *server, UA_Session *session, const UA_AddNodesR
     for(UA_Int32 j = 0;j<server->externalNamespacesSize;j++) {
         size_t indexSize = 0;
         for(size_t i = 0;i < size;i++) {
-            if(request->nodesToAdd[i].requestedNewNodeId.nodeId.namespaceIndex != server->externalNamespaces[j].index)
+            if(request->nodesToAdd[i].requestedNewNodeId.nodeId.namespaceIndex !=
+               server->externalNamespaces[j].index)
                 continue;
             isExternal[i] = UA_TRUE;
             indices[indexSize] = i;
@@ -302,11 +303,9 @@ void Service_AddReferences(UA_Server *server, UA_Session *session, const UA_AddR
 		}
 		if (indexSize == 0)
 			continue;
-		UA_ExternalNodeStore *ens =
-				&server->externalNamespaces[j].externalNodeStore;
-		ens->addReferences(ens->ensHandle, &request->requestHeader,
-				request->referencesToAdd, indices, indexSize, response->results,
-				response->diagnosticInfos);
+		UA_ExternalNodeStore *ens = &server->externalNamespaces[j].externalNodeStore;
+		ens->addReferences(ens->ensHandle, &request->requestHeader, request->referencesToAdd,
+                           indices, indexSize, response->results, response->diagnosticInfos);
 	}
 	/* ### End External Namespaces */
 

+ 28 - 21
src/server/ua_session_manager.c

@@ -8,10 +8,10 @@
  implementation is choosen based on whether multithreading is enabled or not.
  */
 
-struct session_list_entry {
+typedef struct session_list_entry {
     UA_Session session;
     LIST_ENTRY(session_list_entry) pointers;
-};
+} session_list_entry;
 
 UA_StatusCode UA_SessionManager_init(UA_SessionManager *sessionManager, UA_UInt32 maxSessionCount,
                                     UA_UInt32 maxSessionLifeTime, UA_UInt32 startSessionId) {
@@ -24,8 +24,7 @@ UA_StatusCode UA_SessionManager_init(UA_SessionManager *sessionManager, UA_UInt3
 }
 
 void UA_SessionManager_deleteMembers(UA_SessionManager *sessionManager) {
-    struct session_list_entry *current;
-    struct session_list_entry *next = LIST_FIRST(&sessionManager->sessions);
+    session_list_entry *current, *next = LIST_FIRST(&sessionManager->sessions);
     while(next) {
         current = next;
         next = LIST_NEXT(current, pointers);
@@ -37,14 +36,16 @@ void UA_SessionManager_deleteMembers(UA_SessionManager *sessionManager) {
     }
 }
 
-UA_StatusCode UA_SessionManager_getSessionById(UA_SessionManager *sessionManager, const UA_NodeId *sessionId,
-                                               UA_Session **session) {
+UA_StatusCode
+UA_SessionManager_getSessionById(UA_SessionManager *sessionManager, const UA_NodeId *sessionId,
+                                 UA_Session **session)
+{
     if(sessionManager == UA_NULL) {
         *session = UA_NULL;
         return UA_STATUSCODE_BADINTERNALERROR;
     }
 
-    struct session_list_entry *current = UA_NULL;
+    session_list_entry *current = UA_NULL;
     LIST_FOREACH(current, &sessionManager->sessions, pointers) {
         if(UA_NodeId_equal(&current->session.sessionId, sessionId))
             break;
@@ -61,14 +62,16 @@ UA_StatusCode UA_SessionManager_getSessionById(UA_SessionManager *sessionManager
     return UA_STATUSCODE_GOOD;
 }
 
-UA_StatusCode UA_SessionManager_getSessionByToken(UA_SessionManager *sessionManager, const UA_NodeId *token,
-                                                  UA_Session **session) {
+UA_StatusCode
+UA_SessionManager_getSessionByToken(UA_SessionManager *sessionManager, const UA_NodeId *token,
+                                    UA_Session **session)
+{
     if(sessionManager == UA_NULL) {
         *session = UA_NULL;
         return UA_STATUSCODE_BADINTERNALERROR;
     }
 
-    struct session_list_entry *current = UA_NULL;
+    session_list_entry *current = UA_NULL;
     LIST_FOREACH(current, &sessionManager->sessions, pointers) {
         if(UA_NodeId_equal(&current->session.authenticationToken, token))
             break;
@@ -86,23 +89,25 @@ UA_StatusCode UA_SessionManager_getSessionByToken(UA_SessionManager *sessionMana
 }
 
 /** Creates and adds a session. */
-UA_StatusCode UA_SessionManager_createSession(UA_SessionManager *sessionManager, UA_SecureChannel *channel,
-												const UA_CreateSessionRequest *request, UA_Session **session) {
+UA_StatusCode
+UA_SessionManager_createSession(UA_SessionManager *sessionManager, UA_SecureChannel *channel,
+                                const UA_CreateSessionRequest *request, UA_Session **session)
+{
     if(sessionManager->currentSessionCount >= sessionManager->maxSessionCount)
         return UA_STATUSCODE_BADTOOMANYSESSIONS;
 
-    struct session_list_entry *newentry = UA_malloc(sizeof(struct session_list_entry));
+    session_list_entry *newentry = UA_malloc(sizeof(session_list_entry));
     if(!newentry)
         return UA_STATUSCODE_BADOUTOFMEMORY;
 
     UA_Session_init(&newentry->session);
-    newentry->session.sessionId = (UA_NodeId) {.namespaceIndex = 1, .identifierType = UA_NODEIDTYPE_NUMERIC,
-                                               .identifier.numeric = sessionManager->lastSessionId++ };
-    newentry->session.authenticationToken = (UA_NodeId) {.namespaceIndex = 1,
-                                                         .identifierType = UA_NODEIDTYPE_NUMERIC,
-                                                         .identifier.numeric = sessionManager->lastSessionId };
+    newentry->session.sessionId = UA_NODEID_NUMERIC(1, sessionManager->lastSessionId++);
+    newentry->session.authenticationToken = UA_NODEID_NUMERIC(1, sessionManager->lastSessionId);
     newentry->session.channel = channel;
-    newentry->session.timeout = (request->requestedSessionTimeout <= sessionManager->maxSessionLifeTime && request->requestedSessionTimeout>0) ? request->requestedSessionTimeout : sessionManager->maxSessionLifeTime;
+    newentry->session.timeout =
+        (request->requestedSessionTimeout <= sessionManager->maxSessionLifeTime &&
+         request->requestedSessionTimeout>0) ?
+        request->requestedSessionTimeout : sessionManager->maxSessionLifeTime;
     UA_Session_setExpirationDate(&newentry->session);
 
     sessionManager->currentSessionCount++;
@@ -111,8 +116,10 @@ UA_StatusCode UA_SessionManager_createSession(UA_SessionManager *sessionManager,
     return UA_STATUSCODE_GOOD;
 }
 
-UA_StatusCode UA_SessionManager_removeSession(UA_SessionManager *sessionManager, const UA_NodeId *sessionId) {
-    struct session_list_entry *current = UA_NULL;
+UA_StatusCode
+UA_SessionManager_removeSession(UA_SessionManager *sessionManager, const UA_NodeId *sessionId)
+{
+    session_list_entry *current = UA_NULL;
     LIST_FOREACH(current, &sessionManager->sessions, pointers) {
         if(UA_NodeId_equal(&current->session.sessionId, sessionId))
             break;

+ 4 - 3
src/ua_types.c

@@ -599,8 +599,10 @@ UA_StatusCode UA_Variant_copy(UA_Variant const *src, UA_Variant *dst) {
  * - block_distance: how many elements are between the blocks (beginning to beginning)
  * - first_elem: where does the first block begin
  */
-static UA_StatusCode testRangeWithVariant(const UA_Variant *v, const UA_NumericRange range, size_t *total,
-                                          size_t *block_size, size_t *block_distance, size_t *first_elem) {
+static UA_StatusCode
+testRangeWithVariant(const UA_Variant *v, const UA_NumericRange range, size_t *total,
+                     size_t *block_size, size_t *block_distance, size_t *first_elem)
+{
     /* Test the integrity of the source variant dimensions */
     UA_Int32 dims_count = 1;
     const UA_Int32 *dims = &v->arrayLength; // default: the array has only one dimension
@@ -807,7 +809,6 @@ void UA_DiagnosticInfo_init(UA_DiagnosticInfo *p) {
 UA_StatusCode UA_DiagnosticInfo_copy(UA_DiagnosticInfo const *src, UA_DiagnosticInfo *dst) {
     UA_DiagnosticInfo_init(dst);
     *((UA_Byte*)dst) = *((const UA_Byte*)src); // the bitfield
-    
     dst->symbolicId = src->symbolicId;
     dst->namespaceUri = src->namespaceUri;
     dst->localizedText = src->localizedText;