diff --git a/.github/workflows/compiler-sanitizers.yml b/.github/workflows/compiler-sanitizers.yml index 8cc71b208..8285b7a6e 100644 --- a/.github/workflows/compiler-sanitizers.yml +++ b/.github/workflows/compiler-sanitizers.yml @@ -14,8 +14,8 @@ jobs: sanitizer: [ 'address,pointer-compare,pointer-subtract', 'thread' ] env: - CFLAGS: "-fno-omit-frame-pointer -fstack-protector-all -fsanitize=${{matrix.sanitizer}},bounds,enum -fsanitize-address-use-after-scope -fsanitize-address-use-after-return=always -fsanitize-recover=address -fsanitize-memory-track-origins=2" - CC: "clang" + CXXFLAGS: "-fno-omit-frame-pointer -fstack-protector-all -fsanitize=${{matrix.sanitizer}},bounds,enum -fsanitize-address-use-after-scope -fsanitize-address-use-after-return=always -fsanitize-recover=address -fsanitize-memory-track-origins=2" + CXX: "clang" ASAN_OPTIONS: "strict_string_checks=1:detect_stack_use_after_return=1:check_initialization_order=1:detect_leaks=0:detect_invalid_pointer_pairs=1:halt_on_error=0" steps: diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ddf3b5cb..d0a178cd5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,11 @@ cmake_minimum_required(VERSION 3.16) project(coturn) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_C_STANDARD 11) +set(CMAKE_C_EXTENSIONS ON) set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_EXTENSIONS ON) +set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) # TODO: Modify this when the version is released diff --git a/Makefile.in b/Makefile.in index 279c3a6db..2214154d5 100755 --- a/Makefile.in +++ b/Makefile.in @@ -3,7 +3,7 @@ LIBEVENT_INCLUDE = -I${PREFIX}/include/ -I/usr/local/include/ INCFLAGS = -Isrc -Isrc/apps/common -Isrc/server -Isrc/client -Isrc/client++ ${LIBEVENT_INCLUDE} -CFLAGS += ${INCFLAGS} +CXXFLAGS += ${INCFLAGS} MAKE_DEPS = Makefile @@ -60,37 +60,37 @@ include/turn/ns_turn_defs.h: src/ns_turn_defs.h bin/turnutils_uclient: ${COMMON_DEPS} src/apps/uclient/session.h lib/libturnclient.a src/apps/uclient/mainuclient.c src/apps/uclient/uclient.c src/apps/uclient/uclient.h src/apps/uclient/startuclient.c src/apps/uclient/startuclient.h ${MKBUILDDIR} bin - ${CC} ${CPPFLAGS} ${CFLAGS} src/apps/uclient/uclient.c src/apps/uclient/startuclient.c src/apps/uclient/mainuclient.c ${COMMON_MODS} -o $@ -Llib -lturnclient -Llib ${LDFLAGS} + ${CXX} ${CPPFLAGS} ${CXXFLAGS} src/apps/uclient/uclient.c src/apps/uclient/startuclient.c src/apps/uclient/mainuclient.c ${COMMON_MODS} -o $@ -Llib -lturnclient -Llib ${LDFLAGS} bin/turnutils_natdiscovery: ${COMMON_DEPS} lib/libturnclient.a src/apps/natdiscovery/natdiscovery.c pwd ${MKBUILDDIR} bin - ${CC} ${CPPFLAGS} ${CFLAGS} src/apps/natdiscovery/natdiscovery.c ${COMMON_MODS} -o $@ -Llib -lturnclient -Llib ${LDFLAGS} + ${CXX} ${CPPFLAGS} ${CXXFLAGS} src/apps/natdiscovery/natdiscovery.c ${COMMON_MODS} -o $@ -Llib -lturnclient -Llib ${LDFLAGS} bin/turnutils_oauth: ${COMMON_DEPS} lib/libturnclient.a src/apps/oauth/oauth.c pwd ${MKBUILDDIR} bin - ${CC} ${CPPFLAGS} ${CFLAGS} src/apps/oauth/oauth.c ${COMMON_MODS} -o $@ -Llib -lturnclient -Llib ${LDFLAGS} + ${CXX} ${CPPFLAGS} ${CXXFLAGS} src/apps/oauth/oauth.c ${COMMON_MODS} -o $@ -Llib -lturnclient -Llib ${LDFLAGS} bin/turnutils_stunclient: ${COMMON_DEPS} lib/libturnclient.a src/apps/stunclient/stunclient.c pwd ${MKBUILDDIR} bin - ${CC} ${CPPFLAGS} ${CFLAGS} src/apps/stunclient/stunclient.c ${COMMON_MODS} -o $@ -Llib -lturnclient -Llib ${LDFLAGS} + ${CXX} ${CPPFLAGS} ${CXXFLAGS} src/apps/stunclient/stunclient.c ${COMMON_MODS} -o $@ -Llib -lturnclient -Llib ${LDFLAGS} bin/turnutils_rfc5769check: ${COMMON_DEPS} lib/libturnclient.a src/apps/rfc5769/rfc5769check.c pwd ${MKBUILDDIR} bin - ${CC} ${CPPFLAGS} ${CFLAGS} src/apps/rfc5769/rfc5769check.c ${COMMON_MODS} -o $@ -Llib -lturnclient -Llib ${LDFLAGS} + ${CXX} ${CPPFLAGS} ${CXXFLAGS} src/apps/rfc5769/rfc5769check.c ${COMMON_MODS} -o $@ -Llib -lturnclient -Llib ${LDFLAGS} bin/turnserver: ${SERVERAPP_DEPS} ${MKBUILDDIR} bin ${RMCMD} bin/turnadmin - ${CC} ${CPPFLAGS} ${CFLAGS} ${DBCFLAGS} ${IMPL_MODS} -Ilib ${SERVERAPP_MODS} ${COMMON_MODS} ${SERVERTURN_MODS} -o $@ ${DBLIBS} ${LDFLAGS} + ${CXX} ${CPPFLAGS} ${CXXFLAGS} ${DBCFLAGS} ${IMPL_MODS} -Ilib ${SERVERAPP_MODS} ${COMMON_MODS} ${SERVERTURN_MODS} -o $@ ${DBLIBS} ${LDFLAGS} cd bin; ln -s turnserver turnadmin bin/turnutils_peer: ${COMMON_DEPS} ${LIBCLIENTTURN_MODS} ${LIBCLIENTTURN_DEPS} lib/libturnclient.a src/apps/peer/mainudpserver.c src/apps/peer/udpserver.h src/apps/peer/udpserver.c ${MKBUILDDIR} bin - ${CC} ${CPPFLAGS} ${CFLAGS} src/apps/peer/mainudpserver.c src/apps/peer/udpserver.c ${COMMON_MODS} -o $@ -Llib -lturnclient -Llib ${LDFLAGS} + ${CXX} ${CPPFLAGS} ${CXXFLAGS} src/apps/peer/mainudpserver.c src/apps/peer/udpserver.c ${COMMON_MODS} -o $@ -Llib -lturnclient -Llib ${LDFLAGS} ### Client Library: @@ -100,15 +100,15 @@ lib/libturnclient.a: ${LIBCLIENTTURN_OBJS} ${LIBCLIENTTURN_DEPS} build/obj/ns_turn_ioaddr.o: src/client/ns_turn_ioaddr.c ${LIBCLIENTTURN_DEPS} ${MKBUILDDIR} build/obj - ${CC} ${CPPFLAGS} ${CFLAGS} -c src/client/ns_turn_ioaddr.c -o $@ + ${CXX} ${CPPFLAGS} ${CXXFLAGS} -c src/client/ns_turn_ioaddr.c -o $@ build/obj/ns_turn_msg_addr.o: src/client/ns_turn_msg_addr.c ${LIBCLIENTTURN_DEPS} ${MKBUILDDIR} build/obj - ${CC} ${CPPFLAGS} ${CFLAGS} -c src/client/ns_turn_msg_addr.c -o $@ + ${CXX} ${CPPFLAGS} ${CXXFLAGS} -c src/client/ns_turn_msg_addr.c -o $@ build/obj/ns_turn_msg.o: src/client/ns_turn_msg.c ${LIBCLIENTTURN_DEPS} ${MKBUILDDIR} build/obj - ${CC} ${CPPFLAGS} ${CFLAGS} -c src/client/ns_turn_msg.c -o $@ + ${CXX} ${CPPFLAGS} ${CXXFLAGS} -c src/client/ns_turn_msg.c -o $@ ### Clean all: diff --git a/configure b/configure index 3ff83e197..c30f4dbc6 100755 --- a/configure +++ b/configure @@ -15,7 +15,7 @@ cleanup() { } testlibraw() { - ${CC} ${TMPCPROGC} -o ${TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -${1} 2>>/dev/null + ${CXX} ${TMPCPROGC} -o ${TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -${1} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} "Library option -${1} cannot be used" @@ -85,33 +85,33 @@ pthread_testlib() { return fi - ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null + ${CXX} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then return fi - ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -pthread 2>>/dev/null + ${CXX} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -pthread 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then OSLIBS="${OSLIBS} -pthread" return fi - ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -lpthread 2>>/dev/null + ${CXX} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -lpthread 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then OSLIBS="${OSLIBS} -lpthread" return fi - ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null + ${CXX} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then return fi - ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -D_GNU_SOURCE 2>>/dev/null + ${CXX} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} -D_GNU_SOURCE 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then ${ECHO_CMD} "Older GNU pthread library found" @@ -126,7 +126,7 @@ pthread_testlib() { pthread_testbarriers() { ${ECHO_CMD} "pthread_barrier_t barrier;" >> ${TH_TMPCPROGC} - ${CC} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null + ${CXX} ${TH_TMPCPROGC} -o ${TH_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} "pthread barriers not found" @@ -137,7 +137,7 @@ pthread_testbarriers() { gcm_testlib() { if [ -z "${TURN_NO_GCM}" ] ; then - ${CC} ${GCM_TMPCPROGC} -o ${GCM_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null + ${CXX} ${GCM_TMPCPROGC} -o ${GCM_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then return 1 @@ -151,7 +151,7 @@ gcm_testlib() { testdaemon() { - ${CC} ${D_TMPCPROGC} -o ${D_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null + ${CXX} ${D_TMPCPROGC} -o ${D_TMPCPROGB} ${OSCFLAGS} ${OSLIBS} 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then OSCFLAGS="${OSCFLAGS} -DTURN_HAS_DAEMON" @@ -160,13 +160,13 @@ testdaemon() { test_sin_len() { TMPCADDRPROGC=src/client/ns_turn_ioaddr.c - ${CC} -c ${OSCFLAGS} -DTURN_HAS_SIN_LEN -Isrc ${TMPCADDRPROGC} -o ${TMPCADDRPROGO} 2>>/dev/null + ${CXX} -c ${OSCFLAGS} -DTURN_HAS_SIN_LEN -Isrc ${TMPCADDRPROGC} -o ${TMPCADDRPROGO} 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then OSCFLAGS="${OSCFLAGS} -DTURN_HAS_SIN_LEN" ${ECHO_CMD} "Sockets code is fine: sin_len field present" else - ${CC} -c ${OSCFLAGS} -Isrc ${TMPCADDRPROGC} -o ${TMPCADDRPROGO} 2>>/dev/null + ${CXX} -c ${OSCFLAGS} -Isrc ${TMPCADDRPROGC} -o ${TMPCADDRPROGO} 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then ${ECHO_CMD} "Sockets code is fine: no sin_len field present" @@ -420,7 +420,7 @@ if [ -z "${MORECMD}" ]; then MORECMD="cat" fi -OSCFLAGS="${CFLAGS}" +OSCFLAGS="${CXXFLAGS}" OSLIBS="${LDFLAGS}" SYSTEM=`uname` @@ -592,36 +592,36 @@ int main(int argc, char** argv) { # What is our compiler ? ########################## -if [ -z "${CC}" ] ; then - for CC in cc gcc clang; do - ${CC} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null +if [ -z "${CXX}" ] ; then + for CXX in cxx c++ g++ clang++; do + ${CXX} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then break fi - CC= + CXX= done - if [ -z "$CC" ] ; then - ${ECHO_CMD} "ERROR: failed to a find working C compiler" + if [ -z "${CXX}" ] ; then + ${ECHO_CMD} "ERROR: failed to a find a C++ compiler using the default search choices." cleanup exit 1 fi else - CC_OUTPUT=$(${CC} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB}) + CXX_OUTPUT=$(${CXX} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB}) ER=$? if ! [ ${ER} -eq 0 ] ; then - ${ECHO_CMD} "ERROR: cannot use compiler ${CC} properly." - ${ECHO_CMD} "${CC_OUTPUT}" + ${ECHO_CMD} "ERROR: cannot use compiler ${CXX} properly." + ${ECHO_CMD} "${CXX_OUTPUT}" cleanup exit 1 fi fi -${ECHO_CMD} "Compiler: ${CC}" +${ECHO_CMD} "Compiler: ${CXX}" if [ -z "${TURN_ACCEPT_RPATH}" ] ; then - ${CC} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} -Wl,-rpath,/usr/lib 2>>/dev/null + ${CXX} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} -Wl,-rpath,/usr/lib 2>>/dev/null ER=$? if [ ${ER} -eq 0 ] ; then TURN_ACCEPT_RPATH=1 @@ -664,23 +664,23 @@ GNUOSCFLAGS="-g ${GNUOSCFLAGS}" GNUOSCFLAGS="${GNUOSCFLAGS} -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual" GNUOSCFLAGS="${GNUOSCFLAGS}" -${CC} -Werror ${GNUOSCFLAGS} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null +${CXX} -Werror ${GNUOSCFLAGS} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} "Hm..." - ${CC} -Wall ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null + ${CXX} -Wall ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} "Not an ordinary GNU or Clang compiler" else ${ECHO_CMD} "g++ or something..." GNUOSCFLAGS="-g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wpointer-arith -Wcast-qual" - ${CC} -Werror ${GNUOSCFLAGS} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null + ${CXX} -Werror ${GNUOSCFLAGS} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} "Not an ordinary g++ compiler" GNUOSCFLAGS="-x c++ -g -Wall -Wno-deprecated-declarations -Wextra -Wformat-security -Wpointer-arith -Wcast-qual" - ${CC} -Werror ${GNUOSCFLAGS} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null + ${CXX} -Werror ${GNUOSCFLAGS} ${TMPCPROGC} ${OSCFLAGS} -o ${TMPCPROGB} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} "Not an ordinary c++ compiler" @@ -754,7 +754,7 @@ testdaemon ########################### if [ -n "${SSL_CFLAGS}" ] && [ -n "${SSL_LIBS}" ]; then - ${CC} ${TMPCPROGC} ${SSL_CFLAGS} -o ${TMPCPROGB} ${OSCFLAGS} ${OSLIBS} ${SSL_LIBS} 2>>/dev/null + ${CXX} ${TMPCPROGC} ${SSL_CFLAGS} -o ${TMPCPROGB} ${OSCFLAGS} ${OSLIBS} ${SSL_LIBS} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} "Private SSL Library option cannot be used" @@ -816,7 +816,7 @@ fi # Test Libevent2 setup ########################### if [ -n "${EVENT_CFLAGS}" ] && [ -n "${EVENT_LIBS}" ]; then - ${CC} ${TMPCPROGC} ${EVENT_CFLAGS} -o ${TMPCPROGB} ${OSCFLAGS} ${OSLIBS} ${EVENT_LIBS} 2>>/dev/null + ${CXX} ${TMPCPROGC} ${EVENT_CFLAGS} -o ${TMPCPROGB} ${OSCFLAGS} ${OSLIBS} ${EVENT_LIBS} 2>>/dev/null ER=$? if ! [ ${ER} -eq 0 ] ; then ${ECHO_CMD} "Private Event Library option cannot be used" @@ -1049,10 +1049,10 @@ ${ECHO_CMD} "#################################" > Makefile ${ECHO_CMD} "# Generated by configure script #" >> Makefile ${ECHO_CMD} "#################################" >> Makefile ${ECHO_CMD} "ECHO_CMD = ${ECHO_CMD}" >> Makefile -${ECHO_CMD} "CC = ${CC}" >> Makefile +${ECHO_CMD} "CXX = ${CXX}" >> Makefile ${ECHO_CMD} "LDFLAGS += ${OSLIBS}" >> Makefile ${ECHO_CMD} "DBLIBS += ${DBLIBS}" >> Makefile -${ECHO_CMD} "CFLAGS += ${OSCFLAGS}" >> Makefile +${ECHO_CMD} "CXXFLAGS += ${OSCFLAGS}" >> Makefile ${ECHO_CMD} "CPPFLAGS = ${CPPFLAGS}" >> Makefile ${ECHO_CMD} "DBCFLAGS += ${DBCFLAGS} ${TURN_NO_PQ} ${TURN_NO_MYSQL} ${TURN_NO_SQLITE} ${TURN_NO_MONGO} ${TURN_NO_HIREDIS} ${TURN_NO_SYSTEMD}" >> Makefile ${ECHO_CMD} "#" >> Makefile diff --git a/src/apps/common/CMakeLists.txt b/src/apps/common/CMakeLists.txt index def6b08d2..1749ce77d 100644 --- a/src/apps/common/CMakeLists.txt +++ b/src/apps/common/CMakeLists.txt @@ -7,6 +7,7 @@ set(SOURCE_FILES ns_turn_utils.c stun_buffer.c ) +set_source_files_properties(${SOURCE_FILES} PROPERIES LANGUAGE CXX) set(HEADER_FILES apputils.h diff --git a/src/apps/common/ns_turn_utils.c b/src/apps/common/ns_turn_utils.c index ad08308ff..17d2339d0 100644 --- a/src/apps/common/ns_turn_utils.c +++ b/src/apps/common/ns_turn_utils.c @@ -164,15 +164,15 @@ int turn_mutex_destroy(turn_mutex *mutex) { /* syslog facility */ /*BVB-594 Syslog facility */ -static char *str_fac[] = {"LOG_AUTH", "LOG_CRON", "LOG_DAEMON", "LOG_KERN", "LOG_LOCAL0", - "LOG_LOCAL1", "LOG_LOCAL2", "LOG_LOCAL3", "LOG_LOCAL4", "LOG_LOCAL5", - "LOG_LOCAL6", "LOG_LOCAL7", "LOG_LPR", "LOG_MAIL", "LOG_NEWS", - "LOG_USER", "LOG_UUCP", "LOG_AUTHPRIV", "LOG_SYSLOG", 0}; +static char const *const str_fac[] = {"LOG_AUTH", "LOG_CRON", "LOG_DAEMON", "LOG_KERN", "LOG_LOCAL0", + "LOG_LOCAL1", "LOG_LOCAL2", "LOG_LOCAL3", "LOG_LOCAL4", "LOG_LOCAL5", + "LOG_LOCAL6", "LOG_LOCAL7", "LOG_LPR", "LOG_MAIL", "LOG_NEWS", + "LOG_USER", "LOG_UUCP", "LOG_AUTHPRIV", "LOG_SYSLOG", 0}; #if defined(__unix__) || defined(unix) || defined(__APPLE__) -static int int_fac[] = {LOG_AUTH, LOG_CRON, LOG_DAEMON, LOG_KERN, LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, - LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7, LOG_LPR, LOG_MAIL, - LOG_NEWS, LOG_USER, LOG_UUCP, LOG_AUTHPRIV, LOG_SYSLOG, 0}; +static int const int_fac[] = {LOG_AUTH, LOG_CRON, LOG_DAEMON, LOG_KERN, LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, + LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7, LOG_LPR, LOG_MAIL, + LOG_NEWS, LOG_USER, LOG_UUCP, LOG_AUTHPRIV, LOG_SYSLOG, 0}; static int syslog_facility = 0; @@ -541,7 +541,8 @@ void err(int eval, const char *format, ...) { } #endif -void turn_log_func_default(char *file, int line, TURN_LOG_LEVEL level, const char *format, ...) { +void turn_log_func_default(char const *const file, int const line, TURN_LOG_LEVEL const level, char const *const format, + ...) { va_list args; va_start(args, format); #if defined(TURN_LOG_FUNC_IMPL) diff --git a/src/apps/common/ns_turn_utils.h b/src/apps/common/ns_turn_utils.h index 654b41b99..92ce4f810 100644 --- a/src/apps/common/ns_turn_utils.h +++ b/src/apps/common/ns_turn_utils.h @@ -44,6 +44,10 @@ void err(int eval, const char *format, ...); #include "ns_turn_defs.h" // for turn_time_t #include "ns_turn_ioaddr.h" +#ifdef __cplusplus +#include // for std::min +#endif + #ifdef __cplusplus extern "C" { #endif @@ -72,7 +76,7 @@ void set_syslog_facility(char *val); void set_turn_log_timestamp_format(char *new_format); -void turn_log_func_default(char *file, int line, TURN_LOG_LEVEL level, const char *format, ...) +void turn_log_func_default(char const *file, int line, TURN_LOG_LEVEL level, const char *format, ...) #ifdef __GNUC__ __attribute__((format(printf, 4, 5))) #endif @@ -97,12 +101,15 @@ int is_secure_string(const uint8_t *string, int sanitizesql); /////////////////////////////////////////////////////// -#if !defined(min) -#define min(a, b) ((a) <= (b) ? (a) : (b)) -#endif - #ifdef __cplusplus } #endif +// Make sure that we don't try to pull std::min into the extern-c block. +#if defined(__cplusplus) +using std::min; +#elif !defined(min) +#define min(a, b) ((a) <= (b) ? (a) : (b)) +#endif + #endif //__TURN_ULIB__ diff --git a/src/apps/natdiscovery/CMakeLists.txt b/src/apps/natdiscovery/CMakeLists.txt index 63607aedd..297b62d04 100644 --- a/src/apps/natdiscovery/CMakeLists.txt +++ b/src/apps/natdiscovery/CMakeLists.txt @@ -5,12 +5,13 @@ project(turnutils_natdiscovery) set(SOURCE_FILES natdiscovery.c ) +set_source_files_properties(${SOURCE_FILES} PROPERIES LANGUAGE CXX) add_executable(${PROJECT_NAME} ${SOURCE_FILES}) target_link_libraries(${PROJECT_NAME} PRIVATE turnclient) set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin - ) + ) INSTALL(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT Runtime diff --git a/src/apps/oauth/CMakeLists.txt b/src/apps/oauth/CMakeLists.txt index e26e739a3..97d30ca51 100644 --- a/src/apps/oauth/CMakeLists.txt +++ b/src/apps/oauth/CMakeLists.txt @@ -5,6 +5,7 @@ project(turnutils_oauth) set(SOURCE_FILES oauth.c ) +set_source_files_properties(${SOURCE_FILES} PROPERIES LANGUAGE CXX) add_executable(${PROJECT_NAME} ${SOURCE_FILES}) target_link_libraries(${PROJECT_NAME} PRIVATE turnclient) diff --git a/src/apps/peer/CMakeLists.txt b/src/apps/peer/CMakeLists.txt index 7489767d6..007aae608 100644 --- a/src/apps/peer/CMakeLists.txt +++ b/src/apps/peer/CMakeLists.txt @@ -5,6 +5,7 @@ project(turnutils_peer) set(SOURCE_FILES mainudpserver.c udpserver.c ) +set_source_files_properties(${SOURCE_FILES} PROPERIES LANGUAGE CXX) add_executable(${PROJECT_NAME} ${SOURCE_FILES}) target_link_libraries(${PROJECT_NAME} PRIVATE turnclient) diff --git a/src/apps/relay/CMakeLists.txt b/src/apps/relay/CMakeLists.txt index 96c959387..b42189e39 100644 --- a/src/apps/relay/CMakeLists.txt +++ b/src/apps/relay/CMakeLists.txt @@ -128,6 +128,8 @@ list(APPEND turnserver_DEFINED TURN_NO_SCTP) message("turnserver_LIBS:${turnserver_LIBS}") +set_source_files_properties(${SOURCE_FILES} PROPERIES LANGUAGE CXX) + add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES}) target_link_libraries(${PROJECT_NAME} PRIVATE turn_server ${turnserver_LIBS}) target_include_directories(${PROJECT_NAME} PRIVATE ${turnserver_include_dirs}) diff --git a/src/apps/relay/prom_server.h b/src/apps/relay/prom_server.h index 3e6270f8c..651cfa802 100644 --- a/src/apps/relay/prom_server.h +++ b/src/apps/relay/prom_server.h @@ -4,24 +4,24 @@ #include "ns_turn_ioalib.h" #include +#include + +#if !defined(_MSC_VER) +#include +#endif #define DEFAULT_PROM_SERVER_PORT (9641) #define TURN_ALLOC_STR_MAX_SIZE (20) -#if !defined(TURN_NO_PROMETHEUS) - -#include -#include - #ifdef __cplusplus extern "C" { #endif + +#if !defined(TURN_NO_PROMETHEUS) + #include #include #include -#ifdef __cplusplus -} -#endif /* __clplusplus */ extern prom_counter_t *stun_binding_request; extern prom_counter_t *stun_binding_response; @@ -53,25 +53,13 @@ extern prom_counter_t *turn_total_traffic_peer_sentb; extern prom_gauge_t *turn_total_allocations_number; -#ifdef __cplusplus -extern "C" { -#endif - -void start_prometheus_server(void); - -void prom_set_finished_traffic(const char *realm, const char *user, unsigned long rsvp, unsigned long rsvb, - unsigned long sentp, unsigned long sentb, bool peer); - -void prom_inc_allocation(SOCKET_TYPE type); -void prom_dec_allocation(SOCKET_TYPE type); - int is_ipv6_enabled(void); void prom_inc_stun_binding_request(void); void prom_inc_stun_binding_response(void); void prom_inc_stun_binding_error(void); -#else +#endif /* !defined(TURN_NO_PROMETHEUS) */ void start_prometheus_server(void); @@ -81,8 +69,6 @@ void prom_set_finished_traffic(const char *realm, const char *user, unsigned lon void prom_inc_allocation(SOCKET_TYPE type); void prom_dec_allocation(SOCKET_TYPE type); -#endif /* TURN_NO_PROMETHEUS */ - #ifdef __cplusplus } #endif /* __clplusplus */ diff --git a/src/apps/rfc5769/CMakeLists.txt b/src/apps/rfc5769/CMakeLists.txt index 27b94a952..8bf65457a 100644 --- a/src/apps/rfc5769/CMakeLists.txt +++ b/src/apps/rfc5769/CMakeLists.txt @@ -5,6 +5,7 @@ project(turnutils_rfc5769check) set(SOURCE_FILES rfc5769check.c ) +set_source_files_properties(${SOURCE_FILES} PROPERIES LANGUAGE CXX) add_executable(${PROJECT_NAME} ${SOURCE_FILES}) target_link_libraries(${PROJECT_NAME} PRIVATE turnclient) diff --git a/src/apps/stunclient/CMakeLists.txt b/src/apps/stunclient/CMakeLists.txt index 637839d91..93ccf923e 100644 --- a/src/apps/stunclient/CMakeLists.txt +++ b/src/apps/stunclient/CMakeLists.txt @@ -5,6 +5,7 @@ project(turnutils_stunclient) set(SOURCE_FILES stunclient.c ) +set_source_files_properties(${SOURCE_FILES} PROPERIES LANGUAGE CXX) add_executable(${PROJECT_NAME} ${SOURCE_FILES}) target_link_libraries(${PROJECT_NAME} PRIVATE turnclient) diff --git a/src/apps/uclient/CMakeLists.txt b/src/apps/uclient/CMakeLists.txt index 540caccaa..b78878095 100644 --- a/src/apps/uclient/CMakeLists.txt +++ b/src/apps/uclient/CMakeLists.txt @@ -7,6 +7,7 @@ set(SOURCE_FILES startuclient.c mainuclient.c ) +set_source_files_properties(${SOURCE_FILES} PROPERIES LANGUAGE CXX) set(HEADER_FILES uclient.h diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index ef8cdb263..a55efed05 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -18,6 +18,8 @@ set(SOURCE_FILES ns_turn_msg.c ) +set_source_files_properties(${SOURCE_FILES} PROPERIES LANGUAGE CXX) + add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES} ${HEADER_FILES}) target_link_libraries(${PROJECT_NAME} PUBLIC turncommon) diff --git a/src/client/ns_turn_msg.c b/src/client/ns_turn_msg.c index 4a5531d9a..0ecc01398 100644 --- a/src/client/ns_turn_msg.c +++ b/src/client/ns_turn_msg.c @@ -575,7 +575,7 @@ int stun_is_challenge_response_str(const uint8_t *buf, size_t len, int *err_code const uint8_t *value = stun_attr_get_value(sar); if (value) { size_t vlen = (size_t)stun_attr_get_len(sar); - vlen = min(vlen, STUN_MAX_REALM_SIZE); + vlen = min(vlen, (size_t)STUN_MAX_REALM_SIZE); memcpy(realm, value, vlen); realm[vlen] = 0; { @@ -584,7 +584,7 @@ int stun_is_challenge_response_str(const uint8_t *buf, size_t len, int *err_code value = stun_attr_get_value(sar); if (value) { vlen = (size_t)stun_attr_get_len(sar); - vlen = min(vlen, STUN_MAX_SERVER_NAME_SIZE); + vlen = min(vlen, (size_t)STUN_MAX_SERVER_NAME_SIZE); if (vlen > 0) { if (server_name) { memcpy(server_name, value, vlen); @@ -600,7 +600,7 @@ int stun_is_challenge_response_str(const uint8_t *buf, size_t len, int *err_code value = stun_attr_get_value(sar); if (value) { vlen = (size_t)stun_attr_get_len(sar); - vlen = min(vlen, STUN_MAX_NONCE_SIZE); + vlen = min(vlen, (size_t)STUN_MAX_NONCE_SIZE); memcpy(nonce, value, vlen); nonce[vlen] = 0; if (oauth) { diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt index 5bad5def5..ab7ccdb9d 100644 --- a/src/server/CMakeLists.txt +++ b/src/server/CMakeLists.txt @@ -19,6 +19,8 @@ set(HEADER_FILES ns_turn_session.h ) +set_source_files_properties(${SOURCE_FILES} PROPERIES LANGUAGE CXX) + add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES} ${HEADER_FILES}) target_link_libraries(${PROJECT_NAME} PUBLIC turnclient)