diff --git a/examples/echo_client/echo_client.cpp b/examples/echo_client/echo_client.cpp index a933220f50..a9aad73028 100644 --- a/examples/echo_client/echo_client.cpp +++ b/examples/echo_client/echo_client.cpp @@ -61,13 +61,13 @@ public: int main(int argc, char* argv[]) { - std::string uri; + std::string uri = "ws://localhost:9001/"; - /*if (argc != 2) { + if (argc > 2) { std::cout << "Usage: `echo_client test_url`" << std::endl; } else { uri = argv[1]; - }*/ + } try { plain_handler_ptr handler(new echo_client_handler()); @@ -75,23 +75,13 @@ int main(int argc, char* argv[]) { plain_endpoint_type endpoint(handler); endpoint.alog().unset_level(websocketpp::log::alevel::ALL); - endpoint.elog().unset_level(websocketpp::log::elevel::ALL); - connection = endpoint.connect("ws://localhost:9001/getCaseCount"); + connection = endpoint.connect(uri+"getCaseCount"); + connection->add_request_header("User Agent","WebSocket++/0.2.0"); + endpoint.run(); - - - /*boost::asio::io_service io_service; - - websocketpp::client_ptr client(new websocketpp::client(io_service,c)); - - client->init(); - client->set_header("User Agent","WebSocket++/2011-10-27"); - - client->connect("ws://localhost:9001/getCaseCount"); - io_service.run();*/ std::cout << "case count: " << boost::dynamic_pointer_cast(handler)->m_case_count << std::endl; @@ -100,7 +90,7 @@ int main(int argc, char* argv[]) { std::stringstream url; - url << "ws://localhost:9001/runCase?case=" << i << "&agent=\"WebSocket++Snapshot/2011-12-06\""; + url << uri << "/runCase?case=" << i << "&agent=\"WebSocket++/0.2.0\""; connection = endpoint.connect(url.str()); diff --git a/examples/echo_server/echo_server.cpp b/examples/echo_server/echo_server.cpp index a4a1811172..779a113400 100644 --- a/examples/echo_server/echo_server.cpp +++ b/examples/echo_server/echo_server.cpp @@ -30,27 +30,15 @@ #include -typedef websocketpp::endpoint plain_endpoint_type; -typedef plain_endpoint_type::handler_ptr plain_handler_ptr; +typedef websocketpp::endpoint endpoint_type; +typedef endpoint_type::handler_ptr handler_ptr; -class echo_server_handler : public plain_endpoint_type::handler { +class echo_server_handler : public endpoint_type::handler { public: - typedef echo_server_handler type; - typedef plain_endpoint_type::connection_ptr connection_ptr; + typedef endpoint_type::connection_ptr connection_ptr; void on_message(connection_ptr connection,websocketpp::message::data_ptr msg) { - //std::cout << "got message: " << *msg << std::endl; - connection->send(msg->get_payload(),(msg->get_opcode() == websocketpp::frame::opcode::BINARY)); - - connection->recycle(msg); - } - - void http(connection_ptr connection) { - connection->set_body("HTTP Response!!"); - } - - void on_fail(connection_ptr connection) { - std::cout << "connection failed" << std::endl; + connection->send(msg->get_payload(),msg->get_opcode()); } }; @@ -58,28 +46,20 @@ int main(int argc, char* argv[]) { unsigned short port = 9002; if (argc == 2) { - // TODO: input validation? port = atoi(argv[1]); + + if (port == 0) { + std::cout << "Unable to parse port input " << argv[1] << std::endl; + return 1; + } } try { - plain_handler_ptr h(new echo_server_handler()); - plain_endpoint_type e(h); + handler_ptr h(new echo_server_handler()); + endpoint_type e(h); e.alog().unset_level(websocketpp::log::alevel::ALL); - //e.alog().unset_level(websocketpp::log::alevel::ALL); - //e.alog().set_level(websocketpp::log::alevel::CONNECT); - //e.alog().set_level(websocketpp::log::alevel::DISCONNECT); - //e.alog().unset_level(websocketpp::log::alevel::DEBUG_HANDSHAKE); - e.elog().unset_level(websocketpp::log::elevel::ALL); - //e.elog().unset_level(websocketpp::log::elevel::ALL); - //e.elog().set_level(websocketpp::log::elevel::ERROR); - //e.elog().set_level(websocketpp::log::elevel::FATAL); - - // TODO: fix - //e.alog().set_level(websocketpp::log::alevel::CONNECT & websocketpp::log::alevel::DISCONNECT); - //e.elog().set_levels(websocketpp::log::elevel::ERROR,websocketpp::log::elevel::FATAL); std::cout << "Starting WebSocket echo server on port " << port << std::endl; e.listen(port); diff --git a/examples/echo_server_tls/echo_server_tls.cpp b/examples/echo_server_tls/echo_server_tls.cpp index b5de89d085..9d87014af0 100644 --- a/examples/echo_server_tls/echo_server_tls.cpp +++ b/examples/echo_server_tls/echo_server_tls.cpp @@ -54,55 +54,38 @@ public: boost::asio::ssl::context::no_sslv2 | boost::asio::ssl::context::single_dh_use); context->set_password_callback(boost::bind(&type::get_password, this)); - context->use_certificate_chain_file("/Users/zaphoyd/Documents/websocketpp/src/ssl/server.pem"); - context->use_private_key_file("/Users/zaphoyd/Documents/websocketpp/src/ssl/server.pem", boost::asio::ssl::context::pem); - context->use_tmp_dh_file("/Users/zaphoyd/Documents/websocketpp/src/ssl/dh512.pem"); + context->use_certificate_chain_file("/Users/zaphoyd/Documents/ZS/websocketpp/src/ssl/server.pem"); + context->use_private_key_file("/Users/zaphoyd/Documents/ZS/websocketpp/src/ssl/server.pem", boost::asio::ssl::context::pem); + context->use_tmp_dh_file("/Users/zaphoyd/Documents/ZS/websocketpp/src/ssl/dh512.pem"); } catch (std::exception& e) { std::cout << e.what() << std::endl; } return context; } - void validate(connection_ptr connection) { - //std::cout << "state: " << connection->get_state() << std::endl; - } - - void on_open(connection_ptr connection) { - //std::cout << "connection opened" << std::endl; - } - - void on_close(connection_ptr connection) { - //std::cout << "connection closed" << std::endl; - } - void on_message(connection_ptr connection,websocketpp::message::data_ptr msg) { - //std::cout << "got message: " << *msg << std::endl; - connection->send(msg->get_payload(),(msg->get_opcode() == websocketpp::frame::opcode::BINARY)); - - connection->recycle(msg); + connection->send(msg->get_payload(),msg->get_opcode()); } void http(connection_ptr connection) { connection->set_body("HTTP Response!!"); } - - void on_fail(connection_ptr connection) { - std::cout << "connection failed" << std::endl; - } }; int main(int argc, char* argv[]) { unsigned short port = 9002; bool tls = false; - if (argc == 2) { - // TODO: input validation? + if (argc >= 2) { port = atoi(argv[1]); + + if (port == 0) { + std::cout << "Unable to parse port input " << argv[1] << std::endl; + return 1; + } } if (argc == 3) { - // TODO: input validation? - port = atoi(argv[1]); tls = !strcmp(argv[2],"-tls"); } @@ -112,36 +95,20 @@ int main(int argc, char* argv[]) { tls_endpoint_type e(h); e.alog().unset_level(websocketpp::log::alevel::ALL); - //e.alog().set_level(websocketpp::log::alevel::CONNECT); - //e.alog().set_level(websocketpp::log::alevel::DISCONNECT); - //e.alog().set_level(websocketpp::log::alevel::DEVEL); - //e.alog().set_level(websocketpp::log::alevel::DEBUG_CLOSE); - //e.alog().unset_level(websocketpp::log::alevel::DEBUG_HANDSHAKE); - e.elog().unset_level(websocketpp::log::elevel::ALL); - //e.elog().set_level(websocketpp::log::elevel::ERROR); - //e.elog().set_level(websocketpp::log::elevel::FATAL); - std::cout << "Starting Secure WebSocket echo server on port " << port << std::endl; + std::cout << "Starting Secure WebSocket echo server on port " + << port << std::endl; e.listen(port); } else { plain_handler_ptr h(new echo_server_handler()); plain_endpoint_type e(h); e.alog().unset_level(websocketpp::log::alevel::ALL); - //e.alog().set_level(websocketpp::log::alevel::CONNECT); - //e.alog().set_level(websocketpp::log::alevel::DISCONNECT); - //e.alog().unset_level(websocketpp::log::alevel::DEBUG_HANDSHAKE); - e.elog().unset_level(websocketpp::log::elevel::ALL); - //e.elog().set_level(websocketpp::log::elevel::ERROR); - //e.elog().set_level(websocketpp::log::elevel::FATAL); - // TODO: fix - //e.alog().set_level(websocketpp::log::alevel::CONNECT & websocketpp::log::alevel::DISCONNECT); - //e.elog().set_levels(websocketpp::log::elevel::ERROR,websocketpp::log::elevel::FATAL); - - std::cout << "Starting WebSocket echo server on port " << port << std::endl; + std::cout << "Starting WebSocket echo server on port " + << port << std::endl; e.listen(port); } diff --git a/src/roles/client.hpp b/src/roles/client.hpp index d73e2b9c49..e3f4af2817 100644 --- a/src/roles/client.hpp +++ b/src/roles/client.hpp @@ -48,18 +48,6 @@ using boost::asio::ip::tcp; namespace websocketpp { namespace role { - -/*class client_exception : public std::exception { -public: - client_exception(const std::string& msg) : m_msg(msg {} - ~client_exception() throw() {} - - virtual const char* what() const throw() { - return m_msg.c_str(); - } - - std::string m_msg; -};*/ template class client { @@ -91,6 +79,16 @@ public: return m_response.header(key); } + // Valid before connect is called + void add_request_header(const std::string& key, const std::string& value) { + m_request.add_header(key,value); + } + void replace_request_header(const std::string& key, const std::string& value) { + m_request.replace_header(key,value); + } + void remove_request_header(const std::string& key) { + m_request.remove_header(key); + } // Information about the requested URI // valid only after URIs are loaded