浏览代码

changes in session handling, (lifetime, and activateSession service)

FlorianPalm 10 年之前
父节点
当前提交
70897e21b5

+ 2 - 1
src/server/ua_server_binary.c

@@ -227,7 +227,8 @@ static void processMessage(UA_Connection *connection, UA_Server *server,
         CHECK_PROCESS(UA_ActivateSessionRequest_decodeBinary(msg, pos, &p),; );
         UA_ActivateSessionResponse_init(&r);
         init_response_header(&p.requestHeader, &r.responseHeader);
-        Service_ActivateSession(server, channel->session,  &p, &r);
+
+        Service_ActivateSession(server, channel,  &p, &r);
         UA_ByteString_newMembers(&responseBuf.strings[1], UA_ActivateSessionResponse_calcSizeBinary(&r));
         UA_ActivateSessionResponse_encodeBinary(&r, &responseBuf.strings[1], &sendOffset);
         UA_ActivateSessionRequest_deleteMembers(&p);

+ 1 - 1
src/server/ua_services.h

@@ -85,7 +85,7 @@ UA_Int32 Service_CreateSession(UA_Server *server, UA_SecureChannel *channel,
  * Client before it issues any other Service request after CreateSession.
  * Failure to do so shall cause the Server to close the Session.
  */
-UA_Int32 Service_ActivateSession(UA_Server *server, UA_Session *session,
+UA_Int32 Service_ActivateSession(UA_Server *server, UA_SecureChannel *channel,
                                  const UA_ActivateSessionRequest *request,
                                  UA_ActivateSessionResponse *response);
 

+ 6 - 8
src/server/ua_services_session.c

@@ -25,26 +25,24 @@ UA_Int32 Service_CreateSession(UA_Server *server, UA_SecureChannel *channel,
     return retval;
 }
 
-UA_Int32 Service_ActivateSession(UA_Server *server, UA_Session *session,
+UA_Int32 Service_ActivateSession(UA_Server *server,UA_SecureChannel *channel,
                                  const UA_ActivateSessionRequest *request,
                                  UA_ActivateSessionResponse *response) {
     // make the channel know about the session
 	UA_Session *foundSession;
-	if(session == UA_NULL)
-	{
-		return UA_ERROR;
-	}
-	UA_SessionManager_getSessionById(server->sessionManager,&session->sessionId,&foundSession);
+
+	UA_SessionManager_getSessionByToken(server->sessionManager,(UA_NodeId*)&request->requestHeader.authenticationToken,&foundSession);
+
 	if(foundSession == UA_NULL)
 	{
 		return UA_ERROR;
 	}
 	//channel at creation must be the same at activation
-	if(foundSession->channel != session->channel)
+	if(foundSession->channel !=channel)
 	{
 		return UA_ERROR;
 	}
-    session->channel->session = session;
+    channel->session = foundSession;
 
     return UA_SUCCESS;
 }

+ 2 - 1
src/server/ua_session_manager.c

@@ -125,7 +125,8 @@ UA_Int32 UA_SessionManager_createSession(UA_SessionManager *sessionManager,
                                                    .identifierType = UA_NODEIDTYPE_NUMERIC,
                                                    .identifier.numeric = sessionManager->lastSessionId };
     (*session)->channel   = channel;
-    (*session)->timeout = 3600 * 000; // 1h
+    (*session)->timeout = 3600 * 1000; // 1h
+    UA_Session_setExpirationDate((*session));
     sessionManager->currentSessionCount++;
     UA_list_addPayloadToFront(&sessionManager->sessions, *session);
     return retval;

+ 1 - 1
src/ua_session.c

@@ -79,7 +79,7 @@ UA_Boolean UA_Session_compare(UA_Session *session1, UA_Session *session2) {
     return UA_FALSE;
 }
 
-UA_Int32 UA_Session_updateLifetime(UA_Session *session) {
+UA_Int32 UA_Session_setExpirationDate(UA_Session *session) {
     if(!session)
         return UA_ERROR;
 

+ 2 - 1
src/ua_session.h

@@ -32,7 +32,8 @@ UA_Boolean UA_Session_compare(UA_Session *session1, UA_Session *session2);
 
 /** If any activity on a session happens, the timeout must be extended */
 UA_Int32 UA_Session_updateLifetime(UA_Session *session);
-
+/** Set up the point in time till the session is valid */
+UA_Int32 UA_Session_setExpirationDate(UA_Session *session);
 /** Gets the sessions pending lifetime (calculated from the timeout which was set) */
 UA_Int32 UA_Session_getPendingLifetime(UA_Session *session, UA_Double *pendingLifetime);