(ws) trim ws dependencies no more ixcrypto and ixcore deps
This commit is contained in:
parent
b89621fa78
commit
fabc07d598
@ -48,6 +48,7 @@ set( IXWEBSOCKET_SOURCES
|
|||||||
ixwebsocket/IXStrCaseCompare.cpp
|
ixwebsocket/IXStrCaseCompare.cpp
|
||||||
ixwebsocket/IXUdpSocket.cpp
|
ixwebsocket/IXUdpSocket.cpp
|
||||||
ixwebsocket/IXUrlParser.cpp
|
ixwebsocket/IXUrlParser.cpp
|
||||||
|
ixwebsocket/IXUUid.cpp
|
||||||
ixwebsocket/IXUserAgent.cpp
|
ixwebsocket/IXUserAgent.cpp
|
||||||
ixwebsocket/IXWebSocket.cpp
|
ixwebsocket/IXWebSocket.cpp
|
||||||
ixwebsocket/IXWebSocketCloseConstants.cpp
|
ixwebsocket/IXWebSocketCloseConstants.cpp
|
||||||
@ -86,6 +87,7 @@ set( IXWEBSOCKET_HEADERS
|
|||||||
ixwebsocket/IXStrCaseCompare.h
|
ixwebsocket/IXStrCaseCompare.h
|
||||||
ixwebsocket/IXUdpSocket.h
|
ixwebsocket/IXUdpSocket.h
|
||||||
ixwebsocket/IXUrlParser.h
|
ixwebsocket/IXUrlParser.h
|
||||||
|
ixwebsocket/IXUUid.h
|
||||||
ixwebsocket/IXUtf8Validator.h
|
ixwebsocket/IXUtf8Validator.h
|
||||||
ixwebsocket/IXUserAgent.h
|
ixwebsocket/IXUserAgent.h
|
||||||
ixwebsocket/IXWebSocket.h
|
ixwebsocket/IXWebSocket.h
|
||||||
@ -256,7 +258,6 @@ install(EXPORT ixwebsocket
|
|||||||
|
|
||||||
if (USE_WS OR USE_TEST)
|
if (USE_WS OR USE_TEST)
|
||||||
add_subdirectory(ixcore)
|
add_subdirectory(ixcore)
|
||||||
add_subdirectory(ixcrypto)
|
|
||||||
|
|
||||||
include(FetchContent)
|
include(FetchContent)
|
||||||
FetchContent_Declare(spdlog
|
FetchContent_Declare(spdlog
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
All changes to this project will be documented in this file.
|
All changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## [11.0.8] - 2020-12-25
|
||||||
|
|
||||||
|
(ws) trim ws dependencies no more ixcrypto and ixcore deps
|
||||||
|
|
||||||
## [11.0.7] - 2020-12-25
|
## [11.0.7] - 2020-12-25
|
||||||
|
|
||||||
(ws) trim ws dependencies, only depends on ixcrypto and ixcore
|
(ws) trim ws dependencies, only depends on ixcrypto and ixcore
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
#
|
|
||||||
# Author: Benjamin Sergeant
|
|
||||||
# Copyright (c) 2019 Machine Zone, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
|
|
||||||
set (IXCORE_SOURCES
|
|
||||||
ixcore/utils/IXCoreLogger.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
set (IXCORE_HEADERS
|
|
||||||
ixcore/utils/IXCoreLogger.h
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(ixcore STATIC
|
|
||||||
${IXCORE_SOURCES}
|
|
||||||
${IXCORE_HEADERS}
|
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories( ixcore PUBLIC . )
|
|
@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
* IXCoreLogger.cpp
|
|
||||||
* Author: Thomas Wells, Benjamin Sergeant
|
|
||||||
* Copyright (c) 2019-2020 Machine Zone, Inc. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ixcore/utils/IXCoreLogger.h"
|
|
||||||
|
|
||||||
namespace ix
|
|
||||||
{
|
|
||||||
// Default do a no-op logger
|
|
||||||
CoreLogger::LogFunc CoreLogger::_currentLogger = [](const char*, LogLevel) {};
|
|
||||||
|
|
||||||
void CoreLogger::log(const char* msg, LogLevel level)
|
|
||||||
{
|
|
||||||
_currentLogger(msg, level);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CoreLogger::debug(const std::string& msg)
|
|
||||||
{
|
|
||||||
_currentLogger(msg.c_str(), LogLevel::Debug);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CoreLogger::info(const std::string& msg)
|
|
||||||
{
|
|
||||||
_currentLogger(msg.c_str(), LogLevel::Info);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CoreLogger::warn(const std::string& msg)
|
|
||||||
{
|
|
||||||
_currentLogger(msg.c_str(), LogLevel::Warning);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CoreLogger::error(const std::string& msg)
|
|
||||||
{
|
|
||||||
_currentLogger(msg.c_str(), LogLevel::Error);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CoreLogger::critical(const std::string& msg)
|
|
||||||
{
|
|
||||||
_currentLogger(msg.c_str(), LogLevel::Critical);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace ix
|
|
@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
* IXCoreLogger.h
|
|
||||||
* Author: Thomas Wells, Benjamin Sergeant
|
|
||||||
* Copyright (c) 2019-2020 Machine Zone, Inc. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#include <functional>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace ix
|
|
||||||
{
|
|
||||||
enum class LogLevel
|
|
||||||
{
|
|
||||||
Debug = 0,
|
|
||||||
Info = 1,
|
|
||||||
Warning = 2,
|
|
||||||
Error = 3,
|
|
||||||
Critical = 4
|
|
||||||
};
|
|
||||||
|
|
||||||
class CoreLogger
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
using LogFunc = std::function<void(const char*, LogLevel level)>;
|
|
||||||
|
|
||||||
static void log(const char* msg, LogLevel level = LogLevel::Debug);
|
|
||||||
|
|
||||||
static void debug(const std::string& msg);
|
|
||||||
static void info(const std::string& msg);
|
|
||||||
static void warn(const std::string& msg);
|
|
||||||
static void error(const std::string& msg);
|
|
||||||
static void critical(const std::string& msg);
|
|
||||||
|
|
||||||
static void setLogFunction(LogFunc& func)
|
|
||||||
{
|
|
||||||
_currentLogger = func;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
static LogFunc _currentLogger;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace ix
|
|
@ -1,47 +0,0 @@
|
|||||||
#
|
|
||||||
# Author: Benjamin Sergeant
|
|
||||||
# Copyright (c) 2019 Machine Zone, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../CMake;${CMAKE_MODULE_PATH}")
|
|
||||||
|
|
||||||
set (IXCRYPTO_SOURCES
|
|
||||||
ixcrypto/IXHMac.cpp
|
|
||||||
ixcrypto/IXBase64.cpp
|
|
||||||
ixcrypto/IXUuid.cpp
|
|
||||||
ixcrypto/IXHash.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
set (IXCRYPTO_HEADERS
|
|
||||||
ixcrypto/IXHMac.h
|
|
||||||
ixcrypto/IXBase64.h
|
|
||||||
ixcrypto/IXUuid.h
|
|
||||||
ixcrypto/IXHash.h
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(ixcrypto STATIC
|
|
||||||
${IXCRYPTO_SOURCES}
|
|
||||||
${IXCRYPTO_HEADERS}
|
|
||||||
)
|
|
||||||
|
|
||||||
set(IXCRYPTO_INCLUDE_DIRS
|
|
||||||
.
|
|
||||||
../ixcore)
|
|
||||||
|
|
||||||
target_include_directories( ixcrypto PUBLIC ${IXCRYPTO_INCLUDE_DIRS} )
|
|
||||||
|
|
||||||
# hmac computation needs a crypto library
|
|
||||||
|
|
||||||
target_compile_definitions(ixcrypto PUBLIC IXCRYPTO_USE_TLS)
|
|
||||||
if (USE_MBED_TLS)
|
|
||||||
find_package(MbedTLS REQUIRED)
|
|
||||||
target_include_directories(ixcrypto PUBLIC ${MBEDTLS_INCLUDE_DIRS})
|
|
||||||
target_link_libraries(ixcrypto ${MBEDTLS_LIBRARIES})
|
|
||||||
target_compile_definitions(ixcrypto PUBLIC IXCRYPTO_USE_MBED_TLS)
|
|
||||||
elseif (USE_OPEN_SSL)
|
|
||||||
find_package(OpenSSL REQUIRED)
|
|
||||||
add_definitions(${OPENSSL_DEFINITIONS})
|
|
||||||
message(STATUS "OpenSSL: " ${OPENSSL_VERSION})
|
|
||||||
include_directories(${OPENSSL_INCLUDE_DIR})
|
|
||||||
target_link_libraries(ixcrypto ${OPENSSL_LIBRARIES})
|
|
||||||
target_compile_definitions(ixcrypto PUBLIC IXCRYPTO_USE_OPEN_SSL)
|
|
||||||
endif()
|
|
@ -1,142 +0,0 @@
|
|||||||
/*
|
|
||||||
base64.cpp and base64.h
|
|
||||||
|
|
||||||
Copyright (C) 2004-2008 René Nyffenegger
|
|
||||||
|
|
||||||
This source code is provided 'as-is', without any express or implied
|
|
||||||
warranty. In no event will the author be held liable for any damages
|
|
||||||
arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
|
||||||
including commercial applications, and to alter it and redistribute it
|
|
||||||
freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this source code must not be misrepresented; you must not
|
|
||||||
claim that you wrote the original source code. If you use this source code
|
|
||||||
in a product, an acknowledgment in the product documentation would be
|
|
||||||
appreciated but is not required.
|
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and must not be
|
|
||||||
misrepresented as being the original source code.
|
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
|
||||||
|
|
||||||
René Nyffenegger rene.nyffenegger@adp-gmbh.ch
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "IXBase64.h"
|
|
||||||
|
|
||||||
namespace ix
|
|
||||||
{
|
|
||||||
static const std::string base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
||||||
"abcdefghijklmnopqrstuvwxyz"
|
|
||||||
"0123456789+/";
|
|
||||||
|
|
||||||
std::string base64_encode(const std::string& data, size_t len)
|
|
||||||
{
|
|
||||||
const char* bytes_to_encode = data.c_str();
|
|
||||||
return base64_encode(bytes_to_encode, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string base64_encode(const char* bytes_to_encode, size_t len)
|
|
||||||
{
|
|
||||||
std::string ret;
|
|
||||||
ret.reserve(((len + 2) / 3) * 4);
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
int j = 0;
|
|
||||||
unsigned char char_array_3[3];
|
|
||||||
unsigned char char_array_4[4];
|
|
||||||
|
|
||||||
while (len--)
|
|
||||||
{
|
|
||||||
char_array_3[i++] = *(bytes_to_encode++);
|
|
||||||
if (i == 3)
|
|
||||||
{
|
|
||||||
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
|
|
||||||
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
|
|
||||||
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
|
|
||||||
char_array_4[3] = char_array_3[2] & 0x3f;
|
|
||||||
|
|
||||||
for (i = 0; (i < 4); i++)
|
|
||||||
ret += base64_chars[char_array_4[i]];
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i)
|
|
||||||
{
|
|
||||||
for (j = i; j < 3; j++)
|
|
||||||
char_array_3[j] = '\0';
|
|
||||||
|
|
||||||
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
|
|
||||||
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
|
|
||||||
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
|
|
||||||
char_array_4[3] = char_array_3[2] & 0x3f;
|
|
||||||
|
|
||||||
for (j = 0; (j < i + 1); j++)
|
|
||||||
ret += base64_chars[char_array_4[j]];
|
|
||||||
|
|
||||||
while ((i++ < 3))
|
|
||||||
ret += '=';
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool is_base64(unsigned char c)
|
|
||||||
{
|
|
||||||
return (isalnum(c) || (c == '+') || (c == '/'));
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string base64_decode(const std::string& encoded_string)
|
|
||||||
{
|
|
||||||
int in_len = (int) encoded_string.size();
|
|
||||||
int i = 0;
|
|
||||||
int j = 0;
|
|
||||||
int in_ = 0;
|
|
||||||
unsigned char char_array_4[4], char_array_3[3];
|
|
||||||
std::string ret;
|
|
||||||
ret.reserve(((in_len + 3) / 4) * 3);
|
|
||||||
|
|
||||||
while (in_len-- && (encoded_string[in_] != '=') && is_base64(encoded_string[in_]))
|
|
||||||
{
|
|
||||||
char_array_4[i++] = encoded_string[in_];
|
|
||||||
in_++;
|
|
||||||
if (i == 4)
|
|
||||||
{
|
|
||||||
for (i = 0; i < 4; i++)
|
|
||||||
char_array_4[i] = base64_chars.find(char_array_4[i]);
|
|
||||||
|
|
||||||
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
|
|
||||||
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
|
|
||||||
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
|
|
||||||
|
|
||||||
for (i = 0; (i < 3); i++)
|
|
||||||
ret += char_array_3[i];
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i)
|
|
||||||
{
|
|
||||||
for (j = i; j < 4; j++)
|
|
||||||
char_array_4[j] = 0;
|
|
||||||
|
|
||||||
for (j = 0; j < 4; j++)
|
|
||||||
char_array_4[j] = base64_chars.find(char_array_4[j]);
|
|
||||||
|
|
||||||
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
|
|
||||||
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
|
|
||||||
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
|
|
||||||
|
|
||||||
for (j = 0; (j < i - 1); j++)
|
|
||||||
ret += char_array_3[j];
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
} // namespace ix
|
|
@ -1,16 +0,0 @@
|
|||||||
/*
|
|
||||||
* base64.h
|
|
||||||
* Author: Benjamin Sergeant
|
|
||||||
* Copyright (c) 2018 Machine Zone. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace ix
|
|
||||||
{
|
|
||||||
std::string base64_encode(const std::string& data, size_t len);
|
|
||||||
std::string base64_encode(const char* data, size_t len);
|
|
||||||
std::string base64_decode(const std::string& encoded_string);
|
|
||||||
} // namespace ix
|
|
@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
* IXHMac.h
|
|
||||||
* Author: Benjamin Sergeant
|
|
||||||
* Copyright (c) 2018 Machine Zone. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "IXHMac.h"
|
|
||||||
|
|
||||||
#include "IXBase64.h"
|
|
||||||
|
|
||||||
#if defined(IXCRYPTO_USE_MBED_TLS)
|
|
||||||
#include <mbedtls/md.h>
|
|
||||||
#elif defined(__APPLE__)
|
|
||||||
#include <CommonCrypto/CommonHMAC.h>
|
|
||||||
#elif defined(IXCRYPTO_USE_OPEN_SSL)
|
|
||||||
#include <openssl/hmac.h>
|
|
||||||
#else
|
|
||||||
#include <assert.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace ix
|
|
||||||
{
|
|
||||||
std::string hmac(const std::string& data, const std::string& key)
|
|
||||||
{
|
|
||||||
constexpr size_t hashSize = 16;
|
|
||||||
unsigned char hash[hashSize];
|
|
||||||
|
|
||||||
#if defined(IXCRYPTO_USE_MBED_TLS)
|
|
||||||
mbedtls_md_hmac(mbedtls_md_info_from_type(MBEDTLS_MD_MD5),
|
|
||||||
(unsigned char*) key.c_str(),
|
|
||||||
key.size(),
|
|
||||||
(unsigned char*) data.c_str(),
|
|
||||||
data.size(),
|
|
||||||
(unsigned char*) &hash);
|
|
||||||
#elif defined(__APPLE__)
|
|
||||||
CCHmac(kCCHmacAlgMD5, key.c_str(), key.size(), data.c_str(), data.size(), &hash);
|
|
||||||
#elif defined(IXCRYPTO_USE_OPEN_SSL)
|
|
||||||
HMAC(EVP_md5(),
|
|
||||||
key.c_str(),
|
|
||||||
(int) key.size(),
|
|
||||||
(unsigned char*) data.c_str(),
|
|
||||||
(int) data.size(),
|
|
||||||
(unsigned char*) hash,
|
|
||||||
nullptr);
|
|
||||||
#else
|
|
||||||
assert(false && "hmac not implemented on this platform");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
std::string hashString(reinterpret_cast<char*>(hash), hashSize);
|
|
||||||
|
|
||||||
return base64_encode(hashString, (uint32_t) hashString.size());
|
|
||||||
}
|
|
||||||
} // namespace ix
|
|
@ -1,14 +0,0 @@
|
|||||||
/*
|
|
||||||
* IXHMac.h
|
|
||||||
* Author: Benjamin Sergeant
|
|
||||||
* Copyright (c) 2018 Machine Zone. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace ix
|
|
||||||
{
|
|
||||||
std::string hmac(const std::string& data, const std::string& key);
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
/*
|
|
||||||
* IXHash.h
|
|
||||||
* Author: Benjamin Sergeant
|
|
||||||
* Copyright (c) 2018 Machine Zone. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "IXHash.h"
|
|
||||||
|
|
||||||
namespace ix
|
|
||||||
{
|
|
||||||
uint64_t djb2Hash(const std::vector<uint8_t>& data)
|
|
||||||
{
|
|
||||||
uint64_t hashAddress = 5381;
|
|
||||||
|
|
||||||
for (auto&& c : data)
|
|
||||||
{
|
|
||||||
hashAddress = ((hashAddress << 5) + hashAddress) + c;
|
|
||||||
}
|
|
||||||
|
|
||||||
return hashAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t djb2HashStr(const std::string& data)
|
|
||||||
{
|
|
||||||
uint64_t hashAddress = 5381;
|
|
||||||
|
|
||||||
for (size_t i = 0; i < data.size(); ++i)
|
|
||||||
{
|
|
||||||
hashAddress = ((hashAddress << 5) + hashAddress) + data[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
return hashAddress;
|
|
||||||
}
|
|
||||||
} // namespace ix
|
|
@ -1,17 +0,0 @@
|
|||||||
/*
|
|
||||||
* IXHash.h
|
|
||||||
* Author: Benjamin Sergeant
|
|
||||||
* Copyright (c) 2018 Machine Zone. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <cstdint>
|
|
||||||
#include <vector>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace ix
|
|
||||||
{
|
|
||||||
uint64_t djb2Hash(const std::vector<uint8_t>& data);
|
|
||||||
uint64_t djb2HashStr(const std::string& data);
|
|
||||||
}
|
|
@ -6,4 +6,4 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define IX_WEBSOCKET_VERSION "11.0.7"
|
#define IX_WEBSOCKET_VERSION "11.0.8"
|
||||||
|
22
makefile.dev
22
makefile.dev
@ -28,25 +28,25 @@ brew:
|
|||||||
# server side ?) and I can't work-around it easily, so we're using mbedtls on
|
# server side ?) and I can't work-around it easily, so we're using mbedtls on
|
||||||
# Linux for the SSL backend, which works great.
|
# Linux for the SSL backend, which works great.
|
||||||
ws_mbedtls_install:
|
ws_mbedtls_install:
|
||||||
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=MinSizeRel -DUSE_ZLIB=OFF -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_WS=1 -DUSE_MBED_TLS=1 .. ; ninja install)
|
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=MinSizeRel -DUSE_ZLIB=OFF -DUSE_TLS=1 -DUSE_WS=1 -DUSE_MBED_TLS=1 .. ; ninja install)
|
||||||
|
|
||||||
ws:
|
ws:
|
||||||
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_WS=1 .. && ninja install)
|
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 .. && ninja install)
|
||||||
|
|
||||||
ws_unity:
|
ws_unity:
|
||||||
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_UNITY_BUILD=ON -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_WS=1 .. && ninja install)
|
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_UNITY_BUILD=ON -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 .. && ninja install)
|
||||||
|
|
||||||
ws_install:
|
ws_install:
|
||||||
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=MinSizeRel -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_WS=1 .. -DUSE_TEST=0 && ninja install)
|
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=MinSizeRel -DUSE_TLS=1 -DUSE_WS=1 .. -DUSE_TEST=0 && ninja install)
|
||||||
|
|
||||||
ws_install_release:
|
ws_install_release:
|
||||||
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=MinSizeRel -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_WS=1 .. -DUSE_TEST=0 && ninja install)
|
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=MinSizeRel -DUSE_TLS=1 -DUSE_WS=1 .. -DUSE_TEST=0 && ninja install)
|
||||||
|
|
||||||
ws_openssl_install:
|
ws_openssl_install:
|
||||||
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 -DUSE_OPEN_SSL=1 .. ; ninja install)
|
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 -DUSE_OPEN_SSL=1 .. ; ninja install)
|
||||||
|
|
||||||
ws_mbedtls:
|
ws_mbedtls:
|
||||||
mkdir -p build && (cd build ; cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_WS=1 -DUSE_MBED_TLS=1 .. ; make -j 4)
|
mkdir -p build && (cd build ; cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_WS=1 -DUSE_MBED_TLS=1 .. ; make -j 4)
|
||||||
|
|
||||||
ws_no_ssl:
|
ws_no_ssl:
|
||||||
mkdir -p build && (cd build ; cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_WS=1 .. ; make -j 4)
|
mkdir -p build && (cd build ; cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_WS=1 .. ; make -j 4)
|
||||||
@ -111,27 +111,27 @@ test_server:
|
|||||||
(cd test && npm i ws && node broadcast-server.js)
|
(cd test && npm i ws && node broadcast-server.js)
|
||||||
|
|
||||||
test:
|
test:
|
||||||
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_TEST=1 ..)
|
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_TEST=1 ..)
|
||||||
(cd build ; ninja)
|
(cd build ; ninja)
|
||||||
(cd build ; ninja test)
|
(cd build ; ninja test)
|
||||||
|
|
||||||
test_asan:
|
test_asan:
|
||||||
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=address -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=address -fno-omit-frame-pointer")
|
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=address -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=address -fno-omit-frame-pointer")
|
||||||
(cd build ; ninja)
|
(cd build ; ninja)
|
||||||
(cd build ; ctest -V .)
|
(cd build ; ctest -V .)
|
||||||
|
|
||||||
test_tsan_mbedtls:
|
test_tsan_mbedtls:
|
||||||
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_MBED_TLS=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=thread -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=thread -fno-omit-frame-pointer")
|
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_MBED_TLS=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=thread -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=thread -fno-omit-frame-pointer")
|
||||||
(cd build ; ninja)
|
(cd build ; ninja)
|
||||||
(cd build ; ninja test)
|
(cd build ; ninja test)
|
||||||
|
|
||||||
test_tsan_openssl:
|
test_tsan_openssl:
|
||||||
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_OPENS_SSL=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=thread -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=thread -fno-omit-frame-pointer")
|
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_OPENS_SSL=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=thread -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=thread -fno-omit-frame-pointer")
|
||||||
(cd build ; ninja)
|
(cd build ; ninja)
|
||||||
(cd build ; ninja test)
|
(cd build ; ninja test)
|
||||||
|
|
||||||
test_tsan_sectransport:
|
test_tsan_sectransport:
|
||||||
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_PYTHON=1 -DUSE_TLS=1 -DUSE_OPENS_SSL=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=thread -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=thread -fno-omit-frame-pointer")
|
mkdir -p build && (cd build ; cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DUSE_TLS=1 -DUSE_OPENS_SSL=1 -DUSE_TEST=1 .. -DCMAKE_C_FLAGS="-fsanitize=thread -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-fsanitize=thread -fno-omit-frame-pointer")
|
||||||
(cd build ; ninja)
|
(cd build ; ninja)
|
||||||
(cd build ; ninja test)
|
(cd build ; ninja test)
|
||||||
|
|
||||||
|
@ -58,7 +58,6 @@ target_include_directories(ixwebsocket_test PRIVATE
|
|||||||
../third_party
|
../third_party
|
||||||
)
|
)
|
||||||
target_link_libraries(ixwebsocket_test ixwebsocket)
|
target_link_libraries(ixwebsocket_test ixwebsocket)
|
||||||
target_link_libraries(ixwebsocket_test ixcrypto)
|
|
||||||
target_link_libraries(ixwebsocket_test spdlog)
|
target_link_libraries(ixwebsocket_test spdlog)
|
||||||
|
|
||||||
foreach(TEST_TARGET_NAME ${TEST_TARGET_NAMES})
|
foreach(TEST_TARGET_NAME ${TEST_TARGET_NAMES})
|
||||||
@ -81,7 +80,6 @@ foreach(TEST_TARGET_NAME ${TEST_TARGET_NAMES})
|
|||||||
# library with the most dependencies come first
|
# library with the most dependencies come first
|
||||||
target_link_libraries(${TEST_TARGET_NAME} ixwebsocket_test)
|
target_link_libraries(${TEST_TARGET_NAME} ixwebsocket_test)
|
||||||
target_link_libraries(${TEST_TARGET_NAME} ixwebsocket)
|
target_link_libraries(${TEST_TARGET_NAME} ixwebsocket)
|
||||||
target_link_libraries(${TEST_TARGET_NAME} ixcrypto)
|
|
||||||
target_link_libraries(${TEST_TARGET_NAME} ixcore)
|
target_link_libraries(${TEST_TARGET_NAME} ixcore)
|
||||||
|
|
||||||
target_link_libraries(${TEST_TARGET_NAME} spdlog)
|
target_link_libraries(${TEST_TARGET_NAME} spdlog)
|
||||||
|
@ -10,8 +10,8 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <ixcrypto/IXUuid.h>
|
|
||||||
#include <ixwebsocket/IXNetSystem.h>
|
#include <ixwebsocket/IXNetSystem.h>
|
||||||
|
#include <ixwebsocket/IXUuid.h>
|
||||||
#include <ixwebsocket/IXWebSocket.h>
|
#include <ixwebsocket/IXWebSocket.h>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <random>
|
#include <random>
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
#define CATCH_CONFIG_RUNNER
|
#define CATCH_CONFIG_RUNNER
|
||||||
#include "catch.hpp"
|
#include "catch.hpp"
|
||||||
#include <ixcore/utils/IXCoreLogger.h>
|
|
||||||
#include <ixwebsocket/IXNetSystem.h>
|
#include <ixwebsocket/IXNetSystem.h>
|
||||||
#include <spdlog/spdlog.h>
|
#include <spdlog/spdlog.h>
|
||||||
|
|
||||||
@ -21,42 +20,6 @@ int main(int argc, char* argv[])
|
|||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
signal(SIGPIPE, SIG_IGN);
|
signal(SIGPIPE, SIG_IGN);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ix::CoreLogger::LogFunc logFunc = [](const char* msg, ix::LogLevel level) {
|
|
||||||
switch (level)
|
|
||||||
{
|
|
||||||
case ix::LogLevel::Debug:
|
|
||||||
{
|
|
||||||
spdlog::debug(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ix::LogLevel::Info:
|
|
||||||
{
|
|
||||||
spdlog::info(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ix::LogLevel::Warning:
|
|
||||||
{
|
|
||||||
spdlog::warn(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ix::LogLevel::Error:
|
|
||||||
{
|
|
||||||
spdlog::error(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ix::LogLevel::Critical:
|
|
||||||
{
|
|
||||||
spdlog::critical(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
ix::CoreLogger::setLogFunction(logFunc);
|
|
||||||
spdlog::set_level(spdlog::level::debug);
|
spdlog::set_level(spdlog::level::debug);
|
||||||
|
|
||||||
int result = Catch::Session().run(argc, argv);
|
int result = Catch::Session().run(argc, argv);
|
||||||
|
@ -30,7 +30,6 @@ add_executable(ws
|
|||||||
|
|
||||||
# library with the most dependencies come first
|
# library with the most dependencies come first
|
||||||
target_link_libraries(ws ixwebsocket)
|
target_link_libraries(ws ixwebsocket)
|
||||||
target_link_libraries(ws ixcrypto)
|
|
||||||
target_link_libraries(ws ixcore)
|
target_link_libraries(ws ixcore)
|
||||||
|
|
||||||
target_link_libraries(ws spdlog)
|
target_link_libraries(ws spdlog)
|
||||||
|
@ -1,49 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# Author: Benjamin Sergeant
|
|
||||||
# Copyright (c) 2017-2018 Machine Zone, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
|
|
||||||
# 'manual' way of building. I cannot get CMake to work to build in a container.
|
|
||||||
|
|
||||||
g++ --std=c++14 \
|
|
||||||
-DIXWEBSOCKET_USE_TLS \
|
|
||||||
-g \
|
|
||||||
../ixwebsocket/IXEventFd.cpp \
|
|
||||||
../ixwebsocket/IXSocket.cpp \
|
|
||||||
../ixwebsocket/IXSocketServer.cpp \
|
|
||||||
../ixwebsocket/IXSocketConnect.cpp \
|
|
||||||
../ixwebsocket/IXSocketFactory.cpp \
|
|
||||||
../ixwebsocket/IXDNSLookup.cpp \
|
|
||||||
../ixwebsocket/IXCancellationRequest.cpp \
|
|
||||||
../ixwebsocket/IXWebSocket.cpp \
|
|
||||||
../ixwebsocket/IXWebSocketServer.cpp \
|
|
||||||
../ixwebsocket/IXWebSocketTransport.cpp \
|
|
||||||
../ixwebsocket/IXWebSocketHandshake.cpp \
|
|
||||||
../ixwebsocket/IXWebSocketPerMessageDeflate.cpp \
|
|
||||||
../ixwebsocket/IXWebSocketPerMessageDeflateCodec.cpp \
|
|
||||||
../ixwebsocket/IXWebSocketPerMessageDeflateOptions.cpp \
|
|
||||||
../ixwebsocket/IXWebSocketHttpHeaders.cpp \
|
|
||||||
../ixwebsocket/IXHttpClient.cpp \
|
|
||||||
../ixwebsocket/IXUrlParser.cpp \
|
|
||||||
../ixwebsocket/IXSocketOpenSSL.cpp \
|
|
||||||
../ixwebsocket/linux/IXSetThreadName_linux.cpp \
|
|
||||||
../third_party/msgpack11/msgpack11.cpp \
|
|
||||||
ixcrypto/IXBase64.cpp \
|
|
||||||
ixcrypto/IXHash.cpp \
|
|
||||||
ixcrypto/IXUuid.cpp \
|
|
||||||
ws_http_client.cpp \
|
|
||||||
ws_ping_pong.cpp \
|
|
||||||
ws_broadcast_server.cpp \
|
|
||||||
ws_echo_server.cpp \
|
|
||||||
ws_chat.cpp \
|
|
||||||
ws_connect.cpp \
|
|
||||||
ws_transfer.cpp \
|
|
||||||
ws_send.cpp \
|
|
||||||
ws_receive.cpp \
|
|
||||||
ws.cpp \
|
|
||||||
-I . \
|
|
||||||
-I .. \
|
|
||||||
-I ../third_party \
|
|
||||||
-o ws \
|
|
||||||
-lcrypto -lssl -lz -lpthread
|
|
76
ws/ws.cpp
76
ws/ws.cpp
@ -15,10 +15,6 @@
|
|||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <ixcore/utils/IXCoreLogger.h>
|
|
||||||
#include <ixcrypto/IXBase64.h>
|
|
||||||
#include <ixcrypto/IXHash.h>
|
|
||||||
#include <ixcrypto/IXUuid.h>
|
|
||||||
#include <ixwebsocket/IXBench.h>
|
#include <ixwebsocket/IXBench.h>
|
||||||
#include <ixwebsocket/IXDNSLookup.h>
|
#include <ixwebsocket/IXDNSLookup.h>
|
||||||
#include <ixwebsocket/IXGzipCodec.h>
|
#include <ixwebsocket/IXGzipCodec.h>
|
||||||
@ -29,6 +25,7 @@
|
|||||||
#include <ixwebsocket/IXSocket.h>
|
#include <ixwebsocket/IXSocket.h>
|
||||||
#include <ixwebsocket/IXSocketTLSOptions.h>
|
#include <ixwebsocket/IXSocketTLSOptions.h>
|
||||||
#include <ixwebsocket/IXUserAgent.h>
|
#include <ixwebsocket/IXUserAgent.h>
|
||||||
|
#include <ixwebsocket/IXUuid.h>
|
||||||
#include <ixwebsocket/IXWebSocket.h>
|
#include <ixwebsocket/IXWebSocket.h>
|
||||||
#include <ixwebsocket/IXWebSocketHttpHeaders.h>
|
#include <ixwebsocket/IXWebSocketHttpHeaders.h>
|
||||||
#include <ixwebsocket/IXWebSocketProxyServer.h>
|
#include <ixwebsocket/IXWebSocketProxyServer.h>
|
||||||
@ -146,6 +143,30 @@ namespace
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t djb2Hash(const std::vector<uint8_t>& data)
|
||||||
|
{
|
||||||
|
uint64_t hashAddress = 5381;
|
||||||
|
|
||||||
|
for (auto&& c : data)
|
||||||
|
{
|
||||||
|
hashAddress = ((hashAddress << 5) + hashAddress) + c;
|
||||||
|
}
|
||||||
|
|
||||||
|
return hashAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t djb2HashStr(const std::string& data)
|
||||||
|
{
|
||||||
|
uint64_t hashAddress = 5381;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < data.size(); ++i)
|
||||||
|
{
|
||||||
|
hashAddress = ((hashAddress << 5) + hashAddress) + data[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return hashAddress;
|
||||||
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
namespace ix
|
namespace ix
|
||||||
@ -988,7 +1009,7 @@ namespace ix
|
|||||||
spdlog::info("gzip input: {} size {} cksum {}",
|
spdlog::info("gzip input: {} size {} cksum {}",
|
||||||
filename,
|
filename,
|
||||||
res.second.size(),
|
res.second.size(),
|
||||||
ix::djb2HashStr(res.second));
|
djb2HashStr(res.second));
|
||||||
|
|
||||||
std::string compressedBytes;
|
std::string compressedBytes;
|
||||||
|
|
||||||
@ -1022,7 +1043,7 @@ namespace ix
|
|||||||
spdlog::info("gzip output: {} size {} cksum {}",
|
spdlog::info("gzip output: {} size {} cksum {}",
|
||||||
outputFilename,
|
outputFilename,
|
||||||
compressedBytes.size(),
|
compressedBytes.size(),
|
||||||
ix::djb2HashStr(compressedBytes));
|
djb2HashStr(compressedBytes));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1042,7 +1063,7 @@ namespace ix
|
|||||||
spdlog::info("gunzip input: {} size {} cksum {}",
|
spdlog::info("gunzip input: {} size {} cksum {}",
|
||||||
filename,
|
filename,
|
||||||
res.second.size(),
|
res.second.size(),
|
||||||
ix::djb2HashStr(res.second));
|
djb2HashStr(res.second));
|
||||||
|
|
||||||
std::string decompressedBytes;
|
std::string decompressedBytes;
|
||||||
|
|
||||||
@ -1070,7 +1091,7 @@ namespace ix
|
|||||||
spdlog::info("gunzip output: {} size {} cksum {}",
|
spdlog::info("gunzip output: {} size {} cksum {}",
|
||||||
outputFilename,
|
outputFilename,
|
||||||
decompressedBytes.size(),
|
decompressedBytes.size(),
|
||||||
ix::djb2HashStr(decompressedBytes));
|
djb2HashStr(decompressedBytes));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1175,7 +1196,7 @@ namespace ix
|
|||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "messages received per second: " << receivedCountPerSecs;
|
ss << "messages received per second: " << receivedCountPerSecs;
|
||||||
|
|
||||||
CoreLogger::info(ss.str());
|
spdlog::info(ss.str());
|
||||||
|
|
||||||
receivedCountPerSecs = 0;
|
receivedCountPerSecs = 0;
|
||||||
|
|
||||||
@ -1928,7 +1949,7 @@ namespace ix
|
|||||||
spdlog::info("ws_receive: Content size: {}", content.size());
|
spdlog::info("ws_receive: Content size: {}", content.size());
|
||||||
|
|
||||||
// Validate checksum
|
// Validate checksum
|
||||||
uint64_t cksum = ix::djb2Hash(content);
|
uint64_t cksum = djb2Hash(content);
|
||||||
auto cksumRef = data["djb2_hash"].string_value();
|
auto cksumRef = data["djb2_hash"].string_value();
|
||||||
|
|
||||||
spdlog::info("ws_receive: Computed hash: {}", cksum);
|
spdlog::info("ws_receive: Computed hash: {}", cksum);
|
||||||
@ -2481,41 +2502,6 @@ int main(int argc, char** argv)
|
|||||||
ix::setThreadName("ws main thread");
|
ix::setThreadName("ws main thread");
|
||||||
ix::initNetSystem();
|
ix::initNetSystem();
|
||||||
|
|
||||||
ix::CoreLogger::LogFunc logFunc = [](const char* msg, ix::LogLevel level) {
|
|
||||||
switch (level)
|
|
||||||
{
|
|
||||||
case ix::LogLevel::Debug:
|
|
||||||
{
|
|
||||||
spdlog::debug(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ix::LogLevel::Info:
|
|
||||||
{
|
|
||||||
spdlog::info(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ix::LogLevel::Warning:
|
|
||||||
{
|
|
||||||
spdlog::warn(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ix::LogLevel::Error:
|
|
||||||
{
|
|
||||||
spdlog::error(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ix::LogLevel::Critical:
|
|
||||||
{
|
|
||||||
spdlog::critical(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
ix::CoreLogger::setLogFunction(logFunc);
|
|
||||||
spdlog::set_level(spdlog::level::debug);
|
spdlog::set_level(spdlog::level::debug);
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
|
Loading…
Reference in New Issue
Block a user