Compare commits
31 Commits
tmp_tox_lo
...
tmp_window
Author | SHA1 | Date | |
---|---|---|---|
67aefff940 | |||
74129cabef | |||
be8ceb861c | |||
da0f59a3f5 | |||
000254320e | |||
2fac7206d2 | |||
e8234f2a4a | |||
a0ba0b39d8 | |||
845967cf12 | |||
92b58cbfa9 | |||
5a0651eaf0 | |||
14fcaf1d7e | |||
5a0252d8d0 | |||
9c0ffd38ce | |||
ae1fb0fde3 | |||
b2ae9530a4 | |||
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...08b3d69c15
13
external/toxcore/CMakeLists.txt
vendored
13
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
|
||||
@ -164,10 +166,9 @@ configure_file(
|
||||
target_include_directories(toxcore PRIVATE "${TOX_DIR}toxcore")
|
||||
target_include_directories(toxcore PUBLIC "${TOX_DIR}")
|
||||
|
||||
#target_compile_definitions(toxcore PUBLIC USE_IPV6=1)
|
||||
target_compile_definitions(toxcore PUBLIC MIN_LOGGER_LEVEL=LOGGER_LEVEL_TRACE)
|
||||
target_compile_definitions(toxcore PUBLIC USE_IPV6=1)
|
||||
#target_compile_definitions(toxcore PUBLIC MIN_LOGGER_LEVEL=LOGGER_LEVEL_DEBUG)
|
||||
#target_compile_definitions(toxcore PUBLIC MIN_LOGGER_LEVEL=LOGGER_LEVEL_INFO)
|
||||
target_compile_definitions(toxcore PUBLIC MIN_LOGGER_LEVEL=LOGGER_LEVEL_INFO)
|
||||
|
||||
find_package(unofficial-sodium CONFIG QUIET)
|
||||
find_package(sodium QUIET)
|
||||
@ -204,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
|
||||
|
@ -134,7 +134,6 @@ jobs:
|
||||
- run:
|
||||
apt-get install -y --no-install-recommends
|
||||
ca-certificates
|
||||
cppcheck
|
||||
g++
|
||||
llvm-dev
|
||||
- checkout
|
||||
@ -142,7 +141,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:
|
||||
|
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
|
||||
|
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
|
||||
|
32
external/toxcore/c-toxcore/.github/settings.yml
vendored
32
external/toxcore/c-toxcore/.github/settings.yml
vendored
@ -12,36 +12,52 @@ branches:
|
||||
protection:
|
||||
required_status_checks:
|
||||
contexts:
|
||||
- "bazel-asan"
|
||||
- "bazel-dbg"
|
||||
- "bazel-opt"
|
||||
- "bazel-tsan"
|
||||
- "build-alpine-s390x"
|
||||
- "build-android"
|
||||
- "build-autotools"
|
||||
- "build-compcert"
|
||||
- "build-macos"
|
||||
- "build-nacl"
|
||||
- "build-tcc"
|
||||
- "build-win32"
|
||||
- "build-win64"
|
||||
- "CodeFactor"
|
||||
- "common / buildifier"
|
||||
- "coverage-linux"
|
||||
- "ci/circleci: asan"
|
||||
- "ci/circleci: bazel-asan"
|
||||
- "ci/circleci: bazel-msan"
|
||||
- "ci/circleci: bazel-tsan"
|
||||
- "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"
|
||||
- "cimplefmt"
|
||||
- "CodeFactor"
|
||||
- "code-review/reviewable"
|
||||
- "continuous-integration/appveyor/pr"
|
||||
- "common / buildifier"
|
||||
- "coverage-linux"
|
||||
- "docker-bootstrap-node"
|
||||
- "docker-bootstrap-node-websocket"
|
||||
- "docker-clusterfuzz"
|
||||
- "docker-esp32"
|
||||
- "docker-fuzzer"
|
||||
- "docker-toxcore-js"
|
||||
- "docker-win32"
|
||||
- "docker-win64"
|
||||
- "doxygen"
|
||||
- "freebsd"
|
||||
- "Hound"
|
||||
- "misra"
|
||||
- "mypy"
|
||||
- "program-analysis"
|
||||
- "sonar-scan"
|
||||
- "tokstyle"
|
||||
- "TokTok.c-toxcore"
|
||||
- "TokTok.c-toxcore (windows_msvc_conan shared)"
|
||||
- "TokTok.c-toxcore (windows_msvc_conan static)"
|
||||
|
||||
# Labels specific to c-toxcore.
|
||||
labels:
|
||||
|
174
external/toxcore/c-toxcore/.github/workflows/ci.yml
vendored
174
external/toxcore/c-toxcore/.github/workflows/ci.yml
vendored
@ -13,10 +13,20 @@ jobs:
|
||||
common:
|
||||
uses: TokTok/ci-tools/.github/workflows/common-ci.yml@master
|
||||
|
||||
cppcheck:
|
||||
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/cppcheck/Dockerfile
|
||||
|
||||
mypy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Set up Python 3.9
|
||||
@ -34,9 +44,9 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Docker Build
|
||||
uses: docker/build-push-action@v2
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
file: other/docker/doxygen/Dockerfile
|
||||
|
||||
@ -44,9 +54,9 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Docker Build
|
||||
uses: docker/build-push-action@v2
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
file: other/docker/tokstyle/Dockerfile
|
||||
|
||||
@ -54,35 +64,66 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Docker Build
|
||||
uses: docker/build-push-action@v2
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
file: other/docker/misra/Dockerfile
|
||||
|
||||
build-autotools:
|
||||
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/autotools/Dockerfile
|
||||
|
||||
build-tcc:
|
||||
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/tcc/Dockerfile
|
||||
|
||||
build-compcert:
|
||||
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/compcert/Dockerfile
|
||||
|
||||
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@v2
|
||||
- uses: actions/checkout@v4
|
||||
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
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Cross compilation
|
||||
@ -91,26 +132,16 @@ jobs:
|
||||
build-win64:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
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
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Build and test
|
||||
@ -119,91 +150,16 @@ jobs:
|
||||
coverage-linux:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
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'"
|
||||
run: other/docker/coverage/run
|
||||
|
||||
build-android:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- run: .github/scripts/cmake-android armeabi-v7a
|
||||
|
@ -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
|
||||
|
5
external/toxcore/c-toxcore/BUILD.bazel
vendored
5
external/toxcore/c-toxcore/BUILD.bazel
vendored
@ -1,8 +1,6 @@
|
||||
load("@rules_cc//cc:defs.bzl", "cc_library")
|
||||
load("//tools/project:build_defs.bzl", "project")
|
||||
|
||||
package(features = ["layering_check"])
|
||||
|
||||
project()
|
||||
|
||||
genrule(
|
||||
@ -10,16 +8,19 @@ genrule(
|
||||
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"],
|
||||
|
121
external/toxcore/c-toxcore/CMakeLists.txt
vendored
121
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,24 +76,23 @@ 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)
|
||||
# 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)
|
||||
|
||||
message(STATUS "Supported C compiler features = ${CMAKE_C_COMPILE_FEATURES}")
|
||||
message(STATUS "Supported C++ compiler features = ${CMAKE_CXX_COMPILE_FEATURES}")
|
||||
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}")
|
||||
|
||||
set(MIN_LOGGER_LEVEL "" CACHE STRING "Logging level to use (TRACE, DEBUG, INFO, WARNING, ERROR)")
|
||||
if(MIN_LOGGER_LEVEL)
|
||||
@ -113,16 +112,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 +316,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 +327,16 @@ set(toxcore_SOURCES
|
||||
toxcore/tox_unpack.h
|
||||
toxcore/util.c
|
||||
toxcore/util.h)
|
||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${LIBSODIUM_LIBRARIES})
|
||||
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})
|
||||
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 +366,10 @@ 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})
|
||||
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})
|
||||
set(toxcore_PKGCONFIG_REQUIRES ${toxcore_PKGCONFIG_REQUIRES} opus vpx)
|
||||
endif()
|
||||
|
||||
@ -393,28 +396,28 @@ 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(WIN32)
|
||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ws2_32 iphlpapi)
|
||||
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ws2_32 iphlpapi)
|
||||
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lws2_32 -liphlpapi)
|
||||
endif()
|
||||
|
||||
@ -428,7 +431,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 +457,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 +510,12 @@ 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)
|
||||
install(TARGETS DHT_bootstrap RUNTIME DESTINATION bin)
|
||||
endif()
|
||||
|
||||
|
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
|
||||
|
||||
|
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,18 +3,26 @@ 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()
|
||||
|
||||
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(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()
|
||||
endfunction()
|
||||
|
||||
@ -69,17 +77,28 @@ 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()
|
||||
|
||||
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()
|
||||
|
||||
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 },
|
||||
};
|
||||
|
||||
@ -332,7 +315,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();
|
||||
@ -450,6 +468,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");
|
||||
@ -512,7 +543,6 @@ static void group_message_test(AutoTox *autotoxes)
|
||||
}
|
||||
|
||||
fprintf(stderr, "All tests passed!\n");
|
||||
#endif // VANILLA_NACL
|
||||
}
|
||||
|
||||
int main(void)
|
||||
@ -538,6 +568,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
|
||||
|
@ -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;
|
||||
@ -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,7 @@
|
||||
#include "../toxcore/tox.h"
|
||||
#include "../toxcore/tox_dispatch.h"
|
||||
#include "../toxcore/tox_events.h"
|
||||
#include "../toxcore/tox_unpack.h"
|
||||
#include "auto_test_support.h"
|
||||
#include "check_compat.h"
|
||||
|
||||
@ -30,31 +31,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 +78,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 +168,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()
|
@ -8,19 +8,25 @@ include(ModulePackage)
|
||||
|
||||
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)
|
||||
|
||||
# For toxcore.
|
||||
pkg_use_module(LIBSODIUM libsodium )
|
||||
pkg_search_module(LIBSODIUM libsodium IMPORTED_TARGET)
|
||||
|
||||
# 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 )
|
||||
pkg_search_module(LIBCONFIG libconfig IMPORTED_TARGET)
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
|
@ -21,41 +21,6 @@ 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)
|
||||
|
||||
@ -70,7 +35,7 @@ function(add_module lib)
|
||||
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 +45,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 +78,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}
|
||||
|
2
external/toxcore/c-toxcore/other/BUILD.bazel
vendored
2
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"],
|
||||
|
@ -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
|
||||
|
@ -2,6 +2,9 @@
|
||||
|
||||
CHECKS="*"
|
||||
|
||||
# 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"
|
||||
CHECKS="$CHECKS,-clang-diagnostic-tautological-pointer-compare"
|
||||
@ -57,6 +60,27 @@ CHECKS="$CHECKS,-readability-redundant-control-flow"
|
||||
CHECKS="$CHECKS,-bugprone-narrowing-conversions"
|
||||
CHECKS="$CHECKS,-cppcoreguidelines-narrowing-conversions"
|
||||
|
||||
# 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"
|
||||
|
||||
# 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"
|
||||
|
@ -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[@]}" "$@"
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
load("@rules_cc//cc:defs.bzl", "cc_binary")
|
||||
|
||||
package(features = ["layering_check"])
|
||||
|
||||
cc_binary(
|
||||
name = "bootstrap_daemon",
|
||||
srcs = glob([
|
||||
|
@ -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")
|
||||
|
@ -1,15 +1,16 @@
|
||||
###########################################################
|
||||
# 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"\
|
||||
]
|
||||
@ -34,9 +35,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 \
|
||||
@ -62,7 +63,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
|
||||
|
@ -1 +1 @@
|
||||
b2996d73cab7c7453dc10ccf7ad733622558de3b1ad0db824a379cf96f500379 /usr/local/bin/tox-bootstrapd
|
||||
b0bd5099f2f77fbd540a5a929a23cece39ff95e3a66702a5381342d01775cbd3 /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-2023 The TokTok team.
|
||||
* Copyright © 2014-2016 Tox project.
|
||||
*/
|
||||
|
||||
@ -39,22 +39,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));
|
||||
*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;
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -57,7 +57,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];
|
||||
@ -375,6 +375,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 +455,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"],
|
||||
|
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,27 @@
|
||||
################################################
|
||||
# autotools-linux
|
||||
FROM toxchat/nacl:latest
|
||||
FROM ubuntu:22.04
|
||||
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||
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"
|
||||
|
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 \
|
||||
@ -22,10 +24,16 @@ RUN apt-get update && \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& pip3 install --no-cache-dir gcovr
|
||||
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 +49,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 +83,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
|
||||
|
5
external/toxcore/c-toxcore/other/docker/coverage/Dockerfile.nginx
vendored
Normal file
5
external/toxcore/c-toxcore/other/docker/coverage/Dockerfile.nginx
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
# vim:ft=dockerfile
|
||||
FROM toxchat/c-toxcore:coverage AS build
|
||||
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/
|
@ -1,7 +1,9 @@
|
||||
#!/bin/sh
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -eux
|
||||
|
||||
read -a ci_env <<<"$(bash <(curl -s https://codecov.io/env))"
|
||||
|
||||
docker build -t toxchat/c-toxcore:sources -f other/docker/sources/Dockerfile .
|
||||
docker build -t toxchat/c-toxcore:coverage other/docker/coverage
|
||||
docker run --rm -it -p "28192:80" toxchat/c-toxcore:coverage
|
||||
docker build -t toxchat/c-toxcore:coverage -f other/docker/coverage/Dockerfile .
|
||||
docker run "${ci_env[@]}" -e CI=true --name toxcore-coverage --rm -t toxchat/c-toxcore:coverage /usr/local/bin/codecov -x "llvm-cov gcov"
|
||||
|
@ -39,8 +39,8 @@ _ENV = {
|
||||
}
|
||||
|
||||
|
||||
def run_mallocfail(tmpdir: str, timeout: float, exe: str,
|
||||
iteration: int) -> bool:
|
||||
def run_mallocfail(tmpdir: str, timeout: float, exe: str, iteration: int,
|
||||
keep_going: bool) -> bool:
|
||||
"""Run a program with mallocfail."""
|
||||
print(f"\x1b[1;33mmallocfail '{exe}' run #{iteration}\x1b[0m")
|
||||
hashes = os.path.join(tmpdir, _HASHES)
|
||||
@ -73,7 +73,8 @@ def run_mallocfail(tmpdir: str, timeout: float, exe: str,
|
||||
print(
|
||||
f"\x1b[1;32mProgram '{exe}' failed to handle OOM situation cleanly\x1b[0m"
|
||||
)
|
||||
raise Exception("Aborting test")
|
||||
if not keep_going:
|
||||
raise Exception("Aborting test")
|
||||
|
||||
return True
|
||||
|
||||
@ -95,7 +96,8 @@ def find_prog(name: str) -> Tuple[Optional[str], ...]:
|
||||
return path
|
||||
return None
|
||||
|
||||
return (attempt(f"./unit_{name}_test"), attempt(f"./auto_{name}_test"))
|
||||
return (attempt(f"./unit_{name}_test"),
|
||||
attempt(f"auto_tests/auto_{name}_test"))
|
||||
|
||||
|
||||
def parse_flags(args: List[str]) -> Tuple[Dict[str, str], List[str]]:
|
||||
@ -110,15 +112,19 @@ def parse_flags(args: List[str]) -> Tuple[Dict[str, str], List[str]]:
|
||||
return flags, exes
|
||||
|
||||
|
||||
def loop_mallocfail(tmpdir: str, timeout: float, exe: str) -> None:
|
||||
def loop_mallocfail(tmpdir: str,
|
||||
timeout: float,
|
||||
exe: str,
|
||||
keep_going: bool = False) -> None:
|
||||
i = 1
|
||||
while run_mallocfail(tmpdir, timeout, exe, i):
|
||||
while run_mallocfail(tmpdir, timeout, exe, i, keep_going):
|
||||
i += 1
|
||||
|
||||
|
||||
def isolated_mallocfail(timeout: int, exe: str) -> None:
|
||||
with tempfile.TemporaryDirectory(prefix="mallocfail") as tmpdir:
|
||||
print(f"\x1b[1;33mRunning for {exe} in isolated path {tmpdir}\x1b[0m")
|
||||
os.mkdir(os.path.join(tmpdir, "auto_tests"))
|
||||
shutil.copy(exe, os.path.join(tmpdir, exe))
|
||||
shutil.copy(_HASHES, os.path.join(tmpdir, _HASHES))
|
||||
loop_mallocfail(tmpdir, timeout, exe)
|
||||
@ -149,7 +155,7 @@ def main(args: List[str]) -> None:
|
||||
# such as llvm_gcov_init fail.
|
||||
if os.path.exists(_PRIMER):
|
||||
print(f"\x1b[1;33mPriming hashes with unit_util_test\x1b[0m")
|
||||
loop_mallocfail(".", timeout, _PRIMER)
|
||||
loop_mallocfail(".", timeout, _PRIMER, keep_going=True)
|
||||
|
||||
print(f"\x1b[1;33m--------------------------------\x1b[0m")
|
||||
print(f"\x1b[1;33mStarting mallocfail for {len(exes)} programs:\x1b[0m")
|
||||
|
8
external/toxcore/c-toxcore/other/docker/coverage/serve
vendored
Executable file
8
external/toxcore/c-toxcore/other/docker/coverage/serve
vendored
Executable file
@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eux
|
||||
|
||||
docker build -t toxchat/c-toxcore:sources -f other/docker/sources/Dockerfile .
|
||||
docker build -t toxchat/c-toxcore:coverage -f other/docker/coverage/Dockerfile .
|
||||
docker build -t toxchat/c-toxcore:coverage-nginx -f other/docker/coverage/Dockerfile.nginx other/docker/coverage
|
||||
docker run --name toxcore-coverage --rm -it -p "28192:80" toxchat/c-toxcore:coverage-nginx
|
30
external/toxcore/c-toxcore/other/docker/cppcheck/Dockerfile
vendored
Normal file
30
external/toxcore/c-toxcore/other/docker/cppcheck/Dockerfile
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
FROM alpine:3.19.0
|
||||
|
||||
RUN ["apk", "add", "--no-cache", \
|
||||
"bash", \
|
||||
"cppcheck", \
|
||||
"findutils", \
|
||||
"libconfig-dev", \
|
||||
"libsodium-dev", \
|
||||
"libvpx-dev", \
|
||||
"linux-headers", \
|
||||
"make", \
|
||||
"opus-dev"]
|
||||
|
||||
COPY other/bootstrap_daemon/ /src/workspace/c-toxcore/other/bootstrap_daemon/
|
||||
COPY other/bootstrap_node_packets.* /src/workspace/c-toxcore/other/
|
||||
COPY other/fun/ /src/workspace/c-toxcore/other/fun/
|
||||
COPY auto_tests/check_compat.h /src/workspace/c-toxcore/auto_tests/
|
||||
COPY testing/ /src/workspace/c-toxcore/testing/
|
||||
COPY toxav/ /src/workspace/c-toxcore/toxav/
|
||||
COPY toxcore/ /src/workspace/c-toxcore/toxcore/
|
||||
COPY toxencryptsave/ /src/workspace/c-toxcore/toxencryptsave/
|
||||
COPY third_party/cmp/cmp.h /src/workspace/c-toxcore/third_party/cmp/
|
||||
COPY other/analysis/run-cppcheck \
|
||||
other/analysis/gen-file.sh \
|
||||
other/analysis/variants.sh \
|
||||
/src/workspace/c-toxcore/other/analysis/
|
||||
COPY other/docker/cppcheck/toxcore.cfg \
|
||||
/src/workspace/c-toxcore/other/docker/cppcheck/
|
||||
WORKDIR /src/workspace/c-toxcore
|
||||
RUN ["other/analysis/run-cppcheck"]
|
5
external/toxcore/c-toxcore/other/docker/cppcheck/run
vendored
Executable file
5
external/toxcore/c-toxcore/other/docker/cppcheck/run
vendored
Executable file
@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eux
|
||||
BUILD=cppcheck
|
||||
docker build -t "toxchat/c-toxcore:$BUILD" -f "other/docker/$BUILD/Dockerfile" .
|
117
external/toxcore/c-toxcore/other/docker/cppcheck/toxcore.cfg
vendored
Normal file
117
external/toxcore/c-toxcore/other/docker/cppcheck/toxcore.cfg
vendored
Normal file
@ -0,0 +1,117 @@
|
||||
<?xml version="1.0"?>
|
||||
<def format="2">
|
||||
<memory>
|
||||
<alloc init="false" buffer-size="malloc:2">mem_balloc</alloc>
|
||||
<alloc init="true" buffer-size="malloc:2">mem_alloc</alloc>
|
||||
<alloc init="true" buffer-size="calloc:2,3">mem_valloc</alloc>
|
||||
<realloc init="false" buffer-size="calloc:3,4">mem_vrealloc</realloc>
|
||||
<dealloc arg="2">mem_delete</dealloc>
|
||||
</memory>
|
||||
<resource>
|
||||
<alloc init="true">bin_pack_new</alloc>
|
||||
<dealloc arg="1">bin_pack_free</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">bin_unpack_new</alloc>
|
||||
<dealloc arg="1">bin_unpack_free</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">friendreq_new</alloc>
|
||||
<dealloc arg="1">friendreq_kill</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">logger_new</alloc>
|
||||
<dealloc arg="1">logger_kill</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">mono_time_new</alloc>
|
||||
<dealloc arg="1">mono_time_free</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">ping_array_new</alloc>
|
||||
<dealloc arg="1">ping_array_kill</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">ping_new</alloc>
|
||||
<dealloc arg="1">ping_kill</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">shared_key_cache_new</alloc>
|
||||
<dealloc arg="1">shared_key_cache_free</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">tox_dispatch_new</alloc>
|
||||
<dealloc arg="1">tox_dispatch_free</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">tox_new</alloc>
|
||||
<dealloc arg="1">tox_kill</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">tox_options_new</alloc>
|
||||
<dealloc arg="1">tox_options_free</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_announcements</alloc>
|
||||
<dealloc arg="1">kill_announcements</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_dht</alloc>
|
||||
<dealloc arg="1">kill_dht</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_dht_groupchats</alloc>
|
||||
<dealloc arg="1">kill_dht_groupchats</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_forwarding</alloc>
|
||||
<dealloc arg="1">kill_forwarding</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_friend_connections</alloc>
|
||||
<dealloc arg="1">kill_friend_connections</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_gca_list</alloc>
|
||||
<dealloc arg="1">kill_gca_list</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_groupchats</alloc>
|
||||
<dealloc arg="1">kill_groupchats</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_messenger</alloc>
|
||||
<dealloc arg="1">kill_messenger</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_net_crypto</alloc>
|
||||
<dealloc arg="1">kill_net_crypto</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_networking_ex</alloc>
|
||||
<alloc init="true">new_networking_no_udp</alloc>
|
||||
<dealloc arg="1">kill_networking</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_onion</alloc>
|
||||
<dealloc arg="1">kill_onion</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_onion_announce</alloc>
|
||||
<dealloc arg="1">kill_onion_announce</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_onion_client</alloc>
|
||||
<dealloc arg="1">kill_onion_client</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_tcp_connections</alloc>
|
||||
<dealloc arg="1">kill_tcp_connections</dealloc>
|
||||
</resource>
|
||||
<resource>
|
||||
<alloc init="true">new_tcp_server</alloc>
|
||||
<dealloc arg="1">kill_tcp_server</dealloc>
|
||||
</resource>
|
||||
</def>
|
||||
<!-- vim:ft=xml
|
||||
-->
|
@ -3,4 +3,4 @@
|
||||
set -eux
|
||||
|
||||
docker build -t toxchat/c-toxcore:docs -f other/docker/doxygen/Dockerfile .
|
||||
docker run --rm -it -p "28192:80" toxchat/c-toxcore:docs
|
||||
docker run --name toxcore-docs --rm -it -p "28192:80" toxchat/c-toxcore:docs
|
||||
|
15
external/toxcore/c-toxcore/other/docker/esp32/BUILD.bazel
vendored
Normal file
15
external/toxcore/c-toxcore/other/docker/esp32/BUILD.bazel
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
load("@rules_cc//cc:defs.bzl", "cc_binary")
|
||||
|
||||
cc_binary(
|
||||
name = "host_main",
|
||||
testonly = 1,
|
||||
srcs = [
|
||||
"host_main.cc",
|
||||
"main/tox_main.cc",
|
||||
"main/tox_main.h",
|
||||
],
|
||||
deps = [
|
||||
"//c-toxcore/toxcore:tox",
|
||||
"//c-toxcore/toxcore:tox_events",
|
||||
],
|
||||
)
|
@ -1,48 +1,32 @@
|
||||
FROM toxchat/c-toxcore:sources AS src
|
||||
FROM ubuntu:18.04
|
||||
FROM mluis/qemu-esp32:latest
|
||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
ENV IDF_TARGET=esp32
|
||||
|
||||
RUN apt-get update && \
|
||||
DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
|
||||
bison \
|
||||
ccache \
|
||||
cmake \
|
||||
flex \
|
||||
git \
|
||||
gperf \
|
||||
libncurses-dev \
|
||||
ninja-build \
|
||||
python \
|
||||
python-cryptography \
|
||||
python-future \
|
||||
python-pip \
|
||||
python-pyparsing \
|
||||
python-serial \
|
||||
python-setuptools \
|
||||
wget \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
WORKDIR /root/toxcore
|
||||
|
||||
ENV ESP32_TARBALL=xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0 \
|
||||
IDF_PATH="/root/esp/esp-idf" \
|
||||
PATH="/root/esp/esp-idf/tools:/root/esp/xtensa-esp32-elf/bin:$PATH"
|
||||
WORKDIR /root/esp
|
||||
RUN wget -q https://dl.espressif.com/dl/$ESP32_TARBALL.tar.gz \
|
||||
&& tar zxf $ESP32_TARBALL.tar.gz \
|
||||
&& rm -f $ESP32_TARBALL.tar.gz \
|
||||
&& git clone -b v3.3 --recursive --depth=1 --shallow-submodules https://github.com/espressif/esp-idf
|
||||
# Build an initial bootstrap hello world just to compile libsodium and other
|
||||
# system level dependencies.
|
||||
COPY other/docker/esp32/sdkconfig \
|
||||
other/docker/esp32/CMakeLists.txt \
|
||||
/root/toxcore/
|
||||
COPY other/docker/esp32/bootstrap/ \
|
||||
/root/toxcore/main/
|
||||
RUN . /root/esp/esp-idf/export.sh && idf.py build
|
||||
|
||||
# Build a hello world first, so the OS and libsodium etc. are compiled.
|
||||
WORKDIR /root/esp/toxcore
|
||||
COPY other/docker/esp32/CMakeLists.txt /root/esp/toxcore/
|
||||
COPY other/docker/esp32/hello/ /root/esp/toxcore/main/
|
||||
RUN idf.py build
|
||||
|
||||
# Then copy over the actual toxcore sources and build those.
|
||||
COPY --from=src /src/third_party/cmp/ /root/esp/toxcore/main/third_party/cmp/
|
||||
COPY --from=src /src/toxencryptsave/defines.h /root/esp/toxcore/main/toxencryptsave/
|
||||
COPY --from=src /src/toxcore/ /root/esp/toxcore/main/toxcore/
|
||||
COPY other/docker/esp32/toxcore/CMakeLists.txt /root/esp/toxcore/main/
|
||||
COPY other/docker/esp32/toxcore/toxcore_main.cc /root/esp/toxcore/main/other/docker/esp32/main/
|
||||
RUN idf.py build
|
||||
# Copy over toxcore sources and build those.
|
||||
COPY third_party/cmp/ /root/toxcore/main/third_party/cmp/
|
||||
COPY toxencryptsave/defines.h /root/toxcore/main/toxencryptsave/
|
||||
COPY toxcore/ /root/toxcore/main/toxcore/
|
||||
COPY other/docker/esp32/main/CMakeLists.txt \
|
||||
/root/toxcore/main/
|
||||
COPY other/docker/esp32/main/*.cc \
|
||||
other/docker/esp32/main/*.h \
|
||||
/root/toxcore/main/other/docker/esp32/main/
|
||||
RUN touch /root/toxcore/main/CMakeLists.txt \
|
||||
&& . /root/esp/esp-idf/export.sh && idf.py build
|
||||
RUN ls -lh build/toxcore.bin \
|
||||
&& shasum build/toxcore.bin
|
||||
&& sha512sum build/toxcore.bin
|
||||
RUN /root/flash.sh build/toxcore.bin
|
||||
|
||||
COPY other/docker/esp32/qemu-test /root/toxcore/
|
||||
RUN ["/root/toxcore/qemu-test"]
|
||||
|
4
external/toxcore/c-toxcore/other/docker/esp32/bootstrap/CMakeLists.txt
vendored
Normal file
4
external/toxcore/c-toxcore/other/docker/esp32/bootstrap/CMakeLists.txt
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
idf_component_register(
|
||||
SRCS hello_main.cc
|
||||
INCLUDE_DIRS "."
|
||||
REQUIRES esp_netif lwip)
|
4
external/toxcore/c-toxcore/other/docker/esp32/bootstrap/hello_main.cc
vendored
Normal file
4
external/toxcore/c-toxcore/other/docker/esp32/bootstrap/hello_main.cc
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
#include <stdio.h>
|
||||
|
||||
// Bootstrap main. Only writes hello world. See ../main/ for the real thing.
|
||||
extern "C" void app_main(void) { printf("Hello world!\n"); }
|
2
external/toxcore/c-toxcore/other/docker/esp32/bootstrap/idf_component.yml
vendored
Normal file
2
external/toxcore/c-toxcore/other/docker/esp32/bootstrap/idf_component.yml
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
dependencies:
|
||||
espressif/libsodium: "==1.0.20"
|
@ -1,4 +0,0 @@
|
||||
set(COMPONENT_SRCS "hello_main.c")
|
||||
set(COMPONENT_ADD_INCLUDEDIRS "")
|
||||
|
||||
register_component()
|
@ -1,6 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
printf("Hello world!\n");
|
||||
}
|
3
external/toxcore/c-toxcore/other/docker/esp32/host_main.cc
vendored
Normal file
3
external/toxcore/c-toxcore/other/docker/esp32/host_main.cc
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
#include "main/tox_main.h"
|
||||
|
||||
int main() { tox_main(); }
|
16
external/toxcore/c-toxcore/other/docker/esp32/main/CMakeLists.txt
vendored
Normal file
16
external/toxcore/c-toxcore/other/docker/esp32/main/CMakeLists.txt
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-field-initializers -Wno-format -DMIN_LOGGER_LEVEL=LOGGER_LEVEL_TRACE")
|
||||
|
||||
file(GLOB toxcore_SRCS "toxcore/*.[ch]" "toxcore/*/*.[ch]")
|
||||
set(COMPONENT_SRCS
|
||||
${toxcore_SRCS}
|
||||
other/docker/esp32/main/app_main.cc
|
||||
other/docker/esp32/main/tox_main.cc
|
||||
other/docker/esp32/main/tox_main.h
|
||||
third_party/cmp/cmp.c
|
||||
third_party/cmp/cmp.h
|
||||
toxencryptsave/defines.h)
|
||||
|
||||
idf_component_register(
|
||||
SRCS ${COMPONENT_SRCS}
|
||||
INCLUDE_DIRS "."
|
||||
REQUIRES esp_eth esp_netif lwip)
|
73
external/toxcore/c-toxcore/other/docker/esp32/main/app_main.cc
vendored
Normal file
73
external/toxcore/c-toxcore/other/docker/esp32/main/app_main.cc
vendored
Normal file
@ -0,0 +1,73 @@
|
||||
#include <esp_eth.h>
|
||||
#include <esp_event.h>
|
||||
#include <esp_log.h>
|
||||
#include <esp_netif.h>
|
||||
#include <esp_netif_sntp.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "tox_main.h"
|
||||
|
||||
static const char *MAIN_TAG = "app_main";
|
||||
static constexpr int NTP_TIMEOUT = 60; // 1 minute
|
||||
|
||||
static esp_eth_handle_t eth_handle = nullptr;
|
||||
static esp_netif_t *eth_netif = nullptr;
|
||||
|
||||
static void event_handler(
|
||||
void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
|
||||
{
|
||||
if (event_base == ETH_EVENT) {
|
||||
if (event_id == ETHERNET_EVENT_START) {
|
||||
return;
|
||||
}
|
||||
if (event_id == ETHERNET_EVENT_STOP) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (event_base == IP_EVENT) {
|
||||
if (event_id == IP_EVENT_ETH_GOT_IP) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void register_ethernet(void)
|
||||
{
|
||||
ESP_ERROR_CHECK(esp_netif_init());
|
||||
ESP_ERROR_CHECK(esp_event_loop_create_default());
|
||||
esp_netif_config_t cfg = ESP_NETIF_DEFAULT_ETH();
|
||||
eth_netif = esp_netif_new(&cfg);
|
||||
|
||||
eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
|
||||
eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
|
||||
esp_eth_mac_t *mac = esp_eth_mac_new_openeth(&mac_config);
|
||||
|
||||
esp_eth_phy_t *phy = esp_eth_phy_new_dp83848(&phy_config);
|
||||
|
||||
esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
|
||||
ESP_ERROR_CHECK(esp_eth_driver_install(&config, ð_handle));
|
||||
ESP_ERROR_CHECK(esp_netif_attach(eth_netif, esp_eth_new_netif_glue(eth_handle)));
|
||||
ESP_ERROR_CHECK(esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL));
|
||||
ESP_ERROR_CHECK(
|
||||
esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &event_handler, NULL));
|
||||
ESP_ERROR_CHECK(esp_eth_start(eth_handle));
|
||||
}
|
||||
|
||||
// Does all the esp32-specific init before running generic tox code.
|
||||
extern "C" void app_main(void)
|
||||
{
|
||||
register_ethernet();
|
||||
|
||||
esp_sntp_config_t config = ESP_NETIF_SNTP_DEFAULT_CONFIG("pool.ntp.org");
|
||||
ESP_ERROR_CHECK(esp_netif_sntp_init(&config));
|
||||
|
||||
if (esp_netif_sntp_sync_wait(pdMS_TO_TICKS(NTP_TIMEOUT * 1000)) != ESP_OK) {
|
||||
ESP_LOGE(MAIN_TAG, "failed to update system time within %ds timeout", NTP_TIMEOUT);
|
||||
return;
|
||||
}
|
||||
|
||||
ESP_LOGI(MAIN_TAG, "time is updated: %lld", time(nullptr));
|
||||
|
||||
tox_main();
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user