diff --git a/examples/fuzzing_client/Makefile b/examples/fuzzing_client/Makefile new file mode 100644 index 0000000000..2208fcaea2 --- /dev/null +++ b/examples/fuzzing_client/Makefile @@ -0,0 +1,23 @@ +CFLAGS = -O2 +LDFLAGS = + +CXX ?= c++ +SHARED ?= "1" + +ifeq ($(SHARED), 1) + LDFLAGS := $(LDFLAGS) -lboost_system -lboost_thread -lwebsocketpp +else + LDFLAGS := $(LDFLAGS) -lboost_system -lboost_thread -lboost_date_time -lboost_regex -lboost_random -lboost_program_options ../../libwebsocketpp.a +endif + +fuzzing_client: fuzzing_client.o + $(CXX) $(CFLAGS) $^ -o $@ $(LDFLAGS) + +%.o: %.cpp + $(CXX) -c $(CFLAGS) -o $@ $^ + +# cleanup by removing generated files +# +.PHONY: clean +clean: + rm -f *.o fuzzing_client diff --git a/examples/fuzzing_client/fuzzing_client.cpp b/examples/fuzzing_client/fuzzing_client.cpp new file mode 100644 index 0000000000..2a8caf6675 --- /dev/null +++ b/examples/fuzzing_client/fuzzing_client.cpp @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2011, Peter Thorson. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the WebSocket++ Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL PETER THORSON BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "../../src/endpoint.hpp" +#include "../../src/roles/client.hpp" + +#include + +typedef websocketpp::endpoint plain_endpoint_type; +typedef plain_endpoint_type::handler_ptr plain_handler_ptr; +typedef plain_endpoint_type::connection_ptr connection_ptr; + +class echo_client_handler : public plain_endpoint_type::handler { +public: + typedef echo_client_handler type; + typedef plain_endpoint_type::connection_ptr connection_ptr; + + void on_open(connection_ptr connection) { + agent = connection->get_response_header("Server"); + std::cout << "Testing agent " << agent << std::endl; + + // needs more C++11 intializer lists =( + test_9_1_X_sizes[0] = 65536; + test_9_1_X_sizes[1] = 262144; + test_9_1_X_sizes[2] = 262144; + test_9_1_X_sizes[3] = 4194304; + test_9_1_X_sizes[4] = 8388608; + test_9_1_X_sizes[5] = 16777216; + + test = 1; + + + start_9_1_X(test); + connection->send(data,true); + } + + void on_message(connection_ptr connection,websocketpp::message::data_ptr msg) { + end_time = boost::posix_time::microsec_clock::local_time(); + + boost::posix_time::time_period len(start_time,end_time); + + if (msg->get_payload() == data) { + std::cout << " passes in " << len.length() << std::endl; + } else { + std::cout << " fails in " << len.length() << std::endl; + } + + connection->recycle(msg); + + if (test == 6) { + std::cout << "Done" << std::endl; + connection->close(websocketpp::close::status::NORMAL, ""); + } else { + test++; + start_9_1_X(test); + connection->send(data,true); + } + } + + void http(connection_ptr connection) { + //connection->set_body("HTTP Response!!"); + } + + void on_fail(connection_ptr connection) { + std::cout << "connection failed" << std::endl; + } + + void start_9_1_X(int subtest) { + std::cout << "Test 9.2." << subtest << " "; + + data.reserve(test_9_1_X_sizes[subtest-1]); + data.assign(test_9_1_X_sizes[subtest-1],'*'); + start_time = boost::posix_time::microsec_clock::local_time(); + } + + size_t test_9_1_X_sizes[6]; + int test; + std::string agent; + std::string data; + boost::posix_time::ptime start_time; + boost::posix_time::ptime end_time; +}; + + +int main(int argc, char* argv[]) { + std::string uri; + + /*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()); + connection_ptr connection; + 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:9000/"); + + endpoint.run(); + + std::cout << "done" << std::endl; + + } catch (std::exception& e) { + std::cerr << "Exception: " << e.what() << std::endl; + } + + return 0; +} diff --git a/examples/fuzzing_server_tls/Makefile b/examples/fuzzing_server_tls/Makefile new file mode 100644 index 0000000000..ce23109609 --- /dev/null +++ b/examples/fuzzing_server_tls/Makefile @@ -0,0 +1,26 @@ +BOOST_LIB_PATH ?= /usr/local/lib +BOOST_INCLUDE_PATH ?= /usr/local/include + +CFLAGS = -O2 -I$(BOOST_INCLUDE_PATH) +LDFLAGS = -L$(BOOST_LIB_PATH) + +CXX ?= c++ +SHARED ?= "1" + +ifeq ($(SHARED), 1) + LDFLAGS := $(LDFLAGS) -lboost_system -lboost_date_time -lcrypto -lssl -lwebsocketpp +else + LDFLAGS := $(LDFLAGS) $(BOOST_LIB_PATH)/libboost_system.a $(BOOST_LIB_PATH)/libboost_date_time.a $(BOOST_LIB_PATH)/libboost_regex.a -lcrypto -lssl ../../libwebsocketpp.a +endif + +fuzzing_server: fuzzing_server_tls.o + $(CXX) $(CFLAGS) $^ -o $@ $(LDFLAGS) + +%.o: %.cpp + $(CXX) -c $(CFLAGS) -o $@ $^ + +# cleanup by removing generated files +# +.PHONY: clean +clean: + rm -f *.o fuzzing_server diff --git a/examples/fuzzing_server_tls/echo_client.html b/examples/fuzzing_server_tls/echo_client.html new file mode 100644 index 0000000000..cd46a17a72 --- /dev/null +++ b/examples/fuzzing_server_tls/echo_client.html @@ -0,0 +1,94 @@ + + + + + + + + + + +
+
+ + +
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/examples/fuzzing_server_tls/fuzzing_server_tls.cpp b/examples/fuzzing_server_tls/fuzzing_server_tls.cpp new file mode 100644 index 0000000000..96377cc5ee --- /dev/null +++ b/examples/fuzzing_server_tls/fuzzing_server_tls.cpp @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2011, Peter Thorson. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the WebSocket++ Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL PETER THORSON BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "../../src/endpoint.hpp" +#include "../../src/roles/server.hpp" +#include "../../src/sockets/ssl.hpp" + +#include + +#include + +typedef websocketpp::endpoint plain_endpoint_type; +typedef websocketpp::endpoint tls_endpoint_type; +typedef plain_endpoint_type::handler_ptr plain_handler_ptr; +typedef tls_endpoint_type::handler_ptr tls_handler_ptr; + +template +class echo_server_handler : public endpoint_type::handler { +public: + typedef echo_server_handler type; + typedef typename endpoint_type::connection_ptr connection_ptr; + + std::string get_password() const { + return "test"; + } + + boost::shared_ptr on_tls_init() { + // create a tls context, init, and return. + boost::shared_ptr context(new boost::asio::ssl::context(boost::asio::ssl::context::tlsv1)); + try { + context->set_options(boost::asio::ssl::context::default_workarounds | + 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"); + } 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; + // extract user agent + // start timer + start_time = boost::posix_time::microsec_clock::local_time(); + // send message + connection->send("abcd",true); + // stop + } + + 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)); + + end_time = boost::posix_time::microsec_clock::local_time(); + + boost::posix_time::time_period len(start_time,end_time); + + if (msg->get_payload() == "abcd") { + std::cout << "Pass in " << len.length() << std::endl; + } else { + std::cout << "Fail in " << len.length() << std::endl; + } + + // stop timer + // check if message was valid + + 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; + } + + boost::posix_time::ptime start_time; + boost::posix_time::ptime end_time; +}; + +int main(int argc, char* argv[]) { + unsigned short port = 9002; + bool tls = false; + + if (argc == 2) { + // TODO: input validation? + port = atoi(argv[1]); + } + + if (argc == 3) { + // TODO: input validation? + port = atoi(argv[1]); + tls = !strcmp(argv[2],"-tls"); + } + + try { + if (tls) { + tls_handler_ptr h(new echo_server_handler()); + 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; + 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; + e.listen(port); + } + + + } catch (std::exception& e) { + std::cerr << "Exception: " << e.what() << std::endl; + } + + return 0; +} diff --git a/src/connection.hpp b/src/connection.hpp index 7740da9754..1d436cfe13 100644 --- a/src/connection.hpp +++ b/src/connection.hpp @@ -168,6 +168,7 @@ public: } void close(close::status::value code, const utf8_string& reason) { // TODO: + send_close(code, reason); } void ping(const binary_string& payload) { binary_string_ptr msg(m_processor->prepare_frame(frame::opcode::PING, diff --git a/src/roles/client.hpp b/src/roles/client.hpp index 135ab060e5..0c796a1ce4 100644 --- a/src/roles/client.hpp +++ b/src/roles/client.hpp @@ -61,13 +61,20 @@ public: int get_version() const { return m_version; } - /*std::string get_request_header(const std::string& key) const { - return m_request.header(key); - }*/ + std::string get_origin() const { return m_origin; } + // not sure when valid + std::string get_request_header(const std::string& key) const { + return m_request.header(key); + } + std::string get_response_header(const std::string& key) const { + return m_response.header(key); + } + + // Information about the requested URI // valid only after URIs are loaded // TODO: check m_uri for NULLness diff --git a/src/roles/server.hpp b/src/roles/server.hpp index c69ecb487d..5fe6227879 100644 --- a/src/roles/server.hpp +++ b/src/roles/server.hpp @@ -107,6 +107,10 @@ public: // Valid if get_version() returns -1 (ie this is an http connection) void set_body(const std::string& value); + + int32_t rand() { + return 0; + } protected: connection(endpoint& e) : m_endpoint(e), diff --git a/websocketpp.xcodeproj/project.pbxproj b/websocketpp.xcodeproj/project.pbxproj index 585053c4b8..c7090f0139 100644 --- a/websocketpp.xcodeproj/project.pbxproj +++ b/websocketpp.xcodeproj/project.pbxproj @@ -31,6 +31,19 @@ B6727429148517180029CF3E /* uri.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6727428148517180029CF3E /* uri.cpp */; }; B672742A148517180029CF3E /* uri.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6727428148517180029CF3E /* uri.cpp */; }; B672742D148531250029CF3E /* libboost_regex.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6DF1CBF1434AF6A0029A1B1 /* libboost_regex.dylib */; }; + B6732462148FAF0000FC2B04 /* fuzzing_server_tls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6732451148F973D00FC2B04 /* fuzzing_server_tls.cpp */; }; + B6732463148FAF0A00FC2B04 /* libwebsocketpp.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6DF1C721434A8280029A1B1 /* libwebsocketpp.dylib */; }; + B6732464148FAF1900FC2B04 /* libboost_date_time.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6DF1CBE1434AF6A0029A1B1 /* libboost_date_time.dylib */; }; + B6732465148FAF1900FC2B04 /* libboost_regex.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6DF1CBF1434AF6A0029A1B1 /* libboost_regex.dylib */; }; + B6732466148FAF1900FC2B04 /* libboost_system.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6DF1CBC1434AE070029A1B1 /* libboost_system.dylib */; }; + B6732467148FAF2C00FC2B04 /* libssl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6FE8D5D14730B2200B32547 /* libssl.dylib */; }; + B6732468148FAF3500FC2B04 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6FE8D5B14730B1A00B32547 /* libcrypto.dylib */; }; + B673247B148FB12400FC2B04 /* fuzzing_client.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B673246C148FB0F000FC2B04 /* fuzzing_client.cpp */; }; + B673247C148FB12C00FC2B04 /* libwebsocketpp.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6DF1C721434A8280029A1B1 /* libwebsocketpp.dylib */; }; + B673247D148FB13900FC2B04 /* libboost_date_time.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6DF1CBE1434AF6A0029A1B1 /* libboost_date_time.dylib */; }; + B673247E148FB13900FC2B04 /* libboost_random.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B682888C1437464A002BA48B /* libboost_random.dylib */; }; + B673247F148FB13900FC2B04 /* libboost_regex.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6DF1CBF1434AF6A0029A1B1 /* libboost_regex.dylib */; }; + B6732480148FB13900FC2B04 /* libboost_system.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6DF1CBC1434AE070029A1B1 /* libboost_system.dylib */; }; B68288871437460E002BA48B /* chat_client_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6828875143745DA002BA48B /* chat_client_handler.cpp */; }; B68288881437460E002BA48B /* chat_client.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6828877143745DA002BA48B /* chat_client.cpp */; }; B682888914374617002BA48B /* libwebsocketpp.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B6DF1C721434A8280029A1B1 /* libwebsocketpp.dylib */; }; @@ -98,6 +111,24 @@ ); runOnlyForDeploymentPostprocessing = 1; }; + B6732456148FAEEB00FC2B04 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; + B673246F148FB0FC00FC2B04 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; B682887B143745F2002BA48B /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -191,6 +222,13 @@ B6732444148E543000FC2B04 /* websocket_server_session.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = websocket_server_session.hpp; sourceTree = ""; }; B6732445148E543000FC2B04 /* websocket_session.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = websocket_session.cpp; sourceTree = ""; }; B6732446148E543000FC2B04 /* websocket_session.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = websocket_session.hpp; sourceTree = ""; }; + B6732450148F973D00FC2B04 /* echo_client.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = echo_client.html; sourceTree = ""; }; + B6732451148F973D00FC2B04 /* fuzzing_server_tls.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = fuzzing_server_tls.cpp; sourceTree = ""; }; + B6732452148F973D00FC2B04 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + B6732458148FAEEB00FC2B04 /* fuzzing_server */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = fuzzing_server; sourceTree = BUILT_PRODUCTS_DIR; }; + B673246B148FB0C400FC2B04 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + B673246C148FB0F000FC2B04 /* fuzzing_client.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = fuzzing_client.cpp; sourceTree = ""; }; + B6732471148FB0FC00FC2B04 /* fuzzing_client */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = fuzzing_client; sourceTree = BUILT_PRODUCTS_DIR; }; B6828875143745DA002BA48B /* chat_client_handler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = chat_client_handler.cpp; path = examples/chat_client/chat_client_handler.cpp; sourceTree = ""; }; B6828876143745DA002BA48B /* chat_client_handler.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = chat_client_handler.hpp; path = examples/chat_client/chat_client_handler.hpp; sourceTree = ""; }; B6828877143745DA002BA48B /* chat_client.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = chat_client.cpp; path = examples/chat_client/chat_client.cpp; sourceTree = ""; }; @@ -248,6 +286,31 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B6732455148FAEEB00FC2B04 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B6732468148FAF3500FC2B04 /* libcrypto.dylib in Frameworks */, + B6732467148FAF2C00FC2B04 /* libssl.dylib in Frameworks */, + B6732464148FAF1900FC2B04 /* libboost_date_time.dylib in Frameworks */, + B6732465148FAF1900FC2B04 /* libboost_regex.dylib in Frameworks */, + B6732466148FAF1900FC2B04 /* libboost_system.dylib in Frameworks */, + B6732463148FAF0A00FC2B04 /* libwebsocketpp.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B673246E148FB0FC00FC2B04 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B673247D148FB13900FC2B04 /* libboost_date_time.dylib in Frameworks */, + B673247E148FB13900FC2B04 /* libboost_random.dylib in Frameworks */, + B673247F148FB13900FC2B04 /* libboost_regex.dylib in Frameworks */, + B6732480148FB13900FC2B04 /* libboost_system.dylib in Frameworks */, + B673247C148FB12C00FC2B04 /* libwebsocketpp.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; B682887A143745F2002BA48B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -412,6 +475,27 @@ path = interfaces; sourceTree = ""; }; + B673244F148F973D00FC2B04 /* fuzzing_server_tls */ = { + isa = PBXGroup; + children = ( + B6732450148F973D00FC2B04 /* echo_client.html */, + B6732451148F973D00FC2B04 /* fuzzing_server_tls.cpp */, + B6732452148F973D00FC2B04 /* Makefile */, + ); + name = fuzzing_server_tls; + path = examples/fuzzing_server_tls; + sourceTree = ""; + }; + B6732469148FB0C400FC2B04 /* fuzzing_client */ = { + isa = PBXGroup; + children = ( + B673246C148FB0F000FC2B04 /* fuzzing_client.cpp */, + B673246B148FB0C400FC2B04 /* Makefile */, + ); + name = fuzzing_client; + path = examples/fuzzing_client; + sourceTree = ""; + }; B6CF18121437C370009295BE /* echo_client */ = { isa = PBXGroup; children = ( @@ -454,6 +538,8 @@ B6CF181C1437C397009295BE /* echo_client */, B6FE8D4F14730AE900B32547 /* Policy Test */, B663884B1487D73200DDAE13 /* echo_server_tls */, + B6732458148FAEEB00FC2B04 /* fuzzing_server */, + B6732471148FB0FC00FC2B04 /* fuzzing_client */, ); name = Products; sourceTree = ""; @@ -529,6 +615,8 @@ B6DF1CC61435ED380029A1B1 /* examples */ = { isa = PBXGroup; children = ( + B6732469148FB0C400FC2B04 /* fuzzing_client */, + B673244F148F973D00FC2B04 /* fuzzing_server_tls */, B6CF18121437C370009295BE /* echo_client */, B6DF1CC91435ED460029A1B1 /* chat_server */, B6DF1CC81435ED440029A1B1 /* chat_client */, @@ -658,6 +746,40 @@ productReference = B663884B1487D73200DDAE13 /* echo_server_tls */; productType = "com.apple.product-type.tool"; }; + B6732457148FAEEB00FC2B04 /* fuzzing_server */ = { + isa = PBXNativeTarget; + buildConfigurationList = B673245F148FAEEC00FC2B04 /* Build configuration list for PBXNativeTarget "fuzzing_server" */; + buildPhases = ( + B6732454148FAEEB00FC2B04 /* Sources */, + B6732455148FAEEB00FC2B04 /* Frameworks */, + B6732456148FAEEB00FC2B04 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = fuzzing_server; + productName = fuzzing_server; + productReference = B6732458148FAEEB00FC2B04 /* fuzzing_server */; + productType = "com.apple.product-type.tool"; + }; + B6732470148FB0FC00FC2B04 /* fuzzing_client */ = { + isa = PBXNativeTarget; + buildConfigurationList = B6732478148FB0FC00FC2B04 /* Build configuration list for PBXNativeTarget "fuzzing_client" */; + buildPhases = ( + B673246D148FB0FC00FC2B04 /* Sources */, + B673246E148FB0FC00FC2B04 /* Frameworks */, + B673246F148FB0FC00FC2B04 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = fuzzing_client; + productName = fuzzing_client; + productReference = B6732471148FB0FC00FC2B04 /* fuzzing_client */; + productType = "com.apple.product-type.tool"; + }; B682887C143745F2002BA48B /* chat_client */ = { isa = PBXNativeTarget; buildConfigurationList = B6828884143745F2002BA48B /* Build configuration list for PBXNativeTarget "chat_client" */; @@ -789,6 +911,8 @@ B6CF181B1437C397009295BE /* echo_client */, B6FE8D4E14730AE900B32547 /* policy_test */, B663884A1487D73200DDAE13 /* echo_server_tls */, + B6732457148FAEEB00FC2B04 /* fuzzing_server */, + B6732470148FB0FC00FC2B04 /* fuzzing_client */, ); }; /* End PBXProject section */ @@ -802,6 +926,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B6732454148FAEEB00FC2B04 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B6732462148FAF0000FC2B04 /* fuzzing_server_tls.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B673246D148FB0FC00FC2B04 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B673247B148FB12400FC2B04 /* fuzzing_client.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; B6828879143745F2002BA48B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -915,6 +1055,82 @@ }; name = Release; }; + B6732460148FAEEC00FC2B04 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + B6732461148FAEEC00FC2B04 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + B6732479148FB0FC00FC2B04 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + B673247A148FB0FC00FC2B04 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; B6828885143745F2002BA48B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1190,6 +1406,22 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + B673245F148FAEEC00FC2B04 /* Build configuration list for PBXNativeTarget "fuzzing_server" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B6732460148FAEEC00FC2B04 /* Debug */, + B6732461148FAEEC00FC2B04 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + B6732478148FB0FC00FC2B04 /* Build configuration list for PBXNativeTarget "fuzzing_client" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B6732479148FB0FC00FC2B04 /* Debug */, + B673247A148FB0FC00FC2B04 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; B6828884143745F2002BA48B /* Build configuration list for PBXNativeTarget "chat_client" */ = { isa = XCConfigurationList; buildConfigurations = (