make TLS support optional
This commit is contained in:
parent
1dc9b559e9
commit
88c2e1f6de
46
CMakeLists.txt
Normal file
46
CMakeLists.txt
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#
|
||||||
|
# cmd_websocket_chat.cpp
|
||||||
|
# Author: Benjamin Sergeant
|
||||||
|
# Copyright (c) 2018 Machine Zone, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.4.1)
|
||||||
|
project(ixwebsocket C CXX)
|
||||||
|
|
||||||
|
set (CMAKE_CXX_STANDARD 11)
|
||||||
|
set (CXX_STANDARD_REQUIRED ON)
|
||||||
|
set (CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
set( IXWEBSOCKET_SOURCES
|
||||||
|
ixwebsocket/IXSocket.cpp
|
||||||
|
ixwebsocket/IXWebSocket.cpp
|
||||||
|
ixwebsocket/IXWebSocketTransport.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set( IXWEBSOCKET_HEADERS
|
||||||
|
ixwebsocket/IXSocket.h
|
||||||
|
ixwebsocket/IXWebSocket.h
|
||||||
|
ixwebsocket/IXWebSocketTransport.h
|
||||||
|
)
|
||||||
|
|
||||||
|
if (USE_TLS)
|
||||||
|
add_definitions(-DIXWEBSOCKET_USE_TLS)
|
||||||
|
|
||||||
|
if (APPLE)
|
||||||
|
list( APPEND IXWEBSOCKET_HEADERS ixwebsocket/IXSocketAppleSSL.h)
|
||||||
|
list( APPEND IXWEBSOCKET_SOURCES ixwebsocket/IXSocketAppleSSL.cpp)
|
||||||
|
else()
|
||||||
|
list( APPEND IXWEBSOCKET_HEADERS ixwebsocket/IXSocketOpenSSL.h)
|
||||||
|
list( APPEND IXWEBSOCKET_SOURCES ixwebsocket/IXSocketOpenSSL.cpp)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_library( ixwebsocket STATIC
|
||||||
|
${IXWEBSOCKET_SOURCES}
|
||||||
|
${IXWEBSOCKET_HEADERS}
|
||||||
|
)
|
||||||
|
|
||||||
|
set( IXWEBSOCKET_INCLUDE_DIRS
|
||||||
|
.
|
||||||
|
../../shared/OpenSSL/include)
|
||||||
|
target_include_directories( ixwebsocket PUBLIC ${IXWEBSOCKET_INCLUDE_DIRS} )
|
@ -39,11 +39,15 @@ webSocket.send("hello world");
|
|||||||
webSocket.stop()
|
webSocket.stop()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
CMakefiles for the library and the examples are available. This library has few dependencies, so it is possible to just add the source files into your project.
|
||||||
|
|
||||||
## Implementation details
|
## Implementation details
|
||||||
|
|
||||||
### TLS/SSL
|
### TLS/SSL
|
||||||
|
|
||||||
Connections can be optionally secured and encrypted with TLS/SSL when using a wss:// endpoint, or using normal un-encrypted socket with ws:// endpoints. AppleSSL is used on iOS and OpenSSL is used on Android.
|
Connections can be optionally secured and encrypted with TLS/SSL when using a wss:// endpoint, or using normal un-encrypted socket with ws:// endpoints. AppleSSL is used on iOS and macOS, and OpenSSL is used on Android and Linux.
|
||||||
|
|
||||||
### Polling and background thread work
|
### Polling and background thread work
|
||||||
|
|
||||||
|
23
examples/chat/CMakeLists.txt
Normal file
23
examples/chat/CMakeLists.txt
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#
|
||||||
|
# cmd_websocket_chat.cpp
|
||||||
|
# Author: Benjamin Sergeant
|
||||||
|
# Copyright (c) 2018 Machine Zone, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
|
||||||
|
cmake_minimum_required (VERSION 3.4.1)
|
||||||
|
project (cmd_websocket_chat)
|
||||||
|
|
||||||
|
set (CMAKE_CXX_STANDARD 11)
|
||||||
|
|
||||||
|
option(USE_TLS "Add TLS support" ON)
|
||||||
|
|
||||||
|
add_subdirectory(${PROJECT_SOURCE_DIR}/../.. ixwebsocket)
|
||||||
|
|
||||||
|
add_executable(cmd_websocket_chat cmd_websocket_chat.cpp)
|
||||||
|
|
||||||
|
if (APPLE AND USE_TLS)
|
||||||
|
target_link_libraries(cmd_websocket_chat "-framework foundation" "-framework security")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(cmd_websocket_chat ixwebsocket)
|
||||||
|
install(TARGETS cmd_websocket_chat DESTINATION bin)
|
39
examples/chat/README.md
Normal file
39
examples/chat/README.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Building
|
||||||
|
|
||||||
|
1. cmake -G .
|
||||||
|
2. make
|
||||||
|
|
||||||
|
## Disable TLS
|
||||||
|
|
||||||
|
chat$ cmake -DUSE_TLS=OFF .
|
||||||
|
-- Configuring done
|
||||||
|
-- Generating done
|
||||||
|
-- Build files have been written to: /Users/bsergeant/src/foss/ixwebsocket/examples/chat
|
||||||
|
chat$ make
|
||||||
|
Scanning dependencies of target ixwebsocket
|
||||||
|
[ 16%] Building CXX object ixwebsocket/CMakeFiles/ixwebsocket.dir/ixwebsocket/IXSocket.cpp.o
|
||||||
|
[ 33%] Building CXX object ixwebsocket/CMakeFiles/ixwebsocket.dir/ixwebsocket/IXWebSocket.cpp.o
|
||||||
|
[ 50%] Building CXX object ixwebsocket/CMakeFiles/ixwebsocket.dir/ixwebsocket/IXWebSocketTransport.cpp.o
|
||||||
|
[ 66%] Linking CXX static library libixwebsocket.a
|
||||||
|
[ 66%] Built target ixwebsocket
|
||||||
|
[ 83%] Linking CXX executable cmd_websocket_chat
|
||||||
|
[100%] Built target cmd_websocket_chat
|
||||||
|
|
||||||
|
## Enable TLS (default)
|
||||||
|
|
||||||
|
```
|
||||||
|
chat$ cmake -DUSE_TLS=ON .
|
||||||
|
-- Configuring done
|
||||||
|
-- Generating done
|
||||||
|
-- Build files have been written to: /Users/bsergeant/src/foss/ixwebsocket/examples/chat
|
||||||
|
(venv) chat$ make
|
||||||
|
Scanning dependencies of target ixwebsocket
|
||||||
|
[ 14%] Building CXX object ixwebsocket/CMakeFiles/ixwebsocket.dir/ixwebsocket/IXSocket.cpp.o
|
||||||
|
[ 28%] Building CXX object ixwebsocket/CMakeFiles/ixwebsocket.dir/ixwebsocket/IXWebSocket.cpp.o
|
||||||
|
[ 42%] Building CXX object ixwebsocket/CMakeFiles/ixwebsocket.dir/ixwebsocket/IXWebSocketTransport.cpp.o
|
||||||
|
[ 57%] Building CXX object ixwebsocket/CMakeFiles/ixwebsocket.dir/ixwebsocket/IXSocketAppleSSL.cpp.o
|
||||||
|
[ 71%] Linking CXX static library libixwebsocket.a
|
||||||
|
[ 71%] Built target ixwebsocket
|
||||||
|
[ 85%] Linking CXX executable cmd_websocket_chat
|
||||||
|
[100%] Built target cmd_websocket_chat
|
||||||
|
```
|
@ -4,6 +4,8 @@
|
|||||||
# Copyright (c) 2017-2018 Machine Zone, Inc. All rights reserved.
|
# Copyright (c) 2017-2018 Machine Zone, Inc. All rights reserved.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# 'manual' way of building. You can also use cmake.
|
||||||
|
|
||||||
clang++ --std=c++11 --stdlib=libc++ \
|
clang++ --std=c++11 --stdlib=libc++ \
|
||||||
../../ixwebsocket/IXSocket.cpp \
|
../../ixwebsocket/IXSocket.cpp \
|
||||||
../../ixwebsocket/IXWebSocketTransport.cpp \
|
../../ixwebsocket/IXWebSocketTransport.cpp \
|
@ -12,7 +12,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
#include "../../ixwebsocket/IXWebSocket.h"
|
#include <ixwebsocket/IXWebSocket.h>
|
||||||
|
|
||||||
#include "nlohmann/json.hpp"
|
#include "nlohmann/json.hpp"
|
||||||
|
|
||||||
|
@ -11,10 +11,12 @@
|
|||||||
#include "IXWebSocketTransport.h"
|
#include "IXWebSocketTransport.h"
|
||||||
|
|
||||||
#include "IXSocket.h"
|
#include "IXSocket.h"
|
||||||
#ifdef __APPLE__
|
#ifdef IXWEBSOCKET_USE_TLS
|
||||||
# include "IXSocketAppleSSL.h"
|
# ifdef __APPLE__
|
||||||
#else
|
# include "IXSocketAppleSSL.h"
|
||||||
# include "IXSocketOpenSSL.h"
|
# else
|
||||||
|
# include "IXSocketOpenSSL.h"
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@ -140,10 +142,14 @@ namespace ix {
|
|||||||
if (protocol == "wss")
|
if (protocol == "wss")
|
||||||
{
|
{
|
||||||
_socket.reset();
|
_socket.reset();
|
||||||
#ifdef __APPLE__
|
#ifdef IXWEBSOCKET_USE_TLS
|
||||||
_socket = std::make_shared<SocketAppleSSL>();
|
# ifdef __APPLE__
|
||||||
|
_socket = std::make_shared<SocketAppleSSL>();
|
||||||
|
# else
|
||||||
|
_socket = std::make_shared<SocketOpenSSL>();
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
_socket = std::make_shared<SocketOpenSSL>();
|
return WebSocketInitResult(false, 0, "TLS is not supported.");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user