ua_services_subscription.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #ifdef ENABLESUBSCRIPTIONS
  2. #include "ua_services.h"
  3. #include "ua_server_internal.h"
  4. #include "ua_subscription_manager.h"
  5. #include "ua_statuscodes.h"
  6. #include "ua_util.h"
  7. // Remove later, debugging only
  8. #include "ua_log.h"
  9. UA_Int32 Service_CreateSubscription(UA_Server *server, UA_Session *session,
  10. const UA_CreateSubscriptionRequest *request,
  11. UA_CreateSubscriptionResponse *response) {
  12. UA_Subscription *newSubscription;
  13. response->responseHeader.serviceResult = UA_STATUSCODE_GOOD;
  14. response->subscriptionId = ++(server->subscriptionManager.LastSessionID);
  15. if (request->requestedPublishingInterval > server->subscriptionManager.GlobalPublishingInterval.maxValue) response->revisedPublishingInterval = server->subscriptionManager.GlobalPublishingInterval.maxValue ;
  16. else if (request->requestedPublishingInterval < server->subscriptionManager.GlobalPublishingInterval.minValue) response->revisedPublishingInterval = server->subscriptionManager.GlobalPublishingInterval.minValue ;
  17. else response->revisedPublishingInterval = request->requestedPublishingInterval ;
  18. if (request->requestedLifetimeCount > server->subscriptionManager.GlobalLifeTimeCount.maxValue) response->revisedLifetimeCount = server->subscriptionManager.GlobalLifeTimeCount.maxValue ;
  19. else if (request->requestedLifetimeCount < server->subscriptionManager.GlobalLifeTimeCount.minValue) response->revisedLifetimeCount = server->subscriptionManager.GlobalLifeTimeCount.minValue ;
  20. else response->revisedLifetimeCount = request->requestedLifetimeCount ;
  21. if (request->requestedMaxKeepAliveCount > server->subscriptionManager.GlobalKeepAliveCount.maxValue) response->revisedMaxKeepAliveCount = server->subscriptionManager.GlobalKeepAliveCount.maxValue ;
  22. else if (request->requestedMaxKeepAliveCount < server->subscriptionManager.GlobalKeepAliveCount.minValue) response->revisedMaxKeepAliveCount = server->subscriptionManager.GlobalKeepAliveCount.minValue ;
  23. else response->revisedMaxKeepAliveCount = request->requestedMaxKeepAliveCount ;
  24. //maxNotificationsPerPublish ?
  25. //Type??
  26. newSubscription = UA_Subscription_new(response->subscriptionId);
  27. SubscriptionManager_addSubscription(&(server->subscriptionManager), newSubscription);
  28. return (UA_Int32) 0;
  29. }
  30. #endif //#ifdef ENABLESUBSCRIPTIONS