diff --git a/.gitignore b/.gitignore index 08f8c31c98..0a50cc2afb 100644 --- a/.gitignore +++ b/.gitignore @@ -18,4 +18,4 @@ examples/chat_client/chat_client test/basic/tests libwebsocketpp.dylib.0.1.0 -websocketpp.xcodeproj/xcuserdata/* \ No newline at end of file +websocketpp.xcodeproj/xcuserdata/* diff --git a/examples/chat_client/chat_client.cpp b/examples/chat_client/chat_client.cpp index a7529998ff..7223dad92a 100644 --- a/examples/chat_client/chat_client.cpp +++ b/examples/chat_client/chat_client.cpp @@ -27,7 +27,7 @@ #include "chat_client_handler.hpp" -#include +#include "../../src/websocketpp.hpp" #include #include #include diff --git a/src/websocket_client.cpp b/src/websocket_client.cpp index a1e5eef347..69bdd1f89f 100644 --- a/src/websocket_client.cpp +++ b/src/websocket_client.cpp @@ -35,7 +35,8 @@ using websocketpp::client; using boost::asio::ip::tcp; -client::client(boost::asio::io_service& io_service,connection_handler_ptr defc) +client::client(boost::asio::io_service& io_service, + websocketpp::connection_handler_ptr defc) : m_elog_level(LOG_ALL), m_alog_level(ALOG_ALL), m_state(CLIENT_STATE_NULL), @@ -128,7 +129,7 @@ void client::set_elog_level(uint16_t level) { m_elog_level = level; } bool client::test_alog_level(uint16_t level) { - return (level & m_alog_level); + return ((level & m_alog_level) != 0); } void client::set_alog_level(uint16_t level) { if (test_alog_level(level)) { diff --git a/src/websocket_client_session.cpp b/src/websocket_client_session.cpp index 6570e4269f..0b01926ab7 100644 --- a/src/websocket_client_session.cpp +++ b/src/websocket_client_session.cpp @@ -45,9 +45,9 @@ using websocketpp::client_session; -client_session::client_session (client_ptr c, +client_session::client_session (websocketpp::client_ptr c, boost::asio::io_service& io_service, - connection_handler_ptr defc) + websocketpp::connection_handler_ptr defc) : session(io_service,defc),m_client(c) {} void client_session::on_connect() { diff --git a/src/websocket_client_session.hpp b/src/websocket_client_session.hpp index f55b29fa08..510f02cd66 100644 --- a/src/websocket_client_session.hpp +++ b/src/websocket_client_session.hpp @@ -34,7 +34,11 @@ #include #include +#if defined(WIN32) +#include +#else #include +#endif #include #include diff --git a/src/websocket_frame.cpp b/src/websocket_frame.cpp index db46ff29ea..6be794f501 100644 --- a/src/websocket_frame.cpp +++ b/src/websocket_frame.cpp @@ -33,7 +33,11 @@ #include #include +#if defined(WIN32) +#include +#else #include +#endif using websocketpp::frame; diff --git a/src/websocket_server.cpp b/src/websocket_server.cpp index 984a1c8441..c098e77ad3 100644 --- a/src/websocket_server.cpp +++ b/src/websocket_server.cpp @@ -36,7 +36,7 @@ using websocketpp::server; server::server(boost::asio::io_service& io_service, const tcp::endpoint& endpoint, - connection_handler_ptr defc) + websocketpp::connection_handler_ptr defc) : m_elog_level(LOG_ALL), m_alog_level(ALOG_ALL), m_max_message_size(DEFAULT_MAX_MESSAGE_SIZE), @@ -81,7 +81,7 @@ void server::set_elog_level(uint16_t level) { m_elog_level = level; } bool server::test_alog_level(uint16_t level) { - return (level & m_alog_level); + return ((level & m_alog_level) != 0); } void server::set_alog_level(uint16_t level) { if (test_alog_level(level)) { @@ -153,7 +153,7 @@ void server::start_accept() { ); } -void server::handle_accept(server_session_ptr session, +void server::handle_accept(websocketpp::server_session_ptr session, const boost::system::error_code& error) { if (!error) { diff --git a/src/websocket_server_session.cpp b/src/websocket_server_session.cpp index b1015c7bde..1213fb8eca 100644 --- a/src/websocket_server_session.cpp +++ b/src/websocket_server_session.cpp @@ -43,9 +43,9 @@ using websocketpp::server_session; -server_session::server_session(server_ptr s, +server_session::server_session(websocketpp::server_ptr s, boost::asio::io_service& io_service, - connection_handler_ptr defc) + websocketpp::connection_handler_ptr defc) : session(io_service,defc),m_server(s) {} void server_session::on_connect() { diff --git a/src/websocket_server_session.hpp b/src/websocket_server_session.hpp index 73b9ed59cd..0fd93bd8c9 100644 --- a/src/websocket_server_session.hpp +++ b/src/websocket_server_session.hpp @@ -34,7 +34,11 @@ #include #include +#if defined(WIN32) +#include +#else #include +#endif #include #include diff --git a/src/websocket_session.cpp b/src/websocket_session.cpp index d13b3b5ad3..9ebf2a9a8d 100644 --- a/src/websocket_session.cpp +++ b/src/websocket_session.cpp @@ -44,7 +44,7 @@ using websocketpp::session; session::session (boost::asio::io_service& io_service, - connection_handler_ptr defc) + websocketpp::connection_handler_ptr defc) : m_status(CONNECTING), m_local_close_code(CLOSE_STATUS_NO_STATUS), m_remote_close_code(CLOSE_STATUS_NO_STATUS), @@ -67,7 +67,7 @@ boost::asio::io_service& session::io_service() { return m_io_service; } -void session::set_handler(connection_handler_ptr new_con) { +void session::set_handler(websocketpp::connection_handler_ptr new_con) { if (m_local_interface) { // TODO: this should be another method and not reusing onclose //m_local_interface->disconnect(shared_from_this(),4000,"Setting new connection handler"); @@ -101,7 +101,7 @@ std::string session::get_server_header(const std::string& key) const { } std::string session::get_header(const std::string& key, - const header_list& list) const { + const websocketpp::header_list& list) const { header_list::const_iterator h = list.find(key); if (h == list.end()) { diff --git a/src/websocket_session.hpp b/src/websocket_session.hpp index 19e33cb8fd..c6a4847d6a 100644 --- a/src/websocket_session.hpp +++ b/src/websocket_session.hpp @@ -34,7 +34,11 @@ #include #include +#if defined(WIN32) +#include +#else #include +#endif #include #include @@ -140,14 +144,15 @@ public: void disconnect(uint16_t status,const std::string& reason); // temp virtual bool is_server() const = 0; -protected: + // Opening handshake processors and callbacks. These need to be defined in // derived classes. - virtual void write_handshake() = 0; virtual void handle_write_handshake(const boost::system::error_code& e) = 0; - virtual void read_handshake() = 0; virtual void handle_read_handshake(const boost::system::error_code& e, std::size_t bytes_transferred) = 0; +protected: + virtual void write_handshake() = 0; + virtual void read_handshake() = 0; // start async read for a websocket frame (2 bytes) to handle_frame_header void read_frame(); diff --git a/windows/.gitignore b/windows/.gitignore new file mode 100644 index 0000000000..f885bfa69a --- /dev/null +++ b/windows/.gitignore @@ -0,0 +1,9 @@ +*.user +*.ncb +*.suo +Debug +Release +examples/*.user +examples/*.ncb +examples/Debug +examples/Release diff --git a/windows/examples/chatclient.vcproj b/windows/examples/chatclient.vcproj new file mode 100644 index 0000000000..4919d9f806 --- /dev/null +++ b/windows/examples/chatclient.vcproj @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/windows/examples/chatserver.vcproj b/windows/examples/chatserver.vcproj new file mode 100644 index 0000000000..a0080e75a8 --- /dev/null +++ b/windows/examples/chatserver.vcproj @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/windows/examples/echoserver.vcproj b/windows/examples/echoserver.vcproj new file mode 100644 index 0000000000..f0d6c88bea --- /dev/null +++ b/windows/examples/echoserver.vcproj @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/windows/stdint.h b/windows/stdint.h new file mode 100644 index 0000000000..b68541271b --- /dev/null +++ b/windows/stdint.h @@ -0,0 +1,44 @@ +/* + * 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. + * + */ + +#ifndef STDINT_WIN32_H +#define STDINT_WIN32_H + +/* This file emulates enough of stdint.h on Windows. */ +#define INT32_MIN (-2147483647i32 - 1) /* minimum signed 32 bit value */ +#define INT32_MAX 2147483647i32 /* maximum signed 32 bit value */ + +typedef unsigned char uint8_t; +typedef signed char int8_t; +typedef unsigned short uint16_t; +typedef short int16_t; +typedef unsigned int uint32_t; +typedef int int32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; + +#endif diff --git a/windows/websocketpp.sln b/windows/websocketpp.sln new file mode 100644 index 0000000000..2c657c2785 --- /dev/null +++ b/windows/websocketpp.sln @@ -0,0 +1,54 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "websocketpp", "websocketpp.vcproj", "{1C0FD04E-5ACA-4031-B3D1-320A5360C9D0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "examples", "examples", "{14E490FC-930E-40EE-B14A-84E2D98DEC9F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echoserver", "examples\echoserver.vcproj", "{B569A272-D7D3-404B-B5FB-9187C0EB9F48}" + ProjectSection(ProjectDependencies) = postProject + {1C0FD04E-5ACA-4031-B3D1-320A5360C9D0} = {1C0FD04E-5ACA-4031-B3D1-320A5360C9D0} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "chatserver", "examples\chatserver.vcproj", "{2AFECE48-86DE-47D0-9263-DC0D203AA62D}" + ProjectSection(ProjectDependencies) = postProject + {1C0FD04E-5ACA-4031-B3D1-320A5360C9D0} = {1C0FD04E-5ACA-4031-B3D1-320A5360C9D0} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "chatclient", "examples\chatclient.vcproj", "{116BFEDA-AF8E-4B3F-8508-ACC5EE89F905}" + ProjectSection(ProjectDependencies) = postProject + {1C0FD04E-5ACA-4031-B3D1-320A5360C9D0} = {1C0FD04E-5ACA-4031-B3D1-320A5360C9D0} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1C0FD04E-5ACA-4031-B3D1-320A5360C9D0}.Debug|Win32.ActiveCfg = Debug|Win32 + {1C0FD04E-5ACA-4031-B3D1-320A5360C9D0}.Debug|Win32.Build.0 = Debug|Win32 + {1C0FD04E-5ACA-4031-B3D1-320A5360C9D0}.Release|Win32.ActiveCfg = Release|Win32 + {1C0FD04E-5ACA-4031-B3D1-320A5360C9D0}.Release|Win32.Build.0 = Release|Win32 + {B569A272-D7D3-404B-B5FB-9187C0EB9F48}.Debug|Win32.ActiveCfg = Debug|Win32 + {B569A272-D7D3-404B-B5FB-9187C0EB9F48}.Debug|Win32.Build.0 = Debug|Win32 + {B569A272-D7D3-404B-B5FB-9187C0EB9F48}.Release|Win32.ActiveCfg = Release|Win32 + {B569A272-D7D3-404B-B5FB-9187C0EB9F48}.Release|Win32.Build.0 = Release|Win32 + {2AFECE48-86DE-47D0-9263-DC0D203AA62D}.Debug|Win32.ActiveCfg = Debug|Win32 + {2AFECE48-86DE-47D0-9263-DC0D203AA62D}.Debug|Win32.Build.0 = Debug|Win32 + {2AFECE48-86DE-47D0-9263-DC0D203AA62D}.Release|Win32.ActiveCfg = Release|Win32 + {2AFECE48-86DE-47D0-9263-DC0D203AA62D}.Release|Win32.Build.0 = Release|Win32 + {116BFEDA-AF8E-4B3F-8508-ACC5EE89F905}.Debug|Win32.ActiveCfg = Debug|Win32 + {116BFEDA-AF8E-4B3F-8508-ACC5EE89F905}.Debug|Win32.Build.0 = Debug|Win32 + {116BFEDA-AF8E-4B3F-8508-ACC5EE89F905}.Release|Win32.ActiveCfg = Release|Win32 + {116BFEDA-AF8E-4B3F-8508-ACC5EE89F905}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {B569A272-D7D3-404B-B5FB-9187C0EB9F48} = {14E490FC-930E-40EE-B14A-84E2D98DEC9F} + {2AFECE48-86DE-47D0-9263-DC0D203AA62D} = {14E490FC-930E-40EE-B14A-84E2D98DEC9F} + {116BFEDA-AF8E-4B3F-8508-ACC5EE89F905} = {14E490FC-930E-40EE-B14A-84E2D98DEC9F} + EndGlobalSection +EndGlobal diff --git a/windows/websocketpp.vcproj b/windows/websocketpp.vcproj new file mode 100644 index 0000000000..deea893c45 --- /dev/null +++ b/windows/websocketpp.vcproj @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +