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:
2023-12-27 12:37:22 +01:00
parent 83e200df43
commit b2ae9530a4
173 changed files with 9191 additions and 5633 deletions

View File

@ -1,6 +1,27 @@
################################################
# autotools-linux
FROM toxchat/nacl:latest
FROM ubuntu:22.04
RUN apt-get update && apt-get install --no-install-recommends -y \
autoconf \
automake \
ca-certificates \
curl \
libconfig-dev \
libopus-dev \
libsodium-dev \
libtool \
libvpx-dev \
make \
pkg-config \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN groupadd -r -g 1000 builder \
&& useradd -m --no-log-init -r -g builder -u 1000 builder
USER builder
WORKDIR /home/builder
# Copy the sources and run the build.
COPY --chown=builder:builder . /home/builder/c-toxcore/

View File

@ -1,13 +1,15 @@
FROM toxchat/c-toxcore:sources AS src
FROM ubuntu:22.04 AS build
FROM ubuntu:20.04 AS build
RUN apt-get update && \
DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
ca-certificates \
clang \
cmake \
curl \
gcc \
git \
golang \
golang-1.18 \
libconfig-dev \
libgtest-dev \
libopus-dev \
@ -22,10 +24,16 @@ RUN apt-get update && \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& pip3 install --no-cache-dir gcovr
RUN ["strip", "-g",\
"/usr/lib/x86_64-linux-gnu/libgtest.a",\
"/usr/lib/x86_64-linux-gnu/libgtest_main.a"]
RUN ["curl", "-s", "https://codecov.io/bash", "-o", "/usr/local/bin/codecov"]
RUN ["chmod", "+x", "/usr/local/bin/codecov"]
ENV CC=clang \
CXX=clang++ \
PYTHONUNBUFFERED=1
PYTHONUNBUFFERED=1 \
PATH=$PATH:/usr/lib/go-1.18/bin
SHELL ["/bin/bash", "-c"]
WORKDIR /work
@ -41,26 +49,27 @@ RUN source .github/scripts/flags-coverage.sh \
-DENABLE_SHARED=OFF \
-DMIN_LOGGER_LEVEL=TRACE \
-DMUST_BUILD_TOXAV=ON \
-DNON_HERMETIC_TESTS=ON \
-DNON_HERMETIC_TESTS=OFF \
-DSTRICT_ABI=ON \
-DAUTOTEST=ON \
-DPROXY_TEST=ON \
-DUSE_IPV6=OFF \
-DTEST_TIMEOUT_SECONDS=30 \
-DTEST_TIMEOUT_SECONDS=40 \
&& cmake --build _build --parallel 8 --target install
WORKDIR /work/_build
RUN /work/proxy_server \
& ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6
RUN /work/other/proxy/proxy_server \
& (ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6 || \
ctest -j50 --output-on-failure --rerun-failed --repeat until-pass:6)
WORKDIR /work/mallocfail
RUN ["git", "clone", "--depth=1", "https://github.com/ralight/mallocfail", "/work/mallocfail"]
COPY run_mallocfail /usr/local/bin/
COPY syscall_funcs.c src/
COPY other/docker/coverage/syscall_funcs.c src/
RUN gcc -fPIC -shared -O2 -g3 -Wall -Ideps/uthash -Ideps/sha3 deps/*/*.c src/*.c -o mallocfail.so -ldl -lbacktrace \
&& install mallocfail.so /usr/local/lib/mallocfail.so
WORKDIR /work/_build
COPY other/docker/coverage/run_mallocfail /usr/local/bin/
RUN ["run_mallocfail", "--ctest=2", "--jobs=8"]
RUN ["gcovr", \
"--sort-percentage", \
@ -74,6 +83,4 @@ RUN ["gcovr", \
"--exclude=(.+/)?other/", \
"--exclude=(.+/)?testing/"]
FROM nginx:alpine
COPY --from=build /work/_build/html/coverage_details.html /usr/share/nginx/html/index.html
COPY --from=build /work/_build/html/ /usr/share/nginx/html/
WORKDIR /work

View 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/

View File

@ -1,7 +1,9 @@
#!/bin/sh
#!/usr/bin/env bash
set -eux
read -a ci_env <<<"$(bash <(curl -s https://codecov.io/env))"
docker build -t toxchat/c-toxcore:sources -f other/docker/sources/Dockerfile .
docker build -t toxchat/c-toxcore:coverage other/docker/coverage
docker run --name toxcore-coverage --rm -it -p "28192:80" toxchat/c-toxcore:coverage
docker build -t toxchat/c-toxcore:coverage -f other/docker/coverage/Dockerfile .
docker run "${ci_env[@]}" -e CI=true --name toxcore-coverage --rm -t toxchat/c-toxcore:coverage /usr/local/bin/codecov -x "llvm-cov gcov"

View File

@ -39,8 +39,8 @@ _ENV = {
}
def run_mallocfail(tmpdir: str, timeout: float, exe: str,
iteration: int) -> bool:
def run_mallocfail(tmpdir: str, timeout: float, exe: str, iteration: int,
keep_going: bool) -> bool:
"""Run a program with mallocfail."""
print(f"\x1b[1;33mmallocfail '{exe}' run #{iteration}\x1b[0m")
hashes = os.path.join(tmpdir, _HASHES)
@ -73,7 +73,8 @@ def run_mallocfail(tmpdir: str, timeout: float, exe: str,
print(
f"\x1b[1;32mProgram '{exe}' failed to handle OOM situation cleanly\x1b[0m"
)
raise Exception("Aborting test")
if not keep_going:
raise Exception("Aborting test")
return True
@ -95,7 +96,8 @@ def find_prog(name: str) -> Tuple[Optional[str], ...]:
return path
return None
return (attempt(f"./unit_{name}_test"), attempt(f"./auto_{name}_test"))
return (attempt(f"./unit_{name}_test"),
attempt(f"auto_tests/auto_{name}_test"))
def parse_flags(args: List[str]) -> Tuple[Dict[str, str], List[str]]:
@ -110,15 +112,19 @@ def parse_flags(args: List[str]) -> Tuple[Dict[str, str], List[str]]:
return flags, exes
def loop_mallocfail(tmpdir: str, timeout: float, exe: str) -> None:
def loop_mallocfail(tmpdir: str,
timeout: float,
exe: str,
keep_going: bool = False) -> None:
i = 1
while run_mallocfail(tmpdir, timeout, exe, i):
while run_mallocfail(tmpdir, timeout, exe, i, keep_going):
i += 1
def isolated_mallocfail(timeout: int, exe: str) -> None:
with tempfile.TemporaryDirectory(prefix="mallocfail") as tmpdir:
print(f"\x1b[1;33mRunning for {exe} in isolated path {tmpdir}\x1b[0m")
os.mkdir(os.path.join(tmpdir, "auto_tests"))
shutil.copy(exe, os.path.join(tmpdir, exe))
shutil.copy(_HASHES, os.path.join(tmpdir, _HASHES))
loop_mallocfail(tmpdir, timeout, exe)
@ -149,7 +155,7 @@ def main(args: List[str]) -> None:
# such as llvm_gcov_init fail.
if os.path.exists(_PRIMER):
print(f"\x1b[1;33mPriming hashes with unit_util_test\x1b[0m")
loop_mallocfail(".", timeout, _PRIMER)
loop_mallocfail(".", timeout, _PRIMER, keep_going=True)
print(f"\x1b[1;33m--------------------------------\x1b[0m")
print(f"\x1b[1;33mStarting mallocfail for {len(exes)} programs:\x1b[0m")

8
other/docker/coverage/serve Executable file
View 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

View 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
View File

@ -0,0 +1,5 @@
#!/bin/sh
set -eux
BUILD=cppcheck
docker build -t "toxchat/c-toxcore:$BUILD" -f "other/docker/$BUILD/Dockerfile" .

View 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
-->

View 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",
],
)

View File

@ -1,48 +1,32 @@
FROM toxchat/c-toxcore:sources AS src
FROM ubuntu:18.04
FROM mluis/qemu-esp32:latest
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
ENV IDF_TARGET=esp32
RUN apt-get update && \
DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
bison \
ccache \
cmake \
flex \
git \
gperf \
libncurses-dev \
ninja-build \
python \
python-cryptography \
python-future \
python-pip \
python-pyparsing \
python-serial \
python-setuptools \
wget \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /root/toxcore
ENV ESP32_TARBALL=xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0 \
IDF_PATH="/root/esp/esp-idf" \
PATH="/root/esp/esp-idf/tools:/root/esp/xtensa-esp32-elf/bin:$PATH"
WORKDIR /root/esp
RUN wget -q https://dl.espressif.com/dl/$ESP32_TARBALL.tar.gz \
&& tar zxf $ESP32_TARBALL.tar.gz \
&& rm -f $ESP32_TARBALL.tar.gz \
&& git clone -b v3.3 --recursive --depth=1 --shallow-submodules https://github.com/espressif/esp-idf
# Build an initial bootstrap hello world just to compile libsodium and other
# system level dependencies.
COPY other/docker/esp32/sdkconfig \
other/docker/esp32/CMakeLists.txt \
/root/toxcore/
COPY other/docker/esp32/bootstrap/ \
/root/toxcore/main/
RUN . /root/esp/esp-idf/export.sh && idf.py build
# Build a hello world first, so the OS and libsodium etc. are compiled.
WORKDIR /root/esp/toxcore
COPY other/docker/esp32/CMakeLists.txt /root/esp/toxcore/
COPY other/docker/esp32/hello/ /root/esp/toxcore/main/
RUN idf.py build
# Then copy over the actual toxcore sources and build those.
COPY --from=src /src/third_party/cmp/ /root/esp/toxcore/main/third_party/cmp/
COPY --from=src /src/toxencryptsave/defines.h /root/esp/toxcore/main/toxencryptsave/
COPY --from=src /src/toxcore/ /root/esp/toxcore/main/toxcore/
COPY other/docker/esp32/toxcore/CMakeLists.txt /root/esp/toxcore/main/
COPY other/docker/esp32/toxcore/toxcore_main.cc /root/esp/toxcore/main/other/docker/esp32/main/
RUN idf.py build
# Copy over toxcore sources and build those.
COPY third_party/cmp/ /root/toxcore/main/third_party/cmp/
COPY toxencryptsave/defines.h /root/toxcore/main/toxencryptsave/
COPY toxcore/ /root/toxcore/main/toxcore/
COPY other/docker/esp32/main/CMakeLists.txt \
/root/toxcore/main/
COPY other/docker/esp32/main/*.cc \
other/docker/esp32/main/*.h \
/root/toxcore/main/other/docker/esp32/main/
RUN touch /root/toxcore/main/CMakeLists.txt \
&& . /root/esp/esp-idf/export.sh && idf.py build
RUN ls -lh build/toxcore.bin \
&& shasum build/toxcore.bin
&& sha512sum build/toxcore.bin
RUN /root/flash.sh build/toxcore.bin
COPY other/docker/esp32/qemu-test /root/toxcore/
RUN ["/root/toxcore/qemu-test"]

View File

@ -0,0 +1,4 @@
idf_component_register(
SRCS hello_main.cc
INCLUDE_DIRS "."
REQUIRES esp_netif lwip)

View 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"); }

View File

@ -0,0 +1,2 @@
dependencies:
espressif/libsodium: "==1.0.20"

View File

@ -1,4 +0,0 @@
set(COMPONENT_SRCS "hello_main.c")
set(COMPONENT_ADD_INCLUDEDIRS "")
register_component()

View File

@ -1,6 +0,0 @@
#include <stdio.h>
void app_main(void)
{
printf("Hello world!\n");
}

View File

@ -0,0 +1,3 @@
#include "main/tox_main.h"
int main() { tox_main(); }

View 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)

View 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, &eth_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();
}

View 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
}
}

View 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
View 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

View File

@ -1,4 +1,3 @@
#!/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 .

5
other/docker/esp32/run-host Executable file
View 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

File diff suppressed because it is too large Load Diff

View File

@ -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()

View File

@ -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);
}

View File

@ -39,7 +39,7 @@ RUN tcc \
COPY other/make_single_file /work/other/
RUN \
other/make_single_file \
other/make_single_file -core \
auto_tests/auto_test_support.c \
auto_tests/send_message_test.c \
testing/misc_tools.c | \
@ -47,5 +47,17 @@ RUN \
-o send_message_test \
-Wall -Werror \
-bench -g \
$(pkg-config --cflags --libs libsodium opus vpx) \
$(pkg-config --cflags --libs libsodium) \
&& ./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'