28 #ifndef WEBSOCKETPP_ENDPOINT_IMPL_HPP
29 #define WEBSOCKETPP_ENDPOINT_IMPL_HPP
35 template <
typename connection,
typename config>
37 endpoint<connection,config>::create_connection() {
38 m_alog->write(log::alevel::devel,
"create_connection");
47 connection_ptr con = lib::make_shared<connection_type>(m_is_server,
48 m_user_agent, m_alog, m_elog, lib::ref(m_rng));
59 con->set_open_handler(m_open_handler);
60 con->set_close_handler(m_close_handler);
61 con->set_fail_handler(m_fail_handler);
62 con->set_ping_handler(m_ping_handler);
63 con->set_pong_handler(m_pong_handler);
64 con->set_pong_timeout_handler(m_pong_timeout_handler);
65 con->set_interrupt_handler(m_interrupt_handler);
66 con->set_http_handler(m_http_handler);
67 con->set_validate_handler(m_validate_handler);
68 con->set_message_handler(m_message_handler);
70 if (m_open_handshake_timeout_dur != config::timeout_open_handshake) {
71 con->set_open_handshake_timeout(m_open_handshake_timeout_dur);
73 if (m_close_handshake_timeout_dur != config::timeout_close_handshake) {
74 con->set_close_handshake_timeout(m_close_handshake_timeout_dur);
76 if (m_pong_timeout_dur != config::timeout_pong) {
77 con->set_pong_timeout(m_pong_timeout_dur);
79 if (m_max_message_size != config::max_message_size) {
80 con->set_max_message_size(m_max_message_size);
82 con->set_max_http_body_size(m_max_http_body_size);
86 ec = transport_type::init(con);
88 m_elog->write(log::elevel::fatal,ec.message());
95 template <
typename connection,
typename config>
101 m_alog->write(log::alevel::devel,
"Interrupting connection");
103 ec = con->interrupt();
106 template <
typename connection,
typename config>
107 void endpoint<connection,config>::interrupt(connection_hdl hdl) {
110 if (ec) {
throw exception(ec); }
113 template <
typename connection,
typename config>
119 ec = con->pause_reading();
122 template <
typename connection,
typename config>
125 pause_reading(hdl,ec);
126 if (ec) {
throw exception(ec); }
129 template <
typename connection,
typename config>
135 ec = con->resume_reading();
138 template <
typename connection,
typename config>
141 resume_reading(hdl,ec);
142 if (ec) {
throw exception(ec); }
145 template <
typename connection,
typename config>
147 lib::error_code & ec)
151 con->send_http_response(ec);
154 template <
typename connection,
typename config>
157 send_http_response(hdl,ec);
158 if (ec) {
throw exception(ec); }
161 template <
typename connection,
typename config>
162 void endpoint<connection,config>::
send(connection_hdl hdl, std::string
const & payload,
163 frame::opcode::value op, lib::error_code & ec)
168 ec = con->send(payload,op);
171 template <
typename connection,
typename config>
172 void endpoint<connection,config>::
send(connection_hdl hdl, std::string
const & payload,
173 frame::opcode::value op)
176 send(hdl,payload,op,ec);
177 if (ec) {
throw exception(ec); }
180 template <
typename connection,
typename config>
181 void endpoint<connection,config>::send(connection_hdl hdl,
void const * payload,
182 size_t len, frame::opcode::value op, lib::error_code & ec)
186 ec = con->send(payload,len,op);
189 template <
typename connection,
typename config>
190 void endpoint<connection,config>::send(connection_hdl hdl,
void const * payload,
191 size_t len, frame::opcode::value op)
194 send(hdl,payload,len,op,ec);
195 if (ec) {
throw exception(ec); }
198 template <
typename connection,
typename config>
200 lib::error_code & ec)
207 template <
typename connection,
typename config>
211 if (ec) {
throw exception(ec); }
214 template <
typename connection,
typename config>
216 const code, std::string
const & reason,
217 lib::error_code & ec)
221 con->close(code,reason,ec);
224 template <
typename connection,
typename config>
226 const code, std::string
const & reason)
229 close(hdl,code,reason,ec);
230 if (ec) {
throw exception(ec); }
233 template <
typename connection,
typename config>
234 void endpoint<connection,config>::
ping(connection_hdl hdl, std::string
const &
235 payload, lib::error_code & ec)
239 con->ping(payload,ec);
242 template <
typename connection,
typename config>
243 void endpoint<connection,config>::
ping(connection_hdl hdl, std::string
const & payload)
246 ping(hdl,payload,ec);
247 if (ec) {
throw exception(ec); }
250 template <
typename connection,
typename config>
251 void endpoint<connection,config>::
pong(connection_hdl hdl, std::string
const & payload,
252 lib::error_code & ec)
256 con->pong(payload,ec);
259 template <
typename connection,
typename config>
260 void endpoint<connection,config>::
pong(connection_hdl hdl, std::string
const & payload)
263 pong(hdl,payload,ec);
264 if (ec) {
throw exception(ec); }