yhirose/cpp-httplib

Does cpp-httplib have plan to support websocket?

fqcloud opened this issue · 2 comments

Does cpp-httplib have plan to support websocket?

I try it myself, but it seems not work well enough.

	inline bool process_and_close_socket(socket_t sock) override
	{
		bool bReq4WsUpgrade = false;
		auto ret = httplib::detail::process_server_socket(
			svr_sock_, sock, keep_alive_max_count_, 0/*keep_alive_timeout_sec_*/,
			read_timeout_sec_, read_timeout_usec_, write_timeout_sec_,
			write_timeout_usec_,
			[this, &bReq4WsUpgrade](httplib::Stream& strm, bool close_connection, bool& connection_closed) {
				set_post_routing_handler([this, &bReq4WsUpgrade](const httplib::Request& req, httplib::Response& res)
					{
						std::string strAccept;
						bReq4WsUpgrade = IsUpgradeRequest(req, strAccept);
						if (bReq4WsUpgrade)
						{
							res.set_header("Connection", "Upgrade");
							res.set_header("Upgrade", "websocket");
							res.set_header("Sec-WebSocket-Accept", strAccept);
							res.set_header("Server", "HttpWebSocketServer");
							res.status = httplib::StatusCode::SwitchingProtocol_101;
							res.body.clear();
							res.content_provider_ = nullptr;
						}
					});
				return process_request(strm, close_connection, connection_closed, nullptr);
			});
		if (!bReq4WsUpgrade)
		{
			httplib::detail::shutdown_socket(sock);
			httplib::detail::close_socket(sock);
		}
		else
		{
			wspool_.add(sock, wsCbFactory_());
		}
		return ret;
	}

I don't have a plan to support websocket.