blob: 2b71caf2a94f639dd0c86f01de9cfa5cea9d57c1 [file] [log] [blame]
Ed Tanouse60300a2025-02-23 12:31:53 -08001// 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
22namespace crow
23{
24
25SseSocketRule::SseSocketRule(const std::string& ruleIn) : BaseRule(ruleIn)
26{
27 isUpgrade = true;
28 // Clear GET handler
29 methodsBitfield = 0;
30}
31
32void SseSocketRule::validate() {}
33
34void 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
43void 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}
54void 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