diff --git a/examples/echo_server/echo_server.cpp b/examples/echo_server/echo_server.cpp index c8b616412e..4a5e21b1c7 100644 --- a/examples/echo_server/echo_server.cpp +++ b/examples/echo_server/echo_server.cpp @@ -61,8 +61,8 @@ int main(int argc, char* argv[]) { ); // setup server settings - server->set_alog_level(websocketpp::ALOG_OFF); - server->set_elog_level(websocketpp::LOG_OFF); + //server->set_alog_level(websocketpp::ALOG_OFF); + //server->set_elog_level(websocketpp::LOG_OFF); server->add_host(host); server->add_host(full_host); diff --git a/src/websocket_server.cpp b/src/websocket_server.cpp index 4303e9610b..a3fbdc56c6 100644 --- a/src/websocket_server.cpp +++ b/src/websocket_server.cpp @@ -37,8 +37,8 @@ using websocketpp::server; server::server(boost::asio::io_service& io_service, const tcp::endpoint& endpoint, websocketpp::connection_handler_ptr defc) - : m_elog_level(LOG_OFF), - m_alog_level(ALOG_OFF), + : m_elog_level(LOG_ALL), + m_alog_level(ALOG_ALL), m_max_message_size(DEFAULT_MAX_MESSAGE_SIZE), m_io_service(io_service), m_acceptor(io_service, endpoint), diff --git a/src/websocket_server_session.cpp b/src/websocket_server_session.cpp index a02e3edac3..8e41a4c312 100644 --- a/src/websocket_server_session.cpp +++ b/src/websocket_server_session.cpp @@ -92,7 +92,16 @@ void server_session::select_extension(const std::string& val) { } void server_session::read_handshake() { - // TODO: pass maximum size to m_buf cosntructor to prevent DoS here + m_timer.expires_from_now(boost::posix_time::seconds(5)); + + m_timer.async_wait( + boost::bind( + &session::handle_timer_expired, + this, + boost::asio::placeholders::error + ) + ); + boost::asio::async_read_until( m_socket, m_buf, diff --git a/src/websocket_session.cpp b/src/websocket_session.cpp index 1174a36f86..ca56838b03 100644 --- a/src/websocket_session.cpp +++ b/src/websocket_session.cpp @@ -56,6 +56,7 @@ session::session (boost::asio::io_service& io_service, m_socket(io_service), m_io_service(io_service), m_local_interface(defc), + m_timer(io_service,boost::posix_time::seconds(0)), m_buf(buf_size), // maximum buffered (unconsumed) bytes from network m_utf8_state(utf8_validator::UTF8_ACCEPT), m_utf8_codepoint(0) {} @@ -389,6 +390,24 @@ void session::handle_write_frame (const boost::system::error_code& error) { m_writing = false; } + +void session::handle_timer_expired (const boost::system::error_code& error) { + if (error) { + if (error == boost::asio::error::operation_aborted) { + log("timer was aborted",LOG_DEBUG); + //drop_tcp(false); + } else { + log("timer ended with error",LOG_DEBUG); + } + return; + } + + log("timer ended without error",LOG_DEBUG); + + +} + + void session::process_ping() { access_log("Ping",ALOG_MISC_CONTROL); // TODO: on_ping diff --git a/src/websocket_session.hpp b/src/websocket_session.hpp index 03a74d56fb..ab576aaee6 100644 --- a/src/websocket_session.hpp +++ b/src/websocket_session.hpp @@ -193,6 +193,8 @@ protected: void write_frame(); void handle_write_frame (const boost::system::error_code& error); + void handle_timer_expired(const boost::system::error_code& error); + // helper functions for processing each opcode void process_frame(); void process_ping(); @@ -267,6 +269,7 @@ protected: tcp::socket m_socket; boost::asio::io_service& m_io_service; connection_handler_ptr m_local_interface; + boost::asio::deadline_timer m_timer; // Buffers boost::asio::streambuf m_buf; diff --git a/websocketpp.xcodeproj/project.pbxproj b/websocketpp.xcodeproj/project.pbxproj index 46d48c15f3..c44ea01195 100644 --- a/websocketpp.xcodeproj/project.pbxproj +++ b/websocketpp.xcodeproj/project.pbxproj @@ -496,7 +496,7 @@ B6DF1C471434A5940029A1B1 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 0420; }; buildConfigurationList = B6DF1C4A1434A5940029A1B1 /* Build configuration list for PBXProject "websocketpp" */; compatibilityVersion = "Xcode 3.2"; @@ -835,6 +835,7 @@ B6CF18251437C397009295BE /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; B6DF1C4A1434A5940029A1B1 /* Build configuration list for PBXProject "websocketpp" */ = { isa = XCConfigurationList;