xref: /openbmc/bmcweb/http/routing/sserule.cpp (revision e60300aee76b7875f5fc407acede2f05ddbdd9bc)
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 
SseSocketRule(const std::string & ruleIn)25 SseSocketRule::SseSocketRule(const std::string& ruleIn) : BaseRule(ruleIn)
26 {
27     isUpgrade = true;
28     // Clear GET handler
29     methodsBitfield = 0;
30 }
31 
validate()32 void SseSocketRule::validate() {}
33 
handle(const Request &,const std::shared_ptr<bmcweb::AsyncResp> & asyncResp,const std::vector<std::string> &)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 
handleUpgrade(const Request & req,const std::shared_ptr<bmcweb::AsyncResp> &,boost::asio::ip::tcp::socket && adaptor)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 }
handleUpgrade(const Request & req,const std::shared_ptr<bmcweb::AsyncResp> &,boost::asio::ssl::stream<boost::asio::ip::tcp::socket> && adaptor)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