Compare commits
35 Commits
test_large
...
3d2f5b644b
Author | SHA1 | Date | |
---|---|---|---|
3d2f5b644b | |||
6104d3b6d1 | |||
9ace11a0e2 | |||
f637c7c942 | |||
afb886ea7c | |||
74129cabef | |||
be8ceb861c | |||
da0f59a3f5 | |||
000254320e | |||
2fac7206d2 | |||
e8234f2a4a | |||
a0ba0b39d8 | |||
845967cf12 | |||
92b58cbfa9 | |||
5a0651eaf0 | |||
14fcaf1d7e | |||
5a0252d8d0 | |||
9c0ffd38ce | |||
b2ae9530a4 | |||
ae1fb0fde3 | |||
35ebbbef93 | |||
83e200df43 | |||
260d3b7818 | |||
4ebffd8c63 | |||
8923e09b36 | |||
ec4195f18a | |||
062ad7ae80 | |||
aad07611c7 | |||
0dcb66f143 | |||
331c25b0e6 | |||
e50844be06 | |||
4dd7c98c1a | |||
63bad2e99a | |||
9ddeea3d06 | |||
b95f0498b6 |
72
.github/workflows/cd.yml
vendored
72
.github/workflows/cd.yml
vendored
@@ -10,10 +10,40 @@ env:
|
||||
BUILD_TYPE: Release
|
||||
|
||||
jobs:
|
||||
linux-ubuntu:
|
||||
timeout-minutes: 10
|
||||
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install Dependencies
|
||||
run: sudo apt update && sudo apt -y install libsodium-dev
|
||||
|
||||
- name: Configure CMake
|
||||
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
|
||||
|
||||
- name: Build
|
||||
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j 4
|
||||
|
||||
- name: temp test
|
||||
run: ${{github.workspace}}/build/bin/mono_time_test
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ github.event.repository.name }}-ubuntu20.04-x86_64
|
||||
# TODO: do propper packing
|
||||
path: |
|
||||
${{github.workspace}}/build/bin/
|
||||
|
||||
|
||||
windows:
|
||||
timeout-minutes: 15
|
||||
|
||||
runs-on: windows-latest
|
||||
runs-on: windows-2019
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
@@ -34,10 +64,50 @@ jobs:
|
||||
- name: Build
|
||||
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j 4
|
||||
|
||||
- name: temp test
|
||||
run: ${{github.workspace}}/build/bin/mono_time_test.exe
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
if: success() || failure()
|
||||
with:
|
||||
name: ${{ github.event.repository.name }}-windows-msvc-x86_64
|
||||
# TODO: do propper packing
|
||||
path: |
|
||||
${{github.workspace}}/build/bin/
|
||||
|
||||
windows-asan:
|
||||
timeout-minutes: 15
|
||||
|
||||
runs-on: windows-2019
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install Dependencies
|
||||
run: vcpkg install libsodium:x64-windows-static pthreads:x64-windows-static
|
||||
|
||||
# setup vs env
|
||||
- uses: ilammy/msvc-dev-cmd@v1
|
||||
with:
|
||||
arch: amd64
|
||||
|
||||
- name: Configure CMake
|
||||
run: cmake -G Ninja -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static -DTOMATO_ASAN=ON -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded
|
||||
|
||||
- name: Build
|
||||
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j 4
|
||||
|
||||
- name: temp test
|
||||
run: ${{github.workspace}}/build/bin/mono_time_test.exe
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
if: success() || failure()
|
||||
with:
|
||||
name: ${{ github.event.repository.name }}-windows-msvc-asan-x86_64
|
||||
# TODO: do propper packing
|
||||
# TODO: also switch to asan dlls
|
||||
path: |
|
||||
${{github.workspace}}/build/bin/
|
||||
|
||||
|
6
.github/workflows/ci.yml
vendored
6
.github/workflows/ci.yml
vendored
@@ -29,6 +29,9 @@ jobs:
|
||||
- name: Build
|
||||
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j 4
|
||||
|
||||
- name: temp test
|
||||
run: ${{github.workspace}}/build/bin/mono_time_test
|
||||
|
||||
macos:
|
||||
timeout-minutes: 10
|
||||
|
||||
@@ -72,3 +75,6 @@ jobs:
|
||||
- name: Build
|
||||
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j 4
|
||||
|
||||
- name: temp test
|
||||
run: ${{github.workspace}}/build/bin/mono_time_test.exe
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
|
||||
cmake_minimum_required(VERSION 3.14...3.24 FATAL_ERROR)
|
||||
|
||||
# cmake setup begin
|
||||
project(tomato)
|
||||
@@ -6,7 +6,7 @@ project(tomato)
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
# defaulting to debug mode, if not specified
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
if (NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE "Debug")
|
||||
endif()
|
||||
|
||||
@@ -18,6 +18,26 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
||||
|
||||
option(TOMATO_ASAN "Build tomato with asan (gcc/clang/msvc)" OFF)
|
||||
|
||||
if (TOMATO_ASAN)
|
||||
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
|
||||
if (NOT WIN32) # exclude mingw
|
||||
link_libraries(-fsanitize=address)
|
||||
#link_libraries(-fsanitize=address,undefined)
|
||||
#link_libraries(-fsanitize=undefined)
|
||||
message("II enabled ASAN")
|
||||
else()
|
||||
message("!! can not enable ASAN on this platform (gcc/clang + win)")
|
||||
endif()
|
||||
elseif (MSVC)
|
||||
add_compile_options("/fsanitize=address")
|
||||
message("II enabled ASAN")
|
||||
else()
|
||||
message("!! can not enable ASAN on this platform")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# external libs
|
||||
add_subdirectory(./external) # before increasing warn levels, sad :(
|
||||
|
||||
@@ -33,13 +53,8 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL
|
||||
#-Wsign-conversion # Warn on sign conversions
|
||||
-Wshadow # Warn if a variable declaration shadows one from a parent context
|
||||
)
|
||||
|
||||
if (NOT WIN32)
|
||||
#link_libraries(-fsanitize=address,undefined)
|
||||
#link_libraries(-fsanitize=undefined)
|
||||
endif()
|
||||
elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
|
||||
if (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||
if (MSVC)
|
||||
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
else()
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
||||
|
2
external/solanaceae_plugin
vendored
2
external/solanaceae_plugin
vendored
Submodule external/solanaceae_plugin updated: eeab3109e7...5ae3f07c3a
2
external/solanaceae_tox
vendored
2
external/solanaceae_tox
vendored
Submodule external/solanaceae_tox updated: 89e74b35f8...c01d91144c
2
external/solanaceae_toxcore
vendored
2
external/solanaceae_toxcore
vendored
Submodule external/solanaceae_toxcore updated: d05875f489...80140ae9b6
8
external/toxcore/CMakeLists.txt
vendored
8
external/toxcore/CMakeLists.txt
vendored
@@ -127,6 +127,8 @@ add_library(toxcore STATIC
|
||||
${TOX_DIR}toxcore/tox.c
|
||||
${TOX_DIR}toxcore/tox_dispatch.c
|
||||
${TOX_DIR}toxcore/tox_dispatch.h
|
||||
${TOX_DIR}toxcore/tox_event.c
|
||||
${TOX_DIR}toxcore/tox_event.h
|
||||
${TOX_DIR}toxcore/tox_events.c
|
||||
${TOX_DIR}toxcore/tox_events.h
|
||||
${TOX_DIR}toxcore/tox.h
|
||||
@@ -203,6 +205,10 @@ add_executable(DHT_Bootstrap EXCLUDE_FROM_ALL
|
||||
${TOX_DIR}testing/misc_tools.h
|
||||
${TOX_DIR}testing/misc_tools.c
|
||||
)
|
||||
|
||||
target_link_libraries(DHT_Bootstrap toxcore)
|
||||
|
||||
add_executable(mono_time_test
|
||||
./mono_time_test.cc
|
||||
)
|
||||
target_link_libraries(mono_time_test toxcore)
|
||||
target_compile_features(mono_time_test PUBLIC cxx_std_11)
|
||||
|
@@ -6,6 +6,7 @@ CACHEDIR="$HOME/cache"
|
||||
|
||||
. ".github/scripts/flags-$CC.sh"
|
||||
add_flag -Werror
|
||||
add_flag -D_DEBUG
|
||||
add_flag -fdiagnostics-color=always
|
||||
add_flag -fno-omit-frame-pointer
|
||||
add_flag -fno-sanitize-recover=all
|
||||
|
21
external/toxcore/c-toxcore/.circleci/config.yml
vendored
21
external/toxcore/c-toxcore/.circleci/config.yml
vendored
@@ -15,7 +15,6 @@ workflows:
|
||||
- ubsan
|
||||
# Static analysis
|
||||
- clang-analyze
|
||||
- clang-tidy
|
||||
- cpplint
|
||||
- infer
|
||||
- static-analysis
|
||||
@@ -134,7 +133,6 @@ jobs:
|
||||
- run:
|
||||
apt-get install -y --no-install-recommends
|
||||
ca-certificates
|
||||
cppcheck
|
||||
g++
|
||||
llvm-dev
|
||||
- checkout
|
||||
@@ -142,7 +140,6 @@ jobs:
|
||||
- run: other/analysis/check_includes
|
||||
- run: other/analysis/check_logger_levels
|
||||
- run: other/analysis/run-clang
|
||||
- run: other/analysis/run-cppcheck
|
||||
- run: other/analysis/run-gcc
|
||||
|
||||
clang-analyze:
|
||||
@@ -156,24 +153,6 @@ jobs:
|
||||
- run: git submodule update --init --recursive
|
||||
- run: other/analysis/run-clang-analyze
|
||||
|
||||
clang-tidy:
|
||||
working_directory: ~/work
|
||||
docker:
|
||||
- image: ubuntu
|
||||
|
||||
steps:
|
||||
- run: *apt_install
|
||||
- run:
|
||||
apt-get install -y --no-install-recommends
|
||||
ca-certificates
|
||||
clang-tidy-14
|
||||
- checkout
|
||||
- run: git submodule update --init --recursive
|
||||
- run:
|
||||
other/analysis/run-clang-tidy ||
|
||||
other/analysis/run-clang-tidy ||
|
||||
other/analysis/run-clang-tidy
|
||||
|
||||
cpplint:
|
||||
working_directory: ~/work
|
||||
docker:
|
||||
|
15
external/toxcore/c-toxcore/.cirrus.yml
vendored
15
external/toxcore/c-toxcore/.cirrus.yml
vendored
@@ -9,7 +9,6 @@ bazel-opt_task:
|
||||
- /src/workspace/tools/inject-repo c-toxcore
|
||||
test_all_script:
|
||||
- cd /src/workspace && bazel test -k
|
||||
--config=ci
|
||||
--build_tag_filters=-haskell
|
||||
--test_tag_filters=-haskell
|
||||
--
|
||||
@@ -26,7 +25,6 @@ bazel-dbg_task:
|
||||
- /src/workspace/tools/inject-repo c-toxcore
|
||||
test_all_script:
|
||||
- cd /src/workspace && bazel test -k
|
||||
--config=ci
|
||||
--build_tag_filters=-haskell
|
||||
--test_tag_filters=-haskell
|
||||
--
|
||||
@@ -43,8 +41,19 @@ cimple_task:
|
||||
- /src/workspace/tools/inject-repo c-toxcore
|
||||
test_all_script:
|
||||
- cd /src/workspace && bazel test -k
|
||||
--config=ci
|
||||
--build_tag_filters=haskell
|
||||
--test_tag_filters=haskell
|
||||
--
|
||||
//c-toxcore/...
|
||||
|
||||
freebsd_task:
|
||||
container:
|
||||
image: toxchat/freebsd:latest
|
||||
cpu: 2
|
||||
memory: 4G
|
||||
kvm: true
|
||||
configure_script:
|
||||
- git submodule update --init --recursive
|
||||
- cd .. && mv cirrus-ci-build /work/c-toxcore && mkdir cirrus-ci-build
|
||||
test_all_script:
|
||||
- cd /work/c-toxcore && .github/scripts/cmake-freebsd
|
||||
|
9
external/toxcore/c-toxcore/.clang-tidy
vendored
9
external/toxcore/c-toxcore/.clang-tidy
vendored
@@ -1,4 +1,5 @@
|
||||
# vim:ft=yaml
|
||||
HeaderFilterRegex: "/c-toxcore/[^/]+/[^.].+"
|
||||
CheckOptions:
|
||||
- key: readability-identifier-naming.ClassCase
|
||||
value: Camel_Snake_Case
|
||||
@@ -35,6 +36,12 @@ CheckOptions:
|
||||
value: lower_case
|
||||
|
||||
- key: llvmlibc-restrict-system-libc-headers.Includes
|
||||
value: "arpa/inet.h,assert.h,ctype.h,errno.h,fcntl.h,getopt.h,libconfig.h,linux/netdevice.h,math.h,netdb.h,netinet/in.h,opus.h,pthread.h,signal.h,sodium/crypto_scalarmult_curve25519.h,sodium.h,sodium/randombytes.h,stdio.h,stdlib.h,string.h,sys/ioctl.h,syslog.h,sys/resource.h,sys/socket.h,sys/stat.h,sys/time.h,sys/types.h,time.h,unistd.h,vpx/vp8cx.h,vpx/vp8dx.h,vpx/vpx_decoder.h,vpx/vpx_encoder.h,vpx/vpx_image.h"
|
||||
value: "arpa/inet.h,assert.h,ctype.h,errno.h,fcntl.h,getopt.h,libconfig.h,limits.h,linux/if.h,math.h,netdb.h,netinet/in.h,opus.h,pthread.h,signal.h,sodium/crypto_scalarmult_curve25519.h,sodium.h,sodium/randombytes.h,stdarg.h,stdbool.h,stddef.h,stdint.h,stdio.h,stdlib.h,string.h,sys/ioctl.h,syslog.h,sys/resource.h,sys/socket.h,sys/stat.h,sys/time.h,sys/types.h,time.h,unistd.h,vpx/vp8cx.h,vpx/vp8dx.h,vpx/vpx_decoder.h,vpx/vpx_encoder.h,vpx/vpx_image.h"
|
||||
- key: hicpp-signed-bitwise.IgnorePositiveIntegerLiterals
|
||||
value: true
|
||||
- key: concurrency-mt-unsafe.FunctionSet
|
||||
value: posix
|
||||
- key: misc-include-cleaner.IgnoreHeaders
|
||||
value: "pthread.h;stdbool.h;stddef.h;stdint.;stdint.h;stdint...;cstdint;sodium.*;sys/.*;unistd.h;opus.*;vpx.*;attributes.h;tox_struct.h"
|
||||
- key: readability-function-cognitive-complexity.Threshold
|
||||
value: 153 # TODO(iphydf): Decrease. tox_new is the highest at the moment.
|
||||
|
2
external/toxcore/c-toxcore/.dockerignore
vendored
Normal file
2
external/toxcore/c-toxcore/.dockerignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/_build
|
||||
/_install
|
@@ -11,10 +11,7 @@ add_ld_flag -Wl,-z,defs
|
||||
# Make compilation error on a warning
|
||||
add_flag -Werror
|
||||
|
||||
add_config_flag --with-nacl-libs="$CACHEDIR/lib/amd64"
|
||||
add_config_flag --with-nacl-headers="$CACHEDIR/include/amd64"
|
||||
add_config_flag --disable-ipv6
|
||||
add_config_flag --enable-nacl
|
||||
add_config_flag --enable-daemon
|
||||
add_config_flag --with-log-level=TRACE
|
||||
|
||||
|
55
external/toxcore/c-toxcore/.github/scripts/cmake-alpine-s390x
vendored
Executable file
55
external/toxcore/c-toxcore/.github/scripts/cmake-alpine-s390x
vendored
Executable file
@@ -0,0 +1,55 @@
|
||||
#!/bin/bash
|
||||
# Copyright (C) 2018-2023 nurupo
|
||||
|
||||
# Toxcore building
|
||||
|
||||
set -eux
|
||||
|
||||
cd .. # /work
|
||||
. cmake-alpine-run.sh
|
||||
|
||||
# === Get VM ready to build the code ===
|
||||
|
||||
start_vm
|
||||
|
||||
RUN apk add cmake g++ ninja
|
||||
|
||||
mv c-toxcore /
|
||||
|
||||
# Copy over toxcore code from host to qemu
|
||||
scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P "$SSH_PORT" -r /c-toxcore root@localhost:~
|
||||
|
||||
cd /c-toxcore
|
||||
. ".github/scripts/flags-gcc.sh"
|
||||
|
||||
# Make compilation error on a warning
|
||||
add_flag -Werror
|
||||
|
||||
# - disabling toxav because vpx doesn't work on s390x.
|
||||
# - disabling bootstrap daemons because we don't need them for testing (saving time).
|
||||
# - disabling shared libraries because it saves a lot of time on building PIC objects.
|
||||
# - enable unity build because it saves a lot of time as well (fewer objects to build).
|
||||
RUN "cmake -B_build -Hc-toxcore -GNinja \
|
||||
-DCMAKE_C_FLAGS='$C_FLAGS' \
|
||||
-DCMAKE_CXX_FLAGS='$CXX_FLAGS' \
|
||||
-DCMAKE_EXE_LINKER_FLAGS='$LD_FLAGS' \
|
||||
-DCMAKE_SHARED_LINKER_FLAGS='$LD_FLAGS' \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH='_install' \
|
||||
-DCMAKE_UNITY_BUILD=ON \
|
||||
-DMIN_LOGGER_LEVEL=TRACE \
|
||||
-DNON_HERMETIC_TESTS=ON \
|
||||
-DENABLE_SHARED=OFF \
|
||||
-DBUILD_TOXAV=OFF \
|
||||
-DDHT_BOOTSTRAP=OFF \
|
||||
-DBOOTSTRAP_DAEMON=OFF \
|
||||
-DSTRICT_ABI=ON \
|
||||
-DTEST_TIMEOUT_SECONDS=90 \
|
||||
-DUSE_IPV6=OFF \
|
||||
-DAUTOTEST=ON"
|
||||
|
||||
RUN 'cmake --build _build --parallel 2 --target install -- -k 0'
|
||||
RUN 'cd _build && ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:1 --timeout 90 || true' &
|
||||
|
||||
# Give the tests 5 minutes to run. Sometimes, the per-test timeout doesn't
|
||||
# work, so we put a global timeout here for everything.
|
||||
sleep 300
|
58
external/toxcore/c-toxcore/.github/scripts/cmake-freebsd
vendored
Executable file
58
external/toxcore/c-toxcore/.github/scripts/cmake-freebsd
vendored
Executable file
@@ -0,0 +1,58 @@
|
||||
#!/bin/bash
|
||||
# Copyright (C) 2018-2023 nurupo
|
||||
|
||||
# Toxcore building
|
||||
|
||||
set -eux
|
||||
|
||||
cd .. # /work
|
||||
. cmake-freebsd-run.sh
|
||||
|
||||
# === Get VM ready to build the code ===
|
||||
|
||||
# Unpack image only if it's compressed.
|
||||
if [ -f "$IMAGE_NAME.gz" ]; then
|
||||
gunzip "$IMAGE_NAME.gz"
|
||||
fi
|
||||
|
||||
mv c-toxcore /
|
||||
|
||||
start_vm
|
||||
|
||||
# Copy over toxcore code from host to qemu
|
||||
scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P "$SSH_PORT" -r /c-toxcore root@localhost:~
|
||||
|
||||
RUN ls -lh
|
||||
|
||||
cd /c-toxcore
|
||||
. '.github/scripts/flags-clang.sh'
|
||||
|
||||
add_ld_flag -Wl,-z,defs
|
||||
|
||||
# Make compilation error on a warning.
|
||||
add_flag -Werror
|
||||
|
||||
# This triggers on FreeBSD's clang.
|
||||
add_flag -Wno-format
|
||||
add_flag -Wno-unsafe-buffer-usage
|
||||
|
||||
RUN "cmake -B_build -Hc-toxcore \
|
||||
-DCMAKE_C_FLAGS='$C_FLAGS' \
|
||||
-DCMAKE_CXX_FLAGS='$CXX_FLAGS' \
|
||||
-DCMAKE_EXE_LINKER_FLAGS='$LD_FLAGS' \
|
||||
-DCMAKE_SHARED_LINKER_FLAGS='$LD_FLAGS' \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH='_install' \
|
||||
-DMIN_LOGGER_LEVEL=TRACE \
|
||||
-DMUST_BUILD_TOXAV=ON \
|
||||
-DNON_HERMETIC_TESTS=ON \
|
||||
-DSTRICT_ABI=ON \
|
||||
-DTEST_TIMEOUT_SECONDS=120 \
|
||||
-DUSE_IPV6=OFF \
|
||||
-DAUTOTEST=ON"
|
||||
|
||||
# We created the VM with the same number of cores as the host, so the host-ran `nproc` here is fine.
|
||||
RUN 'cmake --build _build --parallel "$NPROC" --target install -- -k'
|
||||
RUN 'cd _build && ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:2 --timeout 120 || true'
|
||||
|
||||
# Gracefully shut down the VM.
|
||||
stop_vm
|
@@ -1,52 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Copyright (C) 2018-2021 nurupo
|
||||
|
||||
# Toxcore building
|
||||
|
||||
set -eux
|
||||
|
||||
if [ "$PWD" != "/work" ]; then
|
||||
cd ..
|
||||
mv c-toxcore /
|
||||
mkdir c-toxcore
|
||||
cd /work
|
||||
fi
|
||||
|
||||
. cmake-freebsd-run.sh
|
||||
|
||||
# === Get VM ready to build the code ===
|
||||
|
||||
gunzip "$IMAGE_NAME.gz"
|
||||
|
||||
start_vm
|
||||
|
||||
# Copy over toxcore code from host to qemu
|
||||
scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -P "$SSH_PORT" -r /c-toxcore root@localhost:~
|
||||
|
||||
RUN ls -lh
|
||||
|
||||
cd /c-toxcore
|
||||
. ".github/scripts/flags-clang.sh"
|
||||
|
||||
add_ld_flag -Wl,-z,defs
|
||||
|
||||
# Make compilation error on a warning
|
||||
add_flag -Werror
|
||||
|
||||
RUN 'cmake -B_build -Hc-toxcore \
|
||||
-DCMAKE_C_FLAGS="$C_FLAGS" \
|
||||
-DCMAKE_CXX_FLAGS="$CXX_FLAGS" \
|
||||
-DCMAKE_EXE_LINKER_FLAGS="$LD_FLAGS" \
|
||||
-DCMAKE_SHARED_LINKER_FLAGS="$LD_FLAGS" \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH="_install" \
|
||||
-DMIN_LOGGER_LEVEL=TRACE \
|
||||
-DMUST_BUILD_TOXAV=ON \
|
||||
-DNON_HERMETIC_TESTS=ON \
|
||||
-DSTRICT_ABI=ON \
|
||||
-DTEST_TIMEOUT_SECONDS=90 \
|
||||
-DUSE_IPV6=OFF \
|
||||
-DAUTOTEST=ON'
|
||||
|
||||
# We created the VM with the same number of cores as the host, so the host-ran `nproc` here is fine
|
||||
RUN 'gmake "-j$NPROC" -k install -C_build'
|
||||
RUN 'gmake "-j$NPROC" test ARGS="-j50" -C_build || true'
|
@@ -65,6 +65,8 @@ add_cxx_flag -Wno-c++98-compat-pedantic
|
||||
add_cxx_flag -Wno-c99-extensions
|
||||
# We're C-compatible, so use C style casts.
|
||||
add_cxx_flag -Wno-old-style-cast
|
||||
# GTest does this.
|
||||
add_cxx_flag -Wno-global-constructors
|
||||
|
||||
# Downgrade to warning so we still see it.
|
||||
add_flag -Wno-error=unreachable-code
|
||||
|
@@ -14,7 +14,7 @@ add_flag --coverage
|
||||
add_c_flag -fno-inline -fno-omit-frame-pointer
|
||||
|
||||
# Show useful stack traces on crash.
|
||||
add_flag -fsanitize=undefined -fno-sanitize-recover=all
|
||||
add_flag -fsanitize=undefined -fno-sanitize-recover=all -D_DEBUG
|
||||
|
||||
# In test code (_test.cc and libgtest), throw away all debug information.
|
||||
# We only care about stack frames inside toxcore (which is C). Without this,
|
||||
|
@@ -28,8 +28,6 @@ add_flag -O3 -march=native
|
||||
|
||||
# Warn on non-ISO C.
|
||||
add_c_flag -pedantic
|
||||
add_c_flag -std=c99
|
||||
add_cxx_flag -std=c++11
|
||||
|
||||
add_flag -g3
|
||||
add_flag -ftrapv
|
||||
|
@@ -1,12 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -exu
|
||||
set -exu -o pipefail
|
||||
|
||||
LOCAL="${1:-}"
|
||||
|
||||
readarray -t FILES <<<"$(git ls-files)"
|
||||
|
||||
tar c "${FILES[@]}" | docker build -f other/bootstrap_daemon/docker/Dockerfile -t toxchat/bootstrap-node -
|
||||
if ! tar c "${FILES[@]}" | docker build -f other/bootstrap_daemon/docker/Dockerfile -t toxchat/bootstrap-node - 2>&1 | tee docker-build.log; then
|
||||
grep -o "::error.*::[a-f0-9]* /usr/local/bin/tox-bootstrapd" docker-build.log
|
||||
false
|
||||
fi
|
||||
docker tag toxchat/bootstrap-node:latest toxchat/bootstrap-node:"$(other/print-version)"
|
||||
|
||||
sudo useradd \
|
||||
|
70
external/toxcore/c-toxcore/.github/settings.yml
vendored
70
external/toxcore/c-toxcore/.github/settings.yml
vendored
@@ -1,70 +0,0 @@
|
||||
---
|
||||
_extends: .github
|
||||
|
||||
repository:
|
||||
name: c-toxcore
|
||||
description: The future of online communications.
|
||||
homepage: https://tox.chat/
|
||||
topics: toxcore, network, p2p, security, encryption, cryptography
|
||||
|
||||
branches:
|
||||
- name: "master"
|
||||
protection:
|
||||
required_status_checks:
|
||||
contexts:
|
||||
- "bazel-asan"
|
||||
- "bazel-dbg"
|
||||
- "bazel-opt"
|
||||
- "bazel-tsan"
|
||||
- "build-compcert"
|
||||
- "build-macos"
|
||||
- "build-nacl"
|
||||
- "build-tcc"
|
||||
- "build-win32"
|
||||
- "build-win64"
|
||||
- "CodeFactor"
|
||||
- "common / buildifier"
|
||||
- "coverage-linux"
|
||||
- "ci/circleci: asan"
|
||||
- "ci/circleci: clang-analyze"
|
||||
- "ci/circleci: clang-tidy"
|
||||
- "ci/circleci: cpplint"
|
||||
- "ci/circleci: infer"
|
||||
- "ci/circleci: msan"
|
||||
- "ci/circleci: static-analysis"
|
||||
- "ci/circleci: tsan"
|
||||
- "ci/circleci: ubsan"
|
||||
- "cimple"
|
||||
- "code-review/reviewable"
|
||||
- "continuous-integration/appveyor/pr"
|
||||
- "docker-bootstrap-node"
|
||||
- "docker-bootstrap-node-websocket"
|
||||
- "docker-toxcore-js"
|
||||
- "mypy"
|
||||
- "sonar-scan"
|
||||
|
||||
# Labels specific to c-toxcore.
|
||||
labels:
|
||||
- name: "bootstrap"
|
||||
color: "#01707f"
|
||||
description: "Bootstrap"
|
||||
|
||||
- name: "crypto"
|
||||
color: "#1d76db"
|
||||
description: "Crypto"
|
||||
|
||||
- name: "file transfers"
|
||||
color: "#e02abf"
|
||||
description: "File Transfers"
|
||||
|
||||
- name: "messenger"
|
||||
color: "#d93f0b"
|
||||
description: "Messenger"
|
||||
|
||||
- name: "network"
|
||||
color: "#d4c5f9"
|
||||
description: "Network"
|
||||
|
||||
- name: "toxav"
|
||||
color: "#0052cc"
|
||||
description: "Audio/video"
|
286
external/toxcore/c-toxcore/.github/workflows/ci.yml
vendored
286
external/toxcore/c-toxcore/.github/workflows/ci.yml
vendored
@@ -13,14 +13,115 @@ jobs:
|
||||
common:
|
||||
uses: TokTok/ci-tools/.github/workflows/common-ci.yml@master
|
||||
|
||||
analysis:
|
||||
strategy:
|
||||
matrix:
|
||||
tool: [autotools, clang-tidy, compcert, cppcheck, doxygen, misra, tcc, tokstyle]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Docker Build
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
file: other/docker/${{ matrix.tool }}/Dockerfile
|
||||
|
||||
coverage-linux:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Build, test, and upload coverage
|
||||
run: other/docker/coverage/run
|
||||
|
||||
generate-events:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Run generate_event_c
|
||||
run: |
|
||||
other/event_tooling/run
|
||||
git diff --exit-code
|
||||
|
||||
cimplefmt:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Run cimplefmt
|
||||
run: other/docker/cimplefmt/run -u $(find tox* -name "*.[ch]")
|
||||
|
||||
build-android:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- run: .github/scripts/cmake-android armeabi-v7a
|
||||
- run: .github/scripts/cmake-android arm64-v8a
|
||||
- run: .github/scripts/cmake-android x86
|
||||
- run: .github/scripts/cmake-android x86_64
|
||||
|
||||
build-macos:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Build and test
|
||||
run: .github/scripts/cmake-osx
|
||||
|
||||
build-msvc:
|
||||
strategy:
|
||||
matrix:
|
||||
version: [2019, 2022]
|
||||
runs-on: windows-${{ matrix.version }}
|
||||
env:
|
||||
VCPKG_ROOT: "C:/vcpkg"
|
||||
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Export GitHub Actions cache environment variables
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
||||
- name: Configure CMake
|
||||
run: cmake --preset windows-default
|
||||
- name: Build
|
||||
run: cmake --build _build
|
||||
- name: Test
|
||||
run: |
|
||||
cd _build
|
||||
ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6 --build-config Debug
|
||||
|
||||
build-windows:
|
||||
strategy:
|
||||
matrix:
|
||||
bits: [32, 64]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Cross compilation
|
||||
run: .github/scripts/cmake-win${{ matrix.bits }} script
|
||||
|
||||
mypy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Set up Python 3.9
|
||||
uses: actions/setup-python@v1
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: 3.9
|
||||
- name: Install mypy
|
||||
@@ -29,184 +130,3 @@ jobs:
|
||||
run: |
|
||||
(find . -name "*.py" -and -not -name "conanfile.py"; grep -lR '^#!.*python') \
|
||||
| xargs -n1 -P8 mypy --strict
|
||||
|
||||
doxygen:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
- name: Docker Build
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
file: other/docker/doxygen/Dockerfile
|
||||
|
||||
tokstyle:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
- name: Docker Build
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
file: other/docker/tokstyle/Dockerfile
|
||||
|
||||
misra:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
- name: Docker Build
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
file: other/docker/misra/Dockerfile
|
||||
|
||||
cimplefmt:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Run cimplefmt
|
||||
run: other/docker/cimplefmt/run -u $(find tox* -name "*.[ch]")
|
||||
|
||||
build-nacl:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
- name: Docker Build
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
file: other/docker/autotools/Dockerfile
|
||||
|
||||
build-win32:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Cross compilation
|
||||
run: .github/scripts/cmake-win32 script
|
||||
|
||||
build-win64:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Cross compilation
|
||||
run: .github/scripts/cmake-win64 script
|
||||
|
||||
build-freebsd:
|
||||
runs-on: ubuntu-latest
|
||||
container: toxchat/freebsd
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Build on FreeBSD
|
||||
run: .github/scripts/cmake-freebsd-stage2
|
||||
|
||||
build-macos:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Build and test
|
||||
run: .github/scripts/cmake-osx
|
||||
|
||||
coverage-linux:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Build, test, and upload coverage
|
||||
run: .github/scripts/coverage-linux
|
||||
|
||||
build-tcc:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Install dependencies
|
||||
run:
|
||||
sudo apt-get install -y --no-install-recommends
|
||||
tcc
|
||||
libconfig-dev
|
||||
libopus-dev
|
||||
libsodium-dev
|
||||
libvpx-dev
|
||||
- name: Build with TCC
|
||||
run:
|
||||
tcc
|
||||
-Dinline=static
|
||||
-o send_message_test
|
||||
-Wall -Werror
|
||||
-bench -g
|
||||
auto_tests/auto_test_support.c
|
||||
auto_tests/send_message_test.c
|
||||
testing/misc_tools.c
|
||||
toxav/*.c
|
||||
toxcore/*.c
|
||||
toxcore/*/*.c
|
||||
toxencryptsave/*.c
|
||||
third_party/cmp/*.c
|
||||
$(pkg-config --cflags --libs libsodium opus vpx)
|
||||
- name: Run the test
|
||||
run: "./send_message_test | grep 'tox clients connected'"
|
||||
- name: Build amalgamation file with TCC
|
||||
run:
|
||||
other/make_single_file
|
||||
auto_tests/auto_test_support.c
|
||||
auto_tests/send_message_test.c
|
||||
testing/misc_tools.c |
|
||||
tcc -
|
||||
-o send_message_test
|
||||
-Wall -Werror
|
||||
-bench -g
|
||||
$(pkg-config --cflags --libs libsodium opus vpx)
|
||||
- name: Run the test again
|
||||
run: "./send_message_test | grep 'tox clients connected'"
|
||||
|
||||
build-compcert:
|
||||
runs-on: ubuntu-latest
|
||||
container: toxchat/compcert
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Build with CompCert
|
||||
run:
|
||||
ccomp
|
||||
-o send_message_test
|
||||
-Wall -Werror
|
||||
-Wno-c11-extensions
|
||||
-Wno-unknown-pragmas
|
||||
-Wno-unused-variable
|
||||
-fstruct-passing -fno-unprototyped -g
|
||||
auto_tests/auto_test_support.c
|
||||
auto_tests/send_message_test.c
|
||||
testing/misc_tools.c
|
||||
toxav/*.c
|
||||
toxcore/*.c
|
||||
toxcore/*/*.c
|
||||
toxencryptsave/*.c
|
||||
third_party/cmp/*.c
|
||||
-D__COMPCERT__ -DDISABLE_VLA -Dinline=
|
||||
-lpthread $(pkg-config --cflags --libs libsodium opus vpx)
|
||||
- name: Run the test
|
||||
run: "./send_message_test | grep 'tox clients connected'"
|
||||
|
||||
build-android:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- run: .github/scripts/cmake-android armeabi-v7a
|
||||
- run: .github/scripts/cmake-android arm64-v8a
|
||||
- run: .github/scripts/cmake-android x86
|
||||
- run: .github/scripts/cmake-android x86_64
|
||||
|
@@ -6,17 +6,22 @@ on:
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
# Cancel old PR builds when pushing new commits.
|
||||
concurrency:
|
||||
group: docker-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
docker-bootstrap-node:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Login to DockerHub
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Docker Build
|
||||
@@ -33,15 +38,15 @@ jobs:
|
||||
needs: [docker-bootstrap-node]
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Login to DockerHub
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: "{{defaultContext}}:other/bootstrap_daemon/websocket"
|
||||
push: ${{ github.event_name == 'push' }}
|
||||
@@ -52,17 +57,17 @@ jobs:
|
||||
docker-clusterfuzz:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Login to DockerHub
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: "."
|
||||
file: .clusterfuzzlite/Dockerfile
|
||||
@@ -75,15 +80,15 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Login to DockerHub
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
file: testing/Dockerfile
|
||||
push: ${{ github.event_name == 'push' }}
|
||||
@@ -95,15 +100,15 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Login to DockerHub
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
file: other/emscripten/Dockerfile
|
||||
push: ${{ github.event_name == 'push' }}
|
||||
@@ -115,22 +120,22 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
driver: docker
|
||||
- name: Login to DockerHub
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Build toxchat/c-toxcore:sources
|
||||
uses: docker/build-push-action@v2
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
file: other/docker/sources/Dockerfile
|
||||
tags: toxchat/c-toxcore:sources
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
file: other/docker/esp32/Dockerfile
|
||||
push: ${{ github.event_name == 'push' }}
|
||||
@@ -142,15 +147,15 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Login to DockerHub
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: "{{defaultContext}}:other/docker/windows"
|
||||
push: ${{ github.event_name == 'push' }}
|
||||
@@ -166,15 +171,15 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Login to DockerHub
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: "{{defaultContext}}:other/docker/windows"
|
||||
push: ${{ github.event_name == 'push' }}
|
||||
|
43
external/toxcore/c-toxcore/.github/workflows/post-submit.yml
vendored
Normal file
43
external/toxcore/c-toxcore/.github/workflows/post-submit.yml
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
name: post-submit
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
build-alpine-s390x:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Docker Build
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
file: other/docker/alpine-s390x/Dockerfile
|
||||
|
||||
docker-coverage:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
driver: docker
|
||||
- name: Login to DockerHub
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Build toxchat/c-toxcore:sources
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
file: other/docker/sources/Dockerfile
|
||||
tags: toxchat/c-toxcore:sources
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
file: other/docker/coverage/Dockerfile
|
||||
push: ${{ github.event_name == 'push' }}
|
||||
tags: toxchat/c-toxcore:coverage
|
||||
cache-from: type=registry,ref=toxchat/c-toxcore:coverage
|
||||
cache-to: type=inline
|
@@ -6,22 +6,28 @@ on:
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
# Cancel old PR builds when pushing new commits.
|
||||
concurrency:
|
||||
group: scan-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
sonar-scan:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
SONAR_SCANNER_VERSION: 4.4.0.2170
|
||||
SONAR_SCANNER_VERSION: 5.0.1.3006
|
||||
SONAR_SERVER_URL: "https://sonarcloud.io"
|
||||
BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
||||
submodules: recursive
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v1
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 11
|
||||
distribution: "zulu"
|
||||
java-version: 17
|
||||
- name: Download and set up sonar-scanner
|
||||
env:
|
||||
SONAR_SCANNER_DOWNLOAD_URL: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${{ env.SONAR_SCANNER_VERSION }}-linux.zip
|
||||
|
2
external/toxcore/c-toxcore/.gitignore
vendored
2
external/toxcore/c-toxcore/.gitignore
vendored
@@ -14,6 +14,8 @@ Thumbs.db
|
||||
/_build
|
||||
/_install
|
||||
/tox-0.0.0*
|
||||
/.vs
|
||||
/CppProperties.json
|
||||
CMakeCache.txt
|
||||
CMakeFiles
|
||||
Makefile
|
||||
|
7
external/toxcore/c-toxcore/BUILD.bazel
vendored
7
external/toxcore/c-toxcore/BUILD.bazel
vendored
@@ -1,25 +1,26 @@
|
||||
load("@rules_cc//cc:defs.bzl", "cc_library")
|
||||
load("//tools/project:build_defs.bzl", "project")
|
||||
|
||||
package(features = ["layering_check"])
|
||||
|
||||
project()
|
||||
project(license = "gpl3-https")
|
||||
|
||||
genrule(
|
||||
name = "public_headers",
|
||||
srcs = [
|
||||
"//c-toxcore/toxav:toxav.h",
|
||||
"//c-toxcore/toxcore:tox.h",
|
||||
"//c-toxcore/toxcore:tox_private.h",
|
||||
"//c-toxcore/toxencryptsave:toxencryptsave.h",
|
||||
],
|
||||
outs = [
|
||||
"tox/toxav.h",
|
||||
"tox/tox.h",
|
||||
"tox/tox_private.h",
|
||||
"tox/toxencryptsave.h",
|
||||
],
|
||||
cmd = """
|
||||
cp $(location //c-toxcore/toxav:toxav.h) $(GENDIR)/c-toxcore/tox/toxav.h
|
||||
cp $(location //c-toxcore/toxcore:tox.h) $(GENDIR)/c-toxcore/tox/tox.h
|
||||
cp $(location //c-toxcore/toxcore:tox_private.h) $(GENDIR)/c-toxcore/tox/tox_private.h
|
||||
cp $(location //c-toxcore/toxencryptsave:toxencryptsave.h) $(GENDIR)/c-toxcore/tox/toxencryptsave.h
|
||||
""",
|
||||
visibility = ["//visibility:public"],
|
||||
|
171
external/toxcore/c-toxcore/CMakeLists.txt
vendored
171
external/toxcore/c-toxcore/CMakeLists.txt
vendored
@@ -14,8 +14,8 @@
|
||||
#
|
||||
################################################################################
|
||||
|
||||
cmake_minimum_required(VERSION 2.8.12)
|
||||
cmake_policy(VERSION 2.8.12)
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
cmake_policy(VERSION 3.16)
|
||||
project(toxcore)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${toxcore_SOURCE_DIR}/cmake)
|
||||
@@ -76,23 +76,51 @@ if(APPLE)
|
||||
endif()
|
||||
|
||||
enable_testing()
|
||||
find_package(GTest)
|
||||
|
||||
set(CMAKE_MACOSX_RPATH ON)
|
||||
|
||||
if(${CMAKE_VERSION} VERSION_LESS "3.1.0")
|
||||
if(NOT MSVC)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
|
||||
endif()
|
||||
else()
|
||||
# Set standard version for compiler.
|
||||
# Set standard version for compiler.
|
||||
if(MSVC AND MSVC_TOOLSET_VERSION LESS 143)
|
||||
# https://developercommunity.visualstudio.com/t/older-winsdk-headers-are-incompatible-with-zcprepr/1593479
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_C_EXTENSIONS OFF)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
else()
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
endif()
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_C_EXTENSIONS OFF)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
message(STATUS "Supported C compiler features = ${CMAKE_C_COMPILE_FEATURES}")
|
||||
message(STATUS "Supported C++ compiler features = ${CMAKE_CXX_COMPILE_FEATURES}")
|
||||
message(STATUS "Supported C compiler features = ${CMAKE_C_COMPILE_FEATURES}")
|
||||
message(STATUS "Supported C++ compiler features = ${CMAKE_CXX_COMPILE_FEATURES}")
|
||||
|
||||
# Enable some warnings if we know the compiler.
|
||||
if(MSVC)
|
||||
add_compile_options(/W4 /analyze)
|
||||
add_compile_options(/wd4100) # unreferenced formal parameter
|
||||
add_compile_options(/wd4267) # narrowing conversion
|
||||
add_compile_options(/wd4244) # narrowing conversion
|
||||
add_compile_options(/wd4127) # conditional expression is constant
|
||||
add_compile_options(/wd4995) # #pragma deprecated
|
||||
add_compile_options(/wd4018) # signed/unsigned compare
|
||||
add_compile_options(/wd4310) # cast truncates constant value
|
||||
add_compile_options(/wd4389) # signed/unsigned compare
|
||||
add_compile_options(/wd4245) # signed/unsigned assign/return/function call
|
||||
add_compile_options(/wd4200) # nonstandard extension used: zero-sized array in struct/union
|
||||
add_compile_options(/wd4702) # unreachable code
|
||||
add_compile_options(/wd6340) # unsigned int passed to signed parameter
|
||||
add_compile_options(/wd6326) # potential comparison of a constant with another constant
|
||||
|
||||
# TODO(iphydf): Look into these
|
||||
add_compile_options(/wd4996) # use WSAAddressToStringW() instead of WSAAddressToStringA()
|
||||
add_compile_options(/wd6255) # don't use alloca
|
||||
add_compile_options(/wd6385) # reading invalid data
|
||||
add_compile_options(/wd6001) # using uninitialized memory
|
||||
add_compile_options(/wd6101) # returning uninitialized memory
|
||||
add_compile_options(/wd6386) # buffer overrun
|
||||
add_compile_options(/wd6011) # NULL dereference
|
||||
add_compile_options(/wd6031) # sscanf return value ignored
|
||||
add_compile_options(/wd6387) # passing NULL to fwrite
|
||||
endif()
|
||||
|
||||
set(MIN_LOGGER_LEVEL "" CACHE STRING "Logging level to use (TRACE, DEBUG, INFO, WARNING, ERROR)")
|
||||
@@ -113,16 +141,11 @@ if(NOT USE_IPV6)
|
||||
add_definitions(-DUSE_IPV6=0)
|
||||
endif()
|
||||
|
||||
option(USE_TEST_NETWORK "Use a separate test network with different packet IDs" OFF)
|
||||
if(USE_TEST_NETWORK)
|
||||
add_definitions(-DUSE_TEST_NETWORK=1)
|
||||
endif()
|
||||
|
||||
option(BUILD_MISC_TESTS "Build additional tests and utilities" OFF)
|
||||
option(BUILD_FUN_UTILS "Build additional just for fun utilities" OFF)
|
||||
|
||||
option(AUTOTEST "Enable autotests (mainly for CI)" OFF)
|
||||
if (AUTOTEST)
|
||||
if(AUTOTEST)
|
||||
option(NON_HERMETIC_TESTS "Whether to build and run tests that depend on an internet connection" OFF)
|
||||
option(PROXY_TEST "Enable proxy test (needs HTTP/SOCKS5 proxy on port 8080/8081)" OFF)
|
||||
endif()
|
||||
@@ -322,6 +345,8 @@ set(toxcore_SOURCES
|
||||
toxcore/tox.c
|
||||
toxcore/tox_dispatch.c
|
||||
toxcore/tox_dispatch.h
|
||||
toxcore/tox_event.c
|
||||
toxcore/tox_event.h
|
||||
toxcore/tox_events.c
|
||||
toxcore/tox_events.h
|
||||
toxcore/tox.h
|
||||
@@ -331,12 +356,20 @@ set(toxcore_SOURCES
|
||||
toxcore/tox_unpack.h
|
||||
toxcore/util.c
|
||||
toxcore/util.h)
|
||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${LIBSODIUM_LIBRARIES})
|
||||
if(TARGET unofficial-sodium::sodium)
|
||||
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} unofficial-sodium::sodium)
|
||||
else()
|
||||
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${LIBSODIUM_LIBRARIES})
|
||||
set(toxcore_LINK_DIRECTORIES ${toxcore_LINK_DIRECTORIES} ${LIBSODIUM_LIBRARY_DIRS})
|
||||
set(toxcore_INCLUDE_DIRECTORIES ${toxcore_INCLUDE_DIRECTORIES} ${LIBSODIUM_INCLUDE_DIRS})
|
||||
set(toxcore_COMPILE_OPTIONS ${toxcore_COMPILE_OPTIONS} ${LIBSODIUM_CFLAGS_OTHER})
|
||||
endif()
|
||||
set(toxcore_PKGCONFIG_REQUIRES ${toxcore_PKGCONFIG_REQUIRES} libsodium)
|
||||
set(toxcore_API_HEADERS
|
||||
${toxcore_SOURCE_DIR}/toxcore/tox.h^tox
|
||||
${toxcore_SOURCE_DIR}/toxcore/tox_events.h^tox
|
||||
${toxcore_SOURCE_DIR}/toxcore/tox_dispatch.h^tox)
|
||||
${toxcore_SOURCE_DIR}/toxcore/tox_dispatch.h^tox
|
||||
${toxcore_SOURCE_DIR}/toxcore/tox_private.h^tox)
|
||||
|
||||
################################################################################
|
||||
#
|
||||
@@ -366,7 +399,14 @@ if(BUILD_TOXAV)
|
||||
set(toxcore_API_HEADERS ${toxcore_API_HEADERS}
|
||||
${toxcore_SOURCE_DIR}/toxav/toxav.h^toxav)
|
||||
|
||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${OPUS_LIBRARIES} ${VPX_LIBRARIES})
|
||||
if(MSVC)
|
||||
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} PkgConfig::OPUS PkgConfig::VPX)
|
||||
else()
|
||||
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${OPUS_LIBRARIES} ${VPX_LIBRARIES})
|
||||
set(toxcore_LINK_DIRECTORIES ${toxcore_LINK_DIRECTORIES} ${OPUS_LIBRARY_DIRS} ${VPX_LIBRARY_DIRS})
|
||||
set(toxcore_INCLUDE_DIRECTORIES ${toxcore_INCLUDE_DIRECTORIES} ${OPUS_INCLUDE_DIRS} ${VPX_INCLUDE_DIRS})
|
||||
set(toxcore_COMPILE_OPTIONS ${toxcore_COMPILE_OPTIONS} ${OPUS_CFLAGS_OTHER} ${VPX_CFLAGS_OTHER})
|
||||
endif()
|
||||
set(toxcore_PKGCONFIG_REQUIRES ${toxcore_PKGCONFIG_REQUIRES} opus vpx)
|
||||
endif()
|
||||
|
||||
@@ -393,29 +433,32 @@ set(toxcore_API_HEADERS ${toxcore_API_HEADERS}
|
||||
# any potential libvpx linking.
|
||||
message("CMAKE_THREAD_LIBS_INIT: ${CMAKE_THREAD_LIBS_INIT}")
|
||||
if(CMAKE_THREAD_LIBS_INIT)
|
||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${CMAKE_THREAD_LIBS_INIT})
|
||||
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
||||
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} ${CMAKE_THREAD_LIBS_INIT})
|
||||
endif()
|
||||
|
||||
|
||||
if(NSL_LIBRARIES)
|
||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${NSL_LIBRARIES})
|
||||
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${NSL_LIBRARIES})
|
||||
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lnsl)
|
||||
endif()
|
||||
|
||||
if(RT_LIBRARIES)
|
||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${RT_LIBRARIES})
|
||||
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${RT_LIBRARIES})
|
||||
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lrt)
|
||||
endif()
|
||||
|
||||
if(SOCKET_LIBRARIES)
|
||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${SOCKET_LIBRARIES})
|
||||
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${SOCKET_LIBRARIES})
|
||||
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lsocket)
|
||||
endif()
|
||||
|
||||
if(TARGET PThreads4W::PThreads4W)
|
||||
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} PThreads4W::PThreads4W)
|
||||
elseif(TARGET Threads::Threads)
|
||||
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} Threads::Threads)
|
||||
endif()
|
||||
if(WIN32)
|
||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ws2_32 iphlpapi)
|
||||
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lws2_32 -liphlpapi)
|
||||
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} iphlpapi wsock32 ws2_32)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
@@ -428,7 +471,18 @@ endif()
|
||||
add_module(toxcore ${toxcore_SOURCES})
|
||||
|
||||
# Link it to all dependencies.
|
||||
target_link_modules(toxcore ${toxcore_LINK_MODULES})
|
||||
if(TARGET toxcore_static)
|
||||
target_link_libraries(toxcore_static PRIVATE ${toxcore_LINK_LIBRARIES})
|
||||
target_link_directories(toxcore_static PUBLIC ${toxcore_LINK_DIRECTORIES})
|
||||
target_include_directories(toxcore_static SYSTEM PRIVATE ${toxcore_INCLUDE_DIRECTORIES})
|
||||
target_compile_options(toxcore_static PRIVATE ${toxcore_COMPILE_OPTIONS})
|
||||
endif()
|
||||
if(TARGET toxcore_shared)
|
||||
target_link_libraries(toxcore_shared PRIVATE ${toxcore_LINK_LIBRARIES})
|
||||
target_link_directories(toxcore_shared PUBLIC ${toxcore_LINK_DIRECTORIES})
|
||||
target_include_directories(toxcore_shared SYSTEM PRIVATE ${toxcore_INCLUDE_DIRECTORIES})
|
||||
target_compile_options(toxcore_shared PRIVATE ${toxcore_COMPILE_OPTIONS})
|
||||
endif()
|
||||
|
||||
# Make version script (on systems that support it) to limit symbol visibility.
|
||||
make_version_script(toxcore ${toxcore_API_HEADERS})
|
||||
@@ -443,22 +497,36 @@ install_module(toxcore DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tox)
|
||||
#
|
||||
################################################################################
|
||||
|
||||
include(CompileGTest)
|
||||
function(unit_test subdir target)
|
||||
add_executable(unit_${target}_test ${subdir}/${target}_test.cc)
|
||||
if(TARGET toxcore_static)
|
||||
target_link_libraries(unit_${target}_test PRIVATE toxcore_static)
|
||||
else()
|
||||
target_link_libraries(unit_${target}_test PRIVATE toxcore_shared)
|
||||
endif()
|
||||
target_link_libraries(unit_${target}_test PRIVATE GTest::GTest GTest::Main)
|
||||
set_target_properties(unit_${target}_test PROPERTIES COMPILE_FLAGS "${TEST_CXX_FLAGS}")
|
||||
add_test(NAME ${target} COMMAND ${CROSSCOMPILING_EMULATOR} unit_${target}_test)
|
||||
set_property(TEST ${target} PROPERTY ENVIRONMENT "LLVM_PROFILE_FILE=${target}.profraw")
|
||||
endfunction()
|
||||
|
||||
# The actual unit tests follow.
|
||||
#
|
||||
unit_test(toxav ring_buffer)
|
||||
unit_test(toxav rtp)
|
||||
unit_test(toxcore DHT)
|
||||
unit_test(toxcore bin_pack)
|
||||
unit_test(toxcore crypto_core)
|
||||
unit_test(toxcore group_announce)
|
||||
unit_test(toxcore group_moderation)
|
||||
unit_test(toxcore mem)
|
||||
unit_test(toxcore mono_time)
|
||||
unit_test(toxcore ping_array)
|
||||
unit_test(toxcore tox)
|
||||
unit_test(toxcore util)
|
||||
if(GTEST_FOUND)
|
||||
unit_test(toxav ring_buffer)
|
||||
unit_test(toxav rtp)
|
||||
unit_test(toxcore DHT)
|
||||
unit_test(toxcore bin_pack)
|
||||
unit_test(toxcore crypto_core)
|
||||
unit_test(toxcore group_announce)
|
||||
unit_test(toxcore group_moderation)
|
||||
unit_test(toxcore list)
|
||||
unit_test(toxcore mem)
|
||||
unit_test(toxcore mono_time)
|
||||
unit_test(toxcore ping_array)
|
||||
unit_test(toxcore tox)
|
||||
unit_test(toxcore util)
|
||||
endif()
|
||||
|
||||
add_subdirectory(testing)
|
||||
|
||||
@@ -482,7 +550,20 @@ if(DHT_BOOTSTRAP)
|
||||
add_executable(DHT_bootstrap
|
||||
other/DHT_bootstrap.c
|
||||
other/bootstrap_node_packets.c)
|
||||
target_link_modules(DHT_bootstrap toxcore misc_tools)
|
||||
if(TARGET toxcore_static)
|
||||
target_link_libraries(DHT_bootstrap PRIVATE toxcore_static)
|
||||
else()
|
||||
target_link_libraries(DHT_bootstrap PRIVATE toxcore_shared)
|
||||
endif()
|
||||
target_link_libraries(DHT_bootstrap PRIVATE misc_tools)
|
||||
if(TARGET unofficial-sodium::sodium)
|
||||
target_link_libraries(DHT_bootstrap PRIVATE unofficial-sodium::sodium)
|
||||
endif()
|
||||
if(TARGET PThreads4W::PThreads4W)
|
||||
target_link_libraries(DHT_bootstrap PRIVATE PThreads4W::PThreads4W)
|
||||
elseif(TARGET Threads::Threads)
|
||||
target_link_libraries(DHT_bootstrap PRIVATE Threads::Threads)
|
||||
endif()
|
||||
install(TARGETS DHT_bootstrap RUNTIME DESTINATION bin)
|
||||
endif()
|
||||
|
||||
|
21
external/toxcore/c-toxcore/CMakePresets.json
vendored
Normal file
21
external/toxcore/c-toxcore/CMakePresets.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"version": 3,
|
||||
"configurePresets": [
|
||||
{
|
||||
"name": "windows-default",
|
||||
"binaryDir": "${sourceDir}/_build",
|
||||
"cacheVariables": {
|
||||
"ENABLE_SHARED": true,
|
||||
"ENABLE_STATIC": true,
|
||||
"AUTOTEST": true,
|
||||
"BUILD_MISC_TESTS": true,
|
||||
"BOOTSTRAP_DAEMON": false,
|
||||
"MUST_BUILD_TOXAV": true,
|
||||
"TEST_TIMEOUT_SECONDS": "60",
|
||||
"CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS": true,
|
||||
"CMAKE_COMPILE_WARNING_AS_ERROR": true,
|
||||
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
18
external/toxcore/c-toxcore/INSTALL.md
vendored
18
external/toxcore/c-toxcore/INSTALL.md
vendored
@@ -32,14 +32,14 @@ These instructions will guide you through the process of building and installing
|
||||
|
||||
This repository, although called `toxcore`, in fact contains several libraries besides `toxcore` which complement it, as well as several executables. However, note that although these are separate libraries, at the moment, when building the libraries, they are all merged into a single `toxcore` library. Here is the full list of the main components that can be built using the CMake, their dependencies and descriptions.
|
||||
|
||||
| Name | Type | Dependencies | Platform | Description |
|
||||
|------------------|------------|-----------------------------------------------|----------------|----------------------------------------------------------------------------|
|
||||
| `toxcore` | Library | libnacl or libsodium, libm, libpthread, librt | Cross-platform | The main Tox library that provides the messenger functionality. |
|
||||
| `toxav` | Library | libtoxcore, libopus, libvpx | Cross-platform | Provides audio/video functionality. |
|
||||
| `toxencryptsave` | Library | libtoxcore, libnacl or libsodium | Cross-platform | Provides encryption of Tox profiles (savedata), as well as arbitrary data. |
|
||||
| `DHT_bootstrap` | Executable | libtoxcore | Cross-platform | A simple DHT bootstrap node. |
|
||||
| `tox-bootstrapd` | Executable | libtoxcore, libconfig | Unix-like | Highly configurable DHT bootstrap node daemon (systemd, SysVinit, Docker). |
|
||||
| `cmp` | Library | | Cross-platform | C implementation of the MessagePack serialization format. [https://github.com/camgunz/cmp](https://github.com/camgunz/cmp) |
|
||||
| Name | Type | Dependencies | Platform | Description |
|
||||
|------------------|------------|------------------------------------|----------------|----------------------------------------------------------------------------|
|
||||
| `toxcore` | Library | libsodium, libm, libpthread, librt | Cross-platform | The main Tox library that provides the messenger functionality. |
|
||||
| `toxav` | Library | libtoxcore, libopus, libvpx | Cross-platform | Provides audio/video functionality. |
|
||||
| `toxencryptsave` | Library | libtoxcore, libsodium | Cross-platform | Provides encryption of Tox profiles (savedata), as well as arbitrary data. |
|
||||
| `DHT_bootstrap` | Executable | libtoxcore | Cross-platform | A simple DHT bootstrap node. |
|
||||
| `tox-bootstrapd` | Executable | libtoxcore, libconfig | Unix-like | Highly configurable DHT bootstrap node daemon (systemd, SysVinit, Docker). |
|
||||
| `cmp` | Library | | Cross-platform | C implementation of the MessagePack serialization format. [https://github.com/camgunz/cmp](https://github.com/camgunz/cmp) |
|
||||
|
||||
#### Secondary
|
||||
|
||||
@@ -83,7 +83,7 @@ Useful for generating Tox profiles from the output of the vanity key generators,
|
||||
Library dependencies are listed in the [components](#components) table. The dependencies need to be satisfied for the components to be built. Note that if you don't have a dependency for some component, e.g. you don't have `libopus` installed required for building `toxav` component, building of that component is silently disabled.
|
||||
|
||||
|
||||
Be advised that due to the addition of `cmp` as a submodule, you now also need to initialize the git submodules required by toxcore. This can be done by cloning the repo with the addition of `--recurse-submodules` or by running `git submodule update --init` in the root directory of the repo.
|
||||
Be advised that due to the addition of `cmp` as a submodule, you now also need to initialize the git submodules required by toxcore. This can be done by cloning the repo with the addition of `--recurse-submodules` or by running `git submodule update --init` in the root directory of the repo.
|
||||
|
||||
#### Compiler requirements
|
||||
|
||||
|
9
external/toxcore/c-toxcore/LICENSE
vendored
9
external/toxcore/c-toxcore/LICENSE
vendored
@@ -1,7 +1,7 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
@@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found.
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
@@ -664,12 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
|
19
external/toxcore/c-toxcore/README.md
vendored
19
external/toxcore/c-toxcore/README.md
vendored
@@ -4,13 +4,12 @@
|
||||
|
||||
[**Website**](https://tox.chat) **|** [**Wiki**](https://wiki.tox.chat/) **|** [**Blog**](https://blog.tox.chat/) **|** [**FAQ**](https://wiki.tox.chat/doku.php?id=users:faq) **|** [**Binaries/Downloads**](https://tox.chat/download.html) **|** [**Clients**](https://wiki.tox.chat/doku.php?id=clients) **|** [**Compiling**](/INSTALL.md)
|
||||
|
||||
**IRC Channels:** Users: [#tox@libera.chat](https://web.libera.chat/#tox), Developers: [#toktok@libera.chat](https://web.libera.chat/#toktok)
|
||||
|
||||
## What is Tox
|
||||
|
||||
Tox is a peer to peer (serverless) instant messenger aimed at making security
|
||||
and privacy easy to obtain for regular users. It uses
|
||||
[NaCl](https://nacl.cr.yp.to/) for its encryption and authentication.
|
||||
[libsodium](https://doc.libsodium.org/) (based on
|
||||
[NaCl](https://nacl.cr.yp.to/)) for its encryption and authentication.
|
||||
|
||||
## IMPORTANT!
|
||||
|
||||
@@ -20,12 +19,12 @@ This is an **experimental** cryptographic network library. It has not been
|
||||
formally audited by an independent third party that specializes in
|
||||
cryptography or cryptanalysis. **Use this library at your own risk.**
|
||||
|
||||
The underlying crypto library [NaCl](https://nacl.cr.yp.to/install.html)
|
||||
provides reliable encryption, but the security model has not yet been fully
|
||||
specified. See [issue 210](https://github.com/TokTok/c-toxcore/issues/210) for
|
||||
a discussion on developing a threat model. See other issues for known
|
||||
weaknesses (e.g. [issue 426](https://github.com/TokTok/c-toxcore/issues/426)
|
||||
describes what can happen if your secret key is stolen).
|
||||
The underlying crypto library [libsodium](https://doc.libsodium.org/) provides
|
||||
reliable encryption, but the security model has not yet been fully specified.
|
||||
See [issue 210](https://github.com/TokTok/c-toxcore/issues/210) for a
|
||||
discussion on developing a threat model. See other issues for known weaknesses
|
||||
(e.g. [issue 426](https://github.com/TokTok/c-toxcore/issues/426) describes
|
||||
what can happen if your secret key is stolen).
|
||||
|
||||
## Toxcore Development Roadmap
|
||||
|
||||
@@ -39,7 +38,7 @@ on the website, where they are updated at least once every 24 hours:
|
||||
|
||||
Detailed installation instructions can be found in [INSTALL.md](INSTALL.md).
|
||||
|
||||
Be advised that due to the addition of `cmp` as a submodule, you now also need to initialize the git submodules required by toxcore. This can be done by cloning the repo with the following command: `git clone --recurse-submodules https://github.com/Toktok/c-toxcore` or by running `git submodule update --init` in the root directory of the repo.
|
||||
Be advised that due to the addition of `cmp` as a submodule, you now also need to initialize the git submodules required by toxcore. This can be done by cloning the repo with the following command: `git clone --recurse-submodules https://github.com/Toktok/c-toxcore` or by running `git submodule update --init` in the root directory of the repo.
|
||||
|
||||
In a nutshell, if you have [libsodium](https://github.com/jedisct1/libsodium)
|
||||
installed, run:
|
||||
|
@@ -1,7 +1,5 @@
|
||||
load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test")
|
||||
|
||||
package(features = ["layering_check"])
|
||||
|
||||
cc_library(
|
||||
name = "check_compat",
|
||||
testonly = True,
|
||||
|
@@ -3,19 +3,35 @@ set(TEST_TIMEOUT_SECONDS "" CACHE STRING "Limit runtime of each test to the numb
|
||||
add_library(auto_test_support
|
||||
auto_test_support.c
|
||||
auto_test_support.h)
|
||||
target_link_modules(auto_test_support toxcore misc_tools)
|
||||
target_link_libraries(auto_test_support PRIVATE misc_tools)
|
||||
if(TARGET toxcore_static)
|
||||
target_link_libraries(auto_test_support PRIVATE toxcore_static)
|
||||
else()
|
||||
target_link_libraries(auto_test_support PRIVATE toxcore_shared)
|
||||
endif()
|
||||
if(TARGET PThreads4W::PThreads4W)
|
||||
target_link_libraries(auto_test_support PRIVATE PThreads4W::PThreads4W)
|
||||
elseif(TARGET Threads::Threads)
|
||||
target_link_libraries(auto_test_support PRIVATE Threads::Threads)
|
||||
endif()
|
||||
|
||||
function(auto_test target)
|
||||
if(AUTOTEST AND NOT (MSVC AND ARGV1 STREQUAL "MSVC_DONT_BUILD"))
|
||||
add_executable(auto_${target}_test ${target}_test.c)
|
||||
target_link_modules(auto_${target}_test toxcore misc_tools auto_test_support)
|
||||
if(NOT ARGV1 STREQUAL "DONT_RUN")
|
||||
add_test(NAME ${target} COMMAND ${CROSSCOMPILING_EMULATOR} auto_${target}_test)
|
||||
set_tests_properties(${target} PROPERTIES TIMEOUT "${TEST_TIMEOUT_SECONDS}")
|
||||
# add the source dir as environment variable, so the testdata can be found
|
||||
set_tests_properties(${target} PROPERTIES ENVIRONMENT "LLVM_PROFILE_FILE=${target}.profraw;srcdir=${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
endif()
|
||||
add_executable(auto_${target}_test ${target}_test.c)
|
||||
target_link_libraries(auto_${target}_test PRIVATE misc_tools auto_test_support)
|
||||
if(TARGET toxcore_static)
|
||||
target_link_libraries(auto_${target}_test PRIVATE toxcore_static)
|
||||
else()
|
||||
target_link_libraries(auto_${target}_test PRIVATE toxcore_shared)
|
||||
endif()
|
||||
if(TARGET PThreads4W::PThreads4W)
|
||||
target_link_libraries(auto_${target}_test PRIVATE PThreads4W::PThreads4W)
|
||||
elseif(TARGET Threads::Threads)
|
||||
target_link_libraries(auto_${target}_test PRIVATE Threads::Threads)
|
||||
endif()
|
||||
add_test(NAME ${target} COMMAND ${CROSSCOMPILING_EMULATOR} auto_${target}_test)
|
||||
set_tests_properties(${target} PROPERTIES TIMEOUT "${TEST_TIMEOUT_SECONDS}")
|
||||
# add the source dir as environment variable, so the testdata can be found
|
||||
set_tests_properties(${target} PROPERTIES ENVIRONMENT "LLVM_PROFILE_FILE=${target}.profraw;srcdir=${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
endfunction()
|
||||
|
||||
auto_test(TCP)
|
||||
@@ -69,17 +85,33 @@ auto_test(typing)
|
||||
auto_test(version)
|
||||
auto_test(save_compatibility)
|
||||
|
||||
target_include_directories(auto_encryptsave_test SYSTEM PRIVATE ${LIBSODIUM_INCLUDE_DIRS})
|
||||
|
||||
if(NON_HERMETIC_TESTS)
|
||||
auto_test(bootstrap)
|
||||
auto_test(tcp_relay)
|
||||
endif()
|
||||
|
||||
if(BUILD_TOXAV)
|
||||
auto_test(conference_av MSVC_DONT_BUILD)
|
||||
auto_test(conference_av)
|
||||
auto_test(toxav_basic)
|
||||
auto_test(toxav_many)
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
target_link_libraries(auto_toxav_basic_test PRIVATE PkgConfig::VPX)
|
||||
target_link_libraries(auto_toxav_many_test PRIVATE PkgConfig::VPX)
|
||||
else()
|
||||
target_link_libraries(auto_toxav_basic_test PRIVATE ${VPX_LIBRARIES})
|
||||
target_link_directories(auto_toxav_basic_test PRIVATE ${VPX_LIBRARY_DIRS})
|
||||
target_include_directories(auto_toxav_basic_test SYSTEM PRIVATE ${VPX_INCLUDE_DIRS})
|
||||
target_compile_options(auto_toxav_basic_test PRIVATE ${VPX_CFLAGS_OTHER})
|
||||
|
||||
target_link_libraries(auto_toxav_many_test PRIVATE ${VPX_LIBRARIES})
|
||||
target_link_directories(auto_toxav_many_test PRIVATE ${VPX_LIBRARY_DIRS})
|
||||
target_include_directories(auto_toxav_many_test SYSTEM PRIVATE ${VPX_INCLUDE_DIRS})
|
||||
target_compile_options(auto_toxav_many_test PRIVATE ${VPX_CFLAGS_OTHER})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(PROXY_TEST)
|
||||
auto_test(proxy)
|
||||
|
@@ -5,7 +5,7 @@ libauto_test_support_la_SOURCES = ../auto_tests/auto_test_support.c ../auto_test
|
||||
libauto_test_support_la_LIBADD = libmisc_tools.la libtoxcore.la
|
||||
|
||||
TESTS = \
|
||||
announce_test \
|
||||
announce_test \
|
||||
conference_double_invite_test \
|
||||
conference_invite_merge_test \
|
||||
conference_peer_nick_test \
|
||||
@@ -13,6 +13,8 @@ TESTS = \
|
||||
conference_test \
|
||||
conference_two_test \
|
||||
crypto_test \
|
||||
encryptsave_test \
|
||||
file_saving_test \
|
||||
file_transfer_test \
|
||||
forwarding_test \
|
||||
friend_connection_test \
|
||||
@@ -34,34 +36,24 @@ TESTS = \
|
||||
set_name_test \
|
||||
set_status_message_test \
|
||||
TCP_test \
|
||||
tox_events_test \
|
||||
tox_dispatch_test \
|
||||
tox_events_test \
|
||||
tox_many_tcp_test \
|
||||
tox_many_test \
|
||||
tox_strncasecmp_test \
|
||||
typing_test \
|
||||
version_test
|
||||
|
||||
if !WITH_NACL
|
||||
TESTS += \
|
||||
encryptsave_test \
|
||||
file_saving_test
|
||||
endif
|
||||
|
||||
AUTOTEST_CFLAGS = \
|
||||
$(LIBSODIUM_CFLAGS) \
|
||||
$(NACL_CFLAGS)
|
||||
$(LIBSODIUM_CFLAGS)
|
||||
|
||||
AUTOTEST_LDADD = \
|
||||
$(LIBSODIUM_LDFLAGS) \
|
||||
$(NACL_LDFLAGS) \
|
||||
libmisc_tools.la \
|
||||
libauto_test_support.la \
|
||||
libtoxcore.la \
|
||||
libtoxencryptsave.la \
|
||||
$(LIBSODIUM_LIBS) \
|
||||
$(NACL_OBJECTS) \
|
||||
$(NACL_LIBS)
|
||||
$(LIBSODIUM_LIBS)
|
||||
|
||||
|
||||
if BUILD_AV
|
||||
|
@@ -61,9 +61,13 @@ static void test_store_data(void)
|
||||
ck_assert(log != nullptr);
|
||||
logger_callback_log(log, print_debug_logger, nullptr, nullptr);
|
||||
Mono_Time *mono_time = mono_time_new(mem, nullptr, nullptr);
|
||||
ck_assert(mono_time != nullptr);
|
||||
Networking_Core *net = new_networking_no_udp(log, mem, ns);
|
||||
ck_assert(net != nullptr);
|
||||
DHT *dht = new_dht(log, mem, rng, ns, mono_time, net, true, true);
|
||||
ck_assert(dht != nullptr);
|
||||
Forwarding *forwarding = new_forwarding(log, rng, mono_time, dht);
|
||||
ck_assert(forwarding != nullptr);
|
||||
Announcements *announce = new_announcements(log, mem, rng, mono_time, forwarding);
|
||||
ck_assert(announce != nullptr);
|
||||
|
||||
|
@@ -28,7 +28,6 @@ static const struct BootstrapNodes {
|
||||
uint16_t port;
|
||||
const uint8_t key[32];
|
||||
} bootstrap_nodes[] = {
|
||||
#ifndef USE_TEST_NETWORK
|
||||
{
|
||||
"tox.abilinski.com", 33445,
|
||||
0x10, 0xC0, 0x0E, 0xB2, 0x50, 0xC3, 0x23, 0x3E,
|
||||
@@ -57,22 +56,6 @@ static const struct BootstrapNodes {
|
||||
0x6D, 0xC9, 0xD0, 0xA3, 0x00, 0xE6, 0xC3, 0x57,
|
||||
0x63, 0x4E, 0xE2, 0xDA, 0x88, 0xC3, 0x54, 0x63,
|
||||
},
|
||||
#else
|
||||
{
|
||||
"172.93.52.70", 33445,
|
||||
0x79, 0xCA, 0xDA, 0x49, 0x74, 0xB0, 0x92, 0x6F,
|
||||
0x28, 0x6F, 0x02, 0x5C, 0xD5, 0xFF, 0xDF, 0x3E,
|
||||
0x65, 0x4A, 0x37, 0x58, 0xC5, 0x3E, 0x02, 0x73,
|
||||
0xEC, 0xFC, 0x4D, 0x12, 0xC2, 0x1D, 0xCA, 0x48,
|
||||
},
|
||||
{
|
||||
"tox.plastiras.org", 38445,
|
||||
0x5E, 0x47, 0xBA, 0x1D, 0xC3, 0x91, 0x3E, 0xB2,
|
||||
0xCB, 0xF2, 0xD6, 0x4C, 0xE4, 0xF2, 0x3D, 0x8B,
|
||||
0xFE, 0x53, 0x91, 0xBF, 0xAB, 0xE5, 0xC4, 0x3C,
|
||||
0x5B, 0xAD, 0x13, 0xF0, 0xA4, 0x14, 0xCD, 0x77,
|
||||
},
|
||||
#endif // USE_TEST_NETWORK
|
||||
{ nullptr, 0, 0 },
|
||||
};
|
||||
|
||||
@@ -166,6 +149,8 @@ void set_mono_time_callback(AutoTox *autotox)
|
||||
Mono_Time *mono_time = autotox->tox->mono_time;
|
||||
|
||||
autotox->clock = current_time_monotonic(mono_time);
|
||||
ck_assert_msg(autotox->clock >= 1000,
|
||||
"clock is too low (not initialised?): %lu", (unsigned long)autotox->clock);
|
||||
mono_time_set_current_time_callback(mono_time, nullptr, nullptr); // set to default first
|
||||
mono_time_set_current_time_callback(mono_time, get_state_clock_callback, &autotox->clock);
|
||||
}
|
||||
@@ -332,7 +317,7 @@ static void bootstrap_autotoxes(struct Tox_Options *options, uint32_t tox_count,
|
||||
for (uint32_t i = 1; i < tox_count; ++i) {
|
||||
Tox_Err_Bootstrap err;
|
||||
tox_bootstrap(autotoxes[i].tox, "localhost", dht_port, dht_key, &err);
|
||||
ck_assert(err == TOX_ERR_BOOTSTRAP_OK);
|
||||
ck_assert_msg(err == TOX_ERR_BOOTSTRAP_OK, "bootstrap error for port %d: %d", dht_port, err);
|
||||
}
|
||||
|
||||
if (!udp_enabled) {
|
||||
|
@@ -269,6 +269,30 @@ static void test_large_data_symmetric(void)
|
||||
free(m1);
|
||||
}
|
||||
|
||||
static void test_very_large_data(void)
|
||||
{
|
||||
const Random *rng = system_random();
|
||||
ck_assert(rng != nullptr);
|
||||
|
||||
uint8_t nonce[CRYPTO_NONCE_SIZE] = {0};
|
||||
uint8_t pk[CRYPTO_PUBLIC_KEY_SIZE];
|
||||
uint8_t sk[CRYPTO_SECRET_KEY_SIZE];
|
||||
crypto_new_keypair(rng, pk, sk);
|
||||
|
||||
// 100 MiB of data (all zeroes, doesn't matter what's inside).
|
||||
const uint32_t plain_size = 100 * 1024 * 1024;
|
||||
uint8_t *plain = (uint8_t *)malloc(plain_size);
|
||||
uint8_t *encrypted = (uint8_t *)malloc(plain_size + CRYPTO_MAC_SIZE);
|
||||
|
||||
ck_assert(plain != nullptr);
|
||||
ck_assert(encrypted != nullptr);
|
||||
|
||||
encrypt_data(pk, sk, nonce, plain, plain_size, encrypted);
|
||||
|
||||
free(encrypted);
|
||||
free(plain);
|
||||
}
|
||||
|
||||
static void increment_nonce_number_cmp(uint8_t *nonce, uint32_t num)
|
||||
{
|
||||
uint32_t num1 = 0;
|
||||
@@ -340,6 +364,7 @@ int main(void)
|
||||
test_endtoend(); /* waiting up to 15 seconds */
|
||||
test_large_data();
|
||||
test_large_data_symmetric();
|
||||
test_very_large_data();
|
||||
test_increment_nonce();
|
||||
test_memzero();
|
||||
|
||||
|
@@ -123,7 +123,7 @@ static void test_dht_getnodes(AutoTox *autotoxes)
|
||||
tox_self_get_dht_id(autotoxes[i].tox, public_key_list[i]);
|
||||
tox_callback_dht_get_nodes_response(autotoxes[i].tox, getnodes_response_cb);
|
||||
|
||||
printf("Peer %zu dht closenode count total/annouce-capable: %d/%d\n",
|
||||
printf("Peer %zu dht closenode count total/announce-capable: %d/%d\n",
|
||||
i,
|
||||
tox_dht_get_num_closelist(autotoxes[i].tox),
|
||||
tox_dht_get_num_closelist_announce_capable(autotoxes[i].tox)
|
||||
|
@@ -3,7 +3,6 @@
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifndef VANILLA_NACL
|
||||
#include <sodium.h>
|
||||
|
||||
#include "../testing/misc_tools.h"
|
||||
@@ -232,9 +231,3 @@ int main(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else // VANILLA_NACL
|
||||
int main(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
@@ -9,6 +9,7 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "auto_test_support.h"
|
||||
#include "../toxcore/tox_private.h"
|
||||
|
||||
typedef struct State {
|
||||
size_t peer_joined_count;
|
||||
@@ -42,6 +43,22 @@ typedef struct State {
|
||||
|
||||
#define PEER_LIMIT 20
|
||||
|
||||
static void print_ip(Tox *tox, uint32_t groupnumber, uint32_t peer_id)
|
||||
{
|
||||
Tox_Err_Group_Peer_Query err;
|
||||
size_t length = tox_group_peer_get_ip_address_size(tox, groupnumber, peer_id, &err);
|
||||
|
||||
ck_assert_msg(err == TOX_ERR_GROUP_PEER_QUERY_OK, "failed to get ip address size: error %d", err);
|
||||
|
||||
uint8_t ip_str[TOX_GROUP_PEER_IP_STRING_MAX_LENGTH];
|
||||
tox_group_peer_get_ip_address(tox, groupnumber, peer_id, ip_str, &err);
|
||||
ip_str[length] = '\0';
|
||||
|
||||
ck_assert_msg(err == TOX_ERR_GROUP_PEER_QUERY_OK, "failed to get ip address: error %d", err);
|
||||
|
||||
fprintf(stderr, "%s\n", ip_str);
|
||||
}
|
||||
|
||||
static bool all_group_peers_connected(AutoTox *autotoxes, uint32_t tox_count, uint32_t groupnumber, size_t name_length)
|
||||
{
|
||||
for (size_t i = 0; i < tox_count; ++i) {
|
||||
@@ -119,6 +136,9 @@ static void group_peer_join_handler(Tox *tox, uint32_t groupnumber, uint32_t pee
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(stderr, "%s joined with IP: ", peer_name);
|
||||
print_ip(tox, groupnumber, peer_id);
|
||||
|
||||
state->peer_id = peer_id;
|
||||
++state->peer_joined_count;
|
||||
}
|
||||
@@ -178,6 +198,11 @@ static void group_peer_self_join_handler(Tox *tox, uint32_t groupnumber, void *u
|
||||
ck_assert_msg(query_err == TOX_ERR_GROUP_STATE_QUERIES_OK, "%d", query_err);
|
||||
ck_assert(memcmp(topic, TOPIC, TOPIC_LEN) == 0);
|
||||
|
||||
uint32_t peer_id = tox_group_self_get_peer_id(tox, groupnumber, nullptr);
|
||||
|
||||
fprintf(stderr, "self joined with IP: ");
|
||||
print_ip(tox, groupnumber, peer_id);
|
||||
|
||||
++state->self_joined_count;
|
||||
}
|
||||
|
||||
@@ -234,7 +259,6 @@ static void group_peer_status_handler(Tox *tox, uint32_t groupnumber, uint32_t p
|
||||
|
||||
static void group_announce_test(AutoTox *autotoxes)
|
||||
{
|
||||
#ifndef VANILLA_NACL
|
||||
ck_assert_msg(NUM_GROUP_TOXES == 2, "NUM_GROUP_TOXES needs to be 2");
|
||||
|
||||
Tox *tox0 = autotoxes[0].tox;
|
||||
@@ -341,6 +365,7 @@ static void group_announce_test(AutoTox *autotoxes)
|
||||
ck_assert(memcmp(tox0_pk_query, tox0_self_pk, TOX_GROUP_PEER_PUBLIC_KEY_SIZE) == 0);
|
||||
|
||||
fprintf(stderr, "Peer 0 disconnecting...\n");
|
||||
|
||||
// tox 0 disconnects then reconnects
|
||||
Tox_Err_Group_Disconnect d_err;
|
||||
tox_group_disconnect(tox0, groupnumber, &d_err);
|
||||
@@ -410,7 +435,6 @@ static void group_announce_test(AutoTox *autotoxes)
|
||||
ck_assert(num_groups1 == num_groups2 && num_groups2 == 0);
|
||||
|
||||
printf("All tests passed!\n");
|
||||
#endif // VANILLA_NACL
|
||||
}
|
||||
|
||||
int main(void)
|
||||
|
@@ -102,7 +102,6 @@ static void group_peer_join_handler(Tox *tox, uint32_t group_number, uint32_t pe
|
||||
|
||||
static void group_invite_test(AutoTox *autotoxes)
|
||||
{
|
||||
#ifndef VANILLA_NACL
|
||||
ck_assert_msg(NUM_GROUP_TOXES > 7, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
||||
|
||||
for (size_t i = 0; i < NUM_GROUP_TOXES; ++i) {
|
||||
@@ -260,8 +259,6 @@ static void group_invite_test(AutoTox *autotoxes)
|
||||
}
|
||||
|
||||
printf("All tests passed!\n");
|
||||
|
||||
#endif // VANILLA_NACL
|
||||
}
|
||||
|
||||
int main(void)
|
||||
|
@@ -44,6 +44,10 @@ typedef struct State {
|
||||
#define TEST_CUSTOM_PACKET "Why'd ya spill yer beans?"
|
||||
#define TEST_CUSTOM_PACKET_LEN (sizeof(TEST_CUSTOM_PACKET) - 1)
|
||||
|
||||
#define TEST_CUSTOM_PACKET_LARGE "Where is it I've read that someone condemned to death says or thinks, an hour before his death, that if he had to live on some high rock, on such a narrow ledge that he'd only room to stand, and the ocean, everlasting darkness, everlasting solitude, everlasting tempest around him, if he had to remain standing on a square yard of space all his life, a thousand years, eternity, it were better to live so than to die at once. Only to live, to live and live! Life, whatever it may be! ...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................0123456789"
|
||||
#define TEST_CUSTOM_PACKET_LARGE_LEN (sizeof(TEST_CUSTOM_PACKET_LARGE) - 1)
|
||||
static_assert(TEST_CUSTOM_PACKET_LARGE_LEN == TOX_GROUP_MAX_CUSTOM_LOSSY_PACKET_LENGTH, "Should be max");
|
||||
|
||||
#define TEST_CUSTOM_PRIVATE_PACKET "This is a custom private packet. Enjoy."
|
||||
#define TEST_CUSTOM_PRIVATE_PACKET_LEN (sizeof(TEST_CUSTOM_PRIVATE_PACKET) - 1)
|
||||
|
||||
@@ -187,6 +191,21 @@ static void group_custom_packet_handler(Tox *tox, uint32_t groupnumber, uint32_t
|
||||
++state->custom_packets_received;
|
||||
}
|
||||
|
||||
static void group_custom_packet_large_handler(Tox *tox, uint32_t groupnumber, uint32_t peer_id, const uint8_t *data,
|
||||
size_t length, void *user_data)
|
||||
{
|
||||
ck_assert_msg(length == TEST_CUSTOM_PACKET_LARGE_LEN, "Failed to receive large custom packet. Invalid length: %zu\n", length);
|
||||
|
||||
ck_assert(memcmp(data, TEST_CUSTOM_PACKET_LARGE, length) == 0);
|
||||
|
||||
AutoTox *autotox = (AutoTox *)user_data;
|
||||
ck_assert(autotox != nullptr);
|
||||
|
||||
State *state = (State *)autotox->state;
|
||||
|
||||
++state->custom_packets_received;
|
||||
}
|
||||
|
||||
static void group_message_handler(Tox *tox, uint32_t groupnumber, uint32_t peer_id, TOX_MESSAGE_TYPE type,
|
||||
const uint8_t *message, size_t length, uint32_t pseudo_msg_id, void *user_data)
|
||||
{
|
||||
@@ -331,7 +350,6 @@ static void group_message_handler_wraparound_test(Tox *tox, uint32_t groupnumber
|
||||
|
||||
static void group_message_test(AutoTox *autotoxes)
|
||||
{
|
||||
#ifndef VANILLA_NACL
|
||||
ck_assert_msg(NUM_GROUP_TOXES >= 2, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
||||
|
||||
const Random *rng = system_random();
|
||||
@@ -377,8 +395,9 @@ static void group_message_test(AutoTox *autotoxes)
|
||||
iterate_all_wait(autotoxes, NUM_GROUP_TOXES, ITERATION_INTERVAL);
|
||||
|
||||
if (state1->peer_joined && !state1->message_sent) {
|
||||
tox_group_send_message(tox1, group_number, TOX_MESSAGE_TYPE_NORMAL, (const uint8_t *)TEST_MESSAGE,
|
||||
TEST_MESSAGE_LEN, &state1->pseudo_msg_id, &err_send);
|
||||
state1->pseudo_msg_id = tox_group_send_message(
|
||||
tox1, group_number, TOX_MESSAGE_TYPE_NORMAL, (const uint8_t *)TEST_MESSAGE,
|
||||
TEST_MESSAGE_LEN, &err_send);
|
||||
ck_assert(err_send == TOX_ERR_GROUP_SEND_MESSAGE_OK);
|
||||
state1->message_sent = true;
|
||||
}
|
||||
@@ -401,7 +420,7 @@ static void group_message_test(AutoTox *autotoxes)
|
||||
|
||||
// tox1 sends group a message which should not be seen by tox0's message handler
|
||||
tox_group_send_message(tox1, group_number, TOX_MESSAGE_TYPE_NORMAL, (const uint8_t *)IGNORE_MESSAGE,
|
||||
IGNORE_MESSAGE_LEN, nullptr, &err_send);
|
||||
IGNORE_MESSAGE_LEN, &err_send);
|
||||
|
||||
iterate_all_wait(autotoxes, NUM_GROUP_TOXES, ITERATION_INTERVAL);
|
||||
|
||||
@@ -450,6 +469,19 @@ static void group_message_test(AutoTox *autotoxes)
|
||||
iterate_all_wait(autotoxes, NUM_GROUP_TOXES, ITERATION_INTERVAL);
|
||||
}
|
||||
|
||||
// tox0 sends a large max sized lossy custom packet
|
||||
|
||||
// overwrite callback for larger packet
|
||||
tox_callback_group_custom_packet(tox0, group_custom_packet_large_handler);
|
||||
|
||||
tox_group_send_custom_packet(tox1, group_number, false, (const uint8_t *)TEST_CUSTOM_PACKET_LARGE, TEST_CUSTOM_PACKET_LARGE_LEN,
|
||||
&c_err);
|
||||
ck_assert_msg(c_err == TOX_ERR_GROUP_SEND_CUSTOM_PACKET_OK, "%d", c_err);
|
||||
|
||||
while (state0->custom_packets_received < 3) {
|
||||
iterate_all_wait(autotoxes, NUM_GROUP_TOXES, ITERATION_INTERVAL);
|
||||
}
|
||||
|
||||
uint8_t m[TOX_GROUP_MAX_MESSAGE_LENGTH] = {0};
|
||||
|
||||
fprintf(stderr, "Doing lossless packet test...\n");
|
||||
@@ -475,7 +507,7 @@ static void group_message_test(AutoTox *autotoxes)
|
||||
|
||||
memcpy(m + 2, &checksum, sizeof(uint16_t));
|
||||
|
||||
tox_group_send_message(tox0, group_number, TOX_MESSAGE_TYPE_NORMAL, (const uint8_t *)m, message_size, nullptr, &err_send);
|
||||
tox_group_send_message(tox0, group_number, TOX_MESSAGE_TYPE_NORMAL, (const uint8_t *)m, message_size, &err_send);
|
||||
|
||||
ck_assert(err_send == TOX_ERR_GROUP_SEND_MESSAGE_OK);
|
||||
}
|
||||
@@ -497,7 +529,7 @@ static void group_message_test(AutoTox *autotoxes)
|
||||
|
||||
memcpy(m, &i, sizeof(uint16_t));
|
||||
|
||||
tox_group_send_message(tox0, group_number, TOX_MESSAGE_TYPE_NORMAL, (const uint8_t *)m, 2, nullptr, &err_send);
|
||||
tox_group_send_message(tox0, group_number, TOX_MESSAGE_TYPE_NORMAL, (const uint8_t *)m, 2, &err_send);
|
||||
ck_assert(err_send == TOX_ERR_GROUP_SEND_MESSAGE_OK);
|
||||
}
|
||||
|
||||
@@ -512,7 +544,6 @@ static void group_message_test(AutoTox *autotoxes)
|
||||
}
|
||||
|
||||
fprintf(stderr, "All tests passed!\n");
|
||||
#endif // VANILLA_NACL
|
||||
}
|
||||
|
||||
int main(void)
|
||||
@@ -538,6 +569,8 @@ int main(void)
|
||||
#undef TEST_PRIVATE_MESSAGE_LEN
|
||||
#undef TEST_CUSTOM_PACKET
|
||||
#undef TEST_CUSTOM_PACKET_LEN
|
||||
#undef TEST_CUSTOM_PACKET_LARGE
|
||||
#undef TEST_CUSTOM_PACKET_LARGE_LEN
|
||||
#undef TEST_CUSTOM_PRIVATE_PACKET
|
||||
#undef TEST_CUSTOM_PRIVATE_PACKET_LEN
|
||||
#undef IGNORE_MESSAGE
|
||||
|
@@ -334,21 +334,21 @@ static void voice_state_message_test(AutoTox *autotox, Tox_Group_Voice_State voi
|
||||
ck_assert(sq_err == TOX_ERR_GROUP_SELF_QUERY_OK);
|
||||
|
||||
Tox_Err_Group_Send_Message msg_err;
|
||||
bool send_ret = tox_group_send_message(autotox->tox, state->group_number, TOX_MESSAGE_TYPE_NORMAL,
|
||||
(const uint8_t *)"test", 4, nullptr, &msg_err);
|
||||
tox_group_send_message(autotox->tox, state->group_number, TOX_MESSAGE_TYPE_NORMAL,
|
||||
(const uint8_t *)"test", 4, &msg_err);
|
||||
|
||||
switch (self_role) {
|
||||
case TOX_GROUP_ROLE_OBSERVER: {
|
||||
ck_assert(!send_ret && msg_err == TOX_ERR_GROUP_SEND_MESSAGE_PERMISSIONS);
|
||||
ck_assert(msg_err == TOX_ERR_GROUP_SEND_MESSAGE_PERMISSIONS);
|
||||
break;
|
||||
}
|
||||
|
||||
case TOX_GROUP_ROLE_USER: {
|
||||
if (voice_state != TOX_GROUP_VOICE_STATE_ALL) {
|
||||
ck_assert_msg(!send_ret && msg_err == TOX_ERR_GROUP_SEND_MESSAGE_PERMISSIONS,
|
||||
"%d, %d", send_ret, msg_err);
|
||||
ck_assert_msg(msg_err == TOX_ERR_GROUP_SEND_MESSAGE_PERMISSIONS,
|
||||
"%d", msg_err);
|
||||
} else {
|
||||
ck_assert(send_ret && msg_err == TOX_ERR_GROUP_SEND_MESSAGE_OK);
|
||||
ck_assert(msg_err == TOX_ERR_GROUP_SEND_MESSAGE_OK);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -356,16 +356,16 @@ static void voice_state_message_test(AutoTox *autotox, Tox_Group_Voice_State voi
|
||||
|
||||
case TOX_GROUP_ROLE_MODERATOR: {
|
||||
if (voice_state != TOX_GROUP_VOICE_STATE_FOUNDER) {
|
||||
ck_assert(send_ret && msg_err == TOX_ERR_GROUP_SEND_MESSAGE_OK);
|
||||
ck_assert(msg_err == TOX_ERR_GROUP_SEND_MESSAGE_OK);
|
||||
} else {
|
||||
ck_assert(!send_ret && msg_err == TOX_ERR_GROUP_SEND_MESSAGE_PERMISSIONS);
|
||||
ck_assert(msg_err == TOX_ERR_GROUP_SEND_MESSAGE_PERMISSIONS);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case TOX_GROUP_ROLE_FOUNDER: {
|
||||
ck_assert(send_ret && msg_err == TOX_ERR_GROUP_SEND_MESSAGE_OK);
|
||||
ck_assert(msg_err == TOX_ERR_GROUP_SEND_MESSAGE_OK);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -432,7 +432,6 @@ static void check_voice_state(AutoTox *autotoxes, uint32_t num_toxes)
|
||||
|
||||
static void group_moderation_test(AutoTox *autotoxes)
|
||||
{
|
||||
#ifndef VANILLA_NACL
|
||||
ck_assert_msg(NUM_GROUP_TOXES >= 4, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
||||
ck_assert_msg(NUM_GROUP_TOXES < 10, "NUM_GROUP_TOXES is too big: %d", NUM_GROUP_TOXES);
|
||||
|
||||
@@ -634,7 +633,6 @@ static void group_moderation_test(AutoTox *autotoxes)
|
||||
}
|
||||
|
||||
fprintf(stderr, "All tests passed!\n");
|
||||
#endif // VANILLA_NACL
|
||||
}
|
||||
|
||||
int main(void)
|
||||
|
@@ -148,7 +148,6 @@ static int has_correct_self_state(const Tox *tox, uint32_t group_number, const u
|
||||
|
||||
static void group_save_test(AutoTox *autotoxes)
|
||||
{
|
||||
#ifndef VANILLA_NACL
|
||||
ck_assert_msg(NUM_GROUP_TOXES > 1, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
||||
|
||||
for (size_t i = 0; i < NUM_GROUP_TOXES; ++i) {
|
||||
@@ -270,8 +269,6 @@ static void group_save_test(AutoTox *autotoxes)
|
||||
tox_kill(new_tox);
|
||||
|
||||
printf("All tests passed!\n");
|
||||
|
||||
#endif // VANILLA_NACL
|
||||
}
|
||||
|
||||
int main(void)
|
||||
|
@@ -238,7 +238,6 @@ static void set_group_state(Tox *tox, uint32_t groupnumber, uint32_t peer_limit,
|
||||
|
||||
static void group_state_test(AutoTox *autotoxes)
|
||||
{
|
||||
#ifndef VANILLA_NACL
|
||||
ck_assert_msg(NUM_GROUP_TOXES >= 3, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
||||
|
||||
for (size_t i = 0; i < NUM_GROUP_TOXES; ++i) {
|
||||
@@ -318,8 +317,6 @@ static void group_state_test(AutoTox *autotoxes)
|
||||
}
|
||||
|
||||
fprintf(stderr, "All tests passed!\n");
|
||||
|
||||
#endif /* VANILLA_NACL */
|
||||
}
|
||||
|
||||
int main(void)
|
||||
|
@@ -330,7 +330,6 @@ static void topic_spam(const Random *rng, AutoTox *autotoxes, uint32_t num_peers
|
||||
|
||||
static void group_sync_test(AutoTox *autotoxes)
|
||||
{
|
||||
#ifndef VANILLA_NACL
|
||||
ck_assert(NUM_GROUP_TOXES >= 5);
|
||||
const Random *rng = system_random();
|
||||
ck_assert(rng != nullptr);
|
||||
@@ -443,8 +442,6 @@ static void group_sync_test(AutoTox *autotoxes)
|
||||
}
|
||||
|
||||
fprintf(stderr, "All tests passed!\n");
|
||||
|
||||
#endif // VANILLA_NACL
|
||||
}
|
||||
|
||||
int main(void)
|
||||
|
@@ -8,8 +8,6 @@
|
||||
|
||||
#include "auto_test_support.h"
|
||||
|
||||
#ifdef USE_TEST_NETWORK
|
||||
|
||||
#define NUM_GROUP_TOXES 2
|
||||
#define CODEWORD "RONALD MCDONALD"
|
||||
#define CODEWORD_LEN (sizeof(CODEWORD) - 1)
|
||||
@@ -129,7 +127,6 @@ static bool all_peers_got_code(AutoTox *autotoxes)
|
||||
|
||||
static void group_tcp_test(AutoTox *autotoxes)
|
||||
{
|
||||
#ifndef VANILLA_NACL
|
||||
ck_assert(NUM_GROUP_TOXES >= 2);
|
||||
|
||||
State *state0 = (State *)autotoxes[0].state;
|
||||
@@ -209,7 +206,7 @@ static void group_tcp_test(AutoTox *autotoxes)
|
||||
|
||||
Tox_Err_Group_Send_Message merr;
|
||||
tox_group_send_message(autotoxes[0].tox, groupnumber, TOX_MESSAGE_TYPE_NORMAL,
|
||||
(const uint8_t *)CODEWORD, CODEWORD_LEN, nullptr, &merr);
|
||||
(const uint8_t *)CODEWORD, CODEWORD_LEN, &merr);
|
||||
ck_assert(merr == TOX_ERR_GROUP_SEND_MESSAGE_OK);
|
||||
|
||||
while (!state1->got_second_code) {
|
||||
@@ -222,34 +219,29 @@ static void group_tcp_test(AutoTox *autotoxes)
|
||||
}
|
||||
|
||||
printf("Test passed!\n");
|
||||
|
||||
#endif // VANILLA_NACL
|
||||
}
|
||||
#endif // USE_TEST_NETWORK
|
||||
|
||||
int main(void)
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
#ifdef USE_TEST_NETWORK // TODO(Jfreegman): Enable this test when the mainnet works with DHT groupchats
|
||||
setvbuf(stdout, nullptr, _IONBF, 0);
|
||||
|
||||
struct Tox_Options *options = (struct Tox_Options *)calloc(1, sizeof(struct Tox_Options));
|
||||
struct Tox_Options *options = tox_options_new(nullptr);
|
||||
ck_assert(options != nullptr);
|
||||
|
||||
tox_options_default(options);
|
||||
tox_options_set_udp_enabled(options, false);
|
||||
|
||||
Run_Auto_Options autotest_opts = default_run_auto_options();
|
||||
autotest_opts.graph = GRAPH_COMPLETE;
|
||||
|
||||
run_auto_test(options, NUM_GROUP_TOXES, group_tcp_test, sizeof(State), &autotest_opts);
|
||||
// TODO(JFreegman): Fix this test and remove the "if".
|
||||
if (argc > 2) {
|
||||
run_auto_test(options, NUM_GROUP_TOXES, group_tcp_test, sizeof(State), &autotest_opts);
|
||||
}
|
||||
|
||||
tox_options_free(options);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef USE_TEST_NETWORK
|
||||
#undef NUM_GROUP_TOXES
|
||||
#undef CODEWORD_LEN
|
||||
#undef CODEWORD
|
||||
#endif // USE_TEST_NETWORK
|
||||
#undef NUM_GROUP_TOXES
|
||||
|
@@ -203,7 +203,6 @@ static uint32_t set_topic_all_peers(const Random *rng, AutoTox *autotoxes, size_
|
||||
|
||||
static void group_topic_test(AutoTox *autotoxes)
|
||||
{
|
||||
#ifndef VANILLA_NACL
|
||||
ck_assert_msg(NUM_GROUP_TOXES >= 3, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
||||
|
||||
const Random *rng = system_random();
|
||||
@@ -318,8 +317,6 @@ static void group_topic_test(AutoTox *autotoxes)
|
||||
}
|
||||
|
||||
fprintf(stderr, "All tests passed!\n");
|
||||
|
||||
#endif /* VANILLA_NACL */
|
||||
}
|
||||
|
||||
int main(void)
|
||||
|
@@ -7,15 +7,8 @@
|
||||
#include "auto_test_support.h"
|
||||
#include "check_compat.h"
|
||||
|
||||
static uint8_t const key[] = {
|
||||
0x15, 0xE9, 0xC3, 0x09, 0xCF, 0xCB, 0x79, 0xFD,
|
||||
0xDF, 0x0E, 0xBA, 0x05, 0x7D, 0xAB, 0xB4, 0x9F,
|
||||
0xE1, 0x5F, 0x38, 0x03, 0xB1, 0xBF, 0xF0, 0x65,
|
||||
0x36, 0xAE, 0x2E, 0x5B, 0xA5, 0xE4, 0x69, 0x0E,
|
||||
};
|
||||
|
||||
// Try to bootstrap for 30 seconds.
|
||||
#define NUM_ITERATIONS (unsigned)(30.0 / (ITERATION_INTERVAL / 1000.0))
|
||||
// Try to bootstrap for 20 seconds.
|
||||
#define NUM_ITERATIONS (unsigned)(20.0 / (ITERATION_INTERVAL / 1000.0))
|
||||
|
||||
int main(void)
|
||||
{
|
||||
@@ -24,13 +17,12 @@ int main(void)
|
||||
struct Tox_Options *opts = tox_options_new(nullptr);
|
||||
tox_options_set_udp_enabled(opts, false);
|
||||
tox_options_set_proxy_type(opts, TOX_PROXY_TYPE_SOCKS5);
|
||||
tox_options_set_proxy_host(opts, "localhost");
|
||||
tox_options_set_proxy_host(opts, "127.0.0.1");
|
||||
tox_options_set_proxy_port(opts, 51724);
|
||||
Tox *tox = tox_new_log(opts, nullptr, nullptr);
|
||||
tox_options_free(opts);
|
||||
|
||||
tox_add_tcp_relay(tox, "tox.ngc.zone", 33445, key, nullptr);
|
||||
tox_bootstrap(tox, "tox.ngc.zone", 33445, key, nullptr);
|
||||
bootstrap_tox_live_network(tox, true);
|
||||
|
||||
printf("Waiting for connection...\n");
|
||||
|
||||
|
@@ -7,15 +7,8 @@
|
||||
#include "auto_test_support.h"
|
||||
#include "check_compat.h"
|
||||
|
||||
static uint8_t const key[] = {
|
||||
0x15, 0xE9, 0xC3, 0x09, 0xCF, 0xCB, 0x79, 0xFD,
|
||||
0xDF, 0x0E, 0xBA, 0x05, 0x7D, 0xAB, 0xB4, 0x9F,
|
||||
0xE1, 0x5F, 0x38, 0x03, 0xB1, 0xBF, 0xF0, 0x65,
|
||||
0x36, 0xAE, 0x2E, 0x5B, 0xA5, 0xE4, 0x69, 0x0E,
|
||||
};
|
||||
|
||||
// Try to bootstrap for 30 seconds.
|
||||
#define NUM_ITERATIONS (unsigned)(30.0 / (ITERATION_INTERVAL / 1000.0))
|
||||
// Try to bootstrap for 20 seconds.
|
||||
#define NUM_ITERATIONS (unsigned)(20.0 / (ITERATION_INTERVAL / 1000.0))
|
||||
|
||||
int main(void)
|
||||
{
|
||||
@@ -24,13 +17,12 @@ int main(void)
|
||||
struct Tox_Options *opts = tox_options_new(nullptr);
|
||||
tox_options_set_udp_enabled(opts, true);
|
||||
tox_options_set_proxy_type(opts, TOX_PROXY_TYPE_SOCKS5);
|
||||
tox_options_set_proxy_host(opts, "localhost");
|
||||
tox_options_set_proxy_host(opts, "127.0.0.1");
|
||||
tox_options_set_proxy_port(opts, 51724);
|
||||
Tox *tox = tox_new_log(opts, nullptr, nullptr);
|
||||
tox_options_free(opts);
|
||||
|
||||
tox_add_tcp_relay(tox, "tox.ngc.zone", 33445, key, nullptr);
|
||||
tox_bootstrap(tox, "tox.ngc.zone", 33445, key, nullptr);
|
||||
bootstrap_tox_live_network(tox, true);
|
||||
|
||||
printf("Waiting for connection...");
|
||||
|
||||
|
@@ -53,7 +53,7 @@ static int handle_test_1(void *object, const IP_Port *source, const uint8_t *pac
|
||||
res_packet[0] = NET_PACKET_ANNOUNCE_RESPONSE;
|
||||
memcpy(res_packet + 1, res_message, sizeof(res_message));
|
||||
|
||||
if (send_onion_response(onion->net, source, res_packet, sizeof(res_packet),
|
||||
if (send_onion_response(onion->log, onion->net, source, res_packet, sizeof(res_packet),
|
||||
packet + sizeof(res_packet)) == -1) {
|
||||
return 1;
|
||||
}
|
||||
@@ -293,7 +293,7 @@ static void test_basic(void)
|
||||
uint64_t s;
|
||||
memcpy(&s, sb_data, sizeof(uint64_t));
|
||||
memcpy(test_3_pub_key, nodes[3].public_key, CRYPTO_PUBLIC_KEY_SIZE);
|
||||
int ret = send_announce_request(onion1->net, rng, &path, &nodes[3],
|
||||
int ret = send_announce_request(log1, onion1->net, rng, &path, &nodes[3],
|
||||
dht_get_self_public_key(onion1->dht),
|
||||
dht_get_self_secret_key(onion1->dht),
|
||||
zeroes,
|
||||
@@ -315,7 +315,7 @@ static void test_basic(void)
|
||||
memcpy(onion_announce_entry_public_key(onion2_a, 1), dht_get_self_public_key(onion2->dht), CRYPTO_PUBLIC_KEY_SIZE);
|
||||
onion_announce_entry_set_time(onion2_a, 1, mono_time_get(mono_time2));
|
||||
networking_registerhandler(onion1->net, NET_PACKET_ONION_DATA_RESPONSE, &handle_test_4, onion1);
|
||||
send_announce_request(onion1->net, rng, &path, &nodes[3],
|
||||
send_announce_request(log1, onion1->net, rng, &path, &nodes[3],
|
||||
dht_get_self_public_key(onion1->dht),
|
||||
dht_get_self_secret_key(onion1->dht),
|
||||
test_3_ping_id,
|
||||
@@ -340,7 +340,7 @@ static void test_basic(void)
|
||||
ck_assert_msg((onion3 != nullptr), "Onion failed initializing.");
|
||||
|
||||
random_nonce(rng, nonce);
|
||||
ret = send_data_request(onion3->net, rng, &path, &nodes[3].ip_port,
|
||||
ret = send_data_request(log3, onion3->net, rng, &path, &nodes[3].ip_port,
|
||||
dht_get_self_public_key(onion1->dht),
|
||||
dht_get_self_public_key(onion1->dht),
|
||||
nonce, (const uint8_t *)"Install gentoo", sizeof("Install gentoo"));
|
||||
|
@@ -42,6 +42,7 @@ static void send_message_test(AutoTox *autotoxes)
|
||||
|
||||
const size_t msgs_len = tox_max_message_length() + 1;
|
||||
uint8_t *msgs = (uint8_t *)malloc(msgs_len);
|
||||
ck_assert(msgs != nullptr);
|
||||
memset(msgs, MESSAGE_FILLER, msgs_len);
|
||||
|
||||
Tox_Err_Friend_Send_Message errm;
|
||||
|
@@ -10,6 +10,8 @@
|
||||
#include "../toxcore/tox.h"
|
||||
#include "../toxcore/tox_dispatch.h"
|
||||
#include "../toxcore/tox_events.h"
|
||||
#include "../toxcore/tox_private.h"
|
||||
#include "../toxcore/tox_unpack.h"
|
||||
#include "auto_test_support.h"
|
||||
#include "check_compat.h"
|
||||
|
||||
@@ -30,31 +32,36 @@ static void handle_events_friend_message(Tox *tox, const Tox_Event_Friend_Messag
|
||||
|
||||
static void dump_events(const char *path, const Tox_Events *events)
|
||||
{
|
||||
if (want_dump_events) {
|
||||
FILE *fh = fopen(path, "w");
|
||||
ck_assert(fh != nullptr);
|
||||
const uint32_t len = tox_events_bytes_size(events);
|
||||
uint8_t *buf = (uint8_t *)malloc(len);
|
||||
ck_assert(buf != nullptr);
|
||||
tox_events_get_bytes(events, buf);
|
||||
fwrite(buf, 1, len, fh);
|
||||
free(buf);
|
||||
fclose(fh);
|
||||
}
|
||||
FILE *fh = fopen(path, "w");
|
||||
ck_assert(fh != nullptr);
|
||||
const uint32_t len = tox_events_bytes_size(events);
|
||||
uint8_t *buf = (uint8_t *)malloc(len);
|
||||
ck_assert(buf != nullptr);
|
||||
ck_assert(tox_events_get_bytes(events, buf));
|
||||
fwrite(buf, 1, len, fh);
|
||||
free(buf);
|
||||
fclose(fh);
|
||||
}
|
||||
|
||||
static void print_events(const Tox_System *sys, Tox_Events *events)
|
||||
{
|
||||
const uint32_t size = tox_events_bytes_size(events);
|
||||
|
||||
uint8_t *bytes = (uint8_t *)malloc(size);
|
||||
ck_assert(bytes != nullptr);
|
||||
uint8_t *bytes1 = (uint8_t *)malloc(size);
|
||||
uint8_t *bytes2 = (uint8_t *)malloc(size);
|
||||
ck_assert(bytes1 != nullptr);
|
||||
ck_assert(bytes2 != nullptr);
|
||||
|
||||
tox_events_get_bytes(events, bytes);
|
||||
ck_assert(tox_events_get_bytes(events, bytes1));
|
||||
ck_assert(tox_events_get_bytes(events, bytes2));
|
||||
|
||||
Tox_Events *events_copy = tox_events_load(sys, bytes, size);
|
||||
// Make sure get_bytes is deterministic.
|
||||
ck_assert(memcmp(bytes1, bytes2, size) == 0);
|
||||
|
||||
Tox_Events *events_copy = tox_events_load(sys, bytes1, size);
|
||||
ck_assert(events_copy != nullptr);
|
||||
free(bytes);
|
||||
free(bytes1);
|
||||
free(bytes2);
|
||||
|
||||
ck_assert(tox_events_equal(sys, events, events_copy));
|
||||
|
||||
@@ -72,7 +79,9 @@ static bool await_message(Tox **toxes, const Tox_Dispatch *dispatch)
|
||||
// Check if tox 2 got the message from tox 1.
|
||||
Tox_Events *events = tox_events_iterate(toxes[1], false, nullptr);
|
||||
|
||||
dump_events("/tmp/test.mp", events);
|
||||
if (want_dump_events) {
|
||||
dump_events("/tmp/test.mp", events);
|
||||
}
|
||||
|
||||
bool success = false;
|
||||
tox_dispatch_invoke(dispatch, events, toxes[1], &success);
|
||||
@@ -160,9 +169,22 @@ static void test_tox_events(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void fake_test_unpack(void)
|
||||
{
|
||||
// TODO(Green-Sky): add proper unpack tests and/or implement ngc events
|
||||
(void)tox_group_privacy_state_unpack;
|
||||
(void)tox_group_privacy_state_unpack;
|
||||
(void)tox_group_voice_state_unpack;
|
||||
(void)tox_group_topic_lock_unpack;
|
||||
(void)tox_group_join_fail_unpack;
|
||||
(void)tox_group_mod_event_unpack;
|
||||
(void)tox_group_exit_type_unpack;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
setvbuf(stdout, nullptr, _IONBF, 0);
|
||||
test_tox_events();
|
||||
fake_test_unpack();
|
||||
return 0;
|
||||
}
|
||||
|
@@ -28,6 +28,15 @@ static bool await_message(Tox **toxes)
|
||||
const uint8_t *msg = tox_event_friend_message_get_message(msg_event);
|
||||
ck_assert_msg(memcmp(msg, "hello", sizeof("hello")) == 0,
|
||||
"message was not expected 'hello' but '%s'", (const char *)msg);
|
||||
|
||||
const uint32_t event_count = tox_events_get_size(events);
|
||||
for (uint32_t j = 0; j < event_count; ++j) {
|
||||
const Tox_Event *event = tox_events_get(events, j);
|
||||
if (tox_event_get_type(event) == TOX_EVENT_FRIEND_MESSAGE) {
|
||||
ck_assert(tox_event_get_friend_message(event) == msg_event);
|
||||
}
|
||||
}
|
||||
|
||||
tox_events_free(events);
|
||||
return true;
|
||||
}
|
||||
|
@@ -12,4 +12,4 @@ jobs:
|
||||
- bash: python -m pip install conan==1.59.0
|
||||
- bash: git submodule update --init --recursive
|
||||
- bash: conan install -if _build -o with_tests=True -o shared=$(conan.shared) .
|
||||
- bash: CONAN_CPU_COUNT=50 CTEST_OUTPUT_ON_FAILURE=1 conan build -bf _build -if _build .
|
||||
- bash: CONAN_CPU_COUNT=50 CTEST_OUTPUT_ON_FAILURE=1 conan build -bf _build -if _build . || true
|
||||
|
@@ -1,62 +0,0 @@
|
||||
# Find and compile the GTest library.
|
||||
|
||||
include(CheckCXXCompilerFlag)
|
||||
include(CheckIncludeFileCXX)
|
||||
|
||||
message(STATUS "Checking for gtest")
|
||||
|
||||
# Look for the sources.
|
||||
find_file(GTEST_ALL_CC gtest-all.cc PATHS
|
||||
${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/src
|
||||
/usr/src/gtest/src
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
if(GTEST_ALL_CC)
|
||||
# ../.. from the source file is the source root.
|
||||
get_filename_component(GTEST_SRC_DIR ${GTEST_ALL_CC} DIRECTORY)
|
||||
get_filename_component(GTEST_SRC_ROOT ${GTEST_SRC_DIR} DIRECTORY)
|
||||
|
||||
# Look for the header file.
|
||||
include(CheckIncludeFileCXX)
|
||||
include_directories(SYSTEM ${GTEST_SRC_ROOT}/include)
|
||||
check_include_file_cxx("gtest/gtest.h" HAVE_GTEST_GTEST_H)
|
||||
|
||||
if(HAVE_GTEST_GTEST_H)
|
||||
message(STATUS "Found gtest: ${GTEST_SRC_ROOT}")
|
||||
|
||||
add_library(gtest
|
||||
${GTEST_SRC_DIR}/gtest-all.cc
|
||||
${GTEST_SRC_DIR}/gtest_main.cc)
|
||||
target_include_directories(gtest PRIVATE ${GTEST_SRC_ROOT})
|
||||
|
||||
# Ignore all warnings for gtest. We don't care about their implementation.
|
||||
check_cxx_compiler_flag("-w" HAVE_CXX_W QUIET)
|
||||
if(HAVE_CXX_W)
|
||||
set_target_properties(gtest PROPERTIES COMPILE_FLAGS "-w")
|
||||
endif()
|
||||
|
||||
set(HAVE_GTEST TRUE)
|
||||
set(TEST_CXX_FLAGS "")
|
||||
|
||||
check_cxx_compiler_flag("-Wno-global-constructors" HAVE_CXX_W_NO_GLOBAL_CONSTRUCTORS QUIET)
|
||||
if(HAVE_CXX_W_NO_GLOBAL_CONSTRUCTORS)
|
||||
set(TEST_CXX_FLAGS "${TEST_CXX_FLAGS} -Wno-global-constructors")
|
||||
endif()
|
||||
|
||||
check_cxx_compiler_flag("-Wno-zero-as-null-pointer-constant" HAVE_CXX_W_NO_ZERO_AS_NULL_POINTER_CONSTANT QUIET)
|
||||
if(HAVE_CXX_W_NO_ZERO_AS_NULL_POINTER_CONSTANT)
|
||||
set(TEST_CXX_FLAGS "${TEST_CXX_FLAGS} -Wno-zero-as-null-pointer-constant")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
function(unit_test subdir target)
|
||||
if(HAVE_GTEST)
|
||||
add_executable(unit_${target}_test ${subdir}/${target}_test.cc)
|
||||
target_link_modules(unit_${target}_test toxcore gtest)
|
||||
set_target_properties(unit_${target}_test PROPERTIES COMPILE_FLAGS "${TEST_CXX_FLAGS}")
|
||||
add_test(NAME ${target} COMMAND ${CROSSCOMPILING_EMULATOR} unit_${target}_test)
|
||||
set_property(TEST ${target} PROPERTY ENVIRONMENT "LLVM_PROFILE_FILE=${target}.profraw")
|
||||
endif()
|
||||
endfunction()
|
@@ -1,76 +1,36 @@
|
||||
###############################################################################
|
||||
#
|
||||
# :: For UNIX-like systems that have pkg-config.
|
||||
# :: For systems that have pkg-config.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
include(ModulePackage)
|
||||
find_package(PkgConfig REQUIRED)
|
||||
|
||||
find_package(Threads REQUIRED)
|
||||
find_library(NSL_LIBRARIES nsl )
|
||||
find_library(RT_LIBRARIES rt )
|
||||
find_library(SOCKET_LIBRARIES socket)
|
||||
|
||||
find_library(NSL_LIBRARIES nsl )
|
||||
find_library(RT_LIBRARIES rt )
|
||||
find_library(SOCKET_LIBRARIES socket )
|
||||
find_package(pthreads QUIET)
|
||||
if(NOT TARGET PThreads4W::PThreads4W)
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
find_package(Threads REQUIRED)
|
||||
endif()
|
||||
|
||||
# For toxcore.
|
||||
pkg_use_module(LIBSODIUM libsodium )
|
||||
pkg_search_module(LIBSODIUM libsodium IMPORTED_TARGET REQUIRED)
|
||||
if(MSVC)
|
||||
find_package(unofficial-sodium REQUIRED)
|
||||
endif()
|
||||
|
||||
# For toxav.
|
||||
pkg_use_module(OPUS "opus;Opus" )
|
||||
pkg_use_module(VPX "vpx;libvpx" )
|
||||
pkg_search_module(OPUS opus IMPORTED_TARGET)
|
||||
if(NOT OPUS_FOUND)
|
||||
pkg_search_module(OPUS Opus IMPORTED_TARGET)
|
||||
endif()
|
||||
pkg_search_module(VPX vpx IMPORTED_TARGET)
|
||||
if(NOT VPX_FOUND)
|
||||
pkg_search_module(VPX libvpx IMPORTED_TARGET)
|
||||
endif()
|
||||
|
||||
# For tox-bootstrapd.
|
||||
pkg_use_module(LIBCONFIG libconfig )
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# :: For MSVC Windows builds.
|
||||
#
|
||||
# These require specific installation paths of dependencies:
|
||||
# - libsodium in third-party/libsodium/Win32/Release/v140/dynamic
|
||||
# - pthreads in third-party/pthreads-win32/Pre-built.2
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
if(MSVC)
|
||||
# libsodium
|
||||
# ---------
|
||||
if(NOT LIBSODIUM_FOUND)
|
||||
find_library(LIBSODIUM_LIBRARIES
|
||||
NAMES sodium libsodium
|
||||
PATHS
|
||||
"third_party/libsodium/Win32/Release/v140/dynamic"
|
||||
"third_party/libsodium/x64/Release/v140/dynamic"
|
||||
)
|
||||
if(LIBSODIUM_LIBRARIES)
|
||||
include_directories("third_party/libsodium/include")
|
||||
set(LIBSODIUM_FOUND TRUE)
|
||||
message("libsodium: ${LIBSODIUM_LIBRARIES}")
|
||||
else()
|
||||
message(FATAL_ERROR "libsodium libraries not found")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# pthreads
|
||||
# --------
|
||||
if(CMAKE_USE_WIN32_THREADS_INIT)
|
||||
find_library(CMAKE_THREAD_LIBS_INIT
|
||||
NAMES pthreadVC2
|
||||
PATHS
|
||||
"third_party/pthreads-win32/Pre-built.2/lib/x86"
|
||||
"third_party/pthreads-win32/Pre-built.2/lib/x64"
|
||||
)
|
||||
if(CMAKE_THREAD_LIBS_INIT)
|
||||
include_directories("third_party/pthreads-win32/Pre-built.2/include")
|
||||
add_definitions(-DHAVE_STRUCT_TIMESPEC)
|
||||
message("libpthreads: ${CMAKE_THREAD_LIBS_INIT}")
|
||||
else()
|
||||
find_package(pthreads4w)
|
||||
if(NOT pthreads4w_FOUND)
|
||||
message(FATAL_ERROR "libpthreads libraries not found")
|
||||
endif()
|
||||
include_directories(${pthreads4w_INCLUDE_DIR})
|
||||
link_libraries(${pthreads4w_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
pkg_search_module(LIBCONFIG libconfig IMPORTED_TARGET)
|
||||
|
103
external/toxcore/c-toxcore/cmake/ModulePackage.cmake
vendored
103
external/toxcore/c-toxcore/cmake/ModulePackage.cmake
vendored
@@ -19,58 +19,21 @@ if(FULLY_STATIC)
|
||||
set(ENABLE_STATIC ON)
|
||||
endif()
|
||||
|
||||
find_package(PkgConfig)
|
||||
|
||||
function(pkg_use_module mod pkgs)
|
||||
foreach(pkg IN ITEMS ${pkgs})
|
||||
if(PKG_CONFIG_FOUND)
|
||||
pkg_search_module(${mod} ${pkg})
|
||||
endif()
|
||||
if(NOT ${mod}_FOUND)
|
||||
find_package(${pkg} QUIET)
|
||||
# This is very very ugly, but the variables are sometimes used in this scope
|
||||
# and sometimes in the parent scope, so we have to set them to both places.
|
||||
set(${mod}_FOUND ${${pkg}_FOUND})
|
||||
set(${mod}_FOUND ${${pkg}_FOUND} PARENT_SCOPE)
|
||||
set(${mod}_LIBRARIES ${${pkg}_LIBS})
|
||||
set(${mod}_LIBRARIES ${${pkg}_LIBS} PARENT_SCOPE)
|
||||
set(${mod}_LIBRARY_DIRS ${${pkg}_LIBRARY_DIRS})
|
||||
set(${mod}_LIBRARY_DIRS ${${pkg}_LIBRARY_DIRS} PARENT_SCOPE)
|
||||
set(${mod}_INCLUDE_DIRS ${${pkg}_INCLUDE_DIRS})
|
||||
set(${mod}_INCLUDE_DIRS ${${pkg}_INCLUDE_DIRS} PARENT_SCOPE)
|
||||
endif()
|
||||
if(${mod}_FOUND)
|
||||
link_directories(${${mod}_LIBRARY_DIRS})
|
||||
include_directories(${${mod}_INCLUDE_DIRS})
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${${mod}_CFLAGS_OTHER}" PARENT_SCOPE)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${${mod}_CFLAGS_OTHER}" PARENT_SCOPE)
|
||||
|
||||
if(NOT MSVC)
|
||||
foreach(dir ${${mod}_INCLUDE_DIRS})
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -isystem ${dir}" PARENT_SCOPE)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem ${dir}" PARENT_SCOPE)
|
||||
endforeach()
|
||||
endif()
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
function(add_module lib)
|
||||
set(${lib}_SOURCES ${ARGN} PARENT_SCOPE)
|
||||
|
||||
if(ENABLE_SHARED)
|
||||
add_library(${lib}_shared SHARED ${ARGN})
|
||||
set_target_properties(${lib}_shared PROPERTIES OUTPUT_NAME ${lib})
|
||||
endif()
|
||||
if(ENABLE_STATIC)
|
||||
add_library(${lib}_static STATIC ${ARGN})
|
||||
set_target_properties(${lib}_static PROPERTIES OUTPUT_NAME ${lib})
|
||||
if(NOT MSVC)
|
||||
set_target_properties(${lib}_static PROPERTIES OUTPUT_NAME ${lib})
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(install_module lib)
|
||||
if(ENABLE_SHARED)
|
||||
if(TARGET ${lib}_shared)
|
||||
set_target_properties(${lib}_shared PROPERTIES
|
||||
VERSION ${SOVERSION}
|
||||
SOVERSION ${SOVERSION_MAJOR}
|
||||
@@ -80,7 +43,7 @@ function(install_module lib)
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
endif()
|
||||
if(ENABLE_STATIC)
|
||||
if(TARGET ${lib}_static)
|
||||
install(TARGETS ${lib}_static
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
@@ -113,59 +76,3 @@ function(install_module lib)
|
||||
install(FILES ${header} ${ARGN})
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
function(target_link_modules target)
|
||||
# If the target we're adding dependencies to is a shared library, add it to
|
||||
# the set of targets.
|
||||
if(TARGET ${target}_shared)
|
||||
set(_targets ${_targets} ${target}_shared)
|
||||
# Shared libraries should first try to link against other shared libraries.
|
||||
set(${target}_shared_primary shared)
|
||||
# If that fails (because the shared target doesn't exist), try linking
|
||||
# against the static library. This requires the static library's objects to
|
||||
# be PIC.
|
||||
set(${target}_shared_secondary static)
|
||||
endif()
|
||||
# It can also be a static library at the same time.
|
||||
if(TARGET ${target}_static)
|
||||
set(_targets ${_targets} ${target}_static)
|
||||
# Static libraries aren't actually linked, but their dependencies are
|
||||
# recorded by "linking" them. If we link an executable to a static library,
|
||||
# we want to also link statically against its transitive dependencies.
|
||||
set(${target}_static_primary static)
|
||||
# If a dependency doesn't exist as static library, we link against the
|
||||
# shared one.
|
||||
set(${target}_static_secondary shared)
|
||||
endif()
|
||||
# If it's neither, then it's an executable.
|
||||
if(NOT _targets)
|
||||
set(_targets ${_targets} ${target})
|
||||
# Executables preferably link against static libraries, so they are
|
||||
# standalone and can be shipped without any external dependencies. As a
|
||||
# frame of reference: tests become roughly 600-800K binaries instead of
|
||||
# 50-100K on x86_64 Linux.
|
||||
set(${target}_primary static)
|
||||
set(${target}_secondary shared)
|
||||
endif()
|
||||
|
||||
foreach(dep ${ARGN})
|
||||
foreach(_target ${_targets})
|
||||
if(TARGET ${dep}_${${_target}_primary})
|
||||
target_link_libraries(${_target} ${dep}_${${_target}_primary})
|
||||
elseif(TARGET ${dep}_${${_target}_secondary})
|
||||
target_link_libraries(${_target} ${dep}_${${_target}_secondary})
|
||||
else()
|
||||
# We record the modules linked to this target, so that we can collect
|
||||
# them later when linking a composed module.
|
||||
list(FIND LINK_MODULES ${dep} _index)
|
||||
if(_index EQUAL -1)
|
||||
set(LINK_MODULES ${LINK_MODULES} ${dep})
|
||||
endif()
|
||||
|
||||
target_link_libraries(${_target} ${dep})
|
||||
endif()
|
||||
endforeach()
|
||||
endforeach()
|
||||
|
||||
set(${target}_LINK_MODULES ${${target}_LINK_MODULES} ${LINK_MODULES} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
@@ -29,7 +29,7 @@ function(_make_version_script target)
|
||||
list(GET sublib 1 ns)
|
||||
|
||||
execute_process(
|
||||
COMMAND ${SHELL} -c "egrep '^\\w' ${header} | grep '${ns}_[a-z0-9_]*(' | grep -v '^typedef' | grep -o '${ns}_[a-z0-9_]*(' | egrep -o '\\w+' | sort -u"
|
||||
COMMAND ${SHELL} -c "egrep '^\\w' ${header} | grep '${ns}_[a-z0-9_]*(' | grep -v '^typedef' | grep -o '${ns}_[a-z0-9_]*(' | egrep -o '[a-z0-9_]+' | sort -u"
|
||||
OUTPUT_VARIABLE sublib_SYMS
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
string(REPLACE "\n" ";" sublib_SYMS ${sublib_SYMS})
|
||||
|
130
external/toxcore/c-toxcore/configure.ac
vendored
130
external/toxcore/c-toxcore/configure.ac
vendored
@@ -22,8 +22,6 @@ BUILD_AV="yes"
|
||||
BUILD_TESTING="yes"
|
||||
|
||||
LIBCONFIG_FOUND="no"
|
||||
WANT_NACL="no"
|
||||
ADD_NACL_OBJECTS_TO_PKGCONFIG="yes"
|
||||
SET_SO_VERSION="yes"
|
||||
|
||||
AC_ARG_ENABLE([soname-versions],
|
||||
@@ -38,26 +36,11 @@ AC_ARG_ENABLE([soname-versions],
|
||||
)
|
||||
AM_CONDITIONAL(SET_SO_VERSION, test "x$SET_SO_VERSION" = "xyes")
|
||||
|
||||
AC_ARG_ENABLE([nacl],
|
||||
[AC_HELP_STRING([--enable-nacl], [use nacl instead of libsodium (default: disabled)]) ],
|
||||
[
|
||||
if test "x$enableval" = "xno"; then
|
||||
WANT_NACL="no"
|
||||
elif test "x$enableval" = "xyes"; then
|
||||
WANT_NACL="yes"
|
||||
fi
|
||||
]
|
||||
)
|
||||
|
||||
AC_ARG_ENABLE([randombytes-stir],
|
||||
[AC_HELP_STRING([--enable-randombytes-stir], [use randombytes_stir() instead of sodium_init() for faster startup on android (default: disabled)]) ],
|
||||
[
|
||||
if test "x$enableval" = "xyes"; then
|
||||
if test "x$WANT_NACL" = "xyes"; then
|
||||
AC_MSG_WARN([randombytes_stir() is not available with NaCl library])
|
||||
else
|
||||
AC_DEFINE([USE_RANDOMBYTES_STIR], [1], [randombytes_stir() instead of sodium_init()])
|
||||
fi
|
||||
AC_DEFINE([USE_RANDOMBYTES_STIR], [1], [randombytes_stir() instead of sodium_init()])
|
||||
fi
|
||||
]
|
||||
)
|
||||
@@ -171,16 +154,6 @@ if test "$use_ipv6" != "yes"; then
|
||||
AC_DEFINE([USE_IPV6],[0],[define to 0 to force ipv4])
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE([[test_network]],
|
||||
[AS_HELP_STRING([[--enable-test-network[=ARG]]], [build tox for a test network incompatible with the main DHT [no]])],
|
||||
[use_test_network=${enableval}],
|
||||
[use_test_network='no']
|
||||
)
|
||||
|
||||
if test "$use_test_network" == "yes"; then
|
||||
AC_DEFINE([USE_TEST_NETWORK],[1],[define to 1 to enable the test network])
|
||||
fi
|
||||
|
||||
AX_HAVE_EPOLL
|
||||
if test "$enable_epoll" != "no"; then
|
||||
if test "${ax_cv_have_epoll}" = "yes"; then
|
||||
@@ -197,8 +170,6 @@ fi
|
||||
DEPSEARCH=
|
||||
LIBSODIUM_SEARCH_HEADERS=
|
||||
LIBSODIUM_SEARCH_LIBS=
|
||||
NACL_SEARCH_HEADERS=
|
||||
NACL_SEARCH_LIBS=
|
||||
|
||||
AC_ARG_WITH(dependency-search,
|
||||
AC_HELP_STRING([--with-dependency-search=DIR],
|
||||
@@ -216,24 +187,6 @@ if test -n "$DEPSEARCH"; then
|
||||
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$DEPSEARCH/lib/pkgconfig
|
||||
fi
|
||||
|
||||
AC_ARG_WITH(nacl-headers,
|
||||
AC_HELP_STRING([--with-nacl-headers=DIR],
|
||||
[search for nacl<F2> header files in DIR]),
|
||||
[
|
||||
NACL_SEARCH_HEADERS="$withval"
|
||||
AC_MSG_NOTICE([will search for nacl header files in $withval])
|
||||
]
|
||||
)
|
||||
|
||||
AC_ARG_WITH(nacl-libs,
|
||||
AC_HELP_STRING([--with-nacl-libs=DIR],
|
||||
[search for nacl libraries in DIR]),
|
||||
[
|
||||
NACL_SEARCH_LIBS="$withval"
|
||||
AC_MSG_NOTICE([will search for nacl libraries in $withval])
|
||||
]
|
||||
)
|
||||
|
||||
AC_ARG_WITH(libsodium-headers,
|
||||
AC_HELP_STRING([--with-libsodium-headers=DIR],
|
||||
[search for libsodium header files in DIR]),
|
||||
@@ -252,11 +205,6 @@ AC_ARG_WITH(libsodium-libs,
|
||||
]
|
||||
)
|
||||
|
||||
if test "x$WANT_NACL" = "xyes"; then
|
||||
enable_shared=no
|
||||
enable_static=yes
|
||||
fi
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_CC_C99
|
||||
|
||||
@@ -287,7 +235,6 @@ case $host_os in
|
||||
LDFLAGS="$LDFLAGS -L/usr/local/lib"
|
||||
CFLAGS="$CFLAGS -I/usr/local/include"
|
||||
CPPFLAGS="$CPPFLAGS -I/usr/local/include"
|
||||
ADD_NACL_OBJECTS_TO_PKGCONFIG="no"
|
||||
;;
|
||||
darwin*)
|
||||
MACH=yes
|
||||
@@ -312,50 +259,7 @@ PKG_CHECK_MODULES([LIBSODIUM], [libsodium],
|
||||
LIBSODIUM_FOUND="no"
|
||||
])
|
||||
|
||||
if test "x$WANT_NACL" = "xyes"; then
|
||||
NACL_LIBS=
|
||||
NACL_LDFLAGS=
|
||||
NACL_OBJECTS=
|
||||
NACL_OBJECTS_PKGCONFIG=
|
||||
LDFLAGS_SAVE="$LDFLAGS"
|
||||
if test -n "$NACL_SEARCH_LIBS"; then
|
||||
LDFLAGS="-L$NACL_SEARCH_LIBS $LDFLAGS"
|
||||
AC_CHECK_LIB(nacl, random,
|
||||
[
|
||||
NACL_LDFLAGS="-L$NACL_SEARCH_LIBS"
|
||||
NACL_LIBS="-lnacl"
|
||||
],
|
||||
[
|
||||
AC_MSG_ERROR([library nacl was not found in requested location $NACL_SEARCH_LIBS])
|
||||
]
|
||||
)
|
||||
else
|
||||
AC_CHECK_LIB(nacl, random,
|
||||
[],
|
||||
[
|
||||
AC_MSG_ERROR([you enabled nacl support, but library nacl was not found on your system])
|
||||
]
|
||||
)
|
||||
fi
|
||||
|
||||
if (test -f "$NACL_SEARCH_LIBS/cpucycles.o") &&
|
||||
(test -f "$NACL_SEARCH_LIBS/randombytes.o"); then
|
||||
NACL_OBJECTS="$NACL_SEARCH_LIBS/cpucycles.o $NACL_SEARCH_LIBS/randombytes.o"
|
||||
AC_MSG_NOTICE([found extra NaCl objects: $NACL_OBJECTS])
|
||||
if test "x$ADD_NACL_OBJECTS_TO_PKGCONFIG" = "xyes"; then
|
||||
AC_MSG_NOTICE([adding extra NaCl objects to pkg-config file])
|
||||
NACL_OBJECTS_PKGCONFIG="$NACL_OBJECTS"
|
||||
fi
|
||||
else
|
||||
AC_MSG_ERROR([required NaCl object files cpucycles.o randombytes.o not found, please specify their location using the --with-nacl-libs parameter])
|
||||
fi
|
||||
|
||||
LDFLAGS="$LDFLAGS_SAVE"
|
||||
AC_SUBST(NACL_LIBS)
|
||||
AC_SUBST(NACL_LDFLAGS)
|
||||
AC_SUBST(NACL_OBJECTS)
|
||||
AC_SUBST(NACL_OBJECTS_PKGCONFIG)
|
||||
elif test "x$LIBSODIUM_FOUND" = "xno"; then
|
||||
if test "x$LIBSODIUM_FOUND" = "xno"; then
|
||||
LIBSODIUM_LIBS=
|
||||
LIBSODIUM_LDFLAGS=
|
||||
LDFLAGS_SAVE="$LDFLAGS"
|
||||
@@ -388,34 +292,7 @@ fi
|
||||
AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h stdint.h stdlib.h string.h sys/socket.h sys/time.h unistd.h])
|
||||
|
||||
|
||||
if test "x$WANT_NACL" = "xyes"; then
|
||||
NACL_CFLAGS=
|
||||
CFLAGS_SAVE="$CFLAGS"
|
||||
CPPFLAGS_SAVE="$CPPFLAGS"
|
||||
if test -n "$NACL_SEARCH_HEADERS"; then
|
||||
CFLAGS="-I$NACL_SEARCH_HEADERS $CFLAGS"
|
||||
CPPFLAGS="-I$NACL_SEARCH_HEADERS $CPPFLAGS"
|
||||
AC_CHECK_HEADER(crypto_box.h,
|
||||
[
|
||||
NACL_CFLAGS="-I$NACL_SEARCH_HEADERS"
|
||||
],
|
||||
[
|
||||
AC_MSG_ERROR([header files for library nacl were not found in requested location $NACL_SEARCH_HEADERS])
|
||||
]
|
||||
)
|
||||
else
|
||||
AC_CHECK_HEADER(crypto_box.h,
|
||||
[],
|
||||
[
|
||||
AC_MSG_ERROR([you enabled nacl support, but nacl header files were not found on your system])
|
||||
]
|
||||
)
|
||||
fi
|
||||
CFLAGS="$CFLAGS_SAVE"
|
||||
CPPFLAGS="$CPPFLAGS_SAVE"
|
||||
AC_SUBST(NACL_CFLAGS)
|
||||
AC_DEFINE([VANILLA_NACL], [1], [use nacl instead of libsodium])
|
||||
elif test "x$LIBSODIUM_FOUND" = "xno"; then
|
||||
if test "x$LIBSODIUM_FOUND" = "xno"; then
|
||||
LIBSODIUM_CFLAGS=
|
||||
CFLAGS_SAVE="$CFLAGS"
|
||||
CPPFLAGS_SAVE="$CPPFLAGS"
|
||||
@@ -555,7 +432,6 @@ AM_CONDITIONAL(BUILD_DHT_BOOTSTRAP, test "x$BUILD_DHT_BOOTSTRAP" = "xyes")
|
||||
AM_CONDITIONAL(BUILD_TESTS, test "x$BUILD_TESTS" = "xyes")
|
||||
AM_CONDITIONAL(BUILD_AV, test "x$BUILD_AV" = "xyes")
|
||||
AM_CONDITIONAL(BUILD_TESTING, test "x$BUILD_TESTING" = "xyes")
|
||||
AM_CONDITIONAL(WITH_NACL, test "x$WANT_NACL" = "xyes")
|
||||
AM_CONDITIONAL(WIN32, test "x$WIN32" = "xyes")
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
|
106
external/toxcore/c-toxcore/docs/TCP_Network.txt
vendored
106
external/toxcore/c-toxcore/docs/TCP_Network.txt
vendored
@@ -1,100 +1,100 @@
|
||||
It has come to our attention that to achieve decent market penetration Tox
|
||||
must work behind ALL internet connections, may they be behind enterprise NATs
|
||||
or any other bad network conditions.
|
||||
It has come to our attention that to achieve decent market penetration Tox
|
||||
must work behind ALL internet connections, may they be behind enterprise NATs
|
||||
or any other bad network conditions.
|
||||
|
||||
The people who have issues with the UDP direct connection approach seem to be a
|
||||
The people who have issues with the UDP direct connection approach seem to be a
|
||||
small minority though it is hard to estimate how many.
|
||||
|
||||
This means that routing their packets using good nodes on the network will
|
||||
This means that routing their packets using good nodes on the network will
|
||||
probably not take a huge toll on the network and will assure that people
|
||||
can use Tox regardless of the quality of their internet connection.
|
||||
|
||||
|
||||
How it's going to work:
|
||||
1. Alice, a Tox client on a TCP only network generates a temporary public key
|
||||
1. Alice, a Tox client on a TCP only network generates a temporary public key
|
||||
and connects to a bootstrap node.
|
||||
|
||||
2. Using the bootstrap node she finds and connects to a couple (exact number
|
||||
2. Using the bootstrap node she finds and connects to a couple (exact number
|
||||
to be determined later) number of random nodes that have TCP relay support.
|
||||
|
||||
3. She uses the onion through the TCP relay connections to send friend requests
|
||||
or tell online friends which TCP nodes she is connected to and her temporary
|
||||
3. She uses the onion through the TCP relay connections to send friend requests
|
||||
or tell online friends which TCP nodes she is connected to and her temporary
|
||||
public key.
|
||||
|
||||
4. Bob receives an onion packet from Alice telling him which nodes she is
|
||||
connected to. Bob connects to these nodes and establishes a routed connection
|
||||
4. Bob receives an onion packet from Alice telling him which nodes she is
|
||||
connected to. Bob connects to these nodes and establishes a routed connection
|
||||
with Alice using that temporary public key.
|
||||
|
||||
5. That connection is used by both to transmit encrypted Messenger and A/V
|
||||
5. That connection is used by both to transmit encrypted Messenger and A/V
|
||||
packets.
|
||||
|
||||
6. If one of the nodes shuts down while it is currently routing traffic, Alice
|
||||
6. If one of the nodes shuts down while it is currently routing traffic, Alice
|
||||
and bob just switch to one of the other nodes they are both connected to.
|
||||
|
||||
|
||||
Detailed implementation details:
|
||||
|
||||
There are two distinct parts for TCP relays, the client part and the server
|
||||
There are two distinct parts for TCP relays, the client part and the server
|
||||
part.
|
||||
|
||||
The server acts as the actual relay. Servers must have fully forwarded TCP
|
||||
ports (NAT-PMP and uPNP can help here). The first port the server will try
|
||||
binding to is 443 followed by port 3389 and possibly some others. Onion packets
|
||||
The server acts as the actual relay. Servers must have fully forwarded TCP
|
||||
ports (NAT-PMP and uPNP can help here). The first port the server will try
|
||||
binding to is 443 followed by port 3389 and possibly some others. Onion packets
|
||||
can be sent/received through the TCP servers.
|
||||
|
||||
|
||||
Server:
|
||||
|
||||
The public/private key pair the TCP server uses is the same one he uses for the
|
||||
DHT.
|
||||
The public/private key pair the TCP server uses is the same one he uses for the
|
||||
DHT.
|
||||
|
||||
all crypto for communication with the server uses the crypto_box() function of
|
||||
NaCl.
|
||||
all crypto for communication with the server uses the crypto_box() function of
|
||||
libsodium.
|
||||
|
||||
TCP doesn't have packets so what we will refer to as packets are sent this way:
|
||||
TCP doesn't have packets so what we will refer to as packets are sent this way:
|
||||
[[uint16_t (length of data)][data]]
|
||||
|
||||
So if you would inspect the TCP stream you would see:
|
||||
[[uint16_t (length of data)][data]][[uint16_t (length of
|
||||
[[uint16_t (length of data)][data]][[uint16_t (length of
|
||||
data)][data]][[uint16_t (length of data)][data]]
|
||||
|
||||
Note that both handshake packets don't have this format (the length for them is
|
||||
Note that both handshake packets don't have this format (the length for them is
|
||||
always the same so we don't need to specify it.)
|
||||
|
||||
When the client connects to the server, he sends this packet:
|
||||
[public key of client (32 bytes)][nonce for the encrypted data [24
|
||||
bytes]][encrypted with the private key of the client and public key of the
|
||||
server and the nonce:[public key (32 bytes) and][base nonce we want the server
|
||||
[public key of client (32 bytes)][nonce for the encrypted data [24
|
||||
bytes]][encrypted with the private key of the client and public key of the
|
||||
server and the nonce:[public key (32 bytes) and][base nonce we want the server
|
||||
to use to encrypt the packets sent to us (24 bytes)]]
|
||||
|
||||
The server responds with:
|
||||
[nonce for the encrypted data [24 bytes]][encrypted with the public key of the
|
||||
client and private key of the server and the nonce:[public key (32 bytes)
|
||||
and][base nonce we want the client to use to encrypt the packets sent to us (24
|
||||
[nonce for the encrypted data [24 bytes]][encrypted with the public key of the
|
||||
client and private key of the server and the nonce:[public key (32 bytes)
|
||||
and][base nonce we want the client to use to encrypt the packets sent to us (24
|
||||
bytes)]]
|
||||
|
||||
All packets to the server are end to end encrypted with the information
|
||||
received
|
||||
All packets to the server are end to end encrypted with the information
|
||||
received
|
||||
(and sent) in the handshake.
|
||||
|
||||
(first packet is encrypted with the base nonce the private key for which the
|
||||
client sent the server the public key and the public key we sent to the client,
|
||||
(first packet is encrypted with the base nonce the private key for which the
|
||||
client sent the server the public key and the public key we sent to the client,
|
||||
the next with base nonce + 1...)
|
||||
|
||||
The connection is set to an unconfirmed state until a packet is received and
|
||||
The connection is set to an unconfirmed state until a packet is received and
|
||||
decrypted correctly using the information in the handshake.
|
||||
|
||||
each packet sent to/from the server has an id (the first byte of the plain text
|
||||
each packet sent to/from the server has an id (the first byte of the plain text
|
||||
data of the packet.)
|
||||
|
||||
ids 0 to 15 are reserved for special packets, ids 16 to 255 are used to denote
|
||||
ids 0 to 15 are reserved for special packets, ids 16 to 255 are used to denote
|
||||
who we want the data to be routed to/who the packet is from.
|
||||
|
||||
special ids and packets:
|
||||
0 - Routing request.
|
||||
[uint8_t id (0)][public key (32 bytes)]
|
||||
1 - Routing request response.
|
||||
[uint8_t id (1)][uint8_t (rpid) 0 if refused, packet id if accepted][public key
|
||||
[uint8_t id (1)][uint8_t (rpid) 0 if refused, packet id if accepted][public key
|
||||
(32 bytes)]
|
||||
2 - Connect notification:
|
||||
[uint8_t id (2)][uint8_t (packet id of connection that got connected)]
|
||||
@@ -108,44 +108,44 @@ special ids and packets:
|
||||
[uint8_t id (6)][destination public key (32 bytes)][data]
|
||||
7 - OOB recv
|
||||
[uint8_t id (7)][senders public key (32 bytes)][data]
|
||||
8 - onion packet (same format as initial onion packet (See: Prevent
|
||||
8 - onion packet (same format as initial onion packet (See: Prevent
|
||||
tracking.txt) but packet id is 8 instead of 128)
|
||||
9 - onion packet response (same format as onion packet with id 142 but id is 9
|
||||
9 - onion packet response (same format as onion packet with id 142 but id is 9
|
||||
instead.)
|
||||
|
||||
The rest of the special ids are reserved for possible future usage.
|
||||
|
||||
If the server receives a routing request he stores server side that the client
|
||||
wants to connect to the person with that public key and sends back a Routing
|
||||
If the server receives a routing request he stores server side that the client
|
||||
wants to connect to the person with that public key and sends back a Routing
|
||||
request response with the rpid along with the public key sent in the request.
|
||||
|
||||
If for some reason the server must refuse the routing request (too many) he
|
||||
If for some reason the server must refuse the routing request (too many) he
|
||||
sends the response with a rpid of 0.
|
||||
|
||||
If the person who the client wants to connect to is also online and wants to
|
||||
connect to the client a connect notification is sent to both with the
|
||||
If the person who the client wants to connect to is also online and wants to
|
||||
connect to the client a connect notification is sent to both with the
|
||||
appropriate packet id.
|
||||
|
||||
If either one disconnects, a disconnect notification is sent to the other with
|
||||
If either one disconnects, a disconnect notification is sent to the other with
|
||||
appropriate packet id.
|
||||
|
||||
If a client sends a disconnect notification, the entry on the server for that
|
||||
routed connection is cleared and a disconnect notification is sent to the peer
|
||||
If a client sends a disconnect notification, the entry on the server for that
|
||||
routed connection is cleared and a disconnect notification is sent to the peer
|
||||
(if he was online)
|
||||
|
||||
If the server receives an onion packet he handles it the same as he would if it
|
||||
was one received normally via UDP, he must also assure himself that any
|
||||
If the server receives an onion packet he handles it the same as he would if it
|
||||
was one received normally via UDP, he must also assure himself that any
|
||||
responses must be sent to the proper client.
|
||||
|
||||
Ping responses must have the same ping_id as the request.
|
||||
|
||||
If the server receives a ping packet he must respond with a ping response.
|
||||
|
||||
The server will send a ping packet to clients every 30 seconds, they have 30
|
||||
The server will send a ping packet to clients every 30 seconds, they have 30
|
||||
seconds to respond, if they don't the connection is deleted.
|
||||
|
||||
OOB send packets will be sent to the peer connected to the TCP server with the
|
||||
destination public key as a OOB recv packet. The client sending this packet has
|
||||
OOB send packets will be sent to the peer connected to the TCP server with the
|
||||
destination public key as a OOB recv packet. The client sending this packet has
|
||||
no way of knowing if the packet reached its destination.
|
||||
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
Encryption library used: http://nacl.cr.yp.to/
|
||||
Encryption library used: https://doc.libsodium.org/
|
||||
|
||||
|
||||
When running the program for the first time the crypto_box_keypair() function is used to
|
||||
When running the program for the first time the crypto_box_keypair() function is used to
|
||||
generate the users public-private key pair. (32 bytes each)
|
||||
|
||||
The generated public key is set as the client_id of the peer.
|
||||
@@ -9,13 +9,13 @@ The generated public key is set as the client_id of the peer.
|
||||
Adding a friend
|
||||
---------------
|
||||
|
||||
Alice adds Bob to her friend list by adding his 32 byte public key (client_id) to her friend list.
|
||||
2 cases:
|
||||
case 1: Alice adds the public key of Bob, then Bob waits for Alice to attempt to connect to him.
|
||||
case 2: Bob and Alice add their respective public keys to their friend lists at the same time.
|
||||
|
||||
case 1:
|
||||
Alice sends an onion data (see: Prevent_tracking.txt) packet to Bob with the encrypted part containing the friend request like so:
|
||||
Alice adds Bob to her friend list by adding his 32 byte public key (client_id) to her friend list.
|
||||
2 cases:
|
||||
case 1: Alice adds the public key of Bob, then Bob waits for Alice to attempt to connect to him.
|
||||
case 2: Bob and Alice add their respective public keys to their friend lists at the same time.
|
||||
|
||||
case 1:
|
||||
Alice sends an onion data (see: Prevent_tracking.txt) packet to Bob with the encrypted part containing the friend request like so:
|
||||
```
|
||||
[char with a value of 32][nospam number (4 bytes)][Message]
|
||||
```
|
||||
@@ -23,15 +23,15 @@ Alice sends an onion data (see: Prevent_tracking.txt) packet to Bob with the enc
|
||||
Ex message: hello Bob it's me Alice -_- add me pl0x.
|
||||
|
||||
For more info on the nospam see: Spam_Prevention.txt
|
||||
|
||||
Bob receives the request and decrypts the message using the function crypto_box_open()
|
||||
|
||||
If the message decrypts successfully:
|
||||
If Alice is already in Bob's friend list: case 2
|
||||
If Alice is not in Bob's friend list and the nospam is good: Bob is prompt to add Alice and is shown the message from her.
|
||||
If Bob accepts Alice friend request he adds her public key to his friend list.
|
||||
|
||||
case 2:
|
||||
Bob receives the request and decrypts the message using the function crypto_box_open()
|
||||
|
||||
If the message decrypts successfully:
|
||||
If Alice is already in Bob's friend list: case 2
|
||||
If Alice is not in Bob's friend list and the nospam is good: Bob is prompt to add Alice and is shown the message from her.
|
||||
If Bob accepts Alice friend request he adds her public key to his friend list.
|
||||
|
||||
case 2:
|
||||
Bob and Alice both have the others public key in their friend list, they are ready for the next step: Connecting to an already added friend
|
||||
|
||||
In the next step only crypto_box() is used for encryption and only crypto_box_open() for decryption (just like in the last step.)
|
||||
|
2
external/toxcore/c-toxcore/libtoxcore.pc.in
vendored
2
external/toxcore/c-toxcore/libtoxcore.pc.in
vendored
@@ -7,5 +7,5 @@ Name: libtoxcore
|
||||
Description: Tox protocol library
|
||||
Requires:
|
||||
Version: @PACKAGE_VERSION@
|
||||
Libs: @NACL_OBJECTS_PKGCONFIG@ -L${libdir} -ltoxcore @NACL_LDFLAGS@ -ltoxencryptsave @NACL_LIBS@ @LIBS@ @MATH_LDFLAGS@ @PTHREAD_LDFLAGS@
|
||||
Libs: -L${libdir} -ltoxcore -ltoxencryptsave @LIBS@ @MATH_LDFLAGS@ @PTHREAD_LDFLAGS@
|
||||
Cflags: -I${includedir}
|
||||
|
4
external/toxcore/c-toxcore/other/BUILD.bazel
vendored
4
external/toxcore/c-toxcore/other/BUILD.bazel
vendored
@@ -1,8 +1,6 @@
|
||||
load("@rules_cc//cc:defs.bzl", "cc_binary")
|
||||
load("//tools:no_undefined.bzl", "cc_library")
|
||||
|
||||
package(features = ["layering_check"])
|
||||
|
||||
cc_library(
|
||||
name = "bootstrap_node_packets",
|
||||
srcs = ["bootstrap_node_packets.c"],
|
||||
@@ -23,13 +21,11 @@ cc_binary(
|
||||
"//c-toxcore/toxcore:Messenger",
|
||||
"//c-toxcore/toxcore:TCP_server",
|
||||
"//c-toxcore/toxcore:ccompat",
|
||||
"//c-toxcore/toxcore:friend_requests",
|
||||
"//c-toxcore/toxcore:group_onion_announce",
|
||||
"//c-toxcore/toxcore:logger",
|
||||
"//c-toxcore/toxcore:mono_time",
|
||||
"//c-toxcore/toxcore:network",
|
||||
"//c-toxcore/toxcore:onion_announce",
|
||||
"//c-toxcore/toxcore:tox",
|
||||
"//c-toxcore/toxcore:util",
|
||||
],
|
||||
)
|
||||
|
38
external/toxcore/c-toxcore/other/DHT_bootstrap.c
vendored
38
external/toxcore/c-toxcore/other/DHT_bootstrap.c
vendored
@@ -16,12 +16,17 @@
|
||||
#include "../toxcore/DHT.h"
|
||||
#include "../toxcore/LAN_discovery.h"
|
||||
#include "../toxcore/ccompat.h"
|
||||
#include "../toxcore/friend_requests.h"
|
||||
#include "../toxcore/crypto_core.h"
|
||||
#include "../toxcore/forwarding.h"
|
||||
#include "../toxcore/group_announce.h"
|
||||
#include "../toxcore/group_onion_announce.h"
|
||||
#include "../toxcore/logger.h"
|
||||
#include "../toxcore/mem.h"
|
||||
#include "../toxcore/mono_time.h"
|
||||
#include "../toxcore/network.h"
|
||||
#include "../toxcore/onion.h"
|
||||
#include "../toxcore/onion_announce.h"
|
||||
#include "../toxcore/tox.h"
|
||||
#include "../toxcore/util.h"
|
||||
|
||||
#define TCP_RELAY_ENABLED
|
||||
|
||||
@@ -46,7 +51,7 @@ static const char *motd_str = ""; //Change this to anything within 256 bytes(but
|
||||
#define PORT 33445
|
||||
|
||||
|
||||
static void manage_keys(DHT *dht)
|
||||
static bool manage_keys(DHT *dht)
|
||||
{
|
||||
enum { KEYS_SIZE = CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_SECRET_KEY_SIZE };
|
||||
uint8_t keys[KEYS_SIZE];
|
||||
@@ -60,7 +65,8 @@ static void manage_keys(DHT *dht)
|
||||
|
||||
if (read_size != KEYS_SIZE) {
|
||||
printf("Error while reading the key file\nExiting.\n");
|
||||
exit(1);
|
||||
fclose(keys_file);
|
||||
return false;
|
||||
}
|
||||
|
||||
dht_set_self_public_key(dht, keys);
|
||||
@@ -73,18 +79,20 @@ static void manage_keys(DHT *dht)
|
||||
|
||||
if (keys_file == nullptr) {
|
||||
printf("Error opening key file in write mode.\nKeys will not be saved.\n");
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (fwrite(keys, sizeof(uint8_t), KEYS_SIZE, keys_file) != KEYS_SIZE) {
|
||||
printf("Error while writing the key file.\nExiting.\n");
|
||||
exit(1);
|
||||
fclose(keys_file);
|
||||
return false;
|
||||
}
|
||||
|
||||
printf("Keys saved successfully.\n");
|
||||
}
|
||||
|
||||
fclose(keys_file);
|
||||
return true;
|
||||
}
|
||||
|
||||
static const char *strlevel(Logger_Level level)
|
||||
@@ -121,7 +129,7 @@ int main(int argc, char *argv[])
|
||||
if (argc == 2 && !tox_strncasecmp(argv[1], "-h", 3)) {
|
||||
printf("Usage (connected) : %s [--ipv4|--ipv6] IP PORT KEY\n", argv[0]);
|
||||
printf("Usage (unconnected): %s [--ipv4|--ipv6]\n", argv[0]);
|
||||
exit(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* let user override default by cmdline */
|
||||
@@ -129,7 +137,7 @@ int main(int argc, char *argv[])
|
||||
int argvoffset = cmdline_parsefor_ipv46(argc, argv, &ipv6enabled);
|
||||
|
||||
if (argvoffset < 0) {
|
||||
exit(1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Initialize networking -
|
||||
@@ -162,14 +170,16 @@ int main(int argc, char *argv[])
|
||||
|
||||
if (!(onion && forwarding && onion_a)) {
|
||||
printf("Something failed to initialize.\n");
|
||||
exit(1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
gca_onion_init(gc_announces_list, onion_a);
|
||||
|
||||
perror("Initialization");
|
||||
|
||||
manage_keys(dht);
|
||||
if (!manage_keys(dht)) {
|
||||
return 1;
|
||||
}
|
||||
printf("Public key: ");
|
||||
|
||||
#ifdef TCP_RELAY_ENABLED
|
||||
@@ -179,7 +189,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
if (tcp_s == nullptr) {
|
||||
printf("TCP server failed to initialize.\n");
|
||||
exit(1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -189,7 +199,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
if (file == nullptr) {
|
||||
printf("Could not open file \"%s\" for writing. Exiting...\n", public_id_filename);
|
||||
exit(1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < 32; ++i) {
|
||||
@@ -210,7 +220,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
if (port_conv <= 0 || port_conv > UINT16_MAX) {
|
||||
printf("Failed to convert \"%s\" into a valid port. Exiting...\n", argv[argvoffset + 2]);
|
||||
exit(1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
const uint16_t port = net_htons((uint16_t)port_conv);
|
||||
@@ -222,7 +232,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
if (!res) {
|
||||
printf("Failed to convert \"%s\" into an IP address. Exiting...\n", argv[argvoffset + 1]);
|
||||
exit(1);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -9,16 +9,12 @@ DHT_bootstrap_SOURCES = ../other/DHT_bootstrap.c \
|
||||
../other/bootstrap_node_packets.c
|
||||
|
||||
DHT_bootstrap_CFLAGS = -I$(top_srcdir)/other \
|
||||
$(LIBSODIUM_CFLAGS) \
|
||||
$(NACL_CFLAGS)
|
||||
$(LIBSODIUM_CFLAGS)
|
||||
|
||||
DHT_bootstrap_LDADD = $(LIBSODIUM_LDFLAGS) \
|
||||
$(NACL_LDFLAGS) \
|
||||
libmisc_tools.la \
|
||||
libtoxcore.la \
|
||||
$(LIBSODIUM_LIBS) \
|
||||
$(NACL_OBJECTS) \
|
||||
$(NACL_LIBS) \
|
||||
$(WINSOCK2_LIBS)
|
||||
|
||||
endif
|
||||
|
@@ -1,6 +1,67 @@
|
||||
#!/bin/bash
|
||||
#!/usr/bin/env bash
|
||||
|
||||
CHECKS="*"
|
||||
ERRORS="*"
|
||||
|
||||
# Need to investigate or disable and document these.
|
||||
# =========================================================
|
||||
|
||||
# TODO(iphydf): Fix these.
|
||||
ERRORS="$ERRORS,-cert-err34-c"
|
||||
ERRORS="$ERRORS,-readability-suspicious-call-argument"
|
||||
|
||||
# TODO(iphydf): Fix once cimple 0.0.19 is released.
|
||||
CHECKS="$CHECKS,-google-readability-casting"
|
||||
|
||||
# TODO(iphydf): Fix these.
|
||||
CHECKS="$CHECKS,-bugprone-switch-missing-default-case"
|
||||
|
||||
# TODO(iphydf): We might want some of these. For the ones we don't want, add a
|
||||
# comment explaining why not.
|
||||
CHECKS="$CHECKS,-clang-analyzer-optin.performance.Padding"
|
||||
CHECKS="$CHECKS,-hicpp-signed-bitwise"
|
||||
|
||||
# TODO(iphydf): Maybe fix these?
|
||||
CHECKS="$CHECKS,-bugprone-implicit-widening-of-multiplication-result"
|
||||
CHECKS="$CHECKS,-bugprone-integer-division"
|
||||
CHECKS="$CHECKS,-misc-no-recursion"
|
||||
|
||||
# TODO(iphydf): Only happens in bootstrap_daemon. Fix it.
|
||||
CHECKS="$CHECKS,-cppcoreguidelines-avoid-non-const-global-variables"
|
||||
|
||||
# TODO(iphydf): Probably fix these.
|
||||
CHECKS="$CHECKS,-cert-err33-c"
|
||||
CHECKS="$CHECKS,-cppcoreguidelines-avoid-magic-numbers"
|
||||
CHECKS="$CHECKS,-readability-magic-numbers"
|
||||
|
||||
# TODO(iphydf): We're using a lot of macros for constants. Should we convert
|
||||
# all of them to enum?
|
||||
CHECKS="$CHECKS,-modernize-macro-to-enum"
|
||||
|
||||
# Documented disabled checks. We don't want these for sure.
|
||||
# =========================================================
|
||||
|
||||
# https://stackoverflow.com/questions/58672959/why-does-clang-tidy-say-vsnprintf-has-an-uninitialized-va-list-argument
|
||||
CHECKS="$CHECKS,-clang-analyzer-valist.Uninitialized"
|
||||
|
||||
# We pass a lot of ints around, so many function parameters are some kind of
|
||||
# int type that can be converted from another int type. We won't be getting
|
||||
# away from that anytime soon.
|
||||
CHECKS="$CHECKS,-bugprone-easily-swappable-parameters"
|
||||
|
||||
# Callback handlers often don't use all their parameters. There's
|
||||
# IgnoreVirtual, but that doesn't work for C-style callbacks.
|
||||
CHECKS="$CHECKS,-misc-unused-parameters"
|
||||
|
||||
# We sometimes use #if 0.
|
||||
CHECKS="$CHECKS,-readability-avoid-unconditional-preprocessor-if"
|
||||
|
||||
# We have better macro hygiene checks with tokstyle. We can never pass macro
|
||||
# arguments that require parentheses inside the macro.
|
||||
CHECKS="$CHECKS,-bugprone-macro-parentheses"
|
||||
|
||||
# We don't use memcpy_s.
|
||||
CHECKS="$CHECKS,-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling"
|
||||
|
||||
# __attribute__((nonnull)) causes this warning on defensive null checks.
|
||||
CHECKS="$CHECKS,-clang-diagnostic-pointer-bool-conversion"
|
||||
@@ -57,62 +118,69 @@ CHECKS="$CHECKS,-readability-redundant-control-flow"
|
||||
CHECKS="$CHECKS,-bugprone-narrowing-conversions"
|
||||
CHECKS="$CHECKS,-cppcoreguidelines-narrowing-conversions"
|
||||
|
||||
# TODO(iphydf): We might want some of these. For the ones we don't want, add a
|
||||
# comment explaining why not.
|
||||
CHECKS="$CHECKS,-clang-analyzer-optin.performance.Padding"
|
||||
CHECKS="$CHECKS,-hicpp-signed-bitwise"
|
||||
CHECKS="$CHECKS,-misc-unused-parameters"
|
||||
CHECKS="$CHECKS,-readability-function-cognitive-complexity"
|
||||
|
||||
# TODO(iphydf): Maybe fix these?
|
||||
CHECKS="$CHECKS,-bugprone-easily-swappable-parameters"
|
||||
CHECKS="$CHECKS,-bugprone-implicit-widening-of-multiplication-result"
|
||||
CHECKS="$CHECKS,-bugprone-integer-division"
|
||||
CHECKS="$CHECKS,-clang-analyzer-core.NullDereference"
|
||||
CHECKS="$CHECKS,-clang-analyzer-valist.Uninitialized"
|
||||
CHECKS="$CHECKS,-concurrency-mt-unsafe"
|
||||
CHECKS="$CHECKS,-cppcoreguidelines-avoid-non-const-global-variables"
|
||||
CHECKS="$CHECKS,-misc-no-recursion"
|
||||
|
||||
# TODO(iphydf): Probably fix these.
|
||||
CHECKS="$CHECKS,-cert-err33-c"
|
||||
CHECKS="$CHECKS,-cppcoreguidelines-avoid-magic-numbers"
|
||||
CHECKS="$CHECKS,-google-readability-casting"
|
||||
CHECKS="$CHECKS,-modernize-macro-to-enum"
|
||||
CHECKS="$CHECKS,-readability-magic-numbers"
|
||||
|
||||
# TODO(iphydf): These two trip on list.c. Investigate why.
|
||||
CHECKS="$CHECKS,-clang-analyzer-core.NonNullParamChecker"
|
||||
CHECKS="$CHECKS,-clang-analyzer-unix.Malloc"
|
||||
|
||||
ERRORS="*"
|
||||
|
||||
# TODO(iphydf): Fix these.
|
||||
ERRORS="$ERRORS,-bugprone-macro-parentheses"
|
||||
ERRORS="$ERRORS,-cert-err34-c"
|
||||
ERRORS="$ERRORS,-cert-str34-c"
|
||||
ERRORS="$ERRORS,-readability-suspicious-call-argument"
|
||||
# Mistakenly thinks that
|
||||
# const int a = 0, b = 1;
|
||||
# assert(a < b);
|
||||
# is a constant expression in C (it is in C++ though, which is probably why it's
|
||||
# mistaken), suggesting to replace 'assert()' with 'static_assert()' in cases
|
||||
# where that won't work.
|
||||
#
|
||||
# There are ways to make 'static_assert()' work, but they are rather annoying --
|
||||
# they are somewhat ugly, hurting the readability, and some are error-prone:
|
||||
#
|
||||
# - Turning 'a' and 'b' into enum constants would make it work, but this falls
|
||||
# apart if the enum types are compared against non-enums down the line
|
||||
# error: enumerated and non-enumerated type in conditional expression [-Werror=extra]
|
||||
#
|
||||
# - Turning 'a' and 'b' into pre-processor macros is the only option left, but
|
||||
# #defines and #undefs in the middle of a function hurt the readability and
|
||||
# are less idiomatic than simply using 'const int'.
|
||||
CHECKS="$CHECKS,-cert-dcl03-c"
|
||||
CHECKS="$CHECKS,-hicpp-static-assert"
|
||||
CHECKS="$CHECKS,-misc-static-assert"
|
||||
|
||||
set -eux
|
||||
|
||||
# TODO(iphydf): Add toxav.
|
||||
DIRS=(
|
||||
other/bootstrap_daemon/src
|
||||
other
|
||||
toxcore
|
||||
toxcore/events
|
||||
toxencryptsave
|
||||
)
|
||||
|
||||
copy_files() {
|
||||
find "${DIRS[@]}" \
|
||||
-maxdepth 1 -type d -exec mkdir -p "$1/{}" \;
|
||||
find "${DIRS[@]}" \
|
||||
-maxdepth 1 -name "*.c" -exec cp "{}" "$1/{}" \;
|
||||
}
|
||||
|
||||
run() {
|
||||
echo "Running clang-tidy in variant '$*'"
|
||||
EXTRA_ARGS=("$@")
|
||||
for i in "${!EXTRA_ARGS[@]}"; do
|
||||
EXTRA_ARGS[$i]="--extra-arg=${EXTRA_ARGS[$i]}"
|
||||
done
|
||||
clang-tidy-14 \
|
||||
-p=_build \
|
||||
--extra-arg=-DMIN_LOGGER_LEVEL=LOGGER_LEVEL_TRACE \
|
||||
"${EXTRA_ARGS[@]}" \
|
||||
--checks="$CHECKS" \
|
||||
--warnings-as-errors="$ERRORS" \
|
||||
--use-color \
|
||||
other/bootstrap_daemon/src/*.c \
|
||||
other/*.c \
|
||||
toxav/*.c \
|
||||
toxcore/*.c \
|
||||
toxencryptsave/*.c
|
||||
ls .clang-tidy
|
||||
copy_files a
|
||||
if ! find "${DIRS[@]}" \
|
||||
-maxdepth 1 -name "*.c" -print0 \
|
||||
| xargs -0 -n15 -P"$(nproc)" clang-tidy \
|
||||
-p="$PWD/_build" \
|
||||
--extra-arg=-DMIN_LOGGER_LEVEL=LOGGER_LEVEL_TRACE \
|
||||
"${EXTRA_ARGS[@]}" \
|
||||
--fix \
|
||||
--checks="$CHECKS" \
|
||||
--warnings-as-errors="$ERRORS" \
|
||||
--use-color; then
|
||||
copy_files b
|
||||
colordiff -ru a b
|
||||
rm -rf a b
|
||||
false
|
||||
fi
|
||||
rm -rf a
|
||||
}
|
||||
|
||||
cmake . -B_build -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
|
||||
|
@@ -8,9 +8,12 @@ set -e
|
||||
|
||||
CPPCHECK=("--enable=all")
|
||||
CPPCHECK+=("--inconclusive")
|
||||
CPPCHECK+=("--check-level=exhaustive")
|
||||
CPPCHECK+=("--inline-suppr")
|
||||
CPPCHECK+=("--library=other/docker/cppcheck/toxcore.cfg")
|
||||
CPPCHECK+=("--error-exitcode=1")
|
||||
# Used for VLA.
|
||||
CPPCHECK+=("--suppress=allocaCalled")
|
||||
# We don't cast function pointers, which cppcheck suggests here.
|
||||
CPPCHECK+=("--suppress=constParameterCallback")
|
||||
# False positives in switch statements.
|
||||
CPPCHECK+=("--suppress=knownConditionTrueFalse")
|
||||
# Cppcheck does not need standard library headers to get proper results.
|
||||
@@ -19,27 +22,22 @@ CPPCHECK+=("--suppress=missingIncludeSystem")
|
||||
CPPCHECK+=("--suppress=signConversion")
|
||||
# TODO(iphydf): Fixed in the toxav refactor PR.
|
||||
CPPCHECK+=("--suppress=redundantAssignment")
|
||||
# We have some redundant nullptr checks in assertions
|
||||
CPPCHECK+=("--suppress=nullPointerRedundantCheck")
|
||||
# Triggers a false warning in group.c
|
||||
CPPCHECK+=("--suppress=AssignmentAddressToInteger")
|
||||
# TODO(sudden6): This triggers a false positive, check again later to enable it
|
||||
CPPCHECK+=("--suppress=arrayIndexOutOfBoundsCond")
|
||||
|
||||
# We're a library. This only works on whole programs.
|
||||
CPPCHECK_C=("--suppress=unusedFunction")
|
||||
|
||||
# We use this for VLAs.
|
||||
CPPCHECK_CXX+=("--suppress=allocaCalled")
|
||||
# False positive in auto_tests.
|
||||
CPPCHECK_CXX+=("--suppress=shadowArgument")
|
||||
CPPCHECK_CXX+=("--suppress=shadowFunction")
|
||||
# False positive for callback functions
|
||||
CPPCHECK_CXX+=("--suppress=constParameter")
|
||||
# False positive in group.c.
|
||||
# Using cppcheck-suppress claims the suppression is unused.
|
||||
CPPCHECK_CXX+=("--suppress=AssignmentAddressToInteger")
|
||||
# We use C style casts because we write C code.
|
||||
CPPCHECK_CXX+=("--suppress=cstyleCast")
|
||||
# Used in Messenger.c for a static_assert(...)
|
||||
CPPCHECK_CXX+=("--suppress=sizeofFunctionCall")
|
||||
|
||||
run() {
|
||||
echo "Running cppcheck in variant '$*'"
|
||||
cppcheck "${CPPCHECK[@]}" "${CPPCHECK_C[@]}" tox*/*.[ch] tox*/*/*.[ch] "${CPPFLAGS[@]}" "$@"
|
||||
cppcheck -j8 "${CPPCHECK[@]}" "${CPPCHECK_C[@]}" tox*/*.[ch] tox*/*/*.[ch] "${CPPFLAGS[@]}" "$@"
|
||||
cppcheck "${CPPCHECK[@]}" "${CPPCHECK_CXX[@]}" amalgamation.cc "${CPPFLAGS[@]}" "$@"
|
||||
}
|
||||
|
||||
|
@@ -16,7 +16,6 @@
|
||||
--align-reference=name
|
||||
|
||||
# Formatting Options
|
||||
--add-brackets
|
||||
--convert-tabs
|
||||
--max-code-length=120
|
||||
|
||||
|
@@ -1,7 +1,5 @@
|
||||
load("@rules_cc//cc:defs.bzl", "cc_binary")
|
||||
|
||||
package(features = ["layering_check"])
|
||||
|
||||
cc_binary(
|
||||
name = "bootstrap_daemon",
|
||||
srcs = glob([
|
||||
@@ -20,7 +18,6 @@ cc_binary(
|
||||
"//c-toxcore/toxcore:mono_time",
|
||||
"//c-toxcore/toxcore:onion_announce",
|
||||
"//c-toxcore/toxcore:tox",
|
||||
"//c-toxcore/toxcore:util",
|
||||
"@libconfig",
|
||||
],
|
||||
)
|
||||
|
@@ -19,6 +19,14 @@ add_executable(tox-bootstrapd
|
||||
src/tox-bootstrapd.c
|
||||
../bootstrap_node_packets.c
|
||||
../bootstrap_node_packets.h)
|
||||
target_link_modules(tox-bootstrapd toxcore ${LIBCONFIG_LIBRARIES})
|
||||
target_link_libraries(tox-bootstrapd PRIVATE ${LIBCONFIG_LIBRARIES})
|
||||
target_link_directories(tox-bootstrapd PRIVATE ${LIBCONFIG_LIBRARY_DIRS})
|
||||
target_include_directories(tox-bootstrapd SYSTEM PRIVATE ${LIBCONFIG_INCLUDE_DIRS})
|
||||
target_compile_options(tox-bootstrapd PRIVATE ${LIBCONFIG_CFLAGS_OTHER})
|
||||
if(TARGET toxcore_static)
|
||||
target_link_libraries(tox-bootstrapd PRIVATE toxcore_static)
|
||||
else()
|
||||
target_link_libraries(tox-bootstrapd PRIVATE toxcore_shared)
|
||||
endif()
|
||||
install(TARGETS tox-bootstrapd RUNTIME DESTINATION bin)
|
||||
install(FILES bash-completion/completions/tox-bootstrapd DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/bash-completion/completions")
|
||||
|
@@ -259,7 +259,7 @@ docker run -d --name tox-bootstrapd --restart always \
|
||||
toxchat/bootstrap-node
|
||||
```
|
||||
|
||||
We create a new user and protect its home directory in order to mount it in the Docker image, so that the kyepair the daemon uses would be stored on the host system, which makes it less likely that you would loose the keypair while playing with or updating the Docker container.
|
||||
We create a new user and protect its home directory in order to mount it in the Docker image, so that the keypair the daemon uses would be stored on the host system, which makes it less likely that you would loose the keypair while playing with or updating the Docker container.
|
||||
|
||||
You can check logs for your public key or any errors:
|
||||
```sh
|
||||
|
@@ -1,18 +1,18 @@
|
||||
###########################################################
|
||||
# Builder image: we compile the code here (static build)
|
||||
FROM alpine:3.15.0 AS build
|
||||
FROM alpine:3.19.0 AS build
|
||||
|
||||
RUN ["apk", "--no-cache", "add",\
|
||||
"build-base",\
|
||||
"clang",\
|
||||
"cmake",\
|
||||
"linux-headers",\
|
||||
"libconfig-dev",\
|
||||
"libconfig-static",\
|
||||
"libsodium-dev",\
|
||||
"libsodium-static",\
|
||||
"musl-dev",\
|
||||
"ninja",\
|
||||
"python3"\
|
||||
]
|
||||
"python3"]
|
||||
|
||||
WORKDIR /src/c-toxcore
|
||||
|
||||
@@ -34,9 +34,9 @@ COPY CMakeLists.txt so.version ./
|
||||
COPY other/bootstrap_daemon/CMakeLists.txt other/bootstrap_daemon/CMakeLists.txt
|
||||
COPY testing/CMakeLists.txt testing/CMakeLists.txt
|
||||
|
||||
RUN cmake -B_build -H. \
|
||||
RUN CC=clang cmake -B_build -H. \
|
||||
-GNinja \
|
||||
-DCMAKE_C_FLAGS="-DTCP_SERVER_USE_EPOLL -fstack-protector-all -fisolate-erroneous-paths-attribute" \
|
||||
-DCMAKE_C_FLAGS="-DTCP_SERVER_USE_EPOLL -fsanitize=alignment,return,returns-nonnull-attribute,vla-bound,unreachable,float-cast-overflow,null -fsanitize-trap=all -fstack-protector-all" \
|
||||
-DCMAKE_UNITY_BUILD=ON \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DFULLY_STATIC=ON \
|
||||
@@ -48,8 +48,10 @@ RUN cmake -B_build -H. \
|
||||
# Verify checksum from dev-built binary, so we can be sure Docker Hub doesn't
|
||||
# mess with your binaries.
|
||||
COPY other/bootstrap_daemon/docker/tox-bootstrapd.sha256 other/bootstrap_daemon/docker/
|
||||
RUN sha256sum /usr/local/bin/tox-bootstrapd && \
|
||||
sha256sum -c other/bootstrap_daemon/docker/tox-bootstrapd.sha256
|
||||
RUN SHA256="$(sha256sum /usr/local/bin/tox-bootstrapd)" && \
|
||||
(sha256sum -c other/bootstrap_daemon/docker/tox-bootstrapd.sha256 || \
|
||||
(echo "::error file=other/bootstrap_daemon/docker/tox-bootstrapd.sha256,line=1::$SHA256" && \
|
||||
false))
|
||||
|
||||
# Remove all the example bootstrap nodes from the config file.
|
||||
COPY other/bootstrap_daemon/tox-bootstrapd.conf other/bootstrap_daemon/
|
||||
@@ -62,7 +64,7 @@ RUN ["other/bootstrap_daemon/docker/get-nodes.py", "other/bootstrap_daemon/tox-b
|
||||
|
||||
###########################################################
|
||||
# Final image build: this is what runs the bootstrap node
|
||||
FROM debian:bullseye-slim
|
||||
FROM debian:bookworm-slim
|
||||
|
||||
COPY --from=build /usr/local/bin/tox-bootstrapd /usr/local/bin/
|
||||
COPY --from=build /src/c-toxcore/other/bootstrap_daemon/tox-bootstrapd.conf /etc/tox-bootstrapd.conf
|
||||
|
46
external/toxcore/c-toxcore/other/bootstrap_daemon/docker/fetch-sha256
vendored
Executable file
46
external/toxcore/c-toxcore/other/bootstrap_daemon/docker/fetch-sha256
vendored
Executable file
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
import os
|
||||
import pprint
|
||||
import subprocess
|
||||
import sys
|
||||
import urllib.request
|
||||
from typing import Any
|
||||
|
||||
SHA256_FILE = "other/bootstrap_daemon/docker/tox-bootstrapd.sha256"
|
||||
|
||||
with open(f"{os.environ['HOME']}/.github-token") as fh:
|
||||
token = fh.read().strip()
|
||||
|
||||
head_sha = (subprocess.run(["git", "rev-parse", "HEAD"],
|
||||
capture_output=True,
|
||||
check=True).stdout.decode("utf-8").strip())
|
||||
|
||||
|
||||
def request(url: str) -> Any:
|
||||
return json.loads(
|
||||
urllib.request.urlopen(
|
||||
urllib.request.Request(
|
||||
url,
|
||||
headers={
|
||||
"Accept": "application/vnd.github+json",
|
||||
"Authorization": "Bearer " + token,
|
||||
"X-GitHub-Api-Version": "2022-11-28",
|
||||
},
|
||||
)).read())
|
||||
|
||||
|
||||
pp = pprint.PrettyPrinter(indent=2, compact=True)
|
||||
annots = [
|
||||
a for r in request(
|
||||
f"https://api.github.com/repos/TokTok/c-toxcore/commits/{head_sha}/check-runs?per_page=100"
|
||||
)["check_runs"] if r["name"] == "docker-bootstrap-node"
|
||||
for a in request(r["output"]["annotations_url"])
|
||||
if a["path"] == SHA256_FILE
|
||||
]
|
||||
if not annots:
|
||||
print("could not find sha256sum output")
|
||||
sys.exit(1)
|
||||
with open(SHA256_FILE, "w") as fh:
|
||||
fh.write(annots[0]["message"] + "\n")
|
||||
print(f"updated {SHA256_FILE}")
|
@@ -1 +1 @@
|
||||
b2996d73cab7c7453dc10ccf7ad733622558de3b1ad0db824a379cf96f500379 /usr/local/bin/tox-bootstrapd
|
||||
8fadc6fd894bb8f60fd53d51dcd51ff24e62b41ae404d3921e0247b9337c9a30 /usr/local/bin/tox-bootstrapd
|
||||
|
@@ -3,7 +3,7 @@
|
||||
set -eux
|
||||
|
||||
docker_build() {
|
||||
docker build -f other/bootstrap_daemon/docker/Dockerfile -t toxchat/bootstrap-node .
|
||||
DOCKER_BUILDKIT=1 docker build --progress=plain -f other/bootstrap_daemon/docker/Dockerfile -t toxchat/bootstrap-node .
|
||||
}
|
||||
|
||||
# Run Docker build once. If it succeeds, we're good.
|
||||
@@ -12,12 +12,11 @@ if docker_build; then
|
||||
fi
|
||||
|
||||
# We're not good. Run it again, but now capture the output.
|
||||
OUTPUT=$(docker_build || true 2>&1)
|
||||
OUTPUT=$(docker_build 2>&1 || true)
|
||||
|
||||
if echo "$OUTPUT" | grep '/usr/local/bin/tox-bootstrapd: FAILED'; then
|
||||
# This is a checksum warning, so we need to update it.
|
||||
IMAGE=$(echo "$OUTPUT" | grep '^ ---> [0-9a-f]*$' | grep -o '[0-9a-f]*$' | tail -n1)
|
||||
docker run --rm "$IMAGE" sha256sum /usr/local/bin/tox-bootstrapd >other/bootstrap_daemon/docker/tox-bootstrapd.sha256
|
||||
echo "$OUTPUT" | grep -Eo '[0-9a-f]{64} /usr/local/bin/tox-bootstrapd' | tail -n1 >other/bootstrap_daemon/docker/tox-bootstrapd.sha256
|
||||
fi
|
||||
|
||||
# Run once last time to complete the build.
|
||||
|
@@ -24,17 +24,13 @@ tox_bootstrapd_SOURCES = \
|
||||
tox_bootstrapd_CFLAGS = \
|
||||
-I$(top_srcdir)/other/bootstrap_daemon \
|
||||
$(LIBSODIUM_CFLAGS) \
|
||||
$(NACL_CFLAGS) \
|
||||
$(LIBCONFIG_CFLAGS)
|
||||
|
||||
tox_bootstrapd_LDADD = \
|
||||
$(LIBSODIUM_LDFLAGS) \
|
||||
$(NACL_LDFLAGS) \
|
||||
libtoxcore.la \
|
||||
$(LIBCONFIG_LIBS) \
|
||||
$(LIBSODIUM_LIBS) \
|
||||
$(NACL_OBJECTS) \
|
||||
$(NACL_LIBS)
|
||||
$(LIBSODIUM_LIBS)
|
||||
|
||||
bashcompdir = $(datarootdir)/bash-completion/completions
|
||||
dist_bashcomp_DATA = $(top_builddir)/other/bootstrap_daemon/bash-completion/completions/tox-bootstrapd
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
* Copyright © 2016-2018 The TokTok team.
|
||||
* Copyright © 2016-2024 The TokTok team.
|
||||
* Copyright © 2015-2016 Tox project.
|
||||
*/
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
#include "command_line_arguments.h"
|
||||
|
||||
#include "global.h"
|
||||
#include "log.h"
|
||||
|
||||
#include "../../../toxcore/ccompat.h"
|
||||
|
||||
#include <getopt.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
@@ -24,9 +24,9 @@
|
||||
*/
|
||||
static void print_help(void)
|
||||
{
|
||||
// 2 space ident
|
||||
// make sure all lines fit into 80 columns
|
||||
// make sure options are listed in alphabetical order
|
||||
// 2 space indent
|
||||
// Make sure all lines fit into 80 columns
|
||||
// Make sure options are listed in alphabetical order
|
||||
log_write(LOG_LEVEL_INFO,
|
||||
"Usage: tox-bootstrapd [OPTION]... --config=FILE_PATH\n"
|
||||
"\n"
|
||||
@@ -39,7 +39,7 @@ static void print_help(void)
|
||||
" (detach from the terminal) and won't use the PID file.\n"
|
||||
" --help Print this help message.\n"
|
||||
" --log-backend=BACKEND Specify which logging backend to use.\n"
|
||||
" Valid BACKEND values (case sensetive):\n"
|
||||
" Valid BACKEND values (case sensitive):\n"
|
||||
" syslog Writes log messages to syslog.\n"
|
||||
" Default option when no --log-backend is\n"
|
||||
" specified.\n"
|
||||
@@ -47,13 +47,14 @@ static void print_help(void)
|
||||
" --version Print version information.\n");
|
||||
}
|
||||
|
||||
void handle_command_line_arguments(int argc, char *argv[], char **cfg_file_path, LOG_BACKEND *log_backend,
|
||||
bool *run_in_foreground)
|
||||
Cli_Status handle_command_line_arguments(
|
||||
int argc, char *argv[], char **cfg_file_path, LOG_BACKEND *log_backend,
|
||||
bool *run_in_foreground)
|
||||
{
|
||||
if (argc < 2) {
|
||||
log_write(LOG_LEVEL_ERROR, "Error: No arguments provided.\n\n");
|
||||
print_help();
|
||||
exit(1);
|
||||
return CLI_STATUS_ERROR;
|
||||
}
|
||||
|
||||
opterr = 0;
|
||||
@@ -89,7 +90,7 @@ void handle_command_line_arguments(int argc, char *argv[], char **cfg_file_path,
|
||||
|
||||
case 'h':
|
||||
print_help();
|
||||
exit(0);
|
||||
return CLI_STATUS_DONE;
|
||||
|
||||
case 'l':
|
||||
if (strcmp(optarg, "syslog") == 0) {
|
||||
@@ -101,24 +102,24 @@ void handle_command_line_arguments(int argc, char *argv[], char **cfg_file_path,
|
||||
} else {
|
||||
log_write(LOG_LEVEL_ERROR, "Error: Invalid BACKEND value for --log-backend option passed: %s\n\n", optarg);
|
||||
print_help();
|
||||
exit(1);
|
||||
return CLI_STATUS_ERROR;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
log_write(LOG_LEVEL_INFO, "Version: %lu\n", DAEMON_VERSION_NUMBER);
|
||||
exit(0);
|
||||
return CLI_STATUS_DONE;
|
||||
|
||||
case '?':
|
||||
log_write(LOG_LEVEL_ERROR, "Error: Unrecognized option %s\n\n", argv[optind - 1]);
|
||||
print_help();
|
||||
exit(1);
|
||||
return CLI_STATUS_ERROR;
|
||||
|
||||
case ':':
|
||||
log_write(LOG_LEVEL_ERROR, "Error: No argument provided for option %s\n\n", argv[optind - 1]);
|
||||
print_help();
|
||||
exit(1);
|
||||
return CLI_STATUS_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,6 +130,8 @@ void handle_command_line_arguments(int argc, char *argv[], char **cfg_file_path,
|
||||
if (!cfg_file_path_set) {
|
||||
log_write(LOG_LEVEL_ERROR, "Error: The required --config option wasn't specified\n\n");
|
||||
print_help();
|
||||
exit(1);
|
||||
return CLI_STATUS_ERROR;
|
||||
}
|
||||
|
||||
return CLI_STATUS_OK;
|
||||
}
|
||||
|
@@ -12,6 +12,15 @@
|
||||
|
||||
#include "log.h"
|
||||
|
||||
typedef enum Cli_Status {
|
||||
/** Continue the program. Command line processing completed. */
|
||||
CLI_STATUS_OK,
|
||||
/** Stop the program with success status. */
|
||||
CLI_STATUS_DONE,
|
||||
/** Stop the program with error status. */
|
||||
CLI_STATUS_ERROR,
|
||||
} Cli_Status;
|
||||
|
||||
/**
|
||||
* Handles command line arguments, setting cfg_file_path and log_backend.
|
||||
* Terminates the application if incorrect arguments are specified.
|
||||
@@ -22,7 +31,8 @@
|
||||
* @param log_backend Sets to the provided by the user log backend option.
|
||||
* @param run_in_foreground Sets to the provided by the user foreground option.
|
||||
*/
|
||||
void handle_command_line_arguments(int argc, char *argv[], char **cfg_file_path, LOG_BACKEND *log_backend,
|
||||
bool *run_in_foreground);
|
||||
Cli_Status handle_command_line_arguments(
|
||||
int argc, char *argv[], char **cfg_file_path, LOG_BACKEND *log_backend,
|
||||
bool *run_in_foreground);
|
||||
|
||||
#endif // C_TOXCORE_OTHER_BOOTSTRAP_DAEMON_SRC_COMMAND_LINE_ARGUMENTS_H
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
* Copyright © 2016-2018 The TokTok team.
|
||||
* Copyright © 2016-2024 The TokTok team.
|
||||
* Copyright © 2014-2016 Tox project.
|
||||
*/
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "config.h"
|
||||
|
||||
#include "config_defaults.h"
|
||||
#include "global.h"
|
||||
#include "log.h"
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -18,6 +19,10 @@
|
||||
|
||||
#include <libconfig.h>
|
||||
|
||||
#include "../../../toxcore/DHT.h"
|
||||
#include "../../../toxcore/ccompat.h"
|
||||
#include "../../../toxcore/crypto_core.h"
|
||||
#include "../../../toxcore/network.h"
|
||||
#include "../../bootstrap_node_packets.h"
|
||||
|
||||
/**
|
||||
@@ -39,22 +44,28 @@ static void parse_tcp_relay_ports_config(config_t *cfg, uint16_t **tcp_relay_por
|
||||
log_write(LOG_LEVEL_WARNING, "No '%s' setting in the configuration file.\n", NAME_TCP_RELAY_PORTS);
|
||||
log_write(LOG_LEVEL_WARNING, "Using default '%s':\n", NAME_TCP_RELAY_PORTS);
|
||||
|
||||
uint16_t default_ports[DEFAULT_TCP_RELAY_PORTS_COUNT] = {DEFAULT_TCP_RELAY_PORTS};
|
||||
uint16_t default_ports[] = {DEFAULT_TCP_RELAY_PORTS};
|
||||
|
||||
for (int i = 0; i < DEFAULT_TCP_RELAY_PORTS_COUNT; ++i) {
|
||||
log_write(LOG_LEVEL_INFO, "Port #%d: %u\n", i, default_ports[i]);
|
||||
// Check to avoid calling malloc(0) later on
|
||||
// NOLINTNEXTLINE, clang-tidy: error: suspicious comparison of 'sizeof(expr)' to a constant [bugprone-sizeof-expression,-warnings-as-errors]
|
||||
static_assert(sizeof(default_ports) > 0, "At least one default TCP relay port should be provided");
|
||||
|
||||
const size_t default_ports_count = sizeof(default_ports)/sizeof(*default_ports);
|
||||
|
||||
for (size_t i = 0; i < default_ports_count; ++i) {
|
||||
log_write(LOG_LEVEL_INFO, "Port #%zu: %u\n", i, default_ports[i]);
|
||||
}
|
||||
|
||||
// similar procedure to the one of reading config file below
|
||||
*tcp_relay_ports = (uint16_t *)malloc(DEFAULT_TCP_RELAY_PORTS_COUNT * sizeof(uint16_t));
|
||||
// Similar procedure to the one of reading config file below
|
||||
*tcp_relay_ports = (uint16_t *)malloc(default_ports_count * sizeof(uint16_t));
|
||||
|
||||
for (int i = 0; i < DEFAULT_TCP_RELAY_PORTS_COUNT; ++i) {
|
||||
for (size_t i = 0; i < default_ports_count; ++i) {
|
||||
|
||||
(*tcp_relay_ports)[*tcp_relay_port_count] = default_ports[i];
|
||||
|
||||
if ((*tcp_relay_ports)[*tcp_relay_port_count] < MIN_ALLOWED_PORT
|
||||
|| (*tcp_relay_ports)[*tcp_relay_port_count] > MAX_ALLOWED_PORT) {
|
||||
log_write(LOG_LEVEL_WARNING, "Port #%d: Invalid port: %u, should be in [%d, %d]. Skipping.\n", i,
|
||||
log_write(LOG_LEVEL_WARNING, "Port #%zu: Invalid port: %u, should be in [%d, %d]. Skipping.\n", i,
|
||||
(*tcp_relay_ports)[*tcp_relay_port_count], MIN_ALLOWED_PORT, MAX_ALLOWED_PORT);
|
||||
continue;
|
||||
}
|
||||
@@ -62,7 +73,7 @@ static void parse_tcp_relay_ports_config(config_t *cfg, uint16_t **tcp_relay_por
|
||||
++*tcp_relay_port_count;
|
||||
}
|
||||
|
||||
// the loop above skips invalid ports, so we adjust the allocated memory size
|
||||
// The loop above skips invalid ports, so we adjust the allocated memory size
|
||||
if ((*tcp_relay_port_count) > 0) {
|
||||
*tcp_relay_ports = (uint16_t *)realloc(*tcp_relay_ports, (*tcp_relay_port_count) * sizeof(uint16_t));
|
||||
} else {
|
||||
@@ -92,7 +103,7 @@ static void parse_tcp_relay_ports_config(config_t *cfg, uint16_t **tcp_relay_por
|
||||
config_setting_t *elem = config_setting_get_elem(ports_array, i);
|
||||
|
||||
if (elem == nullptr) {
|
||||
// it's NULL if `ports_array` is not an array (we have that check earlier) or if `i` is out of range, which should not be
|
||||
// It's NULL if `ports_array` is not an array (we have that check earlier) or if `i` is out of range, which should not be
|
||||
log_write(LOG_LEVEL_WARNING, "Port #%d: Something went wrong while parsing the port. Stopping reading ports.\n", i);
|
||||
break;
|
||||
}
|
||||
@@ -114,7 +125,7 @@ static void parse_tcp_relay_ports_config(config_t *cfg, uint16_t **tcp_relay_por
|
||||
++*tcp_relay_port_count;
|
||||
}
|
||||
|
||||
// the loop above skips invalid ports, so we adjust the allocated memory size
|
||||
// The loop above skips invalid ports, so we adjust the allocated memory size
|
||||
if ((*tcp_relay_port_count) > 0) {
|
||||
*tcp_relay_ports = (uint16_t *)realloc(*tcp_relay_ports, (*tcp_relay_port_count) * sizeof(uint16_t));
|
||||
} else {
|
||||
@@ -254,7 +265,7 @@ int get_general_config(const char *cfg_file_path, char **pid_file_path, char **k
|
||||
|
||||
log_write(LOG_LEVEL_INFO, "'%s': %s\n", NAME_ENABLE_TCP_RELAY, *enable_tcp_relay ? "true" : "false");
|
||||
|
||||
// show info about tcp ports only if tcp relay is enabled
|
||||
// Show info about tcp ports only if tcp relay is enabled
|
||||
if (*enable_tcp_relay) {
|
||||
if (*tcp_relay_port_count == 0) {
|
||||
log_write(LOG_LEVEL_ERROR, "No TCP ports could be read.\n");
|
||||
@@ -401,7 +412,7 @@ int bootstrap_from_config(const char *cfg_file_path, DHT *dht, int enable_ipv6)
|
||||
log_write(LOG_LEVEL_INFO, "Successfully added bootstrap node #%d: %s:%d %s\n", i, bs_address, bs_port, bs_public_key);
|
||||
|
||||
next:
|
||||
// config_setting_lookup_string() allocates string inside and doesn't allow us to free it direcly
|
||||
// config_setting_lookup_string() allocates string inside and doesn't allow us to free it directly
|
||||
// though it's freed when the element is removed, so we free it right away in order to keep memory
|
||||
// consumption minimal
|
||||
config_setting_remove_elem(node_list, 0);
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
* Copyright © 2016-2018 The TokTok team.
|
||||
* Copyright © 2016-2024 The TokTok team.
|
||||
* Copyright © 2014-2016 Tox project.
|
||||
*/
|
||||
|
||||
@@ -30,7 +30,7 @@ int get_general_config(const char *cfg_file_path, char **pid_file_path, char **k
|
||||
* Bootstraps off nodes listed in the config file.
|
||||
*
|
||||
* @return 1 on success, some or no bootstrap nodes were added
|
||||
* 0 on failure, a error accured while parsing config file.
|
||||
* 0 on failure, an error occurred while parsing the config file.
|
||||
*/
|
||||
int bootstrap_from_config(const char *cfg_file_path, DHT *dht, int enable_ipv6);
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
* Copyright © 2016-2018 The TokTok team.
|
||||
* Copyright © 2016-2023 The TokTok team.
|
||||
* Copyright © 2014-2016 Tox project.
|
||||
*/
|
||||
|
||||
@@ -19,8 +19,7 @@
|
||||
#define DEFAULT_ENABLE_IPV4_FALLBACK 1 // 1 - true, 0 - false
|
||||
#define DEFAULT_ENABLE_LAN_DISCOVERY 1 // 1 - true, 0 - false
|
||||
#define DEFAULT_ENABLE_TCP_RELAY 1 // 1 - true, 0 - false
|
||||
#define DEFAULT_TCP_RELAY_PORTS 443, 3389, 33445 // comma-separated list of ports. make sure to adjust DEFAULT_TCP_RELAY_PORTS_COUNT accordingly
|
||||
#define DEFAULT_TCP_RELAY_PORTS_COUNT 3
|
||||
#define DEFAULT_TCP_RELAY_PORTS 443, 3389, 33445 // comma-separated list of ports
|
||||
#define DEFAULT_ENABLE_MOTD 1 // 1 - true, 0 - false
|
||||
#define DEFAULT_MOTD DAEMON_NAME
|
||||
|
||||
|
@@ -3,6 +3,8 @@
|
||||
* Copyright © 2015-2016 Tox project.
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
/*
|
||||
* Tox DHT bootstrap daemon.
|
||||
* Logging utility with support of multiple logging backends.
|
||||
|
@@ -9,8 +9,11 @@
|
||||
*/
|
||||
#include "log_backend_stdout.h"
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "log.h"
|
||||
|
||||
static FILE *log_backend_stdout_level(LOG_LEVEL level)
|
||||
{
|
||||
switch (level) {
|
||||
|
@@ -10,10 +10,12 @@
|
||||
#include "log_backend_syslog.h"
|
||||
|
||||
#include "global.h"
|
||||
#include "log.h"
|
||||
|
||||
#include "../../../toxcore/ccompat.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <syslog.h>
|
||||
|
@@ -23,17 +23,24 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
// toxcore
|
||||
#include "../../../toxcore/tox.h"
|
||||
#include "../../../toxcore/DHT.h"
|
||||
#include "../../../toxcore/LAN_discovery.h"
|
||||
#include "../../../toxcore/TCP_server.h"
|
||||
#include "../../../toxcore/announce.h"
|
||||
#include "../../../toxcore/ccompat.h"
|
||||
#include "../../../toxcore/crypto_core.h"
|
||||
#include "../../../toxcore/forwarding.h"
|
||||
#include "../../../toxcore/group_announce.h"
|
||||
#include "../../../toxcore/group_onion_announce.h"
|
||||
#include "../../../toxcore/logger.h"
|
||||
#include "../../../toxcore/mem.h"
|
||||
#include "../../../toxcore/mono_time.h"
|
||||
#include "../../../toxcore/network.h"
|
||||
#include "../../../toxcore/onion.h"
|
||||
#include "../../../toxcore/onion_announce.h"
|
||||
#include "../../../toxcore/util.h"
|
||||
|
||||
// misc
|
||||
#include "../../bootstrap_node_packets.h"
|
||||
@@ -57,7 +64,7 @@ static void sleep_milliseconds(uint32_t ms)
|
||||
// returns 1 on success
|
||||
// 0 on failure - no keys were read or stored
|
||||
|
||||
static int manage_keys(DHT *dht, char *keys_file_path)
|
||||
static int manage_keys(DHT *dht, const char *keys_file_path)
|
||||
{
|
||||
enum { KEYS_SIZE = CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_SECRET_KEY_SIZE };
|
||||
uint8_t keys[KEYS_SIZE];
|
||||
@@ -116,7 +123,7 @@ static void print_public_key(const uint8_t *public_key)
|
||||
// Demonizes the process, appending PID to the PID file and closing file descriptors based on log backend
|
||||
// Terminates the application if the daemonization fails.
|
||||
|
||||
static void daemonize(LOG_BACKEND log_backend, char *pid_file_path)
|
||||
static Cli_Status daemonize(LOG_BACKEND log_backend, char *pid_file_path)
|
||||
{
|
||||
// Check if the PID file exists
|
||||
FILE *pid_file = fopen(pid_file_path, "r");
|
||||
@@ -131,7 +138,7 @@ static void daemonize(LOG_BACKEND log_backend, char *pid_file_path)
|
||||
|
||||
if (pid_file == nullptr) {
|
||||
log_write(LOG_LEVEL_ERROR, "Couldn't open the PID file for writing: %s. Exiting.\n", pid_file_path);
|
||||
exit(1);
|
||||
return CLI_STATUS_ERROR;
|
||||
}
|
||||
|
||||
// Fork off from the parent process
|
||||
@@ -141,27 +148,27 @@ static void daemonize(LOG_BACKEND log_backend, char *pid_file_path)
|
||||
fprintf(pid_file, "%d", pid);
|
||||
fclose(pid_file);
|
||||
log_write(LOG_LEVEL_INFO, "Forked successfully: PID: %d.\n", pid);
|
||||
exit(0);
|
||||
return CLI_STATUS_DONE;
|
||||
} else {
|
||||
fclose(pid_file);
|
||||
}
|
||||
|
||||
if (pid < 0) {
|
||||
log_write(LOG_LEVEL_ERROR, "Forking failed. Exiting.\n");
|
||||
exit(1);
|
||||
return CLI_STATUS_ERROR;
|
||||
}
|
||||
|
||||
// Create a new SID for the child process
|
||||
if (setsid() < 0) {
|
||||
log_write(LOG_LEVEL_ERROR, "SID creation failure. Exiting.\n");
|
||||
exit(1);
|
||||
return CLI_STATUS_ERROR;
|
||||
}
|
||||
|
||||
|
||||
// Change the current working directory
|
||||
if ((chdir("/")) < 0) {
|
||||
log_write(LOG_LEVEL_ERROR, "Couldn't change working directory to '/'. Exiting.\n");
|
||||
exit(1);
|
||||
return CLI_STATUS_ERROR;
|
||||
}
|
||||
|
||||
// Go quiet
|
||||
@@ -170,6 +177,8 @@ static void daemonize(LOG_BACKEND log_backend, char *pid_file_path)
|
||||
close(STDIN_FILENO);
|
||||
close(STDERR_FILENO);
|
||||
}
|
||||
|
||||
return CLI_STATUS_OK;
|
||||
}
|
||||
|
||||
// Logs toxcore logger message using our logger facility
|
||||
@@ -212,11 +221,18 @@ int main(int argc, char *argv[])
|
||||
char *cfg_file_path = nullptr;
|
||||
bool run_in_foreground = false;
|
||||
|
||||
// choose backend for printing command line argument parsing output based on whether the daemon is being run from a terminal
|
||||
// Choose backend for printing command line argument parsing output based on whether the daemon is being run from a terminal
|
||||
LOG_BACKEND log_backend = isatty(STDOUT_FILENO) ? LOG_BACKEND_STDOUT : LOG_BACKEND_SYSLOG;
|
||||
|
||||
log_open(log_backend);
|
||||
handle_command_line_arguments(argc, argv, &cfg_file_path, &log_backend, &run_in_foreground);
|
||||
switch (handle_command_line_arguments(argc, argv, &cfg_file_path, &log_backend, &run_in_foreground)) {
|
||||
case CLI_STATUS_OK:
|
||||
break;
|
||||
case CLI_STATUS_DONE:
|
||||
return 0;
|
||||
case CLI_STATUS_ERROR:
|
||||
return 1;
|
||||
}
|
||||
log_close();
|
||||
|
||||
log_open(log_backend);
|
||||
@@ -254,7 +270,14 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
if (!run_in_foreground) {
|
||||
daemonize(log_backend, pid_file_path);
|
||||
switch (daemonize(log_backend, pid_file_path)) {
|
||||
case CLI_STATUS_OK:
|
||||
break;
|
||||
case CLI_STATUS_DONE:
|
||||
return 0;
|
||||
case CLI_STATUS_ERROR:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
free(pid_file_path);
|
||||
@@ -375,6 +398,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
if (!onion) {
|
||||
log_write(LOG_LEVEL_ERROR, "Couldn't initialize Tox Onion. Exiting.\n");
|
||||
kill_gca(group_announce);
|
||||
kill_announcements(announce);
|
||||
kill_forwarding(forwarding);
|
||||
kill_dht(dht);
|
||||
@@ -454,7 +478,7 @@ int main(int argc, char *argv[])
|
||||
if (tcp_relay_port_count == 0) {
|
||||
log_write(LOG_LEVEL_ERROR, "No TCP relay ports read. Exiting.\n");
|
||||
kill_onion_announce(onion_a);
|
||||
kill_gca(group_announce);
|
||||
kill_gca(group_announce);
|
||||
kill_announcements(announce);
|
||||
kill_forwarding(forwarding);
|
||||
kill_onion(onion);
|
||||
|
@@ -1,7 +1,5 @@
|
||||
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
|
||||
|
||||
package(features = ["-layering_check"])
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["websockify.go"],
|
||||
|
@@ -12,6 +12,8 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "../toxcore/network.h"
|
||||
|
||||
#define INFO_REQUEST_PACKET_LENGTH 78
|
||||
|
||||
static uint32_t bootstrap_version;
|
||||
|
6
external/toxcore/c-toxcore/other/docker/alpine-s390x/Dockerfile
vendored
Normal file
6
external/toxcore/c-toxcore/other/docker/alpine-s390x/Dockerfile
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
FROM toxchat/alpine-s390x:latest
|
||||
|
||||
WORKDIR /work/c-toxcore
|
||||
COPY . /work/c-toxcore/
|
||||
|
||||
RUN [".github/scripts/cmake-alpine-s390x"]
|
5
external/toxcore/c-toxcore/other/docker/alpine-s390x/run
vendored
Executable file
5
external/toxcore/c-toxcore/other/docker/alpine-s390x/run
vendored
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eux
|
||||
BUILD=alpine-s390x
|
||||
docker build -t "toxchat/c-toxcore:$BUILD" -f "other/docker/$BUILD/Dockerfile" .
|
@@ -1,6 +1,28 @@
|
||||
################################################
|
||||
# autotools-linux
|
||||
FROM toxchat/nacl:latest
|
||||
FROM ubuntu:22.04
|
||||
|
||||
RUN apt-get update && \
|
||||
DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
|
||||
autoconf \
|
||||
automake \
|
||||
ca-certificates \
|
||||
curl \
|
||||
libconfig-dev \
|
||||
libopus-dev \
|
||||
libsodium-dev \
|
||||
libtool \
|
||||
libvpx-dev \
|
||||
make \
|
||||
pkg-config \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN groupadd -r -g 1000 builder \
|
||||
&& useradd -m --no-log-init -r -g builder -u 1000 builder
|
||||
USER builder
|
||||
|
||||
WORKDIR /home/builder
|
||||
|
||||
# Copy the sources and run the build.
|
||||
COPY --chown=builder:builder . /home/builder/c-toxcore/
|
||||
|
@@ -1,3 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
docker build -t toxchat/c-toxcore:autotools -f other/docker/autotools/Dockerfile .
|
||||
set -eux
|
||||
BUILD=autotools
|
||||
docker build -t "toxchat/c-toxcore:$BUILD" -f "other/docker/$BUILD/Dockerfile" .
|
||||
|
@@ -5,4 +5,4 @@ if [ "$1" = "-u" ]; then
|
||||
docker pull toxchat/haskell:hs-cimple
|
||||
docker build -t toxchat/cimplefmt -f other/docker/cimplefmt/Dockerfile .
|
||||
fi
|
||||
docker run --rm -v "$PWD:/work" toxchat/cimplefmt "$@"
|
||||
docker run --name toxcore-cimplefmt --rm -v "$PWD:/work" toxchat/cimplefmt "$@"
|
||||
|
@@ -3,4 +3,4 @@
|
||||
SANITIZER="${1:-asan}"
|
||||
|
||||
docker build -t toxchat/c-toxcore:circleci other/docker/circleci
|
||||
docker run --rm -it -v "$PWD:/c-toxcore" toxchat/c-toxcore:circleci "$SANITIZER"
|
||||
docker run --name toxcore-circleci --rm -it -v "$PWD:/c-toxcore" toxchat/c-toxcore:circleci "$SANITIZER"
|
||||
|
21
external/toxcore/c-toxcore/other/docker/clang-tidy/Dockerfile
vendored
Normal file
21
external/toxcore/c-toxcore/other/docker/clang-tidy/Dockerfile
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
FROM alpine:3.19.0
|
||||
|
||||
RUN ["apk", "add", "--no-cache", \
|
||||
"bash", \
|
||||
"clang", \
|
||||
"clang-extra-tools", \
|
||||
"cmake", \
|
||||
"colordiff", \
|
||||
"libconfig-dev", \
|
||||
"libsodium-dev", \
|
||||
"libvpx-dev", \
|
||||
"linux-headers", \
|
||||
"opus-dev", \
|
||||
"pkgconfig", \
|
||||
"samurai"]
|
||||
|
||||
ENV CC=clang CXX=clang++
|
||||
|
||||
COPY . /c-toxcore/
|
||||
WORKDIR /c-toxcore
|
||||
RUN other/analysis/run-clang-tidy
|
5
external/toxcore/c-toxcore/other/docker/clang-tidy/run
vendored
Executable file
5
external/toxcore/c-toxcore/other/docker/clang-tidy/run
vendored
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eux
|
||||
BUILD=clang-tidy
|
||||
docker build -t "toxchat/c-toxcore:$BUILD" -f "other/docker/$BUILD/Dockerfile" .
|
30
external/toxcore/c-toxcore/other/docker/compcert/Dockerfile
vendored
Normal file
30
external/toxcore/c-toxcore/other/docker/compcert/Dockerfile
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
FROM toxchat/compcert:latest
|
||||
|
||||
WORKDIR /work
|
||||
COPY auto_tests/ /work/auto_tests/
|
||||
COPY testing/ /work/testing/
|
||||
COPY toxav/ /work/toxav/
|
||||
COPY toxcore/ /work/toxcore/
|
||||
COPY toxencryptsave/ /work/toxencryptsave/
|
||||
COPY third_party/ /work/third_party/
|
||||
|
||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
|
||||
RUN ccomp \
|
||||
-o send_message_test \
|
||||
-Wall -Werror \
|
||||
-Wno-c11-extensions \
|
||||
-Wno-unknown-pragmas \
|
||||
-Wno-unused-variable \
|
||||
-fstruct-passing -fno-unprototyped -g \
|
||||
auto_tests/auto_test_support.c \
|
||||
auto_tests/send_message_test.c \
|
||||
testing/misc_tools.c \
|
||||
toxav/*.c \
|
||||
toxcore/*.c \
|
||||
toxcore/*/*.c \
|
||||
toxencryptsave/*.c \
|
||||
third_party/cmp/*.c \
|
||||
-D__COMPCERT__ -DDISABLE_VLA -Dinline= \
|
||||
-lpthread $(pkg-config --cflags --libs libsodium opus vpx) \
|
||||
&& ./send_message_test | grep 'tox clients connected'
|
5
external/toxcore/c-toxcore/other/docker/compcert/run
vendored
Executable file
5
external/toxcore/c-toxcore/other/docker/compcert/run
vendored
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eux
|
||||
BUILD=compcert
|
||||
docker build -t "toxchat/c-toxcore:$BUILD" -f "other/docker/$BUILD/Dockerfile" .
|
@@ -1,13 +1,15 @@
|
||||
FROM toxchat/c-toxcore:sources AS src
|
||||
FROM ubuntu:22.04 AS build
|
||||
FROM ubuntu:20.04 AS build
|
||||
|
||||
RUN apt-get update && \
|
||||
DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
clang \
|
||||
cmake \
|
||||
curl \
|
||||
gcc \
|
||||
git \
|
||||
golang \
|
||||
golang-1.18 \
|
||||
libconfig-dev \
|
||||
libgtest-dev \
|
||||
libopus-dev \
|
||||
@@ -17,15 +19,24 @@ RUN apt-get update && \
|
||||
make \
|
||||
ninja-build \
|
||||
pkg-config \
|
||||
python3-lxml \
|
||||
python3-pip \
|
||||
python3-pygments \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& pip3 install --no-cache-dir gcovr
|
||||
# strip gtest so it doesn't end up in stack traces. This speeds up the
|
||||
# mallocfail run below by a lot.
|
||||
RUN ["strip", "-g",\
|
||||
"/usr/lib/x86_64-linux-gnu/libgtest.a",\
|
||||
"/usr/lib/x86_64-linux-gnu/libgtest_main.a"]
|
||||
RUN ["curl", "-s", "https://codecov.io/bash", "-o", "/usr/local/bin/codecov"]
|
||||
RUN ["chmod", "+x", "/usr/local/bin/codecov"]
|
||||
|
||||
ENV CC=clang \
|
||||
CXX=clang++ \
|
||||
PYTHONUNBUFFERED=1
|
||||
PYTHONUNBUFFERED=1 \
|
||||
PATH=$PATH:/usr/lib/go-1.18/bin
|
||||
SHELL ["/bin/bash", "-c"]
|
||||
|
||||
WORKDIR /work
|
||||
@@ -41,26 +52,27 @@ RUN source .github/scripts/flags-coverage.sh \
|
||||
-DENABLE_SHARED=OFF \
|
||||
-DMIN_LOGGER_LEVEL=TRACE \
|
||||
-DMUST_BUILD_TOXAV=ON \
|
||||
-DNON_HERMETIC_TESTS=ON \
|
||||
-DNON_HERMETIC_TESTS=OFF \
|
||||
-DSTRICT_ABI=ON \
|
||||
-DAUTOTEST=ON \
|
||||
-DPROXY_TEST=ON \
|
||||
-DUSE_IPV6=OFF \
|
||||
-DTEST_TIMEOUT_SECONDS=30 \
|
||||
-DTEST_TIMEOUT_SECONDS=40 \
|
||||
&& cmake --build _build --parallel 8 --target install
|
||||
|
||||
WORKDIR /work/_build
|
||||
RUN /work/proxy_server \
|
||||
& ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6
|
||||
RUN /work/other/proxy/proxy_server \
|
||||
& (ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6 || \
|
||||
ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6)
|
||||
|
||||
WORKDIR /work/mallocfail
|
||||
RUN ["git", "clone", "--depth=1", "https://github.com/ralight/mallocfail", "/work/mallocfail"]
|
||||
COPY run_mallocfail /usr/local/bin/
|
||||
COPY syscall_funcs.c src/
|
||||
COPY other/docker/coverage/syscall_funcs.c src/
|
||||
RUN gcc -fPIC -shared -O2 -g3 -Wall -Ideps/uthash -Ideps/sha3 deps/*/*.c src/*.c -o mallocfail.so -ldl -lbacktrace \
|
||||
&& install mallocfail.so /usr/local/lib/mallocfail.so
|
||||
|
||||
WORKDIR /work/_build
|
||||
COPY other/docker/coverage/run_mallocfail /usr/local/bin/
|
||||
RUN ["run_mallocfail", "--ctest=2", "--jobs=8"]
|
||||
RUN ["gcovr", \
|
||||
"--sort-percentage", \
|
||||
@@ -74,6 +86,4 @@ RUN ["gcovr", \
|
||||
"--exclude=(.+/)?other/", \
|
||||
"--exclude=(.+/)?testing/"]
|
||||
|
||||
FROM nginx:alpine
|
||||
COPY --from=build /work/_build/html/coverage_details.html /usr/share/nginx/html/index.html
|
||||
COPY --from=build /work/_build/html/ /usr/share/nginx/html/
|
||||
WORKDIR /work
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user