1 // SPDX-License-Identifier: Apache-2.0 2 // SPDX-FileCopyrightText: Copyright OpenBMC Authors 3 4 #include "sserule.hpp" 5 6 #include "async_resp.hpp" 7 #include "baserule.hpp" 8 #include "http_request.hpp" 9 #include "http_response.hpp" 10 #include "logging.hpp" 11 #include "server_sent_event_impl.hpp" 12 13 #include <boost/asio/ip/tcp.hpp> 14 #include <boost/asio/ssl/stream.hpp> 15 #include <boost/beast/http/status.hpp> 16 17 #include <memory> 18 #include <string> 19 #include <utility> 20 #include <vector> 21 22 namespace crow 23 { 24 25 SseSocketRule::SseSocketRule(const std::string& ruleIn) : BaseRule(ruleIn) 26 { 27 isUpgrade = true; 28 // Clear GET handler 29 methodsBitfield = 0; 30 } 31 32 void SseSocketRule::validate() {} 33 34 void SseSocketRule::handle(const Request& /*req*/, 35 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 36 const std::vector<std::string>& /*params*/) 37 { 38 BMCWEB_LOG_ERROR( 39 "Handle called on websocket rule. This should never happen"); 40 asyncResp->res.result(boost::beast::http::status::internal_server_error); 41 } 42 43 void SseSocketRule::handleUpgrade( 44 const Request& req, const std::shared_ptr<bmcweb::AsyncResp>& /*asyncResp*/, 45 boost::asio::ip::tcp::socket&& adaptor) 46 { 47 std::shared_ptr< 48 crow::sse_socket::ConnectionImpl<boost::asio::ip::tcp::socket>> 49 myConnection = std::make_shared< 50 crow::sse_socket::ConnectionImpl<boost::asio::ip::tcp::socket>>( 51 std::move(adaptor), openHandler, closeHandler); 52 myConnection->start(req); 53 } 54 void SseSocketRule::handleUpgrade( 55 const Request& req, const std::shared_ptr<bmcweb::AsyncResp>& /*asyncResp*/, 56 boost::asio::ssl::stream<boost::asio::ip::tcp::socket>&& adaptor) 57 { 58 std::shared_ptr<crow::sse_socket::ConnectionImpl< 59 boost::asio::ssl::stream<boost::asio::ip::tcp::socket>>> 60 myConnection = std::make_shared<crow::sse_socket::ConnectionImpl< 61 boost::asio::ssl::stream<boost::asio::ip::tcp::socket>>>( 62 std::move(adaptor), openHandler, closeHandler); 63 myConnection->start(req); 64 } 65 66 } // namespace crow 67