mirror of
https://github.com/GOSTSec/poolserver
synced 2025-02-06 03:54:28 +00:00
changes
This commit is contained in:
parent
2311801c78
commit
58a8441ead
@ -1,8 +1,6 @@
|
||||
# Project name!
|
||||
project(PoolServer)
|
||||
|
||||
# CMake policies
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
cmake_minimum_required ( VERSION 2.8.12 )
|
||||
cmake_policy( VERSION 2.8.12 )
|
||||
project( "PoolServer" )
|
||||
|
||||
# Set macros
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/macros")
|
||||
@ -25,10 +23,10 @@ set(Boost_USE_MULTITHREADED ON)
|
||||
set(Boost_USE_STATIC_RUNTIME OFF)
|
||||
set(Boost_ALL_DYN_LINK ON)
|
||||
|
||||
SET(Boost_ADDITIONAL_VERSIONS "1.49" "1.49.0")
|
||||
SET(Boost_ADDITIONAL_VERSIONS "1.62" "1.62.0")
|
||||
|
||||
# Boost
|
||||
find_package(Boost 1.49 COMPONENTS thread chrono program_options date_time system REQUIRED)
|
||||
find_package(Boost 1.62 COMPONENTS thread chrono program_options date_time system REQUIRED)
|
||||
message(status "** Boost Include: ${Boost_INCLUDE_DIR}")
|
||||
message(status "** Boost Libraries: ${Boost_LIBRARY_DIRS}")
|
||||
message(status "** Boost Libraries: ${Boost_LIBRARIES}")
|
||||
@ -44,6 +42,9 @@ find_package(GMP REQUIRED)
|
||||
# OpenSSL
|
||||
find_package(OpenSSL REQUIRED)
|
||||
|
||||
# pthreads
|
||||
find_package(Threads)
|
||||
|
||||
# Print options
|
||||
include(cmake/showoptions.cmake)
|
||||
|
||||
|
@ -1,23 +1,102 @@
|
||||
# Try to find the GMP librairies
|
||||
# GMP_FOUND - system has GMP lib
|
||||
# GMP_INCLUDE_DIR - the GMP include directory
|
||||
# GMP_LIBRARIES - Libraries needed to use GMP
|
||||
# Copyright (c) 2006, Laurent Montel, <montel@kde.org>
|
||||
# .. cmake_module::
|
||||
#
|
||||
# Find the GNU MULTI-Precision Bignum (GMP) library
|
||||
# and the corresponding C++ bindings GMPxx
|
||||
#
|
||||
# You may set the following variables to modify the
|
||||
# behaviour of this module:
|
||||
#
|
||||
# :ref:`GMP_ROOT`
|
||||
# Path list to search for GMP and GMPxx
|
||||
#
|
||||
# Sets the following variables:
|
||||
#
|
||||
# :code:`GMP_FOUND`
|
||||
# True if the GMP library, the GMPxx headers and
|
||||
# the GMPxx library were found.
|
||||
#
|
||||
# .. cmake_variable:: GMP_ROOT
|
||||
#
|
||||
# You may set this variable to have :ref:`FindGMP` look
|
||||
# for the gmp and gmpxx packages in the given path before
|
||||
# inspecting system paths.
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
|
||||
if (GMP_INCLUDE_DIR AND GMP_LIBRARIES)
|
||||
# Already in cache, be silent
|
||||
set(GMP_FIND_QUIETLY TRUE)
|
||||
endif (GMP_INCLUDE_DIR AND GMP_LIBRARIES)
|
||||
|
||||
find_path(GMP_INCLUDE_DIR NAMES gmp.h )
|
||||
find_library(GMP_LIBRARIES NAMES gmp libgmp )
|
||||
find_library(GMPXX_LIBRARIES NAMES gmpxx libgmpxx )
|
||||
MESSAGE(STATUS "GMP libs: " ${GMP_LIBRARIES} " " ${GMPXX_LIBRARIES} )
|
||||
# search for location of header gmpxx.h", only at positions given by the user
|
||||
find_path(GMPXX_INCLUDE_DIR
|
||||
NAMES "gmpxx.h"
|
||||
PATHS ${GMP_PREFIX} ${GMP_ROOT}
|
||||
PATH_SUFFIXES include
|
||||
NO_DEFAULT_PATH)
|
||||
# try default paths now
|
||||
find_path(GMPXX_INCLUDE_DIR
|
||||
NAMES "gmpxx.h")
|
||||
|
||||
# check if header is accepted
|
||||
include(CMakePushCheckState)
|
||||
cmake_push_check_state()
|
||||
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${GMPXX_INCLUDE_DIR})
|
||||
include(CheckIncludeFileCXX)
|
||||
check_include_file_cxx("gmpxx.h" GMP_HEADER_WORKS)
|
||||
|
||||
# look for library gmp, only at positions given by the user
|
||||
find_library(GMP_LIB
|
||||
NAMES gmp libgmp
|
||||
PATHS ${GMP_PREFIX} ${GMP_ROOT} "/usr/lib/x86_64-linux-gnu"
|
||||
PATH_SUFFIXES lib lib64
|
||||
NO_DEFAULT_PATH
|
||||
DOC "GNU GMP library")
|
||||
# try default paths now
|
||||
find_library(GMP_LIB
|
||||
NAMES libgmp gmp)
|
||||
|
||||
# look for library gmpxx, only at positions given by the user
|
||||
find_library(GMPXX_LIB
|
||||
NAMES gmpxx libgmpxx
|
||||
PATHS ${GMP_PREFIX} ${GMP_ROOT} "/usr/lib/x86_64-linux-gnu"
|
||||
PATH_SUFFIXES lib lib64
|
||||
NO_DEFAULT_PATH
|
||||
DOC "GNU GMPXX library")
|
||||
# try default paths now
|
||||
find_library(GMPXX_LIB
|
||||
NAMES libgmpxx gmpxx)
|
||||
|
||||
# check if library works
|
||||
if(GMP_LIB AND GMPXX_LIB)
|
||||
include(CheckSymbolExists)
|
||||
check_library_exists(${GMP_LIB} __gmpz_abs "" GMPXX_LIB_WORKS)
|
||||
endif(GMP_LIB AND GMPXX_LIB)
|
||||
cmake_pop_check_state()
|
||||
|
||||
# behave like a CMake module is supposed to behave
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GMP DEFAULT_MSG GMP_INCLUDE_DIR GMP_LIBRARIES)
|
||||
find_package_handle_standard_args(
|
||||
"GMP"
|
||||
DEFAULT_MSG
|
||||
GMPXX_INCLUDE_DIR GMP_LIB GMPXX_LIB GMP_HEADER_WORKS GMPXX_LIB_WORKS
|
||||
)
|
||||
|
||||
mark_as_advanced(GMP_INCLUDE_DIR GMP_LIBRARIES)
|
||||
mark_as_advanced(GMP_LIB GMPXX_LIB GMPXX_INCLUDE_DIR)
|
||||
|
||||
# if GMPxx headers, GMP library, and GMPxx library are found, store results
|
||||
if(GMP_FOUND)
|
||||
set(GMP_INCLUDE_DIRS ${GMPXX_INCLUDE_DIR})
|
||||
set(GMP_LIBRARIES ${GMP_LIB} ${GMPXX_LIB})
|
||||
set(GMP_COMPILE_FLAGS "-DENABLE_GMP=1")
|
||||
# log result
|
||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||
"Determining location of GMP, GMPxx succeeded:\n"
|
||||
"Include directory: ${GMP_INCLUDE_DIRS}\n"
|
||||
"Library directory: ${GMP_LIBRARIES}\n\n")
|
||||
else()
|
||||
# log errornous result
|
||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||
"Determining location of GMP, GMPxx failed:\n"
|
||||
"Include directory: ${GMPXX_INCLUDE_DIR}\n"
|
||||
"gmp library directory: ${GMP_LIB}\n"
|
||||
"gmpxx library directory: ${GMPXX_LIB}\n\n")
|
||||
endif()
|
||||
|
||||
# set HAVE_GMP for config.h
|
||||
set(HAVE_GMP ${GMP_FOUND})
|
||||
|
@ -1,10 +1,10 @@
|
||||
DROP TABLE IF EXISTS `pool_worker`;
|
||||
CREATE TABLE IF NOT EXISTS `pool_worker`
|
||||
CREATE TABLE IF NOT EXISTS `pool_worker`
|
||||
(
|
||||
`id` INT(255) NOT NULL AUTO_INCREMENT,
|
||||
`username` VARCHAR(50) DEFAULT NULL,
|
||||
`password` VARCHAR(50) DEFAULT NULL,
|
||||
`mindiff` int(10) unsigned NOT NULL DEFAULT '1',
|
||||
`mindiff` int(10) unsigned NOT NULL DEFAULT '1',
|
||||
PRIMARY KEY (`id`)
|
||||
)
|
||||
ENGINE = InnoDB;
|
||||
@ -16,7 +16,7 @@ CREATE TABLE `shares` (
|
||||
`username` varchar(120) NOT NULL,
|
||||
`our_result` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`upstream_result` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`reason` varchar(50) DEFAULT NULL,
|
||||
`reason` varchar(50) DEFAULT NULL,
|
||||
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`difficulty` int(10) unsigned NOT NULL DEFAULT '1',
|
||||
PRIMARY KEY (`id`)
|
||||
|
@ -47,6 +47,7 @@ target_link_libraries(poolserver
|
||||
${GMP_LIBRARIES}
|
||||
${GMPXX_LIBRARIES}
|
||||
${OPENSSL_LIBRARIES}
|
||||
${CMAKE_THREAD_LIBS_INIT}
|
||||
)
|
||||
|
||||
# Install
|
||||
|
@ -43,18 +43,18 @@ bool InitConfig(int argc, char *argv[])
|
||||
|
||||
// Stratum
|
||||
descStratum.add_options()
|
||||
("StratumHost,sh", boost::program_options::value<std::string>()->default_value("0.0.0.0"), "Bind IP for stratum")
|
||||
("StratumHost", boost::program_options::value<std::string>()->default_value("0.0.0.0"), "Bind IP for stratum")
|
||||
("StratumRedirectHost", boost::program_options::value<std::string>()->default_value("0.0.0.0"), "Where to redirect getwork requests")
|
||||
("StratumPort,sp", boost::program_options::value<uint16_t>()->default_value(3333), "Stratum server port")
|
||||
("StratumPort", boost::program_options::value<uint16_t>()->default_value(3333), "Stratum server port")
|
||||
("StratumBlockCheckTime", boost::program_options::value<uint32>()->default_value(2000), "Time between block checks in ms")
|
||||
("RetargetInterval", boost::program_options::value<uint32>()->default_value(20), "Time between difficulty checks in seconds")
|
||||
("RetargetSharesThreshold", boost::program_options::value<uint32>()->default_value(20), "Number of shares in retarget interval to trigger a difficulty check")
|
||||
("RetargetTimeBuffer", boost::program_options::value<uint32>()->default_value(60*5), "Buffer of shares to keep (in seconds)")
|
||||
("RetargetTimePerShare", boost::program_options::value<double>()->default_value(4), "Target in seconds between shares")
|
||||
("RetargetVariance", boost::program_options::value<uint32>()->default_value(40), "Maximum allowed variance in percent before difficulty change")
|
||||
("RetargetStartingDiff", boost::program_options::value<uint32>()->default_value(2), "Difficulty at which new miner starts")
|
||||
("RetargetMinDiff", boost::program_options::value<uint32>()->default_value(1), "Minimum difficulty (also starting difficulty)")
|
||||
("RetargetMaxDiff", boost::program_options::value<uint32>()->default_value(1000000), "Maximum difficulty we can reach")
|
||||
("RetargetStartingDiff", boost::program_options::value<double>()->default_value(0.001), "Difficulty at which new miner starts")
|
||||
("RetargetMinDiff", boost::program_options::value<double>()->default_value(0.0001), "Minimum difficulty (also starting difficulty)")
|
||||
("RetargetMaxDiff", boost::program_options::value<double>()->default_value(1000.0), "Maximum difficulty we can reach")
|
||||
;
|
||||
|
||||
// Logging
|
||||
|
@ -309,7 +309,7 @@ namespace Stratum
|
||||
_workers.insert(username);
|
||||
|
||||
MySQL::Field* fields = result->FetchRow();
|
||||
_minDiff = fields[1].Get<uint32>();
|
||||
_minDiff = fields[1].Get<double>();
|
||||
|
||||
if (_diff < _minDiff)
|
||||
SetDifficulty(_minDiff);
|
||||
|
@ -27,8 +27,8 @@ namespace Stratum
|
||||
public:
|
||||
Client(Server* server, asio::io_service& io_service, uint64 id) : _io_service(io_service), _server(server), _socket(io_service), _ioStrand(io_service), _id(id), _subscribed(false), _jobid(0), _shareLimiter(this)
|
||||
{
|
||||
_diff = sConfig.Get<uint32>("RetargetStartingDiff");
|
||||
_minDiff = sConfig.Get<uint32>("RetargetMinDiff");
|
||||
_diff = sConfig.Get<double>("RetargetStartingDiff");
|
||||
_minDiff = sConfig.Get<double>("RetargetMinDiff");
|
||||
}
|
||||
|
||||
~Client()
|
||||
@ -100,11 +100,11 @@ namespace Stratum
|
||||
}
|
||||
|
||||
// Worker difficulty
|
||||
uint64 GetDifficulty()
|
||||
double GetDifficulty()
|
||||
{
|
||||
return _diff;
|
||||
}
|
||||
void SetDifficulty(uint64 diff, bool resendJob = false)
|
||||
void SetDifficulty(double diff, bool resendJob = false)
|
||||
{
|
||||
if (diff < _minDiff)
|
||||
diff = _minDiff;
|
||||
@ -116,7 +116,7 @@ namespace Stratum
|
||||
|
||||
// Send difficulty update
|
||||
JSON params;
|
||||
params.Add(double(_diff)/100); // diff 1 = 0.01
|
||||
params.Add(double(_diff));
|
||||
|
||||
JSON msg;
|
||||
msg["id"];
|
||||
@ -189,8 +189,8 @@ namespace Stratum
|
||||
uint32 _jobid;
|
||||
|
||||
// Share limiting
|
||||
uint64 _diff;
|
||||
uint64 _minDiff;
|
||||
double _diff;
|
||||
double _minDiff;
|
||||
ShareLimiter _shareLimiter;
|
||||
};
|
||||
|
||||
|
@ -46,16 +46,16 @@ namespace Stratum
|
||||
double hashrate = (MEGAHASHCONST*totalWeighted)/interval;
|
||||
|
||||
// Calculate new diff
|
||||
uint64 newDiff = (hashrate * sConfig.Get<double>("RetargetTimePerShare")) / MEGAHASHCONST;
|
||||
double newDiff = (hashrate * sConfig.Get<double>("RetargetTimePerShare")) / MEGAHASHCONST;
|
||||
|
||||
// Check Limits
|
||||
if (newDiff < sConfig.Get<uint32>("RetargetMinDiff"))
|
||||
newDiff = sConfig.Get<uint32>("RetargetMinDiff");
|
||||
if (newDiff > sConfig.Get<uint32>("RetargetMaxDiff"))
|
||||
newDiff = sConfig.Get<uint32>("RetargetMaxDiff");
|
||||
if (newDiff < sConfig.Get<double>("RetargetMinDiff"))
|
||||
newDiff = sConfig.Get<double>("RetargetMinDiff");
|
||||
if (newDiff > sConfig.Get<double>("RetargetMaxDiff"))
|
||||
newDiff = sConfig.Get<double>("RetargetMaxDiff");
|
||||
|
||||
// Calculate variance in %
|
||||
uint32 variance = abs(((newDiff - _client->GetDifficulty()) * 100) / _client->GetDifficulty());
|
||||
double variance = abs(((newDiff - _client->GetDifficulty()) * 100) / _client->GetDifficulty());
|
||||
|
||||
sLog.Debug(LOG_STRATUM, "Miner new diff: %u Variance: %u%% Hashrate: %f MH/s", newDiff, variance, hashrate);
|
||||
|
||||
|
@ -27,22 +27,34 @@
|
||||
# - Line breaks should be at column 100.
|
||||
###################################################################################################
|
||||
|
||||
[Server Configuration]
|
||||
#[Server Configuration]
|
||||
|
||||
###################################################################################################
|
||||
# SERVER CONFIGURATION
|
||||
#
|
||||
# MinDiffTime
|
||||
# Description: Minimum diff time (ms) in main server loop.
|
||||
# Important: Lowering this value increases cpu load but new packets are processed faster
|
||||
# Default: 100
|
||||
|
||||
MinDiffTime=100
|
||||
## How many threads to use
|
||||
#ServerThreads=2
|
||||
|
||||
## Address to send coins to
|
||||
#MiningAddress =
|
||||
|
||||
## Bitcoin RPC login credentials
|
||||
BitcoinRPC = 127.0.0.1;9376;gostcoinrpc;rpcpassword
|
||||
|
||||
## Minimum share count to upload to database
|
||||
#ShareUploadMinCount=2
|
||||
|
||||
## How many shares to upload in one query
|
||||
#ShareUploadBulkCount=50
|
||||
|
||||
## How often to upload shares
|
||||
#ShareUploadInterval=3
|
||||
|
||||
#
|
||||
###################################################################################################
|
||||
|
||||
[Stratum Configuration]
|
||||
#[Stratum Configuration]
|
||||
|
||||
###################################################################################################
|
||||
# STRATUM CONFIGURATION
|
||||
@ -51,19 +63,49 @@ MinDiffTime=100
|
||||
# Description: Bind stratum to IP/Hostname
|
||||
# Default: "0.0.0.0" - (Bind to all IPs on the system)
|
||||
|
||||
StratumHost="0.0.0.0"
|
||||
StratumHost = 0.0.0.0
|
||||
|
||||
#
|
||||
# StratumPort
|
||||
# Description: Stratum Port
|
||||
# Default: 3333
|
||||
|
||||
StratumPort=3333
|
||||
StratumPort = 3333
|
||||
|
||||
## Where to redirect getwork requests
|
||||
#StratumRedirectHost=""
|
||||
|
||||
## Time between block checks in ms
|
||||
#StratumBlockCheckTime=2000
|
||||
|
||||
## Time between difficulty checks in seconds
|
||||
RetargetInterval=20
|
||||
|
||||
## Number of shares in retarget interval to trigger a difficulty check
|
||||
#RetargetSharesThreshold=20
|
||||
|
||||
## Buffer of shares to keep (in seconds)
|
||||
#RetargetTimeBuffer=180
|
||||
|
||||
## Target in seconds between shares
|
||||
#RetargetTimePerShare=10
|
||||
|
||||
## Maximum allowed variance in percent before difficulty change
|
||||
#RetargetVariance=40
|
||||
|
||||
## Difficulty at which new miner starts
|
||||
RetargetStartingDiff = 0.001
|
||||
|
||||
## Minimum difficulty (also starting difficulty)
|
||||
RetargetMinDiff = 0.00001
|
||||
|
||||
## Maximum difficulty we can reach
|
||||
RetargetMaxDiff = 100.0
|
||||
|
||||
#
|
||||
###################################################################################################
|
||||
|
||||
[Logging Configuration]
|
||||
#[Logging Configuration]
|
||||
|
||||
###################################################################################################
|
||||
# LOGGING CONFIGURATION
|
||||
@ -74,7 +116,7 @@ StratumPort=3333
|
||||
# Example: "/var/log"
|
||||
# Default: "../etc" - (Save log file next to executable)
|
||||
|
||||
LogFilePath="../etc"
|
||||
LogFilePath = ../etc
|
||||
|
||||
#
|
||||
# LogConsoleLevel
|
||||
@ -87,7 +129,7 @@ LogFilePath="../etc"
|
||||
# 4 - (Debug|Set apropriate Log...DebugMask for debug output)
|
||||
|
||||
LogConsoleLevel=4
|
||||
LogFileLevel=4
|
||||
LogFileLevel=2
|
||||
|
||||
#
|
||||
# LogConsoleDebugMask
|
||||
@ -99,13 +141,13 @@ LogFileLevel=4
|
||||
# 2 - (LOG_SERVER)
|
||||
# 4 - (LOG_DATABASE)
|
||||
|
||||
LogConsoleDebugMask=0
|
||||
LogConsoleDebugMask=7
|
||||
LogFileDebugMask=0
|
||||
|
||||
#
|
||||
###################################################################################################
|
||||
|
||||
[Database Configuration]
|
||||
#[Database Configuration]
|
||||
|
||||
###################################################################################################
|
||||
# DATABASE CONFIGURATION
|
||||
@ -116,12 +158,12 @@ LogFileDebugMask=0
|
||||
# Example: "mysql"
|
||||
# Default: "." - (Save log file next to executable)
|
||||
|
||||
DatabaseDriver="mysql"
|
||||
DatabaseDriver = mysql
|
||||
|
||||
#
|
||||
###################################################################################################
|
||||
|
||||
[MySQL Configuration]
|
||||
#[MySQL Configuration]
|
||||
|
||||
###################################################################################################
|
||||
# MYSQL CONFIGURATION
|
||||
@ -130,35 +172,42 @@ DatabaseDriver="mysql"
|
||||
# Description: IP/Hostname of MySQL Server
|
||||
# Default: "127.0.0.1" - (Connect to localhost)
|
||||
|
||||
MySQLHost="127.0.0.1"
|
||||
MySQLHost = 127.0.0.1
|
||||
|
||||
#
|
||||
# MySQLPort
|
||||
# Description: MySQL Server Port
|
||||
# Default: 3306 - (Default MySQL Server Port)
|
||||
|
||||
MySQLPort=3306
|
||||
MySQLPort = 3306
|
||||
|
||||
#
|
||||
# MySQLUser
|
||||
# Description: MySQL Server Username
|
||||
# Default: "" - (No Username)
|
||||
|
||||
MySQLUser="root"
|
||||
MySQLUser =
|
||||
|
||||
#
|
||||
# MySQLPass
|
||||
# Description: MySQL Server Password
|
||||
# Default: "" - (No Password)
|
||||
|
||||
MySQLPass=""
|
||||
MySQLPass =
|
||||
|
||||
#
|
||||
# MySQLDatabase
|
||||
# Description: Name of MySQL Database
|
||||
# Default: "poolserver"
|
||||
|
||||
MySQLDatabase="poolserver"
|
||||
MySQLDatabase = poolserver
|
||||
|
||||
## MySQL Sync Threads to Create
|
||||
#MySQLSyncThreads = 2
|
||||
|
||||
## MySQL Async Threads to Create
|
||||
#MySQLAsyncThreads = 2
|
||||
|
||||
#
|
||||
###################################################################################################
|
||||
|
||||
|
@ -12,8 +12,7 @@ namespace Gostcoin
|
||||
{
|
||||
inline BigInt TargetToDiff(BigInt val)
|
||||
{
|
||||
// we consider diff=1 as 0.01
|
||||
static BigInt c("0x0000ffff00000000000000000000000000000000000000000000000000000000");
|
||||
static BigInt c("0x00000000ffff0000000000000000000000000000000000000000000000000000");
|
||||
return (c / val);
|
||||
}
|
||||
|
||||
|
@ -99,12 +99,12 @@ void Log::Write(LogLevel level, LogType type, std::string msg)
|
||||
case LOG_LEVEL_DEBUG:
|
||||
if (sConfig.Get<uint32_t>("LogConsoleLevel") >= level) {
|
||||
uint32_t debugmask = sConfig.Get<uint32_t>("LogConsoleDebugMask");
|
||||
if (debugmask & uint32_t(pow(2, type)))
|
||||
if (debugmask & uint32_t(pow(2, (int)type)))
|
||||
std::cout << timestamp << " [DEBUG] " << msg << std::endl;
|
||||
}
|
||||
if (sConfig.Get<uint32_t>("LogFileLevel") >= level) {
|
||||
uint32_t debugmask = sConfig.Get<uint32_t>("LogFileDebugMask");
|
||||
if (debugmask & uint32_t(pow(2, type)))
|
||||
if (debugmask & uint32_t(pow(2, (int)type)))
|
||||
AppendFile(timestamp + " [DEBUG] " + msg);
|
||||
}
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user