blob: 2b71caf2a94f639dd0c86f01de9cfa5cea9d57c1 [file] [log] [blame]
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileCopyrightText: Copyright OpenBMC Authors
#include "sserule.hpp"
#include "async_resp.hpp"
#include "baserule.hpp"
#include "http_request.hpp"
#include "http_response.hpp"
#include "logging.hpp"
#include "server_sent_event_impl.hpp"
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/ssl/stream.hpp>
#include <boost/beast/http/status.hpp>
#include <memory>
#include <string>
#include <utility>
#include <vector>
namespace crow
{
SseSocketRule::SseSocketRule(const std::string& ruleIn) : BaseRule(ruleIn)
{
isUpgrade = true;
// Clear GET handler
methodsBitfield = 0;
}
void SseSocketRule::validate() {}
void SseSocketRule::handle(const Request& /*req*/,
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
const std::vector<std::string>& /*params*/)
{
BMCWEB_LOG_ERROR(
"Handle called on websocket rule. This should never happen");
asyncResp->res.result(boost::beast::http::status::internal_server_error);
}
void SseSocketRule::handleUpgrade(
const Request& req, const std::shared_ptr<bmcweb::AsyncResp>& /*asyncResp*/,
boost::asio::ip::tcp::socket&& adaptor)
{
std::shared_ptr<
crow::sse_socket::ConnectionImpl<boost::asio::ip::tcp::socket>>
myConnection = std::make_shared<
crow::sse_socket::ConnectionImpl<boost::asio::ip::tcp::socket>>(
std::move(adaptor), openHandler, closeHandler);
myConnection->start(req);
}
void SseSocketRule::handleUpgrade(
const Request& req, const std::shared_ptr<bmcweb::AsyncResp>& /*asyncResp*/,
boost::asio::ssl::stream<boost::asio::ip::tcp::socket>&& adaptor)
{
std::shared_ptr<crow::sse_socket::ConnectionImpl<
boost::asio::ssl::stream<boost::asio::ip::tcp::socket>>>
myConnection = std::make_shared<crow::sse_socket::ConnectionImpl<
boost::asio::ssl::stream<boost::asio::ip::tcp::socket>>>(
std::move(adaptor), openHandler, closeHandler);
myConnection->start(req);
}
} // namespace crow