ua_session.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include <time.h>
  2. #include <stdlib.h>
  3. #include "ua_session.h"
  4. #include "util/ua_util.h"
  5. UA_Int32 UA_Session_new(UA_Session **session) {
  6. UA_Int32 retval = UA_SUCCESS;
  7. retval |= UA_alloc((void **)session, sizeof(UA_Session));
  8. if(retval == UA_SUCCESS)
  9. UA_Session_init(*session);
  10. return retval;
  11. }
  12. /* mock up function to generate tokens for authentication */
  13. UA_Int32 UA_Session_generateToken(UA_NodeId *newToken) {
  14. //Random token generation
  15. UA_Int32 retval = UA_SUCCESS;
  16. srand(time(NULL));
  17. UA_Int32 i = 0;
  18. UA_Int32 r = 0;
  19. //retval |= UA_NodeId_new(newToken);
  20. newToken->namespaceIndex = 0; // where else?
  21. newToken->identifierType = UA_NODEIDTYPE_GUID;
  22. newToken->identifier.guid.data1 = rand();
  23. r = rand();
  24. newToken->identifier.guid.data2 = (UA_UInt16)((r>>16) );
  25. r = rand();
  26. /* UA_Int32 r1 = (r>>16); */
  27. /* UA_Int32 r2 = r1 & 0xFFFF; */
  28. /* r2 = r2 * 1; */
  29. newToken->identifier.guid.data3 = (UA_UInt16)((r>>16) );
  30. for(i = 0;i < 8;i++) {
  31. r = rand();
  32. newToken->identifier.guid.data4[i] = (UA_Byte)((r>>28) );
  33. }
  34. return retval;
  35. }
  36. void UA_Session_init(UA_Session *session) {
  37. if(!session) return;
  38. UA_ApplicationDescription_init(&session->clientDescription);
  39. UA_NodeId_init(&session->authenticationToken);
  40. UA_NodeId_init(&session->sessionId);
  41. UA_String_init(&session->sessionName);
  42. session->maxRequestMessageSize = 0;
  43. session->maxResponseMessageSize = 0;
  44. session->timeout = 0;
  45. UA_DateTime_init(&session->validTill);
  46. session->channel = UA_NULL;
  47. }
  48. void UA_Session_deleteMembers(UA_Session *session) {
  49. UA_ApplicationDescription_deleteMembers(&session->clientDescription);
  50. UA_NodeId_deleteMembers(&session->authenticationToken);
  51. UA_NodeId_deleteMembers(&session->sessionId);
  52. UA_String_deleteMembers(&session->sessionName);
  53. session->channel = UA_NULL;
  54. }
  55. void UA_Session_delete(UA_Session *session) {
  56. UA_Session_deleteMembers(session);
  57. UA_free(session);
  58. }
  59. UA_Boolean UA_Session_compare(UA_Session *session1, UA_Session *session2) {
  60. if(session1 && session2 &&
  61. UA_NodeId_equal(&session1->sessionId, &session2->sessionId) == UA_EQUAL)
  62. return UA_TRUE;
  63. return UA_FALSE;
  64. }
  65. UA_Int32 UA_Session_setExpirationDate(UA_Session *session) {
  66. if(!session)
  67. return UA_ERROR;
  68. session->validTill = UA_DateTime_now() + session->timeout * 100000; //timeout in ms
  69. return UA_SUCCESS;
  70. }
  71. UA_Int32 UA_Session_getPendingLifetime(UA_Session *session, UA_Double *pendingLifetime_ms) {
  72. if(!session)
  73. return UA_ERROR;
  74. *pendingLifetime_ms = (session->validTill - UA_DateTime_now())/10000000; //difference in ms
  75. return UA_SUCCESS;
  76. }