Pārlūkot izejas kodu

change subscription timeout to double; small improvements

Julius Pfrommer 9 gadi atpakaļ
vecāks
revīzija
6d3d4ec03b

+ 7 - 8
src/server/ua_services_subscription.c

@@ -55,9 +55,9 @@ void Service_CreateSubscription(UA_Server *server, UA_Session *session,
     SubscriptionManager_addSubscription(&session->subscriptionManager, newSubscription);    
 }
 
-static void createMonitoredItems(UA_Server *server, UA_Session *session, UA_Subscription *sub,
-                                 const UA_MonitoredItemCreateRequest *request,
-                                 UA_MonitoredItemCreateResult *result) {
+static void
+createMonitoredItems(UA_Server *server, UA_Session *session, UA_Subscription *sub,
+                     const UA_MonitoredItemCreateRequest *request, UA_MonitoredItemCreateResult *result) {
     const UA_Node *target = UA_NodeStore_get(server->nodestore, &request->itemToMonitor.nodeId);
     if(!target) {
         result->statusCode = UA_STATUSCODE_BADNODEIDINVALID;
@@ -304,8 +304,7 @@ void Service_DeleteMonitoredItems(UA_Server *server, UA_Session *session,
 }
 
 void Service_Republish(UA_Server *server, UA_Session *session,
-                                const UA_RepublishRequest *request,
-                                UA_RepublishResponse *response) {
+                       const UA_RepublishRequest *request, UA_RepublishResponse *response) {
     UA_SubscriptionManager *manager = &session->subscriptionManager;
     UA_Subscription *sub = SubscriptionManager_getSubscriptionByID(manager, request->subscriptionId);
     if (!sub) {
@@ -316,10 +315,10 @@ void Service_Republish(UA_Server *server, UA_Session *session,
     // Find the notification in question
     UA_unpublishedNotification *notification;
     LIST_FOREACH(notification, &sub->unpublishedNotifications, listEntry) {
-      if (notification->notification.sequenceNumber == request->retransmitSequenceNumber)
-	break;
+        if(notification->notification.sequenceNumber == request->retransmitSequenceNumber)
+            break;
     }
-    if (!notification) {
+    if(!notification) {
       response->responseHeader.serviceResult = UA_STATUSCODE_BADSEQUENCENUMBERINVALID;
       return;
     }

+ 1 - 1
src/server/ua_session_manager.c

@@ -66,7 +66,7 @@ UA_SessionManager_createSession(UA_SessionManager *sessionManager, UA_SecureChan
 
     if(request->requestedSessionTimeout <= sessionManager->maxSessionLifeTime &&
        request->requestedSessionTimeout > 0)
-        newentry->session.timeout = (UA_Int64)request->requestedSessionTimeout;
+        newentry->session.timeout = request->requestedSessionTimeout;
     else
         newentry->session.timeout = sessionManager->maxSessionLifeTime; // todo: remove when the CTT is fixed
 

+ 2 - 2
src/ua_session.c

@@ -13,7 +13,7 @@ UA_Session adminSession = {
                             .identifier.numeric = 1},
     .sessionId = {.namespaceIndex = 0, .identifierType = UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 1},
     .maxRequestMessageSize = UA_UINT32_MAX, .maxResponseMessageSize = UA_UINT32_MAX,
-    .timeout = UA_INT64_MAX, .validTill = UA_INT64_MAX, .channel = NULL,
+    .timeout = (UA_Double)UA_INT64_MAX, .validTill = UA_INT64_MAX, .channel = NULL,
     .continuationPoints = {NULL}};
 
 void UA_Session_init(UA_Session *session) {
@@ -54,5 +54,5 @@ void UA_Session_deleteMembersCleanup(UA_Session *session, UA_Server* server) {
 }
 
 void UA_Session_updateLifetime(UA_Session *session) {
-    session->validTill = UA_DateTime_now() + session->timeout * 10000; //timeout in ms
+    session->validTill = UA_DateTime_now() + (UA_DateTime)(session->timeout * UA_MSEC_TO_DATETIME);
 }

+ 1 - 1
src/ua_session.h

@@ -34,7 +34,7 @@ struct UA_Session {
     UA_NodeId         sessionId;
     UA_UInt32         maxRequestMessageSize;
     UA_UInt32         maxResponseMessageSize;
-    UA_Int64          timeout; // [ms]
+    UA_Double         timeout; // [ms]
     UA_DateTime       validTill;
     #ifdef UA_ENABLE_SUBSCRIPTIONS
         UA_SubscriptionManager subscriptionManager;