TrinityCore
HttpSocket.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITYCORE_HTTP_SOCKET_H
19#define TRINITYCORE_HTTP_SOCKET_H
20
21#include "BaseHttpSocket.h"
22#include <boost/beast/core/tcp_stream.hpp>
23
24namespace Trinity::Net::Http
25{
26namespace Impl
27{
28class BoostBeastSocketWrapper : public boost::beast::tcp_stream
29{
30public:
31 using boost::beast::tcp_stream::tcp_stream;
32
33 void shutdown(boost::asio::socket_base::shutdown_type what, boost::system::error_code& shutdownError)
34 {
35 socket().shutdown(what, shutdownError);
36 }
37
38 void close(boost::system::error_code& /*error*/)
39 {
40 boost::beast::tcp_stream::close();
41 }
42
43 boost::asio::ip::tcp::socket::endpoint_type remote_endpoint() const
44 {
45 return socket().remote_endpoint();
46 }
47};
48}
49
50template <typename Derived>
51class Socket : public BaseSocket<Derived, Impl::BoostBeastSocketWrapper>
52{
54
55public:
56 explicit Socket(boost::asio::ip::tcp::socket&& socket)
57 : SocketBase(std::move(socket)) { }
58
59 Socket(Socket const& other) = delete;
60 Socket(Socket&& other) = delete;
61 Socket& operator=(Socket const& other) = delete;
62 Socket& operator=(Socket&& other) = delete;
63
64 ~Socket() = default;
65
66 void Start() override
67 {
68 this->ResetHttpParser();
69
70 this->AsyncRead();
71 }
72};
73}
74
75#endif // TRINITYCORE_HTTP_SOCKET_H
boost::asio::ip::tcp::socket::endpoint_type remote_endpoint() const
Definition: HttpSocket.h:43
void shutdown(boost::asio::socket_base::shutdown_type what, boost::system::error_code &shutdownError)
Definition: HttpSocket.h:33
void close(boost::system::error_code &)
Definition: HttpSocket.h:38
Socket(boost::asio::ip::tcp::socket &&socket)
Definition: HttpSocket.h:56
Socket(Socket &&other)=delete
void Start() override
Definition: HttpSocket.h:66
Socket & operator=(Socket const &other)=delete
Socket(Socket const &other)=delete
Socket & operator=(Socket &&other)=delete
STL namespace.