forked from Green-Sky/tomato
Squashed 'external/toxcore/c-toxcore/' changes from e29e185c03..f1df709b87
f1df709b87 feat: add ngc events 1b6c907235 refactor: Make event dispatch ordered by receive time. b7f9367f6f test: Upgrade cppcheck, fix some warnings. 766e62bc89 chore: Use `pkg_search_module` directly in cmake. 00ff078f91 cleanup: Use target_link_libraries directly in cmake. c58928cc89 chore: Add `IMPORTED_TARGET` to pkg-config packages. 895a6af122 cleanup: Remove NaCl support. 41dfb1c1c0 fix: unpack enum function names in event impl generator 447666d1a1 chore: Disable targets for cross-compilation. 572924e924 chore: Build a docker image with coverage info in it. 415cb78f5e cleanup: Some portability/warning fixes for Windows builds. 425216d9ec fix: Correct a use-after-free and fix some memory leaks. 4b1cfa3e08 refactor: Change all enum-like `#define` sequences into enums. d3c2704fa9 chore: Fix make_single_file to support core-only. 0ce46b644e refactor: Change the `TCP_PACKET_*` defines into an enum. 22cd38ad50 adopt event impl generation tool to #2392 f31ea1088a add the event impl generation tool 4e603bb613 refactor: Use `enum-from-int` rule from tokstyle. 19d8f180d6 chore: Update github actions `uses`. 6a895be0c7 test: Make esp32 build actually try to instantiate tox. 65d09c9bfb cleanup: Remove test net support. REVERT: e29e185c03 feat: add ngc events git-subtree-dir: external/toxcore/c-toxcore git-subtree-split: f1df709b8792da4c0e946d826b11df77d565064d
This commit is contained in:
parent
83e200df43
commit
b2ae9530a4
@ -134,7 +134,6 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
apt-get install -y --no-install-recommends
|
apt-get install -y --no-install-recommends
|
||||||
ca-certificates
|
ca-certificates
|
||||||
cppcheck
|
|
||||||
g++
|
g++
|
||||||
llvm-dev
|
llvm-dev
|
||||||
- checkout
|
- checkout
|
||||||
@ -142,7 +141,6 @@ jobs:
|
|||||||
- run: other/analysis/check_includes
|
- run: other/analysis/check_includes
|
||||||
- run: other/analysis/check_logger_levels
|
- run: other/analysis/check_logger_levels
|
||||||
- run: other/analysis/run-clang
|
- run: other/analysis/run-clang
|
||||||
- run: other/analysis/run-cppcheck
|
|
||||||
- run: other/analysis/run-gcc
|
- run: other/analysis/run-gcc
|
||||||
|
|
||||||
clang-analyze:
|
clang-analyze:
|
||||||
|
3
.github/scripts/autotools-linux
vendored
3
.github/scripts/autotools-linux
vendored
@ -11,10 +11,7 @@ add_ld_flag -Wl,-z,defs
|
|||||||
# Make compilation error on a warning
|
# Make compilation error on a warning
|
||||||
add_flag -Werror
|
add_flag -Werror
|
||||||
|
|
||||||
add_config_flag --with-nacl-libs="$CACHEDIR/lib/amd64"
|
|
||||||
add_config_flag --with-nacl-headers="$CACHEDIR/include/amd64"
|
|
||||||
add_config_flag --disable-ipv6
|
add_config_flag --disable-ipv6
|
||||||
add_config_flag --enable-nacl
|
|
||||||
add_config_flag --enable-daemon
|
add_config_flag --enable-daemon
|
||||||
add_config_flag --with-log-level=TRACE
|
add_config_flag --with-log-level=TRACE
|
||||||
|
|
||||||
|
2
.github/scripts/flags-clang.sh
vendored
2
.github/scripts/flags-clang.sh
vendored
@ -65,6 +65,8 @@ add_cxx_flag -Wno-c++98-compat-pedantic
|
|||||||
add_cxx_flag -Wno-c99-extensions
|
add_cxx_flag -Wno-c99-extensions
|
||||||
# We're C-compatible, so use C style casts.
|
# We're C-compatible, so use C style casts.
|
||||||
add_cxx_flag -Wno-old-style-cast
|
add_cxx_flag -Wno-old-style-cast
|
||||||
|
# GTest does this.
|
||||||
|
add_cxx_flag -Wno-global-constructors
|
||||||
|
|
||||||
# Downgrade to warning so we still see it.
|
# Downgrade to warning so we still see it.
|
||||||
add_flag -Wno-error=unreachable-code
|
add_flag -Wno-error=unreachable-code
|
||||||
|
2
.github/scripts/flags-coverage.sh
vendored
2
.github/scripts/flags-coverage.sh
vendored
@ -14,7 +14,7 @@ add_flag --coverage
|
|||||||
add_c_flag -fno-inline -fno-omit-frame-pointer
|
add_c_flag -fno-inline -fno-omit-frame-pointer
|
||||||
|
|
||||||
# Show useful stack traces on crash.
|
# Show useful stack traces on crash.
|
||||||
add_flag -fsanitize=undefined -fno-sanitize-recover=all
|
add_flag -fsanitize=undefined -fno-sanitize-recover=all -D_DEBUG
|
||||||
|
|
||||||
# In test code (_test.cc and libgtest), throw away all debug information.
|
# In test code (_test.cc and libgtest), throw away all debug information.
|
||||||
# We only care about stack frames inside toxcore (which is C). Without this,
|
# We only care about stack frames inside toxcore (which is C). Without this,
|
||||||
|
2
.github/settings.yml
vendored
2
.github/settings.yml
vendored
@ -16,9 +16,9 @@ branches:
|
|||||||
- "bazel-opt"
|
- "bazel-opt"
|
||||||
- "build-alpine-s390x"
|
- "build-alpine-s390x"
|
||||||
- "build-android"
|
- "build-android"
|
||||||
|
- "build-autotools"
|
||||||
- "build-compcert"
|
- "build-compcert"
|
||||||
- "build-macos"
|
- "build-macos"
|
||||||
- "build-nacl"
|
|
||||||
- "build-tcc"
|
- "build-tcc"
|
||||||
- "build-win32"
|
- "build-win32"
|
||||||
- "build-win64"
|
- "build-win64"
|
||||||
|
63
.github/workflows/ci.yml
vendored
63
.github/workflows/ci.yml
vendored
@ -13,10 +13,20 @@ jobs:
|
|||||||
common:
|
common:
|
||||||
uses: TokTok/ci-tools/.github/workflows/common-ci.yml@master
|
uses: TokTok/ci-tools/.github/workflows/common-ci.yml@master
|
||||||
|
|
||||||
|
cppcheck:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
- name: Docker Build
|
||||||
|
uses: docker/build-push-action@v4
|
||||||
|
with:
|
||||||
|
file: other/docker/cppcheck/Dockerfile
|
||||||
|
|
||||||
mypy:
|
mypy:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up Python 3.9
|
- name: Set up Python 3.9
|
||||||
@ -34,9 +44,9 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Docker Build
|
- name: Docker Build
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
file: other/docker/doxygen/Dockerfile
|
file: other/docker/doxygen/Dockerfile
|
||||||
|
|
||||||
@ -44,9 +54,9 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Docker Build
|
- name: Docker Build
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
file: other/docker/tokstyle/Dockerfile
|
file: other/docker/tokstyle/Dockerfile
|
||||||
|
|
||||||
@ -54,19 +64,19 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Docker Build
|
- name: Docker Build
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
file: other/docker/misra/Dockerfile
|
file: other/docker/misra/Dockerfile
|
||||||
|
|
||||||
build-nacl:
|
build-autotools:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Docker Build
|
- name: Docker Build
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
file: other/docker/autotools/Dockerfile
|
file: other/docker/autotools/Dockerfile
|
||||||
|
|
||||||
@ -74,9 +84,9 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Docker Build
|
- name: Docker Build
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
file: other/docker/tcc/Dockerfile
|
file: other/docker/tcc/Dockerfile
|
||||||
|
|
||||||
@ -84,16 +94,27 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Docker Build
|
- name: Docker Build
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
file: other/docker/compcert/Dockerfile
|
file: other/docker/compcert/Dockerfile
|
||||||
|
|
||||||
|
generate-events:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Run generate_event_c
|
||||||
|
run: |
|
||||||
|
other/event_tooling/run
|
||||||
|
git diff --exit-code
|
||||||
|
|
||||||
cimplefmt:
|
cimplefmt:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Run cimplefmt
|
- name: Run cimplefmt
|
||||||
@ -102,7 +123,7 @@ jobs:
|
|||||||
build-win32:
|
build-win32:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Cross compilation
|
- name: Cross compilation
|
||||||
@ -111,7 +132,7 @@ jobs:
|
|||||||
build-win64:
|
build-win64:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Cross compilation
|
- name: Cross compilation
|
||||||
@ -120,7 +141,7 @@ jobs:
|
|||||||
build-macos:
|
build-macos:
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Build and test
|
- name: Build and test
|
||||||
@ -129,16 +150,16 @@ jobs:
|
|||||||
coverage-linux:
|
coverage-linux:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Build, test, and upload coverage
|
- name: Build, test, and upload coverage
|
||||||
run: .github/scripts/coverage-linux
|
run: other/docker/coverage/run
|
||||||
|
|
||||||
build-android:
|
build-android:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- run: .github/scripts/cmake-android armeabi-v7a
|
- run: .github/scripts/cmake-android armeabi-v7a
|
||||||
|
50
.github/workflows/docker.yml
vendored
50
.github/workflows/docker.yml
vendored
@ -17,11 +17,11 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
if: ${{ github.event_name == 'push' }}
|
if: ${{ github.event_name == 'push' }}
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Docker Build
|
- name: Docker Build
|
||||||
@ -38,15 +38,15 @@ jobs:
|
|||||||
needs: [docker-bootstrap-node]
|
needs: [docker-bootstrap-node]
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
if: ${{ github.event_name == 'push' }}
|
if: ${{ github.event_name == 'push' }}
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
context: "{{defaultContext}}:other/bootstrap_daemon/websocket"
|
context: "{{defaultContext}}:other/bootstrap_daemon/websocket"
|
||||||
push: ${{ github.event_name == 'push' }}
|
push: ${{ github.event_name == 'push' }}
|
||||||
@ -57,17 +57,17 @@ jobs:
|
|||||||
docker-clusterfuzz:
|
docker-clusterfuzz:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
if: ${{ github.event_name == 'push' }}
|
if: ${{ github.event_name == 'push' }}
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
context: "."
|
context: "."
|
||||||
file: .clusterfuzzlite/Dockerfile
|
file: .clusterfuzzlite/Dockerfile
|
||||||
@ -80,15 +80,15 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
if: ${{ github.event_name == 'push' }}
|
if: ${{ github.event_name == 'push' }}
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
file: testing/Dockerfile
|
file: testing/Dockerfile
|
||||||
push: ${{ github.event_name == 'push' }}
|
push: ${{ github.event_name == 'push' }}
|
||||||
@ -100,15 +100,15 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
if: ${{ github.event_name == 'push' }}
|
if: ${{ github.event_name == 'push' }}
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
file: other/emscripten/Dockerfile
|
file: other/emscripten/Dockerfile
|
||||||
push: ${{ github.event_name == 'push' }}
|
push: ${{ github.event_name == 'push' }}
|
||||||
@ -120,22 +120,22 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
with:
|
with:
|
||||||
driver: docker
|
driver: docker
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
if: ${{ github.event_name == 'push' }}
|
if: ${{ github.event_name == 'push' }}
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
- name: Build toxchat/c-toxcore:sources
|
- name: Build toxchat/c-toxcore:sources
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
file: other/docker/sources/Dockerfile
|
file: other/docker/sources/Dockerfile
|
||||||
tags: toxchat/c-toxcore:sources
|
tags: toxchat/c-toxcore:sources
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
file: other/docker/esp32/Dockerfile
|
file: other/docker/esp32/Dockerfile
|
||||||
push: ${{ github.event_name == 'push' }}
|
push: ${{ github.event_name == 'push' }}
|
||||||
@ -147,15 +147,15 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
if: ${{ github.event_name == 'push' }}
|
if: ${{ github.event_name == 'push' }}
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
context: "{{defaultContext}}:other/docker/windows"
|
context: "{{defaultContext}}:other/docker/windows"
|
||||||
push: ${{ github.event_name == 'push' }}
|
push: ${{ github.event_name == 'push' }}
|
||||||
@ -171,15 +171,15 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
if: ${{ github.event_name == 'push' }}
|
if: ${{ github.event_name == 'push' }}
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
context: "{{defaultContext}}:other/docker/windows"
|
context: "{{defaultContext}}:other/docker/windows"
|
||||||
push: ${{ github.event_name == 'push' }}
|
push: ${{ github.event_name == 'push' }}
|
||||||
|
31
.github/workflows/post-submit.yml
vendored
31
.github/workflows/post-submit.yml
vendored
@ -9,8 +9,35 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Docker Build
|
- name: Docker Build
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v4
|
||||||
with:
|
with:
|
||||||
file: other/docker/alpine-s390x/Dockerfile
|
file: other/docker/alpine-s390x/Dockerfile
|
||||||
|
|
||||||
|
docker-coverage:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
with:
|
||||||
|
driver: docker
|
||||||
|
- name: Login to DockerHub
|
||||||
|
if: ${{ github.event_name == 'push' }}
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
- name: Build toxchat/c-toxcore:sources
|
||||||
|
uses: docker/build-push-action@v4
|
||||||
|
with:
|
||||||
|
file: other/docker/sources/Dockerfile
|
||||||
|
tags: toxchat/c-toxcore:sources
|
||||||
|
- name: Build and push
|
||||||
|
uses: docker/build-push-action@v4
|
||||||
|
with:
|
||||||
|
file: other/docker/coverage/Dockerfile
|
||||||
|
push: ${{ github.event_name == 'push' }}
|
||||||
|
tags: toxchat/c-toxcore:coverage
|
||||||
|
cache-from: type=registry,ref=toxchat/c-toxcore:coverage
|
||||||
|
cache-to: type=inline
|
||||||
|
5
.github/workflows/sonar-scan.yml
vendored
5
.github/workflows/sonar-scan.yml
vendored
@ -19,13 +19,14 @@ jobs:
|
|||||||
SONAR_SERVER_URL: "https://sonarcloud.io"
|
SONAR_SERVER_URL: "https://sonarcloud.io"
|
||||||
BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed
|
BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up JDK 17
|
- name: Set up JDK 17
|
||||||
uses: actions/setup-java@v1
|
uses: actions/setup-java@v2
|
||||||
with:
|
with:
|
||||||
|
distribution: "zulu"
|
||||||
java-version: 17
|
java-version: 17
|
||||||
- name: Download and set up sonar-scanner
|
- name: Download and set up sonar-scanner
|
||||||
env:
|
env:
|
||||||
|
@ -14,8 +14,8 @@
|
|||||||
#
|
#
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
cmake_policy(VERSION 3.5)
|
cmake_policy(VERSION 3.16)
|
||||||
project(toxcore)
|
project(toxcore)
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH ${toxcore_SOURCE_DIR}/cmake)
|
list(APPEND CMAKE_MODULE_PATH ${toxcore_SOURCE_DIR}/cmake)
|
||||||
@ -76,6 +76,7 @@ if(APPLE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
find_package(GTest)
|
||||||
|
|
||||||
set(CMAKE_MACOSX_RPATH ON)
|
set(CMAKE_MACOSX_RPATH ON)
|
||||||
|
|
||||||
@ -111,16 +112,11 @@ if(NOT USE_IPV6)
|
|||||||
add_definitions(-DUSE_IPV6=0)
|
add_definitions(-DUSE_IPV6=0)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(USE_TEST_NETWORK "Use a separate test network with different packet IDs" OFF)
|
|
||||||
if(USE_TEST_NETWORK)
|
|
||||||
add_definitions(-DUSE_TEST_NETWORK=1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(BUILD_MISC_TESTS "Build additional tests and utilities" OFF)
|
option(BUILD_MISC_TESTS "Build additional tests and utilities" OFF)
|
||||||
option(BUILD_FUN_UTILS "Build additional just for fun utilities" OFF)
|
option(BUILD_FUN_UTILS "Build additional just for fun utilities" OFF)
|
||||||
|
|
||||||
option(AUTOTEST "Enable autotests (mainly for CI)" OFF)
|
option(AUTOTEST "Enable autotests (mainly for CI)" OFF)
|
||||||
if (AUTOTEST)
|
if(AUTOTEST)
|
||||||
option(NON_HERMETIC_TESTS "Whether to build and run tests that depend on an internet connection" OFF)
|
option(NON_HERMETIC_TESTS "Whether to build and run tests that depend on an internet connection" OFF)
|
||||||
option(PROXY_TEST "Enable proxy test (needs HTTP/SOCKS5 proxy on port 8080/8081)" OFF)
|
option(PROXY_TEST "Enable proxy test (needs HTTP/SOCKS5 proxy on port 8080/8081)" OFF)
|
||||||
endif()
|
endif()
|
||||||
@ -320,6 +316,8 @@ set(toxcore_SOURCES
|
|||||||
toxcore/tox.c
|
toxcore/tox.c
|
||||||
toxcore/tox_dispatch.c
|
toxcore/tox_dispatch.c
|
||||||
toxcore/tox_dispatch.h
|
toxcore/tox_dispatch.h
|
||||||
|
toxcore/tox_event.c
|
||||||
|
toxcore/tox_event.h
|
||||||
toxcore/tox_events.c
|
toxcore/tox_events.c
|
||||||
toxcore/tox_events.h
|
toxcore/tox_events.h
|
||||||
toxcore/tox.h
|
toxcore/tox.h
|
||||||
@ -329,7 +327,10 @@ set(toxcore_SOURCES
|
|||||||
toxcore/tox_unpack.h
|
toxcore/tox_unpack.h
|
||||||
toxcore/util.c
|
toxcore/util.c
|
||||||
toxcore/util.h)
|
toxcore/util.h)
|
||||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${LIBSODIUM_LIBRARIES})
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${LIBSODIUM_LIBRARIES})
|
||||||
|
set(toxcore_LINK_DIRECTORIES ${toxcore_LINK_DIRECTORIES} ${LIBSODIUM_LIBRARY_DIRS})
|
||||||
|
set(toxcore_INCLUDE_DIRECTORIES ${toxcore_INCLUDE_DIRECTORIES} ${LIBSODIUM_INCLUDE_DIRS})
|
||||||
|
set(toxcore_COMPILE_OPTIONS ${toxcore_COMPILE_OPTIONS} ${LIBSODIUM_CFLAGS_OTHER})
|
||||||
set(toxcore_PKGCONFIG_REQUIRES ${toxcore_PKGCONFIG_REQUIRES} libsodium)
|
set(toxcore_PKGCONFIG_REQUIRES ${toxcore_PKGCONFIG_REQUIRES} libsodium)
|
||||||
set(toxcore_API_HEADERS
|
set(toxcore_API_HEADERS
|
||||||
${toxcore_SOURCE_DIR}/toxcore/tox.h^tox
|
${toxcore_SOURCE_DIR}/toxcore/tox.h^tox
|
||||||
@ -365,7 +366,10 @@ if(BUILD_TOXAV)
|
|||||||
set(toxcore_API_HEADERS ${toxcore_API_HEADERS}
|
set(toxcore_API_HEADERS ${toxcore_API_HEADERS}
|
||||||
${toxcore_SOURCE_DIR}/toxav/toxav.h^toxav)
|
${toxcore_SOURCE_DIR}/toxav/toxav.h^toxav)
|
||||||
|
|
||||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${OPUS_LIBRARIES} ${VPX_LIBRARIES})
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${OPUS_LIBRARIES} ${VPX_LIBRARIES})
|
||||||
|
set(toxcore_LINK_DIRECTORIES ${toxcore_LINK_DIRECTORIES} ${OPUS_LIBRARY_DIRS} ${VPX_LIBRARY_DIRS})
|
||||||
|
set(toxcore_INCLUDE_DIRECTORIES ${toxcore_INCLUDE_DIRECTORIES} ${OPUS_INCLUDE_DIRS} ${VPX_INCLUDE_DIRS})
|
||||||
|
set(toxcore_COMPILE_OPTIONS ${toxcore_COMPILE_OPTIONS} ${OPUS_CFLAGS_OTHER} ${VPX_CFLAGS_OTHER})
|
||||||
set(toxcore_PKGCONFIG_REQUIRES ${toxcore_PKGCONFIG_REQUIRES} opus vpx)
|
set(toxcore_PKGCONFIG_REQUIRES ${toxcore_PKGCONFIG_REQUIRES} opus vpx)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -392,28 +396,28 @@ set(toxcore_API_HEADERS ${toxcore_API_HEADERS}
|
|||||||
# any potential libvpx linking.
|
# any potential libvpx linking.
|
||||||
message("CMAKE_THREAD_LIBS_INIT: ${CMAKE_THREAD_LIBS_INIT}")
|
message("CMAKE_THREAD_LIBS_INIT: ${CMAKE_THREAD_LIBS_INIT}")
|
||||||
if(CMAKE_THREAD_LIBS_INIT)
|
if(CMAKE_THREAD_LIBS_INIT)
|
||||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${CMAKE_THREAD_LIBS_INIT})
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
||||||
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} ${CMAKE_THREAD_LIBS_INIT})
|
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} ${CMAKE_THREAD_LIBS_INIT})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
if(NSL_LIBRARIES)
|
if(NSL_LIBRARIES)
|
||||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${NSL_LIBRARIES})
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${NSL_LIBRARIES})
|
||||||
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lnsl)
|
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lnsl)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(RT_LIBRARIES)
|
if(RT_LIBRARIES)
|
||||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${RT_LIBRARIES})
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${RT_LIBRARIES})
|
||||||
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lrt)
|
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lrt)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(SOCKET_LIBRARIES)
|
if(SOCKET_LIBRARIES)
|
||||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${SOCKET_LIBRARIES})
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ${SOCKET_LIBRARIES})
|
||||||
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lsocket)
|
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lsocket)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ws2_32 iphlpapi)
|
set(toxcore_LINK_LIBRARIES ${toxcore_LINK_LIBRARIES} ws2_32 iphlpapi)
|
||||||
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lws2_32 -liphlpapi)
|
set(toxcore_PKGCONFIG_LIBS ${toxcore_PKGCONFIG_LIBS} -lws2_32 -liphlpapi)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -427,7 +431,18 @@ endif()
|
|||||||
add_module(toxcore ${toxcore_SOURCES})
|
add_module(toxcore ${toxcore_SOURCES})
|
||||||
|
|
||||||
# Link it to all dependencies.
|
# Link it to all dependencies.
|
||||||
target_link_modules(toxcore ${toxcore_LINK_MODULES})
|
if(TARGET toxcore_static)
|
||||||
|
target_link_libraries(toxcore_static PRIVATE ${toxcore_LINK_LIBRARIES})
|
||||||
|
target_link_directories(toxcore_static PUBLIC ${toxcore_LINK_DIRECTORIES})
|
||||||
|
target_include_directories(toxcore_static SYSTEM PRIVATE ${toxcore_INCLUDE_DIRECTORIES})
|
||||||
|
target_compile_options(toxcore_static PRIVATE ${toxcore_COMPILE_OPTIONS})
|
||||||
|
endif()
|
||||||
|
if(TARGET toxcore_shared)
|
||||||
|
target_link_libraries(toxcore_shared PRIVATE ${toxcore_LINK_LIBRARIES})
|
||||||
|
target_link_directories(toxcore_shared PUBLIC ${toxcore_LINK_DIRECTORIES})
|
||||||
|
target_include_directories(toxcore_shared SYSTEM PRIVATE ${toxcore_INCLUDE_DIRECTORIES})
|
||||||
|
target_compile_options(toxcore_shared PRIVATE ${toxcore_COMPILE_OPTIONS})
|
||||||
|
endif()
|
||||||
|
|
||||||
# Make version script (on systems that support it) to limit symbol visibility.
|
# Make version script (on systems that support it) to limit symbol visibility.
|
||||||
make_version_script(toxcore ${toxcore_API_HEADERS})
|
make_version_script(toxcore ${toxcore_API_HEADERS})
|
||||||
@ -442,23 +457,36 @@ install_module(toxcore DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/tox)
|
|||||||
#
|
#
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
include(CompileGTest)
|
function(unit_test subdir target)
|
||||||
|
add_executable(unit_${target}_test ${subdir}/${target}_test.cc)
|
||||||
|
if(TARGET toxcore_static)
|
||||||
|
target_link_libraries(unit_${target}_test PRIVATE toxcore_static)
|
||||||
|
else()
|
||||||
|
target_link_libraries(unit_${target}_test PRIVATE toxcore_shared)
|
||||||
|
endif()
|
||||||
|
target_link_libraries(unit_${target}_test PRIVATE GTest::GTest GTest::Main)
|
||||||
|
set_target_properties(unit_${target}_test PROPERTIES COMPILE_FLAGS "${TEST_CXX_FLAGS}")
|
||||||
|
add_test(NAME ${target} COMMAND ${CROSSCOMPILING_EMULATOR} unit_${target}_test)
|
||||||
|
set_property(TEST ${target} PROPERTY ENVIRONMENT "LLVM_PROFILE_FILE=${target}.profraw")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
# The actual unit tests follow.
|
# The actual unit tests follow.
|
||||||
#
|
#
|
||||||
unit_test(toxav ring_buffer)
|
if(GTEST_FOUND)
|
||||||
unit_test(toxav rtp)
|
unit_test(toxav ring_buffer)
|
||||||
unit_test(toxcore DHT)
|
unit_test(toxav rtp)
|
||||||
unit_test(toxcore bin_pack)
|
unit_test(toxcore DHT)
|
||||||
unit_test(toxcore crypto_core)
|
unit_test(toxcore bin_pack)
|
||||||
unit_test(toxcore group_announce)
|
unit_test(toxcore crypto_core)
|
||||||
unit_test(toxcore group_moderation)
|
unit_test(toxcore group_announce)
|
||||||
unit_test(toxcore list)
|
unit_test(toxcore group_moderation)
|
||||||
unit_test(toxcore mem)
|
unit_test(toxcore list)
|
||||||
unit_test(toxcore mono_time)
|
unit_test(toxcore mem)
|
||||||
unit_test(toxcore ping_array)
|
unit_test(toxcore mono_time)
|
||||||
unit_test(toxcore tox)
|
unit_test(toxcore ping_array)
|
||||||
unit_test(toxcore util)
|
unit_test(toxcore tox)
|
||||||
|
unit_test(toxcore util)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_subdirectory(testing)
|
add_subdirectory(testing)
|
||||||
|
|
||||||
@ -482,7 +510,12 @@ if(DHT_BOOTSTRAP)
|
|||||||
add_executable(DHT_bootstrap
|
add_executable(DHT_bootstrap
|
||||||
other/DHT_bootstrap.c
|
other/DHT_bootstrap.c
|
||||||
other/bootstrap_node_packets.c)
|
other/bootstrap_node_packets.c)
|
||||||
target_link_modules(DHT_bootstrap toxcore misc_tools)
|
if(TARGET toxcore_static)
|
||||||
|
target_link_libraries(DHT_bootstrap PRIVATE toxcore_static)
|
||||||
|
else()
|
||||||
|
target_link_libraries(DHT_bootstrap PRIVATE toxcore_shared)
|
||||||
|
endif()
|
||||||
|
target_link_libraries(DHT_bootstrap PRIVATE misc_tools)
|
||||||
install(TARGETS DHT_bootstrap RUNTIME DESTINATION bin)
|
install(TARGETS DHT_bootstrap RUNTIME DESTINATION bin)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
18
INSTALL.md
18
INSTALL.md
@ -32,14 +32,14 @@ These instructions will guide you through the process of building and installing
|
|||||||
|
|
||||||
This repository, although called `toxcore`, in fact contains several libraries besides `toxcore` which complement it, as well as several executables. However, note that although these are separate libraries, at the moment, when building the libraries, they are all merged into a single `toxcore` library. Here is the full list of the main components that can be built using the CMake, their dependencies and descriptions.
|
This repository, although called `toxcore`, in fact contains several libraries besides `toxcore` which complement it, as well as several executables. However, note that although these are separate libraries, at the moment, when building the libraries, they are all merged into a single `toxcore` library. Here is the full list of the main components that can be built using the CMake, their dependencies and descriptions.
|
||||||
|
|
||||||
| Name | Type | Dependencies | Platform | Description |
|
| Name | Type | Dependencies | Platform | Description |
|
||||||
|------------------|------------|-----------------------------------------------|----------------|----------------------------------------------------------------------------|
|
|------------------|------------|------------------------------------|----------------|----------------------------------------------------------------------------|
|
||||||
| `toxcore` | Library | libnacl or libsodium, libm, libpthread, librt | Cross-platform | The main Tox library that provides the messenger functionality. |
|
| `toxcore` | Library | libsodium, libm, libpthread, librt | Cross-platform | The main Tox library that provides the messenger functionality. |
|
||||||
| `toxav` | Library | libtoxcore, libopus, libvpx | Cross-platform | Provides audio/video functionality. |
|
| `toxav` | Library | libtoxcore, libopus, libvpx | Cross-platform | Provides audio/video functionality. |
|
||||||
| `toxencryptsave` | Library | libtoxcore, libnacl or libsodium | Cross-platform | Provides encryption of Tox profiles (savedata), as well as arbitrary data. |
|
| `toxencryptsave` | Library | libtoxcore, libsodium | Cross-platform | Provides encryption of Tox profiles (savedata), as well as arbitrary data. |
|
||||||
| `DHT_bootstrap` | Executable | libtoxcore | Cross-platform | A simple DHT bootstrap node. |
|
| `DHT_bootstrap` | Executable | libtoxcore | Cross-platform | A simple DHT bootstrap node. |
|
||||||
| `tox-bootstrapd` | Executable | libtoxcore, libconfig | Unix-like | Highly configurable DHT bootstrap node daemon (systemd, SysVinit, Docker). |
|
| `tox-bootstrapd` | Executable | libtoxcore, libconfig | Unix-like | Highly configurable DHT bootstrap node daemon (systemd, SysVinit, Docker). |
|
||||||
| `cmp` | Library | | Cross-platform | C implementation of the MessagePack serialization format. [https://github.com/camgunz/cmp](https://github.com/camgunz/cmp) |
|
| `cmp` | Library | | Cross-platform | C implementation of the MessagePack serialization format. [https://github.com/camgunz/cmp](https://github.com/camgunz/cmp) |
|
||||||
|
|
||||||
#### Secondary
|
#### Secondary
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ Useful for generating Tox profiles from the output of the vanity key generators,
|
|||||||
Library dependencies are listed in the [components](#components) table. The dependencies need to be satisfied for the components to be built. Note that if you don't have a dependency for some component, e.g. you don't have `libopus` installed required for building `toxav` component, building of that component is silently disabled.
|
Library dependencies are listed in the [components](#components) table. The dependencies need to be satisfied for the components to be built. Note that if you don't have a dependency for some component, e.g. you don't have `libopus` installed required for building `toxav` component, building of that component is silently disabled.
|
||||||
|
|
||||||
|
|
||||||
Be advised that due to the addition of `cmp` as a submodule, you now also need to initialize the git submodules required by toxcore. This can be done by cloning the repo with the addition of `--recurse-submodules` or by running `git submodule update --init` in the root directory of the repo.
|
Be advised that due to the addition of `cmp` as a submodule, you now also need to initialize the git submodules required by toxcore. This can be done by cloning the repo with the addition of `--recurse-submodules` or by running `git submodule update --init` in the root directory of the repo.
|
||||||
|
|
||||||
#### Compiler requirements
|
#### Compiler requirements
|
||||||
|
|
||||||
|
15
README.md
15
README.md
@ -8,7 +8,8 @@
|
|||||||
|
|
||||||
Tox is a peer to peer (serverless) instant messenger aimed at making security
|
Tox is a peer to peer (serverless) instant messenger aimed at making security
|
||||||
and privacy easy to obtain for regular users. It uses
|
and privacy easy to obtain for regular users. It uses
|
||||||
[NaCl](https://nacl.cr.yp.to/) for its encryption and authentication.
|
[libsodium](https://doc.libsodium.org/) (based on
|
||||||
|
[NaCl](https://nacl.cr.yp.to/)) for its encryption and authentication.
|
||||||
|
|
||||||
## IMPORTANT!
|
## IMPORTANT!
|
||||||
|
|
||||||
@ -18,12 +19,12 @@ This is an **experimental** cryptographic network library. It has not been
|
|||||||
formally audited by an independent third party that specializes in
|
formally audited by an independent third party that specializes in
|
||||||
cryptography or cryptanalysis. **Use this library at your own risk.**
|
cryptography or cryptanalysis. **Use this library at your own risk.**
|
||||||
|
|
||||||
The underlying crypto library [NaCl](https://nacl.cr.yp.to/install.html)
|
The underlying crypto library [libsodium](https://doc.libsodium.org/) provides
|
||||||
provides reliable encryption, but the security model has not yet been fully
|
reliable encryption, but the security model has not yet been fully specified.
|
||||||
specified. See [issue 210](https://github.com/TokTok/c-toxcore/issues/210) for
|
See [issue 210](https://github.com/TokTok/c-toxcore/issues/210) for a
|
||||||
a discussion on developing a threat model. See other issues for known
|
discussion on developing a threat model. See other issues for known weaknesses
|
||||||
weaknesses (e.g. [issue 426](https://github.com/TokTok/c-toxcore/issues/426)
|
(e.g. [issue 426](https://github.com/TokTok/c-toxcore/issues/426) describes
|
||||||
describes what can happen if your secret key is stolen).
|
what can happen if your secret key is stolen).
|
||||||
|
|
||||||
## Toxcore Development Roadmap
|
## Toxcore Development Roadmap
|
||||||
|
|
||||||
|
@ -3,18 +3,26 @@ set(TEST_TIMEOUT_SECONDS "" CACHE STRING "Limit runtime of each test to the numb
|
|||||||
add_library(auto_test_support
|
add_library(auto_test_support
|
||||||
auto_test_support.c
|
auto_test_support.c
|
||||||
auto_test_support.h)
|
auto_test_support.h)
|
||||||
target_link_modules(auto_test_support toxcore misc_tools)
|
target_link_libraries(auto_test_support PRIVATE misc_tools)
|
||||||
|
if(TARGET toxcore_static)
|
||||||
|
target_link_libraries(auto_test_support PRIVATE toxcore_static)
|
||||||
|
else()
|
||||||
|
target_link_libraries(auto_test_support PRIVATE toxcore_shared)
|
||||||
|
endif()
|
||||||
|
|
||||||
function(auto_test target)
|
function(auto_test target)
|
||||||
if(AUTOTEST AND NOT (MSVC AND ARGV1 STREQUAL "MSVC_DONT_BUILD"))
|
add_executable(auto_${target}_test ${target}_test.c)
|
||||||
add_executable(auto_${target}_test ${target}_test.c)
|
target_link_libraries(auto_${target}_test PRIVATE misc_tools auto_test_support)
|
||||||
target_link_modules(auto_${target}_test toxcore misc_tools auto_test_support)
|
if(TARGET toxcore_static)
|
||||||
if(NOT ARGV1 STREQUAL "DONT_RUN")
|
target_link_libraries(auto_${target}_test PRIVATE toxcore_static)
|
||||||
add_test(NAME ${target} COMMAND ${CROSSCOMPILING_EMULATOR} auto_${target}_test)
|
else()
|
||||||
set_tests_properties(${target} PROPERTIES TIMEOUT "${TEST_TIMEOUT_SECONDS}")
|
target_link_libraries(auto_${target}_test PRIVATE toxcore_shared)
|
||||||
# add the source dir as environment variable, so the testdata can be found
|
endif()
|
||||||
set_tests_properties(${target} PROPERTIES ENVIRONMENT "LLVM_PROFILE_FILE=${target}.profraw;srcdir=${CMAKE_CURRENT_SOURCE_DIR}")
|
if(NOT ARGV1 STREQUAL "DONT_RUN")
|
||||||
endif()
|
add_test(NAME ${target} COMMAND ${CROSSCOMPILING_EMULATOR} auto_${target}_test)
|
||||||
|
set_tests_properties(${target} PROPERTIES TIMEOUT "${TEST_TIMEOUT_SECONDS}")
|
||||||
|
# add the source dir as environment variable, so the testdata can be found
|
||||||
|
set_tests_properties(${target} PROPERTIES ENVIRONMENT "LLVM_PROFILE_FILE=${target}.profraw;srcdir=${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
@ -69,17 +77,28 @@ auto_test(typing)
|
|||||||
auto_test(version)
|
auto_test(version)
|
||||||
auto_test(save_compatibility)
|
auto_test(save_compatibility)
|
||||||
|
|
||||||
|
target_include_directories(auto_encryptsave_test SYSTEM PRIVATE ${LIBSODIUM_INCLUDE_DIRS})
|
||||||
|
|
||||||
if(NON_HERMETIC_TESTS)
|
if(NON_HERMETIC_TESTS)
|
||||||
auto_test(bootstrap)
|
auto_test(bootstrap)
|
||||||
auto_test(tcp_relay)
|
auto_test(tcp_relay)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BUILD_TOXAV)
|
if(BUILD_TOXAV)
|
||||||
auto_test(conference_av MSVC_DONT_BUILD)
|
auto_test(conference_av)
|
||||||
auto_test(toxav_basic)
|
auto_test(toxav_basic)
|
||||||
auto_test(toxav_many)
|
auto_test(toxav_many)
|
||||||
endif()
|
|
||||||
|
|
||||||
|
target_link_libraries(auto_toxav_basic_test PRIVATE ${VPX_LIBRARIES})
|
||||||
|
target_link_directories(auto_toxav_basic_test PRIVATE ${VPX_LIBRARY_DIRS})
|
||||||
|
target_include_directories(auto_toxav_basic_test SYSTEM PRIVATE ${VPX_INCLUDE_DIRS})
|
||||||
|
target_compile_options(auto_toxav_basic_test PRIVATE ${VPX_CFLAGS_OTHER})
|
||||||
|
|
||||||
|
target_link_libraries(auto_toxav_many_test PRIVATE ${VPX_LIBRARIES})
|
||||||
|
target_link_directories(auto_toxav_many_test PRIVATE ${VPX_LIBRARY_DIRS})
|
||||||
|
target_include_directories(auto_toxav_many_test SYSTEM PRIVATE ${VPX_INCLUDE_DIRS})
|
||||||
|
target_compile_options(auto_toxav_many_test PRIVATE ${VPX_CFLAGS_OTHER})
|
||||||
|
endif()
|
||||||
|
|
||||||
if(PROXY_TEST)
|
if(PROXY_TEST)
|
||||||
auto_test(proxy)
|
auto_test(proxy)
|
||||||
|
@ -5,7 +5,7 @@ libauto_test_support_la_SOURCES = ../auto_tests/auto_test_support.c ../auto_test
|
|||||||
libauto_test_support_la_LIBADD = libmisc_tools.la libtoxcore.la
|
libauto_test_support_la_LIBADD = libmisc_tools.la libtoxcore.la
|
||||||
|
|
||||||
TESTS = \
|
TESTS = \
|
||||||
announce_test \
|
announce_test \
|
||||||
conference_double_invite_test \
|
conference_double_invite_test \
|
||||||
conference_invite_merge_test \
|
conference_invite_merge_test \
|
||||||
conference_peer_nick_test \
|
conference_peer_nick_test \
|
||||||
@ -13,6 +13,8 @@ TESTS = \
|
|||||||
conference_test \
|
conference_test \
|
||||||
conference_two_test \
|
conference_two_test \
|
||||||
crypto_test \
|
crypto_test \
|
||||||
|
encryptsave_test \
|
||||||
|
file_saving_test \
|
||||||
file_transfer_test \
|
file_transfer_test \
|
||||||
forwarding_test \
|
forwarding_test \
|
||||||
friend_connection_test \
|
friend_connection_test \
|
||||||
@ -34,34 +36,24 @@ TESTS = \
|
|||||||
set_name_test \
|
set_name_test \
|
||||||
set_status_message_test \
|
set_status_message_test \
|
||||||
TCP_test \
|
TCP_test \
|
||||||
tox_events_test \
|
|
||||||
tox_dispatch_test \
|
tox_dispatch_test \
|
||||||
|
tox_events_test \
|
||||||
tox_many_tcp_test \
|
tox_many_tcp_test \
|
||||||
tox_many_test \
|
tox_many_test \
|
||||||
tox_strncasecmp_test \
|
tox_strncasecmp_test \
|
||||||
typing_test \
|
typing_test \
|
||||||
version_test
|
version_test
|
||||||
|
|
||||||
if !WITH_NACL
|
|
||||||
TESTS += \
|
|
||||||
encryptsave_test \
|
|
||||||
file_saving_test
|
|
||||||
endif
|
|
||||||
|
|
||||||
AUTOTEST_CFLAGS = \
|
AUTOTEST_CFLAGS = \
|
||||||
$(LIBSODIUM_CFLAGS) \
|
$(LIBSODIUM_CFLAGS)
|
||||||
$(NACL_CFLAGS)
|
|
||||||
|
|
||||||
AUTOTEST_LDADD = \
|
AUTOTEST_LDADD = \
|
||||||
$(LIBSODIUM_LDFLAGS) \
|
$(LIBSODIUM_LDFLAGS) \
|
||||||
$(NACL_LDFLAGS) \
|
|
||||||
libmisc_tools.la \
|
libmisc_tools.la \
|
||||||
libauto_test_support.la \
|
libauto_test_support.la \
|
||||||
libtoxcore.la \
|
libtoxcore.la \
|
||||||
libtoxencryptsave.la \
|
libtoxencryptsave.la \
|
||||||
$(LIBSODIUM_LIBS) \
|
$(LIBSODIUM_LIBS)
|
||||||
$(NACL_OBJECTS) \
|
|
||||||
$(NACL_LIBS)
|
|
||||||
|
|
||||||
|
|
||||||
if BUILD_AV
|
if BUILD_AV
|
||||||
|
@ -61,9 +61,13 @@ static void test_store_data(void)
|
|||||||
ck_assert(log != nullptr);
|
ck_assert(log != nullptr);
|
||||||
logger_callback_log(log, print_debug_logger, nullptr, nullptr);
|
logger_callback_log(log, print_debug_logger, nullptr, nullptr);
|
||||||
Mono_Time *mono_time = mono_time_new(mem, nullptr, nullptr);
|
Mono_Time *mono_time = mono_time_new(mem, nullptr, nullptr);
|
||||||
|
ck_assert(mono_time != nullptr);
|
||||||
Networking_Core *net = new_networking_no_udp(log, mem, ns);
|
Networking_Core *net = new_networking_no_udp(log, mem, ns);
|
||||||
|
ck_assert(net != nullptr);
|
||||||
DHT *dht = new_dht(log, mem, rng, ns, mono_time, net, true, true);
|
DHT *dht = new_dht(log, mem, rng, ns, mono_time, net, true, true);
|
||||||
|
ck_assert(dht != nullptr);
|
||||||
Forwarding *forwarding = new_forwarding(log, rng, mono_time, dht);
|
Forwarding *forwarding = new_forwarding(log, rng, mono_time, dht);
|
||||||
|
ck_assert(forwarding != nullptr);
|
||||||
Announcements *announce = new_announcements(log, mem, rng, mono_time, forwarding);
|
Announcements *announce = new_announcements(log, mem, rng, mono_time, forwarding);
|
||||||
ck_assert(announce != nullptr);
|
ck_assert(announce != nullptr);
|
||||||
|
|
||||||
|
@ -28,7 +28,6 @@ static const struct BootstrapNodes {
|
|||||||
uint16_t port;
|
uint16_t port;
|
||||||
const uint8_t key[32];
|
const uint8_t key[32];
|
||||||
} bootstrap_nodes[] = {
|
} bootstrap_nodes[] = {
|
||||||
#ifndef USE_TEST_NETWORK
|
|
||||||
{
|
{
|
||||||
"tox.abilinski.com", 33445,
|
"tox.abilinski.com", 33445,
|
||||||
0x10, 0xC0, 0x0E, 0xB2, 0x50, 0xC3, 0x23, 0x3E,
|
0x10, 0xC0, 0x0E, 0xB2, 0x50, 0xC3, 0x23, 0x3E,
|
||||||
@ -57,22 +56,6 @@ static const struct BootstrapNodes {
|
|||||||
0x6D, 0xC9, 0xD0, 0xA3, 0x00, 0xE6, 0xC3, 0x57,
|
0x6D, 0xC9, 0xD0, 0xA3, 0x00, 0xE6, 0xC3, 0x57,
|
||||||
0x63, 0x4E, 0xE2, 0xDA, 0x88, 0xC3, 0x54, 0x63,
|
0x63, 0x4E, 0xE2, 0xDA, 0x88, 0xC3, 0x54, 0x63,
|
||||||
},
|
},
|
||||||
#else
|
|
||||||
{
|
|
||||||
"172.93.52.70", 33445,
|
|
||||||
0x79, 0xCA, 0xDA, 0x49, 0x74, 0xB0, 0x92, 0x6F,
|
|
||||||
0x28, 0x6F, 0x02, 0x5C, 0xD5, 0xFF, 0xDF, 0x3E,
|
|
||||||
0x65, 0x4A, 0x37, 0x58, 0xC5, 0x3E, 0x02, 0x73,
|
|
||||||
0xEC, 0xFC, 0x4D, 0x12, 0xC2, 0x1D, 0xCA, 0x48,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tox.plastiras.org", 38445,
|
|
||||||
0x5E, 0x47, 0xBA, 0x1D, 0xC3, 0x91, 0x3E, 0xB2,
|
|
||||||
0xCB, 0xF2, 0xD6, 0x4C, 0xE4, 0xF2, 0x3D, 0x8B,
|
|
||||||
0xFE, 0x53, 0x91, 0xBF, 0xAB, 0xE5, 0xC4, 0x3C,
|
|
||||||
0x5B, 0xAD, 0x13, 0xF0, 0xA4, 0x14, 0xCD, 0x77,
|
|
||||||
},
|
|
||||||
#endif // USE_TEST_NETWORK
|
|
||||||
{ nullptr, 0, 0 },
|
{ nullptr, 0, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -332,7 +315,7 @@ static void bootstrap_autotoxes(struct Tox_Options *options, uint32_t tox_count,
|
|||||||
for (uint32_t i = 1; i < tox_count; ++i) {
|
for (uint32_t i = 1; i < tox_count; ++i) {
|
||||||
Tox_Err_Bootstrap err;
|
Tox_Err_Bootstrap err;
|
||||||
tox_bootstrap(autotoxes[i].tox, "localhost", dht_port, dht_key, &err);
|
tox_bootstrap(autotoxes[i].tox, "localhost", dht_port, dht_key, &err);
|
||||||
ck_assert(err == TOX_ERR_BOOTSTRAP_OK);
|
ck_assert_msg(err == TOX_ERR_BOOTSTRAP_OK, "bootstrap error for port %d: %d", dht_port, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!udp_enabled) {
|
if (!udp_enabled) {
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
#include <sodium.h>
|
#include <sodium.h>
|
||||||
|
|
||||||
#include "../testing/misc_tools.h"
|
#include "../testing/misc_tools.h"
|
||||||
@ -232,9 +231,3 @@ int main(void)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#else // VANILLA_NACL
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
@ -259,7 +259,6 @@ static void group_peer_status_handler(Tox *tox, uint32_t groupnumber, uint32_t p
|
|||||||
|
|
||||||
static void group_announce_test(AutoTox *autotoxes)
|
static void group_announce_test(AutoTox *autotoxes)
|
||||||
{
|
{
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
ck_assert_msg(NUM_GROUP_TOXES == 2, "NUM_GROUP_TOXES needs to be 2");
|
ck_assert_msg(NUM_GROUP_TOXES == 2, "NUM_GROUP_TOXES needs to be 2");
|
||||||
|
|
||||||
Tox *tox0 = autotoxes[0].tox;
|
Tox *tox0 = autotoxes[0].tox;
|
||||||
@ -436,7 +435,6 @@ static void group_announce_test(AutoTox *autotoxes)
|
|||||||
ck_assert(num_groups1 == num_groups2 && num_groups2 == 0);
|
ck_assert(num_groups1 == num_groups2 && num_groups2 == 0);
|
||||||
|
|
||||||
printf("All tests passed!\n");
|
printf("All tests passed!\n");
|
||||||
#endif // VANILLA_NACL
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
@ -102,7 +102,6 @@ static void group_peer_join_handler(Tox *tox, uint32_t group_number, uint32_t pe
|
|||||||
|
|
||||||
static void group_invite_test(AutoTox *autotoxes)
|
static void group_invite_test(AutoTox *autotoxes)
|
||||||
{
|
{
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
ck_assert_msg(NUM_GROUP_TOXES > 7, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
ck_assert_msg(NUM_GROUP_TOXES > 7, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
||||||
|
|
||||||
for (size_t i = 0; i < NUM_GROUP_TOXES; ++i) {
|
for (size_t i = 0; i < NUM_GROUP_TOXES; ++i) {
|
||||||
@ -260,8 +259,6 @@ static void group_invite_test(AutoTox *autotoxes)
|
|||||||
}
|
}
|
||||||
|
|
||||||
printf("All tests passed!\n");
|
printf("All tests passed!\n");
|
||||||
|
|
||||||
#endif // VANILLA_NACL
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
@ -350,7 +350,6 @@ static void group_message_handler_wraparound_test(Tox *tox, uint32_t groupnumber
|
|||||||
|
|
||||||
static void group_message_test(AutoTox *autotoxes)
|
static void group_message_test(AutoTox *autotoxes)
|
||||||
{
|
{
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
ck_assert_msg(NUM_GROUP_TOXES >= 2, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
ck_assert_msg(NUM_GROUP_TOXES >= 2, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
||||||
|
|
||||||
const Random *rng = system_random();
|
const Random *rng = system_random();
|
||||||
@ -544,7 +543,6 @@ static void group_message_test(AutoTox *autotoxes)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "All tests passed!\n");
|
fprintf(stderr, "All tests passed!\n");
|
||||||
#endif // VANILLA_NACL
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
@ -432,7 +432,6 @@ static void check_voice_state(AutoTox *autotoxes, uint32_t num_toxes)
|
|||||||
|
|
||||||
static void group_moderation_test(AutoTox *autotoxes)
|
static void group_moderation_test(AutoTox *autotoxes)
|
||||||
{
|
{
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
ck_assert_msg(NUM_GROUP_TOXES >= 4, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
ck_assert_msg(NUM_GROUP_TOXES >= 4, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
||||||
ck_assert_msg(NUM_GROUP_TOXES < 10, "NUM_GROUP_TOXES is too big: %d", NUM_GROUP_TOXES);
|
ck_assert_msg(NUM_GROUP_TOXES < 10, "NUM_GROUP_TOXES is too big: %d", NUM_GROUP_TOXES);
|
||||||
|
|
||||||
@ -634,7 +633,6 @@ static void group_moderation_test(AutoTox *autotoxes)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "All tests passed!\n");
|
fprintf(stderr, "All tests passed!\n");
|
||||||
#endif // VANILLA_NACL
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
@ -148,7 +148,6 @@ static int has_correct_self_state(const Tox *tox, uint32_t group_number, const u
|
|||||||
|
|
||||||
static void group_save_test(AutoTox *autotoxes)
|
static void group_save_test(AutoTox *autotoxes)
|
||||||
{
|
{
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
ck_assert_msg(NUM_GROUP_TOXES > 1, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
ck_assert_msg(NUM_GROUP_TOXES > 1, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
||||||
|
|
||||||
for (size_t i = 0; i < NUM_GROUP_TOXES; ++i) {
|
for (size_t i = 0; i < NUM_GROUP_TOXES; ++i) {
|
||||||
@ -270,8 +269,6 @@ static void group_save_test(AutoTox *autotoxes)
|
|||||||
tox_kill(new_tox);
|
tox_kill(new_tox);
|
||||||
|
|
||||||
printf("All tests passed!\n");
|
printf("All tests passed!\n");
|
||||||
|
|
||||||
#endif // VANILLA_NACL
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
@ -238,7 +238,6 @@ static void set_group_state(Tox *tox, uint32_t groupnumber, uint32_t peer_limit,
|
|||||||
|
|
||||||
static void group_state_test(AutoTox *autotoxes)
|
static void group_state_test(AutoTox *autotoxes)
|
||||||
{
|
{
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
ck_assert_msg(NUM_GROUP_TOXES >= 3, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
ck_assert_msg(NUM_GROUP_TOXES >= 3, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
||||||
|
|
||||||
for (size_t i = 0; i < NUM_GROUP_TOXES; ++i) {
|
for (size_t i = 0; i < NUM_GROUP_TOXES; ++i) {
|
||||||
@ -318,8 +317,6 @@ static void group_state_test(AutoTox *autotoxes)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "All tests passed!\n");
|
fprintf(stderr, "All tests passed!\n");
|
||||||
|
|
||||||
#endif /* VANILLA_NACL */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
@ -330,7 +330,6 @@ static void topic_spam(const Random *rng, AutoTox *autotoxes, uint32_t num_peers
|
|||||||
|
|
||||||
static void group_sync_test(AutoTox *autotoxes)
|
static void group_sync_test(AutoTox *autotoxes)
|
||||||
{
|
{
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
ck_assert(NUM_GROUP_TOXES >= 5);
|
ck_assert(NUM_GROUP_TOXES >= 5);
|
||||||
const Random *rng = system_random();
|
const Random *rng = system_random();
|
||||||
ck_assert(rng != nullptr);
|
ck_assert(rng != nullptr);
|
||||||
@ -443,8 +442,6 @@ static void group_sync_test(AutoTox *autotoxes)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "All tests passed!\n");
|
fprintf(stderr, "All tests passed!\n");
|
||||||
|
|
||||||
#endif // VANILLA_NACL
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
|
|
||||||
#include "auto_test_support.h"
|
#include "auto_test_support.h"
|
||||||
|
|
||||||
#ifdef USE_TEST_NETWORK
|
|
||||||
|
|
||||||
#define NUM_GROUP_TOXES 2
|
#define NUM_GROUP_TOXES 2
|
||||||
#define CODEWORD "RONALD MCDONALD"
|
#define CODEWORD "RONALD MCDONALD"
|
||||||
#define CODEWORD_LEN (sizeof(CODEWORD) - 1)
|
#define CODEWORD_LEN (sizeof(CODEWORD) - 1)
|
||||||
@ -129,7 +127,6 @@ static bool all_peers_got_code(AutoTox *autotoxes)
|
|||||||
|
|
||||||
static void group_tcp_test(AutoTox *autotoxes)
|
static void group_tcp_test(AutoTox *autotoxes)
|
||||||
{
|
{
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
ck_assert(NUM_GROUP_TOXES >= 2);
|
ck_assert(NUM_GROUP_TOXES >= 2);
|
||||||
|
|
||||||
State *state0 = (State *)autotoxes[0].state;
|
State *state0 = (State *)autotoxes[0].state;
|
||||||
@ -222,34 +219,29 @@ static void group_tcp_test(AutoTox *autotoxes)
|
|||||||
}
|
}
|
||||||
|
|
||||||
printf("Test passed!\n");
|
printf("Test passed!\n");
|
||||||
|
|
||||||
#endif // VANILLA_NACL
|
|
||||||
}
|
}
|
||||||
#endif // USE_TEST_NETWORK
|
|
||||||
|
|
||||||
int main(void)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
#ifdef USE_TEST_NETWORK // TODO(Jfreegman): Enable this test when the mainnet works with DHT groupchats
|
|
||||||
setvbuf(stdout, nullptr, _IONBF, 0);
|
setvbuf(stdout, nullptr, _IONBF, 0);
|
||||||
|
|
||||||
struct Tox_Options *options = (struct Tox_Options *)calloc(1, sizeof(struct Tox_Options));
|
struct Tox_Options *options = tox_options_new(nullptr);
|
||||||
ck_assert(options != nullptr);
|
ck_assert(options != nullptr);
|
||||||
|
|
||||||
tox_options_default(options);
|
|
||||||
tox_options_set_udp_enabled(options, false);
|
tox_options_set_udp_enabled(options, false);
|
||||||
|
|
||||||
Run_Auto_Options autotest_opts = default_run_auto_options();
|
Run_Auto_Options autotest_opts = default_run_auto_options();
|
||||||
autotest_opts.graph = GRAPH_COMPLETE;
|
autotest_opts.graph = GRAPH_COMPLETE;
|
||||||
|
|
||||||
run_auto_test(options, NUM_GROUP_TOXES, group_tcp_test, sizeof(State), &autotest_opts);
|
// TODO(JFreegman): Fix this test and remove the "if".
|
||||||
|
if (argc > 2) {
|
||||||
|
run_auto_test(options, NUM_GROUP_TOXES, group_tcp_test, sizeof(State), &autotest_opts);
|
||||||
|
}
|
||||||
|
|
||||||
tox_options_free(options);
|
tox_options_free(options);
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_TEST_NETWORK
|
|
||||||
#undef NUM_GROUP_TOXES
|
|
||||||
#undef CODEWORD_LEN
|
#undef CODEWORD_LEN
|
||||||
#undef CODEWORD
|
#undef CODEWORD
|
||||||
#endif // USE_TEST_NETWORK
|
#undef NUM_GROUP_TOXES
|
||||||
|
@ -203,7 +203,6 @@ static uint32_t set_topic_all_peers(const Random *rng, AutoTox *autotoxes, size_
|
|||||||
|
|
||||||
static void group_topic_test(AutoTox *autotoxes)
|
static void group_topic_test(AutoTox *autotoxes)
|
||||||
{
|
{
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
ck_assert_msg(NUM_GROUP_TOXES >= 3, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
ck_assert_msg(NUM_GROUP_TOXES >= 3, "NUM_GROUP_TOXES is too small: %d", NUM_GROUP_TOXES);
|
||||||
|
|
||||||
const Random *rng = system_random();
|
const Random *rng = system_random();
|
||||||
@ -318,8 +317,6 @@ static void group_topic_test(AutoTox *autotoxes)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "All tests passed!\n");
|
fprintf(stderr, "All tests passed!\n");
|
||||||
|
|
||||||
#endif /* VANILLA_NACL */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
@ -7,15 +7,8 @@
|
|||||||
#include "auto_test_support.h"
|
#include "auto_test_support.h"
|
||||||
#include "check_compat.h"
|
#include "check_compat.h"
|
||||||
|
|
||||||
static uint8_t const key[] = {
|
// Try to bootstrap for 20 seconds.
|
||||||
0x15, 0xE9, 0xC3, 0x09, 0xCF, 0xCB, 0x79, 0xFD,
|
#define NUM_ITERATIONS (unsigned)(20.0 / (ITERATION_INTERVAL / 1000.0))
|
||||||
0xDF, 0x0E, 0xBA, 0x05, 0x7D, 0xAB, 0xB4, 0x9F,
|
|
||||||
0xE1, 0x5F, 0x38, 0x03, 0xB1, 0xBF, 0xF0, 0x65,
|
|
||||||
0x36, 0xAE, 0x2E, 0x5B, 0xA5, 0xE4, 0x69, 0x0E,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Try to bootstrap for 30 seconds.
|
|
||||||
#define NUM_ITERATIONS (unsigned)(30.0 / (ITERATION_INTERVAL / 1000.0))
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
@ -24,13 +17,12 @@ int main(void)
|
|||||||
struct Tox_Options *opts = tox_options_new(nullptr);
|
struct Tox_Options *opts = tox_options_new(nullptr);
|
||||||
tox_options_set_udp_enabled(opts, false);
|
tox_options_set_udp_enabled(opts, false);
|
||||||
tox_options_set_proxy_type(opts, TOX_PROXY_TYPE_SOCKS5);
|
tox_options_set_proxy_type(opts, TOX_PROXY_TYPE_SOCKS5);
|
||||||
tox_options_set_proxy_host(opts, "localhost");
|
tox_options_set_proxy_host(opts, "127.0.0.1");
|
||||||
tox_options_set_proxy_port(opts, 51724);
|
tox_options_set_proxy_port(opts, 51724);
|
||||||
Tox *tox = tox_new_log(opts, nullptr, nullptr);
|
Tox *tox = tox_new_log(opts, nullptr, nullptr);
|
||||||
tox_options_free(opts);
|
tox_options_free(opts);
|
||||||
|
|
||||||
tox_add_tcp_relay(tox, "tox.ngc.zone", 33445, key, nullptr);
|
bootstrap_tox_live_network(tox, true);
|
||||||
tox_bootstrap(tox, "tox.ngc.zone", 33445, key, nullptr);
|
|
||||||
|
|
||||||
printf("Waiting for connection...\n");
|
printf("Waiting for connection...\n");
|
||||||
|
|
||||||
|
@ -7,15 +7,8 @@
|
|||||||
#include "auto_test_support.h"
|
#include "auto_test_support.h"
|
||||||
#include "check_compat.h"
|
#include "check_compat.h"
|
||||||
|
|
||||||
static uint8_t const key[] = {
|
// Try to bootstrap for 20 seconds.
|
||||||
0x15, 0xE9, 0xC3, 0x09, 0xCF, 0xCB, 0x79, 0xFD,
|
#define NUM_ITERATIONS (unsigned)(20.0 / (ITERATION_INTERVAL / 1000.0))
|
||||||
0xDF, 0x0E, 0xBA, 0x05, 0x7D, 0xAB, 0xB4, 0x9F,
|
|
||||||
0xE1, 0x5F, 0x38, 0x03, 0xB1, 0xBF, 0xF0, 0x65,
|
|
||||||
0x36, 0xAE, 0x2E, 0x5B, 0xA5, 0xE4, 0x69, 0x0E,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Try to bootstrap for 30 seconds.
|
|
||||||
#define NUM_ITERATIONS (unsigned)(30.0 / (ITERATION_INTERVAL / 1000.0))
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
@ -24,13 +17,12 @@ int main(void)
|
|||||||
struct Tox_Options *opts = tox_options_new(nullptr);
|
struct Tox_Options *opts = tox_options_new(nullptr);
|
||||||
tox_options_set_udp_enabled(opts, true);
|
tox_options_set_udp_enabled(opts, true);
|
||||||
tox_options_set_proxy_type(opts, TOX_PROXY_TYPE_SOCKS5);
|
tox_options_set_proxy_type(opts, TOX_PROXY_TYPE_SOCKS5);
|
||||||
tox_options_set_proxy_host(opts, "localhost");
|
tox_options_set_proxy_host(opts, "127.0.0.1");
|
||||||
tox_options_set_proxy_port(opts, 51724);
|
tox_options_set_proxy_port(opts, 51724);
|
||||||
Tox *tox = tox_new_log(opts, nullptr, nullptr);
|
Tox *tox = tox_new_log(opts, nullptr, nullptr);
|
||||||
tox_options_free(opts);
|
tox_options_free(opts);
|
||||||
|
|
||||||
tox_add_tcp_relay(tox, "tox.ngc.zone", 33445, key, nullptr);
|
bootstrap_tox_live_network(tox, true);
|
||||||
tox_bootstrap(tox, "tox.ngc.zone", 33445, key, nullptr);
|
|
||||||
|
|
||||||
printf("Waiting for connection...");
|
printf("Waiting for connection...");
|
||||||
|
|
||||||
|
@ -42,6 +42,7 @@ static void send_message_test(AutoTox *autotoxes)
|
|||||||
|
|
||||||
const size_t msgs_len = tox_max_message_length() + 1;
|
const size_t msgs_len = tox_max_message_length() + 1;
|
||||||
uint8_t *msgs = (uint8_t *)malloc(msgs_len);
|
uint8_t *msgs = (uint8_t *)malloc(msgs_len);
|
||||||
|
ck_assert(msgs != nullptr);
|
||||||
memset(msgs, MESSAGE_FILLER, msgs_len);
|
memset(msgs, MESSAGE_FILLER, msgs_len);
|
||||||
|
|
||||||
Tox_Err_Friend_Send_Message errm;
|
Tox_Err_Friend_Send_Message errm;
|
||||||
|
@ -31,31 +31,36 @@ static void handle_events_friend_message(Tox *tox, const Tox_Event_Friend_Messag
|
|||||||
|
|
||||||
static void dump_events(const char *path, const Tox_Events *events)
|
static void dump_events(const char *path, const Tox_Events *events)
|
||||||
{
|
{
|
||||||
if (want_dump_events) {
|
FILE *fh = fopen(path, "w");
|
||||||
FILE *fh = fopen(path, "w");
|
ck_assert(fh != nullptr);
|
||||||
ck_assert(fh != nullptr);
|
const uint32_t len = tox_events_bytes_size(events);
|
||||||
const uint32_t len = tox_events_bytes_size(events);
|
uint8_t *buf = (uint8_t *)malloc(len);
|
||||||
uint8_t *buf = (uint8_t *)malloc(len);
|
ck_assert(buf != nullptr);
|
||||||
ck_assert(buf != nullptr);
|
ck_assert(tox_events_get_bytes(events, buf));
|
||||||
tox_events_get_bytes(events, buf);
|
fwrite(buf, 1, len, fh);
|
||||||
fwrite(buf, 1, len, fh);
|
free(buf);
|
||||||
free(buf);
|
fclose(fh);
|
||||||
fclose(fh);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_events(const Tox_System *sys, Tox_Events *events)
|
static void print_events(const Tox_System *sys, Tox_Events *events)
|
||||||
{
|
{
|
||||||
const uint32_t size = tox_events_bytes_size(events);
|
const uint32_t size = tox_events_bytes_size(events);
|
||||||
|
|
||||||
uint8_t *bytes = (uint8_t *)malloc(size);
|
uint8_t *bytes1 = (uint8_t *)malloc(size);
|
||||||
ck_assert(bytes != nullptr);
|
uint8_t *bytes2 = (uint8_t *)malloc(size);
|
||||||
|
ck_assert(bytes1 != nullptr);
|
||||||
|
ck_assert(bytes2 != nullptr);
|
||||||
|
|
||||||
tox_events_get_bytes(events, bytes);
|
ck_assert(tox_events_get_bytes(events, bytes1));
|
||||||
|
ck_assert(tox_events_get_bytes(events, bytes2));
|
||||||
|
|
||||||
Tox_Events *events_copy = tox_events_load(sys, bytes, size);
|
// Make sure get_bytes is deterministic.
|
||||||
|
ck_assert(memcmp(bytes1, bytes2, size) == 0);
|
||||||
|
|
||||||
|
Tox_Events *events_copy = tox_events_load(sys, bytes1, size);
|
||||||
ck_assert(events_copy != nullptr);
|
ck_assert(events_copy != nullptr);
|
||||||
free(bytes);
|
free(bytes1);
|
||||||
|
free(bytes2);
|
||||||
|
|
||||||
ck_assert(tox_events_equal(sys, events, events_copy));
|
ck_assert(tox_events_equal(sys, events, events_copy));
|
||||||
|
|
||||||
@ -73,7 +78,9 @@ static bool await_message(Tox **toxes, const Tox_Dispatch *dispatch)
|
|||||||
// Check if tox 2 got the message from tox 1.
|
// Check if tox 2 got the message from tox 1.
|
||||||
Tox_Events *events = tox_events_iterate(toxes[1], false, nullptr);
|
Tox_Events *events = tox_events_iterate(toxes[1], false, nullptr);
|
||||||
|
|
||||||
dump_events("/tmp/test.mp", events);
|
if (want_dump_events) {
|
||||||
|
dump_events("/tmp/test.mp", events);
|
||||||
|
}
|
||||||
|
|
||||||
bool success = false;
|
bool success = false;
|
||||||
tox_dispatch_invoke(dispatch, events, toxes[1], &success);
|
tox_dispatch_invoke(dispatch, events, toxes[1], &success);
|
||||||
@ -164,13 +171,13 @@ static void test_tox_events(void)
|
|||||||
static void fake_test_unpack(void)
|
static void fake_test_unpack(void)
|
||||||
{
|
{
|
||||||
// TODO(Green-Sky): add proper unpack tests and/or implement ngc events
|
// TODO(Green-Sky): add proper unpack tests and/or implement ngc events
|
||||||
(void)tox_unpack_group_privacy_state;
|
(void)tox_group_privacy_state_unpack;
|
||||||
(void)tox_unpack_group_privacy_state;
|
(void)tox_group_privacy_state_unpack;
|
||||||
(void)tox_unpack_group_voice_state;
|
(void)tox_group_voice_state_unpack;
|
||||||
(void)tox_unpack_group_topic_lock;
|
(void)tox_group_topic_lock_unpack;
|
||||||
(void)tox_unpack_group_join_fail;
|
(void)tox_group_join_fail_unpack;
|
||||||
(void)tox_unpack_group_mod_event;
|
(void)tox_group_mod_event_unpack;
|
||||||
(void)tox_unpack_group_exit_type;
|
(void)tox_group_exit_type_unpack;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
@ -28,6 +28,15 @@ static bool await_message(Tox **toxes)
|
|||||||
const uint8_t *msg = tox_event_friend_message_get_message(msg_event);
|
const uint8_t *msg = tox_event_friend_message_get_message(msg_event);
|
||||||
ck_assert_msg(memcmp(msg, "hello", sizeof("hello")) == 0,
|
ck_assert_msg(memcmp(msg, "hello", sizeof("hello")) == 0,
|
||||||
"message was not expected 'hello' but '%s'", (const char *)msg);
|
"message was not expected 'hello' but '%s'", (const char *)msg);
|
||||||
|
|
||||||
|
const uint32_t event_count = tox_events_get_size(events);
|
||||||
|
for (uint32_t j = 0; j < event_count; ++j) {
|
||||||
|
const Tox_Event *event = tox_events_get(events, j);
|
||||||
|
if (tox_event_get_type(event) == TOX_EVENT_FRIEND_MESSAGE) {
|
||||||
|
ck_assert(tox_event_get_friend_message(event) == msg_event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tox_events_free(events);
|
tox_events_free(events);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1,62 +0,0 @@
|
|||||||
# Find and compile the GTest library.
|
|
||||||
|
|
||||||
include(CheckCXXCompilerFlag)
|
|
||||||
include(CheckIncludeFileCXX)
|
|
||||||
|
|
||||||
message(STATUS "Checking for gtest")
|
|
||||||
|
|
||||||
# Look for the sources.
|
|
||||||
find_file(GTEST_ALL_CC gtest-all.cc PATHS
|
|
||||||
${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/src
|
|
||||||
/usr/src/gtest/src
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
)
|
|
||||||
|
|
||||||
if(GTEST_ALL_CC)
|
|
||||||
# ../.. from the source file is the source root.
|
|
||||||
get_filename_component(GTEST_SRC_DIR ${GTEST_ALL_CC} DIRECTORY)
|
|
||||||
get_filename_component(GTEST_SRC_ROOT ${GTEST_SRC_DIR} DIRECTORY)
|
|
||||||
|
|
||||||
# Look for the header file.
|
|
||||||
include(CheckIncludeFileCXX)
|
|
||||||
include_directories(SYSTEM ${GTEST_SRC_ROOT}/include)
|
|
||||||
check_include_file_cxx("gtest/gtest.h" HAVE_GTEST_GTEST_H)
|
|
||||||
|
|
||||||
if(HAVE_GTEST_GTEST_H)
|
|
||||||
message(STATUS "Found gtest: ${GTEST_SRC_ROOT}")
|
|
||||||
|
|
||||||
add_library(gtest
|
|
||||||
${GTEST_SRC_DIR}/gtest-all.cc
|
|
||||||
${GTEST_SRC_DIR}/gtest_main.cc)
|
|
||||||
target_include_directories(gtest PRIVATE ${GTEST_SRC_ROOT})
|
|
||||||
|
|
||||||
# Ignore all warnings for gtest. We don't care about their implementation.
|
|
||||||
check_cxx_compiler_flag("-w" HAVE_CXX_W QUIET)
|
|
||||||
if(HAVE_CXX_W)
|
|
||||||
set_target_properties(gtest PROPERTIES COMPILE_FLAGS "-w")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(HAVE_GTEST TRUE)
|
|
||||||
set(TEST_CXX_FLAGS "")
|
|
||||||
|
|
||||||
check_cxx_compiler_flag("-Wno-global-constructors" HAVE_CXX_W_NO_GLOBAL_CONSTRUCTORS QUIET)
|
|
||||||
if(HAVE_CXX_W_NO_GLOBAL_CONSTRUCTORS)
|
|
||||||
set(TEST_CXX_FLAGS "${TEST_CXX_FLAGS} -Wno-global-constructors")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
check_cxx_compiler_flag("-Wno-zero-as-null-pointer-constant" HAVE_CXX_W_NO_ZERO_AS_NULL_POINTER_CONSTANT QUIET)
|
|
||||||
if(HAVE_CXX_W_NO_ZERO_AS_NULL_POINTER_CONSTANT)
|
|
||||||
set(TEST_CXX_FLAGS "${TEST_CXX_FLAGS} -Wno-zero-as-null-pointer-constant")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
function(unit_test subdir target)
|
|
||||||
if(HAVE_GTEST)
|
|
||||||
add_executable(unit_${target}_test ${subdir}/${target}_test.cc)
|
|
||||||
target_link_modules(unit_${target}_test toxcore gtest)
|
|
||||||
set_target_properties(unit_${target}_test PROPERTIES COMPILE_FLAGS "${TEST_CXX_FLAGS}")
|
|
||||||
add_test(NAME ${target} COMMAND ${CROSSCOMPILING_EMULATOR} unit_${target}_test)
|
|
||||||
set_property(TEST ${target} PROPERTY ENVIRONMENT "LLVM_PROFILE_FILE=${target}.profraw")
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
@ -8,19 +8,25 @@ include(ModulePackage)
|
|||||||
|
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_library(NSL_LIBRARIES nsl )
|
find_library(NSL_LIBRARIES nsl )
|
||||||
find_library(RT_LIBRARIES rt )
|
find_library(RT_LIBRARIES rt )
|
||||||
find_library(SOCKET_LIBRARIES socket )
|
find_library(SOCKET_LIBRARIES socket)
|
||||||
|
|
||||||
# For toxcore.
|
# For toxcore.
|
||||||
pkg_use_module(LIBSODIUM libsodium )
|
pkg_search_module(LIBSODIUM libsodium IMPORTED_TARGET)
|
||||||
|
|
||||||
# For toxav.
|
# For toxav.
|
||||||
pkg_use_module(OPUS "opus;Opus" )
|
pkg_search_module(OPUS opus IMPORTED_TARGET)
|
||||||
pkg_use_module(VPX "vpx;libvpx" )
|
if(NOT OPUS_FOUND)
|
||||||
|
pkg_search_module(OPUS Opus IMPORTED_TARGET)
|
||||||
|
endif()
|
||||||
|
pkg_search_module(VPX vpx IMPORTED_TARGET)
|
||||||
|
if(NOT VPX_FOUND)
|
||||||
|
pkg_search_module(VPX libvpx IMPORTED_TARGET)
|
||||||
|
endif()
|
||||||
|
|
||||||
# For tox-bootstrapd.
|
# For tox-bootstrapd.
|
||||||
pkg_use_module(LIBCONFIG libconfig )
|
pkg_search_module(LIBCONFIG libconfig IMPORTED_TARGET)
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
|
@ -21,41 +21,6 @@ endif()
|
|||||||
|
|
||||||
find_package(PkgConfig)
|
find_package(PkgConfig)
|
||||||
|
|
||||||
function(pkg_use_module mod pkgs)
|
|
||||||
foreach(pkg IN ITEMS ${pkgs})
|
|
||||||
if(PKG_CONFIG_FOUND)
|
|
||||||
pkg_search_module(${mod} ${pkg})
|
|
||||||
endif()
|
|
||||||
if(NOT ${mod}_FOUND)
|
|
||||||
find_package(${pkg} QUIET)
|
|
||||||
# This is very very ugly, but the variables are sometimes used in this scope
|
|
||||||
# and sometimes in the parent scope, so we have to set them to both places.
|
|
||||||
set(${mod}_FOUND ${${pkg}_FOUND})
|
|
||||||
set(${mod}_FOUND ${${pkg}_FOUND} PARENT_SCOPE)
|
|
||||||
set(${mod}_LIBRARIES ${${pkg}_LIBS})
|
|
||||||
set(${mod}_LIBRARIES ${${pkg}_LIBS} PARENT_SCOPE)
|
|
||||||
set(${mod}_LIBRARY_DIRS ${${pkg}_LIBRARY_DIRS})
|
|
||||||
set(${mod}_LIBRARY_DIRS ${${pkg}_LIBRARY_DIRS} PARENT_SCOPE)
|
|
||||||
set(${mod}_INCLUDE_DIRS ${${pkg}_INCLUDE_DIRS})
|
|
||||||
set(${mod}_INCLUDE_DIRS ${${pkg}_INCLUDE_DIRS} PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
if(${mod}_FOUND)
|
|
||||||
link_directories(${${mod}_LIBRARY_DIRS})
|
|
||||||
include_directories(${${mod}_INCLUDE_DIRS})
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${${mod}_CFLAGS_OTHER}" PARENT_SCOPE)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${${mod}_CFLAGS_OTHER}" PARENT_SCOPE)
|
|
||||||
|
|
||||||
if(NOT MSVC)
|
|
||||||
foreach(dir ${${mod}_INCLUDE_DIRS})
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -isystem ${dir}" PARENT_SCOPE)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem ${dir}" PARENT_SCOPE)
|
|
||||||
endforeach()
|
|
||||||
endif()
|
|
||||||
break()
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(add_module lib)
|
function(add_module lib)
|
||||||
set(${lib}_SOURCES ${ARGN} PARENT_SCOPE)
|
set(${lib}_SOURCES ${ARGN} PARENT_SCOPE)
|
||||||
|
|
||||||
@ -70,7 +35,7 @@ function(add_module lib)
|
|||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(install_module lib)
|
function(install_module lib)
|
||||||
if(ENABLE_SHARED)
|
if(TARGET ${lib}_shared)
|
||||||
set_target_properties(${lib}_shared PROPERTIES
|
set_target_properties(${lib}_shared PROPERTIES
|
||||||
VERSION ${SOVERSION}
|
VERSION ${SOVERSION}
|
||||||
SOVERSION ${SOVERSION_MAJOR}
|
SOVERSION ${SOVERSION_MAJOR}
|
||||||
@ -80,7 +45,7 @@ function(install_module lib)
|
|||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
endif()
|
endif()
|
||||||
if(ENABLE_STATIC)
|
if(TARGET ${lib}_static)
|
||||||
install(TARGETS ${lib}_static
|
install(TARGETS ${lib}_static
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
@ -113,59 +78,3 @@ function(install_module lib)
|
|||||||
install(FILES ${header} ${ARGN})
|
install(FILES ${header} ${ARGN})
|
||||||
endforeach()
|
endforeach()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(target_link_modules target)
|
|
||||||
# If the target we're adding dependencies to is a shared library, add it to
|
|
||||||
# the set of targets.
|
|
||||||
if(TARGET ${target}_shared)
|
|
||||||
set(_targets ${_targets} ${target}_shared)
|
|
||||||
# Shared libraries should first try to link against other shared libraries.
|
|
||||||
set(${target}_shared_primary shared)
|
|
||||||
# If that fails (because the shared target doesn't exist), try linking
|
|
||||||
# against the static library. This requires the static library's objects to
|
|
||||||
# be PIC.
|
|
||||||
set(${target}_shared_secondary static)
|
|
||||||
endif()
|
|
||||||
# It can also be a static library at the same time.
|
|
||||||
if(TARGET ${target}_static)
|
|
||||||
set(_targets ${_targets} ${target}_static)
|
|
||||||
# Static libraries aren't actually linked, but their dependencies are
|
|
||||||
# recorded by "linking" them. If we link an executable to a static library,
|
|
||||||
# we want to also link statically against its transitive dependencies.
|
|
||||||
set(${target}_static_primary static)
|
|
||||||
# If a dependency doesn't exist as static library, we link against the
|
|
||||||
# shared one.
|
|
||||||
set(${target}_static_secondary shared)
|
|
||||||
endif()
|
|
||||||
# If it's neither, then it's an executable.
|
|
||||||
if(NOT _targets)
|
|
||||||
set(_targets ${_targets} ${target})
|
|
||||||
# Executables preferably link against static libraries, so they are
|
|
||||||
# standalone and can be shipped without any external dependencies. As a
|
|
||||||
# frame of reference: tests become roughly 600-800K binaries instead of
|
|
||||||
# 50-100K on x86_64 Linux.
|
|
||||||
set(${target}_primary static)
|
|
||||||
set(${target}_secondary shared)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
foreach(dep ${ARGN})
|
|
||||||
foreach(_target ${_targets})
|
|
||||||
if(TARGET ${dep}_${${_target}_primary})
|
|
||||||
target_link_libraries(${_target} ${dep}_${${_target}_primary})
|
|
||||||
elseif(TARGET ${dep}_${${_target}_secondary})
|
|
||||||
target_link_libraries(${_target} ${dep}_${${_target}_secondary})
|
|
||||||
else()
|
|
||||||
# We record the modules linked to this target, so that we can collect
|
|
||||||
# them later when linking a composed module.
|
|
||||||
list(FIND LINK_MODULES ${dep} _index)
|
|
||||||
if(_index EQUAL -1)
|
|
||||||
set(LINK_MODULES ${LINK_MODULES} ${dep})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_link_libraries(${_target} ${dep})
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set(${target}_LINK_MODULES ${${target}_LINK_MODULES} ${LINK_MODULES} PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
130
configure.ac
130
configure.ac
@ -22,8 +22,6 @@ BUILD_AV="yes"
|
|||||||
BUILD_TESTING="yes"
|
BUILD_TESTING="yes"
|
||||||
|
|
||||||
LIBCONFIG_FOUND="no"
|
LIBCONFIG_FOUND="no"
|
||||||
WANT_NACL="no"
|
|
||||||
ADD_NACL_OBJECTS_TO_PKGCONFIG="yes"
|
|
||||||
SET_SO_VERSION="yes"
|
SET_SO_VERSION="yes"
|
||||||
|
|
||||||
AC_ARG_ENABLE([soname-versions],
|
AC_ARG_ENABLE([soname-versions],
|
||||||
@ -38,26 +36,11 @@ AC_ARG_ENABLE([soname-versions],
|
|||||||
)
|
)
|
||||||
AM_CONDITIONAL(SET_SO_VERSION, test "x$SET_SO_VERSION" = "xyes")
|
AM_CONDITIONAL(SET_SO_VERSION, test "x$SET_SO_VERSION" = "xyes")
|
||||||
|
|
||||||
AC_ARG_ENABLE([nacl],
|
|
||||||
[AC_HELP_STRING([--enable-nacl], [use nacl instead of libsodium (default: disabled)]) ],
|
|
||||||
[
|
|
||||||
if test "x$enableval" = "xno"; then
|
|
||||||
WANT_NACL="no"
|
|
||||||
elif test "x$enableval" = "xyes"; then
|
|
||||||
WANT_NACL="yes"
|
|
||||||
fi
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([randombytes-stir],
|
AC_ARG_ENABLE([randombytes-stir],
|
||||||
[AC_HELP_STRING([--enable-randombytes-stir], [use randombytes_stir() instead of sodium_init() for faster startup on android (default: disabled)]) ],
|
[AC_HELP_STRING([--enable-randombytes-stir], [use randombytes_stir() instead of sodium_init() for faster startup on android (default: disabled)]) ],
|
||||||
[
|
[
|
||||||
if test "x$enableval" = "xyes"; then
|
if test "x$enableval" = "xyes"; then
|
||||||
if test "x$WANT_NACL" = "xyes"; then
|
AC_DEFINE([USE_RANDOMBYTES_STIR], [1], [randombytes_stir() instead of sodium_init()])
|
||||||
AC_MSG_WARN([randombytes_stir() is not available with NaCl library])
|
|
||||||
else
|
|
||||||
AC_DEFINE([USE_RANDOMBYTES_STIR], [1], [randombytes_stir() instead of sodium_init()])
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@ -171,16 +154,6 @@ if test "$use_ipv6" != "yes"; then
|
|||||||
AC_DEFINE([USE_IPV6],[0],[define to 0 to force ipv4])
|
AC_DEFINE([USE_IPV6],[0],[define to 0 to force ipv4])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_ARG_ENABLE([[test_network]],
|
|
||||||
[AS_HELP_STRING([[--enable-test-network[=ARG]]], [build tox for a test network incompatible with the main DHT [no]])],
|
|
||||||
[use_test_network=${enableval}],
|
|
||||||
[use_test_network='no']
|
|
||||||
)
|
|
||||||
|
|
||||||
if test "$use_test_network" == "yes"; then
|
|
||||||
AC_DEFINE([USE_TEST_NETWORK],[1],[define to 1 to enable the test network])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AX_HAVE_EPOLL
|
AX_HAVE_EPOLL
|
||||||
if test "$enable_epoll" != "no"; then
|
if test "$enable_epoll" != "no"; then
|
||||||
if test "${ax_cv_have_epoll}" = "yes"; then
|
if test "${ax_cv_have_epoll}" = "yes"; then
|
||||||
@ -197,8 +170,6 @@ fi
|
|||||||
DEPSEARCH=
|
DEPSEARCH=
|
||||||
LIBSODIUM_SEARCH_HEADERS=
|
LIBSODIUM_SEARCH_HEADERS=
|
||||||
LIBSODIUM_SEARCH_LIBS=
|
LIBSODIUM_SEARCH_LIBS=
|
||||||
NACL_SEARCH_HEADERS=
|
|
||||||
NACL_SEARCH_LIBS=
|
|
||||||
|
|
||||||
AC_ARG_WITH(dependency-search,
|
AC_ARG_WITH(dependency-search,
|
||||||
AC_HELP_STRING([--with-dependency-search=DIR],
|
AC_HELP_STRING([--with-dependency-search=DIR],
|
||||||
@ -216,24 +187,6 @@ if test -n "$DEPSEARCH"; then
|
|||||||
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$DEPSEARCH/lib/pkgconfig
|
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$DEPSEARCH/lib/pkgconfig
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_ARG_WITH(nacl-headers,
|
|
||||||
AC_HELP_STRING([--with-nacl-headers=DIR],
|
|
||||||
[search for nacl<F2> header files in DIR]),
|
|
||||||
[
|
|
||||||
NACL_SEARCH_HEADERS="$withval"
|
|
||||||
AC_MSG_NOTICE([will search for nacl header files in $withval])
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_ARG_WITH(nacl-libs,
|
|
||||||
AC_HELP_STRING([--with-nacl-libs=DIR],
|
|
||||||
[search for nacl libraries in DIR]),
|
|
||||||
[
|
|
||||||
NACL_SEARCH_LIBS="$withval"
|
|
||||||
AC_MSG_NOTICE([will search for nacl libraries in $withval])
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_ARG_WITH(libsodium-headers,
|
AC_ARG_WITH(libsodium-headers,
|
||||||
AC_HELP_STRING([--with-libsodium-headers=DIR],
|
AC_HELP_STRING([--with-libsodium-headers=DIR],
|
||||||
[search for libsodium header files in DIR]),
|
[search for libsodium header files in DIR]),
|
||||||
@ -252,11 +205,6 @@ AC_ARG_WITH(libsodium-libs,
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
if test "x$WANT_NACL" = "xyes"; then
|
|
||||||
enable_shared=no
|
|
||||||
enable_static=yes
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Checks for programs.
|
# Checks for programs.
|
||||||
AC_PROG_CC_C99
|
AC_PROG_CC_C99
|
||||||
|
|
||||||
@ -287,7 +235,6 @@ case $host_os in
|
|||||||
LDFLAGS="$LDFLAGS -L/usr/local/lib"
|
LDFLAGS="$LDFLAGS -L/usr/local/lib"
|
||||||
CFLAGS="$CFLAGS -I/usr/local/include"
|
CFLAGS="$CFLAGS -I/usr/local/include"
|
||||||
CPPFLAGS="$CPPFLAGS -I/usr/local/include"
|
CPPFLAGS="$CPPFLAGS -I/usr/local/include"
|
||||||
ADD_NACL_OBJECTS_TO_PKGCONFIG="no"
|
|
||||||
;;
|
;;
|
||||||
darwin*)
|
darwin*)
|
||||||
MACH=yes
|
MACH=yes
|
||||||
@ -312,50 +259,7 @@ PKG_CHECK_MODULES([LIBSODIUM], [libsodium],
|
|||||||
LIBSODIUM_FOUND="no"
|
LIBSODIUM_FOUND="no"
|
||||||
])
|
])
|
||||||
|
|
||||||
if test "x$WANT_NACL" = "xyes"; then
|
if test "x$LIBSODIUM_FOUND" = "xno"; then
|
||||||
NACL_LIBS=
|
|
||||||
NACL_LDFLAGS=
|
|
||||||
NACL_OBJECTS=
|
|
||||||
NACL_OBJECTS_PKGCONFIG=
|
|
||||||
LDFLAGS_SAVE="$LDFLAGS"
|
|
||||||
if test -n "$NACL_SEARCH_LIBS"; then
|
|
||||||
LDFLAGS="-L$NACL_SEARCH_LIBS $LDFLAGS"
|
|
||||||
AC_CHECK_LIB(nacl, random,
|
|
||||||
[
|
|
||||||
NACL_LDFLAGS="-L$NACL_SEARCH_LIBS"
|
|
||||||
NACL_LIBS="-lnacl"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
AC_MSG_ERROR([library nacl was not found in requested location $NACL_SEARCH_LIBS])
|
|
||||||
]
|
|
||||||
)
|
|
||||||
else
|
|
||||||
AC_CHECK_LIB(nacl, random,
|
|
||||||
[],
|
|
||||||
[
|
|
||||||
AC_MSG_ERROR([you enabled nacl support, but library nacl was not found on your system])
|
|
||||||
]
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if (test -f "$NACL_SEARCH_LIBS/cpucycles.o") &&
|
|
||||||
(test -f "$NACL_SEARCH_LIBS/randombytes.o"); then
|
|
||||||
NACL_OBJECTS="$NACL_SEARCH_LIBS/cpucycles.o $NACL_SEARCH_LIBS/randombytes.o"
|
|
||||||
AC_MSG_NOTICE([found extra NaCl objects: $NACL_OBJECTS])
|
|
||||||
if test "x$ADD_NACL_OBJECTS_TO_PKGCONFIG" = "xyes"; then
|
|
||||||
AC_MSG_NOTICE([adding extra NaCl objects to pkg-config file])
|
|
||||||
NACL_OBJECTS_PKGCONFIG="$NACL_OBJECTS"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
AC_MSG_ERROR([required NaCl object files cpucycles.o randombytes.o not found, please specify their location using the --with-nacl-libs parameter])
|
|
||||||
fi
|
|
||||||
|
|
||||||
LDFLAGS="$LDFLAGS_SAVE"
|
|
||||||
AC_SUBST(NACL_LIBS)
|
|
||||||
AC_SUBST(NACL_LDFLAGS)
|
|
||||||
AC_SUBST(NACL_OBJECTS)
|
|
||||||
AC_SUBST(NACL_OBJECTS_PKGCONFIG)
|
|
||||||
elif test "x$LIBSODIUM_FOUND" = "xno"; then
|
|
||||||
LIBSODIUM_LIBS=
|
LIBSODIUM_LIBS=
|
||||||
LIBSODIUM_LDFLAGS=
|
LIBSODIUM_LDFLAGS=
|
||||||
LDFLAGS_SAVE="$LDFLAGS"
|
LDFLAGS_SAVE="$LDFLAGS"
|
||||||
@ -388,34 +292,7 @@ fi
|
|||||||
AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h stdint.h stdlib.h string.h sys/socket.h sys/time.h unistd.h])
|
AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h stdint.h stdlib.h string.h sys/socket.h sys/time.h unistd.h])
|
||||||
|
|
||||||
|
|
||||||
if test "x$WANT_NACL" = "xyes"; then
|
if test "x$LIBSODIUM_FOUND" = "xno"; then
|
||||||
NACL_CFLAGS=
|
|
||||||
CFLAGS_SAVE="$CFLAGS"
|
|
||||||
CPPFLAGS_SAVE="$CPPFLAGS"
|
|
||||||
if test -n "$NACL_SEARCH_HEADERS"; then
|
|
||||||
CFLAGS="-I$NACL_SEARCH_HEADERS $CFLAGS"
|
|
||||||
CPPFLAGS="-I$NACL_SEARCH_HEADERS $CPPFLAGS"
|
|
||||||
AC_CHECK_HEADER(crypto_box.h,
|
|
||||||
[
|
|
||||||
NACL_CFLAGS="-I$NACL_SEARCH_HEADERS"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
AC_MSG_ERROR([header files for library nacl were not found in requested location $NACL_SEARCH_HEADERS])
|
|
||||||
]
|
|
||||||
)
|
|
||||||
else
|
|
||||||
AC_CHECK_HEADER(crypto_box.h,
|
|
||||||
[],
|
|
||||||
[
|
|
||||||
AC_MSG_ERROR([you enabled nacl support, but nacl header files were not found on your system])
|
|
||||||
]
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
CFLAGS="$CFLAGS_SAVE"
|
|
||||||
CPPFLAGS="$CPPFLAGS_SAVE"
|
|
||||||
AC_SUBST(NACL_CFLAGS)
|
|
||||||
AC_DEFINE([VANILLA_NACL], [1], [use nacl instead of libsodium])
|
|
||||||
elif test "x$LIBSODIUM_FOUND" = "xno"; then
|
|
||||||
LIBSODIUM_CFLAGS=
|
LIBSODIUM_CFLAGS=
|
||||||
CFLAGS_SAVE="$CFLAGS"
|
CFLAGS_SAVE="$CFLAGS"
|
||||||
CPPFLAGS_SAVE="$CPPFLAGS"
|
CPPFLAGS_SAVE="$CPPFLAGS"
|
||||||
@ -555,7 +432,6 @@ AM_CONDITIONAL(BUILD_DHT_BOOTSTRAP, test "x$BUILD_DHT_BOOTSTRAP" = "xyes")
|
|||||||
AM_CONDITIONAL(BUILD_TESTS, test "x$BUILD_TESTS" = "xyes")
|
AM_CONDITIONAL(BUILD_TESTS, test "x$BUILD_TESTS" = "xyes")
|
||||||
AM_CONDITIONAL(BUILD_AV, test "x$BUILD_AV" = "xyes")
|
AM_CONDITIONAL(BUILD_AV, test "x$BUILD_AV" = "xyes")
|
||||||
AM_CONDITIONAL(BUILD_TESTING, test "x$BUILD_TESTING" = "xyes")
|
AM_CONDITIONAL(BUILD_TESTING, test "x$BUILD_TESTING" = "xyes")
|
||||||
AM_CONDITIONAL(WITH_NACL, test "x$WANT_NACL" = "xyes")
|
|
||||||
AM_CONDITIONAL(WIN32, test "x$WIN32" = "xyes")
|
AM_CONDITIONAL(WIN32, test "x$WIN32" = "xyes")
|
||||||
|
|
||||||
AC_CONFIG_FILES([Makefile
|
AC_CONFIG_FILES([Makefile
|
||||||
|
@ -1,100 +1,100 @@
|
|||||||
It has come to our attention that to achieve decent market penetration Tox
|
It has come to our attention that to achieve decent market penetration Tox
|
||||||
must work behind ALL internet connections, may they be behind enterprise NATs
|
must work behind ALL internet connections, may they be behind enterprise NATs
|
||||||
or any other bad network conditions.
|
or any other bad network conditions.
|
||||||
|
|
||||||
The people who have issues with the UDP direct connection approach seem to be a
|
The people who have issues with the UDP direct connection approach seem to be a
|
||||||
small minority though it is hard to estimate how many.
|
small minority though it is hard to estimate how many.
|
||||||
|
|
||||||
This means that routing their packets using good nodes on the network will
|
This means that routing their packets using good nodes on the network will
|
||||||
probably not take a huge toll on the network and will assure that people
|
probably not take a huge toll on the network and will assure that people
|
||||||
can use Tox regardless of the quality of their internet connection.
|
can use Tox regardless of the quality of their internet connection.
|
||||||
|
|
||||||
|
|
||||||
How it's going to work:
|
How it's going to work:
|
||||||
1. Alice, a Tox client on a TCP only network generates a temporary public key
|
1. Alice, a Tox client on a TCP only network generates a temporary public key
|
||||||
and connects to a bootstrap node.
|
and connects to a bootstrap node.
|
||||||
|
|
||||||
2. Using the bootstrap node she finds and connects to a couple (exact number
|
2. Using the bootstrap node she finds and connects to a couple (exact number
|
||||||
to be determined later) number of random nodes that have TCP relay support.
|
to be determined later) number of random nodes that have TCP relay support.
|
||||||
|
|
||||||
3. She uses the onion through the TCP relay connections to send friend requests
|
3. She uses the onion through the TCP relay connections to send friend requests
|
||||||
or tell online friends which TCP nodes she is connected to and her temporary
|
or tell online friends which TCP nodes she is connected to and her temporary
|
||||||
public key.
|
public key.
|
||||||
|
|
||||||
4. Bob receives an onion packet from Alice telling him which nodes she is
|
4. Bob receives an onion packet from Alice telling him which nodes she is
|
||||||
connected to. Bob connects to these nodes and establishes a routed connection
|
connected to. Bob connects to these nodes and establishes a routed connection
|
||||||
with Alice using that temporary public key.
|
with Alice using that temporary public key.
|
||||||
|
|
||||||
5. That connection is used by both to transmit encrypted Messenger and A/V
|
5. That connection is used by both to transmit encrypted Messenger and A/V
|
||||||
packets.
|
packets.
|
||||||
|
|
||||||
6. If one of the nodes shuts down while it is currently routing traffic, Alice
|
6. If one of the nodes shuts down while it is currently routing traffic, Alice
|
||||||
and bob just switch to one of the other nodes they are both connected to.
|
and bob just switch to one of the other nodes they are both connected to.
|
||||||
|
|
||||||
|
|
||||||
Detailed implementation details:
|
Detailed implementation details:
|
||||||
|
|
||||||
There are two distinct parts for TCP relays, the client part and the server
|
There are two distinct parts for TCP relays, the client part and the server
|
||||||
part.
|
part.
|
||||||
|
|
||||||
The server acts as the actual relay. Servers must have fully forwarded TCP
|
The server acts as the actual relay. Servers must have fully forwarded TCP
|
||||||
ports (NAT-PMP and uPNP can help here). The first port the server will try
|
ports (NAT-PMP and uPNP can help here). The first port the server will try
|
||||||
binding to is 443 followed by port 3389 and possibly some others. Onion packets
|
binding to is 443 followed by port 3389 and possibly some others. Onion packets
|
||||||
can be sent/received through the TCP servers.
|
can be sent/received through the TCP servers.
|
||||||
|
|
||||||
|
|
||||||
Server:
|
Server:
|
||||||
|
|
||||||
The public/private key pair the TCP server uses is the same one he uses for the
|
The public/private key pair the TCP server uses is the same one he uses for the
|
||||||
DHT.
|
DHT.
|
||||||
|
|
||||||
all crypto for communication with the server uses the crypto_box() function of
|
all crypto for communication with the server uses the crypto_box() function of
|
||||||
NaCl.
|
libsodium.
|
||||||
|
|
||||||
TCP doesn't have packets so what we will refer to as packets are sent this way:
|
TCP doesn't have packets so what we will refer to as packets are sent this way:
|
||||||
[[uint16_t (length of data)][data]]
|
[[uint16_t (length of data)][data]]
|
||||||
|
|
||||||
So if you would inspect the TCP stream you would see:
|
So if you would inspect the TCP stream you would see:
|
||||||
[[uint16_t (length of data)][data]][[uint16_t (length of
|
[[uint16_t (length of data)][data]][[uint16_t (length of
|
||||||
data)][data]][[uint16_t (length of data)][data]]
|
data)][data]][[uint16_t (length of data)][data]]
|
||||||
|
|
||||||
Note that both handshake packets don't have this format (the length for them is
|
Note that both handshake packets don't have this format (the length for them is
|
||||||
always the same so we don't need to specify it.)
|
always the same so we don't need to specify it.)
|
||||||
|
|
||||||
When the client connects to the server, he sends this packet:
|
When the client connects to the server, he sends this packet:
|
||||||
[public key of client (32 bytes)][nonce for the encrypted data [24
|
[public key of client (32 bytes)][nonce for the encrypted data [24
|
||||||
bytes]][encrypted with the private key of the client and public key of the
|
bytes]][encrypted with the private key of the client and public key of the
|
||||||
server and the nonce:[public key (32 bytes) and][base nonce we want the server
|
server and the nonce:[public key (32 bytes) and][base nonce we want the server
|
||||||
to use to encrypt the packets sent to us (24 bytes)]]
|
to use to encrypt the packets sent to us (24 bytes)]]
|
||||||
|
|
||||||
The server responds with:
|
The server responds with:
|
||||||
[nonce for the encrypted data [24 bytes]][encrypted with the public key of the
|
[nonce for the encrypted data [24 bytes]][encrypted with the public key of the
|
||||||
client and private key of the server and the nonce:[public key (32 bytes)
|
client and private key of the server and the nonce:[public key (32 bytes)
|
||||||
and][base nonce we want the client to use to encrypt the packets sent to us (24
|
and][base nonce we want the client to use to encrypt the packets sent to us (24
|
||||||
bytes)]]
|
bytes)]]
|
||||||
|
|
||||||
All packets to the server are end to end encrypted with the information
|
All packets to the server are end to end encrypted with the information
|
||||||
received
|
received
|
||||||
(and sent) in the handshake.
|
(and sent) in the handshake.
|
||||||
|
|
||||||
(first packet is encrypted with the base nonce the private key for which the
|
(first packet is encrypted with the base nonce the private key for which the
|
||||||
client sent the server the public key and the public key we sent to the client,
|
client sent the server the public key and the public key we sent to the client,
|
||||||
the next with base nonce + 1...)
|
the next with base nonce + 1...)
|
||||||
|
|
||||||
The connection is set to an unconfirmed state until a packet is received and
|
The connection is set to an unconfirmed state until a packet is received and
|
||||||
decrypted correctly using the information in the handshake.
|
decrypted correctly using the information in the handshake.
|
||||||
|
|
||||||
each packet sent to/from the server has an id (the first byte of the plain text
|
each packet sent to/from the server has an id (the first byte of the plain text
|
||||||
data of the packet.)
|
data of the packet.)
|
||||||
|
|
||||||
ids 0 to 15 are reserved for special packets, ids 16 to 255 are used to denote
|
ids 0 to 15 are reserved for special packets, ids 16 to 255 are used to denote
|
||||||
who we want the data to be routed to/who the packet is from.
|
who we want the data to be routed to/who the packet is from.
|
||||||
|
|
||||||
special ids and packets:
|
special ids and packets:
|
||||||
0 - Routing request.
|
0 - Routing request.
|
||||||
[uint8_t id (0)][public key (32 bytes)]
|
[uint8_t id (0)][public key (32 bytes)]
|
||||||
1 - Routing request response.
|
1 - Routing request response.
|
||||||
[uint8_t id (1)][uint8_t (rpid) 0 if refused, packet id if accepted][public key
|
[uint8_t id (1)][uint8_t (rpid) 0 if refused, packet id if accepted][public key
|
||||||
(32 bytes)]
|
(32 bytes)]
|
||||||
2 - Connect notification:
|
2 - Connect notification:
|
||||||
[uint8_t id (2)][uint8_t (packet id of connection that got connected)]
|
[uint8_t id (2)][uint8_t (packet id of connection that got connected)]
|
||||||
@ -108,44 +108,44 @@ special ids and packets:
|
|||||||
[uint8_t id (6)][destination public key (32 bytes)][data]
|
[uint8_t id (6)][destination public key (32 bytes)][data]
|
||||||
7 - OOB recv
|
7 - OOB recv
|
||||||
[uint8_t id (7)][senders public key (32 bytes)][data]
|
[uint8_t id (7)][senders public key (32 bytes)][data]
|
||||||
8 - onion packet (same format as initial onion packet (See: Prevent
|
8 - onion packet (same format as initial onion packet (See: Prevent
|
||||||
tracking.txt) but packet id is 8 instead of 128)
|
tracking.txt) but packet id is 8 instead of 128)
|
||||||
9 - onion packet response (same format as onion packet with id 142 but id is 9
|
9 - onion packet response (same format as onion packet with id 142 but id is 9
|
||||||
instead.)
|
instead.)
|
||||||
|
|
||||||
The rest of the special ids are reserved for possible future usage.
|
The rest of the special ids are reserved for possible future usage.
|
||||||
|
|
||||||
If the server receives a routing request he stores server side that the client
|
If the server receives a routing request he stores server side that the client
|
||||||
wants to connect to the person with that public key and sends back a Routing
|
wants to connect to the person with that public key and sends back a Routing
|
||||||
request response with the rpid along with the public key sent in the request.
|
request response with the rpid along with the public key sent in the request.
|
||||||
|
|
||||||
If for some reason the server must refuse the routing request (too many) he
|
If for some reason the server must refuse the routing request (too many) he
|
||||||
sends the response with a rpid of 0.
|
sends the response with a rpid of 0.
|
||||||
|
|
||||||
If the person who the client wants to connect to is also online and wants to
|
If the person who the client wants to connect to is also online and wants to
|
||||||
connect to the client a connect notification is sent to both with the
|
connect to the client a connect notification is sent to both with the
|
||||||
appropriate packet id.
|
appropriate packet id.
|
||||||
|
|
||||||
If either one disconnects, a disconnect notification is sent to the other with
|
If either one disconnects, a disconnect notification is sent to the other with
|
||||||
appropriate packet id.
|
appropriate packet id.
|
||||||
|
|
||||||
If a client sends a disconnect notification, the entry on the server for that
|
If a client sends a disconnect notification, the entry on the server for that
|
||||||
routed connection is cleared and a disconnect notification is sent to the peer
|
routed connection is cleared and a disconnect notification is sent to the peer
|
||||||
(if he was online)
|
(if he was online)
|
||||||
|
|
||||||
If the server receives an onion packet he handles it the same as he would if it
|
If the server receives an onion packet he handles it the same as he would if it
|
||||||
was one received normally via UDP, he must also assure himself that any
|
was one received normally via UDP, he must also assure himself that any
|
||||||
responses must be sent to the proper client.
|
responses must be sent to the proper client.
|
||||||
|
|
||||||
Ping responses must have the same ping_id as the request.
|
Ping responses must have the same ping_id as the request.
|
||||||
|
|
||||||
If the server receives a ping packet he must respond with a ping response.
|
If the server receives a ping packet he must respond with a ping response.
|
||||||
|
|
||||||
The server will send a ping packet to clients every 30 seconds, they have 30
|
The server will send a ping packet to clients every 30 seconds, they have 30
|
||||||
seconds to respond, if they don't the connection is deleted.
|
seconds to respond, if they don't the connection is deleted.
|
||||||
|
|
||||||
OOB send packets will be sent to the peer connected to the TCP server with the
|
OOB send packets will be sent to the peer connected to the TCP server with the
|
||||||
destination public key as a OOB recv packet. The client sending this packet has
|
destination public key as a OOB recv packet. The client sending this packet has
|
||||||
no way of knowing if the packet reached its destination.
|
no way of knowing if the packet reached its destination.
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Encryption library used: http://nacl.cr.yp.to/
|
Encryption library used: https://doc.libsodium.org/
|
||||||
|
|
||||||
|
|
||||||
When running the program for the first time the crypto_box_keypair() function is used to
|
When running the program for the first time the crypto_box_keypair() function is used to
|
||||||
generate the users public-private key pair. (32 bytes each)
|
generate the users public-private key pair. (32 bytes each)
|
||||||
|
|
||||||
The generated public key is set as the client_id of the peer.
|
The generated public key is set as the client_id of the peer.
|
||||||
@ -9,13 +9,13 @@ The generated public key is set as the client_id of the peer.
|
|||||||
Adding a friend
|
Adding a friend
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
Alice adds Bob to her friend list by adding his 32 byte public key (client_id) to her friend list.
|
Alice adds Bob to her friend list by adding his 32 byte public key (client_id) to her friend list.
|
||||||
2 cases:
|
2 cases:
|
||||||
case 1: Alice adds the public key of Bob, then Bob waits for Alice to attempt to connect to him.
|
case 1: Alice adds the public key of Bob, then Bob waits for Alice to attempt to connect to him.
|
||||||
case 2: Bob and Alice add their respective public keys to their friend lists at the same time.
|
case 2: Bob and Alice add their respective public keys to their friend lists at the same time.
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
Alice sends an onion data (see: Prevent_tracking.txt) packet to Bob with the encrypted part containing the friend request like so:
|
Alice sends an onion data (see: Prevent_tracking.txt) packet to Bob with the encrypted part containing the friend request like so:
|
||||||
```
|
```
|
||||||
[char with a value of 32][nospam number (4 bytes)][Message]
|
[char with a value of 32][nospam number (4 bytes)][Message]
|
||||||
```
|
```
|
||||||
@ -23,15 +23,15 @@ Alice sends an onion data (see: Prevent_tracking.txt) packet to Bob with the enc
|
|||||||
Ex message: hello Bob it's me Alice -_- add me pl0x.
|
Ex message: hello Bob it's me Alice -_- add me pl0x.
|
||||||
|
|
||||||
For more info on the nospam see: Spam_Prevention.txt
|
For more info on the nospam see: Spam_Prevention.txt
|
||||||
|
|
||||||
Bob receives the request and decrypts the message using the function crypto_box_open()
|
|
||||||
|
|
||||||
If the message decrypts successfully:
|
|
||||||
If Alice is already in Bob's friend list: case 2
|
|
||||||
If Alice is not in Bob's friend list and the nospam is good: Bob is prompt to add Alice and is shown the message from her.
|
|
||||||
If Bob accepts Alice friend request he adds her public key to his friend list.
|
|
||||||
|
|
||||||
case 2:
|
Bob receives the request and decrypts the message using the function crypto_box_open()
|
||||||
|
|
||||||
|
If the message decrypts successfully:
|
||||||
|
If Alice is already in Bob's friend list: case 2
|
||||||
|
If Alice is not in Bob's friend list and the nospam is good: Bob is prompt to add Alice and is shown the message from her.
|
||||||
|
If Bob accepts Alice friend request he adds her public key to his friend list.
|
||||||
|
|
||||||
|
case 2:
|
||||||
Bob and Alice both have the others public key in their friend list, they are ready for the next step: Connecting to an already added friend
|
Bob and Alice both have the others public key in their friend list, they are ready for the next step: Connecting to an already added friend
|
||||||
|
|
||||||
In the next step only crypto_box() is used for encryption and only crypto_box_open() for decryption (just like in the last step.)
|
In the next step only crypto_box() is used for encryption and only crypto_box_open() for decryption (just like in the last step.)
|
||||||
|
@ -7,5 +7,5 @@ Name: libtoxcore
|
|||||||
Description: Tox protocol library
|
Description: Tox protocol library
|
||||||
Requires:
|
Requires:
|
||||||
Version: @PACKAGE_VERSION@
|
Version: @PACKAGE_VERSION@
|
||||||
Libs: @NACL_OBJECTS_PKGCONFIG@ -L${libdir} -ltoxcore @NACL_LDFLAGS@ -ltoxencryptsave @NACL_LIBS@ @LIBS@ @MATH_LDFLAGS@ @PTHREAD_LDFLAGS@
|
Libs: -L${libdir} -ltoxcore -ltoxencryptsave @LIBS@ @MATH_LDFLAGS@ @PTHREAD_LDFLAGS@
|
||||||
Cflags: -I${includedir}
|
Cflags: -I${includedir}
|
||||||
|
@ -9,16 +9,12 @@ DHT_bootstrap_SOURCES = ../other/DHT_bootstrap.c \
|
|||||||
../other/bootstrap_node_packets.c
|
../other/bootstrap_node_packets.c
|
||||||
|
|
||||||
DHT_bootstrap_CFLAGS = -I$(top_srcdir)/other \
|
DHT_bootstrap_CFLAGS = -I$(top_srcdir)/other \
|
||||||
$(LIBSODIUM_CFLAGS) \
|
$(LIBSODIUM_CFLAGS)
|
||||||
$(NACL_CFLAGS)
|
|
||||||
|
|
||||||
DHT_bootstrap_LDADD = $(LIBSODIUM_LDFLAGS) \
|
DHT_bootstrap_LDADD = $(LIBSODIUM_LDFLAGS) \
|
||||||
$(NACL_LDFLAGS) \
|
|
||||||
libmisc_tools.la \
|
libmisc_tools.la \
|
||||||
libtoxcore.la \
|
libtoxcore.la \
|
||||||
$(LIBSODIUM_LIBS) \
|
$(LIBSODIUM_LIBS) \
|
||||||
$(NACL_OBJECTS) \
|
|
||||||
$(NACL_LIBS) \
|
|
||||||
$(WINSOCK2_LIBS)
|
$(WINSOCK2_LIBS)
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -8,9 +8,12 @@ set -e
|
|||||||
|
|
||||||
CPPCHECK=("--enable=all")
|
CPPCHECK=("--enable=all")
|
||||||
CPPCHECK+=("--inconclusive")
|
CPPCHECK+=("--inconclusive")
|
||||||
|
CPPCHECK+=("--check-level=exhaustive")
|
||||||
|
CPPCHECK+=("--inline-suppr")
|
||||||
|
CPPCHECK+=("--library=other/docker/cppcheck/toxcore.cfg")
|
||||||
CPPCHECK+=("--error-exitcode=1")
|
CPPCHECK+=("--error-exitcode=1")
|
||||||
# Used for VLA.
|
# We don't cast function pointers, which cppcheck suggests here.
|
||||||
CPPCHECK+=("--suppress=allocaCalled")
|
CPPCHECK+=("--suppress=constParameterCallback")
|
||||||
# False positives in switch statements.
|
# False positives in switch statements.
|
||||||
CPPCHECK+=("--suppress=knownConditionTrueFalse")
|
CPPCHECK+=("--suppress=knownConditionTrueFalse")
|
||||||
# Cppcheck does not need standard library headers to get proper results.
|
# Cppcheck does not need standard library headers to get proper results.
|
||||||
@ -19,27 +22,22 @@ CPPCHECK+=("--suppress=missingIncludeSystem")
|
|||||||
CPPCHECK+=("--suppress=signConversion")
|
CPPCHECK+=("--suppress=signConversion")
|
||||||
# TODO(iphydf): Fixed in the toxav refactor PR.
|
# TODO(iphydf): Fixed in the toxav refactor PR.
|
||||||
CPPCHECK+=("--suppress=redundantAssignment")
|
CPPCHECK+=("--suppress=redundantAssignment")
|
||||||
# We have some redundant nullptr checks in assertions
|
|
||||||
CPPCHECK+=("--suppress=nullPointerRedundantCheck")
|
|
||||||
# Triggers a false warning in group.c
|
|
||||||
CPPCHECK+=("--suppress=AssignmentAddressToInteger")
|
|
||||||
# TODO(sudden6): This triggers a false positive, check again later to enable it
|
|
||||||
CPPCHECK+=("--suppress=arrayIndexOutOfBoundsCond")
|
|
||||||
|
|
||||||
# We're a library. This only works on whole programs.
|
|
||||||
CPPCHECK_C=("--suppress=unusedFunction")
|
|
||||||
|
|
||||||
|
# We use this for VLAs.
|
||||||
|
CPPCHECK_CXX+=("--suppress=allocaCalled")
|
||||||
# False positive in auto_tests.
|
# False positive in auto_tests.
|
||||||
CPPCHECK_CXX+=("--suppress=shadowArgument")
|
|
||||||
CPPCHECK_CXX+=("--suppress=shadowFunction")
|
CPPCHECK_CXX+=("--suppress=shadowFunction")
|
||||||
# False positive for callback functions
|
# False positive in group.c.
|
||||||
CPPCHECK_CXX+=("--suppress=constParameter")
|
# Using cppcheck-suppress claims the suppression is unused.
|
||||||
|
CPPCHECK_CXX+=("--suppress=AssignmentAddressToInteger")
|
||||||
|
# We use C style casts because we write C code.
|
||||||
|
CPPCHECK_CXX+=("--suppress=cstyleCast")
|
||||||
# Used in Messenger.c for a static_assert(...)
|
# Used in Messenger.c for a static_assert(...)
|
||||||
CPPCHECK_CXX+=("--suppress=sizeofFunctionCall")
|
CPPCHECK_CXX+=("--suppress=sizeofFunctionCall")
|
||||||
|
|
||||||
run() {
|
run() {
|
||||||
echo "Running cppcheck in variant '$*'"
|
echo "Running cppcheck in variant '$*'"
|
||||||
cppcheck "${CPPCHECK[@]}" "${CPPCHECK_C[@]}" tox*/*.[ch] tox*/*/*.[ch] "${CPPFLAGS[@]}" "$@"
|
cppcheck -j8 "${CPPCHECK[@]}" "${CPPCHECK_C[@]}" tox*/*.[ch] tox*/*/*.[ch] "${CPPFLAGS[@]}" "$@"
|
||||||
cppcheck "${CPPCHECK[@]}" "${CPPCHECK_CXX[@]}" amalgamation.cc "${CPPFLAGS[@]}" "$@"
|
cppcheck "${CPPCHECK[@]}" "${CPPCHECK_CXX[@]}" amalgamation.cc "${CPPFLAGS[@]}" "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,14 @@ add_executable(tox-bootstrapd
|
|||||||
src/tox-bootstrapd.c
|
src/tox-bootstrapd.c
|
||||||
../bootstrap_node_packets.c
|
../bootstrap_node_packets.c
|
||||||
../bootstrap_node_packets.h)
|
../bootstrap_node_packets.h)
|
||||||
target_link_modules(tox-bootstrapd toxcore ${LIBCONFIG_LIBRARIES})
|
target_link_libraries(tox-bootstrapd PRIVATE ${LIBCONFIG_LIBRARIES})
|
||||||
|
target_link_directories(tox-bootstrapd PRIVATE ${LIBCONFIG_LIBRARY_DIRS})
|
||||||
|
target_include_directories(tox-bootstrapd SYSTEM PRIVATE ${LIBCONFIG_INCLUDE_DIRS})
|
||||||
|
target_compile_options(tox-bootstrapd PRIVATE ${LIBCONFIG_CFLAGS_OTHER})
|
||||||
|
if(TARGET toxcore_static)
|
||||||
|
target_link_libraries(tox-bootstrapd PRIVATE toxcore_static)
|
||||||
|
else()
|
||||||
|
target_link_libraries(tox-bootstrapd PRIVATE toxcore_shared)
|
||||||
|
endif()
|
||||||
install(TARGETS tox-bootstrapd RUNTIME DESTINATION bin)
|
install(TARGETS tox-bootstrapd RUNTIME DESTINATION bin)
|
||||||
install(FILES bash-completion/completions/tox-bootstrapd DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/bash-completion/completions")
|
install(FILES bash-completion/completions/tox-bootstrapd DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/bash-completion/completions")
|
||||||
|
@ -1 +1 @@
|
|||||||
21cf23b1a2e46712663dc4f8daa322991af51b9e82626a127cf1bc8dc583b598 /usr/local/bin/tox-bootstrapd
|
b0bd5099f2f77fbd540a5a929a23cece39ff95e3a66702a5381342d01775cbd3 /usr/local/bin/tox-bootstrapd
|
||||||
|
@ -24,17 +24,13 @@ tox_bootstrapd_SOURCES = \
|
|||||||
tox_bootstrapd_CFLAGS = \
|
tox_bootstrapd_CFLAGS = \
|
||||||
-I$(top_srcdir)/other/bootstrap_daemon \
|
-I$(top_srcdir)/other/bootstrap_daemon \
|
||||||
$(LIBSODIUM_CFLAGS) \
|
$(LIBSODIUM_CFLAGS) \
|
||||||
$(NACL_CFLAGS) \
|
|
||||||
$(LIBCONFIG_CFLAGS)
|
$(LIBCONFIG_CFLAGS)
|
||||||
|
|
||||||
tox_bootstrapd_LDADD = \
|
tox_bootstrapd_LDADD = \
|
||||||
$(LIBSODIUM_LDFLAGS) \
|
$(LIBSODIUM_LDFLAGS) \
|
||||||
$(NACL_LDFLAGS) \
|
|
||||||
libtoxcore.la \
|
libtoxcore.la \
|
||||||
$(LIBCONFIG_LIBS) \
|
$(LIBCONFIG_LIBS) \
|
||||||
$(LIBSODIUM_LIBS) \
|
$(LIBSODIUM_LIBS)
|
||||||
$(NACL_OBJECTS) \
|
|
||||||
$(NACL_LIBS)
|
|
||||||
|
|
||||||
bashcompdir = $(datarootdir)/bash-completion/completions
|
bashcompdir = $(datarootdir)/bash-completion/completions
|
||||||
dist_bashcomp_DATA = $(top_builddir)/other/bootstrap_daemon/bash-completion/completions/tox-bootstrapd
|
dist_bashcomp_DATA = $(top_builddir)/other/bootstrap_daemon/bash-completion/completions/tox-bootstrapd
|
||||||
|
@ -57,7 +57,7 @@ static void sleep_milliseconds(uint32_t ms)
|
|||||||
// returns 1 on success
|
// returns 1 on success
|
||||||
// 0 on failure - no keys were read or stored
|
// 0 on failure - no keys were read or stored
|
||||||
|
|
||||||
static int manage_keys(DHT *dht, char *keys_file_path)
|
static int manage_keys(DHT *dht, const char *keys_file_path)
|
||||||
{
|
{
|
||||||
enum { KEYS_SIZE = CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_SECRET_KEY_SIZE };
|
enum { KEYS_SIZE = CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_SECRET_KEY_SIZE };
|
||||||
uint8_t keys[KEYS_SIZE];
|
uint8_t keys[KEYS_SIZE];
|
||||||
|
@ -1,6 +1,27 @@
|
|||||||
################################################
|
################################################
|
||||||
# autotools-linux
|
# autotools-linux
|
||||||
FROM toxchat/nacl:latest
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||||
|
autoconf \
|
||||||
|
automake \
|
||||||
|
ca-certificates \
|
||||||
|
curl \
|
||||||
|
libconfig-dev \
|
||||||
|
libopus-dev \
|
||||||
|
libsodium-dev \
|
||||||
|
libtool \
|
||||||
|
libvpx-dev \
|
||||||
|
make \
|
||||||
|
pkg-config \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN groupadd -r -g 1000 builder \
|
||||||
|
&& useradd -m --no-log-init -r -g builder -u 1000 builder
|
||||||
|
USER builder
|
||||||
|
|
||||||
|
WORKDIR /home/builder
|
||||||
|
|
||||||
# Copy the sources and run the build.
|
# Copy the sources and run the build.
|
||||||
COPY --chown=builder:builder . /home/builder/c-toxcore/
|
COPY --chown=builder:builder . /home/builder/c-toxcore/
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
FROM toxchat/c-toxcore:sources AS src
|
FROM toxchat/c-toxcore:sources AS src
|
||||||
FROM ubuntu:22.04 AS build
|
FROM ubuntu:20.04 AS build
|
||||||
|
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
|
DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
|
||||||
|
ca-certificates \
|
||||||
clang \
|
clang \
|
||||||
cmake \
|
cmake \
|
||||||
|
curl \
|
||||||
gcc \
|
gcc \
|
||||||
git \
|
git \
|
||||||
golang \
|
golang-1.18 \
|
||||||
libconfig-dev \
|
libconfig-dev \
|
||||||
libgtest-dev \
|
libgtest-dev \
|
||||||
libopus-dev \
|
libopus-dev \
|
||||||
@ -22,10 +24,16 @@ RUN apt-get update && \
|
|||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
&& pip3 install --no-cache-dir gcovr
|
&& pip3 install --no-cache-dir gcovr
|
||||||
|
RUN ["strip", "-g",\
|
||||||
|
"/usr/lib/x86_64-linux-gnu/libgtest.a",\
|
||||||
|
"/usr/lib/x86_64-linux-gnu/libgtest_main.a"]
|
||||||
|
RUN ["curl", "-s", "https://codecov.io/bash", "-o", "/usr/local/bin/codecov"]
|
||||||
|
RUN ["chmod", "+x", "/usr/local/bin/codecov"]
|
||||||
|
|
||||||
ENV CC=clang \
|
ENV CC=clang \
|
||||||
CXX=clang++ \
|
CXX=clang++ \
|
||||||
PYTHONUNBUFFERED=1
|
PYTHONUNBUFFERED=1 \
|
||||||
|
PATH=$PATH:/usr/lib/go-1.18/bin
|
||||||
SHELL ["/bin/bash", "-c"]
|
SHELL ["/bin/bash", "-c"]
|
||||||
|
|
||||||
WORKDIR /work
|
WORKDIR /work
|
||||||
@ -41,26 +49,27 @@ RUN source .github/scripts/flags-coverage.sh \
|
|||||||
-DENABLE_SHARED=OFF \
|
-DENABLE_SHARED=OFF \
|
||||||
-DMIN_LOGGER_LEVEL=TRACE \
|
-DMIN_LOGGER_LEVEL=TRACE \
|
||||||
-DMUST_BUILD_TOXAV=ON \
|
-DMUST_BUILD_TOXAV=ON \
|
||||||
-DNON_HERMETIC_TESTS=ON \
|
-DNON_HERMETIC_TESTS=OFF \
|
||||||
-DSTRICT_ABI=ON \
|
-DSTRICT_ABI=ON \
|
||||||
-DAUTOTEST=ON \
|
-DAUTOTEST=ON \
|
||||||
-DPROXY_TEST=ON \
|
-DPROXY_TEST=ON \
|
||||||
-DUSE_IPV6=OFF \
|
-DUSE_IPV6=OFF \
|
||||||
-DTEST_TIMEOUT_SECONDS=30 \
|
-DTEST_TIMEOUT_SECONDS=40 \
|
||||||
&& cmake --build _build --parallel 8 --target install
|
&& cmake --build _build --parallel 8 --target install
|
||||||
|
|
||||||
WORKDIR /work/_build
|
WORKDIR /work/_build
|
||||||
RUN /work/proxy_server \
|
RUN /work/other/proxy/proxy_server \
|
||||||
& ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6
|
& (ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6 || \
|
||||||
|
ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6)
|
||||||
|
|
||||||
WORKDIR /work/mallocfail
|
WORKDIR /work/mallocfail
|
||||||
RUN ["git", "clone", "--depth=1", "https://github.com/ralight/mallocfail", "/work/mallocfail"]
|
RUN ["git", "clone", "--depth=1", "https://github.com/ralight/mallocfail", "/work/mallocfail"]
|
||||||
COPY run_mallocfail /usr/local/bin/
|
COPY other/docker/coverage/syscall_funcs.c src/
|
||||||
COPY syscall_funcs.c src/
|
|
||||||
RUN gcc -fPIC -shared -O2 -g3 -Wall -Ideps/uthash -Ideps/sha3 deps/*/*.c src/*.c -o mallocfail.so -ldl -lbacktrace \
|
RUN gcc -fPIC -shared -O2 -g3 -Wall -Ideps/uthash -Ideps/sha3 deps/*/*.c src/*.c -o mallocfail.so -ldl -lbacktrace \
|
||||||
&& install mallocfail.so /usr/local/lib/mallocfail.so
|
&& install mallocfail.so /usr/local/lib/mallocfail.so
|
||||||
|
|
||||||
WORKDIR /work/_build
|
WORKDIR /work/_build
|
||||||
|
COPY other/docker/coverage/run_mallocfail /usr/local/bin/
|
||||||
RUN ["run_mallocfail", "--ctest=2", "--jobs=8"]
|
RUN ["run_mallocfail", "--ctest=2", "--jobs=8"]
|
||||||
RUN ["gcovr", \
|
RUN ["gcovr", \
|
||||||
"--sort-percentage", \
|
"--sort-percentage", \
|
||||||
@ -74,6 +83,4 @@ RUN ["gcovr", \
|
|||||||
"--exclude=(.+/)?other/", \
|
"--exclude=(.+/)?other/", \
|
||||||
"--exclude=(.+/)?testing/"]
|
"--exclude=(.+/)?testing/"]
|
||||||
|
|
||||||
FROM nginx:alpine
|
WORKDIR /work
|
||||||
COPY --from=build /work/_build/html/coverage_details.html /usr/share/nginx/html/index.html
|
|
||||||
COPY --from=build /work/_build/html/ /usr/share/nginx/html/
|
|
||||||
|
5
other/docker/coverage/Dockerfile.nginx
Normal file
5
other/docker/coverage/Dockerfile.nginx
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# vim:ft=dockerfile
|
||||||
|
FROM toxchat/c-toxcore:coverage AS build
|
||||||
|
FROM nginx:alpine
|
||||||
|
COPY --from=build /work/_build/html/coverage_details.html /usr/share/nginx/html/index.html
|
||||||
|
COPY --from=build /work/_build/html/ /usr/share/nginx/html/
|
@ -1,7 +1,9 @@
|
|||||||
#!/bin/sh
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -eux
|
set -eux
|
||||||
|
|
||||||
|
read -a ci_env <<<"$(bash <(curl -s https://codecov.io/env))"
|
||||||
|
|
||||||
docker build -t toxchat/c-toxcore:sources -f other/docker/sources/Dockerfile .
|
docker build -t toxchat/c-toxcore:sources -f other/docker/sources/Dockerfile .
|
||||||
docker build -t toxchat/c-toxcore:coverage other/docker/coverage
|
docker build -t toxchat/c-toxcore:coverage -f other/docker/coverage/Dockerfile .
|
||||||
docker run --name toxcore-coverage --rm -it -p "28192:80" toxchat/c-toxcore:coverage
|
docker run "${ci_env[@]}" -e CI=true --name toxcore-coverage --rm -t toxchat/c-toxcore:coverage /usr/local/bin/codecov -x "llvm-cov gcov"
|
||||||
|
@ -39,8 +39,8 @@ _ENV = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def run_mallocfail(tmpdir: str, timeout: float, exe: str,
|
def run_mallocfail(tmpdir: str, timeout: float, exe: str, iteration: int,
|
||||||
iteration: int) -> bool:
|
keep_going: bool) -> bool:
|
||||||
"""Run a program with mallocfail."""
|
"""Run a program with mallocfail."""
|
||||||
print(f"\x1b[1;33mmallocfail '{exe}' run #{iteration}\x1b[0m")
|
print(f"\x1b[1;33mmallocfail '{exe}' run #{iteration}\x1b[0m")
|
||||||
hashes = os.path.join(tmpdir, _HASHES)
|
hashes = os.path.join(tmpdir, _HASHES)
|
||||||
@ -73,7 +73,8 @@ def run_mallocfail(tmpdir: str, timeout: float, exe: str,
|
|||||||
print(
|
print(
|
||||||
f"\x1b[1;32mProgram '{exe}' failed to handle OOM situation cleanly\x1b[0m"
|
f"\x1b[1;32mProgram '{exe}' failed to handle OOM situation cleanly\x1b[0m"
|
||||||
)
|
)
|
||||||
raise Exception("Aborting test")
|
if not keep_going:
|
||||||
|
raise Exception("Aborting test")
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -95,7 +96,8 @@ def find_prog(name: str) -> Tuple[Optional[str], ...]:
|
|||||||
return path
|
return path
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return (attempt(f"./unit_{name}_test"), attempt(f"./auto_{name}_test"))
|
return (attempt(f"./unit_{name}_test"),
|
||||||
|
attempt(f"auto_tests/auto_{name}_test"))
|
||||||
|
|
||||||
|
|
||||||
def parse_flags(args: List[str]) -> Tuple[Dict[str, str], List[str]]:
|
def parse_flags(args: List[str]) -> Tuple[Dict[str, str], List[str]]:
|
||||||
@ -110,15 +112,19 @@ def parse_flags(args: List[str]) -> Tuple[Dict[str, str], List[str]]:
|
|||||||
return flags, exes
|
return flags, exes
|
||||||
|
|
||||||
|
|
||||||
def loop_mallocfail(tmpdir: str, timeout: float, exe: str) -> None:
|
def loop_mallocfail(tmpdir: str,
|
||||||
|
timeout: float,
|
||||||
|
exe: str,
|
||||||
|
keep_going: bool = False) -> None:
|
||||||
i = 1
|
i = 1
|
||||||
while run_mallocfail(tmpdir, timeout, exe, i):
|
while run_mallocfail(tmpdir, timeout, exe, i, keep_going):
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
|
|
||||||
def isolated_mallocfail(timeout: int, exe: str) -> None:
|
def isolated_mallocfail(timeout: int, exe: str) -> None:
|
||||||
with tempfile.TemporaryDirectory(prefix="mallocfail") as tmpdir:
|
with tempfile.TemporaryDirectory(prefix="mallocfail") as tmpdir:
|
||||||
print(f"\x1b[1;33mRunning for {exe} in isolated path {tmpdir}\x1b[0m")
|
print(f"\x1b[1;33mRunning for {exe} in isolated path {tmpdir}\x1b[0m")
|
||||||
|
os.mkdir(os.path.join(tmpdir, "auto_tests"))
|
||||||
shutil.copy(exe, os.path.join(tmpdir, exe))
|
shutil.copy(exe, os.path.join(tmpdir, exe))
|
||||||
shutil.copy(_HASHES, os.path.join(tmpdir, _HASHES))
|
shutil.copy(_HASHES, os.path.join(tmpdir, _HASHES))
|
||||||
loop_mallocfail(tmpdir, timeout, exe)
|
loop_mallocfail(tmpdir, timeout, exe)
|
||||||
@ -149,7 +155,7 @@ def main(args: List[str]) -> None:
|
|||||||
# such as llvm_gcov_init fail.
|
# such as llvm_gcov_init fail.
|
||||||
if os.path.exists(_PRIMER):
|
if os.path.exists(_PRIMER):
|
||||||
print(f"\x1b[1;33mPriming hashes with unit_util_test\x1b[0m")
|
print(f"\x1b[1;33mPriming hashes with unit_util_test\x1b[0m")
|
||||||
loop_mallocfail(".", timeout, _PRIMER)
|
loop_mallocfail(".", timeout, _PRIMER, keep_going=True)
|
||||||
|
|
||||||
print(f"\x1b[1;33m--------------------------------\x1b[0m")
|
print(f"\x1b[1;33m--------------------------------\x1b[0m")
|
||||||
print(f"\x1b[1;33mStarting mallocfail for {len(exes)} programs:\x1b[0m")
|
print(f"\x1b[1;33mStarting mallocfail for {len(exes)} programs:\x1b[0m")
|
||||||
|
8
other/docker/coverage/serve
Executable file
8
other/docker/coverage/serve
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
docker build -t toxchat/c-toxcore:sources -f other/docker/sources/Dockerfile .
|
||||||
|
docker build -t toxchat/c-toxcore:coverage -f other/docker/coverage/Dockerfile .
|
||||||
|
docker build -t toxchat/c-toxcore:coverage-nginx -f other/docker/coverage/Dockerfile.nginx other/docker/coverage
|
||||||
|
docker run --name toxcore-coverage --rm -it -p "28192:80" toxchat/c-toxcore:coverage-nginx
|
30
other/docker/cppcheck/Dockerfile
Normal file
30
other/docker/cppcheck/Dockerfile
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
FROM alpine:3.19.0
|
||||||
|
|
||||||
|
RUN ["apk", "add", "--no-cache", \
|
||||||
|
"bash", \
|
||||||
|
"cppcheck", \
|
||||||
|
"findutils", \
|
||||||
|
"libconfig-dev", \
|
||||||
|
"libsodium-dev", \
|
||||||
|
"libvpx-dev", \
|
||||||
|
"linux-headers", \
|
||||||
|
"make", \
|
||||||
|
"opus-dev"]
|
||||||
|
|
||||||
|
COPY other/bootstrap_daemon/ /src/workspace/c-toxcore/other/bootstrap_daemon/
|
||||||
|
COPY other/bootstrap_node_packets.* /src/workspace/c-toxcore/other/
|
||||||
|
COPY other/fun/ /src/workspace/c-toxcore/other/fun/
|
||||||
|
COPY auto_tests/check_compat.h /src/workspace/c-toxcore/auto_tests/
|
||||||
|
COPY testing/ /src/workspace/c-toxcore/testing/
|
||||||
|
COPY toxav/ /src/workspace/c-toxcore/toxav/
|
||||||
|
COPY toxcore/ /src/workspace/c-toxcore/toxcore/
|
||||||
|
COPY toxencryptsave/ /src/workspace/c-toxcore/toxencryptsave/
|
||||||
|
COPY third_party/cmp/cmp.h /src/workspace/c-toxcore/third_party/cmp/
|
||||||
|
COPY other/analysis/run-cppcheck \
|
||||||
|
other/analysis/gen-file.sh \
|
||||||
|
other/analysis/variants.sh \
|
||||||
|
/src/workspace/c-toxcore/other/analysis/
|
||||||
|
COPY other/docker/cppcheck/toxcore.cfg \
|
||||||
|
/src/workspace/c-toxcore/other/docker/cppcheck/
|
||||||
|
WORKDIR /src/workspace/c-toxcore
|
||||||
|
RUN ["other/analysis/run-cppcheck"]
|
5
other/docker/cppcheck/run
Executable file
5
other/docker/cppcheck/run
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
BUILD=cppcheck
|
||||||
|
docker build -t "toxchat/c-toxcore:$BUILD" -f "other/docker/$BUILD/Dockerfile" .
|
117
other/docker/cppcheck/toxcore.cfg
Normal file
117
other/docker/cppcheck/toxcore.cfg
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<def format="2">
|
||||||
|
<memory>
|
||||||
|
<alloc init="false" buffer-size="malloc:2">mem_balloc</alloc>
|
||||||
|
<alloc init="true" buffer-size="malloc:2">mem_alloc</alloc>
|
||||||
|
<alloc init="true" buffer-size="calloc:2,3">mem_valloc</alloc>
|
||||||
|
<realloc init="false" buffer-size="calloc:3,4">mem_vrealloc</realloc>
|
||||||
|
<dealloc arg="2">mem_delete</dealloc>
|
||||||
|
</memory>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">bin_pack_new</alloc>
|
||||||
|
<dealloc arg="1">bin_pack_free</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">bin_unpack_new</alloc>
|
||||||
|
<dealloc arg="1">bin_unpack_free</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">friendreq_new</alloc>
|
||||||
|
<dealloc arg="1">friendreq_kill</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">logger_new</alloc>
|
||||||
|
<dealloc arg="1">logger_kill</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">mono_time_new</alloc>
|
||||||
|
<dealloc arg="1">mono_time_free</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">ping_array_new</alloc>
|
||||||
|
<dealloc arg="1">ping_array_kill</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">ping_new</alloc>
|
||||||
|
<dealloc arg="1">ping_kill</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">shared_key_cache_new</alloc>
|
||||||
|
<dealloc arg="1">shared_key_cache_free</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">tox_dispatch_new</alloc>
|
||||||
|
<dealloc arg="1">tox_dispatch_free</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">tox_new</alloc>
|
||||||
|
<dealloc arg="1">tox_kill</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">tox_options_new</alloc>
|
||||||
|
<dealloc arg="1">tox_options_free</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_announcements</alloc>
|
||||||
|
<dealloc arg="1">kill_announcements</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_dht</alloc>
|
||||||
|
<dealloc arg="1">kill_dht</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_dht_groupchats</alloc>
|
||||||
|
<dealloc arg="1">kill_dht_groupchats</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_forwarding</alloc>
|
||||||
|
<dealloc arg="1">kill_forwarding</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_friend_connections</alloc>
|
||||||
|
<dealloc arg="1">kill_friend_connections</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_gca_list</alloc>
|
||||||
|
<dealloc arg="1">kill_gca_list</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_groupchats</alloc>
|
||||||
|
<dealloc arg="1">kill_groupchats</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_messenger</alloc>
|
||||||
|
<dealloc arg="1">kill_messenger</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_net_crypto</alloc>
|
||||||
|
<dealloc arg="1">kill_net_crypto</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_networking_ex</alloc>
|
||||||
|
<alloc init="true">new_networking_no_udp</alloc>
|
||||||
|
<dealloc arg="1">kill_networking</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_onion</alloc>
|
||||||
|
<dealloc arg="1">kill_onion</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_onion_announce</alloc>
|
||||||
|
<dealloc arg="1">kill_onion_announce</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_onion_client</alloc>
|
||||||
|
<dealloc arg="1">kill_onion_client</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_tcp_connections</alloc>
|
||||||
|
<dealloc arg="1">kill_tcp_connections</dealloc>
|
||||||
|
</resource>
|
||||||
|
<resource>
|
||||||
|
<alloc init="true">new_tcp_server</alloc>
|
||||||
|
<dealloc arg="1">kill_tcp_server</dealloc>
|
||||||
|
</resource>
|
||||||
|
</def>
|
||||||
|
<!-- vim:ft=xml
|
||||||
|
-->
|
15
other/docker/esp32/BUILD.bazel
Normal file
15
other/docker/esp32/BUILD.bazel
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
load("@rules_cc//cc:defs.bzl", "cc_binary")
|
||||||
|
|
||||||
|
cc_binary(
|
||||||
|
name = "host_main",
|
||||||
|
testonly = 1,
|
||||||
|
srcs = [
|
||||||
|
"host_main.cc",
|
||||||
|
"main/tox_main.cc",
|
||||||
|
"main/tox_main.h",
|
||||||
|
],
|
||||||
|
deps = [
|
||||||
|
"//c-toxcore/toxcore:tox",
|
||||||
|
"//c-toxcore/toxcore:tox_events",
|
||||||
|
],
|
||||||
|
)
|
@ -1,48 +1,32 @@
|
|||||||
FROM toxchat/c-toxcore:sources AS src
|
FROM mluis/qemu-esp32:latest
|
||||||
FROM ubuntu:18.04
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
ENV IDF_TARGET=esp32
|
||||||
|
|
||||||
RUN apt-get update && \
|
WORKDIR /root/toxcore
|
||||||
DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
|
|
||||||
bison \
|
|
||||||
ccache \
|
|
||||||
cmake \
|
|
||||||
flex \
|
|
||||||
git \
|
|
||||||
gperf \
|
|
||||||
libncurses-dev \
|
|
||||||
ninja-build \
|
|
||||||
python \
|
|
||||||
python-cryptography \
|
|
||||||
python-future \
|
|
||||||
python-pip \
|
|
||||||
python-pyparsing \
|
|
||||||
python-serial \
|
|
||||||
python-setuptools \
|
|
||||||
wget \
|
|
||||||
&& apt-get clean \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
ENV ESP32_TARBALL=xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0 \
|
# Build an initial bootstrap hello world just to compile libsodium and other
|
||||||
IDF_PATH="/root/esp/esp-idf" \
|
# system level dependencies.
|
||||||
PATH="/root/esp/esp-idf/tools:/root/esp/xtensa-esp32-elf/bin:$PATH"
|
COPY other/docker/esp32/sdkconfig \
|
||||||
WORKDIR /root/esp
|
other/docker/esp32/CMakeLists.txt \
|
||||||
RUN wget -q https://dl.espressif.com/dl/$ESP32_TARBALL.tar.gz \
|
/root/toxcore/
|
||||||
&& tar zxf $ESP32_TARBALL.tar.gz \
|
COPY other/docker/esp32/bootstrap/ \
|
||||||
&& rm -f $ESP32_TARBALL.tar.gz \
|
/root/toxcore/main/
|
||||||
&& git clone -b v3.3 --recursive --depth=1 --shallow-submodules https://github.com/espressif/esp-idf
|
RUN . /root/esp/esp-idf/export.sh && idf.py build
|
||||||
|
|
||||||
# Build a hello world first, so the OS and libsodium etc. are compiled.
|
# Copy over toxcore sources and build those.
|
||||||
WORKDIR /root/esp/toxcore
|
COPY third_party/cmp/ /root/toxcore/main/third_party/cmp/
|
||||||
COPY other/docker/esp32/CMakeLists.txt /root/esp/toxcore/
|
COPY toxencryptsave/defines.h /root/toxcore/main/toxencryptsave/
|
||||||
COPY other/docker/esp32/hello/ /root/esp/toxcore/main/
|
COPY toxcore/ /root/toxcore/main/toxcore/
|
||||||
RUN idf.py build
|
COPY other/docker/esp32/main/CMakeLists.txt \
|
||||||
|
/root/toxcore/main/
|
||||||
# Then copy over the actual toxcore sources and build those.
|
COPY other/docker/esp32/main/*.cc \
|
||||||
COPY --from=src /src/third_party/cmp/ /root/esp/toxcore/main/third_party/cmp/
|
other/docker/esp32/main/*.h \
|
||||||
COPY --from=src /src/toxencryptsave/defines.h /root/esp/toxcore/main/toxencryptsave/
|
/root/toxcore/main/other/docker/esp32/main/
|
||||||
COPY --from=src /src/toxcore/ /root/esp/toxcore/main/toxcore/
|
RUN touch /root/toxcore/main/CMakeLists.txt \
|
||||||
COPY other/docker/esp32/toxcore/CMakeLists.txt /root/esp/toxcore/main/
|
&& . /root/esp/esp-idf/export.sh && idf.py build
|
||||||
COPY other/docker/esp32/toxcore/toxcore_main.cc /root/esp/toxcore/main/other/docker/esp32/main/
|
|
||||||
RUN idf.py build
|
|
||||||
RUN ls -lh build/toxcore.bin \
|
RUN ls -lh build/toxcore.bin \
|
||||||
&& shasum build/toxcore.bin
|
&& sha512sum build/toxcore.bin
|
||||||
|
RUN /root/flash.sh build/toxcore.bin
|
||||||
|
|
||||||
|
COPY other/docker/esp32/qemu-test /root/toxcore/
|
||||||
|
RUN ["/root/toxcore/qemu-test"]
|
||||||
|
4
other/docker/esp32/bootstrap/CMakeLists.txt
Normal file
4
other/docker/esp32/bootstrap/CMakeLists.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
idf_component_register(
|
||||||
|
SRCS hello_main.cc
|
||||||
|
INCLUDE_DIRS "."
|
||||||
|
REQUIRES esp_netif lwip)
|
4
other/docker/esp32/bootstrap/hello_main.cc
Normal file
4
other/docker/esp32/bootstrap/hello_main.cc
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// Bootstrap main. Only writes hello world. See ../main/ for the real thing.
|
||||||
|
extern "C" void app_main(void) { printf("Hello world!\n"); }
|
2
other/docker/esp32/bootstrap/idf_component.yml
Normal file
2
other/docker/esp32/bootstrap/idf_component.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
dependencies:
|
||||||
|
espressif/libsodium: "==1.0.20"
|
@ -1,4 +0,0 @@
|
|||||||
set(COMPONENT_SRCS "hello_main.c")
|
|
||||||
set(COMPONENT_ADD_INCLUDEDIRS "")
|
|
||||||
|
|
||||||
register_component()
|
|
@ -1,6 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
void app_main(void)
|
|
||||||
{
|
|
||||||
printf("Hello world!\n");
|
|
||||||
}
|
|
3
other/docker/esp32/host_main.cc
Normal file
3
other/docker/esp32/host_main.cc
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#include "main/tox_main.h"
|
||||||
|
|
||||||
|
int main() { tox_main(); }
|
16
other/docker/esp32/main/CMakeLists.txt
Normal file
16
other/docker/esp32/main/CMakeLists.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-field-initializers -Wno-format -DMIN_LOGGER_LEVEL=LOGGER_LEVEL_TRACE")
|
||||||
|
|
||||||
|
file(GLOB toxcore_SRCS "toxcore/*.[ch]" "toxcore/*/*.[ch]")
|
||||||
|
set(COMPONENT_SRCS
|
||||||
|
${toxcore_SRCS}
|
||||||
|
other/docker/esp32/main/app_main.cc
|
||||||
|
other/docker/esp32/main/tox_main.cc
|
||||||
|
other/docker/esp32/main/tox_main.h
|
||||||
|
third_party/cmp/cmp.c
|
||||||
|
third_party/cmp/cmp.h
|
||||||
|
toxencryptsave/defines.h)
|
||||||
|
|
||||||
|
idf_component_register(
|
||||||
|
SRCS ${COMPONENT_SRCS}
|
||||||
|
INCLUDE_DIRS "."
|
||||||
|
REQUIRES esp_eth esp_netif lwip)
|
73
other/docker/esp32/main/app_main.cc
Normal file
73
other/docker/esp32/main/app_main.cc
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
#include <esp_eth.h>
|
||||||
|
#include <esp_event.h>
|
||||||
|
#include <esp_log.h>
|
||||||
|
#include <esp_netif.h>
|
||||||
|
#include <esp_netif_sntp.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#include "tox_main.h"
|
||||||
|
|
||||||
|
static const char *MAIN_TAG = "app_main";
|
||||||
|
static constexpr int NTP_TIMEOUT = 60; // 1 minute
|
||||||
|
|
||||||
|
static esp_eth_handle_t eth_handle = nullptr;
|
||||||
|
static esp_netif_t *eth_netif = nullptr;
|
||||||
|
|
||||||
|
static void event_handler(
|
||||||
|
void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
|
||||||
|
{
|
||||||
|
if (event_base == ETH_EVENT) {
|
||||||
|
if (event_id == ETHERNET_EVENT_START) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event_id == ETHERNET_EVENT_STOP) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (event_base == IP_EVENT) {
|
||||||
|
if (event_id == IP_EVENT_ETH_GOT_IP) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void register_ethernet(void)
|
||||||
|
{
|
||||||
|
ESP_ERROR_CHECK(esp_netif_init());
|
||||||
|
ESP_ERROR_CHECK(esp_event_loop_create_default());
|
||||||
|
esp_netif_config_t cfg = ESP_NETIF_DEFAULT_ETH();
|
||||||
|
eth_netif = esp_netif_new(&cfg);
|
||||||
|
|
||||||
|
eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
|
||||||
|
eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
|
||||||
|
esp_eth_mac_t *mac = esp_eth_mac_new_openeth(&mac_config);
|
||||||
|
|
||||||
|
esp_eth_phy_t *phy = esp_eth_phy_new_dp83848(&phy_config);
|
||||||
|
|
||||||
|
esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
|
||||||
|
ESP_ERROR_CHECK(esp_eth_driver_install(&config, ð_handle));
|
||||||
|
ESP_ERROR_CHECK(esp_netif_attach(eth_netif, esp_eth_new_netif_glue(eth_handle)));
|
||||||
|
ESP_ERROR_CHECK(esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL));
|
||||||
|
ESP_ERROR_CHECK(
|
||||||
|
esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &event_handler, NULL));
|
||||||
|
ESP_ERROR_CHECK(esp_eth_start(eth_handle));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Does all the esp32-specific init before running generic tox code.
|
||||||
|
extern "C" void app_main(void)
|
||||||
|
{
|
||||||
|
register_ethernet();
|
||||||
|
|
||||||
|
esp_sntp_config_t config = ESP_NETIF_SNTP_DEFAULT_CONFIG("pool.ntp.org");
|
||||||
|
ESP_ERROR_CHECK(esp_netif_sntp_init(&config));
|
||||||
|
|
||||||
|
if (esp_netif_sntp_sync_wait(pdMS_TO_TICKS(NTP_TIMEOUT * 1000)) != ESP_OK) {
|
||||||
|
ESP_LOGE(MAIN_TAG, "failed to update system time within %ds timeout", NTP_TIMEOUT);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ESP_LOGI(MAIN_TAG, "time is updated: %lld", time(nullptr));
|
||||||
|
|
||||||
|
tox_main();
|
||||||
|
}
|
98
other/docker/esp32/main/tox_main.cc
Normal file
98
other/docker/esp32/main/tox_main.cc
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
#include "../main/tox_main.h"
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#include "../../../../toxcore/ccompat.h"
|
||||||
|
#include "../../../../toxcore/tox.h"
|
||||||
|
#include "../../../../toxcore/tox_events.h"
|
||||||
|
|
||||||
|
static const char *color(int index)
|
||||||
|
{
|
||||||
|
switch (index) {
|
||||||
|
case 0:
|
||||||
|
return "\033"
|
||||||
|
"[35m";
|
||||||
|
case 1:
|
||||||
|
return "\033"
|
||||||
|
"[36m";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "\033"
|
||||||
|
"[0m";
|
||||||
|
}
|
||||||
|
|
||||||
|
static tox_log_cb log_handler;
|
||||||
|
static void log_handler(Tox *tox, Tox_Log_Level level, const char *file, uint32_t line,
|
||||||
|
const char *func, const char *msg, void *user_data)
|
||||||
|
{
|
||||||
|
const int *index = static_cast<const int *>(user_data);
|
||||||
|
const uint16_t udp_port = tox_self_get_udp_port(tox, nullptr);
|
||||||
|
printf("%s#%d (:%d) [%c] %s:%u(%s): %s\n", color(*index), *index, udp_port,
|
||||||
|
tox_log_level_to_string(level)[0], file, static_cast<unsigned int>(line), func, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
using Tox_Options_Ptr = std::unique_ptr<Tox_Options, void (*)(Tox_Options *)>;
|
||||||
|
using Tox_Ptr = std::unique_ptr<Tox, void (*)(Tox *)>;
|
||||||
|
|
||||||
|
void tox_main()
|
||||||
|
{
|
||||||
|
printf("Hello Tox!\n");
|
||||||
|
|
||||||
|
Tox_Options_Ptr opts(tox_options_new(nullptr), tox_options_free);
|
||||||
|
assert(opts != nullptr);
|
||||||
|
|
||||||
|
tox_options_set_ipv6_enabled(opts.get(), false);
|
||||||
|
tox_options_set_local_discovery_enabled(opts.get(), false);
|
||||||
|
|
||||||
|
tox_options_set_log_callback(opts.get(), log_handler);
|
||||||
|
|
||||||
|
Tox_Err_New err;
|
||||||
|
|
||||||
|
int index[] = {0, 1};
|
||||||
|
|
||||||
|
tox_options_set_log_user_data(opts.get(), &index[0]);
|
||||||
|
Tox_Ptr tox0(tox_new(opts.get(), &err), tox_kill);
|
||||||
|
printf("tox_new(#0): %p\n", static_cast<void *>(tox0.get()));
|
||||||
|
|
||||||
|
if (err != TOX_ERR_NEW_OK) {
|
||||||
|
printf("tox_new(#0): %s\n", tox_err_new_to_string(err));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tox_options_set_log_user_data(opts.get(), &index[1]);
|
||||||
|
Tox_Ptr tox1(tox_new(opts.get(), &err), tox_kill);
|
||||||
|
printf("tox_new(#1): %p\n", static_cast<void *>(tox0.get()));
|
||||||
|
|
||||||
|
if (err != TOX_ERR_NEW_OK) {
|
||||||
|
printf("tox_new(#1): %s\n", tox_err_new_to_string(err));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t pk[TOX_PUBLIC_KEY_SIZE];
|
||||||
|
tox_self_get_dht_id(tox0.get(), pk);
|
||||||
|
tox_bootstrap(tox1.get(), "localhost", tox_self_get_udp_port(tox0.get(), nullptr), pk, nullptr);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
tox_self_get_public_key(tox0.get(), pk);
|
||||||
|
tox_friend_add_norequest(tox1.get(), pk, nullptr);
|
||||||
|
|
||||||
|
tox_self_get_public_key(tox1.get(), pk);
|
||||||
|
tox_friend_add_norequest(tox0.get(), pk, nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
printf("bootstrapping and connecting 2 toxes\n");
|
||||||
|
|
||||||
|
while (tox_self_get_connection_status(tox1.get()) == TOX_CONNECTION_NONE
|
||||||
|
|| tox_self_get_connection_status(tox0.get()) == TOX_CONNECTION_NONE) {
|
||||||
|
tox_events_free(tox_events_iterate(tox0.get(), true, nullptr));
|
||||||
|
tox_events_free(tox_events_iterate(tox1.get(), true, nullptr));
|
||||||
|
|
||||||
|
usleep(tox_iteration_interval(tox0.get()) * 1000);
|
||||||
|
usleep(250); // a bit less noise in the log
|
||||||
|
}
|
||||||
|
}
|
6
other/docker/esp32/main/tox_main.h
Normal file
6
other/docker/esp32/main/tox_main.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#ifndef TOX_MAIN_H
|
||||||
|
#define TOX_MAIN_H
|
||||||
|
|
||||||
|
void tox_main();
|
||||||
|
|
||||||
|
#endif // TOX_MAIN_H
|
17
other/docker/esp32/qemu-test
Executable file
17
other/docker/esp32/qemu-test
Executable file
@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
qemu-system-xtensa \
|
||||||
|
-nographic \
|
||||||
|
-M esp32 \
|
||||||
|
-m 4 \
|
||||||
|
-drive file=flash.bin,if=mtd,format=raw \
|
||||||
|
-nic user,model=open_eth,hostfwd=tcp::80-:80 \
|
||||||
|
-s |
|
||||||
|
tee qemu.log &
|
||||||
|
|
||||||
|
echo "Waiting for program to complete"
|
||||||
|
while ! grep 'Returned from app_main' qemu.log >/dev/null; do
|
||||||
|
sleep 1
|
||||||
|
done
|
@ -1,4 +1,3 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
docker build -t toxchat/c-toxcore:sources -f other/docker/sources/Dockerfile .
|
|
||||||
docker build -t toxchat/c-toxcore:esp32 -f other/docker/esp32/Dockerfile .
|
docker build -t toxchat/c-toxcore:esp32 -f other/docker/esp32/Dockerfile .
|
||||||
|
5
other/docker/esp32/run-host
Executable file
5
other/docker/esp32/run-host
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
bazel run //c-toxcore/other/docker/esp32:host_main
|
1937
other/docker/esp32/sdkconfig
Normal file
1937
other/docker/esp32/sdkconfig
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,12 +0,0 @@
|
|||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-field-initializers")
|
|
||||||
|
|
||||||
file(GLOB toxcore_SRCS "toxcore/*.[ch]" "toxcore/*/*.[ch]")
|
|
||||||
set(COMPONENT_SRCS
|
|
||||||
${toxcore_SRCS}
|
|
||||||
other/docker/esp32/main/toxcore_main.cc
|
|
||||||
third_party/cmp/cmp.c
|
|
||||||
third_party/cmp/cmp.h
|
|
||||||
toxencryptsave/defines.h)
|
|
||||||
set(COMPONENT_ADD_INCLUDEDIRS "")
|
|
||||||
|
|
||||||
register_component()
|
|
@ -1,14 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "../../../../toxcore/ccompat.h"
|
|
||||||
#include "../../../../toxcore/tox.h"
|
|
||||||
#include "../../../../toxcore/tox_events.h"
|
|
||||||
|
|
||||||
extern "C" void app_main(void)
|
|
||||||
{
|
|
||||||
printf("Hello Tox!\n");
|
|
||||||
|
|
||||||
Tox *tox = tox_new(nullptr, nullptr);
|
|
||||||
tox_events_free(tox_events_iterate(tox, true, nullptr));
|
|
||||||
tox_kill(tox);
|
|
||||||
}
|
|
@ -39,7 +39,7 @@ RUN tcc \
|
|||||||
|
|
||||||
COPY other/make_single_file /work/other/
|
COPY other/make_single_file /work/other/
|
||||||
RUN \
|
RUN \
|
||||||
other/make_single_file \
|
other/make_single_file -core \
|
||||||
auto_tests/auto_test_support.c \
|
auto_tests/auto_test_support.c \
|
||||||
auto_tests/send_message_test.c \
|
auto_tests/send_message_test.c \
|
||||||
testing/misc_tools.c | \
|
testing/misc_tools.c | \
|
||||||
@ -47,5 +47,17 @@ RUN \
|
|||||||
-o send_message_test \
|
-o send_message_test \
|
||||||
-Wall -Werror \
|
-Wall -Werror \
|
||||||
-bench -g \
|
-bench -g \
|
||||||
$(pkg-config --cflags --libs libsodium opus vpx) \
|
$(pkg-config --cflags --libs libsodium) \
|
||||||
&& ./send_message_test | grep 'tox clients connected'
|
&& ./send_message_test | grep 'tox clients connected'
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
other/make_single_file \
|
||||||
|
auto_tests/auto_test_support.c \
|
||||||
|
auto_tests/toxav_basic_test.c \
|
||||||
|
testing/misc_tools.c | \
|
||||||
|
tcc - \
|
||||||
|
-o toxav_basic_test \
|
||||||
|
-Wall -Werror \
|
||||||
|
-bench -g \
|
||||||
|
$(pkg-config --cflags --libs libsodium opus vpx) \
|
||||||
|
&& ./toxav_basic_test | grep 'Test successful'
|
||||||
|
12
other/event_tooling/Dockerfile
Normal file
12
other/event_tooling/Dockerfile
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||||
|
build-essential \
|
||||||
|
ca-certificates \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
COPY generate_event_c.cpp /src/
|
||||||
|
RUN ["g++", "generate_event_c.cpp", "-o", "generate_event_c"]
|
||||||
|
CMD ["./generate_event_c"]
|
@ -80,27 +80,27 @@ std::string bin_unpack_name_from_type(const std::string& type) {
|
|||||||
} else if (type == "bool") {
|
} else if (type == "bool") {
|
||||||
return "bin_unpack_bool";
|
return "bin_unpack_bool";
|
||||||
} else if (type == "Tox_User_Status") {
|
} else if (type == "Tox_User_Status") {
|
||||||
return "tox_unpack_user_status";
|
return "tox_user_status_unpack";
|
||||||
} else if (type == "Tox_Conference_Type") {
|
} else if (type == "Tox_Conference_Type") {
|
||||||
return "tox_unpack_conference_type";
|
return "tox_conference_type_unpack";
|
||||||
} else if (type == "Tox_Message_Type") {
|
} else if (type == "Tox_Message_Type") {
|
||||||
return "tox_unpack_message_type";
|
return "tox_message_type_unpack";
|
||||||
} else if (type == "Tox_File_Control") {
|
} else if (type == "Tox_File_Control") {
|
||||||
return "tox_unpack_file_control";
|
return "tox_file_control_unpack";
|
||||||
} else if (type == "Tox_Connection") {
|
} else if (type == "Tox_Connection") {
|
||||||
return "tox_unpack_connection";
|
return "tox_connection_unpack";
|
||||||
} else if (type == "Tox_Group_Privacy_State") {
|
} else if (type == "Tox_Group_Privacy_State") {
|
||||||
return "tox_unpack_group_privacy_state";
|
return "tox_group_privacy_state_unpack";
|
||||||
} else if (type == "Tox_Group_Voice_State") {
|
} else if (type == "Tox_Group_Voice_State") {
|
||||||
return "tox_unpack_group_voice_state";
|
return "tox_group_voice_state_unpack";
|
||||||
} else if (type == "Tox_Group_Topic_Lock") {
|
} else if (type == "Tox_Group_Topic_Lock") {
|
||||||
return "tox_unpack_group_topic_lock";
|
return "tox_group_topic_lock_unpack";
|
||||||
} else if (type == "Tox_Group_Join_Fail") {
|
} else if (type == "Tox_Group_Join_Fail") {
|
||||||
return "tox_unpack_group_join_fail";
|
return "tox_group_join_fail_unpack";
|
||||||
} else if (type == "Tox_Group_Mod_Event") {
|
} else if (type == "Tox_Group_Mod_Event") {
|
||||||
return "tox_unpack_group_mod_event";
|
return "tox_group_mod_event_unpack";
|
||||||
} else if (type == "Tox_Group_Exit_Type") {
|
} else if (type == "Tox_Group_Exit_Type") {
|
||||||
return "tox_unpack_group_exit_type";
|
return "tox_group_exit_type_unpack";
|
||||||
} else {
|
} else {
|
||||||
std::cerr << "unknown type " << type << "\n";
|
std::cerr << "unknown type " << type << "\n";
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -109,7 +109,7 @@ std::string bin_unpack_name_from_type(const std::string& type) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void generate_event_impl(const std::string& event_name, std::vector<EventType> event_types) {
|
void generate_event_impl(const std::string& event_name, const std::vector<EventType>& event_types) {
|
||||||
const std::string event_name_l = str_tolower(event_name);
|
const std::string event_name_l = str_tolower(event_name);
|
||||||
std::string file_name = output_folder + "/" + event_name_l + ".c";
|
std::string file_name = output_folder + "/" + event_name_l + ".c";
|
||||||
|
|
||||||
@ -164,35 +164,6 @@ void generate_event_impl(const std::string& event_name, std::vector<EventType> e
|
|||||||
}
|
}
|
||||||
f << "};\n\n";
|
f << "};\n\n";
|
||||||
|
|
||||||
// gen contruct
|
|
||||||
f << "non_null()\n";
|
|
||||||
f << "static void tox_event_" << event_name_l << "_construct(Tox_Event_" << event_name << " *" << event_name_l << ")\n{\n";
|
|
||||||
// TODO: initialize all members properly
|
|
||||||
// TODO: check if _NONE is universal
|
|
||||||
// str_toupper(
|
|
||||||
f << " *" << event_name_l << " = (Tox_Event_" << event_name << ") {\n 0\n };\n}\n";
|
|
||||||
|
|
||||||
// gen destruct
|
|
||||||
f << "non_null()\n";
|
|
||||||
f << "static void tox_event_" << event_name_l << "_destruct(Tox_Event_" << event_name << " *" << event_name_l << ")\n{\n";
|
|
||||||
size_t data_count = 0;
|
|
||||||
for (const auto& t : event_types) {
|
|
||||||
std::visit(
|
|
||||||
overloaded{
|
|
||||||
[&](const EventTypeTrivial&) {},
|
|
||||||
[&](const EventTypeByteRange& t) {
|
|
||||||
f << " free(" << event_name_l << "->" << t.name_data << ");\n";
|
|
||||||
data_count++;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
t
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (data_count == 0) {
|
|
||||||
f << " return;\n";
|
|
||||||
}
|
|
||||||
f << "}\n\n";
|
|
||||||
|
|
||||||
// gen setters and getters
|
// gen setters and getters
|
||||||
for (const auto& t : event_types) {
|
for (const auto& t : event_types) {
|
||||||
// setter
|
// setter
|
||||||
@ -258,7 +229,7 @@ void generate_event_impl(const std::string& event_name, std::vector<EventType> e
|
|||||||
},
|
},
|
||||||
[&](const EventTypeByteRange& t) {
|
[&](const EventTypeByteRange& t) {
|
||||||
//f << "non_null()\n"; // TODO: is this missing in the original?
|
//f << "non_null()\n"; // TODO: is this missing in the original?
|
||||||
f << "size_t tox_event_" << event_name_l << "_get_" << t.name_length;
|
f << "uint32_t tox_event_" << event_name_l << "_get_" << t.name_length;
|
||||||
f << "(const Tox_Event_" << event_name << " *" << event_name_l << ")\n";
|
f << "(const Tox_Event_" << event_name << " *" << event_name_l << ")\n";
|
||||||
f << "{\n assert(" << event_name_l << " != nullptr);\n";
|
f << "{\n assert(" << event_name_l << " != nullptr);\n";
|
||||||
f << " return " << event_name_l << "->" << t.name_length << ";\n}\n";
|
f << " return " << event_name_l << "->" << t.name_length << ";\n}\n";
|
||||||
@ -272,15 +243,45 @@ void generate_event_impl(const std::string& event_name, std::vector<EventType> e
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// pack
|
|
||||||
|
// gen contruct
|
||||||
f << "non_null()\n";
|
f << "non_null()\n";
|
||||||
f << "static bool tox_event_" << event_name_l << "_pack(\n";
|
f << "static void tox_event_" << event_name_l << "_construct(Tox_Event_" << event_name << " *" << event_name_l << ")\n{\n";
|
||||||
|
// TODO: initialize all members properly
|
||||||
|
// TODO: check if _NONE is universal
|
||||||
|
// str_toupper(
|
||||||
|
f << " *" << event_name_l << " = (Tox_Event_" << event_name << ") {\n 0\n };\n}\n";
|
||||||
|
|
||||||
|
// gen destruct
|
||||||
|
f << "non_null()\n";
|
||||||
|
f << "static void tox_event_" << event_name_l << "_destruct(Tox_Event_" << event_name << " *" << event_name_l << ", const Memory *mem)\n{\n";
|
||||||
|
size_t data_count = 0;
|
||||||
|
for (const auto& t : event_types) {
|
||||||
|
std::visit(
|
||||||
|
overloaded{
|
||||||
|
[&](const EventTypeTrivial&) {},
|
||||||
|
[&](const EventTypeByteRange& t) {
|
||||||
|
f << " free(" << event_name_l << "->" << t.name_data << ");\n";
|
||||||
|
//f << " mem->funcs->free(mem->obj, " << event_name_l << "->" << t.name_data << ");\n";
|
||||||
|
data_count++;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
t
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (data_count == 0) {
|
||||||
|
f << " return;\n";
|
||||||
|
}
|
||||||
|
f << "}\n\n";
|
||||||
|
|
||||||
|
// pack
|
||||||
|
f << "bool tox_event_" << event_name_l << "_pack(\n";
|
||||||
f << " const Tox_Event_" << event_name << " *event, Bin_Pack *bp)\n{\n";
|
f << " const Tox_Event_" << event_name << " *event, Bin_Pack *bp)\n{\n";
|
||||||
f << " assert(event != nullptr);\n";
|
f << " assert(event != nullptr);\n";
|
||||||
f << " return bin_pack_array(bp, 2)\n";
|
f << " return bin_pack_array(bp, 2)\n";
|
||||||
f << " && bin_pack_u32(bp, TOX_EVENT_" << str_toupper(event_name) << ")\n";
|
f << " && bin_pack_u32(bp, TOX_EVENT_" << str_toupper(event_name) << ")";
|
||||||
if (event_types.size() > 1) {
|
if (event_types.size() > 1) {
|
||||||
f << " && bin_pack_array(bp, " << event_types.size() << ")";
|
f << "\n && bin_pack_array(bp, " << event_types.size() << ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto& t : event_types) {
|
for (const auto& t : event_types) {
|
||||||
@ -302,7 +303,7 @@ void generate_event_impl(const std::string& event_name, std::vector<EventType> e
|
|||||||
|
|
||||||
// unpack
|
// unpack
|
||||||
f << "non_null()\n";
|
f << "non_null()\n";
|
||||||
f << "static bool tox_event_" << event_name_l << "_unpack(\n";
|
f << "static bool tox_event_" << event_name_l << "_unpack_into(\n";
|
||||||
f << " Tox_Event_" << event_name << " *event, Bin_Unpack *bu)\n{\n";
|
f << " Tox_Event_" << event_name << " *event, Bin_Unpack *bu)\n{\n";
|
||||||
f << " assert(event != nullptr);\n";
|
f << " assert(event != nullptr);\n";
|
||||||
if (event_types.size() > 1) {
|
if (event_types.size() > 1) {
|
||||||
@ -335,71 +336,82 @@ void generate_event_impl(const std::string& event_name, std::vector<EventType> e
|
|||||||
f << R"(
|
f << R"(
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
* :: add/clear/get
|
* :: new/free/add/get/size/unpack
|
||||||
*
|
*
|
||||||
*****************************************************/
|
*****************************************************/
|
||||||
|
|
||||||
|
|
||||||
)";
|
)";
|
||||||
|
|
||||||
|
f << "const Tox_Event_" << event_name << " *tox_event_get_" << event_name_l << "(const Tox_Event *event)\n{\n";
|
||||||
|
f << " return event->type == TOX_EVENT_" << str_toupper(event_name) << " ? event->data." << event_name_l << " : nullptr;\n}\n\n";
|
||||||
|
|
||||||
|
// new
|
||||||
|
f << "Tox_Event_" << event_name << " *tox_event_" << event_name_l << "_new(const Memory *mem)\n{\n";
|
||||||
|
f << " Tox_Event_" << event_name << " *const " << event_name_l << " =\n";
|
||||||
|
f << " (Tox_Event_" << event_name << " *)mem_alloc(mem, sizeof(Tox_Event_" << event_name << "));\n\n";
|
||||||
|
f << " if (" << event_name_l << " == nullptr) {\n return nullptr;\n }\n\n";
|
||||||
|
f << " tox_event_" << event_name_l << "_construct(" << event_name_l << ");\n";
|
||||||
|
f << " return " << event_name_l << ";\n}\n\n";
|
||||||
|
|
||||||
|
// free
|
||||||
|
f << "void tox_event_" << event_name_l << "_free(Tox_Event_" << event_name << " *" << event_name_l << ", const Memory *mem)\n{\n";
|
||||||
|
f << " if (" << event_name_l << " != nullptr) {\n";
|
||||||
|
f << " tox_event_" << event_name_l << "_destruct(" << event_name_l << ", mem);\n }\n";
|
||||||
|
f << " mem_delete(mem, " << event_name_l << ");\n}\n\n";
|
||||||
|
|
||||||
// add
|
// add
|
||||||
f << "non_null()\n";
|
f << "non_null()\n";
|
||||||
f << "static Tox_Event_" << event_name << " *tox_events_add_" << event_name_l << "(Tox_Events *events)\n{\n";
|
f << "static Tox_Event_" << event_name << " *tox_events_add_" << event_name_l << "(Tox_Events *events, const Memory *mem)\n{\n";
|
||||||
f << " if (events->" << event_name_l << "_size == UINT32_MAX) {\n";
|
f << " Tox_Event_" << event_name << " *const " << event_name_l << " = tox_event_" << event_name_l << "_new(mem);\n\n";
|
||||||
|
f << " if (" << event_name_l << " == nullptr) {\n";
|
||||||
f << " return nullptr;\n }\n\n";
|
f << " return nullptr;\n }\n\n";
|
||||||
f << " if (events->" << event_name_l << "_size == events->" << event_name_l << "_capacity) {\n";
|
f << " Tox_Event event;\n";
|
||||||
f << " const uint32_t new_" << event_name_l << "_capacity = events->" << event_name_l << "_capacity * 2 + 1;\n";
|
f << " event.type = TOX_EVENT_" << str_toupper(event_name) << ";\n";
|
||||||
|
f << " event.data." << event_name_l << " = " << event_name_l << ";\n\n";
|
||||||
f << " Tox_Event_" << event_name << " *new_" << event_name_l << " = (Tox_Event_" << event_name << " *)\n";
|
f << " tox_events_add(events, &event);\n";
|
||||||
f << " realloc(\n";
|
|
||||||
|
|
||||||
f << " events->" << event_name_l << ",\n";
|
|
||||||
f << " new_" << event_name_l << "_capacity * sizeof(Tox_Event_" << event_name << "));\n\n";
|
|
||||||
f << " if (new_" << event_name_l << " == nullptr) {\n return nullptr;\n }\n\n";
|
|
||||||
f << " events->" << event_name_l << " = new_" << event_name_l << ";\n";
|
|
||||||
f << " events->" << event_name_l << "_capacity = new_" << event_name_l << "_capacity;\n";
|
|
||||||
f << " }\n\n";
|
|
||||||
f << " Tox_Event_" << event_name << " *const " << event_name_l << " =\n";
|
|
||||||
f << " &events->" << event_name_l << "[events->" << event_name_l << "_size];\n";
|
|
||||||
f << " tox_event_" << event_name_l << "_construct(" << event_name_l << ");\n";
|
|
||||||
f << " ++events->" << event_name_l << "_size;\n";
|
|
||||||
f << " return " << event_name_l << ";\n}\n\n";
|
f << " return " << event_name_l << ";\n}\n\n";
|
||||||
|
|
||||||
// clear
|
|
||||||
f << "void tox_events_clear_" << event_name_l << "(Tox_Events *events)\n{\n";
|
|
||||||
f << " if (events == nullptr) {\n return;\n }\n\n";
|
|
||||||
f << " for (uint32_t i = 0; i < events->" << event_name_l << "_size; ++i) {\n";
|
|
||||||
f << " tox_event_" << event_name_l << "_destruct(&events->" << event_name_l << "[i]);\n }\n\n";
|
|
||||||
f << " free(events->" << event_name_l << ");\n";
|
|
||||||
f << " events->" << event_name_l << " = nullptr;\n";
|
|
||||||
f << " events->" << event_name_l << "_size = 0;\n";
|
|
||||||
f << " events->" << event_name_l << "_capacity = 0;\n";
|
|
||||||
f << "}\n\n";
|
|
||||||
|
|
||||||
// get size
|
|
||||||
f << "uint32_t tox_events_get_" << event_name_l << "_size(const Tox_Events *events)\n{\n";
|
|
||||||
f << " if (events == nullptr) {\n return 0;\n }\n\n";
|
|
||||||
f << " return events->" << event_name_l << "_size;\n}\n\n";
|
|
||||||
|
|
||||||
// get
|
// get
|
||||||
f << "const Tox_Event_" << event_name << " *tox_events_get_" << event_name_l << "(const Tox_Events *events, uint32_t index)\n{\n";
|
f << "const Tox_Event_" << event_name << " *tox_events_get_" << event_name_l << "(const Tox_Events *events, uint32_t index)\n{\n";
|
||||||
f << " assert(index < events->" << event_name_l << "_size);\n";
|
f << " uint32_t " << event_name_l << "_index = 0;\n";
|
||||||
f << " assert(events->" << event_name_l << " != nullptr);\n";
|
f << " const uint32_t size = tox_events_get_size(events);\n\n";
|
||||||
f << " return &events->" << event_name_l << "[index];\n}\n\n";
|
|
||||||
|
|
||||||
// aux pack
|
|
||||||
f << "bool tox_events_pack_" << event_name_l << "(const Tox_Events *events, Bin_Pack *bp)\n{\n";
|
|
||||||
f << " const uint32_t size = tox_events_get_" << event_name_l << "_size(events);\n\n";
|
|
||||||
f << " for (uint32_t i = 0; i < size; ++i) {\n";
|
f << " for (uint32_t i = 0; i < size; ++i) {\n";
|
||||||
f << " if (!tox_event_" << event_name_l << "_pack(tox_events_get_" << event_name_l << "(events, i), bp)) {\n";
|
f << " if (" << event_name_l << "_index > index) {\n";
|
||||||
f << " return false;\n }\n }\n";
|
f << " return nullptr;\n }\n\n";
|
||||||
f << " return true;\n}\n\n";
|
f << " if (events->events[i].type == TOX_EVENT_" << str_toupper(event_name) << ") {\n";
|
||||||
|
f << " const Tox_Event_" << event_name << " *" << event_name_l << " = events->events[i].data." << event_name_l << ";\n";
|
||||||
|
f << " if (" << event_name_l << "_index == index) {\n";
|
||||||
|
f << " return " << event_name_l << ";\n }\n";
|
||||||
|
f << " ++" << event_name_l << "_index;\n }\n }\n\n return nullptr;\n}\n\n";
|
||||||
|
|
||||||
|
// get size
|
||||||
|
f << "uint32_t tox_events_get_" << event_name_l << "_size(const Tox_Events *events)\n{\n";
|
||||||
|
f << " uint32_t " << event_name_l << "_size = 0;\n";
|
||||||
|
f << " const uint32_t size = tox_events_get_size(events);\n\n";
|
||||||
|
f << " for (uint32_t i = 0; i < size; ++i) {\n";
|
||||||
|
f << " if (events->events[i].type == TOX_EVENT_" << str_toupper(event_name) << ") {\n";
|
||||||
|
f << " ++" << event_name_l << "_size;\n }\n }\n\n";
|
||||||
|
f << " return " << event_name_l << "_size;\n}\n\n";
|
||||||
|
|
||||||
|
// unpack
|
||||||
|
f << "bool tox_event_" << event_name_l << "_unpack(\n";
|
||||||
|
f << " Tox_Event_" << event_name << " **event, Bin_Unpack *bu, const Memory *mem)\n{\n";
|
||||||
|
f << " assert(event != nullptr);\n";
|
||||||
|
f << " *event = tox_event_" << event_name_l << "_new(mem);\n\n";
|
||||||
|
f << " if (*event == nullptr) {\n return false;\n }\n\n";
|
||||||
|
f << " return tox_event_" << event_name_l << "_unpack_into(*event, bu);\n}\n\n";
|
||||||
|
|
||||||
|
// alloc
|
||||||
|
f << "non_null()\n";
|
||||||
|
f << "static Tox_Event_" << event_name << " *tox_event_" << event_name_l << "_alloc(void *user_data)\n{\n";
|
||||||
|
f << " Tox_Events_State *state = tox_events_alloc(user_data);\n";
|
||||||
|
f << " assert(state != nullptr);\n\n";
|
||||||
|
f << " if (state->events == nullptr) {\n return nullptr;\n }\n\n";
|
||||||
|
f << " Tox_Event_" << event_name << " *" << event_name_l << " = tox_events_add_" << event_name_l << "(state->events, state->mem);\n\n";
|
||||||
|
f << " if (" << event_name_l << " == nullptr) {\n";
|
||||||
|
f << " state->error = TOX_ERR_EVENTS_ITERATE_MALLOC;\n return nullptr;\n }\n\n";
|
||||||
|
f << " return " << event_name_l << ";\n}\n\n";
|
||||||
|
|
||||||
// aux unpack
|
|
||||||
f << "bool tox_events_unpack_" << event_name_l << "(Tox_Events *events, Bin_Unpack *bu)\n{\n";
|
|
||||||
f << " Tox_Event_" << event_name << " *event = tox_events_add_" << event_name_l << "(events);\n\n";
|
|
||||||
f << " if (event == nullptr) {\n return false;\n }\n\n";
|
|
||||||
f << " return tox_event_" << event_name_l << "_unpack(event, bu);\n}\n\n";
|
|
||||||
|
|
||||||
f << R"(
|
f << R"(
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
@ -427,12 +439,8 @@ void generate_event_impl(const std::string& event_name, std::vector<EventType> e
|
|||||||
}
|
}
|
||||||
|
|
||||||
f << ",\n void *user_data)\n{\n";
|
f << ",\n void *user_data)\n{\n";
|
||||||
f << " Tox_Events_State *state = tox_events_alloc(user_data);\n";
|
f << " Tox_Event_" << event_name << " *" << event_name_l << " = tox_event_" << event_name_l << "_alloc(user_data);\n\n";
|
||||||
f << " assert(state != nullptr);\n\n";
|
f << " if (" << event_name_l << " == nullptr) {\n return;\n }\n\n";
|
||||||
f << " if (state->events == nullptr) {\n return;\n }\n\n";
|
|
||||||
f << " Tox_Event_" << event_name << " *" << event_name_l << " = tox_events_add_" << event_name_l << "(state->events);\n\n";
|
|
||||||
f << " if (" << event_name_l << " == nullptr) {\n";
|
|
||||||
f << " state->error = TOX_ERR_EVENTS_ITERATE_MALLOC;\n return;\n }\n\n";
|
|
||||||
|
|
||||||
for (const auto& t : event_types) {
|
for (const auto& t : event_types) {
|
||||||
std::visit(
|
std::visit(
|
||||||
@ -465,7 +473,7 @@ int main(int argc, char** argv) {
|
|||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "friend_number"},
|
EventTypeTrivial{"uint32_t", "friend_number"},
|
||||||
EventTypeTrivial{"Tox_Conference_Type", "type"},
|
EventTypeTrivial{"Tox_Conference_Type", "type"},
|
||||||
EventTypeByteRange{"cookie", "cookie_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"cookie", "cookie_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -474,7 +482,7 @@ int main(int argc, char** argv) {
|
|||||||
EventTypeTrivial{"uint32_t", "conference_number"},
|
EventTypeTrivial{"uint32_t", "conference_number"},
|
||||||
EventTypeTrivial{"uint32_t", "peer_number"},
|
EventTypeTrivial{"uint32_t", "peer_number"},
|
||||||
EventTypeTrivial{"Tox_Message_Type", "type"},
|
EventTypeTrivial{"Tox_Message_Type", "type"},
|
||||||
EventTypeByteRange{"message", "message_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"message", "message_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -488,7 +496,7 @@ int main(int argc, char** argv) {
|
|||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "conference_number"},
|
EventTypeTrivial{"uint32_t", "conference_number"},
|
||||||
EventTypeTrivial{"uint32_t", "peer_number"},
|
EventTypeTrivial{"uint32_t", "peer_number"},
|
||||||
EventTypeByteRange{"name", "name_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"name", "name_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -496,7 +504,7 @@ int main(int argc, char** argv) {
|
|||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "conference_number"},
|
EventTypeTrivial{"uint32_t", "conference_number"},
|
||||||
EventTypeTrivial{"uint32_t", "peer_number"},
|
EventTypeTrivial{"uint32_t", "peer_number"},
|
||||||
EventTypeByteRange{"title", "title_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"title", "title_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -516,7 +524,7 @@ int main(int argc, char** argv) {
|
|||||||
EventTypeTrivial{"uint32_t", "file_number"},
|
EventTypeTrivial{"uint32_t", "file_number"},
|
||||||
EventTypeTrivial{"uint32_t", "kind"},
|
EventTypeTrivial{"uint32_t", "kind"},
|
||||||
EventTypeTrivial{"uint64_t", "file_size"},
|
EventTypeTrivial{"uint64_t", "file_size"},
|
||||||
EventTypeByteRange{"filename", "filename_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"filename", "filename_length", "filename_length"},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -525,7 +533,7 @@ int main(int argc, char** argv) {
|
|||||||
EventTypeTrivial{"uint32_t", "friend_number"},
|
EventTypeTrivial{"uint32_t", "friend_number"},
|
||||||
EventTypeTrivial{"uint32_t", "file_number"},
|
EventTypeTrivial{"uint32_t", "file_number"},
|
||||||
EventTypeTrivial{"uint64_t", "position"},
|
EventTypeTrivial{"uint64_t", "position"},
|
||||||
EventTypeByteRange{"data", "data_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"data", "data_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -548,14 +556,14 @@ int main(int argc, char** argv) {
|
|||||||
"Friend_Lossless_Packet",
|
"Friend_Lossless_Packet",
|
||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "friend_number"},
|
EventTypeTrivial{"uint32_t", "friend_number"},
|
||||||
EventTypeByteRange{"data", "data_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"data", "data_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Friend_Lossy_Packet",
|
"Friend_Lossy_Packet",
|
||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "friend_number"},
|
EventTypeTrivial{"uint32_t", "friend_number"},
|
||||||
EventTypeByteRange{"data", "data_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"data", "data_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -563,14 +571,14 @@ int main(int argc, char** argv) {
|
|||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "friend_number"},
|
EventTypeTrivial{"uint32_t", "friend_number"},
|
||||||
EventTypeTrivial{"Tox_Message_Type", "type"},
|
EventTypeTrivial{"Tox_Message_Type", "type"},
|
||||||
EventTypeByteRange{"message", "message_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"message", "message_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Friend_Name",
|
"Friend_Name",
|
||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "friend_number"},
|
EventTypeTrivial{"uint32_t", "friend_number"},
|
||||||
EventTypeByteRange{"name", "name_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"name", "name_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -585,7 +593,7 @@ int main(int argc, char** argv) {
|
|||||||
"Friend_Request",
|
"Friend_Request",
|
||||||
{
|
{
|
||||||
//EventTypeTrivial{"uint32_t", "friend_number"}, // public_key ByteArray
|
//EventTypeTrivial{"uint32_t", "friend_number"}, // public_key ByteArray
|
||||||
EventTypeByteRange{"message", "message_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"message", "message_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
@ -600,7 +608,7 @@ int main(int argc, char** argv) {
|
|||||||
"Friend_Status_Message",
|
"Friend_Status_Message",
|
||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "friend_number"},
|
EventTypeTrivial{"uint32_t", "friend_number"},
|
||||||
EventTypeByteRange{"message", "message_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"message", "message_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -623,7 +631,7 @@ int main(int argc, char** argv) {
|
|||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "group_number"},
|
EventTypeTrivial{"uint32_t", "group_number"},
|
||||||
EventTypeTrivial{"uint32_t", "peer_id"},
|
EventTypeTrivial{"uint32_t", "peer_id"},
|
||||||
EventTypeByteRange{"name", "name_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"name", "name_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -639,7 +647,7 @@ int main(int argc, char** argv) {
|
|||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "group_number"},
|
EventTypeTrivial{"uint32_t", "group_number"},
|
||||||
EventTypeTrivial{"uint32_t", "peer_id"},
|
EventTypeTrivial{"uint32_t", "peer_id"},
|
||||||
EventTypeByteRange{"topic", "topic_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"topic", "topic_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -674,7 +682,7 @@ int main(int argc, char** argv) {
|
|||||||
"Group_Password",
|
"Group_Password",
|
||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "group_number"},
|
EventTypeTrivial{"uint32_t", "group_number"},
|
||||||
EventTypeByteRange{"password", "password_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"password", "password_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -683,7 +691,7 @@ int main(int argc, char** argv) {
|
|||||||
EventTypeTrivial{"uint32_t", "group_number"},
|
EventTypeTrivial{"uint32_t", "group_number"},
|
||||||
EventTypeTrivial{"uint32_t", "peer_id"},
|
EventTypeTrivial{"uint32_t", "peer_id"},
|
||||||
EventTypeTrivial{"Tox_Message_Type", "type"},
|
EventTypeTrivial{"Tox_Message_Type", "type"},
|
||||||
EventTypeByteRange{"message", "message_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"message", "message_length", "length"}, // the latter two are ideally the same
|
||||||
EventTypeTrivial{"uint32_t", "message_id"},
|
EventTypeTrivial{"uint32_t", "message_id"},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -693,7 +701,7 @@ int main(int argc, char** argv) {
|
|||||||
EventTypeTrivial{"uint32_t", "group_number"},
|
EventTypeTrivial{"uint32_t", "group_number"},
|
||||||
EventTypeTrivial{"uint32_t", "peer_id"},
|
EventTypeTrivial{"uint32_t", "peer_id"},
|
||||||
EventTypeTrivial{"Tox_Message_Type", "type"},
|
EventTypeTrivial{"Tox_Message_Type", "type"},
|
||||||
EventTypeByteRange{"message", "message_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"message", "message_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -701,7 +709,7 @@ int main(int argc, char** argv) {
|
|||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "group_number"},
|
EventTypeTrivial{"uint32_t", "group_number"},
|
||||||
EventTypeTrivial{"uint32_t", "peer_id"},
|
EventTypeTrivial{"uint32_t", "peer_id"},
|
||||||
EventTypeByteRange{"data", "data_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"data", "data_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -709,14 +717,14 @@ int main(int argc, char** argv) {
|
|||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "group_number"},
|
EventTypeTrivial{"uint32_t", "group_number"},
|
||||||
EventTypeTrivial{"uint32_t", "peer_id"},
|
EventTypeTrivial{"uint32_t", "peer_id"},
|
||||||
EventTypeByteRange{"data", "data_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"data", "data_length", "length"}, // the latter two are ideally the same
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Group_Invite",
|
"Group_Invite",
|
||||||
{
|
{
|
||||||
EventTypeTrivial{"uint32_t", "friend_number"},
|
EventTypeTrivial{"uint32_t", "friend_number"},
|
||||||
EventTypeByteRange{"invite_data", "invite_data_length", "length"}, // the later two are idealy the same
|
EventTypeByteRange{"invite_data", "invite_data_length", "length"}, // the latter two are ideally the same
|
||||||
EventTypeByteRange{"group_name", "group_name_length", "group_name_length"}, // they are :)
|
EventTypeByteRange{"group_name", "group_name_length", "group_name_length"}, // they are :)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
8
other/event_tooling/run
Executable file
8
other/event_tooling/run
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
BUILD=events
|
||||||
|
docker build -t "toxchat/c-toxcore:$BUILD" "other/event_tooling"
|
||||||
|
docker run --rm -v "$PWD/toxcore/events:/src/out" -t "toxchat/c-toxcore:$BUILD"
|
||||||
|
sed -i -e 's/, uint16_t length,/, size_t length,/' toxcore/events/file_chunk_request.c
|
||||||
|
sed -i -e 's/^ 0/ TOX_CONNECTION_NONE/' toxcore/events/self_connection_status.c
|
@ -1,30 +1,41 @@
|
|||||||
|
function(target_link_toxcore target)
|
||||||
|
if(TARGET toxcore_static)
|
||||||
|
target_link_libraries(${target} PRIVATE toxcore_static)
|
||||||
|
else()
|
||||||
|
target_link_libraries(${target} PRIVATE toxcore_shared)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
add_executable(save-generator save-generator.c)
|
add_executable(save-generator save-generator.c)
|
||||||
target_link_modules(save-generator toxcore misc_tools)
|
target_link_libraries(save-generator PRIVATE misc_tools)
|
||||||
|
target_link_toxcore(save-generator)
|
||||||
|
|
||||||
add_executable(strkey strkey.c)
|
add_executable(strkey strkey.c)
|
||||||
target_link_modules(strkey toxcore ${LIBSODIUM_LIBRARIES})
|
target_link_libraries(strkey PRIVATE ${LIBSODIUM_LIBRARIES})
|
||||||
|
target_link_toxcore(strkey)
|
||||||
|
|
||||||
add_executable(create_bootstrap_keys create_bootstrap_keys.c)
|
add_executable(create_bootstrap_keys create_bootstrap_keys.c)
|
||||||
target_link_modules(create_bootstrap_keys ${LIBSODIUM_LIBRARIES})
|
target_link_libraries(create_bootstrap_keys PRIVATE ${LIBSODIUM_LIBRARIES})
|
||||||
|
target_link_toxcore(create_bootstrap_keys)
|
||||||
|
|
||||||
add_executable(create_minimal_savedata create_minimal_savedata.c)
|
add_executable(create_minimal_savedata create_minimal_savedata.c)
|
||||||
target_link_modules(create_minimal_savedata ${LIBSODIUM_LIBRARIES})
|
target_link_libraries(create_minimal_savedata PRIVATE ${LIBSODIUM_LIBRARIES})
|
||||||
|
|
||||||
add_executable(create_savedata create_savedata.c)
|
add_executable(create_savedata create_savedata.c)
|
||||||
target_link_modules(create_savedata toxcore ${LIBSODIUM_LIBRARIES})
|
target_link_libraries(create_savedata PRIVATE ${LIBSODIUM_LIBRARIES})
|
||||||
|
target_link_toxcore(create_savedata)
|
||||||
|
|
||||||
add_executable(sign sign.c)
|
add_executable(sign sign.c)
|
||||||
target_link_modules(sign ${LIBSODIUM_LIBRARIES} misc_tools)
|
target_link_libraries(sign PRIVATE ${LIBSODIUM_LIBRARIES} misc_tools)
|
||||||
|
|
||||||
add_executable(cracker_simple cracker_simple.c)
|
add_executable(cracker_simple cracker_simple.c)
|
||||||
target_link_modules(cracker_simple ${LIBSODIUM_LIBRARIES} misc_tools)
|
target_link_libraries(cracker_simple ${LIBSODIUM_LIBRARIES} misc_tools)
|
||||||
|
|
||||||
# MSVC doesn't support OpenMP
|
# MSVC doesn't support OpenMP
|
||||||
if(NOT MSVC)
|
if(NOT MSVC)
|
||||||
find_package(OpenMP)
|
find_package(OpenMP)
|
||||||
if(OpenMP_C_FOUND)
|
if(OpenMP_C_FOUND)
|
||||||
add_executable(cracker cracker.c)
|
add_executable(cracker cracker.c)
|
||||||
target_link_modules(cracker ${LIBSODIUM_LIBRARIES})
|
target_link_libraries(cracker PRIVATE OpenMP::OpenMP_C ${LIBSODIUM_LIBRARIES})
|
||||||
target_link_libraries(cracker OpenMP::OpenMP_C)
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
@ -41,7 +41,7 @@ static bool create_tox(const unsigned char *const secret_key, Tox **const tox)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool print_savedata(Tox *const tox)
|
static bool print_savedata(const Tox *const tox)
|
||||||
{
|
{
|
||||||
const size_t savedata_size = tox_get_savedata_size(tox);
|
const size_t savedata_size = tox_get_savedata_size(tox);
|
||||||
uint8_t *const savedata = (uint8_t *)malloc(savedata_size);
|
uint8_t *const savedata = (uint8_t *)malloc(savedata_size);
|
||||||
|
@ -61,7 +61,7 @@ static void tox_connection_callback(Tox *tox, Tox_Connection connection, void *u
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_information(Tox *tox)
|
static void print_information(const Tox *tox)
|
||||||
{
|
{
|
||||||
uint8_t tox_id[TOX_ADDRESS_SIZE];
|
uint8_t tox_id[TOX_ADDRESS_SIZE];
|
||||||
char tox_id_str[TOX_ADDRESS_SIZE * 2];
|
char tox_id_str[TOX_ADDRESS_SIZE * 2];
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#include "../../testing/misc_tools.h" // hex_string_to_bin
|
#include "../../testing/misc_tools.h" // hex_string_to_bin
|
||||||
#include "../../toxcore/ccompat.h"
|
#include "../../toxcore/ccompat.h"
|
||||||
|
|
||||||
static int load_file(char *filename, unsigned char **result)
|
static int load_file(const char *filename, unsigned char **result)
|
||||||
{
|
{
|
||||||
int size = 0;
|
int size = 0;
|
||||||
FILE *f = fopen(filename, "rb");
|
FILE *f = fopen(filename, "rb");
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
*
|
*
|
||||||
* Generates Tox's key pairs, checking if a certain string is in the public key.
|
* Generates Tox's key pairs, checking if a certain string is in the public key.
|
||||||
*
|
*
|
||||||
* Requires sodium or nacl library.
|
* Requires sodium library.
|
||||||
*
|
*
|
||||||
* There seem to be some problems with the code working on Windows -- it works
|
* There seem to be some problems with the code working on Windows -- it works
|
||||||
* when built in debug mode with MinGW 4.8, but it doesn't work correctly when
|
* when built in debug mode with MinGW 4.8, but it doesn't work correctly when
|
||||||
@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
#define PRINT_TRIES_COUNT
|
#define PRINT_TRIES_COUNT
|
||||||
|
|
||||||
static void print_key(unsigned char *key)
|
static void print_key(const unsigned char *key)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < crypto_box_PUBLICKEYBYTES; ++i) {
|
for (size_t i = 0; i < crypto_box_PUBLICKEYBYTES; ++i) {
|
||||||
if (key[i] < 16) {
|
if (key[i] < 16) {
|
||||||
@ -125,7 +125,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
} while (!found);
|
} while (!found);
|
||||||
} else {
|
} else {
|
||||||
unsigned char *p = public_key + offset;
|
const unsigned char *p = public_key + offset;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
#ifdef PRINT_TRIES_COUNT
|
#ifdef PRINT_TRIES_COUNT
|
||||||
|
@ -6,8 +6,11 @@
|
|||||||
#
|
#
|
||||||
# Example:
|
# Example:
|
||||||
#
|
#
|
||||||
# other/make_single_file testing/misc_tools.c auto_tests/send_message_test.c | \
|
# other/make_single_file auto_tests/toxav_basic_test.c auto_tests/auto_test_support.c testing/misc_tools.c | \
|
||||||
# tcc -o send_message_test - $(pkg-config --cflags --libs libsodium opus vpx)
|
# tcc -o toxav_basic_test - $(pkg-config --cflags --libs libsodium opus vpx)
|
||||||
|
#
|
||||||
|
# other/make_single_file -core auto_tests/send_message_test.c auto_tests/auto_test_support.c testing/misc_tools.c | \
|
||||||
|
# tcc -o send_message_test - $(pkg-config --cflags --libs libsodium)
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
@ -44,7 +47,7 @@ sub emit {
|
|||||||
|
|
||||||
if (@ARGV and $ARGV[0] eq "-core") {
|
if (@ARGV and $ARGV[0] eq "-core") {
|
||||||
shift @ARGV;
|
shift @ARGV;
|
||||||
for my $fn (<toxcore/*.c>, <third_party/cmp/*.c>) {
|
for my $fn (<toxcore/*.c>, <toxcore/*/*.c>, <third_party/cmp/*.c>) {
|
||||||
emit(abs_path $fn);
|
emit(abs_path $fn);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -15,11 +15,14 @@ sh_test(
|
|||||||
"-Wno-callback-names",
|
"-Wno-callback-names",
|
||||||
"-Wno-enum-names",
|
"-Wno-enum-names",
|
||||||
"+RTS",
|
"+RTS",
|
||||||
"-N3",
|
"-N4",
|
||||||
"-RTS",
|
"-RTS",
|
||||||
],
|
],
|
||||||
data = CIMPLE_FILES,
|
data = CIMPLE_FILES,
|
||||||
tags = ["haskell"],
|
tags = [
|
||||||
|
"haskell",
|
||||||
|
"no-cross",
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
sh_test(
|
sh_test(
|
||||||
@ -32,7 +35,11 @@ sh_test(
|
|||||||
"-Iexternal/libvpx",
|
"-Iexternal/libvpx",
|
||||||
"-Iexternal/opus/include",
|
"-Iexternal/opus/include",
|
||||||
"-Ihs-tokstyle/include",
|
"-Ihs-tokstyle/include",
|
||||||
] + ["$(locations %s)" % f for f in CIMPLE_FILES],
|
] + ["$(locations %s)" % f for f in CIMPLE_FILES] + [
|
||||||
|
"+RTS",
|
||||||
|
"-N4",
|
||||||
|
"-RTS",
|
||||||
|
],
|
||||||
data = CIMPLE_FILES + [
|
data = CIMPLE_FILES + [
|
||||||
"//c-toxcore/third_party:headers",
|
"//c-toxcore/third_party:headers",
|
||||||
"//hs-tokstyle:headers",
|
"//hs-tokstyle:headers",
|
||||||
@ -40,7 +47,10 @@ sh_test(
|
|||||||
"@libvpx//:headers",
|
"@libvpx//:headers",
|
||||||
"@opus//:headers",
|
"@opus//:headers",
|
||||||
],
|
],
|
||||||
tags = ["haskell"],
|
tags = [
|
||||||
|
"haskell",
|
||||||
|
"no-cross",
|
||||||
|
],
|
||||||
toolchains = ["@rules_cc//cc:current_cc_toolchain"],
|
toolchains = ["@rules_cc//cc:current_cc_toolchain"],
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -50,7 +60,10 @@ sh_test(
|
|||||||
srcs = ["//hs-cimple/tools:cimplefmt"],
|
srcs = ["//hs-cimple/tools:cimplefmt"],
|
||||||
args = ["--reparse"] + ["$(locations %s)" % f for f in CIMPLE_FILES],
|
args = ["--reparse"] + ["$(locations %s)" % f for f in CIMPLE_FILES],
|
||||||
data = CIMPLE_FILES,
|
data = CIMPLE_FILES,
|
||||||
tags = ["haskell"],
|
tags = [
|
||||||
|
"haskell",
|
||||||
|
"no-cross",
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
cc_library(
|
cc_library(
|
||||||
|
@ -3,7 +3,15 @@ set(misc_tools_SOURCES
|
|||||||
misc_tools.c
|
misc_tools.c
|
||||||
misc_tools.h)
|
misc_tools.h)
|
||||||
add_library(misc_tools STATIC ${misc_tools_SOURCES})
|
add_library(misc_tools STATIC ${misc_tools_SOURCES})
|
||||||
target_link_modules(misc_tools toxcore)
|
if(TARGET toxcore_static)
|
||||||
|
target_link_libraries(misc_tools PRIVATE toxcore_static)
|
||||||
|
else()
|
||||||
|
target_link_libraries(misc_tools PRIVATE toxcore_shared)
|
||||||
|
endif()
|
||||||
|
target_link_libraries(misc_tools PRIVATE ${LIBSODIUM_LIBRARIES})
|
||||||
|
target_link_directories(misc_tools PUBLIC ${LIBSODIUM_LIBRARY_DIRS})
|
||||||
|
target_include_directories(misc_tools SYSTEM PRIVATE ${LIBSODIUM_INCLUDE_DIRS})
|
||||||
|
target_compile_options(misc_tools PRIVATE ${LIBSODIUM_CFLAGS_OTHER})
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
#
|
#
|
||||||
@ -11,7 +19,12 @@ target_link_modules(misc_tools toxcore)
|
|||||||
#
|
#
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
if (BUILD_MISC_TESTS)
|
if(BUILD_MISC_TESTS)
|
||||||
add_executable(Messenger_test Messenger_test.c)
|
add_executable(Messenger_test Messenger_test.c)
|
||||||
target_link_modules(Messenger_test toxcore misc_tools)
|
target_link_libraries(Messenger_test PRIVATE misc_tools)
|
||||||
|
if(TARGET toxcore_static)
|
||||||
|
target_link_libraries(Messenger_test PRIVATE toxcore_static)
|
||||||
|
else()
|
||||||
|
target_link_libraries(Messenger_test PRIVATE toxcore_shared)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
@ -19,16 +19,12 @@ noinst_PROGRAMS += Messenger_test
|
|||||||
Messenger_test_SOURCES = \
|
Messenger_test_SOURCES = \
|
||||||
../testing/Messenger_test.c
|
../testing/Messenger_test.c
|
||||||
|
|
||||||
Messenger_test_CFLAGS = $(LIBSODIUM_CFLAGS) \
|
Messenger_test_CFLAGS = $(LIBSODIUM_CFLAGS)
|
||||||
$(NACL_CFLAGS)
|
|
||||||
|
|
||||||
Messenger_test_LDADD = $(LIBSODIUM_LDFLAGS) \
|
Messenger_test_LDADD = $(LIBSODIUM_LDFLAGS) \
|
||||||
$(NACL_LDFLAGS) \
|
|
||||||
libmisc_tools.la \
|
libmisc_tools.la \
|
||||||
libtoxcore.la \
|
libtoxcore.la \
|
||||||
$(LIBSODIUM_LIBS) \
|
$(LIBSODIUM_LIBS) \
|
||||||
$(NACL_OBJECTS) \
|
|
||||||
$(NACL_LIBS) \
|
|
||||||
$(WINSOCK2_LIBS)
|
$(WINSOCK2_LIBS)
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
* If it receives a message from a friend it replies back.
|
* If it receives a message from a friend it replies back.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* This is how I compile it: gcc -O2 -Wall -D VANILLA_NACL -o test ../core/Lossless_UDP.c ../core/network.c ../core/net_crypto.c ../core/Messenger.c ../core/DHT.c ../nacl/build/${HOSTNAME%.*}/lib/amd64/{cpucycles.o,libnacl.a,randombytes.o} Messenger_test.c
|
* This is how I compile it: gcc -O2 -Wall -o test ../core/Lossless_UDP.c ../core/network.c ../core/net_crypto.c ../core/Messenger.c ../core/DHT.c Messenger_test.c -lsodium
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Command line arguments are the ip, port and public_key of a node (for bootstrapping).
|
* Command line arguments are the ip, port and public_key of a node (for bootstrapping).
|
||||||
|
@ -13,14 +13,14 @@ endif()
|
|||||||
|
|
||||||
# Fuzzes the toxsave API
|
# Fuzzes the toxsave API
|
||||||
add_executable(toxsave_fuzzer toxsave_harness.cc)
|
add_executable(toxsave_fuzzer toxsave_harness.cc)
|
||||||
target_link_libraries(toxsave_fuzzer toxcore_static fuzz_support ${LIBFUZZER_LINKER_FLAGS})
|
target_link_libraries(toxsave_fuzzer PRIVATE toxcore_static fuzz_support ${LIBFUZZER_LINKER_FLAGS})
|
||||||
|
|
||||||
# Fuzzes the bootstrap process
|
# Fuzzes the bootstrap process
|
||||||
add_executable(bootstrap_fuzzer bootstrap_harness.cc)
|
add_executable(bootstrap_fuzzer bootstrap_harness.cc)
|
||||||
target_link_libraries(bootstrap_fuzzer toxcore_static fuzz_support ${LIBFUZZER_LINKER_FLAGS})
|
target_link_libraries(bootstrap_fuzzer PRIVATE toxcore_static fuzz_support ${LIBFUZZER_LINKER_FLAGS})
|
||||||
|
|
||||||
add_executable(DHT_fuzz_test ../../toxcore/DHT_fuzz_test.cc)
|
add_executable(DHT_fuzz_test ../../toxcore/DHT_fuzz_test.cc)
|
||||||
target_link_libraries(DHT_fuzz_test toxcore_static fuzz_support ${LIBFUZZER_LINKER_FLAGS})
|
target_link_libraries(DHT_fuzz_test PRIVATE toxcore_static fuzz_support ${LIBFUZZER_LINKER_FLAGS})
|
||||||
|
|
||||||
add_executable(tox_events_fuzz_test ../../toxcore/tox_events_fuzz_test.cc)
|
add_executable(tox_events_fuzz_test ../../toxcore/tox_events_fuzz_test.cc)
|
||||||
target_link_libraries(tox_events_fuzz_test toxcore_static fuzz_support ${LIBFUZZER_LINKER_FLAGS})
|
target_link_libraries(tox_events_fuzz_test PRIVATE toxcore_static fuzz_support ${LIBFUZZER_LINKER_FLAGS})
|
||||||
|
@ -20,9 +20,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
#include <sodium.h>
|
#include <sodium.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
|
#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@ -141,7 +139,6 @@ int cmdline_parsefor_ipv46(int argc, char **argv, bool *ipv6enabled)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
static const char *test_rng_name(void)
|
static const char *test_rng_name(void)
|
||||||
{
|
{
|
||||||
return "test_rng";
|
return "test_rng";
|
||||||
@ -198,11 +195,3 @@ int use_test_rng(uint32_t seed)
|
|||||||
|
|
||||||
return randombytes_set_implementation(&test_rng);
|
return randombytes_set_implementation(&test_rng);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
int use_test_rng(uint32_t seed)
|
|
||||||
{
|
|
||||||
assert(!"libsodium required for use_test_rng");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
@ -25,19 +25,16 @@ libtoxav_la_SOURCES = ../toxav/rtp.h \
|
|||||||
libtoxav_la_CFLAGS = -I../toxcore \
|
libtoxav_la_CFLAGS = -I../toxcore \
|
||||||
-I../toxav \
|
-I../toxav \
|
||||||
$(LIBSODIUM_CFLAGS) \
|
$(LIBSODIUM_CFLAGS) \
|
||||||
$(NACL_CFLAGS) \
|
|
||||||
$(AV_CFLAGS) \
|
$(AV_CFLAGS) \
|
||||||
$(PTHREAD_CFLAGS)
|
$(PTHREAD_CFLAGS)
|
||||||
|
|
||||||
libtoxav_la_LDFLAGS = $(LT_LDFLAGS) \
|
libtoxav_la_LDFLAGS = $(LT_LDFLAGS) \
|
||||||
$(LIBSODIUM_LDFLAGS) \
|
$(LIBSODIUM_LDFLAGS) \
|
||||||
$(NACL_LDFLAGS) \
|
|
||||||
$(EXTRA_LT_LDFLAGS) \
|
$(EXTRA_LT_LDFLAGS) \
|
||||||
$(WINSOCK2_LIBS)
|
$(WINSOCK2_LIBS)
|
||||||
|
|
||||||
libtoxav_la_LIBADD = libtoxcore.la \
|
libtoxav_la_LIBADD = libtoxcore.la \
|
||||||
$(LIBSODIUM_LIBS) \
|
$(LIBSODIUM_LIBS) \
|
||||||
$(NACL_LIBS) \
|
|
||||||
$(PTHREAD_LIBS) \
|
$(PTHREAD_LIBS) \
|
||||||
$(AV_LIBS)
|
$(AV_LIBS)
|
||||||
|
|
||||||
|
@ -434,7 +434,7 @@ static int handle_group_audio_packet(void *object, uint32_t groupnumber, uint32_
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (decode_audio_packet((Group_AV *)object, peer_av, groupnumber, friendgroupnumber) == 0) {
|
while (decode_audio_packet((Group_AV *)object, peer_av, groupnumber, friendgroupnumber) == 0) {
|
||||||
continue;
|
/* Continue. */
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -612,7 +612,7 @@ static int send_audio_packet(const Group_Chats *g_c, uint32_t groupnumber, const
|
|||||||
* @retval 0 on success.
|
* @retval 0 on success.
|
||||||
* @retval -1 on failure.
|
* @retval -1 on failure.
|
||||||
*/
|
*/
|
||||||
int group_send_audio(Group_Chats *g_c, uint32_t groupnumber, const int16_t *pcm, unsigned int samples, uint8_t channels,
|
int group_send_audio(const Group_Chats *g_c, uint32_t groupnumber, const int16_t *pcm, unsigned int samples, uint8_t channels,
|
||||||
uint32_t sample_rate)
|
uint32_t sample_rate)
|
||||||
{
|
{
|
||||||
Group_AV *group_av = (Group_AV *)group_get_object(g_c, groupnumber);
|
Group_AV *group_av = (Group_AV *)group_get_object(g_c, groupnumber);
|
||||||
|
@ -40,7 +40,7 @@ int join_av_groupchat(const Logger *log, Tox *tox, Group_Chats *g_c, uint32_t fr
|
|||||||
* @retval 0 on success.
|
* @retval 0 on success.
|
||||||
* @retval -1 on failure.
|
* @retval -1 on failure.
|
||||||
*/
|
*/
|
||||||
int group_send_audio(Group_Chats *g_c, uint32_t groupnumber, const int16_t *pcm, unsigned int samples, uint8_t channels,
|
int group_send_audio(const Group_Chats *g_c, uint32_t groupnumber, const int16_t *pcm, unsigned int samples, uint8_t channels,
|
||||||
uint32_t sample_rate);
|
uint32_t sample_rate);
|
||||||
|
|
||||||
/** @brief Enable A/V in a groupchat.
|
/** @brief Enable A/V in a groupchat.
|
||||||
|
@ -62,8 +62,8 @@ static void msg_init(MSIMessage *dest, MSIRequest request);
|
|||||||
static int msg_parse_in(const Logger *log, MSIMessage *dest, const uint8_t *data, uint16_t length);
|
static int msg_parse_in(const Logger *log, MSIMessage *dest, const uint8_t *data, uint16_t length);
|
||||||
static uint8_t *msg_parse_header_out(MSIHeaderID id, uint8_t *dest, const void *value, uint8_t value_len,
|
static uint8_t *msg_parse_header_out(MSIHeaderID id, uint8_t *dest, const void *value, uint8_t value_len,
|
||||||
uint16_t *length);
|
uint16_t *length);
|
||||||
static int send_message(Messenger *m, uint32_t friend_number, const MSIMessage *msg);
|
static int send_message(const Messenger *m, uint32_t friend_number, const MSIMessage *msg);
|
||||||
static int send_error(Messenger *m, uint32_t friend_number, MSIError error);
|
static int send_error(const Messenger *m, uint32_t friend_number, MSIError error);
|
||||||
static bool invoke_callback(MSICall *call, MSICallbackID cb);
|
static bool invoke_callback(MSICall *call, MSICallbackID cb);
|
||||||
static MSICall *get_call(MSISession *session, uint32_t friend_number);
|
static MSICall *get_call(MSISession *session, uint32_t friend_number);
|
||||||
static MSICall *new_call(MSISession *session, uint32_t friend_number);
|
static MSICall *new_call(MSISession *session, uint32_t friend_number);
|
||||||
@ -444,7 +444,7 @@ static uint8_t *msg_parse_header_out(MSIHeaderID id, uint8_t *dest, const void *
|
|||||||
|
|
||||||
return dest + value_len; /* Set to next position ready to be written */
|
return dest + value_len; /* Set to next position ready to be written */
|
||||||
}
|
}
|
||||||
static int send_message(Messenger *m, uint32_t friend_number, const MSIMessage *msg)
|
static int send_message(const Messenger *m, uint32_t friend_number, const MSIMessage *msg)
|
||||||
{
|
{
|
||||||
/* Parse and send message */
|
/* Parse and send message */
|
||||||
assert(m != nullptr);
|
assert(m != nullptr);
|
||||||
@ -489,7 +489,7 @@ static int send_message(Messenger *m, uint32_t friend_number, const MSIMessage *
|
|||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
static int send_error(Messenger *m, uint32_t friend_number, MSIError error)
|
static int send_error(const Messenger *m, uint32_t friend_number, MSIError error)
|
||||||
{
|
{
|
||||||
/* Send error message */
|
/* Send error message */
|
||||||
assert(m != nullptr);
|
assert(m != nullptr);
|
||||||
|
@ -838,11 +838,17 @@ cc_library(
|
|||||||
|
|
||||||
cc_library(
|
cc_library(
|
||||||
name = "tox_events",
|
name = "tox_events",
|
||||||
srcs = ["tox_events.c"] + glob([
|
srcs = [
|
||||||
|
"tox_event.c",
|
||||||
|
"tox_events.c",
|
||||||
|
] + glob([
|
||||||
"events/*.c",
|
"events/*.c",
|
||||||
"events/*.h",
|
|
||||||
]),
|
]),
|
||||||
hdrs = ["tox_events.h"],
|
hdrs = [
|
||||||
|
"events/events_alloc.h",
|
||||||
|
"tox_event.h",
|
||||||
|
"tox_events.h",
|
||||||
|
],
|
||||||
visibility = ["//c-toxcore:__subpackages__"],
|
visibility = ["//c-toxcore:__subpackages__"],
|
||||||
deps = [
|
deps = [
|
||||||
":attributes",
|
":attributes",
|
||||||
|
@ -1930,14 +1930,11 @@ static void do_close(DHT *dht)
|
|||||||
for (size_t i = 0; i < LCLIENT_LIST; ++i) {
|
for (size_t i = 0; i < LCLIENT_LIST; ++i) {
|
||||||
Client_data *const client = &dht->close_clientlist[i];
|
Client_data *const client = &dht->close_clientlist[i];
|
||||||
|
|
||||||
IPPTsPng *const assocs[] = { &client->assoc6, &client->assoc4, nullptr };
|
if (client->assoc4.timestamp != 0) {
|
||||||
|
client->assoc4.timestamp = badonly;
|
||||||
for (IPPTsPng * const *it = assocs; *it != nullptr; ++it) {
|
}
|
||||||
IPPTsPng *const assoc = *it;
|
if (client->assoc6.timestamp != 0) {
|
||||||
|
client->assoc6.timestamp = badonly;
|
||||||
if (assoc->timestamp != 0) {
|
|
||||||
assoc->timestamp = badonly;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -192,8 +192,11 @@ TEST(AnnounceNodes, SetAndTest)
|
|||||||
const Memory *mem = system_memory();
|
const Memory *mem = system_memory();
|
||||||
|
|
||||||
Logger *log = logger_new();
|
Logger *log = logger_new();
|
||||||
|
ASSERT_NE(log, nullptr);
|
||||||
Mono_Time *mono_time = mono_time_new(mem, nullptr, nullptr);
|
Mono_Time *mono_time = mono_time_new(mem, nullptr, nullptr);
|
||||||
|
ASSERT_NE(mono_time, nullptr);
|
||||||
Networking_Core *net = new_networking_no_udp(log, mem, ns);
|
Networking_Core *net = new_networking_no_udp(log, mem, ns);
|
||||||
|
ASSERT_NE(net, nullptr);
|
||||||
DHT *dht = new_dht(log, mem, rng, ns, mono_time, net, true, true);
|
DHT *dht = new_dht(log, mem, rng, ns, mono_time, net, true, true);
|
||||||
ASSERT_NE(dht, nullptr);
|
ASSERT_NE(dht, nullptr);
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@ libtoxcore_la_SOURCES = ../third_party/cmp/cmp.c \
|
|||||||
../toxcore/events/conference_peer_list_changed.c \
|
../toxcore/events/conference_peer_list_changed.c \
|
||||||
../toxcore/events/conference_peer_name.c \
|
../toxcore/events/conference_peer_name.c \
|
||||||
../toxcore/events/conference_title.c \
|
../toxcore/events/conference_title.c \
|
||||||
|
../toxcore/events/events_alloc.c \
|
||||||
|
../toxcore/events/events_alloc.h \
|
||||||
../toxcore/events/file_chunk_request.c \
|
../toxcore/events/file_chunk_request.c \
|
||||||
../toxcore/events/file_recv.c \
|
../toxcore/events/file_recv.c \
|
||||||
../toxcore/events/file_recv_chunk.c \
|
../toxcore/events/file_recv_chunk.c \
|
||||||
@ -35,8 +37,6 @@ libtoxcore_la_SOURCES = ../third_party/cmp/cmp.c \
|
|||||||
../toxcore/events/friend_status.c \
|
../toxcore/events/friend_status.c \
|
||||||
../toxcore/events/friend_status_message.c \
|
../toxcore/events/friend_status_message.c \
|
||||||
../toxcore/events/friend_typing.c \
|
../toxcore/events/friend_typing.c \
|
||||||
../toxcore/events/events_alloc.c \
|
|
||||||
../toxcore/events/events_alloc.h \
|
|
||||||
../toxcore/events/self_connection_status.c \
|
../toxcore/events/self_connection_status.c \
|
||||||
../toxcore/events/group_custom_packet.c \
|
../toxcore/events/group_custom_packet.c \
|
||||||
../toxcore/events/group_custom_private_packet.c \
|
../toxcore/events/group_custom_private_packet.c \
|
||||||
@ -90,6 +90,8 @@ libtoxcore_la_SOURCES = ../third_party/cmp/cmp.c \
|
|||||||
../toxcore/tox.c \
|
../toxcore/tox.c \
|
||||||
../toxcore/tox_dispatch.h \
|
../toxcore/tox_dispatch.h \
|
||||||
../toxcore/tox_dispatch.c \
|
../toxcore/tox_dispatch.c \
|
||||||
|
../toxcore/tox_event.h \
|
||||||
|
../toxcore/tox_event.c \
|
||||||
../toxcore/tox_events.h \
|
../toxcore/tox_events.h \
|
||||||
../toxcore/tox_events.c \
|
../toxcore/tox_events.c \
|
||||||
../toxcore/tox_unpack.h \
|
../toxcore/tox_unpack.h \
|
||||||
@ -141,7 +143,6 @@ libtoxcore_la_SOURCES = ../third_party/cmp/cmp.c \
|
|||||||
libtoxcore_la_CFLAGS = -I$(top_srcdir) \
|
libtoxcore_la_CFLAGS = -I$(top_srcdir) \
|
||||||
-I$(top_srcdir)/toxcore \
|
-I$(top_srcdir)/toxcore \
|
||||||
$(LIBSODIUM_CFLAGS) \
|
$(LIBSODIUM_CFLAGS) \
|
||||||
$(NACL_CFLAGS) \
|
|
||||||
$(MSGPACK_CFLAGS) \
|
$(MSGPACK_CFLAGS) \
|
||||||
$(PTHREAD_CFLAGS) \
|
$(PTHREAD_CFLAGS) \
|
||||||
-DCMP_NO_FLOAT=1
|
-DCMP_NO_FLOAT=1
|
||||||
@ -149,15 +150,12 @@ libtoxcore_la_CFLAGS = -I$(top_srcdir) \
|
|||||||
libtoxcore_la_LDFLAGS = $(LT_LDFLAGS) \
|
libtoxcore_la_LDFLAGS = $(LT_LDFLAGS) \
|
||||||
$(EXTRA_LT_LDFLAGS) \
|
$(EXTRA_LT_LDFLAGS) \
|
||||||
$(LIBSODIUM_LDFLAGS) \
|
$(LIBSODIUM_LDFLAGS) \
|
||||||
$(NACL_LDFLAGS) \
|
|
||||||
$(MSGPACK_LDFLAGS) \
|
$(MSGPACK_LDFLAGS) \
|
||||||
$(MATH_LDFLAGS) \
|
$(MATH_LDFLAGS) \
|
||||||
$(RT_LIBS) \
|
$(RT_LIBS) \
|
||||||
$(WINSOCK2_LIBS)
|
$(WINSOCK2_LIBS)
|
||||||
|
|
||||||
libtoxcore_la_LIBADD = $(LIBSODIUM_LIBS) \
|
libtoxcore_la_LIBADD = $(LIBSODIUM_LIBS) \
|
||||||
$(NACL_OBJECTS) \
|
|
||||||
$(NACL_LIBS) \
|
|
||||||
$(MSGPACK_LIBS) \
|
$(MSGPACK_LIBS) \
|
||||||
$(PTHREAD_LIBS)
|
$(PTHREAD_LIBS)
|
||||||
|
|
||||||
|
@ -757,17 +757,34 @@ int m_set_statusmessage(Messenger *m, const uint8_t *status, uint16_t length)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Userstatus userstatus_from_int(uint8_t status)
|
non_null()
|
||||||
|
static bool userstatus_from_int(uint8_t status, Userstatus *out)
|
||||||
{
|
{
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case 0:
|
case USERSTATUS_NONE: {
|
||||||
return USERSTATUS_NONE;
|
*out = USERSTATUS_NONE;
|
||||||
case 1:
|
return true;
|
||||||
return USERSTATUS_AWAY;
|
}
|
||||||
case 2:
|
|
||||||
return USERSTATUS_BUSY;
|
case USERSTATUS_AWAY: {
|
||||||
default:
|
*out = USERSTATUS_AWAY;
|
||||||
return USERSTATUS_INVALID;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
case USERSTATUS_BUSY: {
|
||||||
|
*out = USERSTATUS_BUSY;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
case USERSTATUS_INVALID: {
|
||||||
|
*out = USERSTATUS_INVALID;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: {
|
||||||
|
*out = USERSTATUS_INVALID;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -781,7 +798,7 @@ int m_set_userstatus(Messenger *m, uint8_t status)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
m->userstatus = userstatus_from_int(status);
|
userstatus_from_int(status, &m->userstatus);
|
||||||
|
|
||||||
for (uint32_t i = 0; i < m->numfriends; ++i) {
|
for (uint32_t i = 0; i < m->numfriends; ++i) {
|
||||||
m->friendlist[i].userstatus_sent = false;
|
m->friendlist[i].userstatus_sent = false;
|
||||||
@ -937,7 +954,7 @@ static int set_friend_statusmessage(const Messenger *m, int32_t friendnumber, co
|
|||||||
non_null()
|
non_null()
|
||||||
static void set_friend_userstatus(const Messenger *m, int32_t friendnumber, uint8_t status)
|
static void set_friend_userstatus(const Messenger *m, int32_t friendnumber, uint8_t status)
|
||||||
{
|
{
|
||||||
m->friendlist[friendnumber].userstatus = userstatus_from_int(status);
|
userstatus_from_int(status, &m->friendlist[friendnumber].userstatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
non_null()
|
non_null()
|
||||||
@ -2095,9 +2112,8 @@ static int m_handle_packet_userstatus(Messenger *m, const int i, const uint8_t *
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Userstatus status = userstatus_from_int(data[0]);
|
Userstatus status;
|
||||||
|
if (!userstatus_from_int(data[0], &status)) {
|
||||||
if (status == USERSTATUS_INVALID) {
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2343,8 +2359,6 @@ static int m_handle_packet_msi(Messenger *m, const int i, const uint8_t *data, c
|
|||||||
non_null(1, 3) nullable(5)
|
non_null(1, 3) nullable(5)
|
||||||
static int m_handle_packet_invite_groupchat(Messenger *m, const int i, const uint8_t *data, const uint16_t data_length, void *userdata)
|
static int m_handle_packet_invite_groupchat(Messenger *m, const int i, const uint8_t *data, const uint16_t data_length, void *userdata)
|
||||||
{
|
{
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
|
|
||||||
// first two bytes are messenger packet type and group invite type
|
// first two bytes are messenger packet type and group invite type
|
||||||
if (data_length < 2 + GC_JOIN_DATA_LENGTH) {
|
if (data_length < 2 + GC_JOIN_DATA_LENGTH) {
|
||||||
return 0;
|
return 0;
|
||||||
@ -2365,8 +2379,6 @@ static int m_handle_packet_invite_groupchat(Messenger *m, const int i, const uin
|
|||||||
handle_gc_invite_confirmed_packet(m->group_handler, i, join_data, join_data_len);
|
handle_gc_invite_confirmed_packet(m->group_handler, i, join_data, join_data_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // VANILLA_NACL
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2547,7 +2559,6 @@ uint32_t messenger_run_interval(const Messenger *m)
|
|||||||
*
|
*
|
||||||
* @retval true if success.
|
* @retval true if success.
|
||||||
*/
|
*/
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
non_null()
|
non_null()
|
||||||
static bool self_announce_group(const Messenger *m, GC_Chat *chat, Onion_Friend *onion_friend)
|
static bool self_announce_group(const Messenger *m, GC_Chat *chat, Onion_Friend *onion_friend)
|
||||||
{
|
{
|
||||||
@ -2623,7 +2634,6 @@ static void do_gc_onion_friends(const Messenger *m)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // VANILLA_NACL
|
|
||||||
|
|
||||||
/** @brief The main loop that needs to be run at least 20 times per second. */
|
/** @brief The main loop that needs to be run at least 20 times per second. */
|
||||||
void do_messenger(Messenger *m, void *userdata)
|
void do_messenger(Messenger *m, void *userdata)
|
||||||
@ -2661,11 +2671,9 @@ void do_messenger(Messenger *m, void *userdata)
|
|||||||
do_onion_client(m->onion_c);
|
do_onion_client(m->onion_c);
|
||||||
do_friend_connections(m->fr_c, userdata);
|
do_friend_connections(m->fr_c, userdata);
|
||||||
do_friends(m, userdata);
|
do_friends(m, userdata);
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
do_gc(m->group_handler, userdata);
|
do_gc(m->group_handler, userdata);
|
||||||
do_gca(m->mono_time, m->group_announce);
|
do_gca(m->mono_time, m->group_announce);
|
||||||
do_gc_onion_friends(m);
|
do_gc_onion_friends(m);
|
||||||
#endif
|
|
||||||
m_connection_status_callback(m, userdata);
|
m_connection_status_callback(m, userdata);
|
||||||
|
|
||||||
if (mono_time_get(m->mono_time) > m->lastdump + DUMPING_CLIENTS_FRIENDS_EVERY_N_SECONDS) {
|
if (mono_time_get(m->mono_time) > m->lastdump + DUMPING_CLIENTS_FRIENDS_EVERY_N_SECONDS) {
|
||||||
@ -3148,7 +3156,6 @@ static State_Load_Status friends_list_load(Messenger *m, const uint8_t *data, ui
|
|||||||
return STATE_LOAD_STATUS_CONTINUE;
|
return STATE_LOAD_STATUS_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
non_null()
|
non_null()
|
||||||
static void pack_groupchats(const GC_Session *c, Bin_Pack *bp)
|
static void pack_groupchats(const GC_Session *c, Bin_Pack *bp)
|
||||||
{
|
{
|
||||||
@ -3176,7 +3183,7 @@ static bool pack_groupchats_handler(Bin_Pack *bp, const Logger *log, const void
|
|||||||
non_null()
|
non_null()
|
||||||
static uint32_t saved_groups_size(const Messenger *m)
|
static uint32_t saved_groups_size(const Messenger *m)
|
||||||
{
|
{
|
||||||
GC_Session *c = m->group_handler;
|
const GC_Session *c = m->group_handler;
|
||||||
return bin_pack_obj_size(pack_groupchats_handler, m->log, c);
|
return bin_pack_obj_size(pack_groupchats_handler, m->log, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3245,7 +3252,6 @@ static State_Load_Status groups_load(Messenger *m, const uint8_t *data, uint32_t
|
|||||||
|
|
||||||
return STATE_LOAD_STATUS_CONTINUE;
|
return STATE_LOAD_STATUS_CONTINUE;
|
||||||
}
|
}
|
||||||
#endif /* VANILLA_NACL */
|
|
||||||
|
|
||||||
// name state plugin
|
// name state plugin
|
||||||
non_null()
|
non_null()
|
||||||
@ -3433,9 +3439,7 @@ static void m_register_default_plugins(Messenger *m)
|
|||||||
m_register_state_plugin(m, STATE_TYPE_STATUSMESSAGE, status_message_size, load_status_message,
|
m_register_state_plugin(m, STATE_TYPE_STATUSMESSAGE, status_message_size, load_status_message,
|
||||||
save_status_message);
|
save_status_message);
|
||||||
m_register_state_plugin(m, STATE_TYPE_STATUS, status_size, load_status, save_status);
|
m_register_state_plugin(m, STATE_TYPE_STATUS, status_size, load_status, save_status);
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
m_register_state_plugin(m, STATE_TYPE_GROUPS, saved_groups_size, groups_load, groups_save);
|
m_register_state_plugin(m, STATE_TYPE_GROUPS, saved_groups_size, groups_load, groups_save);
|
||||||
#endif
|
|
||||||
m_register_state_plugin(m, STATE_TYPE_TCP_RELAY, tcp_relay_size, load_tcp_relays, save_tcp_relays);
|
m_register_state_plugin(m, STATE_TYPE_TCP_RELAY, tcp_relay_size, load_tcp_relays, save_tcp_relays);
|
||||||
m_register_state_plugin(m, STATE_TYPE_PATH_NODE, path_node_size, load_path_nodes, save_path_nodes);
|
m_register_state_plugin(m, STATE_TYPE_PATH_NODE, path_node_size, load_path_nodes, save_path_nodes);
|
||||||
}
|
}
|
||||||
@ -3579,14 +3583,14 @@ Messenger *new_messenger(Mono_Time *mono_time, const Memory *mem, const Random *
|
|||||||
|
|
||||||
if (m->net == nullptr) {
|
if (m->net == nullptr) {
|
||||||
friendreq_kill(m->fr);
|
friendreq_kill(m->fr);
|
||||||
logger_kill(m->log);
|
|
||||||
mem_delete(mem, m);
|
|
||||||
|
|
||||||
if (error != nullptr && net_err == 1) {
|
if (error != nullptr && net_err == 1) {
|
||||||
LOGGER_WARNING(m->log, "network initialisation failed (no ports available)");
|
LOGGER_WARNING(m->log, "network initialisation failed (no ports available)");
|
||||||
*error = MESSENGER_ERROR_PORT;
|
*error = MESSENGER_ERROR_PORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger_kill(m->log);
|
||||||
|
mem_delete(mem, m);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3613,7 +3617,6 @@ Messenger *new_messenger(Mono_Time *mono_time, const Memory *mem, const Random *
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
m->group_announce = new_gca_list();
|
m->group_announce = new_gca_list();
|
||||||
|
|
||||||
if (m->group_announce == nullptr) {
|
if (m->group_announce == nullptr) {
|
||||||
@ -3628,11 +3631,13 @@ Messenger *new_messenger(Mono_Time *mono_time, const Memory *mem, const Random *
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* VANILLA_NACL */
|
|
||||||
|
|
||||||
if (options->dht_announcements_enabled) {
|
if (options->dht_announcements_enabled) {
|
||||||
m->forwarding = new_forwarding(m->log, m->rng, m->mono_time, m->dht);
|
m->forwarding = new_forwarding(m->log, m->rng, m->mono_time, m->dht);
|
||||||
m->announce = new_announcements(m->log, m->mem, m->rng, m->mono_time, m->forwarding);
|
if (m->forwarding != nullptr) {
|
||||||
|
m->announce = new_announcements(m->log, m->mem, m->rng, m->mono_time, m->forwarding);
|
||||||
|
} else {
|
||||||
|
m->announce = nullptr;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
m->forwarding = nullptr;
|
m->forwarding = nullptr;
|
||||||
m->announce = nullptr;
|
m->announce = nullptr;
|
||||||
@ -3652,9 +3657,7 @@ Messenger *new_messenger(Mono_Time *mono_time, const Memory *mem, const Random *
|
|||||||
kill_onion(m->onion);
|
kill_onion(m->onion);
|
||||||
kill_onion_announce(m->onion_a);
|
kill_onion_announce(m->onion_a);
|
||||||
kill_onion_client(m->onion_c);
|
kill_onion_client(m->onion_c);
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
kill_gca(m->group_announce);
|
kill_gca(m->group_announce);
|
||||||
#endif /* VANILLA_NACL */
|
|
||||||
kill_friend_connections(m->fr_c);
|
kill_friend_connections(m->fr_c);
|
||||||
kill_announcements(m->announce);
|
kill_announcements(m->announce);
|
||||||
kill_forwarding(m->forwarding);
|
kill_forwarding(m->forwarding);
|
||||||
@ -3667,7 +3670,6 @@ Messenger *new_messenger(Mono_Time *mono_time, const Memory *mem, const Random *
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
gca_onion_init(m->group_announce, m->onion_a);
|
gca_onion_init(m->group_announce, m->onion_a);
|
||||||
|
|
||||||
m->group_handler = new_dht_groupchats(m);
|
m->group_handler = new_dht_groupchats(m);
|
||||||
@ -3691,8 +3693,6 @@ Messenger *new_messenger(Mono_Time *mono_time, const Memory *mem, const Random *
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* VANILLA_NACL */
|
|
||||||
|
|
||||||
if (options->tcp_server_port != 0) {
|
if (options->tcp_server_port != 0) {
|
||||||
m->tcp_server = new_tcp_server(m->log, m->mem, m->rng, m->ns, options->ipv6enabled, 1,
|
m->tcp_server = new_tcp_server(m->log, m->mem, m->rng, m->ns, options->ipv6enabled, 1,
|
||||||
&options->tcp_server_port, dht_get_self_secret_key(m->dht),
|
&options->tcp_server_port, dht_get_self_secret_key(m->dht),
|
||||||
@ -3703,14 +3703,10 @@ Messenger *new_messenger(Mono_Time *mono_time, const Memory *mem, const Random *
|
|||||||
|
|
||||||
kill_onion(m->onion);
|
kill_onion(m->onion);
|
||||||
kill_onion_announce(m->onion_a);
|
kill_onion_announce(m->onion_a);
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
kill_dht_groupchats(m->group_handler);
|
kill_dht_groupchats(m->group_handler);
|
||||||
#endif
|
|
||||||
kill_friend_connections(m->fr_c);
|
kill_friend_connections(m->fr_c);
|
||||||
kill_onion_client(m->onion_c);
|
kill_onion_client(m->onion_c);
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
kill_gca(m->group_announce);
|
kill_gca(m->group_announce);
|
||||||
#endif
|
|
||||||
kill_announcements(m->announce);
|
kill_announcements(m->announce);
|
||||||
kill_forwarding(m->forwarding);
|
kill_forwarding(m->forwarding);
|
||||||
kill_net_crypto(m->net_crypto);
|
kill_net_crypto(m->net_crypto);
|
||||||
@ -3762,14 +3758,10 @@ void kill_messenger(Messenger *m)
|
|||||||
|
|
||||||
kill_onion(m->onion);
|
kill_onion(m->onion);
|
||||||
kill_onion_announce(m->onion_a);
|
kill_onion_announce(m->onion_a);
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
kill_dht_groupchats(m->group_handler);
|
kill_dht_groupchats(m->group_handler);
|
||||||
#endif
|
|
||||||
kill_friend_connections(m->fr_c);
|
kill_friend_connections(m->fr_c);
|
||||||
kill_onion_client(m->onion_c);
|
kill_onion_client(m->onion_c);
|
||||||
#ifndef VANILLA_NACL
|
|
||||||
kill_gca(m->group_announce);
|
kill_gca(m->group_announce);
|
||||||
#endif
|
|
||||||
kill_announcements(m->announce);
|
kill_announcements(m->announce);
|
||||||
kill_forwarding(m->forwarding);
|
kill_forwarding(m->forwarding);
|
||||||
kill_net_crypto(m->net_crypto);
|
kill_net_crypto(m->net_crypto);
|
||||||
@ -3780,11 +3772,11 @@ void kill_messenger(Messenger *m)
|
|||||||
clear_receipts(m, i);
|
clear_receipts(m, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger_kill(m->log);
|
|
||||||
mem_delete(m->mem, m->friendlist);
|
mem_delete(m->mem, m->friendlist);
|
||||||
friendreq_kill(m->fr);
|
friendreq_kill(m->fr);
|
||||||
|
|
||||||
mem_delete(m->mem, m->options.state_plugins);
|
mem_delete(m->mem, m->options.state_plugins);
|
||||||
|
logger_kill(m->log);
|
||||||
mem_delete(m->mem, m);
|
mem_delete(m->mem, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,7 +297,7 @@ struct Messenger {
|
|||||||
m_friend_connectionstatuschange_internal_cb *friend_connectionstatuschange_internal;
|
m_friend_connectionstatuschange_internal_cb *friend_connectionstatuschange_internal;
|
||||||
void *friend_connectionstatuschange_internal_userdata;
|
void *friend_connectionstatuschange_internal_userdata;
|
||||||
|
|
||||||
struct Group_Chats *conferences_object; /* Set by new_groupchats()*/
|
struct Group_Chats *conferences_object;
|
||||||
m_conference_invite_cb *conference_invite;
|
m_conference_invite_cb *conference_invite;
|
||||||
|
|
||||||
m_group_invite_cb *group_invite;
|
m_group_invite_cb *group_invite;
|
||||||
|
@ -118,9 +118,9 @@ static bool connect_sock_to(const Logger *logger, const Memory *mem, Socket sock
|
|||||||
non_null()
|
non_null()
|
||||||
static int proxy_http_generate_connection_request(TCP_Client_Connection *tcp_conn)
|
static int proxy_http_generate_connection_request(TCP_Client_Connection *tcp_conn)
|
||||||
{
|
{
|
||||||
char one[] = "CONNECT ";
|
const char one[] = "CONNECT ";
|
||||||
char two[] = " HTTP/1.1\nHost: ";
|
const char two[] = " HTTP/1.1\nHost: ";
|
||||||
char three[] = "\r\n\r\n";
|
const char three[] = "\r\n\r\n";
|
||||||
|
|
||||||
char ip[TOX_INET6_ADDRSTRLEN];
|
char ip[TOX_INET6_ADDRSTRLEN];
|
||||||
|
|
||||||
@ -149,7 +149,7 @@ static int proxy_http_generate_connection_request(TCP_Client_Connection *tcp_con
|
|||||||
non_null()
|
non_null()
|
||||||
static int proxy_http_read_connection_response(const Logger *logger, const TCP_Client_Connection *tcp_conn)
|
static int proxy_http_read_connection_response(const Logger *logger, const TCP_Client_Connection *tcp_conn)
|
||||||
{
|
{
|
||||||
char success[] = "200";
|
const char success[] = "200";
|
||||||
uint8_t data[16]; // draining works the best if the length is a power of 2
|
uint8_t data[16]; // draining works the best if the length is a power of 2
|
||||||
|
|
||||||
const TCP_Connection *con0 = &tcp_conn->con;
|
const TCP_Connection *con0 = &tcp_conn->con;
|
||||||
@ -185,14 +185,16 @@ static int proxy_http_read_connection_response(const Logger *logger, const TCP_C
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define TCP_SOCKS5_PROXY_HS_VERSION_SOCKS5 0x05
|
enum Tcp_Socks5_Proxy_Hs {
|
||||||
#define TCP_SOCKS5_PROXY_HS_COMM_ESTABLISH_REQUEST 0x01
|
TCP_SOCKS5_PROXY_HS_VERSION_SOCKS5 = 0x05,
|
||||||
#define TCP_SOCKS5_PROXY_HS_COMM_REQUEST_GRANTED 0x00
|
TCP_SOCKS5_PROXY_HS_COMM_ESTABLISH_REQUEST = 0x01,
|
||||||
#define TCP_SOCKS5_PROXY_HS_AUTH_METHODS_SUPPORTED 0x01
|
TCP_SOCKS5_PROXY_HS_COMM_REQUEST_GRANTED = 0x00,
|
||||||
#define TCP_SOCKS5_PROXY_HS_NO_AUTH 0x00
|
TCP_SOCKS5_PROXY_HS_AUTH_METHODS_SUPPORTED = 0x01,
|
||||||
#define TCP_SOCKS5_PROXY_HS_RESERVED 0x00
|
TCP_SOCKS5_PROXY_HS_NO_AUTH = 0x00,
|
||||||
#define TCP_SOCKS5_PROXY_HS_ADDR_TYPE_IPV4 0x01
|
TCP_SOCKS5_PROXY_HS_RESERVED = 0x00,
|
||||||
#define TCP_SOCKS5_PROXY_HS_ADDR_TYPE_IPV6 0x04
|
TCP_SOCKS5_PROXY_HS_ADDR_TYPE_IPV4 = 0x01,
|
||||||
|
TCP_SOCKS5_PROXY_HS_ADDR_TYPE_IPV6 = 0x04,
|
||||||
|
};
|
||||||
|
|
||||||
non_null()
|
non_null()
|
||||||
static void proxy_socks5_generate_greetings(TCP_Client_Connection *tcp_conn)
|
static void proxy_socks5_generate_greetings(TCP_Client_Connection *tcp_conn)
|
||||||
@ -910,8 +912,7 @@ static int do_confirmed_tcp(const Logger *logger, TCP_Client_Connection *conn, c
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (tcp_process_packet(logger, conn, userdata)) {
|
while (tcp_process_packet(logger, conn, userdata)) {
|
||||||
// Keep reading until error or out of data.
|
/* Keep reading until error or out of data. */
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -24,33 +24,20 @@ void wipe_priority_list(const Memory *mem, TCP_Priority_List *p);
|
|||||||
#define NUM_RESERVED_PORTS 16
|
#define NUM_RESERVED_PORTS 16
|
||||||
#define NUM_CLIENT_CONNECTIONS (256 - NUM_RESERVED_PORTS)
|
#define NUM_CLIENT_CONNECTIONS (256 - NUM_RESERVED_PORTS)
|
||||||
|
|
||||||
#ifdef USE_TEST_NETWORK
|
typedef enum Tcp_Packet {
|
||||||
#define TCP_PACKET_FORWARD_REQUEST 11
|
TCP_PACKET_ROUTING_REQUEST = 0,
|
||||||
#define TCP_PACKET_FORWARDING 10
|
TCP_PACKET_ROUTING_RESPONSE = 1,
|
||||||
#define TCP_PACKET_ROUTING_REQUEST 9
|
TCP_PACKET_CONNECTION_NOTIFICATION = 2,
|
||||||
#define TCP_PACKET_ROUTING_RESPONSE 8
|
TCP_PACKET_DISCONNECT_NOTIFICATION = 3,
|
||||||
#define TCP_PACKET_CONNECTION_NOTIFICATION 7
|
TCP_PACKET_PING = 4,
|
||||||
#define TCP_PACKET_DISCONNECT_NOTIFICATION 6
|
TCP_PACKET_PONG = 5,
|
||||||
#define TCP_PACKET_PING 5
|
TCP_PACKET_OOB_SEND = 6,
|
||||||
#define TCP_PACKET_PONG 4
|
TCP_PACKET_OOB_RECV = 7,
|
||||||
#define TCP_PACKET_OOB_SEND 3
|
TCP_PACKET_ONION_REQUEST = 8,
|
||||||
#define TCP_PACKET_OOB_RECV 2
|
TCP_PACKET_ONION_RESPONSE = 9,
|
||||||
#define TCP_PACKET_ONION_REQUEST 1
|
TCP_PACKET_FORWARD_REQUEST = 10,
|
||||||
#define TCP_PACKET_ONION_RESPONSE 0
|
TCP_PACKET_FORWARDING = 11,
|
||||||
#else
|
} Tcp_Packet;
|
||||||
#define TCP_PACKET_ROUTING_REQUEST 0
|
|
||||||
#define TCP_PACKET_ROUTING_RESPONSE 1
|
|
||||||
#define TCP_PACKET_CONNECTION_NOTIFICATION 2
|
|
||||||
#define TCP_PACKET_DISCONNECT_NOTIFICATION 3
|
|
||||||
#define TCP_PACKET_PING 4
|
|
||||||
#define TCP_PACKET_PONG 5
|
|
||||||
#define TCP_PACKET_OOB_SEND 6
|
|
||||||
#define TCP_PACKET_OOB_RECV 7
|
|
||||||
#define TCP_PACKET_ONION_REQUEST 8
|
|
||||||
#define TCP_PACKET_ONION_RESPONSE 9
|
|
||||||
#define TCP_PACKET_FORWARD_REQUEST 10
|
|
||||||
#define TCP_PACKET_FORWARDING 11
|
|
||||||
#endif // test network
|
|
||||||
|
|
||||||
#define TCP_HANDSHAKE_PLAIN_SIZE (CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_NONCE_SIZE)
|
#define TCP_HANDSHAKE_PLAIN_SIZE (CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_NONCE_SIZE)
|
||||||
#define TCP_SERVER_HANDSHAKE_SIZE (CRYPTO_NONCE_SIZE + TCP_HANDSHAKE_PLAIN_SIZE + CRYPTO_MAC_SIZE)
|
#define TCP_SERVER_HANDSHAKE_SIZE (CRYPTO_NONCE_SIZE + TCP_HANDSHAKE_PLAIN_SIZE + CRYPTO_MAC_SIZE)
|
||||||
|
@ -407,7 +407,7 @@ int get_random_tcp_onion_conn_number(const TCP_Connections *tcp_c)
|
|||||||
* return -1 on failure.
|
* return -1 on failure.
|
||||||
*/
|
*/
|
||||||
non_null()
|
non_null()
|
||||||
static int get_conn_number_by_ip_port(TCP_Connections *tcp_c, const IP_Port *ip_port)
|
static int get_conn_number_by_ip_port(const TCP_Connections *tcp_c, const IP_Port *ip_port)
|
||||||
{
|
{
|
||||||
for (uint32_t i = 0; i < tcp_c->tcp_connections_length; ++i) {
|
for (uint32_t i = 0; i < tcp_c->tcp_connections_length; ++i) {
|
||||||
const IP_Port conn_ip_port = tcp_con_ip_port(tcp_c->tcp_connections[i].connection);
|
const IP_Port conn_ip_port = tcp_con_ip_port(tcp_c->tcp_connections[i].connection);
|
||||||
@ -1059,7 +1059,7 @@ static int send_tcp_relay_routing_request(const TCP_Connections *tcp_c, int tcp_
|
|||||||
non_null()
|
non_null()
|
||||||
static int tcp_response_callback(void *object, uint8_t connection_id, const uint8_t *public_key)
|
static int tcp_response_callback(void *object, uint8_t connection_id, const uint8_t *public_key)
|
||||||
{
|
{
|
||||||
TCP_Client_Connection *tcp_client_con = (TCP_Client_Connection *)object;
|
const TCP_Client_Connection *tcp_client_con = (const TCP_Client_Connection *)object;
|
||||||
const TCP_Connections *tcp_c = (const TCP_Connections *)tcp_con_custom_object(tcp_client_con);
|
const TCP_Connections *tcp_c = (const TCP_Connections *)tcp_con_custom_object(tcp_client_con);
|
||||||
|
|
||||||
const unsigned int tcp_connections_number = tcp_con_custom_uint(tcp_client_con);
|
const unsigned int tcp_connections_number = tcp_con_custom_uint(tcp_client_con);
|
||||||
@ -1256,7 +1256,7 @@ static int tcp_relay_on_online(TCP_Connections *tcp_c, int tcp_connections_numbe
|
|||||||
bool sent_any = false;
|
bool sent_any = false;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < tcp_c->connections_length; ++i) {
|
for (uint32_t i = 0; i < tcp_c->connections_length; ++i) {
|
||||||
TCP_Connection_to *con_to = get_connection(tcp_c, i);
|
const TCP_Connection_to *con_to = get_connection(tcp_c, i);
|
||||||
|
|
||||||
if (con_to != nullptr) {
|
if (con_to != nullptr) {
|
||||||
if (tcp_connection_in_conn(con_to, tcp_connections_number)) {
|
if (tcp_connection_in_conn(con_to, tcp_connections_number)) {
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user