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