mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
feat: Add binary packing functions for tox events.
This commit is contained in:
parent
9218566599
commit
0a2190f28c
|
@ -32,6 +32,7 @@ jobs:
|
||||||
git
|
git
|
||||||
libconfig-dev
|
libconfig-dev
|
||||||
libgtest-dev
|
libgtest-dev
|
||||||
|
libmsgpack-dev
|
||||||
libopus-dev
|
libopus-dev
|
||||||
libsodium-dev
|
libsodium-dev
|
||||||
libvpx-dev
|
libvpx-dev
|
||||||
|
@ -79,7 +80,7 @@ jobs:
|
||||||
toxcore/*/*.c
|
toxcore/*/*.c
|
||||||
toxencryptsave/*.c
|
toxencryptsave/*.c
|
||||||
-lpthread
|
-lpthread
|
||||||
$(pkg-config --cflags --libs libsodium opus vpx)
|
$(pkg-config --cflags --libs libsodium msgpack opus vpx)
|
||||||
|
|
||||||
static-analysis:
|
static-analysis:
|
||||||
working_directory: ~/work
|
working_directory: ~/work
|
||||||
|
|
7
.github/scripts/cmake-linux
vendored
7
.github/scripts/cmake-linux
vendored
|
@ -4,7 +4,12 @@ set -eu
|
||||||
|
|
||||||
NPROC=$(nproc)
|
NPROC=$(nproc)
|
||||||
|
|
||||||
sudo apt-get install -y --no-install-recommends libopus-dev libsodium-dev libvpx-dev ninja-build
|
sudo apt-get install -y --no-install-recommends \
|
||||||
|
libmsgpack-dev \
|
||||||
|
libopus-dev \
|
||||||
|
libsodium-dev \
|
||||||
|
libvpx-dev \
|
||||||
|
ninja-build
|
||||||
|
|
||||||
. ".github/scripts/flags-$CC.sh"
|
. ".github/scripts/flags-$CC.sh"
|
||||||
|
|
||||||
|
|
7
.github/scripts/cmake-osx
vendored
7
.github/scripts/cmake-osx
vendored
|
@ -7,7 +7,12 @@ NPROC=$(sysctl -n hw.physicalcpu)
|
||||||
# Workaround for bug in Homebrew where it only finds an old Ruby version.
|
# Workaround for bug in Homebrew where it only finds an old Ruby version.
|
||||||
brew update
|
brew update
|
||||||
|
|
||||||
brew install libconfig libsodium libvpx opus
|
brew install \
|
||||||
|
libconfig \
|
||||||
|
libsodium \
|
||||||
|
libvpx \
|
||||||
|
msgpack \
|
||||||
|
opus
|
||||||
|
|
||||||
. ".github/scripts/flags-clang.sh"
|
. ".github/scripts/flags-clang.sh"
|
||||||
|
|
||||||
|
|
2
.github/scripts/cmake-win32
vendored
2
.github/scripts/cmake-win32
vendored
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
i686=true
|
i686=true
|
||||||
x86_64=false
|
x86_64=false
|
||||||
|
|
2
.github/scripts/cmake-win64
vendored
2
.github/scripts/cmake-win64
vendored
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
i686=false
|
i686=false
|
||||||
x86_64=true
|
x86_64=true
|
||||||
|
|
4
.github/scripts/cmake-windows.sh
vendored
4
.github/scripts/cmake-windows.sh
vendored
|
@ -7,14 +7,12 @@ set -eu
|
||||||
NPROC=$(nproc)
|
NPROC=$(nproc)
|
||||||
|
|
||||||
ci_install() {
|
ci_install() {
|
||||||
cd other/docker/windows
|
|
||||||
|
|
||||||
docker build \
|
docker build \
|
||||||
--build-arg SUPPORT_ARCH_i686="$i686" \
|
--build-arg SUPPORT_ARCH_i686="$i686" \
|
||||||
--build-arg SUPPORT_ARCH_x86_64="$x86_64" \
|
--build-arg SUPPORT_ARCH_x86_64="$x86_64" \
|
||||||
--build-arg SUPPORT_TEST=true \
|
--build-arg SUPPORT_TEST=true \
|
||||||
-t toxcore-"$WINDOWS_ARCH" \
|
-t toxcore-"$WINDOWS_ARCH" \
|
||||||
.
|
other/docker/windows
|
||||||
}
|
}
|
||||||
|
|
||||||
ci_script() {
|
ci_script() {
|
||||||
|
|
8
.github/scripts/sonar-prepare
vendored
8
.github/scripts/sonar-prepare
vendored
|
@ -2,7 +2,13 @@
|
||||||
|
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
sudo apt-get install -y --no-install-recommends libconfig-dev libopus-dev libsodium-dev libvpx-dev ninja-build
|
sudo apt-get install -y --no-install-recommends \
|
||||||
|
libconfig-dev \
|
||||||
|
libmsgpack-dev \
|
||||||
|
libopus-dev \
|
||||||
|
libsodium-dev \
|
||||||
|
libvpx-dev \
|
||||||
|
ninja-build
|
||||||
|
|
||||||
. ".github/scripts/flags-gcc.sh"
|
. ".github/scripts/flags-gcc.sh"
|
||||||
|
|
||||||
|
|
1
.github/settings.yml
vendored
1
.github/settings.yml
vendored
|
@ -25,6 +25,7 @@ branches:
|
||||||
- "build-tcc"
|
- "build-tcc"
|
||||||
- "build-win32"
|
- "build-win32"
|
||||||
- "build-win64"
|
- "build-win64"
|
||||||
|
- "buildifier"
|
||||||
- "CodeFactor"
|
- "CodeFactor"
|
||||||
- "coverage-linux"
|
- "coverage-linux"
|
||||||
- "ci/circleci: asan"
|
- "ci/circleci: asan"
|
||||||
|
|
10
.github/workflows/ci.yml
vendored
10
.github/workflows/ci.yml
vendored
|
@ -95,12 +95,14 @@ jobs:
|
||||||
sudo apt-get install -y --no-install-recommends
|
sudo apt-get install -y --no-install-recommends
|
||||||
tcc
|
tcc
|
||||||
libconfig-dev
|
libconfig-dev
|
||||||
|
libmsgpack-dev
|
||||||
libopus-dev
|
libopus-dev
|
||||||
libsodium-dev
|
libsodium-dev
|
||||||
libvpx-dev
|
libvpx-dev
|
||||||
- name: Build with TCC
|
- name: Build with TCC
|
||||||
run:
|
run:
|
||||||
tcc
|
tcc
|
||||||
|
-Dinline=static
|
||||||
-o send_message_test
|
-o send_message_test
|
||||||
-Wall -Werror
|
-Wall -Werror
|
||||||
-bench -g
|
-bench -g
|
||||||
|
@ -111,7 +113,7 @@ jobs:
|
||||||
toxcore/*.c
|
toxcore/*.c
|
||||||
toxcore/*/*.c
|
toxcore/*/*.c
|
||||||
toxencryptsave/*.c
|
toxencryptsave/*.c
|
||||||
$(pkg-config --cflags --libs libsodium opus vpx)
|
$(pkg-config --cflags --libs libsodium msgpack opus vpx)
|
||||||
- name: Run the test
|
- name: Run the test
|
||||||
run: "./send_message_test | grep 'tox clients connected'"
|
run: "./send_message_test | grep 'tox clients connected'"
|
||||||
- name: Build amalgamation file with TCC
|
- name: Build amalgamation file with TCC
|
||||||
|
@ -124,7 +126,7 @@ jobs:
|
||||||
-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 msgpack opus vpx)
|
||||||
- name: Run the test again
|
- name: Run the test again
|
||||||
run: "./send_message_test | grep 'tox clients connected'"
|
run: "./send_message_test | grep 'tox clients connected'"
|
||||||
|
|
||||||
|
@ -149,8 +151,8 @@ jobs:
|
||||||
toxcore/*.c
|
toxcore/*.c
|
||||||
toxcore/*/*.c
|
toxcore/*/*.c
|
||||||
toxencryptsave/*.c
|
toxencryptsave/*.c
|
||||||
-D__COMPCERT__ -DDISABLE_VLA
|
-D__COMPCERT__ -DDISABLE_VLA -Dinline=
|
||||||
-lpthread $(pkg-config --cflags --libs libsodium opus vpx)
|
-lpthread $(pkg-config --cflags --libs libsodium msgpack opus vpx)
|
||||||
- name: Run the test
|
- name: Run the test
|
||||||
run: "./send_message_test | grep 'tox clients connected'"
|
run: "./send_message_test | grep 'tox clients connected'"
|
||||||
|
|
||||||
|
|
|
@ -9,3 +9,5 @@ ignored:
|
||||||
- DL3013
|
- DL3013
|
||||||
- DL3018
|
- DL3018
|
||||||
- DL3059
|
- DL3059
|
||||||
|
# $(pkg-config ...) needs this
|
||||||
|
- SC2046
|
||||||
|
|
|
@ -274,6 +274,8 @@ set(toxcore_SOURCES ${toxcore_SOURCES}
|
||||||
toxcore/tox_events.c
|
toxcore/tox_events.c
|
||||||
toxcore/tox_events.h)
|
toxcore/tox_events.h)
|
||||||
set(toxcore_API_HEADERS ${toxcore_API_HEADERS} ${toxcore_SOURCE_DIR}/toxcore/tox_events.h^tox)
|
set(toxcore_API_HEADERS ${toxcore_API_HEADERS} ${toxcore_SOURCE_DIR}/toxcore/tox_events.h^tox)
|
||||||
|
set(toxcore_LINK_MODULES ${toxcore_LINK_MODULES} ${MSGPACK_LIBRARIES})
|
||||||
|
set(toxcore_PKGCONFIG_REQUIRES ${toxcore_PKGCONFIG_REQUIRES} msgpack)
|
||||||
|
|
||||||
# LAYER 10: Dispatch recorded events to callbacks.
|
# LAYER 10: Dispatch recorded events to callbacks.
|
||||||
# -------------------
|
# -------------------
|
||||||
|
|
|
@ -7,6 +7,7 @@ install:
|
||||||
- py -3 -m pip install conan
|
- py -3 -m pip install conan
|
||||||
|
|
||||||
before_build:
|
before_build:
|
||||||
|
- conan remote add -i 0 conancenter https://center.conan.io
|
||||||
- conan install -if _build .
|
- conan install -if _build .
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
|
|
|
@ -34,6 +34,8 @@ 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_many_tcp_test \
|
tox_many_tcp_test \
|
||||||
tox_many_test \
|
tox_many_test \
|
||||||
tox_one_test \
|
tox_one_test \
|
||||||
|
@ -49,16 +51,19 @@ endif
|
||||||
|
|
||||||
AUTOTEST_CFLAGS = \
|
AUTOTEST_CFLAGS = \
|
||||||
$(LIBSODIUM_CFLAGS) \
|
$(LIBSODIUM_CFLAGS) \
|
||||||
|
$(MSGPACK_CFLAGS) \
|
||||||
$(NACL_CFLAGS)
|
$(NACL_CFLAGS)
|
||||||
|
|
||||||
AUTOTEST_LDADD = \
|
AUTOTEST_LDADD = \
|
||||||
$(LIBSODIUM_LDFLAGS) \
|
$(LIBSODIUM_LDFLAGS) \
|
||||||
|
$(MSGPACK_LDFLAGS) \
|
||||||
$(NACL_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) \
|
||||||
|
$(MSGPACK_LIBS) \
|
||||||
$(NACL_OBJECTS) \
|
$(NACL_OBJECTS) \
|
||||||
$(NACL_LIBS)
|
$(NACL_LIBS)
|
||||||
|
|
||||||
|
@ -198,6 +203,14 @@ TCP_test_SOURCES = ../auto_tests/TCP_test.c
|
||||||
TCP_test_CFLAGS = $(AUTOTEST_CFLAGS)
|
TCP_test_CFLAGS = $(AUTOTEST_CFLAGS)
|
||||||
TCP_test_LDADD = $(AUTOTEST_LDADD)
|
TCP_test_LDADD = $(AUTOTEST_LDADD)
|
||||||
|
|
||||||
|
tox_events_test_SOURCES = ../auto_tests/tox_events_test.c
|
||||||
|
tox_events_test_CFLAGS = $(AUTOTEST_CFLAGS)
|
||||||
|
tox_events_test_LDADD = $(AUTOTEST_LDADD)
|
||||||
|
|
||||||
|
tox_dispatch_test_SOURCES = ../auto_tests/tox_dispatch_test.c
|
||||||
|
tox_dispatch_test_CFLAGS = $(AUTOTEST_CFLAGS)
|
||||||
|
tox_dispatch_test_LDADD = $(AUTOTEST_LDADD)
|
||||||
|
|
||||||
tox_many_tcp_test_SOURCES = ../auto_tests/tox_many_tcp_test.c
|
tox_many_tcp_test_SOURCES = ../auto_tests/tox_many_tcp_test.c
|
||||||
tox_many_tcp_test_CFLAGS = $(AUTOTEST_CFLAGS)
|
tox_many_tcp_test_CFLAGS = $(AUTOTEST_CFLAGS)
|
||||||
tox_many_tcp_test_LDADD = $(AUTOTEST_LDADD)
|
tox_many_tcp_test_LDADD = $(AUTOTEST_LDADD)
|
||||||
|
|
|
@ -12,6 +12,9 @@
|
||||||
#include "../toxcore/tox_events.h"
|
#include "../toxcore/tox_events.h"
|
||||||
#include "check_compat.h"
|
#include "check_compat.h"
|
||||||
|
|
||||||
|
// Set to true to produce an msgpack file at /tmp/test.mp.
|
||||||
|
static const bool want_dump_events = false;
|
||||||
|
|
||||||
static void handle_events_friend_message(Tox *tox, const Tox_Event_Friend_Message *event, void *user_data)
|
static void handle_events_friend_message(Tox *tox, const Tox_Event_Friend_Message *event, void *user_data)
|
||||||
{
|
{
|
||||||
bool *success = (bool *)user_data;
|
bool *success = (bool *)user_data;
|
||||||
|
@ -24,17 +27,43 @@ static void handle_events_friend_message(Tox *tox, const Tox_Event_Friend_Messag
|
||||||
*success = true;
|
*success = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void dump_events(const char *path, const Tox_Events *events)
|
||||||
|
{
|
||||||
|
if (want_dump_events) {
|
||||||
|
FILE *fh = fopen(path, "w");
|
||||||
|
ck_assert(fh != nullptr);
|
||||||
|
const uint32_t len = tox_events_bytes_size(events);
|
||||||
|
uint8_t *buf = (uint8_t *)malloc(len);
|
||||||
|
ck_assert(buf != nullptr);
|
||||||
|
tox_events_get_bytes(events, buf);
|
||||||
|
fwrite(buf, 1, len, fh);
|
||||||
|
free(buf);
|
||||||
|
fclose(fh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void print_events(Tox_Events *events)
|
||||||
|
{
|
||||||
|
if (tox_events_bytes_size(events) > 24) {
|
||||||
|
tox_events_print(events);
|
||||||
|
}
|
||||||
|
|
||||||
|
tox_events_free(events);
|
||||||
|
}
|
||||||
|
|
||||||
static bool await_message(Tox **toxes, const Tox_Dispatch *dispatch)
|
static bool await_message(Tox **toxes, const Tox_Dispatch *dispatch)
|
||||||
{
|
{
|
||||||
for (uint32_t i = 0; i < 100; ++i) {
|
for (uint32_t i = 0; i < 100; ++i) {
|
||||||
// Ignore events on tox 1.
|
// Ignore events on tox 1.
|
||||||
tox_events_free(tox_events_iterate(toxes[0], nullptr));
|
print_events(tox_events_iterate(toxes[0], nullptr));
|
||||||
// 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], nullptr);
|
Tox_Events *events = tox_events_iterate(toxes[1], nullptr);
|
||||||
|
|
||||||
|
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);
|
||||||
tox_events_free(events);
|
print_events(events);
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -81,8 +110,8 @@ static void test_tox_events(void)
|
||||||
while (tox_self_get_connection_status(toxes[0]) == TOX_CONNECTION_NONE ||
|
while (tox_self_get_connection_status(toxes[0]) == TOX_CONNECTION_NONE ||
|
||||||
tox_self_get_connection_status(toxes[1]) == TOX_CONNECTION_NONE) {
|
tox_self_get_connection_status(toxes[1]) == TOX_CONNECTION_NONE) {
|
||||||
// Ignore connection events for now.
|
// Ignore connection events for now.
|
||||||
tox_events_free(tox_events_iterate(toxes[0], nullptr));
|
print_events(tox_events_iterate(toxes[0], nullptr));
|
||||||
tox_events_free(tox_events_iterate(toxes[1], nullptr));
|
print_events(tox_events_iterate(toxes[1], nullptr));
|
||||||
|
|
||||||
c_sleep(tox_iteration_interval(toxes[0]));
|
c_sleep(tox_iteration_interval(toxes[0]));
|
||||||
}
|
}
|
||||||
|
@ -92,8 +121,8 @@ static void test_tox_events(void)
|
||||||
while (tox_friend_get_connection_status(toxes[0], 0, nullptr) == TOX_CONNECTION_NONE ||
|
while (tox_friend_get_connection_status(toxes[0], 0, nullptr) == TOX_CONNECTION_NONE ||
|
||||||
tox_friend_get_connection_status(toxes[1], 0, nullptr) == TOX_CONNECTION_NONE) {
|
tox_friend_get_connection_status(toxes[1], 0, nullptr) == TOX_CONNECTION_NONE) {
|
||||||
// Ignore connection events for now.
|
// Ignore connection events for now.
|
||||||
tox_events_free(tox_events_iterate(toxes[0], nullptr));
|
print_events(tox_events_iterate(toxes[0], nullptr));
|
||||||
tox_events_free(tox_events_iterate(toxes[1], nullptr));
|
print_events(tox_events_iterate(toxes[1], nullptr));
|
||||||
|
|
||||||
c_sleep(tox_iteration_interval(toxes[0]));
|
c_sleep(tox_iteration_interval(toxes[0]));
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,17 +14,16 @@ find_library(SOCKET_LIBRARIES socket )
|
||||||
|
|
||||||
# For toxcore.
|
# For toxcore.
|
||||||
pkg_use_module(LIBSODIUM libsodium )
|
pkg_use_module(LIBSODIUM libsodium )
|
||||||
|
pkg_use_module(MSGPACK msgpack )
|
||||||
|
#find_package(msgpack REQUIRED)
|
||||||
|
|
||||||
# For toxav.
|
# For toxav.
|
||||||
pkg_use_module(OPUS "opus;Opus" )
|
pkg_use_module(OPUS "opus;Opus" )
|
||||||
pkg_use_module(VPX "vpx;libvpx" )
|
pkg_use_module(VPX "vpx;libvpx" )
|
||||||
|
|
||||||
# For tox-bootstrapd.
|
# For tox-bootstrapd.
|
||||||
pkg_use_module(LIBCONFIG libconfig )
|
pkg_use_module(LIBCONFIG libconfig )
|
||||||
|
|
||||||
# For tox-spectest.
|
|
||||||
pkg_use_module(MSGPACK msgpack )
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# :: For MSVC Windows builds.
|
# :: For MSVC Windows builds.
|
||||||
|
|
|
@ -14,7 +14,7 @@ class ToxConan(ConanFile):
|
||||||
description = "The future of online communications."
|
description = "The future of online communications."
|
||||||
license = "GPL-3.0-only"
|
license = "GPL-3.0-only"
|
||||||
settings = "os", "compiler", "build_type", "arch"
|
settings = "os", "compiler", "build_type", "arch"
|
||||||
requires = "libsodium/1.0.18", "opus/1.3.1", "libvpx/1.9.0"
|
requires = "libsodium/1.0.18", "opus/1.3.1", "msgpack/3.3.0", "libvpx/1.9.0"
|
||||||
generators = "cmake_find_package"
|
generators = "cmake_find_package"
|
||||||
scm = {"type": "git", "url": "auto", "revision": "auto"}
|
scm = {"type": "git", "url": "auto", "revision": "auto"}
|
||||||
|
|
||||||
|
|
|
@ -302,6 +302,14 @@ PKG_CHECK_MODULES([LIBSODIUM], [libsodium],
|
||||||
LIBSODIUM_FOUND="no"
|
LIBSODIUM_FOUND="no"
|
||||||
])
|
])
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES([MSGPACK], [msgpack],
|
||||||
|
[
|
||||||
|
MSGPACK_FOUND="yes"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
MSGPACK_FOUND="no"
|
||||||
|
])
|
||||||
|
|
||||||
if test "x$WANT_NACL" = "xyes"; then
|
if test "x$WANT_NACL" = "xyes"; then
|
||||||
NACL_LIBS=
|
NACL_LIBS=
|
||||||
NACL_LDFLAGS=
|
NACL_LDFLAGS=
|
||||||
|
|
|
@ -10,6 +10,8 @@ ALLOWLIST: Tuple[str, ...] = (
|
||||||
"stdbool.h",
|
"stdbool.h",
|
||||||
"stddef.h",
|
"stddef.h",
|
||||||
"stdint.h",
|
"stdint.h",
|
||||||
|
# msgpack, currently not abstracted away
|
||||||
|
"msgpack.h",
|
||||||
# toxav stuff, maybe not worth abstracting away
|
# toxav stuff, maybe not worth abstracting away
|
||||||
"opus.h",
|
"opus.h",
|
||||||
"vpx/vp8cx.h",
|
"vpx/vp8cx.h",
|
||||||
|
|
|
@ -14,7 +14,7 @@ CPPFLAGS+=("-Itoxcore/events")
|
||||||
CPPFLAGS+=("-Itoxav")
|
CPPFLAGS+=("-Itoxav")
|
||||||
CPPFLAGS+=("-Itoxencryptsave")
|
CPPFLAGS+=("-Itoxencryptsave")
|
||||||
|
|
||||||
LDFLAGS=("-lopus" "-lsodium" "-lvpx" "-lpthread" "-lconfig" "-lgtest")
|
LDFLAGS=("-lopus" "-lmsgpackc" "-lsodium" "-lvpx" "-lpthread" "-lconfig" "-lgtest")
|
||||||
LDFLAGS+=("-fuse-ld=gold")
|
LDFLAGS+=("-fuse-ld=gold")
|
||||||
LDFLAGS+=("-Wl,--detect-odr-violations")
|
LDFLAGS+=("-Wl,--detect-odr-violations")
|
||||||
LDFLAGS+=("-Wl,--warn-common")
|
LDFLAGS+=("-Wl,--warn-common")
|
||||||
|
|
|
@ -8,6 +8,7 @@ RUN ["apk", "--no-cache", "add",\
|
||||||
"linux-headers",\
|
"linux-headers",\
|
||||||
"libconfig-dev",\
|
"libconfig-dev",\
|
||||||
"libconfig-static",\
|
"libconfig-static",\
|
||||||
|
"msgpack-c-dev",\
|
||||||
"libsodium-dev",\
|
"libsodium-dev",\
|
||||||
"libsodium-static",\
|
"libsodium-static",\
|
||||||
"ninja",\
|
"ninja",\
|
||||||
|
|
|
@ -8,6 +8,7 @@ RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
curl \
|
curl \
|
||||||
libconfig-dev \
|
libconfig-dev \
|
||||||
|
libmsgpack-dev \
|
||||||
libopus-dev \
|
libopus-dev \
|
||||||
libtool \
|
libtool \
|
||||||
libvpx-dev \
|
libvpx-dev \
|
||||||
|
|
|
@ -7,6 +7,7 @@ RUN apt-get update && \
|
||||||
clang \
|
clang \
|
||||||
cmake \
|
cmake \
|
||||||
libconfig-dev \
|
libconfig-dev \
|
||||||
|
libmsgpack-dev \
|
||||||
libopus-dev \
|
libopus-dev \
|
||||||
libsodium-dev \
|
libsodium-dev \
|
||||||
libvpx-dev \
|
libvpx-dev \
|
||||||
|
|
47
other/docker/tcc/Dockerfile
Normal file
47
other/docker/tcc/Dockerfile
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
FROM ubuntu:20.04
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
|
||||||
|
libc-dev \
|
||||||
|
libmsgpack-dev \
|
||||||
|
libopus-dev \
|
||||||
|
libsodium-dev \
|
||||||
|
libvpx-dev \
|
||||||
|
pkg-config \
|
||||||
|
tcc \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
WORKDIR /work
|
||||||
|
COPY auto_tests/ /work/auto_tests/
|
||||||
|
COPY testing/ /work/testing/
|
||||||
|
COPY toxav/ /work/toxav/
|
||||||
|
COPY toxcore/ /work/toxcore/
|
||||||
|
COPY toxencryptsave/ /work/toxencryptsave/
|
||||||
|
|
||||||
|
RUN tcc \
|
||||||
|
-Dinline=static \
|
||||||
|
-o send_message_test \
|
||||||
|
-Wall -Werror \
|
||||||
|
-bench -g \
|
||||||
|
auto_tests/auto_test_support.c \
|
||||||
|
auto_tests/send_message_test.c \
|
||||||
|
testing/misc_tools.c \
|
||||||
|
toxav/*.c \
|
||||||
|
toxcore/*.c \
|
||||||
|
toxcore/*/*.c \
|
||||||
|
toxencryptsave/*.c \
|
||||||
|
$(pkg-config --cflags --libs libsodium msgpack opus vpx)
|
||||||
|
|
||||||
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
COPY other/make_single_file /work/other/
|
||||||
|
RUN \
|
||||||
|
other/make_single_file \
|
||||||
|
auto_tests/auto_test_support.c \
|
||||||
|
auto_tests/send_message_test.c \
|
||||||
|
testing/misc_tools.c | \
|
||||||
|
tcc - \
|
||||||
|
-o send_message_test \
|
||||||
|
-Wall -Werror \
|
||||||
|
-bench -g \
|
||||||
|
$(pkg-config --cflags --libs libsodium msgpack opus vpx)
|
5
other/docker/tcc/run
Executable file
5
other/docker/tcc/run
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
docker build -t toxchat/c-toxcore:tcc -f other/docker/tcc/Dockerfile .
|
|
@ -1,33 +1,35 @@
|
||||||
FROM debian:buster-slim
|
FROM debian:buster-slim
|
||||||
|
|
||||||
# Build-time environment variables
|
# Build-time environment variables
|
||||||
ARG VERSION_SODIUM=1.0.18
|
ARG VERSION_MSGPACK=4.0.0 \
|
||||||
ARG VERSION_OPUS=1.3.1
|
VERSION_SODIUM=1.0.18 \
|
||||||
ARG VERSION_VPX=1.9.0
|
VERSION_OPUS=1.3.1 \
|
||||||
|
VERSION_VPX=1.9.0 \
|
||||||
ARG SUPPORT_TEST=false
|
\
|
||||||
ARG SUPPORT_ARCH_i686=true
|
SUPPORT_TEST=false \
|
||||||
ARG SUPPORT_ARCH_x86_64=true
|
SUPPORT_ARCH_i686=true \
|
||||||
ARG CROSS_COMPILE=true
|
SUPPORT_ARCH_x86_64=true \
|
||||||
|
CROSS_COMPILE=true
|
||||||
|
|
||||||
# Make those available when running the container
|
# Make those available when running the container
|
||||||
ENV SUPPORT_TEST=${SUPPORT_TEST}
|
ENV SUPPORT_TEST=${SUPPORT_TEST} \
|
||||||
ENV SUPPORT_ARCH_i686=${SUPPORT_ARCH_i686}
|
SUPPORT_ARCH_i686=${SUPPORT_ARCH_i686} \
|
||||||
ENV SUPPORT_ARCH_x86_64=${SUPPORT_ARCH_x86_64}
|
SUPPORT_ARCH_x86_64=${SUPPORT_ARCH_x86_64} \
|
||||||
ENV CROSS_COMPILE=${CROSS_COMPILE}
|
CROSS_COMPILE=${CROSS_COMPILE}
|
||||||
|
|
||||||
|
WORKDIR /work
|
||||||
COPY get_packages.sh .
|
COPY get_packages.sh .
|
||||||
RUN sh ./get_packages.sh
|
RUN ./get_packages.sh
|
||||||
|
|
||||||
COPY build_dependencies.sh .
|
COPY build_dependencies.sh .
|
||||||
RUN sh ./build_dependencies.sh
|
RUN ./build_dependencies.sh
|
||||||
|
|
||||||
COPY build_toxcore.sh .
|
COPY build_toxcore.sh .
|
||||||
|
|
||||||
ENV ENABLE_TEST=false
|
ENV ENABLE_TEST=false \
|
||||||
ENV ALLOW_TEST_FAILURE=false
|
ALLOW_TEST_FAILURE=false \
|
||||||
ENV ENABLE_ARCH_i686=true
|
ENABLE_ARCH_i686=true \
|
||||||
ENV ENABLE_ARCH_x86_64=true
|
ENABLE_ARCH_x86_64=true \
|
||||||
ENV EXTRA_CMAKE_FLAGS="-DTEST_TIMEOUT_SECONDS=90"
|
EXTRA_CMAKE_FLAGS="-DTEST_TIMEOUT_SECONDS=90"
|
||||||
|
|
||||||
ENTRYPOINT ["sh", "./build_toxcore.sh"]
|
ENTRYPOINT ["sh", "./build_toxcore.sh"]
|
||||||
|
|
32
other/docker/windows/build_dependencies.sh
Normal file → Executable file
32
other/docker/windows/build_dependencies.sh
Normal file → Executable file
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env sh
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# disable on Cygwin otherwise some builds fail
|
# disable on Cygwin otherwise some builds fail
|
||||||
if [ "$CROSS_COMPILE" = "true" ]; then
|
if [ "$CROSS_COMPILE" = "true" ]; then
|
||||||
|
@ -23,14 +23,36 @@ build() {
|
||||||
export MAKEFLAGS=j"$(nproc)"
|
export MAKEFLAGS=j"$(nproc)"
|
||||||
export CFLAGS=-O3
|
export CFLAGS=-O3
|
||||||
|
|
||||||
CURL_OPTIONS="-L --connect-timeout 10"
|
CURL_OPTIONS=(-L --connect-timeout 10)
|
||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
rm -rf /tmp/*
|
rm -rf /tmp/*
|
||||||
|
|
||||||
|
echo "
|
||||||
|
SET(CMAKE_SYSTEM_NAME Windows)
|
||||||
|
|
||||||
|
SET(CMAKE_C_COMPILER $WINDOWS_TOOLCHAIN-gcc)
|
||||||
|
SET(CMAKE_CXX_COMPILER $WINDOWS_TOOLCHAIN-g++)
|
||||||
|
SET(CMAKE_RC_COMPILER $WINDOWS_TOOLCHAIN-windres)
|
||||||
|
|
||||||
|
SET(CMAKE_FIND_ROOT_PATH /usr/$WINDOWS_TOOLCHAIN $DEP_PREFIX_DIR)
|
||||||
|
" >windows_toolchain.cmake
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "=== Building Msgpack $VERSION_MSGPACK $ARCH ==="
|
||||||
|
curl "${CURL_OPTIONS[@]}" -O "https://github.com/msgpack/msgpack-c/releases/download/c-$VERSION_MSGPACK/msgpack-c-$VERSION_MSGPACK.tar.gz"
|
||||||
|
tar -xf "msgpack-c-$VERSION_MSGPACK.tar.gz"
|
||||||
|
cd "msgpack-c-$VERSION_MSGPACK"
|
||||||
|
cmake -DCMAKE_TOOLCHAIN_FILE=../windows_toolchain.cmake \
|
||||||
|
-DCMAKE_INSTALL_PREFIX="$PREFIX_DIR" \
|
||||||
|
-DBUILD_SHARED_LIBS=OFF \
|
||||||
|
.
|
||||||
|
cmake --build . --target install -- -j"$(nproc)"
|
||||||
|
cd ..
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "=== Building Sodium $VERSION_SODIUM $ARCH ==="
|
echo "=== Building Sodium $VERSION_SODIUM $ARCH ==="
|
||||||
curl $CURL_OPTIONS -O "https://download.libsodium.org/libsodium/releases/libsodium-$VERSION_SODIUM.tar.gz"
|
curl "${CURL_OPTIONS[@]}" -O "https://download.libsodium.org/libsodium/releases/libsodium-$VERSION_SODIUM.tar.gz"
|
||||||
tar -xf "libsodium-$VERSION_SODIUM.tar.gz"
|
tar -xf "libsodium-$VERSION_SODIUM.tar.gz"
|
||||||
cd "libsodium-$VERSION_SODIUM"
|
cd "libsodium-$VERSION_SODIUM"
|
||||||
./configure --host="$WINDOWS_TOOLCHAIN" --prefix="$PREFIX_DIR" --disable-shared --enable-static
|
./configure --host="$WINDOWS_TOOLCHAIN" --prefix="$PREFIX_DIR" --disable-shared --enable-static
|
||||||
|
@ -40,7 +62,7 @@ build() {
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "=== Building Opus $VERSION_OPUS $ARCH ==="
|
echo "=== Building Opus $VERSION_OPUS $ARCH ==="
|
||||||
curl $CURL_OPTIONS -O "https://archive.mozilla.org/pub/opus/opus-$VERSION_OPUS.tar.gz"
|
curl "${CURL_OPTIONS[@]}" -O "https://archive.mozilla.org/pub/opus/opus-$VERSION_OPUS.tar.gz"
|
||||||
tar -xf "opus-$VERSION_OPUS.tar.gz"
|
tar -xf "opus-$VERSION_OPUS.tar.gz"
|
||||||
cd "opus-$VERSION_OPUS"
|
cd "opus-$VERSION_OPUS"
|
||||||
./configure --host="$WINDOWS_TOOLCHAIN" --prefix="$PREFIX_DIR" --disable-extra-programs --disable-doc --disable-shared --enable-static
|
./configure --host="$WINDOWS_TOOLCHAIN" --prefix="$PREFIX_DIR" --disable-extra-programs --disable-doc --disable-shared --enable-static
|
||||||
|
@ -61,7 +83,7 @@ build() {
|
||||||
# This is a workaround as suggested in https://stackoverflow.com/questions/43152633
|
# This is a workaround as suggested in https://stackoverflow.com/questions/43152633
|
||||||
LIB_VPX_CFLAGS="-fno-asynchronous-unwind-tables"
|
LIB_VPX_CFLAGS="-fno-asynchronous-unwind-tables"
|
||||||
fi
|
fi
|
||||||
curl $CURL_OPTIONS "https://github.com/webmproject/libvpx/archive/v$VERSION_VPX.tar.gz" -o "libvpx-$VERSION_VPX.tar.gz"
|
curl "${CURL_OPTIONS[@]}" "https://github.com/webmproject/libvpx/archive/v$VERSION_VPX.tar.gz" -o "libvpx-$VERSION_VPX.tar.gz"
|
||||||
tar -xf "libvpx-$VERSION_VPX.tar.gz"
|
tar -xf "libvpx-$VERSION_VPX.tar.gz"
|
||||||
cd "libvpx-$VERSION_VPX"
|
cd "libvpx-$VERSION_VPX"
|
||||||
CFLAGS="$LIB_VPX_CFLAGS" CROSS="$WINDOWS_TOOLCHAIN"- ./configure --target="$LIB_VPX_TARGET" --prefix="$PREFIX_DIR" --disable-examples --disable-unit-tests --disable-shared --enable-static
|
CFLAGS="$LIB_VPX_CFLAGS" CROSS="$WINDOWS_TOOLCHAIN"- ./configure --target="$LIB_VPX_TARGET" --prefix="$PREFIX_DIR" --disable-examples --disable-unit-tests --disable-shared --enable-static
|
||||||
|
|
0
other/docker/windows/get_packages.sh
Normal file → Executable file
0
other/docker/windows/get_packages.sh
Normal file → Executable file
|
@ -36,6 +36,16 @@ RUN . "/work/emsdk/emsdk_env.sh" \
|
||||||
--disable-ssp --disable-asm --disable-pie \
|
--disable-ssp --disable-asm --disable-pie \
|
||||||
&& emmake make install -j8
|
&& emmake make install -j8
|
||||||
|
|
||||||
|
# Build msgpack.
|
||||||
|
RUN . "/work/emsdk/emsdk_env.sh" \
|
||||||
|
&& git clone --depth=1 --branch=c-4.0.0 https://github.com/msgpack/msgpack-c /work/msgpack-c \
|
||||||
|
&& cd /work/msgpack-c \
|
||||||
|
&& emcmake cmake -B_build -H. -GNinja \
|
||||||
|
-DCMAKE_INSTALL_PREFIX:PATH="/usr/local" \
|
||||||
|
-DCMAKE_C_FLAGS="-O3 -flto -fPIC" \
|
||||||
|
-DBUILD_SHARED_LIBS=OFF \
|
||||||
|
&& emmake cmake --build _build --parallel 8 --target install
|
||||||
|
|
||||||
# Build an unused libsodium binding first so emcc caches all the system
|
# Build an unused libsodium binding first so emcc caches all the system
|
||||||
# libraries. This makes rebuilds of toxcore below much faster.
|
# libraries. This makes rebuilds of toxcore below much faster.
|
||||||
RUN . "/work/emsdk/emsdk_env.sh" \
|
RUN . "/work/emsdk/emsdk_env.sh" \
|
||||||
|
@ -58,11 +68,11 @@ COPY . /work/c-toxcore
|
||||||
RUN . "/work/emsdk/emsdk_env.sh" \
|
RUN . "/work/emsdk/emsdk_env.sh" \
|
||||||
&& cd /work/c-toxcore \
|
&& cd /work/c-toxcore \
|
||||||
&& emcmake cmake -B_build -H. -GNinja \
|
&& emcmake cmake -B_build -H. -GNinja \
|
||||||
|
-DCMAKE_INSTALL_PREFIX:PATH="/usr/local" \
|
||||||
-DCMAKE_C_FLAGS="-O3 -flto -fPIC" \
|
-DCMAKE_C_FLAGS="-O3 -flto -fPIC" \
|
||||||
-DBUILD_TOXAV=OFF \
|
-DBUILD_TOXAV=OFF \
|
||||||
-DENABLE_SHARED=OFF \
|
-DENABLE_SHARED=OFF \
|
||||||
-DBOOTSTRAP_DAEMON=OFF \
|
-DBOOTSTRAP_DAEMON=OFF \
|
||||||
-DCMAKE_INSTALL_PREFIX:PATH="/usr/local" \
|
|
||||||
-DMIN_LOGGER_LEVEL=DEBUG \
|
-DMIN_LOGGER_LEVEL=DEBUG \
|
||||||
&& emmake cmake --build _build --parallel 8 --target install
|
&& emmake cmake --build _build --parallel 8 --target install
|
||||||
|
|
||||||
|
@ -79,6 +89,7 @@ RUN . "/work/emsdk/emsdk_env.sh" \
|
||||||
-s MODULARIZE=1 \
|
-s MODULARIZE=1 \
|
||||||
-s STRICT=1 \
|
-s STRICT=1 \
|
||||||
-s WEBSOCKET_URL=wss:// \
|
-s WEBSOCKET_URL=wss:// \
|
||||||
|
/usr/local/lib/libmsgpackc.a \
|
||||||
/usr/local/lib/libsodium.a \
|
/usr/local/lib/libsodium.a \
|
||||||
/usr/local/lib/libtoxcore.a \
|
/usr/local/lib/libtoxcore.a \
|
||||||
-o /work/wasm/libtoxcore.js
|
-o /work/wasm/libtoxcore.js
|
||||||
|
|
3
other/emscripten/build
Executable file
3
other/emscripten/build
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
docker build -t toxchat/toxcore-js -f other/emscripten/Dockerfile .
|
|
@ -471,6 +471,7 @@ cc_library(
|
||||||
deps = [
|
deps = [
|
||||||
":ccompat",
|
":ccompat",
|
||||||
":toxcore",
|
":toxcore",
|
||||||
|
"@msgpack-c",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,13 @@ struct Tox_Event_Conference_Connected {
|
||||||
uint32_t conference_number;
|
uint32_t conference_number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_conference_connected_pack(const Tox_Event_Conference_Connected *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 1);
|
||||||
|
msgpack_pack_uint32(mp, event->conference_number);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_conference_connected_construct(Tox_Event_Conference_Connected *conference_connected)
|
static void tox_event_conference_connected_construct(Tox_Event_Conference_Connected *conference_connected)
|
||||||
{
|
{
|
||||||
*conference_connected = (Tox_Event_Conference_Connected) {
|
*conference_connected = (Tox_Event_Conference_Connected) {
|
||||||
|
@ -100,6 +107,10 @@ void tox_events_clear_conference_connected(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_conference_connected_size(const Tox_Events *events)
|
uint32_t tox_events_get_conference_connected_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->conference_connected_size;
|
return events->conference_connected_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,6 +121,17 @@ const Tox_Event_Conference_Connected *tox_events_get_conference_connected(const
|
||||||
return &events->conference_connected[index];
|
return &events->conference_connected[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_conference_connected(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_conference_connected_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_conference_connected_pack(tox_events_get_conference_connected(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -27,6 +27,16 @@ struct Tox_Event_Conference_Invite {
|
||||||
size_t cookie_length;
|
size_t cookie_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_conference_invite_pack(const Tox_Event_Conference_Invite *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 3);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
msgpack_pack_uint32(mp, event->type);
|
||||||
|
msgpack_pack_bin(mp, event->cookie_length);
|
||||||
|
msgpack_pack_bin_body(mp, event->cookie, event->cookie_length);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_conference_invite_construct(Tox_Event_Conference_Invite *conference_invite)
|
static void tox_event_conference_invite_construct(Tox_Event_Conference_Invite *conference_invite)
|
||||||
{
|
{
|
||||||
*conference_invite = (Tox_Event_Conference_Invite) {
|
*conference_invite = (Tox_Event_Conference_Invite) {
|
||||||
|
@ -146,6 +156,10 @@ void tox_events_clear_conference_invite(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_conference_invite_size(const Tox_Events *events)
|
uint32_t tox_events_get_conference_invite_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->conference_invite_size;
|
return events->conference_invite_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,6 +170,17 @@ const Tox_Event_Conference_Invite *tox_events_get_conference_invite(const Tox_Ev
|
||||||
return &events->conference_invite[index];
|
return &events->conference_invite[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_conference_invite(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_conference_invite_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_conference_invite_pack(tox_events_get_conference_invite(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -28,6 +28,17 @@ struct Tox_Event_Conference_Message {
|
||||||
size_t message_length;
|
size_t message_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_conference_message_pack(const Tox_Event_Conference_Message *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 5);
|
||||||
|
msgpack_pack_uint32(mp, event->conference_number);
|
||||||
|
msgpack_pack_uint32(mp, event->peer_number);
|
||||||
|
msgpack_pack_uint32(mp, event->type);
|
||||||
|
msgpack_pack_bin(mp, event->message_length);
|
||||||
|
msgpack_pack_bin_body(mp, event->message, event->message_length);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_conference_message_construct(Tox_Event_Conference_Message *conference_message)
|
static void tox_event_conference_message_construct(Tox_Event_Conference_Message *conference_message)
|
||||||
{
|
{
|
||||||
*conference_message = (Tox_Event_Conference_Message) {
|
*conference_message = (Tox_Event_Conference_Message) {
|
||||||
|
@ -158,6 +169,10 @@ void tox_events_clear_conference_message(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_conference_message_size(const Tox_Events *events)
|
uint32_t tox_events_get_conference_message_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->conference_message_size;
|
return events->conference_message_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,6 +183,17 @@ const Tox_Event_Conference_Message *tox_events_get_conference_message(const Tox_
|
||||||
return &events->conference_message[index];
|
return &events->conference_message[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_conference_message(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_conference_message_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_conference_message_pack(tox_events_get_conference_message(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -24,6 +24,14 @@ struct Tox_Event_Conference_Peer_List_Changed {
|
||||||
uint32_t conference_number;
|
uint32_t conference_number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_conference_peer_list_changed_pack(const Tox_Event_Conference_Peer_List_Changed *event,
|
||||||
|
msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 1);
|
||||||
|
msgpack_pack_uint32(mp, event->conference_number);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_conference_peer_list_changed_construct(Tox_Event_Conference_Peer_List_Changed
|
static void tox_event_conference_peer_list_changed_construct(Tox_Event_Conference_Peer_List_Changed
|
||||||
*conference_peer_list_changed)
|
*conference_peer_list_changed)
|
||||||
{
|
{
|
||||||
|
@ -104,6 +112,10 @@ void tox_events_clear_conference_peer_list_changed(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_conference_peer_list_changed_size(const Tox_Events *events)
|
uint32_t tox_events_get_conference_peer_list_changed_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->conference_peer_list_changed_size;
|
return events->conference_peer_list_changed_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,6 +127,17 @@ const Tox_Event_Conference_Peer_List_Changed *tox_events_get_conference_peer_lis
|
||||||
return &events->conference_peer_list_changed[index];
|
return &events->conference_peer_list_changed[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_conference_peer_list_changed(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_conference_peer_list_changed_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_conference_peer_list_changed_pack(tox_events_get_conference_peer_list_changed(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -27,6 +27,16 @@ struct Tox_Event_Conference_Peer_Name {
|
||||||
size_t name_length;
|
size_t name_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_conference_peer_name_pack(const Tox_Event_Conference_Peer_Name *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 3);
|
||||||
|
msgpack_pack_uint32(mp, event->conference_number);
|
||||||
|
msgpack_pack_uint32(mp, event->peer_number);
|
||||||
|
msgpack_pack_bin(mp, event->name_length);
|
||||||
|
msgpack_pack_bin_body(mp, event->name, event->name_length);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_conference_peer_name_construct(Tox_Event_Conference_Peer_Name *conference_peer_name)
|
static void tox_event_conference_peer_name_construct(Tox_Event_Conference_Peer_Name *conference_peer_name)
|
||||||
{
|
{
|
||||||
*conference_peer_name = (Tox_Event_Conference_Peer_Name) {
|
*conference_peer_name = (Tox_Event_Conference_Peer_Name) {
|
||||||
|
@ -147,6 +157,10 @@ void tox_events_clear_conference_peer_name(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_conference_peer_name_size(const Tox_Events *events)
|
uint32_t tox_events_get_conference_peer_name_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->conference_peer_name_size;
|
return events->conference_peer_name_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,6 +171,17 @@ const Tox_Event_Conference_Peer_Name *tox_events_get_conference_peer_name(const
|
||||||
return &events->conference_peer_name[index];
|
return &events->conference_peer_name[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_conference_peer_name(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_conference_peer_name_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_conference_peer_name_pack(tox_events_get_conference_peer_name(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -27,6 +27,16 @@ struct Tox_Event_Conference_Title {
|
||||||
size_t title_length;
|
size_t title_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_conference_title_pack(const Tox_Event_Conference_Title *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 3);
|
||||||
|
msgpack_pack_uint32(mp, event->conference_number);
|
||||||
|
msgpack_pack_uint32(mp, event->peer_number);
|
||||||
|
msgpack_pack_bin(mp, event->title_length);
|
||||||
|
msgpack_pack_bin_body(mp, event->title, event->title_length);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_conference_title_construct(Tox_Event_Conference_Title *conference_title)
|
static void tox_event_conference_title_construct(Tox_Event_Conference_Title *conference_title)
|
||||||
{
|
{
|
||||||
*conference_title = (Tox_Event_Conference_Title) {
|
*conference_title = (Tox_Event_Conference_Title) {
|
||||||
|
@ -145,6 +155,10 @@ void tox_events_clear_conference_title(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_conference_title_size(const Tox_Events *events)
|
uint32_t tox_events_get_conference_title_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->conference_title_size;
|
return events->conference_title_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,6 +169,17 @@ const Tox_Event_Conference_Title *tox_events_get_conference_title(const Tox_Even
|
||||||
return &events->conference_title[index];
|
return &events->conference_title[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_conference_title(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_conference_title_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_conference_title_pack(tox_events_get_conference_title(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
#ifndef C_TOXCORE_TOXCORE_TOX_EVENTS_INTERNAL_H
|
#ifndef C_TOXCORE_TOXCORE_TOX_EVENTS_INTERNAL_H
|
||||||
#define C_TOXCORE_TOXCORE_TOX_EVENTS_INTERNAL_H
|
#define C_TOXCORE_TOXCORE_TOX_EVENTS_INTERNAL_H
|
||||||
|
|
||||||
|
#include <msgpack.h>
|
||||||
|
|
||||||
#include "../tox_events.h"
|
#include "../tox_events.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -146,6 +148,30 @@ void tox_events_clear_friend_status(Tox_Events *events);
|
||||||
void tox_events_clear_friend_typing(Tox_Events *events);
|
void tox_events_clear_friend_typing(Tox_Events *events);
|
||||||
void tox_events_clear_self_connection_status(Tox_Events *events);
|
void tox_events_clear_self_connection_status(Tox_Events *events);
|
||||||
|
|
||||||
|
void tox_events_pack_conference_connected(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_conference_invite(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_conference_message(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_conference_peer_list_changed(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_conference_peer_name(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_conference_title(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_file_chunk_request(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_file_recv_chunk(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_file_recv_control(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_file_recv(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_friend_connection_status(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_friend_lossless_packet(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_friend_lossy_packet(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_friend_message(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_friend_name(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_friend_read_receipt(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_friend_request(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_friend_status_message(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_friend_status(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_friend_typing(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
void tox_events_pack_self_connection_status(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
|
||||||
|
void tox_events_pack(const Tox_Events *events, msgpack_packer *mp);
|
||||||
|
|
||||||
Tox_Events_State *tox_events_alloc(void *user_data);
|
Tox_Events_State *tox_events_alloc(void *user_data);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -27,6 +27,16 @@ struct Tox_Event_File_Chunk_Request {
|
||||||
size_t length;
|
size_t length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_file_chunk_request_pack(const Tox_Event_File_Chunk_Request *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 4);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
msgpack_pack_uint32(mp, event->file_number);
|
||||||
|
msgpack_pack_uint64(mp, event->position);
|
||||||
|
msgpack_pack_uint16(mp, event->length);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_file_chunk_request_construct(Tox_Event_File_Chunk_Request *file_chunk_request)
|
static void tox_event_file_chunk_request_construct(Tox_Event_File_Chunk_Request *file_chunk_request)
|
||||||
{
|
{
|
||||||
*file_chunk_request = (Tox_Event_File_Chunk_Request) {
|
*file_chunk_request = (Tox_Event_File_Chunk_Request) {
|
||||||
|
@ -136,6 +146,10 @@ void tox_events_clear_file_chunk_request(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_file_chunk_request_size(const Tox_Events *events)
|
uint32_t tox_events_get_file_chunk_request_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->file_chunk_request_size;
|
return events->file_chunk_request_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,6 +160,17 @@ const Tox_Event_File_Chunk_Request *tox_events_get_file_chunk_request(const Tox_
|
||||||
return &events->file_chunk_request[index];
|
return &events->file_chunk_request[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_file_chunk_request(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_file_chunk_request_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_file_chunk_request_pack(tox_events_get_file_chunk_request(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -29,6 +29,18 @@ struct Tox_Event_File_Recv {
|
||||||
size_t filename_length;
|
size_t filename_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_file_recv_pack(const Tox_Event_File_Recv *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 5);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
msgpack_pack_uint32(mp, event->file_number);
|
||||||
|
msgpack_pack_uint32(mp, event->kind);
|
||||||
|
msgpack_pack_uint64(mp, event->file_size);
|
||||||
|
msgpack_pack_bin(mp, event->filename_length);
|
||||||
|
msgpack_pack_bin_body(mp, event->filename, event->filename_length);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_file_recv_construct(Tox_Event_File_Recv *file_recv)
|
static void tox_event_file_recv_construct(Tox_Event_File_Recv *file_recv)
|
||||||
{
|
{
|
||||||
*file_recv = (Tox_Event_File_Recv) {
|
*file_recv = (Tox_Event_File_Recv) {
|
||||||
|
@ -171,6 +183,10 @@ void tox_events_clear_file_recv(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_file_recv_size(const Tox_Events *events)
|
uint32_t tox_events_get_file_recv_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->file_recv_size;
|
return events->file_recv_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,6 +197,17 @@ const Tox_Event_File_Recv *tox_events_get_file_recv(const Tox_Events *events, ui
|
||||||
return &events->file_recv[index];
|
return &events->file_recv[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_file_recv(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_file_recv_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_file_recv_pack(tox_events_get_file_recv(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -28,6 +28,17 @@ struct Tox_Event_File_Recv_Chunk {
|
||||||
size_t data_length;
|
size_t data_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_file_recv_chunk_pack(const Tox_Event_File_Recv_Chunk *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 4);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
msgpack_pack_uint32(mp, event->file_number);
|
||||||
|
msgpack_pack_uint64(mp, event->position);
|
||||||
|
msgpack_pack_bin(mp, event->data_length);
|
||||||
|
msgpack_pack_bin_body(mp, event->data, event->data_length);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_file_recv_chunk_construct(Tox_Event_File_Recv_Chunk *file_recv_chunk)
|
static void tox_event_file_recv_chunk_construct(Tox_Event_File_Recv_Chunk *file_recv_chunk)
|
||||||
{
|
{
|
||||||
*file_recv_chunk = (Tox_Event_File_Recv_Chunk) {
|
*file_recv_chunk = (Tox_Event_File_Recv_Chunk) {
|
||||||
|
@ -158,6 +169,10 @@ void tox_events_clear_file_recv_chunk(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_file_recv_chunk_size(const Tox_Events *events)
|
uint32_t tox_events_get_file_recv_chunk_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->file_recv_chunk_size;
|
return events->file_recv_chunk_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,6 +183,17 @@ const Tox_Event_File_Recv_Chunk *tox_events_get_file_recv_chunk(const Tox_Events
|
||||||
return &events->file_recv_chunk[index];
|
return &events->file_recv_chunk[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_file_recv_chunk(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_file_recv_chunk_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_file_recv_chunk_pack(tox_events_get_file_recv_chunk(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -26,6 +26,15 @@ struct Tox_Event_File_Recv_Control {
|
||||||
Tox_File_Control control;
|
Tox_File_Control control;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_file_recv_control_pack(const Tox_Event_File_Recv_Control *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 3);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
msgpack_pack_uint32(mp, event->file_number);
|
||||||
|
msgpack_pack_uint32(mp, event->control);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_file_recv_control_construct(Tox_Event_File_Recv_Control *file_recv_control)
|
static void tox_event_file_recv_control_construct(Tox_Event_File_Recv_Control *file_recv_control)
|
||||||
{
|
{
|
||||||
*file_recv_control = (Tox_Event_File_Recv_Control) {
|
*file_recv_control = (Tox_Event_File_Recv_Control) {
|
||||||
|
@ -124,6 +133,10 @@ void tox_events_clear_file_recv_control(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_file_recv_control_size(const Tox_Events *events)
|
uint32_t tox_events_get_file_recv_control_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->file_recv_control_size;
|
return events->file_recv_control_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,6 +147,17 @@ const Tox_Event_File_Recv_Control *tox_events_get_file_recv_control(const Tox_Ev
|
||||||
return &events->file_recv_control[index];
|
return &events->file_recv_control[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_file_recv_control(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_file_recv_control_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_file_recv_control_pack(tox_events_get_file_recv_control(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -25,6 +25,14 @@ struct Tox_Event_Friend_Connection_Status {
|
||||||
Tox_Connection connection_status;
|
Tox_Connection connection_status;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_friend_connection_status_pack(const Tox_Event_Friend_Connection_Status *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 2);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
msgpack_pack_uint32(mp, event->connection_status);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_friend_connection_status_construct(Tox_Event_Friend_Connection_Status *friend_connection_status)
|
static void tox_event_friend_connection_status_construct(Tox_Event_Friend_Connection_Status *friend_connection_status)
|
||||||
{
|
{
|
||||||
*friend_connection_status = (Tox_Event_Friend_Connection_Status) {
|
*friend_connection_status = (Tox_Event_Friend_Connection_Status) {
|
||||||
|
@ -114,6 +122,10 @@ void tox_events_clear_friend_connection_status(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_friend_connection_status_size(const Tox_Events *events)
|
uint32_t tox_events_get_friend_connection_status_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->friend_connection_status_size;
|
return events->friend_connection_status_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,6 +137,17 @@ const Tox_Event_Friend_Connection_Status *tox_events_get_friend_connection_statu
|
||||||
return &events->friend_connection_status[index];
|
return &events->friend_connection_status[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_friend_connection_status(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_friend_connection_status_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_friend_connection_status_pack(tox_events_get_friend_connection_status(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -26,6 +26,15 @@ struct Tox_Event_Friend_Lossless_Packet {
|
||||||
size_t data_length;
|
size_t data_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_friend_lossless_packet_pack(const Tox_Event_Friend_Lossless_Packet *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 2);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
msgpack_pack_bin(mp, event->data_length);
|
||||||
|
msgpack_pack_bin_body(mp, event->data, event->data_length);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_friend_lossless_packet_construct(Tox_Event_Friend_Lossless_Packet *friend_lossless_packet)
|
static void tox_event_friend_lossless_packet_construct(Tox_Event_Friend_Lossless_Packet *friend_lossless_packet)
|
||||||
{
|
{
|
||||||
*friend_lossless_packet = (Tox_Event_Friend_Lossless_Packet) {
|
*friend_lossless_packet = (Tox_Event_Friend_Lossless_Packet) {
|
||||||
|
@ -134,6 +143,10 @@ void tox_events_clear_friend_lossless_packet(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_friend_lossless_packet_size(const Tox_Events *events)
|
uint32_t tox_events_get_friend_lossless_packet_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->friend_lossless_packet_size;
|
return events->friend_lossless_packet_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,6 +157,17 @@ const Tox_Event_Friend_Lossless_Packet *tox_events_get_friend_lossless_packet(co
|
||||||
return &events->friend_lossless_packet[index];
|
return &events->friend_lossless_packet[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_friend_lossless_packet(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_friend_lossless_packet_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_friend_lossless_packet_pack(tox_events_get_friend_lossless_packet(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -26,6 +26,15 @@ struct Tox_Event_Friend_Lossy_Packet {
|
||||||
size_t data_length;
|
size_t data_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_friend_lossy_packet_pack(const Tox_Event_Friend_Lossy_Packet *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 2);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
msgpack_pack_bin(mp, event->data_length);
|
||||||
|
msgpack_pack_bin_body(mp, event->data, event->data_length);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_friend_lossy_packet_construct(Tox_Event_Friend_Lossy_Packet *friend_lossy_packet)
|
static void tox_event_friend_lossy_packet_construct(Tox_Event_Friend_Lossy_Packet *friend_lossy_packet)
|
||||||
{
|
{
|
||||||
*friend_lossy_packet = (Tox_Event_Friend_Lossy_Packet) {
|
*friend_lossy_packet = (Tox_Event_Friend_Lossy_Packet) {
|
||||||
|
@ -133,6 +142,10 @@ void tox_events_clear_friend_lossy_packet(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_friend_lossy_packet_size(const Tox_Events *events)
|
uint32_t tox_events_get_friend_lossy_packet_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->friend_lossy_packet_size;
|
return events->friend_lossy_packet_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,6 +156,17 @@ const Tox_Event_Friend_Lossy_Packet *tox_events_get_friend_lossy_packet(const To
|
||||||
return &events->friend_lossy_packet[index];
|
return &events->friend_lossy_packet[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_friend_lossy_packet(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_friend_lossy_packet_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_friend_lossy_packet_pack(tox_events_get_friend_lossy_packet(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -27,6 +27,16 @@ struct Tox_Event_Friend_Message {
|
||||||
size_t message_length;
|
size_t message_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_friend_message_pack(const Tox_Event_Friend_Message *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 3);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
msgpack_pack_uint32(mp, event->type);
|
||||||
|
msgpack_pack_bin(mp, event->message_length);
|
||||||
|
msgpack_pack_bin_body(mp, event->message, event->message_length);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_friend_message_construct(Tox_Event_Friend_Message *friend_message)
|
static void tox_event_friend_message_construct(Tox_Event_Friend_Message *friend_message)
|
||||||
{
|
{
|
||||||
*friend_message = (Tox_Event_Friend_Message) {
|
*friend_message = (Tox_Event_Friend_Message) {
|
||||||
|
@ -144,6 +154,10 @@ void tox_events_clear_friend_message(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_friend_message_size(const Tox_Events *events)
|
uint32_t tox_events_get_friend_message_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->friend_message_size;
|
return events->friend_message_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,6 +168,17 @@ const Tox_Event_Friend_Message *tox_events_get_friend_message(const Tox_Events *
|
||||||
return &events->friend_message[index];
|
return &events->friend_message[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_friend_message(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_friend_message_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_friend_message_pack(tox_events_get_friend_message(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -26,6 +26,15 @@ struct Tox_Event_Friend_Name {
|
||||||
size_t name_length;
|
size_t name_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_friend_name_pack(const Tox_Event_Friend_Name *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 2);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
msgpack_pack_bin(mp, event->name_length);
|
||||||
|
msgpack_pack_bin_body(mp, event->name, event->name_length);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_friend_name_construct(Tox_Event_Friend_Name *friend_name)
|
static void tox_event_friend_name_construct(Tox_Event_Friend_Name *friend_name)
|
||||||
{
|
{
|
||||||
*friend_name = (Tox_Event_Friend_Name) {
|
*friend_name = (Tox_Event_Friend_Name) {
|
||||||
|
@ -132,6 +141,10 @@ void tox_events_clear_friend_name(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_friend_name_size(const Tox_Events *events)
|
uint32_t tox_events_get_friend_name_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->friend_name_size;
|
return events->friend_name_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,6 +155,17 @@ const Tox_Event_Friend_Name *tox_events_get_friend_name(const Tox_Events *events
|
||||||
return &events->friend_name[index];
|
return &events->friend_name[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_friend_name(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_friend_name_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_friend_name_pack(tox_events_get_friend_name(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -25,6 +25,14 @@ struct Tox_Event_Friend_Read_Receipt {
|
||||||
uint32_t message_id;
|
uint32_t message_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_friend_read_receipt_pack(const Tox_Event_Friend_Read_Receipt *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 2);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
msgpack_pack_uint32(mp, event->message_id);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_friend_read_receipt_construct(Tox_Event_Friend_Read_Receipt *friend_read_receipt)
|
static void tox_event_friend_read_receipt_construct(Tox_Event_Friend_Read_Receipt *friend_read_receipt)
|
||||||
{
|
{
|
||||||
*friend_read_receipt = (Tox_Event_Friend_Read_Receipt) {
|
*friend_read_receipt = (Tox_Event_Friend_Read_Receipt) {
|
||||||
|
@ -112,6 +120,10 @@ void tox_events_clear_friend_read_receipt(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_friend_read_receipt_size(const Tox_Events *events)
|
uint32_t tox_events_get_friend_read_receipt_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->friend_read_receipt_size;
|
return events->friend_read_receipt_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,6 +134,17 @@ const Tox_Event_Friend_Read_Receipt *tox_events_get_friend_read_receipt(const To
|
||||||
return &events->friend_read_receipt[index];
|
return &events->friend_read_receipt[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_friend_read_receipt(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_friend_read_receipt_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_friend_read_receipt_pack(tox_events_get_friend_read_receipt(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -26,6 +26,16 @@ struct Tox_Event_Friend_Request {
|
||||||
size_t message_length;
|
size_t message_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_friend_request_pack(const Tox_Event_Friend_Request *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 2);
|
||||||
|
msgpack_pack_bin(mp, TOX_PUBLIC_KEY_SIZE);
|
||||||
|
msgpack_pack_bin_body(mp, event->public_key, TOX_PUBLIC_KEY_SIZE);
|
||||||
|
msgpack_pack_bin(mp, event->message_length);
|
||||||
|
msgpack_pack_bin_body(mp, event->message, event->message_length);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_friend_request_construct(Tox_Event_Friend_Request *friend_request)
|
static void tox_event_friend_request_construct(Tox_Event_Friend_Request *friend_request)
|
||||||
{
|
{
|
||||||
*friend_request = (Tox_Event_Friend_Request) {
|
*friend_request = (Tox_Event_Friend_Request) {
|
||||||
|
@ -133,6 +143,10 @@ void tox_events_clear_friend_request(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_friend_request_size(const Tox_Events *events)
|
uint32_t tox_events_get_friend_request_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->friend_request_size;
|
return events->friend_request_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,6 +157,17 @@ const Tox_Event_Friend_Request *tox_events_get_friend_request(const Tox_Events *
|
||||||
return &events->friend_request[index];
|
return &events->friend_request[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_friend_request(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_friend_request_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_friend_request_pack(tox_events_get_friend_request(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -25,6 +25,14 @@ struct Tox_Event_Friend_Status {
|
||||||
Tox_User_Status connection_status;
|
Tox_User_Status connection_status;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_friend_status_pack(const Tox_Event_Friend_Status *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 2);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
msgpack_pack_uint32(mp, event->connection_status);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_friend_status_construct(Tox_Event_Friend_Status *friend_status)
|
static void tox_event_friend_status_construct(Tox_Event_Friend_Status *friend_status)
|
||||||
{
|
{
|
||||||
*friend_status = (Tox_Event_Friend_Status) {
|
*friend_status = (Tox_Event_Friend_Status) {
|
||||||
|
@ -111,6 +119,10 @@ void tox_events_clear_friend_status(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_friend_status_size(const Tox_Events *events)
|
uint32_t tox_events_get_friend_status_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->friend_status_size;
|
return events->friend_status_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,6 +133,17 @@ const Tox_Event_Friend_Status *tox_events_get_friend_status(const Tox_Events *ev
|
||||||
return &events->friend_status[index];
|
return &events->friend_status[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_friend_status(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_friend_status_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_friend_status_pack(tox_events_get_friend_status(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -26,6 +26,15 @@ struct Tox_Event_Friend_Status_Message {
|
||||||
size_t status_message_length;
|
size_t status_message_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_friend_status_message_pack(const Tox_Event_Friend_Status_Message *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 2);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
msgpack_pack_bin(mp, event->status_message_length);
|
||||||
|
msgpack_pack_bin_body(mp, event->status_message, event->status_message_length);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_friend_status_message_construct(Tox_Event_Friend_Status_Message *friend_status_message)
|
static void tox_event_friend_status_message_construct(Tox_Event_Friend_Status_Message *friend_status_message)
|
||||||
{
|
{
|
||||||
*friend_status_message = (Tox_Event_Friend_Status_Message) {
|
*friend_status_message = (Tox_Event_Friend_Status_Message) {
|
||||||
|
@ -135,6 +144,10 @@ void tox_events_clear_friend_status_message(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_friend_status_message_size(const Tox_Events *events)
|
uint32_t tox_events_get_friend_status_message_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->friend_status_message_size;
|
return events->friend_status_message_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,6 +158,17 @@ const Tox_Event_Friend_Status_Message *tox_events_get_friend_status_message(cons
|
||||||
return &events->friend_status_message[index];
|
return &events->friend_status_message[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_friend_status_message(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_friend_status_message_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_friend_status_message_pack(tox_events_get_friend_status_message(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -25,6 +25,19 @@ struct Tox_Event_Friend_Typing {
|
||||||
bool typing;
|
bool typing;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_friend_typing_pack(const Tox_Event_Friend_Typing *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 2);
|
||||||
|
msgpack_pack_uint32(mp, event->friend_number);
|
||||||
|
|
||||||
|
if (event->typing) {
|
||||||
|
msgpack_pack_true(mp);
|
||||||
|
} else {
|
||||||
|
msgpack_pack_false(mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_friend_typing_construct(Tox_Event_Friend_Typing *friend_typing)
|
static void tox_event_friend_typing_construct(Tox_Event_Friend_Typing *friend_typing)
|
||||||
{
|
{
|
||||||
*friend_typing = (Tox_Event_Friend_Typing) {
|
*friend_typing = (Tox_Event_Friend_Typing) {
|
||||||
|
@ -110,6 +123,10 @@ void tox_events_clear_friend_typing(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_friend_typing_size(const Tox_Events *events)
|
uint32_t tox_events_get_friend_typing_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->friend_typing_size;
|
return events->friend_typing_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,6 +137,17 @@ const Tox_Event_Friend_Typing *tox_events_get_friend_typing(const Tox_Events *ev
|
||||||
return &events->friend_typing[index];
|
return &events->friend_typing[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_friend_typing(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_friend_typing_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_friend_typing_pack(tox_events_get_friend_typing(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -24,6 +24,13 @@ struct Tox_Event_Self_Connection_Status {
|
||||||
Tox_Connection connection_status;
|
Tox_Connection connection_status;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void tox_event_self_connection_status_pack(const Tox_Event_Self_Connection_Status *event, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
assert(event != nullptr);
|
||||||
|
msgpack_pack_array(mp, 1);
|
||||||
|
msgpack_pack_uint32(mp, event->connection_status);
|
||||||
|
}
|
||||||
|
|
||||||
static void tox_event_self_connection_status_construct(Tox_Event_Self_Connection_Status *self_connection_status)
|
static void tox_event_self_connection_status_construct(Tox_Event_Self_Connection_Status *self_connection_status)
|
||||||
{
|
{
|
||||||
*self_connection_status = (Tox_Event_Self_Connection_Status) {
|
*self_connection_status = (Tox_Event_Self_Connection_Status) {
|
||||||
|
@ -100,6 +107,10 @@ void tox_events_clear_self_connection_status(Tox_Events *events)
|
||||||
|
|
||||||
uint32_t tox_events_get_self_connection_status_size(const Tox_Events *events)
|
uint32_t tox_events_get_self_connection_status_size(const Tox_Events *events)
|
||||||
{
|
{
|
||||||
|
if (events == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return events->self_connection_status_size;
|
return events->self_connection_status_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,6 +121,17 @@ const Tox_Event_Self_Connection_Status *tox_events_get_self_connection_status(co
|
||||||
return &events->self_connection_status[index];
|
return &events->self_connection_status[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack_self_connection_status(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
const uint32_t size = tox_events_get_self_connection_status_size(events);
|
||||||
|
|
||||||
|
msgpack_pack_array(mp, size);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < size; ++i) {
|
||||||
|
tox_event_self_connection_status_pack(tox_events_get_self_connection_status(events, i), mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
#include "tox_events.h"
|
#include "tox_events.h"
|
||||||
|
|
||||||
|
#include <msgpack.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
@ -55,3 +57,84 @@ Tox_Events *tox_events_iterate(Tox *tox, Tox_Err_Events_Iterate *error)
|
||||||
|
|
||||||
return state.events;
|
return state.events;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tox_events_pack(const Tox_Events *events, msgpack_packer *mp)
|
||||||
|
{
|
||||||
|
msgpack_pack_array(mp, 21);
|
||||||
|
tox_events_pack_conference_connected(events, mp);
|
||||||
|
tox_events_pack_conference_invite(events, mp);
|
||||||
|
tox_events_pack_conference_message(events, mp);
|
||||||
|
tox_events_pack_conference_peer_list_changed(events, mp);
|
||||||
|
tox_events_pack_conference_peer_name(events, mp);
|
||||||
|
tox_events_pack_conference_title(events, mp);
|
||||||
|
tox_events_pack_file_chunk_request(events, mp);
|
||||||
|
tox_events_pack_file_recv_chunk(events, mp);
|
||||||
|
tox_events_pack_file_recv_control(events, mp);
|
||||||
|
tox_events_pack_file_recv(events, mp);
|
||||||
|
tox_events_pack_friend_connection_status(events, mp);
|
||||||
|
tox_events_pack_friend_lossless_packet(events, mp);
|
||||||
|
tox_events_pack_friend_lossy_packet(events, mp);
|
||||||
|
tox_events_pack_friend_message(events, mp);
|
||||||
|
tox_events_pack_friend_name(events, mp);
|
||||||
|
tox_events_pack_friend_read_receipt(events, mp);
|
||||||
|
tox_events_pack_friend_request(events, mp);
|
||||||
|
tox_events_pack_friend_status_message(events, mp);
|
||||||
|
tox_events_pack_friend_status(events, mp);
|
||||||
|
tox_events_pack_friend_typing(events, mp);
|
||||||
|
tox_events_pack_self_connection_status(events, mp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int count_bytes(void *data, const char *buf, size_t len)
|
||||||
|
{
|
||||||
|
uint32_t *count = (uint32_t *)data;
|
||||||
|
assert(count != nullptr);
|
||||||
|
*count += len;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t tox_events_bytes_size(const Tox_Events *events)
|
||||||
|
{
|
||||||
|
uint32_t count = 0;
|
||||||
|
msgpack_packer mp;
|
||||||
|
msgpack_packer_init(&mp, &count, count_bytes);
|
||||||
|
tox_events_pack(events, &mp);
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int write_bytes(void *data, const char *buf, size_t len)
|
||||||
|
{
|
||||||
|
uint8_t **bytes = (uint8_t **)data;
|
||||||
|
assert(bytes != nullptr && *bytes != nullptr);
|
||||||
|
memcpy(*bytes, buf, len);
|
||||||
|
*bytes += len;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tox_events_get_bytes(const Tox_Events *events, uint8_t *bytes)
|
||||||
|
{
|
||||||
|
msgpack_packer mp;
|
||||||
|
msgpack_packer_init(&mp, &bytes, write_bytes);
|
||||||
|
tox_events_pack(events, &mp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void tox_events_print(const Tox_Events *events)
|
||||||
|
{
|
||||||
|
msgpack_sbuffer sbuf;
|
||||||
|
msgpack_sbuffer_init(&sbuf);
|
||||||
|
|
||||||
|
msgpack_packer mp;
|
||||||
|
msgpack_packer_init(&mp, &sbuf, msgpack_sbuffer_write);
|
||||||
|
|
||||||
|
tox_events_pack(events, &mp);
|
||||||
|
|
||||||
|
msgpack_zone mempool;
|
||||||
|
msgpack_zone_init(&mempool, 2048);
|
||||||
|
|
||||||
|
msgpack_object deserialized;
|
||||||
|
msgpack_unpack(sbuf.data, sbuf.size, nullptr, &mempool, &deserialized);
|
||||||
|
msgpack_object_print(stdout, deserialized);
|
||||||
|
fputc('\n', stdout);
|
||||||
|
|
||||||
|
msgpack_zone_destroy(&mempool);
|
||||||
|
msgpack_sbuffer_destroy(&sbuf);
|
||||||
|
}
|
||||||
|
|
|
@ -306,6 +306,11 @@ Tox_Events *tox_events_iterate(Tox *tox, Tox_Err_Events_Iterate *error);
|
||||||
*/
|
*/
|
||||||
void tox_events_free(Tox_Events *events);
|
void tox_events_free(Tox_Events *events);
|
||||||
|
|
||||||
|
uint32_t tox_events_bytes_size(const Tox_Events *events);
|
||||||
|
void tox_events_get_bytes(const Tox_Events *events, uint8_t *bytes);
|
||||||
|
|
||||||
|
void tox_events_print(const Tox_Events *events);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue
Block a user