3131
3232#include < websocketpp/config/debug_asio_no_tls.hpp>
3333
34+ // Custom logger
35+ #include < websocketpp/logger/syslog.hpp>
36+
3437#include < websocketpp/server.hpp>
3538
3639#include < iostream>
3740
38- typedef websocketpp::server<websocketpp::config::debug_asio> server;
41+ // //////////////////////////////////////////////////////////////////////////////
42+ // /////////////// Custom Config for debugging custom policies //////////////////
43+ // //////////////////////////////////////////////////////////////////////////////
44+
45+ struct debug_custom : public websocketpp ::config::debug_asio {
46+ typedef debug_custom type;
47+ typedef debug_asio base;
48+
49+ typedef base::concurrency_type concurrency_type;
50+
51+ typedef base::request_type request_type;
52+ typedef base::response_type response_type;
53+
54+ typedef base::message_type message_type;
55+ typedef base::con_msg_manager_type con_msg_manager_type;
56+ typedef base::endpoint_msg_manager_type endpoint_msg_manager_type;
57+
58+ // / Custom Logging policies
59+ /* typedef websocketpp::log::syslog<concurrency_type,
60+ websocketpp::log::elevel> elog_type;
61+ typedef websocketpp::log::syslog<concurrency_type,
62+ websocketpp::log::alevel> alog_type;
63+ */
64+ typedef base::alog_type alog_type;
65+ typedef base::elog_type elog_type;
66+
67+ typedef base::rng_type rng_type;
68+
69+ struct transport_config : public base ::transport_config {
70+ typedef type::concurrency_type concurrency_type;
71+ typedef type::alog_type alog_type;
72+ typedef type::elog_type elog_type;
73+ typedef type::request_type request_type;
74+ typedef type::response_type response_type;
75+ typedef websocketpp::transport::asio::basic_socket::endpoint
76+ socket_type;
77+ };
78+
79+ typedef websocketpp::transport::asio::endpoint<transport_config>
80+ transport_type;
81+
82+ static const long timeout_open_handshake = 0 ;
83+ };
84+
85+ // //////////////////////////////////////////////////////////////////////////////
86+
87+ typedef websocketpp::server<debug_custom> server;
3988
4089using websocketpp::lib::placeholders::_1;
4190using websocketpp::lib::placeholders::_2;
@@ -44,6 +93,33 @@ using websocketpp::lib::bind;
4493// pull out the type of messages sent by our config
4594typedef server::message_ptr message_ptr;
4695
96+ bool validate (server *, websocketpp::connection_hdl) {
97+ // sleep(6);
98+ return true ;
99+ }
100+
101+ void on_http (server* s, websocketpp::connection_hdl hdl) {
102+ server::connection_ptr con = s->get_con_from_hdl (hdl);
103+
104+ std::string res = con->get_request_body ();
105+
106+ std::stringstream ss;
107+ ss << " got HTTP request with " << res.size () << " bytes of body data." ;
108+
109+ con->set_body (ss.str ());
110+ con->set_status (websocketpp::http::status_code::ok);
111+ }
112+
113+ void on_fail (server* s, websocketpp::connection_hdl hdl) {
114+ server::connection_ptr con = s->get_con_from_hdl (hdl);
115+
116+ std::cout << " Fail handler: " << con->get_ec () << " " << con->get_ec ().message () << std::endl;
117+ }
118+
119+ void on_close (websocketpp::connection_hdl) {
120+ std::cout << " Close handler" << std::endl;
121+ }
122+
47123// Define a callback to handle incoming messages
48124void on_message (server* s, websocketpp::connection_hdl hdl, message_ptr msg) {
49125 std::cout << " on_message called with hdl: " << hdl.lock ().get ()
@@ -74,6 +150,12 @@ int main() {
74150 // Register our message handler
75151 echo_server.set_message_handler (bind (&on_message,&echo_server,::_1,::_2));
76152
153+ echo_server.set_http_handler (bind (&on_http,&echo_server,::_1));
154+ echo_server.set_fail_handler (bind (&on_fail,&echo_server,::_1));
155+ echo_server.set_close_handler (&on_close);
156+
157+ echo_server.set_validate_handler (bind (&validate,&echo_server,::_1));
158+
77159 // Listen on port 9012
78160 echo_server.listen (9012 );
79161
0 commit comments