1 //#ifndef _WEBSOCKETPP_CPP11_STL_
2 // #define _WEBSOCKETPP_CPP11_STL_
6 #include <boost/timer/timer.hpp>
8 #include <websocketpp/config/core.hpp>
10 //#include <websocketpp/security/none.hpp>
12 //#include <websocketpp/concurrency/none.hpp>
13 //#include <websocketpp/concurrency/stl.hpp>
15 //#include <websocketpp/transport/iostream.hpp>
16 #include <websocketpp/server.hpp>
21 //typedef websocketpp::concurrency::stl concurrency;
22 //typedef websocketpp::transport::iostream<concurrency> transport;
23 //typedef websocketpp::server<concurrency,transport> server;
24 typedef websocketpp::server<websocketpp::config::core> server;
26 /*class handler : public server::handler {
27 bool validate(connection_ptr con) {
28 std::cout << "handler validate" << std::endl;
29 if (con->get_origin() != "http://www.example.com") {
30 con->set_status(websocketpp::http::status_code::FORBIDDEN);
36 void http(connection_ptr con) {
37 std::cout << "handler http" << std::endl;
40 void on_load(connection_ptr con, ptr old_handler) {
41 std::cout << "handler on_load" << std::endl;
43 void on_unload(connection_ptr con, ptr new_handler) {
44 std::cout << "handler on_unload" << std::endl;
47 void on_open(connection_ptr con) {
48 std::cout << "handler on_open" << std::endl;
50 void on_fail(connection_ptr con) {
51 std::cout << "handler on_fail" << std::endl;
54 void on_message(connection_ptr con, message_ptr msg) {
55 std::cout << "handler on_message" << std::endl;
60 void on_close(connection_ptr con) {
61 std::cout << "handler on_close" << std::endl;
66 typedef websocketpp::message_buffer::message<websocketpp::message_buffer::alloc::con_msg_manager>
68 typedef websocketpp::message_buffer::alloc::con_msg_manager<message_type>
71 con_msg_man_type::ptr manager = websocketpp::lib::make_shared<con_msg_man_type>();
75 message_type::ptr input = manager->get_message(websocketpp::frame::opcode::TEXT,foo);
76 message_type::ptr output = manager->get_message(websocketpp::frame::opcode::TEXT,foo);
77 websocketpp::frame::masking_key_type key;
79 std::random_device dev;
85 double m = 18094238402394.0824923;
87 /*std::cout << "Some Math" << std::endl;
89 boost::timer::auto_cpu_timer t;
91 for (int i = 0; i < foo; i++) {
97 std::cout << m << std::endl;
99 std::cout << "Random Gen" << std::endl;
101 boost::timer::auto_cpu_timer t;
103 input->get_raw_payload().replace(0,foo,foo,'\0');
104 output->get_raw_payload().replace(0,foo,foo,'\0');
107 std::cout << "Out of place accelerated" << std::endl;
109 boost::timer::auto_cpu_timer t;
111 websocketpp::frame::word_mask_exact(reinterpret_cast<uint8_t*>(const_cast<char*>(input->get_raw_payload().data())), reinterpret_cast<uint8_t*>(const_cast<char*>(output->get_raw_payload().data())), foo, key);
114 std::cout << websocketpp::utility::to_hex(input->get_payload().c_str(),20) << std::endl;
115 std::cout << websocketpp::utility::to_hex(output->get_payload().c_str(),20) << std::endl;
117 input->get_raw_payload().replace(0,foo,foo,'\0');
118 output->get_raw_payload().replace(0,foo,foo,'\0');
120 std::cout << "In place accelerated" << std::endl;
122 boost::timer::auto_cpu_timer t;
124 websocketpp::frame::word_mask_exact(reinterpret_cast<uint8_t*>(const_cast<char*>(input->get_raw_payload().data())), reinterpret_cast<uint8_t*>(const_cast<char*>(input->get_raw_payload().data())), foo, key);
127 std::cout << websocketpp::utility::to_hex(input->get_payload().c_str(),20) << std::endl;
128 std::cout << websocketpp::utility::to_hex(output->get_payload().c_str(),20) << std::endl;
130 input->get_raw_payload().replace(0,foo,foo,'\0');
131 output->get_raw_payload().replace(0,foo,foo,'\0');
132 std::cout << "Out of place byte by byte" << std::endl;
134 boost::timer::auto_cpu_timer t;
136 websocketpp::frame::byte_mask(input->get_raw_payload().begin(), input->get_raw_payload().end(), output->get_raw_payload().begin(), key);
139 std::cout << websocketpp::utility::to_hex(input->get_payload().c_str(),20) << std::endl;
140 std::cout << websocketpp::utility::to_hex(output->get_payload().c_str(),20) << std::endl;
142 input->get_raw_payload().replace(0,foo,foo,'\0');
143 output->get_raw_payload().replace(0,foo,foo,'\0');
144 std::cout << "In place byte by byte" << std::endl;
146 boost::timer::auto_cpu_timer t;
148 websocketpp::frame::byte_mask(input->get_raw_payload().begin(), input->get_raw_payload().end(), input->get_raw_payload().begin(), key);
151 std::cout << websocketpp::utility::to_hex(input->get_payload().c_str(),20) << std::endl;
152 std::cout << websocketpp::utility::to_hex(output->get_payload().c_str(),20) << std::endl;
154 input->get_raw_payload().replace(0,foo,foo,'a');
155 output->get_raw_payload().replace(0,foo,foo,'b');
156 std::cout << "Copy" << std::endl;
158 boost::timer::auto_cpu_timer t;
160 std::copy(input->get_raw_payload().begin(), input->get_raw_payload().end(), output->get_raw_payload().begin());
163 std::cout << websocketpp::utility::to_hex(input->get_payload().c_str(),20) << std::endl;
164 std::cout << websocketpp::utility::to_hex(output->get_payload().c_str(),20) << std::endl;
166 /*server::handler::ptr h(new handler());
168 server test_server(h);
169 server::connection_ptr con;
171 std::stringstream output;
173 test_server.register_ostream(&output);
175 con = test_server.get_connection();
179 //foo.handle_accept(con,true);
181 std::stringstream input;
182 input << "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\nOrigin: http://www.example.com\r\n\r\n";
183 //input << "GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n";
186 std::stringstream input2;
187 input2 << "messageabc2";
190 std::stringstream input3;
191 input3 << "messageabc3";
194 std::stringstream input4;
198 std::cout << "connection output:" << std::endl;
199 std::cout << output.str() << std::endl;*/