Compare commits
	
		
			5 Commits
		
	
	
		
			feature/pr
			...
			feature/cp
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 7ff12a36b9 | ||
|  | 945c692227 | ||
|  | c16b64bcb2 | ||
|  | 886b8f54bf | ||
|  | 02810f9adf | 
							
								
								
									
										13
									
								
								.github/workflows/unittest_linux.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.github/workflows/unittest_linux.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,13 +0,0 @@ | |||||||
| name: linux |  | ||||||
| on: |  | ||||||
|   push: |  | ||||||
|     paths-ignore: |  | ||||||
|     - 'docs/**' |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   linux: |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     steps: |  | ||||||
|     - uses: actions/checkout@v1 |  | ||||||
|     - name: make test_make |  | ||||||
|       run: make test_make |  | ||||||
							
								
								
									
										15
									
								
								.github/workflows/unittest_mac_tsan_mbedtls.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								.github/workflows/unittest_mac_tsan_mbedtls.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,15 +0,0 @@ | |||||||
| name: mac_tsan_mbedtls |  | ||||||
| on: |  | ||||||
|   push: |  | ||||||
|     paths-ignore: |  | ||||||
|     - 'docs/**' |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   mac_tsan_mbedtls: |  | ||||||
|     runs-on: macOS-latest |  | ||||||
|     steps: |  | ||||||
|     - uses: actions/checkout@v1 |  | ||||||
|     - name: install mbedtls |  | ||||||
|       run: brew install mbedtls |  | ||||||
|     - name: make test |  | ||||||
|       run: make test_tsan_mbedtls |  | ||||||
							
								
								
									
										15
									
								
								.github/workflows/unittest_mac_tsan_openssl.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								.github/workflows/unittest_mac_tsan_openssl.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,15 +0,0 @@ | |||||||
| name: mac_tsan_openssl |  | ||||||
| on: |  | ||||||
|   push: |  | ||||||
|     paths-ignore: |  | ||||||
|     - 'docs/**' |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   mac_tsan_openssl: |  | ||||||
|     runs-on: macOS-latest |  | ||||||
|     steps: |  | ||||||
|     - uses: actions/checkout@v1 |  | ||||||
|     - name: install openssl |  | ||||||
|       run: brew install openssl@1.1 |  | ||||||
|     - name: make test |  | ||||||
|       run: make test_tsan_openssl |  | ||||||
| @@ -1,13 +0,0 @@ | |||||||
| name: mac_tsan_sectransport |  | ||||||
| on: |  | ||||||
|   push: |  | ||||||
|     paths-ignore: |  | ||||||
|     - 'docs/**' |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   mac_tsan_sectransport: |  | ||||||
|     runs-on: macOS-latest |  | ||||||
|     steps: |  | ||||||
|     - uses: actions/checkout@v1 |  | ||||||
|     - name: make test_tsan |  | ||||||
|       run: make test_tsan |  | ||||||
							
								
								
									
										38
									
								
								.github/workflows/unittest_uwp.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										38
									
								
								.github/workflows/unittest_uwp.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,38 +0,0 @@ | |||||||
| name: uwp |  | ||||||
| on: |  | ||||||
|   push: |  | ||||||
|     paths-ignore: |  | ||||||
|     - 'docs/**' |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   uwp: |  | ||||||
|     runs-on: windows-latest |  | ||||||
|     steps: |  | ||||||
|     - uses: actions/checkout@v1 |  | ||||||
|     - uses: seanmiddleditch/gha-setup-vsdevenv@master |  | ||||||
|     - run: | |  | ||||||
|         mkdir build |  | ||||||
|         cd build |  | ||||||
|         cmake -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0" -DCMAKE_CXX_COMPILER=cl.exe -DUSE_TEST=1 .. |  | ||||||
|     - run: cmake --build build |  | ||||||
|  |  | ||||||
| # |  | ||||||
| #   Windows with OpenSSL is working but disabled as it takes 13 minutes (10 for openssl) to build with vcpkg |  | ||||||
| # |  | ||||||
| #   windows_openssl: |  | ||||||
| #     runs-on: windows-latest |  | ||||||
| #     steps: |  | ||||||
| #     - uses: actions/checkout@v1 |  | ||||||
| #     - uses: seanmiddleditch/gha-setup-vsdevenv@master |  | ||||||
| #     - run: | |  | ||||||
| #         vcpkg install zlib:x64-windows |  | ||||||
| #         vcpkg install openssl:x64-windows |  | ||||||
| #     - run: | |  | ||||||
| #         mkdir build |  | ||||||
| #         cd build |  | ||||||
| #         cmake -DCMAKE_TOOLCHAIN_FILE=c:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_CXX_COMPILER=cl.exe -DUSE_OPEN_SSL=1 -DUSE_TLS=1 -DUSE_WS=1 -DUSE_TEST=1 .. |  | ||||||
| #     - run: cmake --build build |  | ||||||
| #  |  | ||||||
| #     # Running the unittest does not work, the binary cannot be found |  | ||||||
| #     #- run: ../build/test/ixwebsocket_unittest.exe |  | ||||||
| #     # working-directory: test |  | ||||||
							
								
								
									
										17
									
								
								.github/workflows/unittest_windows.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								.github/workflows/unittest_windows.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,17 +0,0 @@ | |||||||
