15e44e3d8SAppaRao Puli #pragma once 25e44e3d8SAppaRao Puli 35e44e3d8SAppaRao Puli #include <app.hpp> 45e44e3d8SAppaRao Puli #include <event_service_manager.hpp> 55e44e3d8SAppaRao Puli 65e44e3d8SAppaRao Puli namespace redfish 75e44e3d8SAppaRao Puli { 85e44e3d8SAppaRao Puli 95e44e3d8SAppaRao Puli inline void createSubscription(crow::sse_socket::Connection& conn) 105e44e3d8SAppaRao Puli { 115e44e3d8SAppaRao Puli EventServiceManager& manager = 125e44e3d8SAppaRao Puli EventServiceManager::getInstance(&conn.getIoContext()); 135e44e3d8SAppaRao Puli if ((manager.getNumberOfSubscriptions() >= maxNoOfSubscriptions) || 145e44e3d8SAppaRao Puli manager.getNumberOfSSESubscriptions() >= maxNoOfSSESubscriptions) 155e44e3d8SAppaRao Puli { 16*62598e31SEd Tanous BMCWEB_LOG_WARNING("Max SSE subscriptions reached"); 175e44e3d8SAppaRao Puli conn.close("Max SSE subscriptions reached"); 185e44e3d8SAppaRao Puli return; 195e44e3d8SAppaRao Puli } 205e44e3d8SAppaRao Puli std::shared_ptr<redfish::Subscription> subValue = 215e44e3d8SAppaRao Puli std::make_shared<redfish::Subscription>(conn); 225e44e3d8SAppaRao Puli 235e44e3d8SAppaRao Puli // GET on this URI means, Its SSE subscriptionType. 245e44e3d8SAppaRao Puli subValue->subscriptionType = redfish::subscriptionTypeSSE; 255e44e3d8SAppaRao Puli 265e44e3d8SAppaRao Puli subValue->protocol = "Redfish"; 275e44e3d8SAppaRao Puli subValue->retryPolicy = "TerminateAfterRetries"; 285e44e3d8SAppaRao Puli subValue->eventFormatType = "Event"; 295e44e3d8SAppaRao Puli 305e44e3d8SAppaRao Puli std::string id = manager.addSubscription(subValue, false); 315e44e3d8SAppaRao Puli if (id.empty()) 325e44e3d8SAppaRao Puli { 335e44e3d8SAppaRao Puli conn.close("Internal Error"); 345e44e3d8SAppaRao Puli } 355e44e3d8SAppaRao Puli } 365e44e3d8SAppaRao Puli 375e44e3d8SAppaRao Puli inline void deleteSubscription(crow::sse_socket::Connection& conn) 385e44e3d8SAppaRao Puli { 395e44e3d8SAppaRao Puli redfish::EventServiceManager::getInstance(&conn.getIoContext()) 405e44e3d8SAppaRao Puli .deleteSseSubscription(conn); 415e44e3d8SAppaRao Puli } 425e44e3d8SAppaRao Puli 435e44e3d8SAppaRao Puli inline void requestRoutesEventServiceSse(App& app) 445e44e3d8SAppaRao Puli { 455e44e3d8SAppaRao Puli // Note, this endpoint is given the same privilege level as creating a 465e44e3d8SAppaRao Puli // subscription, because functionally, that's the operation being done 475e44e3d8SAppaRao Puli BMCWEB_ROUTE(app, "/redfish/v1/EventService/SSE") 485e44e3d8SAppaRao Puli .privileges(redfish::privileges::postEventDestinationCollection) 495e44e3d8SAppaRao Puli .serverSentEvent() 505e44e3d8SAppaRao Puli .onopen(createSubscription) 515e44e3d8SAppaRao Puli .onclose(deleteSubscription); 525e44e3d8SAppaRao Puli } 535e44e3d8SAppaRao Puli } // namespace redfish 54