28 #ifndef WEBSOCKETPP_ENDPOINT_HPP 29 #define WEBSOCKETPP_ENDPOINT_HPP 31 #include <websocketpp/connection.hpp> 33 #include <websocketpp/logger/levels.hpp> 34 #include <websocketpp/version.hpp> 41 template <
typename connection,
typename config>
42 class endpoint :
public config::transport_type,
public config::endpoint_base {
46 typedef endpoint<connection,config> type;
86 typedef typename connection_type::termination_handler termination_handler;
91 explicit endpoint(
bool p_is_server)
92 : m_alog(config::alog_level, log::channel_type_hint::access)
93 , m_elog(config::elog_level, log::channel_type_hint::error)
94 , m_user_agent(::websocketpp::user_agent)
95 , m_open_handshake_timeout_dur(config::timeout_open_handshake)
96 , m_close_handshake_timeout_dur(config::timeout_close_handshake)
97 , m_pong_timeout_dur(config::timeout_pong)
98 , m_max_message_size(config::max_message_size)
99 , m_max_http_body_size(config::max_http_body_size)
100 , m_is_server(p_is_server)
102 m_alog.set_channels(config::alog_level);
103 m_elog.set_channels(config::elog_level);
105 m_alog.write(log::alevel::devel,
"endpoint constructor");
112 ~endpoint<connection,config>() {}
114 #ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ 122 #ifdef _WEBSOCKETPP_MOVE_SEMANTICS_ 152 #ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_ 221 m_alog.set_channels(channels);
232 m_alog.clear_channels(channels);
243 m_elog.set_channels(channels);
254 m_elog.clear_channels(channels);
277 void set_open_handler(open_handler h) {
278 m_alog.write(log::alevel::devel,
"set_open_handler");
282 void set_close_handler(close_handler h) {
283 m_alog.write(log::alevel::devel,
"set_close_handler");
287 void set_fail_handler(fail_handler h) {
288 m_alog.write(log::alevel::devel,
"set_fail_handler");
292 void set_ping_handler(ping_handler h) {
293 m_alog.write(log::alevel::devel,
"set_ping_handler");
297 void set_pong_handler(pong_handler h) {
298 m_alog.write(log::alevel::devel,
"set_pong_handler");
302 void set_pong_timeout_handler(pong_timeout_handler h) {
303 m_alog.write(log::alevel::devel,
"set_pong_timeout_handler");
305 m_pong_timeout_handler = h;
307 void set_interrupt_handler(interrupt_handler h) {
308 m_alog.write(log::alevel::devel,
"set_interrupt_handler");
310 m_interrupt_handler = h;
312 void set_http_handler(http_handler h) {
313 m_alog.write(log::alevel::devel,
"set_http_handler");
317 void set_validate_handler(validate_handler h) {
318 m_alog.write(log::alevel::devel,
"set_validate_handler");
320 m_validate_handler = h;
323 m_alog.write(log::alevel::devel,
"set_message_handler");
325 m_message_handler = h;
354 m_open_handshake_timeout_dur = dur;
379 m_close_handshake_timeout_dur = dur;
401 m_pong_timeout_dur = dur;
416 return m_max_message_size;
433 m_max_message_size = new_value;
450 return m_max_http_body_size;
467 m_max_http_body_size = new_value;
482 void interrupt(connection_hdl hdl, lib::error_code & ec);
483 void interrupt(connection_hdl hdl);
505 void pause_reading(connection_hdl hdl, lib::error_code & ec);
560 void send(connection_hdl hdl, std::string
const & payload,
561 frame::opcode::value op, lib::error_code & ec);
571 void send(connection_hdl hdl, std::string
const & payload,
572 frame::opcode::value op);
574 void send(connection_hdl hdl,
void const * payload, size_t len,
575 frame::opcode::value op, lib::error_code & ec);
576 void send(connection_hdl hdl,
void const * payload, size_t len,
577 frame::opcode::value op);
579 void send(connection_hdl hdl,
message_ptr msg, lib::error_code & ec);
582 void close(connection_hdl hdl, close::status::value
const code,
583 std::string
const & reason, lib::error_code & ec);
584 void close(connection_hdl hdl, close::status::value
const code,
585 std::string
const & reason);
595 void ping(connection_hdl hdl, std::string
const & payload,
596 lib::error_code & ec);
606 void ping(connection_hdl hdl, std::string
const & payload);
616 void pong(connection_hdl hdl, std::string
const & payload,
617 lib::error_code & ec);
627 void pong(connection_hdl hdl, std::string
const & payload);
647 ec = error::make_error_code(error::bad_connection);
668 std::string m_user_agent;
670 open_handler m_open_handler;
671 close_handler m_close_handler;
672 fail_handler m_fail_handler;
673 ping_handler m_ping_handler;
674 pong_handler m_pong_handler;
675 pong_timeout_handler m_pong_timeout_handler;
676 interrupt_handler m_interrupt_handler;
677 http_handler m_http_handler;
678 validate_handler m_validate_handler;
681 long m_open_handshake_timeout_dur;
682 long m_close_handshake_timeout_dur;
683 long m_pong_timeout_dur;
684 size_t m_max_message_size;
685 size_t m_max_http_body_size;
690 bool const m_is_server;
698 #include <websocketpp/impl/endpoint_impl.hpp> void send_http_response(connection_hdl hdl, lib::error_code &ec)
Send deferred HTTP Response.
config::concurrency_type concurrency_type
Type of the concurrency component of this endpoint.
void send_http_response(connection_hdl hdl)
Send deferred HTTP Response (exception free)
size_t get_max_message_size() const
Get default maximum message size.
bool is_server() const
Returns whether or not this endpoint is a server.
void ping(connection_hdl hdl, std::string const &payload, lib::error_code &ec)
Send a ping to a specific connection.
config::rng_type rng_type
Type of RNG.
void send(connection_hdl hdl, std::string const &payload, frame::opcode::value op)
Create a message and add it to the outgoing send queue.
void set_close_handshake_timeout(long dur)
Set close handshake timeout.
connection_type::message_ptr message_ptr
Type of message pointers that this endpoint uses.
void interrupt(connection_hdl hdl, lib::error_code &ec)
connection_type::message_handler message_handler
Type of message_handler.
void set_open_handshake_timeout(long dur)
Set open handshake timeout.
transport_con_type::ptr transport_con_ptr
alog_type & get_alog()
Get reference to access logger.
void pong(connection_hdl hdl, std::string const &payload)
Send a pong to a specific connection.
connection_ptr get_con_from_hdl(connection_hdl hdl, lib::error_code &ec)
Retrieves a connection_ptr from a connection_hdl (exception free)
concurrency_type::scoped_lock_type scoped_lock_type
Type of our concurrency policy's scoped lock object.
void pause_reading(connection_hdl hdl, lib::error_code &ec)
Pause reading of new data (exception free)
std::string get_user_agent() const
Returns the user agent string that this endpoint will use.
concurrency_type::mutex_type mutex_type
Type of our concurrency policy's mutex object.
void resume_reading(connection_hdl hdl, lib::error_code &ec)
Resume reading of new data (exception free)
void pause_reading(connection_hdl hdl)
Pause reading of new data.
void set_max_http_body_size(size_t new_value)
Set maximum HTTP message body size.
void set_max_message_size(size_t new_value)
Set default maximum message size.
transport_type::transport_con_type transport_con_type
config::alog_type alog_type
Type of access logger.
size_t get_max_http_body_size() const
Get maximum HTTP message body size.
config::transport_type transport_type
Type of the transport component of this endpoint.
connection_type::ptr connection_ptr
Shared pointer to connection_type.
void pong(connection_hdl hdl, std::string const &payload, lib::error_code &ec)
Send a pong to a specific connection.
void clear_error_channels(log::level channels)
Clear Error logging channels.
void set_access_channels(log::level channels)
Set Access logging channel.
elog_type & get_elog()
Get reference to error logger.
config::elog_type elog_type
Type of error logger.
Creates and manages connections associated with a WebSocket endpoint.
void resume_reading(connection_hdl hdl)
Resume reading of new data.
connection_type::weak_ptr connection_weak_ptr
Weak pointer to connection type.
void handle_accept(connection_ptr con, lib::error_code const &ec)
Handler callback for start_accept.
void ping(connection_hdl hdl, std::string const &payload)
Send a ping to a specific connection.
connection connection_type
Type of the connections that this endpoint creates.
void clear_access_channels(log::level channels)
Clear Access logging channels.
void set_error_channels(log::level channels)
Set Error logging channel.
void set_pong_timeout(long dur)
Set pong timeout.
connection_ptr get_con_from_hdl(connection_hdl hdl)
Retrieves a connection_ptr from a connection_hdl (exception version)
void set_user_agent(std::string const &ua)
Sets the user agent string that this endpoint will use.
void send(connection_hdl hdl, std::string const &payload, frame::opcode::value op, lib::error_code &ec)
Create a message and add it to the outgoing send queue (exception free)