Compare commits
2 Commits
d5dede5
...
fd4c16d090
Author | SHA1 | Date | |
---|---|---|---|
fd4c16d090 | |||
47ad96e2b6 |
@ -62,7 +62,7 @@ jobs:
|
|||||||
- run: &apt_install
|
- run: &apt_install
|
||||||
apt-get update &&
|
apt-get update &&
|
||||||
DEBIAN_FRONTEND=noninteractive
|
DEBIAN_FRONTEND=noninteractive
|
||||||
apt-get install -y --no-install-recommends
|
apt-get install -y
|
||||||
ca-certificates
|
ca-certificates
|
||||||
clang
|
clang
|
||||||
cmake
|
cmake
|
||||||
@ -141,9 +141,7 @@ jobs:
|
|||||||
- run: *apt_install
|
- run: *apt_install
|
||||||
- run:
|
- run:
|
||||||
apt-get install -y --no-install-recommends
|
apt-get install -y --no-install-recommends
|
||||||
ca-certificates
|
cpplint
|
||||||
python3-pip
|
|
||||||
- checkout
|
- checkout
|
||||||
- run: git submodule update --init --recursive
|
- run: git submodule update --init --recursive
|
||||||
- run: pip install cpplint
|
|
||||||
- run: other/analysis/run-cpplint
|
- run: other/analysis/run-cpplint
|
@ -7,13 +7,14 @@ bazel-opt_task:
|
|||||||
configure_script:
|
configure_script:
|
||||||
- git submodule update --init --recursive
|
- git submodule update --init --recursive
|
||||||
- /src/workspace/tools/inject-repo c-toxcore
|
- /src/workspace/tools/inject-repo c-toxcore
|
||||||
|
- sed -i -e 's/build --config=remote/#&/' /src/workspace/.bazelrc.local
|
||||||
test_all_script:
|
test_all_script:
|
||||||
- cd /src/workspace && bazel test -k
|
- cd /src/workspace && bazel test -k
|
||||||
--build_tag_filters=-haskell
|
--build_tag_filters=-haskell
|
||||||
--test_tag_filters=-haskell
|
--test_tag_filters=-haskell
|
||||||
--
|
--
|
||||||
//c-toxcore/...
|
//c-toxcore/...
|
||||||
-//c-toxcore/auto_tests:tcp_relay_test # TODO(robinlinden): Why does this pass locally but not in Cirrus?
|
-//c-toxcore/auto_tests:tcp_relay_test # Cirrus doesn't allow external network connections.
|
||||||
|
|
||||||
bazel-dbg_task:
|
bazel-dbg_task:
|
||||||
container:
|
container:
|
||||||
@ -30,7 +31,7 @@ bazel-dbg_task:
|
|||||||
--remote_http_cache=http://$CIRRUS_HTTP_CACHE_HOST
|
--remote_http_cache=http://$CIRRUS_HTTP_CACHE_HOST
|
||||||
--
|
--
|
||||||
//c-toxcore/...
|
//c-toxcore/...
|
||||||
-//c-toxcore/auto_tests:tcp_relay_test # TODO(robinlinden): Why does this pass locally but not in Cirrus?
|
-//c-toxcore/auto_tests:tcp_relay_test # Cirrus doesn't allow external network connections.
|
||||||
|
|
||||||
cimple_task:
|
cimple_task:
|
||||||
container:
|
container:
|
||||||
@ -40,6 +41,7 @@ cimple_task:
|
|||||||
configure_script:
|
configure_script:
|
||||||
- git submodule update --init --recursive
|
- git submodule update --init --recursive
|
||||||
- /src/workspace/tools/inject-repo c-toxcore
|
- /src/workspace/tools/inject-repo c-toxcore
|
||||||
|
- sed -i -e 's/build --config=remote/#&/' /src/workspace/.bazelrc.local
|
||||||
test_all_script:
|
test_all_script:
|
||||||
- cd /src/workspace && bazel test -k
|
- cd /src/workspace && bazel test -k
|
||||||
--build_tag_filters=haskell
|
--build_tag_filters=haskell
|
||||||
@ -69,7 +71,7 @@ freebsd_task:
|
|||||||
cmake . \
|
cmake . \
|
||||||
-DMIN_LOGGER_LEVEL=TRACE \
|
-DMIN_LOGGER_LEVEL=TRACE \
|
||||||
-DMUST_BUILD_TOXAV=ON \
|
-DMUST_BUILD_TOXAV=ON \
|
||||||
-DNON_HERMETIC_TESTS=ON \
|
-DNON_HERMETIC_TESTS=OFF \
|
||||||
-DTEST_TIMEOUT_SECONDS=50 \
|
-DTEST_TIMEOUT_SECONDS=50 \
|
||||||
-DUSE_IPV6=OFF \
|
-DUSE_IPV6=OFF \
|
||||||
-DAUTOTEST=ON
|
-DAUTOTEST=ON
|
1
.github/FUNDING.yml
vendored
1
.github/FUNDING.yml
vendored
@ -1 +0,0 @@
|
|||||||
github: Green-Sky
|
|
@ -10,7 +10,7 @@ ABI=${1:-"armeabi-v7a"}
|
|||||||
case $ABI in
|
case $ABI in
|
||||||
armeabi-v7a)
|
armeabi-v7a)
|
||||||
TARGET=armv7a-linux-androideabi
|
TARGET=armv7a-linux-androideabi
|
||||||
NDK_API=19
|
NDK_API=21
|
||||||
;;
|
;;
|
||||||
arm64-v8a)
|
arm64-v8a)
|
||||||
TARGET=aarch64-linux-android
|
TARGET=aarch64-linux-android
|
||||||
@ -18,7 +18,7 @@ case $ABI in
|
|||||||
;;
|
;;
|
||||||
x86)
|
x86)
|
||||||
TARGET=i686-linux-android
|
TARGET=i686-linux-android
|
||||||
NDK_API=19
|
NDK_API=21
|
||||||
;;
|
;;
|
||||||
x86_64)
|
x86_64)
|
||||||
TARGET=x86_64-linux-android
|
TARGET=x86_64-linux-android
|
@ -39,12 +39,17 @@ add_flag -Wno-reserved-id-macro
|
|||||||
# TODO(iphydf): Clean these up. They are likely not bugs, but still
|
# TODO(iphydf): Clean these up. They are likely not bugs, but still
|
||||||
# potential issues and probably confusing.
|
# potential issues and probably confusing.
|
||||||
add_flag -Wno-sign-compare
|
add_flag -Wno-sign-compare
|
||||||
|
# We don't want to have default cases, we want to explicitly define all cases
|
||||||
|
add_flag -Wno-switch-default
|
||||||
# __attribute__((nonnull)) causes this warning on defensive null checks.
|
# __attribute__((nonnull)) causes this warning on defensive null checks.
|
||||||
add_flag -Wno-tautological-pointer-compare
|
add_flag -Wno-tautological-pointer-compare
|
||||||
# Our use of mutexes results in a false positive, see 1bbe446.
|
# Our use of mutexes results in a false positive, see 1bbe446.
|
||||||
add_flag -Wno-thread-safety-analysis
|
add_flag -Wno-thread-safety-analysis
|
||||||
# File transfer code has this.
|
# File transfer code has this.
|
||||||
add_flag -Wno-type-limits
|
add_flag -Wno-type-limits
|
||||||
|
# Generates false positives in toxcore similar to
|
||||||
|
# https://github.com/llvm/llvm-project/issues/64646
|
||||||
|
add_flag -Wno-unsafe-buffer-usage
|
||||||
# Callbacks often don't use all their parameters.
|
# Callbacks often don't use all their parameters.
|
||||||
add_flag -Wno-unused-parameter
|
add_flag -Wno-unused-parameter
|
||||||
# cimple does this better
|
# cimple does this better
|
219
.github/workflows/cd.yml
vendored
219
.github/workflows/cd.yml
vendored
@ -1,219 +0,0 @@
|
|||||||
name: ContinuousDelivery
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ master ]
|
|
||||||
|
|
||||||
env:
|
|
||||||
BUILD_TYPE: Release
|
|
||||||
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
|
|
||||||
|
|
||||||
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: Determine tag name
|
|
||||||
id: tag
|
|
||||||
shell: bash
|
|
||||||
# taken from llama.cpp
|
|
||||||
run: |
|
|
||||||
SHORT_HASH="$(git rev-parse --short=7 HEAD)"
|
|
||||||
if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then
|
|
||||||
echo "name=${SHORT_HASH}" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-')
|
|
||||||
echo "name=${SAFE_NAME}-${SHORT_HASH}" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Compress artifacts
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
tar -czvf ${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-ubuntu20.04-x86_64.tar.gz -C ${{github.workspace}}/build/bin/ .
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
# TODO: simpler name?
|
|
||||||
name: ${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-ubuntu20.04-x86_64
|
|
||||||
# TODO: do propper packing
|
|
||||||
path: |
|
|
||||||
${{github.workspace}}/${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-ubuntu20.04-x86_64.tar.gz
|
|
||||||
|
|
||||||
|
|
||||||
windows:
|
|
||||||
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
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}
|
|
||||||
|
|
||||||
- name: Determine tag name
|
|
||||||
id: tag
|
|
||||||
shell: bash
|
|
||||||
# taken from llama.cpp
|
|
||||||
run: |
|
|
||||||
SHORT_HASH="$(git rev-parse --short=7 HEAD)"
|
|
||||||
if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then
|
|
||||||
echo "name=${SHORT_HASH}" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-')
|
|
||||||
echo "name=${SAFE_NAME}-${SHORT_HASH}" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Compress artifacts
|
|
||||||
shell: powershell
|
|
||||||
run: |
|
|
||||||
Compress-Archive -Path ${{github.workspace}}/build/bin/* -Destination ${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-msvc-x86_64.zip
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
# TODO: simpler name?
|
|
||||||
name: ${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-msvc-x86_64
|
|
||||||
# TODO: do propper packing
|
|
||||||
path: |
|
|
||||||
${{github.workspace}}/${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-msvc-x86_64.zip
|
|
||||||
|
|
||||||
|
|
||||||
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: Determine tag name
|
|
||||||
id: tag
|
|
||||||
shell: bash
|
|
||||||
# taken from llama.cpp
|
|
||||||
run: |
|
|
||||||
SHORT_HASH="$(git rev-parse --short=7 HEAD)"
|
|
||||||
if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then
|
|
||||||
echo "name=${SHORT_HASH}" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-')
|
|
||||||
echo "name=${SAFE_NAME}-${SHORT_HASH}" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Compress artifacts
|
|
||||||
shell: powershell
|
|
||||||
run: |
|
|
||||||
Compress-Archive -Path ${{github.workspace}}/build/bin/* -Destination ${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-msvc-asan-x86_64.zip
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
# TODO: simpler name?
|
|
||||||
name: ${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-msvc-asan-x86_64
|
|
||||||
# TODO: do propper packing
|
|
||||||
path: |
|
|
||||||
${{github.workspace}}/${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-msvc-asan-x86_64.zip
|
|
||||||
|
|
||||||
release:
|
|
||||||
if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) }}
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
needs:
|
|
||||||
- linux-ubuntu
|
|
||||||
- windows
|
|
||||||
- windows-asan
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: Determine tag name
|
|
||||||
id: tag
|
|
||||||
shell: bash
|
|
||||||
# taken from llama.cpp
|
|
||||||
run: |
|
|
||||||
SHORT_HASH="$(git rev-parse --short=7 HEAD)"
|
|
||||||
if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then
|
|
||||||
echo "name=${SHORT_HASH}" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-')
|
|
||||||
echo "name=${SAFE_NAME}-${SHORT_HASH}" >> $GITHUB_OUTPUT
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Download artifacts
|
|
||||||
id: download-artifact
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
path: ./artifacts/
|
|
||||||
|
|
||||||
- name: Create release
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
tag: ${{ steps.tag.outputs.name }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
gh release create "$tag" \
|
|
||||||
--repo="$GITHUB_REPOSITORY" \
|
|
||||||
--title="nightly ${tag#v}" \
|
|
||||||
--notes="nightly build" \
|
|
||||||
--prerelease
|
|
||||||
|
|
||||||
- name: Upload artifacts
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
tag: ${{ steps.tag.outputs.name }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
ls -laR ./artifacts
|
|
||||||
gh release upload "$tag" ./artifacts/*/* \
|
|
||||||
--repo="$GITHUB_REPOSITORY"
|
|
||||||
|
|
228
.github/workflows/ci.yml
vendored
228
.github/workflows/ci.yml
vendored
@ -1,74 +1,200 @@
|
|||||||
name: ContinuousIntegration
|
name: ci
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [master]
|
||||||
|
|
||||||
env:
|
# Cancel old PR builds when pushing new commits.
|
||||||
BUILD_TYPE: Debug
|
concurrency:
|
||||||
|
group: build-${{ github.event.pull_request.number || github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
linux:
|
common:
|
||||||
timeout-minutes: 10
|
uses: TokTok/ci-tools/.github/workflows/common-ci.yml@master
|
||||||
|
|
||||||
|
analysis:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
tool: [autotools, clang-tidy, compcert, cppcheck, doxygen, goblint, infer, freebsd, misra, modules, pkgsrc, rpm, slimcc, sparse, tcc, tokstyle]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Set up Docker Buildx
|
||||||
with:
|
uses: docker/setup-buildx-action@v3
|
||||||
submodules: recursive
|
with:
|
||||||
|
driver: docker
|
||||||
|
- name: Build toxchat/c-toxcore:sources
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
file: other/docker/sources/sources.Dockerfile
|
||||||
|
tags: toxchat/c-toxcore:sources
|
||||||
|
- name: Docker Build
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
file: other/docker/${{ matrix.tool }}/${{ matrix.tool }}.Dockerfile
|
||||||
|
|
||||||
- name: Install Dependencies
|
coverage-linux:
|
||||||
run: sudo apt update && sudo apt -y install libsodium-dev
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Build, test, and upload coverage
|
||||||
|
run: other/docker/coverage/run
|
||||||
|
|
||||||
- name: Configure CMake
|
generate-events:
|
||||||
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
|
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
|
||||||
|
|
||||||
- name: Build
|
cimplefmt:
|
||||||
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j 4
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Run cimplefmt
|
||||||
|
run: other/docker/cimplefmt/run -u $(find tox* -name "*.[ch]")
|
||||||
|
|
||||||
macos:
|
build-android:
|
||||||
timeout-minutes: 10
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- run: .github/scripts/cmake-android armeabi-v7a
|
||||||
|
- run: .github/scripts/cmake-android arm64-v8a
|
||||||
|
- run: .github/scripts/cmake-android x86
|
||||||
|
- run: .github/scripts/cmake-android x86_64
|
||||||
|
|
||||||
|
build-macos:
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
- name: Build and test
|
||||||
- name: Install Dependencies
|
run: .github/scripts/cmake-osx
|
||||||
run: brew install libsodium
|
|
||||||
|
|
||||||
- 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
|
|
||||||
|
|
||||||
windows:
|
|
||||||
timeout-minutes: 10
|
|
||||||
|
|
||||||
runs-on: windows-latest
|
|
||||||
|
|
||||||
|
build-windows-msvc:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
version: [2019, 2022]
|
||||||
|
runs-on: windows-${{ matrix.version }}
|
||||||
|
env:
|
||||||
|
VCPKG_ROOT: "C:/vcpkg"
|
||||||
|
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
- name: Export GitHub Actions cache environment variables
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
||||||
|
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
||||||
|
- name: Configure CMake
|
||||||
|
run: cmake --preset windows-default
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build _build -j $([int]$env:NUMBER_OF_PROCESSORS+2)
|
||||||
|
- name: Test
|
||||||
|
run: |
|
||||||
|
cd _build
|
||||||
|
ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6 --build-config Debug
|
||||||
|
|
||||||
- name: Install Dependencies
|
build-netbsd:
|
||||||
run: vcpkg install libsodium:x64-windows-static pthreads:x64-windows-static
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Test in NetBSD
|
||||||
|
id: test
|
||||||
|
uses: vmactions/netbsd-vm@v1
|
||||||
|
with:
|
||||||
|
usesh: true
|
||||||
|
copyback: false
|
||||||
|
prepare:
|
||||||
|
/usr/sbin/pkg_add
|
||||||
|
cmake
|
||||||
|
googletest
|
||||||
|
libconfig
|
||||||
|
libopus
|
||||||
|
libsodium
|
||||||
|
libvpx
|
||||||
|
pkg-config
|
||||||
|
|
||||||
# setup vs env
|
run: |
|
||||||
- uses: ilammy/msvc-dev-cmd@v1
|
# TODO(iphydf): Investigate NetBSD failures on these tests.
|
||||||
with:
|
sed -Ei -e '/\((TCP|dht_getnodes_api)\)/s/^/#/' auto_tests/CMakeLists.txt
|
||||||
arch: amd64
|
cmake . \
|
||||||
|
-DMIN_LOGGER_LEVEL=TRACE \
|
||||||
|
-DMUST_BUILD_TOXAV=ON \
|
||||||
|
-DNON_HERMETIC_TESTS=ON \
|
||||||
|
-DTEST_TIMEOUT_SECONDS=90 \
|
||||||
|
-DUSE_IPV6=OFF \
|
||||||
|
-DAUTOTEST=ON
|
||||||
|
cmake --build . --target install
|
||||||
|
ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6
|
||||||
|
|
||||||
- name: Configure CMake
|
build-freebsd:
|
||||||
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
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Test in FreeBSD
|
||||||
|
id: test
|
||||||
|
uses: vmactions/freebsd-vm@v1
|
||||||
|
with:
|
||||||
|
usesh: true
|
||||||
|
copyback: false
|
||||||
|
prepare:
|
||||||
|
PAGER=cat ASSUME_ALWAYS_YES=YES pkg install
|
||||||
|
cmake
|
||||||
|
git
|
||||||
|
gmake
|
||||||
|
googletest
|
||||||
|
libconfig
|
||||||
|
libsodium
|
||||||
|
libvpx
|
||||||
|
opus
|
||||||
|
pkgconf
|
||||||
|
|
||||||
- name: Build
|
run: |
|
||||||
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j 4
|
# TODO(iphydf): Investigate FreeBSD failures on these tests.
|
||||||
|
sed -Ei -e '/\(dht_getnodes_api\)/s/^/#/' auto_tests/CMakeLists.txt
|
||||||
|
cmake . \
|
||||||
|
-DMIN_LOGGER_LEVEL=TRACE \
|
||||||
|
-DMUST_BUILD_TOXAV=ON \
|
||||||
|
-DNON_HERMETIC_TESTS=ON \
|
||||||
|
-DTEST_TIMEOUT_SECONDS=50 \
|
||||||
|
-DUSE_IPV6=OFF \
|
||||||
|
-DAUTOTEST=ON
|
||||||
|
cmake --build . --target install
|
||||||
|
ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6
|
||||||
|
|
||||||
|
mypy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Set up Python 3.9
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: 3.9
|
||||||
|
- name: Install mypy
|
||||||
|
run: pip install mypy
|
||||||
|
- name: Run mypy
|
||||||
|
run: |
|
||||||
|
(find . -name "*.py" -and -not -name "conanfile.py"; grep -lR '^#!.*python') \
|
||||||
|
| xargs -n1 -P8 mypy --strict
|
||||||
|
119
.gitignore
vendored
119
.gitignore
vendored
@ -1,26 +1,101 @@
|
|||||||
.vs/
|
# OS files
|
||||||
*.o
|
|
||||||
*.swp
|
|
||||||
~*
|
|
||||||
*~
|
|
||||||
.idea/
|
|
||||||
cmake-build-debug/
|
|
||||||
cmake-build-debugandtest/
|
|
||||||
cmake-build-release/
|
|
||||||
*.stackdump
|
|
||||||
*.coredump
|
|
||||||
compile_commands.json
|
|
||||||
/build*
|
|
||||||
/result*
|
|
||||||
.clangd
|
|
||||||
.cache
|
|
||||||
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.AppleDouble
|
.DS_Store?
|
||||||
.LSOverride
|
._*
|
||||||
|
.mypy_cache
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trash*
|
||||||
|
Icon?
|
||||||
|
ethumbs.db
|
||||||
|
Thumbs.db
|
||||||
|
*.tmp
|
||||||
|
|
||||||
CMakeLists.txt.user*
|
# Make
|
||||||
|
/_build
|
||||||
|
/_install
|
||||||
|
/tox-0.0.0*
|
||||||
|
/.vs
|
||||||
|
/CppProperties.json
|
||||||
CMakeCache.txt
|
CMakeCache.txt
|
||||||
|
CMakeFiles
|
||||||
|
Makefile
|
||||||
|
!/other/rpm/Makefile
|
||||||
|
cmake_install.cmake
|
||||||
|
install_manifest.txt
|
||||||
|
tags
|
||||||
|
Makefile.in
|
||||||
|
CMakeLists.txt.user
|
||||||
|
DartConfiguration.tcl
|
||||||
|
CTestTestfile.cmake
|
||||||
|
*.pc
|
||||||
|
|
||||||
*.tox
|
# Testing
|
||||||
imgui.ini
|
/amalgamation.*
|
||||||
|
testing/data
|
||||||
|
*~
|
||||||
|
|
||||||
|
# Vim
|
||||||
|
*.swp
|
||||||
|
|
||||||
|
# Object files
|
||||||
|
*.o
|
||||||
|
*.lo
|
||||||
|
*.a
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
||||||
|
*.la
|
||||||
|
|
||||||
|
# Libraries
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Misc (?)
|
||||||
|
m4/*
|
||||||
|
configure
|
||||||
|
configure_aux
|
||||||
|
!m4/pkg.m4
|
||||||
|
aclocal.m4
|
||||||
|
config.h*
|
||||||
|
config.log
|
||||||
|
config.status
|
||||||
|
stamp-h1
|
||||||
|
autom4te.cache
|
||||||
|
libtool
|
||||||
|
.deps
|
||||||
|
.libs
|
||||||
|
.dirstamp
|
||||||
|
build/
|
||||||
|
*.nvim*
|
||||||
|
*.vim*
|
||||||
|
|
||||||
|
# kdevelop
|
||||||
|
.kdev/
|
||||||
|
*.kdev*
|
||||||
|
|
||||||
|
# VScode
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
# Netbeans
|
||||||
|
nbproject
|
||||||
|
|
||||||
|
# astyle
|
||||||
|
*.orig
|
||||||
|
|
||||||
|
# Android buildscript
|
||||||
|
android-toolchain-*
|
||||||
|
toxcore-android-*
|
||||||
|
|
||||||
|
# cscope files list
|
||||||
|
cscope.files
|
||||||
|
|
||||||
|
# rpm
|
||||||
|
tox.spec
|
||||||
|
|
||||||
|
# clangd
|
||||||
|
.cache/
|
||||||
|
compile_commands.json
|
||||||
|
|
||||||
|
/infer
|
||||||
|
.idea/
|
||||||
|
25
.gitmodules
vendored
25
.gitmodules
vendored
@ -1,22 +1,3 @@
|
|||||||
[submodule "external/toxcore/c-toxcore/third_party/cmp"]
|
[submodule "third_party/cmp"]
|
||||||
path = external/toxcore/c-toxcore/third_party/cmp
|
path = third_party/cmp
|
||||||
url = https://github.com/camgunz/cmp.git
|
url = https://github.com/camgunz/cmp
|
||||||
shallow = true
|
|
||||||
[submodule "external/solanaceae_toxcore"]
|
|
||||||
path = external/solanaceae_toxcore
|
|
||||||
url = https://github.com/Green-Sky/solanaceae_toxcore.git
|
|
||||||
[submodule "external/solanaceae_util"]
|
|
||||||
path = external/solanaceae_util
|
|
||||||
url = https://github.com/Green-Sky/solanaceae_util.git
|
|
||||||
[submodule "external/solanaceae_contact"]
|
|
||||||
path = external/solanaceae_contact
|
|
||||||
url = https://github.com/Green-Sky/solanaceae_contact.git
|
|
||||||
[submodule "external/solanaceae_message3"]
|
|
||||||
path = external/solanaceae_message3
|
|
||||||
url = https://github.com/Green-Sky/solanaceae_message3.git
|
|
||||||
[submodule "external/solanaceae_tox"]
|
|
||||||
path = external/solanaceae_tox
|
|
||||||
url = https://github.com/Green-Sky/solanaceae_tox.git
|
|
||||||
[submodule "external/solanaceae_plugin"]
|
|
||||||
path = external/solanaceae_plugin
|
|
||||||
url = https://github.com/Green-Sky/solanaceae_plugin.git
|
|
||||||
|
@ -1,9 +1,274 @@
|
|||||||
|
|
||||||
|
|
||||||
|
## v0.2.19
|
||||||
|
|
||||||
|
### Merged PRs:
|
||||||
|
|
||||||
|
- [#2744](https://github.com/TokTok/c-toxcore/pull/2744) docs: Document that group topic lock is default on.
|
||||||
|
- [#2743](https://github.com/TokTok/c-toxcore/pull/2743) docs: Add missing param docs for callbacks.
|
||||||
|
- [#2742](https://github.com/TokTok/c-toxcore/pull/2742) chore: Add cmake flag to disable unit tests.
|
||||||
|
- [#2741](https://github.com/TokTok/c-toxcore/pull/2741) refactor: Don't expose Tox_System in the public API
|
||||||
|
- [#2736](https://github.com/TokTok/c-toxcore/pull/2736) cleanup: A more descriptive error for group invite accept function
|
||||||
|
- [#2735](https://github.com/TokTok/c-toxcore/pull/2735) chore: Small API doc fixes
|
||||||
|
- [#2732](https://github.com/TokTok/c-toxcore/pull/2732) cleanup: event length naming inconsistencies
|
||||||
|
- [#2731](https://github.com/TokTok/c-toxcore/pull/2731) cleanup: align group send err enum order
|
||||||
|
- [#2729](https://github.com/TokTok/c-toxcore/pull/2729) cleanup: use typedef for private message ID's in callback
|
||||||
|
- [#2728](https://github.com/TokTok/c-toxcore/pull/2728) refactor: Observers/ignored peers can now send and receive custom packets
|
||||||
|
- [#2727](https://github.com/TokTok/c-toxcore/pull/2727) feat: add message IDs to private group messages
|
||||||
|
- [#2726](https://github.com/TokTok/c-toxcore/pull/2726) refactor: Rename `out` parameters to `out_$something`.
|
||||||
|
- [#2718](https://github.com/TokTok/c-toxcore/pull/2718) chore: Use a specific non-broken slimcc version.
|
||||||
|
- [#2713](https://github.com/TokTok/c-toxcore/pull/2713) feat: Update and improve the Windows cross-compilation
|
||||||
|
- [#2712](https://github.com/TokTok/c-toxcore/pull/2712) chore: Update github actions.
|
||||||
|
- [#2710](https://github.com/TokTok/c-toxcore/pull/2710) docs: Update the list of CMake options
|
||||||
|
- [#2709](https://github.com/TokTok/c-toxcore/pull/2709) refactor: Remove "mod" and "founder" from group API naming scheme
|
||||||
|
- [#2708](https://github.com/TokTok/c-toxcore/pull/2708) docs: add the experimental api build option to INSTALL.md
|
||||||
|
- [#2705](https://github.com/TokTok/c-toxcore/pull/2705) refactor: Rename Queries to Query to align with other enums.
|
||||||
|
- [#2704](https://github.com/TokTok/c-toxcore/pull/2704) fix: Correct type for conference offline peer numbers.
|
||||||
|
- [#2700](https://github.com/TokTok/c-toxcore/pull/2700) test: Add FreeBSD VM action on GitHub.
|
||||||
|
- [#2699](https://github.com/TokTok/c-toxcore/pull/2699) test: Add pkgsrc build.
|
||||||
|
- [#2698](https://github.com/TokTok/c-toxcore/pull/2698) chore: Only install tox_private.h on request.
|
||||||
|
- [#2697](https://github.com/TokTok/c-toxcore/pull/2697) test: Build toxcore on NetBSD (VM).
|
||||||
|
- [#2696](https://github.com/TokTok/c-toxcore/pull/2696) fix: save_compatibility_test failing on big-endian systems
|
||||||
|
- [#2695](https://github.com/TokTok/c-toxcore/pull/2695) fix: Don't serve files from websockify.
|
||||||
|
- [#2689](https://github.com/TokTok/c-toxcore/pull/2689) fix: Correctly pass extended public keys to group moderation code.
|
||||||
|
- [#2686](https://github.com/TokTok/c-toxcore/pull/2686) chore: Compile libsodium reference implementation with compcert.
|
||||||
|
- [#2685](https://github.com/TokTok/c-toxcore/pull/2685) cleanup: correct a few nullable annotations
|
||||||
|
- [#2684](https://github.com/TokTok/c-toxcore/pull/2684) cleanup: Don't use `memcpy` to cast arbitrary `struct`s to `uint8_t[]`.
|
||||||
|
- [#2683](https://github.com/TokTok/c-toxcore/pull/2683) fix: Pass array, not array pointer, to `memcmp`.
|
||||||
|
- [#2682](https://github.com/TokTok/c-toxcore/pull/2682) cleanup: Never pass `void*` directly to `memcpy`.
|
||||||
|
- [#2678](https://github.com/TokTok/c-toxcore/pull/2678) chore: Disable NGC saving by default, enable through Tox_Options.
|
||||||
|
- [#2675](https://github.com/TokTok/c-toxcore/pull/2675) cleanup: Replace pointer arithmetic with explicit `&arr[i]`.
|
||||||
|
- [#2672](https://github.com/TokTok/c-toxcore/pull/2672) refactor: Use `structs` for extended public/secret keys.
|
||||||
|
- [#2671](https://github.com/TokTok/c-toxcore/pull/2671) refactor: Use tox rng to seed the keypair generation.
|
||||||
|
- [#2666](https://github.com/TokTok/c-toxcore/pull/2666) cleanup: Small improvements found by PVS Studio.
|
||||||
|
- [#2664](https://github.com/TokTok/c-toxcore/pull/2664) docs: Run prettier-markdown on markdown files.
|
||||||
|
- [#2662](https://github.com/TokTok/c-toxcore/pull/2662) fix: Correct a few potential null derefs in bootstrap daemon.
|
||||||
|
- [#2661](https://github.com/TokTok/c-toxcore/pull/2661) fix: Zero out stack-allocated secret key before return.
|
||||||
|
- [#2660](https://github.com/TokTok/c-toxcore/pull/2660) fix: Add missing memunlock of local variable when it goes out of scope.
|
||||||
|
- [#2659](https://github.com/TokTok/c-toxcore/pull/2659) cleanup: Simplify custom packet length check in NGC.
|
||||||
|
- [#2658](https://github.com/TokTok/c-toxcore/pull/2658) refactor: Make prune_gc_sanctions_list more obviously correct.
|
||||||
|
- [#2657](https://github.com/TokTok/c-toxcore/pull/2657) fix: Fix some false positive from PVS Studio.
|
||||||
|
- [#2656](https://github.com/TokTok/c-toxcore/pull/2656) docs: Add static analysis tool list to README.
|
||||||
|
- [#2655](https://github.com/TokTok/c-toxcore/pull/2655) cleanup: Check that WINXP macro exists before comparing it.
|
||||||
|
- [#2652](https://github.com/TokTok/c-toxcore/pull/2652) refactor: Make tox mutex non-recursive.
|
||||||
|
- [#2648](https://github.com/TokTok/c-toxcore/pull/2648) docs: Add more documentation to crypto_core.
|
||||||
|
- [#2647](https://github.com/TokTok/c-toxcore/pull/2647) docs: Fix up doxyfile.
|
||||||
|
- [#2645](https://github.com/TokTok/c-toxcore/pull/2645) refactor: Remove `Tox *` from `tox_dispatch`.
|
||||||
|
- [#2644](https://github.com/TokTok/c-toxcore/pull/2644) refactor: Don't rely on tox_dispatch passing tox in tests.
|
||||||
|
- [#2643](https://github.com/TokTok/c-toxcore/pull/2643) refactor: Use strong typedef for NGC peer id.
|
||||||
|
- [#2642](https://github.com/TokTok/c-toxcore/pull/2642) chore: Use C++ mode for clang-tidy.
|
||||||
|
- [#2640](https://github.com/TokTok/c-toxcore/pull/2640) refactor: Use strong `typedef` instead of `struct` for `Socket`.
|
||||||
|
- [#2637](https://github.com/TokTok/c-toxcore/pull/2637) chore: Check that both gtest and gmock exist for tests.
|
||||||
|
- [#2634](https://github.com/TokTok/c-toxcore/pull/2634) chore: Add some comments to the astyle config.
|
||||||
|
- [#2629](https://github.com/TokTok/c-toxcore/pull/2629) chore: Reformat sources with astyle.
|
||||||
|
- [#2626](https://github.com/TokTok/c-toxcore/pull/2626) chore: Rename C++ headers to .hh suffixes.
|
||||||
|
- [#2624](https://github.com/TokTok/c-toxcore/pull/2624) test: Add slimcc compiler compatibility test.
|
||||||
|
- [#2622](https://github.com/TokTok/c-toxcore/pull/2622) cleanup: Add more `const` where possible.
|
||||||
|
- [#2621](https://github.com/TokTok/c-toxcore/pull/2621) cleanup: Remove implicit bool conversions.
|
||||||
|
- [#2620](https://github.com/TokTok/c-toxcore/pull/2620) chore: Only check the bootstrap daemon checksum on release.
|
||||||
|
- [#2617](https://github.com/TokTok/c-toxcore/pull/2617) cleanup: Further `#include` cleanups.
|
||||||
|
- [#2614](https://github.com/TokTok/c-toxcore/pull/2614) cleanup: Use Bazel modules to enforce proper `#include` hygiene.
|
||||||
|
- [#2612](https://github.com/TokTok/c-toxcore/pull/2612) refactor: Move pack/unpack `IP_Port` from DHT into network module.
|
||||||
|
- [#2611](https://github.com/TokTok/c-toxcore/pull/2611) chore: Really fix coverage docker image build.
|
||||||
|
- [#2610](https://github.com/TokTok/c-toxcore/pull/2610) chore: Fix post-submit coverage image.
|
||||||
|
- [#2609](https://github.com/TokTok/c-toxcore/pull/2609) fix: partially fix a bug that prevented group part messages from sending
|
||||||
|
- [#2605](https://github.com/TokTok/c-toxcore/pull/2605) fix: Don't use `memcmp` to compare `IP_Port`s.
|
||||||
|
- [#2604](https://github.com/TokTok/c-toxcore/pull/2604) chore: Fix rpm build; add a CI check for it.
|
||||||
|
- [#2603](https://github.com/TokTok/c-toxcore/pull/2603) chore: Speed up docker builds a bit by reducing layer count.
|
||||||
|
- [#2602](https://github.com/TokTok/c-toxcore/pull/2602) cleanup: Add `const` where possible in auto tests.
|
||||||
|
- [#2601](https://github.com/TokTok/c-toxcore/pull/2601) fix: a few off by one errors in group autotests
|
||||||
|
- [#2598](https://github.com/TokTok/c-toxcore/pull/2598) refactor: Rename `system_{memory,...}` to `os_{memory,...}`.
|
||||||
|
- [#2597](https://github.com/TokTok/c-toxcore/pull/2597) test: Add goblint static analyser.
|
||||||
|
- [#2594](https://github.com/TokTok/c-toxcore/pull/2594) cleanup: Use `memzero(x, s)` instead of `memset(x, 0, s)`.
|
||||||
|
- [#2593](https://github.com/TokTok/c-toxcore/pull/2593) cleanup: Use explicit 0 instead of `PACKET_ID_PADDING`.
|
||||||
|
- [#2592](https://github.com/TokTok/c-toxcore/pull/2592) cleanup: Remove all uses of `SIZEOF_VLA`.
|
||||||
|
- [#2591](https://github.com/TokTok/c-toxcore/pull/2591) cleanup: Expand the `Tox_Options` accessor macros.
|
||||||
|
- [#2590](https://github.com/TokTok/c-toxcore/pull/2590) test: Add a simple new/delete test for Tox.
|
||||||
|
- [#2588](https://github.com/TokTok/c-toxcore/pull/2588) cleanup: Remove plan9 support.
|
||||||
|
- [#2587](https://github.com/TokTok/c-toxcore/pull/2587) cleanup: Add comment after every `#endif`.
|
||||||
|
- [#2583](https://github.com/TokTok/c-toxcore/pull/2583) test: Fix comment I broke in the events test PR.
|
||||||
|
- [#2582](https://github.com/TokTok/c-toxcore/pull/2582) cleanup: Rename group to conference in groupav documentation.
|
||||||
|
- [#2581](https://github.com/TokTok/c-toxcore/pull/2581) cleanup: Ensure handler params are named after callback params.
|
||||||
|
- [#2580](https://github.com/TokTok/c-toxcore/pull/2580) cleanup: Minor cleanup of event unpack code.
|
||||||
|
- [#2578](https://github.com/TokTok/c-toxcore/pull/2578) refactor: Allow NULL pointers for byte arrays in events.
|
||||||
|
- [#2577](https://github.com/TokTok/c-toxcore/pull/2577) refactor: Add common msgpack array packer with callback.
|
||||||
|
- [#2576](https://github.com/TokTok/c-toxcore/pull/2576) cleanup: make some improvements to group moderation test
|
||||||
|
- [#2575](https://github.com/TokTok/c-toxcore/pull/2575) refactor: Pass `this` pointer as first param to s11n callbacks.
|
||||||
|
- [#2573](https://github.com/TokTok/c-toxcore/pull/2573) cleanup: skip a do_gc iteration before removing peers marked for deletion
|
||||||
|
- [#2572](https://github.com/TokTok/c-toxcore/pull/2572) cleanup: Remove `bin_pack_{new,free}`.
|
||||||
|
- [#2568](https://github.com/TokTok/c-toxcore/pull/2568) feat: Add dht_get_nodes_response event to the events system.
|
||||||
|
- [#2567](https://github.com/TokTok/c-toxcore/pull/2567) refactor: Use enum-specific pack functions for enum values.
|
||||||
|
- [#2566](https://github.com/TokTok/c-toxcore/pull/2566) cleanup: Remove empty test doing nothing.
|
||||||
|
- [#2565](https://github.com/TokTok/c-toxcore/pull/2565) refactor: Factor out union pack switch from event packer.
|
||||||
|
- [#2564](https://github.com/TokTok/c-toxcore/pull/2564) cleanup: Move the 2-element array pack out of individual events.
|
||||||
|
- [#2563](https://github.com/TokTok/c-toxcore/pull/2563) test: Add printf log statement to group_moderation_test.
|
||||||
|
- [#2562](https://github.com/TokTok/c-toxcore/pull/2562) chore: add clangd files to .gitignore
|
||||||
|
- [#2561](https://github.com/TokTok/c-toxcore/pull/2561) refactor: Move file streaming test to its own file.
|
||||||
|
- [#2560](https://github.com/TokTok/c-toxcore/pull/2560) fix(ci): window builds now build in parallel
|
||||||
|
- [#2559](https://github.com/TokTok/c-toxcore/pull/2559) refactor: Migrate auto_tests to new events API.
|
||||||
|
- [#2557](https://github.com/TokTok/c-toxcore/pull/2557) test: Add C++ classes wrapping system interfaces.
|
||||||
|
- [#2555](https://github.com/TokTok/c-toxcore/pull/2555) fix: Remove fatal error for non-erroneous case
|
||||||
|
- [#2554](https://github.com/TokTok/c-toxcore/pull/2554) fix: Make all the fuzzers work again, and add a test for protodump.
|
||||||
|
- [#2552](https://github.com/TokTok/c-toxcore/pull/2552) fix: Make sure there's enough space for CONSUME1 in fuzzers.
|
||||||
|
- [#2551](https://github.com/TokTok/c-toxcore/pull/2551) chore: Move from gcov to llvm source-based coverage.
|
||||||
|
- [#2549](https://github.com/TokTok/c-toxcore/pull/2549) fix: issues with packet broadcast error reporting
|
||||||
|
- [#2547](https://github.com/TokTok/c-toxcore/pull/2547) test: Add fuzz tests to the coverage run.
|
||||||
|
- [#2545](https://github.com/TokTok/c-toxcore/pull/2545) refactor: Use `operator==` for equality tests of `Node_format`.
|
||||||
|
- [#2543](https://github.com/TokTok/c-toxcore/pull/2543) refactor(test): Slightly nicer C++ interface to tox Random.
|
||||||
|
- [#2542](https://github.com/TokTok/c-toxcore/pull/2542) refactor: packet broadcast functions now return errors
|
||||||
|
- [#2541](https://github.com/TokTok/c-toxcore/pull/2541) fix: don't pass garbage data buffer to packet send functions
|
||||||
|
- [#2540](https://github.com/TokTok/c-toxcore/pull/2540) cleanup: Make group packet entry creation less error-prone
|
||||||
|
- [#2539](https://github.com/TokTok/c-toxcore/pull/2539) refactor: Minor refactoring of get_close_nodes functions.
|
||||||
|
- [#2538](https://github.com/TokTok/c-toxcore/pull/2538) refactor: Factor out malloc+memcpy into memdup.
|
||||||
|
- [#2536](https://github.com/TokTok/c-toxcore/pull/2536) cleanup: Some more test cleanups, removing overly smart code.
|
||||||
|
- [#2531](https://github.com/TokTok/c-toxcore/pull/2531) test: Add more unit tests for `add_to_list`.
|
||||||
|
- [#2530](https://github.com/TokTok/c-toxcore/pull/2530) refactor: Assign malloc return to a local variable first.
|
||||||
|
- [#2529](https://github.com/TokTok/c-toxcore/pull/2529) test: Add "infer" CI check to github, remove from circle.
|
||||||
|
- [#2527](https://github.com/TokTok/c-toxcore/pull/2527) cleanup: Add Toxav alias for ToxAV.
|
||||||
|
- [#2526](https://github.com/TokTok/c-toxcore/pull/2526) cleanup: Make Tox_Options a typedef.
|
||||||
|
- [#2525](https://github.com/TokTok/c-toxcore/pull/2525) cleanup: Add dynamically derived array sizes to the API.
|
||||||
|
- [#2524](https://github.com/TokTok/c-toxcore/pull/2524) cleanup: Add explicit array sizes to toxencryptsave.
|
||||||
|
- [#2523](https://github.com/TokTok/c-toxcore/pull/2523) cleanup: Move `tox_get_system` out of the public API.
|
||||||
|
- [#2522](https://github.com/TokTok/c-toxcore/pull/2522) cleanup: Make setters take non-const `Tox *`.
|
||||||
|
- [#2521](https://github.com/TokTok/c-toxcore/pull/2521) cleanup: Make array params in toxav `[]` instead of `*`.
|
||||||
|
- [#2520](https://github.com/TokTok/c-toxcore/pull/2520) cleanup: Mark arrays in the tox API as `[]` instead of `*`.
|
||||||
|
- [#2519](https://github.com/TokTok/c-toxcore/pull/2519) refactor: Align group message sending with other send functions.
|
||||||
|
- [#2518](https://github.com/TokTok/c-toxcore/pull/2518) cleanup: Add typedefs for public API int identifiers.
|
||||||
|
- [#2517](https://github.com/TokTok/c-toxcore/pull/2517) chore: Spellcheck tox-bootstrapd
|
||||||
|
- [#2516](https://github.com/TokTok/c-toxcore/pull/2516) chore: Remove settings.yml in favour of hs-github-tools.
|
||||||
|
- [#2515](https://github.com/TokTok/c-toxcore/pull/2515) chore: Use GPL license with https.
|
||||||
|
- [#2513](https://github.com/TokTok/c-toxcore/pull/2513) chore: Add fetch-sha256 script to update bootstrap node hash.
|
||||||
|
- [#2512](https://github.com/TokTok/c-toxcore/pull/2512) cleanup: Move all vptr-to-ptr casts to the beginning of a function.
|
||||||
|
- [#2510](https://github.com/TokTok/c-toxcore/pull/2510) cleanup: Use github actions matrix to simplify CI.
|
||||||
|
- [#2509](https://github.com/TokTok/c-toxcore/pull/2509) fix: Use QueryPerformanceCounter on windows for monotonic time.
|
||||||
|
- [#2508](https://github.com/TokTok/c-toxcore/pull/2508) chore: Add `net_(new|kill)_strerror` to cppcheck's allocators.
|
||||||
|
- [#2507](https://github.com/TokTok/c-toxcore/pull/2507) cleanup: Run clang-tidy on headers, as well.
|
||||||
|
- [#2506](https://github.com/TokTok/c-toxcore/pull/2506) cleanup: Make TCP connection failures a warning instead of error.
|
||||||
|
- [#2505](https://github.com/TokTok/c-toxcore/pull/2505) cleanup: Make all .c files include the headers they need.
|
||||||
|
- [#2504](https://github.com/TokTok/c-toxcore/pull/2504) cleanup: Upgrade cppcheck, fix some warnings.
|
||||||
|
- [#2503](https://github.com/TokTok/c-toxcore/pull/2503) cleanup: Upgrade to clang-tidy-17 and fix some warnings.
|
||||||
|
- [#2502](https://github.com/TokTok/c-toxcore/pull/2502) chore: Use `pkg_search_module` directly in cmake.
|
||||||
|
- [#2501](https://github.com/TokTok/c-toxcore/pull/2501) chore: Add `IMPORTED_TARGET` to pkg-config packages.
|
||||||
|
- [#2499](https://github.com/TokTok/c-toxcore/pull/2499) cleanup: Use target_link_libraries directly in cmake.
|
||||||
|
- [#2498](https://github.com/TokTok/c-toxcore/pull/2498) chore: Simplify msvc build using vcpkg.
|
||||||
|
- [#2497](https://github.com/TokTok/c-toxcore/pull/2497) cleanup: Remove NaCl support.
|
||||||
|
- [#2494](https://github.com/TokTok/c-toxcore/pull/2494) fix: unpack enum function names in event impl generator
|
||||||
|
- [#2493](https://github.com/TokTok/c-toxcore/pull/2493) chore: Disable targets for cross-compilation.
|
||||||
|
- [#2491](https://github.com/TokTok/c-toxcore/pull/2491) chore: Build a docker image with coverage info in it.
|
||||||
|
- [#2490](https://github.com/TokTok/c-toxcore/pull/2490) cleanup: Some portability/warning fixes for Windows builds.
|
||||||
|
- [#2488](https://github.com/TokTok/c-toxcore/pull/2488) fix: Correct a use-after-free and fix some memory leaks.
|
||||||
|
- [#2487](https://github.com/TokTok/c-toxcore/pull/2487) refactor: Change all enum-like `#define` sequences into enums.
|
||||||
|
- [#2486](https://github.com/TokTok/c-toxcore/pull/2486) refactor: Change the `TCP_PACKET_*` defines into an enum.
|
||||||
|
- [#2485](https://github.com/TokTok/c-toxcore/pull/2485) refactor: event generation tool for reorder pr
|
||||||
|
- [#2484](https://github.com/TokTok/c-toxcore/pull/2484) chore: Fix make_single_file to support core-only.
|
||||||
|
- [#2481](https://github.com/TokTok/c-toxcore/pull/2481) chore: Update github actions `uses`.
|
||||||
|
- [#2480](https://github.com/TokTok/c-toxcore/pull/2480) feat: add ngc related unpack functions
|
||||||
|
- [#2479](https://github.com/TokTok/c-toxcore/pull/2479) feat: Add `to_string` functions for all public enums.
|
||||||
|
- [#2477](https://github.com/TokTok/c-toxcore/pull/2477) test: add real timeout test
|
||||||
|
- [#2476](https://github.com/TokTok/c-toxcore/pull/2476) chore: Move s390x build to post-merge.
|
||||||
|
- [#2475](https://github.com/TokTok/c-toxcore/pull/2475) refactor: Give `enum-from-int` functions the ability to report errors.
|
||||||
|
- [#2474](https://github.com/TokTok/c-toxcore/pull/2474) cleanup: Remove test net support.
|
||||||
|
- [#2472](https://github.com/TokTok/c-toxcore/pull/2472) feat: Enable ubsan on bootstrap nodes.
|
||||||
|
- [#2470](https://github.com/TokTok/c-toxcore/pull/2470) test: Add check-c run to bazel build.
|
||||||
|
- [#2468](https://github.com/TokTok/c-toxcore/pull/2468) fix(test): tests use ipv6 by default, even with USE_IPV6 set to 0
|
||||||
|
- [#2466](https://github.com/TokTok/c-toxcore/pull/2466) cleanup: Make group saving/loading more forgiving with data errors
|
||||||
|
- [#2465](https://github.com/TokTok/c-toxcore/pull/2465) refactor: replace memset with a loop
|
||||||
|
- [#2459](https://github.com/TokTok/c-toxcore/pull/2459) fix: Enable debug flag for ubsan.
|
||||||
|
- [#2458](https://github.com/TokTok/c-toxcore/pull/2458) fix: also Install header for private/experimental API functions with autotools
|
||||||
|
- [#2456](https://github.com/TokTok/c-toxcore/pull/2456) docs: Remove defunct IRC channel from README.md
|
||||||
|
- [#2454](https://github.com/TokTok/c-toxcore/pull/2454) fix: memory leaks
|
||||||
|
- [#2453](https://github.com/TokTok/c-toxcore/pull/2453) refactor: Install header for private/experimental API functions
|
||||||
|
- [#2452](https://github.com/TokTok/c-toxcore/pull/2452) refactor: replace DEFAULT_TCP_RELAY_PORTS_COUNT with a compile-time calculation
|
||||||
|
- [#2451](https://github.com/TokTok/c-toxcore/pull/2451) cleanup: clarify disabling of static assert checks
|
||||||
|
- [#2449](https://github.com/TokTok/c-toxcore/pull/2449) cleanup: replace tabs with spaces
|
||||||
|
- [#2448](https://github.com/TokTok/c-toxcore/pull/2448) feat: group connection queries now return our own connection type
|
||||||
|
- [#2447](https://github.com/TokTok/c-toxcore/pull/2447) fix: Docker tox-bootstrapd hash update failing when using BuildKit
|
||||||
|
- [#2446](https://github.com/TokTok/c-toxcore/pull/2446) feat: Add groupchat API function that returns an IP address string for a peer
|
||||||
|
- [#2442](https://github.com/TokTok/c-toxcore/pull/2442) perf: Slightly reduce bandwidth usage when there are few nodes.
|
||||||
|
- [#2439](https://github.com/TokTok/c-toxcore/pull/2439) test: Make esp32 build actually try to instantiate tox.
|
||||||
|
- [#2438](https://github.com/TokTok/c-toxcore/pull/2438) cleanup: Remove explicit layering_check feature.
|
||||||
|
- [#2437](https://github.com/TokTok/c-toxcore/pull/2437) chore: Upgrade sonar-scan jvm to java 17.
|
||||||
|
- [#2436](https://github.com/TokTok/c-toxcore/pull/2436) fix: Add missing `htons` call when adding configured TCP relay.
|
||||||
|
- [#2434](https://github.com/TokTok/c-toxcore/pull/2434) chore: Cancel old PR builds on docker and sonar-scan workflows.
|
||||||
|
- [#2432](https://github.com/TokTok/c-toxcore/pull/2432) chore: Use C99 on MSVC instead of C11.
|
||||||
|
- [#2430](https://github.com/TokTok/c-toxcore/pull/2430) chore: Retry freebsd tests 2 times.
|
||||||
|
- [#2429](https://github.com/TokTok/c-toxcore/pull/2429) test: Add an s390x build (on alpine) for CI.
|
||||||
|
- [#2428](https://github.com/TokTok/c-toxcore/pull/2428) chore: Add a compcert docker run script.
|
||||||
|
- [#2427](https://github.com/TokTok/c-toxcore/pull/2427) cleanup: Use tcc docker image for CI.
|
||||||
|
- [#2424](https://github.com/TokTok/c-toxcore/pull/2424) fix: Fix memory leak in the error path of loading savedata.
|
||||||
|
- [#2420](https://github.com/TokTok/c-toxcore/pull/2420) refactor: Use Bin_Pack for packing Node_format.
|
||||||
|
- [#2416](https://github.com/TokTok/c-toxcore/pull/2416) chore: Add more logging to loading conferences from savedata.
|
||||||
|
- [#2415](https://github.com/TokTok/c-toxcore/pull/2415) refactor: Add a `bin_unpack_bin_max` for max-length arrays.
|
||||||
|
- [#2414](https://github.com/TokTok/c-toxcore/pull/2414) fix: inversed return values
|
||||||
|
- [#2413](https://github.com/TokTok/c-toxcore/pull/2413) cleanup: Fix GCC compatibility.
|
||||||
|
- [#2408](https://github.com/TokTok/c-toxcore/pull/2408) fix: Ensure we have allocators available for the error paths.
|
||||||
|
- [#2407](https://github.com/TokTok/c-toxcore/pull/2407) cleanup: Remove redundant `-DSODIUM_EXPORT` from definitions.
|
||||||
|
- [#2406](https://github.com/TokTok/c-toxcore/pull/2406) cleanup: Fix a few more clang-tidy warnings.
|
||||||
|
- [#2405](https://github.com/TokTok/c-toxcore/pull/2405) cleanup: Fix a few more clang-tidy warnings.
|
||||||
|
- [#2404](https://github.com/TokTok/c-toxcore/pull/2404) cleanup: Enforce stricter identifier naming using clang-tidy.
|
||||||
|
- [#2396](https://github.com/TokTok/c-toxcore/pull/2396) chore: Add devcontainer setup for codespaces.
|
||||||
|
- [#2393](https://github.com/TokTok/c-toxcore/pull/2393) refactor: Add `mem` module to allow tests to override allocators.
|
||||||
|
- [#2392](https://github.com/TokTok/c-toxcore/pull/2392) refactor: Make event dispatch ordered by receive time.
|
||||||
|
- [#2391](https://github.com/TokTok/c-toxcore/pull/2391) docs: Fix doxygen config and remove some redundant comments.
|
||||||
|
- [#2390](https://github.com/TokTok/c-toxcore/pull/2390) chore: Fix the Android CI job
|
||||||
|
- [#2389](https://github.com/TokTok/c-toxcore/pull/2389) fix: Add missing `#include <array>`.
|
||||||
|
- [#2388](https://github.com/TokTok/c-toxcore/pull/2388) chore: Add missing module dependencies.
|
||||||
|
- [#2384](https://github.com/TokTok/c-toxcore/pull/2384) feat: increase NGC lossy custom packet size
|
||||||
|
- [#2383](https://github.com/TokTok/c-toxcore/pull/2383) fix: add missing ngc constants getter declarations and definitions
|
||||||
|
- [#2381](https://github.com/TokTok/c-toxcore/pull/2381) fix: incorrect documentation
|
||||||
|
- [#2380](https://github.com/TokTok/c-toxcore/pull/2380) feat: allow for larger incoming NGC packets
|
||||||
|
- [#2371](https://github.com/TokTok/c-toxcore/pull/2371) docs: fix group_peer_exit_cb
|
||||||
|
- [#2370](https://github.com/TokTok/c-toxcore/pull/2370) fix: behaviour of group api function
|
||||||
|
- [#2369](https://github.com/TokTok/c-toxcore/pull/2369) fix: flaky tcp test
|
||||||
|
- [#2367](https://github.com/TokTok/c-toxcore/pull/2367) fix: fuzz support for TCP server
|
||||||
|
- [#2364](https://github.com/TokTok/c-toxcore/pull/2364) fix: potential endless loop under extremely high load
|
||||||
|
- [#2362](https://github.com/TokTok/c-toxcore/pull/2362) test: enable tcp relay for bootstrap fuzzing
|
||||||
|
- [#2361](https://github.com/TokTok/c-toxcore/pull/2361) fix: resolve_bootstrap_node() not checking net_getipport() returned count correctly
|
||||||
|
- [#2357](https://github.com/TokTok/c-toxcore/pull/2357) feat: get the number of close dht nodes with announce/store support
|
||||||
|
- [#2355](https://github.com/TokTok/c-toxcore/pull/2355) fix: group custom packet size limits
|
||||||
|
- [#2354](https://github.com/TokTok/c-toxcore/pull/2354) fix: DHTBootstrap should always respond to version packets with toxcore version
|
||||||
|
- [#2351](https://github.com/TokTok/c-toxcore/pull/2351) fix: Increase max group message length by four bytes
|
||||||
|
- [#2348](https://github.com/TokTok/c-toxcore/pull/2348) refactor: Make some improvements to how often/when we announce a group
|
||||||
|
- [#2341](https://github.com/TokTok/c-toxcore/pull/2341) fix: #1144 by forcing misc_tools to be a static lib
|
||||||
|
- [#2340](https://github.com/TokTok/c-toxcore/pull/2340) fix: missing net to host conversion of port in logging in group_chat.c
|
||||||
|
- [#2339](https://github.com/TokTok/c-toxcore/pull/2339) fix: missing net to host conversion of port in logging
|
||||||
|
- [#2338](https://github.com/TokTok/c-toxcore/pull/2338) fix: bug causing friend group invites to sometimes fail & improve logging
|
||||||
|
- [#2333](https://github.com/TokTok/c-toxcore/pull/2333) docs: Update README for bootstrap node docker
|
||||||
|
- [#2329](https://github.com/TokTok/c-toxcore/pull/2329) refactor: extract each case in handle packet in messenger
|
||||||
|
- [#2327](https://github.com/TokTok/c-toxcore/pull/2327) fix: unlock correct dht_friend
|
||||||
|
- [#2325](https://github.com/TokTok/c-toxcore/pull/2325) fix: Remove cmake cache files after copying to container build directory
|
||||||
|
- [#2323](https://github.com/TokTok/c-toxcore/pull/2323) docs: Update README.md to include cmp submodule info
|
||||||
|
- [#2318](https://github.com/TokTok/c-toxcore/pull/2318) chore: disable warning about pre C99 code
|
||||||
|
- [#2317](https://github.com/TokTok/c-toxcore/pull/2317) Refactor: Extract shared key cache into separate file
|
||||||
|
- [#2311](https://github.com/TokTok/c-toxcore/pull/2311) cleanup: make it more clear that assert and uint32_t increment both only exist if NDEBUG is not defined
|
||||||
|
- [#2291](https://github.com/TokTok/c-toxcore/pull/2291) test: Add a protocol dump test to generate initial fuzzer input.
|
||||||
|
- [#2271](https://github.com/TokTok/c-toxcore/pull/2271) chore: Migrate from Appveyor to Azure Pipelines
|
||||||
|
- [#2269](https://github.com/TokTok/c-toxcore/pull/2269) feat: Merge the remainder of the new groupchats implementation
|
||||||
|
- [#2203](https://github.com/TokTok/c-toxcore/pull/2203) refactor: Store time in Mono_Time in milliseconds.
|
||||||
|
- [#1944](https://github.com/TokTok/c-toxcore/pull/1944) chore: tox_new() should return null when savedata loading fails
|
||||||
|
|
||||||
|
### Closed issues:
|
||||||
|
|
||||||
|
- [#2739](https://github.com/TokTok/c-toxcore/issues/2739) Tox_Options.operating_system is not clear about it being an experimental option
|
||||||
|
- [#2734](https://github.com/TokTok/c-toxcore/issues/2734) error compiling on fedora
|
||||||
|
- [#2649](https://github.com/TokTok/c-toxcore/issues/2649) create_extended_keypair should use Random and be made deterministic for fuzzing
|
||||||
|
- [#2358](https://github.com/TokTok/c-toxcore/issues/2358) resolve_bootstrap_node assert hit
|
||||||
|
- [#2352](https://github.com/TokTok/c-toxcore/issues/2352) SEGV after infinite loop retrying proxy_socks5_read_connection_response
|
||||||
|
- [#2335](https://github.com/TokTok/c-toxcore/issues/2335) ipv6 disabled on kernel cmdline disrupts Tox = most tests fail
|
||||||
|
- [#2303](https://github.com/TokTok/c-toxcore/issues/2303) Add new group chats events to tox_events and tox_dispatch modules.
|
||||||
|
- [#2302](https://github.com/TokTok/c-toxcore/issues/2302) Run strong fuzz tests against NGC
|
||||||
|
- [#2301](https://github.com/TokTok/c-toxcore/issues/2301) Implement NGC save/load in hs-toxcore and run round-trip tests against c-toxcore
|
||||||
|
- [#2192](https://github.com/TokTok/c-toxcore/issues/2192) Provide official signed release tarballs
|
||||||
|
- [#2118](https://github.com/TokTok/c-toxcore/issues/2118) Add a private "get mono_time" API to `tox_private.h` and use it in auto_tests.
|
||||||
|
- [#2029](https://github.com/TokTok/c-toxcore/issues/2029) Migrate all auto tests to the events API.
|
||||||
|
- [#2014](https://github.com/TokTok/c-toxcore/issues/2014) Add sodium autotools CI build
|
||||||
|
- [#1144](https://github.com/TokTok/c-toxcore/issues/1144) DHT_bootstrap should not link against misc_tools
|
||||||
|
|
||||||
## v0.2.18
|
## v0.2.18
|
||||||
|
|
||||||
### Merged PRs:
|
### Merged PRs:
|
||||||
|
|
||||||
|
- [#2300](https://github.com/TokTok/c-toxcore/pull/2300) chore: Release 0.2.18
|
||||||
- [#2299](https://github.com/TokTok/c-toxcore/pull/2299) fix: remove the assert because buffer can be larger than UINT16_MAX.
|
- [#2299](https://github.com/TokTok/c-toxcore/pull/2299) fix: remove the assert because buffer can be larger than UINT16_MAX.
|
||||||
- [#2297](https://github.com/TokTok/c-toxcore/pull/2297) cleanup: remove unused field last_seen from Onion_Friend
|
- [#2297](https://github.com/TokTok/c-toxcore/pull/2297) cleanup: remove unused field last_seen from Onion_Friend
|
||||||
- [#2289](https://github.com/TokTok/c-toxcore/pull/2289) test: Add a Null_System used in toxsave_harness.
|
- [#2289](https://github.com/TokTok/c-toxcore/pull/2289) test: Add a Null_System used in toxsave_harness.
|
||||||
@ -107,6 +372,7 @@
|
|||||||
|
|
||||||
### Closed issues:
|
### Closed issues:
|
||||||
|
|
||||||
|
- [#2298](https://github.com/TokTok/c-toxcore/issues/2298) assert makes incorrect assumption
|
||||||
- [#2256](https://github.com/TokTok/c-toxcore/issues/2256) New Defects reported by Coverity Scan for TokTok/c-toxcore
|
- [#2256](https://github.com/TokTok/c-toxcore/issues/2256) New Defects reported by Coverity Scan for TokTok/c-toxcore
|
||||||
- [#2109](https://github.com/TokTok/c-toxcore/issues/2109) Assimilate `messenger_test.c`: replace with public API test
|
- [#2109](https://github.com/TokTok/c-toxcore/issues/2109) Assimilate `messenger_test.c`: replace with public API test
|
||||||
- [#2012](https://github.com/TokTok/c-toxcore/issues/2012) Support building a DLL on Windows
|
- [#2012](https://github.com/TokTok/c-toxcore/issues/2012) Support building a DLL on Windows
|
643
CMakeLists.txt
643
CMakeLists.txt
@ -1,67 +1,610 @@
|
|||||||
cmake_minimum_required(VERSION 3.14...3.24 FATAL_ERROR)
|
################################################################################
|
||||||
|
#
|
||||||
|
# The main toxcore CMake build file.
|
||||||
|
#
|
||||||
|
# This file when processed with cmake produces:
|
||||||
|
# - A number of small libraries (.a/.so/...) containing independent components
|
||||||
|
# of toxcore. E.g. the DHT has its own library, and the system/network
|
||||||
|
# abstractions are in their own library as well. These libraries are not
|
||||||
|
# installed on `make install`. The toxav, and toxencryptsave libraries are
|
||||||
|
# also not installed.
|
||||||
|
# - A number of small programs, statically linked if possible.
|
||||||
|
# - One big library containing all of the toxcore, toxav, and toxencryptsave
|
||||||
|
# code.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
# cmake setup begin
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(tomato)
|
cmake_policy(VERSION 3.16)
|
||||||
|
project(toxcore)
|
||||||
|
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
list(APPEND CMAKE_MODULE_PATH ${toxcore_SOURCE_DIR}/cmake)
|
||||||
|
|
||||||
# defaulting to debug mode, if not specified
|
option(FLAT_OUTPUT_STRUCTURE "Whether to produce output artifacts in ${CMAKE_BINARY_DIR}/{bin,lib}" OFF)
|
||||||
if (NOT CMAKE_BUILD_TYPE)
|
if(FLAT_OUTPUT_STRUCTURE)
|
||||||
set(CMAKE_BUILD_TYPE "Debug")
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||||
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# setup my vim ycm :D
|
set_source_files_properties(
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
toxcore/mono_time.c
|
||||||
|
toxcore/network.c
|
||||||
|
toxcore/tox.c
|
||||||
|
toxcore/util.c
|
||||||
|
PROPERTIES SKIP_UNITY_BUILD_INCLUSION TRUE)
|
||||||
|
|
||||||
# more paths
|
################################################################################
|
||||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
#
|
||||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
# :: Version management
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
option(TOMATO_ASAN "Build tomato with asan (gcc/clang/msvc)" OFF)
|
# This version is for the entire project. All libraries (core, av, ...) move in
|
||||||
|
# versions in a synchronised way.
|
||||||
|
set(PROJECT_VERSION_MAJOR "0")
|
||||||
|
set(PROJECT_VERSION_MINOR "2")
|
||||||
|
set(PROJECT_VERSION_PATCH "19")
|
||||||
|
set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
|
||||||
|
|
||||||
if (TOMATO_ASAN)
|
# set .so library version / following libtool scheme
|
||||||
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
|
# https://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info
|
||||||
if (NOT WIN32) # exclude mingw
|
file(STRINGS ${toxcore_SOURCE_DIR}/so.version SOVERSION_CURRENT REGEX "^CURRENT=[0-9]+$")
|
||||||
link_libraries(-fsanitize=address)
|
string(SUBSTRING "${SOVERSION_CURRENT}" 8 -1 SOVERSION_CURRENT)
|
||||||
#link_libraries(-fsanitize=address,undefined)
|
file(STRINGS ${toxcore_SOURCE_DIR}/so.version SOVERSION_REVISION REGEX "^REVISION=[0-9]+$")
|
||||||
#link_libraries(-fsanitize=undefined)
|
string(SUBSTRING "${SOVERSION_REVISION}" 9 -1 SOVERSION_REVISION)
|
||||||
message("II enabled ASAN")
|
file(STRINGS ${toxcore_SOURCE_DIR}/so.version SOVERSION_AGE REGEX "^AGE=[0-9]+$")
|
||||||
else()
|
string(SUBSTRING "${SOVERSION_AGE}" 4 -1 SOVERSION_AGE)
|
||||||
message("!! can not enable ASAN on this platform (gcc/clang + win)")
|
# account for some libtool magic, see other/version-sync script for details
|
||||||
endif()
|
math(EXPR SOVERSION_MAJOR ${SOVERSION_CURRENT}-${SOVERSION_AGE})
|
||||||
elseif (MSVC)
|
set(SOVERSION "${SOVERSION_MAJOR}.${SOVERSION_AGE}.${SOVERSION_REVISION}")
|
||||||
add_compile_options("/fsanitize=address")
|
message("SOVERSION: ${SOVERSION}")
|
||||||
message("II enabled ASAN")
|
|
||||||
else()
|
################################################################################
|
||||||
message("!! can not enable ASAN on this platform")
|
#
|
||||||
endif()
|
# :: Dependencies and configuration
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
include(CTest)
|
||||||
|
include(ModulePackage)
|
||||||
|
include(StrictAbi)
|
||||||
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
include(MacRpath)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# external libs
|
enable_testing()
|
||||||
add_subdirectory(./external) # before increasing warn levels, sad :(
|
find_package(GTest)
|
||||||
|
|
||||||
|
set(CMAKE_MACOSX_RPATH ON)
|
||||||
|
|
||||||
|
# Set standard version for compiler.
|
||||||
|
if(MSVC AND MSVC_TOOLSET_VERSION LESS 143)
|
||||||
|
# https://developercommunity.visualstudio.com/t/older-winsdk-headers-are-incompatible-with-zcprepr/1593479
|
||||||
|
set(CMAKE_C_STANDARD 99)
|
||||||
|
else()
|
||||||
|
set(CMAKE_C_STANDARD 11)
|
||||||
|
endif()
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_C_EXTENSIONS OFF)
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
# bump up warning levels appropriately for clang, gcc & msvc
|
message(STATUS "Supported C compiler features = ${CMAKE_C_COMPILE_FEATURES}")
|
||||||
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
|
message(STATUS "Supported C++ compiler features = ${CMAKE_CXX_COMPILE_FEATURES}")
|
||||||
add_compile_options(
|
|
||||||
-Wall -Wextra # Reasonable and standard
|
# Enable some warnings if we know the compiler.
|
||||||
-Wpedantic # Warn if non-standard C++ is used
|
if(MSVC)
|
||||||
-Wunused # Warn on anything being unused
|
add_compile_options(/W4 /analyze)
|
||||||
#-Wconversion # Warn on type conversions that may lose data
|
add_compile_options(/wd4100) # unreferenced formal parameter
|
||||||
#-Wsign-conversion # Warn on sign conversions
|
add_compile_options(/wd4267) # narrowing conversion
|
||||||
-Wshadow # Warn if a variable declaration shadows one from a parent context
|
add_compile_options(/wd4244) # narrowing conversion
|
||||||
)
|
add_compile_options(/wd4127) # conditional expression is constant
|
||||||
elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
|
add_compile_options(/wd4995) # #pragma deprecated
|
||||||
if (MSVC)
|
add_compile_options(/wd4018) # signed/unsigned compare
|
||||||
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
add_compile_options(/wd4310) # cast truncates constant value
|
||||||
else()
|
add_compile_options(/wd4389) # signed/unsigned compare
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
add_compile_options(/wd4245) # signed/unsigned assign/return/function call
|
||||||
endif()
|
add_compile_options(/wd4200) # nonstandard extension used: zero-sized array in struct/union
|
||||||
|
add_compile_options(/wd4702) # unreachable code
|
||||||
|
add_compile_options(/wd6340) # unsigned int passed to signed parameter
|
||||||
|
add_compile_options(/wd6326) # potential comparison of a constant with another constant
|
||||||
|
|
||||||
|
# TODO(iphydf): Look into these
|
||||||
|
add_compile_options(/wd4996) # use WSAAddressToStringW() instead of WSAAddressToStringA()
|
||||||
|
add_compile_options(/wd6255) # don't use alloca
|
||||||
|
add_compile_options(/wd6385) # reading invalid data
|
||||||
|
add_compile_options(/wd6001) # using uninitialized memory
|
||||||
|
add_compile_options(/wd6101) # returning uninitialized memory
|
||||||
|
add_compile_options(/wd6386) # buffer overrun
|
||||||
|
add_compile_options(/wd6011) # NULL dereference
|
||||||
|
add_compile_options(/wd6031) # sscanf return value ignored
|
||||||
|
add_compile_options(/wd6387) # passing NULL to fwrite
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# cmake setup end
|
set(MIN_LOGGER_LEVEL "" CACHE STRING "Logging level to use (TRACE, DEBUG, INFO, WARNING, ERROR)")
|
||||||
|
if(MIN_LOGGER_LEVEL)
|
||||||
|
if(("${MIN_LOGGER_LEVEL}" STREQUAL "TRACE") OR
|
||||||
|
("${MIN_LOGGER_LEVEL}" STREQUAL "DEBUG") OR
|
||||||
|
("${MIN_LOGGER_LEVEL}" STREQUAL "INFO") OR
|
||||||
|
("${MIN_LOGGER_LEVEL}" STREQUAL "WARNING") OR
|
||||||
|
("${MIN_LOGGER_LEVEL}" STREQUAL "ERROR"))
|
||||||
|
add_definitions(-DMIN_LOGGER_LEVEL=LOGGER_LEVEL_${MIN_LOGGER_LEVEL})
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Unknown value provided for MIN_LOGGER_LEVEL: \"${MIN_LOGGER_LEVEL}\", must be one of TRACE, DEBUG, INFO, WARNING or ERROR")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
add_subdirectory(./src)
|
option(EXPERIMENTAL_API "Install experimental header file with unstable API" OFF)
|
||||||
|
|
||||||
|
option(USE_IPV6 "Use IPv6 in tests" ON)
|
||||||
|
if(NOT USE_IPV6)
|
||||||
|
add_definitions(-DUSE_IPV6=0)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(BUILD_MISC_TESTS "Build additional tests" OFF)
|
||||||
|
option(BUILD_FUN_UTILS "Build additional just for fun utilities" OFF)
|
||||||
|
|
||||||
|
option(UNITTEST "Enable unit tests (disable if you don't have a working gmock or gtest)" ON)
|
||||||
|
|
||||||
|
option(AUTOTEST "Enable autotests (mainly for CI)" OFF)
|
||||||
|
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 (requires other/proxy/proxy_server.go to be running)" OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(BUILD_TOXAV "Whether to build the tox AV library" ON)
|
||||||
|
option(MUST_BUILD_TOXAV "Fail the build if toxav cannot be built" OFF)
|
||||||
|
|
||||||
|
option(DHT_BOOTSTRAP "Enable building of DHT_bootstrap" ON)
|
||||||
|
option(BOOTSTRAP_DAEMON "Enable building of tox-bootstrapd" ON)
|
||||||
|
if(BOOTSTRAP_DAEMON AND WIN32)
|
||||||
|
message(WARNING "Building tox-bootstrapd for Windows is not supported, disabling")
|
||||||
|
set(BOOTSTRAP_DAEMON OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(BUILD_FUZZ_TESTS "Build fuzzing harnesses" OFF)
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
option(MSVC_STATIC_SODIUM "Whether to link libsodium statically for MSVC" OFF)
|
||||||
|
if(MSVC_STATIC_SODIUM)
|
||||||
|
add_definitions(-DSODIUM_STATIC=1)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(Dependencies)
|
||||||
|
|
||||||
|
if(MUST_BUILD_TOXAV)
|
||||||
|
set(NO_TOXAV_ERROR_TYPE SEND_ERROR)
|
||||||
|
else()
|
||||||
|
set(NO_TOXAV_ERROR_TYPE WARNING)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(BUILD_TOXAV)
|
||||||
|
if(NOT OPUS_FOUND)
|
||||||
|
message(${NO_TOXAV_ERROR_TYPE} "Option BUILD_TOXAV is enabled but required library OPUS was not found.")
|
||||||
|
set(BUILD_TOXAV OFF)
|
||||||
|
endif()
|
||||||
|
if(NOT VPX_FOUND)
|
||||||
|
message(${NO_TOXAV_ERROR_TYPE} "Option BUILD_TOXAV is enabled but required library VPX was not found.")
|
||||||
|
set(BUILD_TOXAV OFF)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Disable float/double packing in CMP (C MessagePack library).
|
||||||
|
# We don't transfer floats over the network, so we disable this functionality.
|
||||||
|
add_definitions(-DCMP_NO_FLOAT=1)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# :: Tox Core Library
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# toxcore_PKGCONFIG_LIBS is what's added to the Libs: line in toxcore.pc. It
|
||||||
|
# needs to contain all the libraries a program using toxcore should link against
|
||||||
|
# if it's statically linked. If it's dynamically linked, there is no need to
|
||||||
|
# explicitly link against all the dependencies, but it doesn't harm much(*)
|
||||||
|
# either.
|
||||||
|
#
|
||||||
|
# (*) It allows client code to use symbols from our dependencies without
|
||||||
|
# explicitly linking against them.
|
||||||
|
set(toxcore_PKGCONFIG_LIBS)
|
||||||
|
# Requires: in pkg-config file.
|
||||||
|
set(toxcore_PKGCONFIG_REQUIRES)
|
||||||
|
|
||||||
|
set(toxcore_SOURCES
|
||||||
|
third_party/cmp/cmp.c
|
||||||
|
third_party/cmp/cmp.h
|
||||||
|
toxcore/announce.c
|
||||||
|
toxcore/announce.h
|
||||||
|
toxcore/bin_pack.c
|
||||||
|
toxcore/bin_pack.h
|
||||||
|
toxcore/bin_unpack.c
|
||||||
|
toxcore/bin_unpack.h
|
||||||
|
toxcore/ccompat.c
|
||||||
|
toxcore/ccompat.h
|
||||||
|
toxcore/crypto_core.c
|
||||||
|
toxcore/crypto_core.h
|
||||||
|
toxcore/crypto_core_pack.c
|
||||||
|
toxcore/crypto_core_pack.h
|
||||||
|
toxcore/DHT.c
|
||||||
|
toxcore/DHT.h
|
||||||
|
toxcore/events/conference_connected.c
|
||||||
|
toxcore/events/conference_invite.c
|
||||||
|
toxcore/events/conference_message.c
|
||||||
|
toxcore/events/conference_peer_list_changed.c
|
||||||
|
toxcore/events/conference_peer_name.c
|
||||||
|
toxcore/events/conference_title.c
|
||||||
|
toxcore/events/dht_get_nodes_response.c
|
||||||
|
toxcore/events/events_alloc.c
|
||||||
|
toxcore/events/events_alloc.h
|
||||||
|
toxcore/events/file_chunk_request.c
|
||||||
|
toxcore/events/file_recv.c
|
||||||
|
toxcore/events/file_recv_chunk.c
|
||||||
|
toxcore/events/file_recv_control.c
|
||||||
|
toxcore/events/friend_connection_status.c
|
||||||
|
toxcore/events/friend_lossless_packet.c
|
||||||
|
toxcore/events/friend_lossy_packet.c
|
||||||
|
toxcore/events/friend_message.c
|
||||||
|
toxcore/events/friend_name.c
|
||||||
|
toxcore/events/friend_read_receipt.c
|
||||||
|
toxcore/events/friend_request.c
|
||||||
|
toxcore/events/friend_status.c
|
||||||
|
toxcore/events/friend_status_message.c
|
||||||
|
toxcore/events/friend_typing.c
|
||||||
|
toxcore/events/self_connection_status.c
|
||||||
|
toxcore/events/group_custom_packet.c
|
||||||
|
toxcore/events/group_custom_private_packet.c
|
||||||
|
toxcore/events/group_invite.c
|
||||||
|
toxcore/events/group_join_fail.c
|
||||||
|
toxcore/events/group_message.c
|
||||||
|
toxcore/events/group_moderation.c
|
||||||
|
toxcore/events/group_password.c
|
||||||
|
toxcore/events/group_peer_exit.c
|
||||||
|
toxcore/events/group_peer_join.c
|
||||||
|
toxcore/events/group_peer_limit.c
|
||||||
|
toxcore/events/group_peer_name.c
|
||||||
|
toxcore/events/group_peer_status.c
|
||||||
|
toxcore/events/group_privacy_state.c
|
||||||
|
toxcore/events/group_private_message.c
|
||||||
|
toxcore/events/group_self_join.c
|
||||||
|
toxcore/events/group_topic.c
|
||||||
|
toxcore/events/group_topic_lock.c
|
||||||
|
toxcore/events/group_voice_state.c
|
||||||
|
toxcore/forwarding.c
|
||||||
|
toxcore/forwarding.h
|
||||||
|
toxcore/friend_connection.c
|
||||||
|
toxcore/friend_connection.h
|
||||||
|
toxcore/friend_requests.c
|
||||||
|
toxcore/friend_requests.h
|
||||||
|
toxcore/group.c
|
||||||
|
toxcore/group_chats.c
|
||||||
|
toxcore/group_chats.h
|
||||||
|
toxcore/group_common.h
|
||||||
|
toxcore/group_connection.c
|
||||||
|
toxcore/group_connection.h
|
||||||
|
toxcore/group.h
|
||||||
|
toxcore/group_announce.c
|
||||||
|
toxcore/group_announce.h
|
||||||
|
toxcore/group_moderation.c
|
||||||
|
toxcore/group_moderation.h
|
||||||
|
toxcore/group_onion_announce.c
|
||||||
|
toxcore/group_onion_announce.h
|
||||||
|
toxcore/group_pack.c
|
||||||
|
toxcore/group_pack.h
|
||||||
|
toxcore/LAN_discovery.c
|
||||||
|
toxcore/LAN_discovery.h
|
||||||
|
toxcore/list.c
|
||||||
|
toxcore/list.h
|
||||||
|
toxcore/logger.c
|
||||||
|
toxcore/logger.h
|
||||||
|
toxcore/Messenger.c
|
||||||
|
toxcore/Messenger.h
|
||||||
|
toxcore/mem.c
|
||||||
|
toxcore/mem.h
|
||||||
|
toxcore/mono_time.c
|
||||||
|
toxcore/mono_time.h
|
||||||
|
toxcore/net_crypto.c
|
||||||
|
toxcore/net_crypto.h
|
||||||
|
toxcore/network.c
|
||||||
|
toxcore/network.h
|
||||||
|
toxcore/onion_announce.c
|
||||||
|
toxcore/onion_announce.h
|
||||||
|
toxcore/onion.c
|
||||||
|
toxcore/onion_client.c
|
||||||
|
toxcore/onion_client.h
|
||||||
|
toxcore/onion.h
|
||||||
|
toxcore/ping_array.c
|
||||||
|
toxcore/ping_array.h
|
||||||
|
toxcore/ping.c
|
||||||
|
toxcore/ping.h
|
||||||
|
toxcore/shared_key_cache.c
|
||||||
|
toxcore/shared_key_cache.h
|
||||||
|
toxcore/state.c
|
||||||
|
toxcore/state.h
|
||||||
|
toxcore/TCP_client.c
|
||||||
|
toxcore/TCP_client.h
|
||||||
|
toxcore/TCP_common.c
|
||||||
|
toxcore/TCP_common.h
|
||||||
|
toxcore/TCP_connection.c
|
||||||
|
toxcore/TCP_connection.h
|
||||||
|
toxcore/TCP_server.c
|
||||||
|
toxcore/TCP_server.h
|
||||||
|
toxcore/timed_auth.c
|
||||||
|
toxcore/timed_auth.h
|
||||||
|
toxcore/tox_api.c
|
||||||
|
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
|
||||||
|
toxcore/tox_private.c
|
||||||
|
toxcore/tox_private.h
|
||||||
|
toxcore/tox_pack.c
|
||||||
|
toxcore/tox_pack.h
|
||||||
|
toxcore/tox_unpack.c
|
||||||
|
toxcore/tox_unpack.h
|
||||||
|
toxcore/util.c
|
||||||
|
toxcore/util.h)
|
||||||
|
if(TARGET unofficial-sodium::sodium)
|
||||||
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} unofficial-sodium::sodium)
|
||||||
|
else()
|
||||||
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${LIBSODIUM_LIBRARIES})
|
||||||
|
set(toxcore_LINK_DIRECTORIES ${toxcore_LINK_DIRECTORIES} ${LIBSODIUM_LIBRARY_DIRS})
|
||||||
|
set(toxcore_INCLUDE_DIRECTORIES ${toxcore_INCLUDE_DIRECTORIES} ${LIBSODIUM_INCLUDE_DIRS})
|
||||||
|
set(toxcore_COMPILE_OPTIONS ${toxcore_COMPILE_OPTIONS} ${LIBSODIUM_CFLAGS_OTHER})
|
||||||
|
endif()
|
||||||
|
set(toxcore_PKGCONFIG_REQUIRES ${toxcore_PKGCONFIG_REQUIRES} libsodium)
|
||||||
|
set(toxcore_API_HEADERS
|
||||||
|
${toxcore_SOURCE_DIR}/toxcore/tox.h^tox
|
||||||
|
${toxcore_SOURCE_DIR}/toxcore/tox_events.h^tox
|
||||||
|
${toxcore_SOURCE_DIR}/toxcore/tox_dispatch.h^tox)
|
||||||
|
if(EXPERIMENTAL_API)
|
||||||
|
set(toxcore_API_HEADERS ${toxcore_API_HEADERS}
|
||||||
|
${toxcore_SOURCE_DIR}/toxcore/tox_private.h^tox)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# :: Audio/Video Library
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
if(BUILD_TOXAV)
|
||||||
|
set(toxcore_SOURCES ${toxcore_SOURCES}
|
||||||
|
toxav/audio.c
|
||||||
|
toxav/audio.h
|
||||||
|
toxav/bwcontroller.c
|
||||||
|
toxav/bwcontroller.h
|
||||||
|
toxav/groupav.c
|
||||||
|
toxav/groupav.h
|
||||||
|
toxav/msi.c
|
||||||
|
toxav/msi.h
|
||||||
|
toxav/ring_buffer.c
|
||||||
|
toxav/ring_buffer.h
|
||||||
|
toxav/rtp.c
|
||||||
|
toxav/rtp.h
|
||||||
|
toxav/toxav.c
|
||||||
|
toxav/toxav.h
|
||||||
|
toxav/toxav_old.c
|
||||||
|
toxav/video.c
|
||||||
|
toxav/video.h)
|
||||||
|
set(toxcore_API_HEADERS ${toxcore_API_HEADERS}
|
||||||
|
${toxcore_SOURCE_DIR}/toxav/toxav.h^toxav)
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} PkgConfig::OPUS PkgConfig::VPX)
|
||||||
|
else()
|
||||||
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${OPUS_LIBRARIES} ${VPX_LIBRARIES})
|
||||||
|
set(toxcore_LINK_DIRECTORIES ${toxcore_LINK_DIRECTORIES} ${OPUS_LIBRARY_DIRS} ${VPX_LIBRARY_DIRS})
|
||||||
|
set(toxcore_INCLUDE_DIRECTORIES ${toxcore_INCLUDE_DIRECTORIES} ${OPUS_INCLUDE_DIRS} ${VPX_INCLUDE_DIRS})
|
||||||
|
set(toxcore_COMPILE_OPTIONS ${toxcore_COMPILE_OPTIONS} ${OPUS_CFLAGS_OTHER} ${VPX_CFLAGS_OTHER})
|
||||||
|
endif()
|
||||||
|
set(toxcore_PKGCONFIG_REQUIRES ${toxcore_PKGCONFIG_REQUIRES} opus vpx)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# :: Block encryption libraries
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
set(toxcore_SOURCES ${toxcore_SOURCES}
|
||||||
|
toxencryptsave/toxencryptsave.c
|
||||||
|
toxencryptsave/toxencryptsave.h)
|
||||||
|
set(toxcore_API_HEADERS ${toxcore_API_HEADERS}
|
||||||
|
${toxcore_SOURCE_DIR}/toxencryptsave/toxencryptsave.h^tox)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# :: System dependencies
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# These need to come after other dependencies, since e.g. libvpx may depend on
|
||||||
|
# pthread, but doesn't list it in VPX_LIBRARIES. We're adding it here, after
|
||||||
|
# any potential libvpx linking.
|
||||||
|
message("CMAKE_THREAD_LIBS_INIT: ${CMAKE_THREAD_LIBS_INIT}")
|
||||||
|
if(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_LIBRARIES ${toxcore_LINK_LIBRARIES} ${NSL_LIBRARIES})
|
||||||
|
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lnsl)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(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_LIBRARIES ${toxcore_LINK_LIBRARIES} ${SOCKET_LIBRARIES})
|
||||||
|
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lsocket)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TARGET PThreads4W::PThreads4W)
|
||||||
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} PThreads4W::PThreads4W)
|
||||||
|
elseif(TARGET Threads::Threads)
|
||||||
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} Threads::Threads)
|
||||||
|
endif()
|
||||||
|
if(WIN32)
|
||||||
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} iphlpapi ws2_32)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# :: All layers together in one library for ease of use
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Create combined library from all the sources.
|
||||||
|
if(ENABLE_SHARED)
|
||||||
|
add_library(toxcore_shared SHARED ${toxcore_SOURCES})
|
||||||
|
set_target_properties(toxcore_shared PROPERTIES OUTPUT_NAME toxcore)
|
||||||
|
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()
|
||||||
|
|
||||||
|
if(ENABLE_STATIC)
|
||||||
|
add_library(toxcore_static STATIC ${toxcore_SOURCES})
|
||||||
|
if(NOT MSVC)
|
||||||
|
set_target_properties(toxcore_static PROPERTIES OUTPUT_NAME toxcore)
|
||||||
|
endif()
|
||||||
|
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(BUILD_FUZZ_TESTS)
|
||||||
|
add_library(toxcore_fuzz STATIC ${toxcore_SOURCES})
|
||||||
|
target_link_libraries(toxcore_fuzz PRIVATE ${toxcore_LINK_LIBRARIES})
|
||||||
|
target_link_directories(toxcore_fuzz PUBLIC ${toxcore_LINK_DIRECTORIES})
|
||||||
|
target_include_directories(toxcore_fuzz SYSTEM PRIVATE ${toxcore_INCLUDE_DIRECTORIES})
|
||||||
|
target_compile_options(toxcore_fuzz PRIVATE ${toxcore_COMPILE_OPTIONS})
|
||||||
|
target_compile_definitions(toxcore_fuzz PUBLIC "FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Make version script (on systems that support it) to limit symbol visibility.
|
||||||
|
make_version_script(toxcore ${toxcore_API_HEADERS})
|
||||||
|
|
||||||
|
# Generate pkg-config file, install library to "${CMAKE_INSTALL_LIBDIR}" and install headers to
|
||||||
|
# "${CMAKE_INSTALL_INCLUDEDIR}/tox".
|
||||||
|
install_module(toxcore DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tox)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# :: Unit tests: no networking, just pure function calls.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
add_library(test_util STATIC
|
||||||
|
toxcore/DHT_test_util.cc
|
||||||
|
toxcore/DHT_test_util.hh
|
||||||
|
toxcore/crypto_core_test_util.cc
|
||||||
|
toxcore/crypto_core_test_util.hh
|
||||||
|
toxcore/mem_test_util.cc
|
||||||
|
toxcore/mem_test_util.hh
|
||||||
|
toxcore/network_test_util.cc
|
||||||
|
toxcore/network_test_util.hh
|
||||||
|
toxcore/test_util.cc
|
||||||
|
toxcore/test_util.hh)
|
||||||
|
|
||||||
|
function(unit_test subdir target)
|
||||||
|
add_executable(unit_${target}_test ${subdir}/${target}_test.cc)
|
||||||
|
target_link_libraries(unit_${target}_test PRIVATE test_util)
|
||||||
|
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::gtest_main GTest::gmock)
|
||||||
|
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.
|
||||||
|
#
|
||||||
|
if(UNITTEST AND TARGET GTest::gtest AND TARGET GTest::gmock)
|
||||||
|
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 test_util)
|
||||||
|
unit_test(toxcore tox)
|
||||||
|
unit_test(toxcore util)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_subdirectory(testing)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# :: Automated regression tests: create a tox network and run integration tests
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
if(AUTOTEST)
|
||||||
|
add_subdirectory(auto_tests)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# :: Bootstrap daemon
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
if(DHT_BOOTSTRAP)
|
||||||
|
add_executable(DHT_bootstrap
|
||||||
|
other/DHT_bootstrap.c
|
||||||
|
other/bootstrap_node_packets.c)
|
||||||
|
if(TARGET toxcore_static)
|
||||||
|
target_link_libraries(DHT_bootstrap PRIVATE toxcore_static)
|
||||||
|
else()
|
||||||
|
target_link_libraries(DHT_bootstrap PRIVATE toxcore_shared)
|
||||||
|
endif()
|
||||||
|
target_link_libraries(DHT_bootstrap PRIVATE misc_tools)
|
||||||
|
if(TARGET unofficial-sodium::sodium)
|
||||||
|
target_link_libraries(DHT_bootstrap PRIVATE unofficial-sodium::sodium)
|
||||||
|
endif()
|
||||||
|
if(TARGET PThreads4W::PThreads4W)
|
||||||
|
target_link_libraries(DHT_bootstrap PRIVATE PThreads4W::PThreads4W)
|
||||||
|
elseif(TARGET Threads::Threads)
|
||||||
|
target_link_libraries(DHT_bootstrap PRIVATE Threads::Threads)
|
||||||
|
endif()
|
||||||
|
install(TARGETS DHT_bootstrap RUNTIME DESTINATION bin)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(BOOTSTRAP_DAEMON)
|
||||||
|
if(LIBCONFIG_FOUND)
|
||||||
|
add_subdirectory(other/bootstrap_daemon)
|
||||||
|
else()
|
||||||
|
message(WARNING "Option BOOTSTRAP_DAEMON is enabled but required library LIBCONFIG was not found.")
|
||||||
|
set(BOOTSTRAP_DAEMON OFF)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(BUILD_FUN_UTILS)
|
||||||
|
add_subdirectory(other/fun)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (BUILD_FUZZ_TESTS)
|
||||||
|
add_subdirectory(testing/fuzzing)
|
||||||
|
endif()
|
||||||
|
@ -151,6 +151,7 @@ There are some options that are available to configure the build.
|
|||||||
| `PROXY_TEST` | Enable proxy test (requires `other/proxy/proxy_server.go` to be running). | ON or OFF | OFF |
|
| `PROXY_TEST` | Enable proxy test (requires `other/proxy/proxy_server.go` to be running). | ON or OFF | OFF |
|
||||||
| `STRICT_ABI` | Enforce strict ABI export in dynamic libraries. | ON or OFF | OFF |
|
| `STRICT_ABI` | Enforce strict ABI export in dynamic libraries. | ON or OFF | OFF |
|
||||||
| `TEST_TIMEOUT_SECONDS` | Limit runtime of each test to the number of seconds specified. | Positive number or nothing (empty string). | Empty string. |
|
| `TEST_TIMEOUT_SECONDS` | Limit runtime of each test to the number of seconds specified. | Positive number or nothing (empty string). | Empty string. |
|
||||||
|
| `UNITTEST` | Enable unit tests (disable if you don't have a working gmock or gtest). | ON or OFF | ON |
|
||||||
| `USE_IPV6` | Use IPv6 in tests. | ON or OFF | ON |
|
| `USE_IPV6` | Use IPv6 in tests. | ON or OFF | ON |
|
||||||
|
|
||||||
You can get this list of option using the following commands
|
You can get this list of option using the following commands
|
205
README.md
205
README.md
@ -1,8 +1,205 @@
|
|||||||
# Tomato
|
# 
|
||||||
|
|
||||||

|
**Current Coverage:**
|
||||||
|
[](https://codecov.io/gh/TokTok/c-toxcore)
|
||||||
|
|
||||||
## Highly experimental solanaceae client with Tox built-in
|
[**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)
|
||||||
|
|
||||||

|
## 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
|
||||||
|
[libsodium](https://doc.libsodium.org/) (based on
|
||||||
|
[NaCl](https://nacl.cr.yp.to/)) for its encryption and authentication.
|
||||||
|
|
||||||
|
## IMPORTANT!
|
||||||
|
|
||||||
|
### 
|
||||||
|
|
||||||
|
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 [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
|
||||||
|
|
||||||
|
The roadmap and changelog are generated from GitHub issues. You may view them on
|
||||||
|
the website, where they are updated at least once every 24 hours:
|
||||||
|
|
||||||
|
- Changelog: https://toktok.ltd/changelog/c-toxcore
|
||||||
|
- Roadmap: https://toktok.ltd/roadmap/c-toxcore
|
||||||
|
|
||||||
|
## Installing toxcore
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
In a nutshell, if you have [libsodium](https://github.com/jedisct1/libsodium)
|
||||||
|
installed, run:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
mkdir _build && cd _build
|
||||||
|
cmake ..
|
||||||
|
make
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
If you have [libvpx](https://github.com/webmproject/libvpx) and
|
||||||
|
[opus](https://github.com/xiph/opus) installed, the above will also build the
|
||||||
|
A/V library for multimedia chats.
|
||||||
|
|
||||||
|
## Using toxcore
|
||||||
|
|
||||||
|
The simplest "hello world" example could be an echo bot. Here we will walk
|
||||||
|
through the implementation of a simple bot.
|
||||||
|
|
||||||
|
### Creating the tox instance
|
||||||
|
|
||||||
|
All toxcore API functions work with error parameters. They are enums with one
|
||||||
|
`OK` value and several error codes that describe the different situations in
|
||||||
|
which the function might fail.
|
||||||
|
|
||||||
|
```c
|
||||||
|
TOX_ERR_NEW err_new;
|
||||||
|
Tox *tox = tox_new(NULL, &err_new);
|
||||||
|
if (err_new != TOX_ERR_NEW_OK) {
|
||||||
|
fprintf(stderr, "tox_new failed with error code %d\n", err_new);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Here, we simply exit the program, but in a real client you will probably want to
|
||||||
|
do some error handling and proper error reporting to the user. The `NULL`
|
||||||
|
argument given to the first parameter of `tox_new` is the `Tox_Options`. It
|
||||||
|
contains various write-once network settings and allows you to load a previously
|
||||||
|
serialised instance. See [toxcore/tox.h](tox.h) for details.
|
||||||
|
|
||||||
|
### Setting up callbacks
|
||||||
|
|
||||||
|
Toxcore works with callbacks that you can register to listen for certain events.
|
||||||
|
Examples of such events are "friend request received" or "friend sent a
|
||||||
|
message". Search the API for `tox_callback_*` to find all of them.
|
||||||
|
|
||||||
|
Here, we will set up callbacks for receiving friend requests and receiving
|
||||||
|
messages. We will always accept any friend request (because we're a bot), and
|
||||||
|
when we receive a message, we send it back to the sender.
|
||||||
|
|
||||||
|
```c
|
||||||
|
tox_callback_friend_request(tox, handle_friend_request);
|
||||||
|
tox_callback_friend_message(tox, handle_friend_message);
|
||||||
|
```
|
||||||
|
|
||||||
|
These two function calls set up the callbacks. Now we also need to implement
|
||||||
|
these "handle" functions.
|
||||||
|
|
||||||
|
### Handle friend requests
|
||||||
|
|
||||||
|
```c
|
||||||
|
static void handle_friend_request(
|
||||||
|
Tox *tox, const uint8_t *public_key, const uint8_t *message, size_t length,
|
||||||
|
void *user_data) {
|
||||||
|
// Accept the friend request:
|
||||||
|
TOX_ERR_FRIEND_ADD err_friend_add;
|
||||||
|
tox_friend_add_norequest(tox, public_key, &err_friend_add);
|
||||||
|
if (err_friend_add != TOX_ERR_FRIEND_ADD_OK) {
|
||||||
|
fprintf(stderr, "unable to add friend: %d\n", err_friend_add);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `tox_friend_add_norequest` function adds the friend without sending them a
|
||||||
|
friend request. Since we already got a friend request, this is the right thing
|
||||||
|
to do. If you wanted to send a friend request yourself, you would use
|
||||||
|
`tox_friend_add`, which has an extra parameter for the message.
|
||||||
|
|
||||||
|
### Handle messages
|
||||||
|
|
||||||
|
Now, when the friend sends us a message, we want to respond to them by sending
|
||||||
|
them the same message back. This will be our "echo".
|
||||||
|
|
||||||
|
```c
|
||||||
|
static void handle_friend_message(
|
||||||
|
Tox *tox, uint32_t friend_number, TOX_MESSAGE_TYPE type,
|
||||||
|
const uint8_t *message, size_t length,
|
||||||
|
void *user_data) {
|
||||||
|
TOX_ERR_FRIEND_SEND_MESSAGE err_send;
|
||||||
|
tox_friend_send_message(tox, friend_number, type, message, length,
|
||||||
|
&err_send);
|
||||||
|
if (err_send != TOX_ERR_FRIEND_SEND_MESSAGE_OK) {
|
||||||
|
fprintf(stderr, "unable to send message back to friend %d: %d\n",
|
||||||
|
friend_number, err_send);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
That's it for the setup. Now we want to actually run the bot.
|
||||||
|
|
||||||
|
### Main event loop
|
||||||
|
|
||||||
|
Toxcore works with a main event loop function `tox_iterate` that you need to
|
||||||
|
call at a certain frequency dictated by `tox_iteration_interval`. This is a
|
||||||
|
polling function that receives new network messages and processes them.
|
||||||
|
|
||||||
|
```c
|
||||||
|
while (true) {
|
||||||
|
usleep(1000 * tox_iteration_interval(tox));
|
||||||
|
tox_iterate(tox, NULL);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
That's it! Now you have a working echo bot. The only problem is that since Tox
|
||||||
|
works with public keys, and you can't really guess your bot's public key, you
|
||||||
|
can't add it as a friend in your client. For this, we need to call another API
|
||||||
|
function: `tox_self_get_address(tox, address)`. This will fill the 38 byte
|
||||||
|
friend address into the `address` buffer. You can then display that binary
|
||||||
|
string as hex and input it into your client. Writing a `bin2hex` function is
|
||||||
|
left as exercise for the reader.
|
||||||
|
|
||||||
|
We glossed over a lot of details, such as the user data which we passed to
|
||||||
|
`tox_iterate` (passing `NULL`), bootstrapping into an actual network (this bot
|
||||||
|
will work in the LAN, but not on an internet server) and the fact that we now
|
||||||
|
have no clean way of stopping the bot (`while (true)`). If you want to write a
|
||||||
|
real bot, you will probably want to read up on all the API functions. Consult
|
||||||
|
the API documentation in [toxcore/tox.h](toxcore/tox.h) for more information.
|
||||||
|
|
||||||
|
### Other resources
|
||||||
|
|
||||||
|
- [Another echo bot](https://wiki.tox.chat/developers/client_examples/echo_bot)
|
||||||
|
- [minitox](https://github.com/hqwrong/minitox) (A minimal tox client)
|
||||||
|
|
||||||
|
## SAST Tools
|
||||||
|
|
||||||
|
This project uses various tools supporting Static Application Security Testing:
|
||||||
|
|
||||||
|
- [clang-tidy](https://clang.llvm.org/extra/clang-tidy/): A clang-based C++
|
||||||
|
"linter" tool.
|
||||||
|
- [Coverity](https://scan.coverity.com/): A cloud-based static analyzer service
|
||||||
|
for Java, C/C++, C#, JavaScript, Ruby, or Python that is free for open source
|
||||||
|
projects.
|
||||||
|
- [cppcheck](https://cppcheck.sourceforge.io/): A static analyzer for C/C++
|
||||||
|
code.
|
||||||
|
- [cpplint](https://github.com/cpplint/cpplint): Static code checker for C++
|
||||||
|
- [goblint](https://goblint.in.tum.de/): A static analyzer for multi-threaded C
|
||||||
|
programs, specializing in finding concurrency bugs.
|
||||||
|
- [infer](https://github.com/facebook/infer): A static analyzer for Java, C,
|
||||||
|
C++, and Objective-C.
|
||||||
|
- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/?utm_source=website&utm_medium=github&utm_campaign=open_source):
|
||||||
|
A static analyzer for C, C++, C#, and Java code.
|
||||||
|
- [tokstyle](https://github.com/TokTok/hs-tokstyle): A style checker for TokTok
|
||||||
|
C projects.
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user