Browse Source

activate modifymonitoreditems and reset subscription lifetime

Julius Pfrommer 8 years ago
parent
commit
e014b88d51

+ 9 - 1
src/server/ua_server_binary.c

@@ -261,6 +261,11 @@ getServicePointers(UA_UInt32 requestTypeId, const UA_DataType **requestType,
         *requestType = &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSREQUEST];
         *responseType = &UA_TYPES[UA_TYPES_DELETEMONITOREDITEMSRESPONSE];
         break;
+    case UA_NS0ID_MODIFYMONITOREDITEMSREQUEST:
+        *service = (UA_Service)Service_ModifyMonitoredItems;
+        *requestType = &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSREQUEST];
+        *responseType = &UA_TYPES[UA_TYPES_MODIFYMONITOREDITEMSRESPONSE];
+        break;
 #endif
 
 #ifdef UA_ENABLE_METHODCALLS
@@ -548,7 +553,7 @@ processMSG(UA_Connection *connection, UA_Server *server, const UA_ByteString *ms
     UA_Session_updateLifetime(session);
 
 #ifdef UA_ENABLE_SUBSCRIPTIONS
-    /* The publish request is answered with a delay */
+    /* The publish request is answered asynchronously */
     if(requestTypeId.identifier.numeric - UA_ENCODINGOFFSET_BINARY == UA_NS0ID_PUBLISHREQUEST) {
         Service_Publish(server, session, request, sequenceHeader.requestId);
         UA_deleteMembers(request, requestType);
@@ -557,6 +562,9 @@ processMSG(UA_Connection *connection, UA_Server *server, const UA_ByteString *ms
 #endif
         
     /* Call the service */
+    UA_LOG_DEBUG(server->config.logger, UA_LOGCATEGORY_SERVER,
+                 "Processing a service with type id %u on Session %u",
+                 requestType->typeId.identifier.numeric, session->authenticationToken.identifier.numeric);
     void *response = UA_alloca(responseType->memSize);
     UA_init(response, responseType);
     init_response_header(request, response);

+ 3 - 3
src/server/ua_services_nodemanagement.c

@@ -765,8 +765,7 @@ Service_AddReferences_single(UA_Server *server, UA_Session *session, const UA_Ad
 
     /* cast away the const to loop the call through UA_Server_editNode */
     UA_StatusCode retval = UA_Server_editNode(server, session, &item->sourceNodeId,
-                                              (UA_EditNodeCallback)addOneWayReference,
-                                              item);
+                                              (UA_EditNodeCallback)addOneWayReference, item);
     if(retval != UA_STATUSCODE_GOOD)
         return retval;
 
@@ -782,7 +781,8 @@ Service_AddReferences_single(UA_Server *server, UA_Session *session, const UA_Ad
     return retval;
 } 
 
-void Service_AddReferences(UA_Server *server, UA_Session *session, const UA_AddReferencesRequest *request,
+void Service_AddReferences(UA_Server *server, UA_Session *session,
+                           const UA_AddReferencesRequest *request,
                            UA_AddReferencesResponse *response) {
 	if(request->referencesToAddSize <= 0) {
 		response->responseHeader.serviceResult = UA_STATUSCODE_BADNOTHINGTODO;

+ 6 - 0
src/server/ua_services_subscription.c

@@ -67,6 +67,7 @@ void Service_ModifySubscription(UA_Server *server, UA_Session *session,
     setSubscriptionSettings(server, sub, request->requestedPublishingInterval,
                             request->requestedLifetimeCount, request->requestedMaxKeepAliveCount,
                             request->maxNotificationsPerPublish, request->priority);
+    sub->currentLifetimeCount = 0; /* Reset lifetime */
     response->revisedPublishingInterval = sub->publishingInterval;
     response->revisedLifetimeCount = sub->lifeTimeCount;
     response->revisedMaxKeepAliveCount = sub->maxKeepAliveCount;
@@ -96,6 +97,7 @@ void Service_SetPublishingMode(UA_Server *server, UA_Session *session,
 			continue;
 		}
 		sub->publishingEnabled = request->publishingEnabled;
+        sub->currentLifetimeCount = 0; /* Reset lifetime */
 	}
 }
 
@@ -165,6 +167,7 @@ Service_CreateMonitoredItems(UA_Server *server, UA_Session *session,
         response->responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
         return;
     }
+    sub->currentLifetimeCount = 0; /* Reset lifetime */
     
     if(request->itemsToCreateSize <= 0) {
         response->responseHeader.serviceResult = UA_STATUSCODE_BADNOTHINGTODO;
@@ -212,6 +215,7 @@ void Service_ModifyMonitoredItems(UA_Server *server, UA_Session *session,
         response->responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
         return;
     }
+    sub->currentLifetimeCount = 0; /* Reset lifetime */
     
     if(request->itemsToModifySize <= 0) {
         response->responseHeader.serviceResult = UA_STATUSCODE_BADNOTHINGTODO;
@@ -323,6 +327,7 @@ void Service_DeleteMonitoredItems(UA_Server *server, UA_Session *session,
         response->responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
         return;
     }
+    sub->currentLifetimeCount = 0; /* Reset lifetime */
     
     response->results = UA_malloc(sizeof(UA_StatusCode) * request->monitoredItemIdsSize);
     if(!response->results) {
@@ -343,6 +348,7 @@ void Service_Republish(UA_Server *server, UA_Session *session, const UA_Republis
         response->responseHeader.serviceResult = UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
         return;
     }
+    sub->currentLifetimeCount = 0; /* Reset lifetime */
     
     /* Find the notification in the retransmission queue  */
     UA_NotificationMessageEntry *entry;