ua_session.c 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "ua_util.h"
  2. #include "ua_session.h"
  3. #include "ua_statuscodes.h"
  4. UA_Session adminSession = {
  5. .clientDescription = {.applicationUri = {0, NULL}, .productUri = {0, NULL},
  6. .applicationName = {.locale = {0, NULL}, .text = {0, NULL}},
  7. .applicationType = UA_APPLICATIONTYPE_CLIENT,
  8. .gatewayServerUri = {0, NULL}, .discoveryProfileUri = {0, NULL},
  9. .discoveryUrlsSize = 0, .discoveryUrls = NULL},
  10. .sessionName = {sizeof("Administrator Session")-1, (UA_Byte*)"Administrator Session"},
  11. .authenticationToken = {.namespaceIndex = 0, .identifierType = UA_NODEIDTYPE_NUMERIC,
  12. .identifier.numeric = 1},
  13. .sessionId = {.namespaceIndex = 0, .identifierType = UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 1},
  14. .maxRequestMessageSize = UA_UINT32_MAX, .maxResponseMessageSize = UA_UINT32_MAX,
  15. .timeout = UA_INT64_MAX, .validTill = UA_INT64_MAX, .channel = NULL,
  16. .continuationPoints = {NULL}};
  17. void UA_Session_init(UA_Session *session) {
  18. UA_ApplicationDescription_init(&session->clientDescription);
  19. session->activated = UA_FALSE;
  20. UA_NodeId_init(&session->authenticationToken);
  21. UA_NodeId_init(&session->sessionId);
  22. UA_String_init(&session->sessionName);
  23. session->maxRequestMessageSize = 0;
  24. session->maxResponseMessageSize = 0;
  25. session->timeout = 0;
  26. UA_DateTime_init(&session->validTill);
  27. session->channel = NULL;
  28. #ifdef UA_ENABLE_SUBSCRIPTIONS
  29. SubscriptionManager_init(session);
  30. #endif
  31. session->availableContinuationPoints = MAXCONTINUATIONPOINTS;
  32. LIST_INIT(&session->continuationPoints);
  33. }
  34. void UA_Session_deleteMembersCleanup(UA_Session *session, UA_Server* server) {
  35. UA_ApplicationDescription_deleteMembers(&session->clientDescription);
  36. UA_NodeId_deleteMembers(&session->authenticationToken);
  37. UA_NodeId_deleteMembers(&session->sessionId);
  38. UA_String_deleteMembers(&session->sessionName);
  39. struct ContinuationPointEntry *cp, *temp;
  40. LIST_FOREACH_SAFE(cp, &session->continuationPoints, pointers, temp) {
  41. LIST_REMOVE(cp, pointers);
  42. UA_ByteString_deleteMembers(&cp->identifier);
  43. UA_BrowseDescription_deleteMembers(&cp->browseDescription);
  44. UA_free(cp);
  45. }
  46. if(session->channel)
  47. UA_SecureChannel_detachSession(session->channel, session);
  48. #ifdef UA_ENABLE_SUBSCRIPTIONS
  49. SubscriptionManager_deleteMembers(session, server);
  50. #endif
  51. }
  52. void UA_Session_updateLifetime(UA_Session *session) {
  53. session->validTill = UA_DateTime_now() + session->timeout * 10000; //timeout in ms
  54. }