| name: windows |  | ||||||
| on: |  | ||||||
|   push: |  | ||||||
|     paths-ignore: |  | ||||||
|     - 'docs/**' |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   windows: |  | ||||||
|     runs-on: windows-latest |  | ||||||
|     steps: |  | ||||||
|     - uses: actions/checkout@v1 |  | ||||||
|     - uses: seanmiddleditch/gha-setup-vsdevenv@master |  | ||||||
|     - run: | |  | ||||||
|         mkdir build |  | ||||||
|         cd build |  | ||||||
|         cmake -DCMAKE_CXX_COMPILER=cl.exe -DUSE_WS=1 -DUSE_TEST=1 .. |  | ||||||
|     - run: cmake --build build |  | ||||||
| @@ -1 +1 @@ | |||||||
| docker/Dockerfile.alpine | docker/Dockerfile.centos7_httpd | ||||||
							
								
								
									
										33
									
								
								docker/Dockerfile.centos7_httpd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								docker/Dockerfile.centos7_httpd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | FROM centos:7 as build | ||||||
|  |  | ||||||
|  | RUN yum install -y gcc-c++ make zlib-devel redhat-rpm-config | ||||||
|  |  | ||||||
|  | RUN groupadd app && useradd -g app app | ||||||
|  | RUN chown -R app:app /opt | ||||||
|  | RUN chown -R app:app /usr/local | ||||||
|  |  | ||||||
|  | # There is a bug in CMake where we cannot build from the root top folder | ||||||
|  | # So we build from /opt | ||||||
|  | COPY --chown=app:app . /opt | ||||||
|  | WORKDIR /opt | ||||||
|  |  | ||||||
|  | USER app | ||||||
|  | RUN [ "make", "httpd_linux" ] | ||||||
|  | RUN [ "rm", "-rf", "build" ] | ||||||
|  |  | ||||||
|  | FROM centos:8 as runtime | ||||||
|  |  | ||||||
|  | RUN groupadd app && useradd -g app app | ||||||
|  | COPY --chown=app:app --from=build /usr/local/bin/ixhttpd /usr/local/bin/ixhttpd | ||||||
|  | RUN chmod +x /usr/local/bin/ixhttpd | ||||||
|  | RUN ldd /usr/local/bin/ixhttpd | ||||||
|  |  | ||||||
|  | # Copy source code for gcc | ||||||
|  | COPY --chown=app:app --from=build /opt /opt | ||||||
|  |  | ||||||
|  | # Now run in usermode | ||||||
|  | USER app | ||||||
|  | WORKDIR /home/app | ||||||
|  |  | ||||||
|  | ENTRYPOINT ["ixhttpd"] | ||||||
|  | EXPOSE 9999 | ||||||
| @@ -6,7 +6,7 @@ | |||||||
|  *  Buid with make httpd |  *  Buid with make httpd | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #include <ixwebsocket/IXHttpServer.h> | #include "IXHttpServer.h" | ||||||
| #include <sstream> | #include <sstream> | ||||||
| #include <iostream> | #include <iostream> | ||||||
|  |  | ||||||
| @@ -14,9 +14,10 @@ int main(int argc, char** argv) | |||||||
| { | { | ||||||
|     if (argc != 3) |     if (argc != 3) | ||||||
|     { |     { | ||||||
|         std::cerr << "Usage: httpd <port> <host>" << std::endl; |         std::cerr << "Usage: " << argv[0] | ||||||
|         std::cerr << " ./a.out 9090 127.0.0.1" << std::endl; |                   << " <port> <host>" << std::endl; | ||||||
|         std::cerr << " ./a.out 9090 0.0.0.0" << std::endl; |         std::cerr << " " << argv[0] << " 9090 127.0.0.1" << std::endl; | ||||||
|  |         std::cerr << " " << argv[0] << " 9090 0.0.0.0" << std::endl; | ||||||
|         return 1; |         return 1; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -6,6 +6,7 @@ | |||||||
|  |  | ||||||
| #include "IXSelectInterruptFactory.h" | #include "IXSelectInterruptFactory.h" | ||||||
|  |  | ||||||
|  | #include "IXUniquePtr.h" | ||||||
| #if defined(__linux__) || defined(__APPLE__) | #if defined(__linux__) || defined(__APPLE__) | ||||||
| #include "IXSelectInterruptPipe.h" | #include "IXSelectInterruptPipe.h" | ||||||
| #else | #else | ||||||
| @@ -17,9 +18,9 @@ namespace ix | |||||||
|     SelectInterruptPtr createSelectInterrupt() |     SelectInterruptPtr createSelectInterrupt() | ||||||
|     { |     { | ||||||
| #if defined(__linux__) || defined(__APPLE__) | #if defined(__linux__) || defined(__APPLE__) | ||||||
|         return std::make_unique<SelectInterruptPipe>(); |         return ix::make_unique<SelectInterruptPipe>(); | ||||||
| #else | #else | ||||||
|         return std::make_unique<SelectInterrupt>(); |         return ix::make_unique<SelectInterrupt>(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| } // namespace ix | } // namespace ix | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ | |||||||
| #include "IXNetSystem.h" | #include "IXNetSystem.h" | ||||||
| #include "IXSelectInterrupt.h" | #include "IXSelectInterrupt.h" | ||||||
| #include "IXSocket.h" | #include "IXSocket.h" | ||||||
|  | #include "IXUniquePtr.h" | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
| @@ -65,7 +66,7 @@ namespace ix | |||||||
|  |  | ||||||
|             int timeoutMs = 10; |             int timeoutMs = 10; | ||||||
|             bool readyToRead = false; |             bool readyToRead = false; | ||||||
|             auto selectInterrupt = std::make_unique<SelectInterrupt>(); |             auto selectInterrupt = ix::make_unique<SelectInterrupt>(); | ||||||
|             PollResultType pollResult = Socket::poll(readyToRead, timeoutMs, fd, selectInterrupt); |             PollResultType pollResult = Socket::poll(readyToRead, timeoutMs, fd, selectInterrupt); | ||||||
|  |  | ||||||
|             if (pollResult == PollResultType::Timeout) |             if (pollResult == PollResultType::Timeout) | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #include "IXSocketFactory.h" | #include "IXSocketFactory.h" | ||||||
|  | #include "IXUniquePtr.h" | ||||||
|  |  | ||||||
| #ifdef IXWEBSOCKET_USE_TLS | #ifdef IXWEBSOCKET_USE_TLS | ||||||
|  |  | ||||||
| @@ -35,17 +36,17 @@ namespace ix | |||||||
|  |  | ||||||
|         if (!tls) |         if (!tls) | ||||||
|         { |         { | ||||||
|             socket = std::make_unique<Socket>(fd); |             socket = ix::make_unique<Socket>(fd); | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
| #ifdef IXWEBSOCKET_USE_TLS | #ifdef IXWEBSOCKET_USE_TLS | ||||||
| #if defined(IXWEBSOCKET_USE_MBED_TLS) | #if defined(IXWEBSOCKET_USE_MBED_TLS) | ||||||
|             socket = std::make_unique<SocketMbedTLS>(tlsOptions, fd); |             socket = ix::make_unique<SocketMbedTLS>(tlsOptions, fd); | ||||||
| #elif defined(IXWEBSOCKET_USE_OPEN_SSL) | #elif defined(IXWEBSOCKET_USE_OPEN_SSL) | ||||||
|             socket = std::make_unique<SocketOpenSSL>(tlsOptions, fd); |             socket = ix::make_unique<SocketOpenSSL>(tlsOptions, fd); | ||||||
| #elif defined(__APPLE__) | #elif defined(__APPLE__) | ||||||
|             socket = std::make_unique<SocketAppleSSL>(tlsOptions, fd); |             socket = ix::make_unique<SocketAppleSSL>(tlsOptions, fd); | ||||||
| #endif | #endif | ||||||
| #else | #else | ||||||
|             errorMsg = "TLS support is not enabled on this platform."; |             errorMsg = "TLS support is not enabled on this platform."; | ||||||
|   | |||||||
| @@ -12,6 +12,7 @@ | |||||||
| #include "IXSocket.h" | #include "IXSocket.h" | ||||||
| #include "IXSocketConnect.h" | #include "IXSocketConnect.h" | ||||||
| #include "IXSocketFactory.h" | #include "IXSocketFactory.h" | ||||||
|  | #include "IXUniquePtr.h" | ||||||
| #include <assert.h> | #include <assert.h> | ||||||
| #include <sstream> | #include <sstream> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| @@ -258,7 +259,7 @@ namespace ix | |||||||
|             // Use poll to check whether a new connection is in progress |             // Use poll to check whether a new connection is in progress | ||||||
|             int timeoutMs = 10; |             int timeoutMs = 10; | ||||||
|             bool readyToRead = true; |             bool readyToRead = true; | ||||||
|             auto selectInterrupt = std::make_unique<SelectInterrupt>(); |             auto selectInterrupt = ix::make_unique<SelectInterrupt>(); | ||||||
|             PollResultType pollResult = |             PollResultType pollResult = | ||||||
|                 Socket::poll(readyToRead, timeoutMs, _serverFd, selectInterrupt); |                 Socket::poll(readyToRead, timeoutMs, _serverFd, selectInterrupt); | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										18
									
								
								ixwebsocket/IXUniquePtr.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								ixwebsocket/IXUniquePtr.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | /* | ||||||
|  |  *  IXUniquePtr.h | ||||||
|  |  *  Author: Benjamin Sergeant | ||||||
|  |  *  Copyright (c) 2020 Machine Zone, Inc. All rights reserved. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include <memory> | ||||||
|  |  | ||||||
|  | namespace ix | ||||||
|  | { | ||||||
|  |     template<typename T, typename... Args> | ||||||
|  |     std::unique_ptr<T> make_unique(Args&&... args) | ||||||
|  |     { | ||||||
|  |         return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										29
									
								
								makefile
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								makefile
									
									
									
									
									
								
							| @@ -170,7 +170,7 @@ autobahn_report: | |||||||
| 	cp -rvf ~/sandbox/reports/clients/* ../bsergean.github.io/IXWebSocket/autobahn/ | 	cp -rvf ~/sandbox/reports/clients/* ../bsergean.github.io/IXWebSocket/autobahn/ | ||||||
|  |  | ||||||
| httpd: | httpd: | ||||||
| 	clang++ --std=c++14 --stdlib=libc++ httpd.cpp \ | 	clang++ --std=c++11 --stdlib=libc++ -Iixwebsocket httpd.cpp \ | ||||||
| 		ixwebsocket/IXSelectInterruptFactory.cpp \ | 		ixwebsocket/IXSelectInterruptFactory.cpp \ | ||||||
| 		ixwebsocket/IXCancellationRequest.cpp \ | 		ixwebsocket/IXCancellationRequest.cpp \ | ||||||
| 		ixwebsocket/IXSocketTLSOptions.cpp \ | 		ixwebsocket/IXSocketTLSOptions.cpp \ | ||||||
| @@ -189,7 +189,32 @@ httpd: | |||||||
| 		ixwebsocket/IXConnectionState.cpp \ | 		ixwebsocket/IXConnectionState.cpp \ | ||||||
| 		ixwebsocket/IXUrlParser.cpp \ | 		ixwebsocket/IXUrlParser.cpp \ | ||||||
| 		ixwebsocket/IXSelectInterrupt.cpp \ | 		ixwebsocket/IXSelectInterrupt.cpp \ | ||||||
| 		ixwebsocket/apple/IXSetThreadName_apple.cpp -lz | 		ixwebsocket/apple/IXSetThreadName_apple.cpp \ | ||||||
|  | 		-lz | ||||||
|  |  | ||||||
|  | httpd_linux: | ||||||
|  | 	g++ --std=c++11 -o ixhttpd httpd.cpp -Iixwebsocket \ | ||||||
|  | 		ixwebsocket/IXSelectInterruptFactory.cpp \ | ||||||
|  | 		ixwebsocket/IXCancellationRequest.cpp \ | ||||||
|  | 		ixwebsocket/IXSocketTLSOptions.cpp \ | ||||||
|  | 		ixwebsocket/IXUserAgent.cpp \ | ||||||
|  | 		ixwebsocket/IXDNSLookup.cpp \ | ||||||
|  | 		ixwebsocket/IXBench.cpp \ | ||||||
|  | 		ixwebsocket/IXWebSocketHttpHeaders.cpp \ | ||||||
|  | 		ixwebsocket/IXSelectInterruptPipe.cpp \ | ||||||
|  | 		ixwebsocket/IXHttp.cpp \ | ||||||
|  | 		ixwebsocket/IXSocketConnect.cpp \ | ||||||
|  | 		ixwebsocket/IXSocket.cpp \ | ||||||
|  | 		ixwebsocket/IXSocketServer.cpp \ | ||||||
|  | 		ixwebsocket/IXNetSystem.cpp \ | ||||||
|  | 		ixwebsocket/IXHttpServer.cpp \ | ||||||
|  | 		ixwebsocket/IXSocketFactory.cpp \ | ||||||
|  | 		ixwebsocket/IXConnectionState.cpp \ | ||||||
|  | 		ixwebsocket/IXUrlParser.cpp \ | ||||||
|  | 		ixwebsocket/IXSelectInterrupt.cpp \ | ||||||
|  | 		ixwebsocket/linux/IXSetThreadName_linux.cpp \ | ||||||
|  | 		-lz -lpthread | ||||||
|  | 	cp -f ixhttpd /usr/local/bin | ||||||
|  |  | ||||||
| # For the fork that is configured with appveyor | # For the fork that is configured with appveyor | ||||||
| rebase_upstream: | rebase_upstream: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user