Squashed 'external/toxcore/c-toxcore/' changes from 76bc4c496d..501a32937f
501a32937f Merge branch 'toxav_deadline' of github.com:Green-Sky/c-toxcore into tomato_testing_in_prod 0b49ba2d94 Merge branch 'toxav_video_bitrate' of github.com:Green-Sky/c-toxcore into tomato_testing_in_prod 9c0977d7c6 Merge branch 'toxav_remove_img_copy_encode' of github.com:Green-Sky/c-toxcore into tomato_testing_in_prod 4071d74cc9 fix(ngc): dont double every message, if we are not directly connected but we and the other peer would support direct. 1d4cc783b1 fix(bazel): one more fuzz target that needs netprof 066aafbfcd fix(bazel): make net_prof visible to its consumers fa015c7e2e fix(toxav): remove extra copy of video frame on encode Tested and works, but there might be alignment issues and other stuff. d34f7d1f5c fix(toxav): handle vpx_image_alloc failure 865261a67a chore(toxav): use realtime deadline for vp8 encoder Technically all this does is choose a quality based on frame duration, which we always set to 1, and as such is always realtime. (In same timebase as pts, which we use as a frame counter...) dd12b9889a chore(toxav): tighten the video bitrate to the same as the vp8 encoder internally checks. 9dcc2f530d fix(bazel): missing dep for auto_tests 741ac5f5e6 fix(bazel): missing dep for fuzz target git-subtree-dir: external/toxcore/c-toxcore git-subtree-split: 501a32937f4550d4340406a6a73da548849a53af
This commit is contained in:
@ -358,6 +358,10 @@ cc_library(
|
||||
name = "net_profile",
|
||||
srcs = ["net_profile.c"],
|
||||
hdrs = ["net_profile.h"],
|
||||
visibility = [
|
||||
"//c-toxcore/auto_tests:__pkg__",
|
||||
"//c-toxcore/testing/fuzzing:__pkg__",
|
||||
],
|
||||
deps = [
|
||||
":attributes",
|
||||
":ccompat",
|
||||
@ -555,6 +559,7 @@ cc_fuzz_test(
|
||||
deps = [
|
||||
":DHT",
|
||||
":mem_test_util",
|
||||
":net_profile",
|
||||
"//c-toxcore/testing/fuzzing:fuzz_support",
|
||||
],
|
||||
)
|
||||
@ -781,6 +786,7 @@ cc_fuzz_test(
|
||||
":TCP_client",
|
||||
":mem_test_util",
|
||||
":net_crypto",
|
||||
":net_profile",
|
||||
":network",
|
||||
"//c-toxcore/testing/fuzzing:fuzz_support",
|
||||
"//c-toxcore/testing/fuzzing:fuzz_tox",
|
||||
|
@ -1626,7 +1626,7 @@ int group_packet_wrap(
|
||||
* Returns true on success.
|
||||
*/
|
||||
non_null()
|
||||
static bool send_lossy_group_packet(const GC_Chat *chat, const GC_Connection *gconn, const uint8_t *data,
|
||||
static bool send_lossy_group_packet(const GC_Chat *chat, GC_Connection *gconn, const uint8_t *data,
|
||||
uint16_t length, uint8_t packet_type)
|
||||
{
|
||||
assert(length <= MAX_GC_CUSTOM_LOSSY_PACKET_SIZE);
|
||||
@ -2236,7 +2236,7 @@ static int handle_gc_invite_response_reject(const GC_Session *c, GC_Chat *chat,
|
||||
* Return true on success.
|
||||
*/
|
||||
non_null()
|
||||
static bool send_gc_invite_response_reject(const GC_Chat *chat, const GC_Connection *gconn, uint8_t type)
|
||||
static bool send_gc_invite_response_reject(const GC_Chat *chat, GC_Connection *gconn, uint8_t type)
|
||||
{
|
||||
if (type >= GJ_INVALID) {
|
||||
type = GJ_INVITE_FAILED;
|
||||
@ -2353,7 +2353,7 @@ static bool send_gc_lossy_packet_all_peers(const GC_Chat *chat, const uint8_t *d
|
||||
uint32_t confirmed_peers = 0;
|
||||
|
||||
for (uint32_t i = 1; i < chat->numpeers; ++i) {
|
||||
const GC_Connection *gconn = get_gc_connection(chat, i);
|
||||
GC_Connection *gconn = get_gc_connection(chat, i);
|
||||
|
||||
assert(gconn != nullptr);
|
||||
|
||||
@ -7072,7 +7072,7 @@ static void do_peer_delete(const GC_Session *c, GC_Chat *chat, void *userdata)
|
||||
* Return true on success.
|
||||
*/
|
||||
non_null()
|
||||
static bool ping_peer(const GC_Chat *chat, const GC_Connection *gconn)
|
||||
static bool ping_peer(const GC_Chat *chat, GC_Connection *gconn)
|
||||
{
|
||||
const uint16_t buf_size = GC_PING_PACKET_MIN_DATA_SIZE + sizeof(IP_Port);
|
||||
uint8_t *data = (uint8_t *)mem_balloc(chat->mem, buf_size);
|
||||
|
@ -115,6 +115,7 @@ typedef struct GC_Connection {
|
||||
uint64_t last_sent_tcp_relays_time; /* the last time we attempted to send this peer our tcp relays */
|
||||
uint16_t tcp_relay_share_index;
|
||||
uint64_t last_received_direct_time; /* the last time we received a direct UDP packet from this connection */
|
||||
uint64_t last_sent_direct_try_time; /* the last time we tried sending a direct UDP packet */
|
||||
uint64_t last_sent_ip_time; /* the last time we sent our ip info to this peer in a ping packet */
|
||||
|
||||
Node_format connected_tcp_relays[MAX_FRIEND_TCP_CONNECTIONS];
|
||||
|
@ -29,6 +29,9 @@
|
||||
/** Seconds since last direct UDP packet was received before the connection is considered dead */
|
||||
#define GCC_UDP_DIRECT_TIMEOUT (GC_PING_TIMEOUT + 4)
|
||||
|
||||
/** Seconds since last direct UDP packet was sent before we can try again. Cheap NAT hole punch */
|
||||
#define GCC_UDP_DIRECT_RETRY 1
|
||||
|
||||
/** Returns true if array entry does not contain an active packet. */
|
||||
non_null()
|
||||
static bool array_entry_is_empty(const GC_Message_Array_Entry *array_entry)
|
||||
@ -595,7 +598,7 @@ void gcc_resend_packets(const GC_Chat *chat, GC_Connection *gconn)
|
||||
}
|
||||
}
|
||||
|
||||
bool gcc_send_packet(const GC_Chat *chat, const GC_Connection *gconn, const uint8_t *packet, uint16_t length)
|
||||
bool gcc_send_packet(const GC_Chat *chat, GC_Connection *gconn, const uint8_t *packet, uint16_t length)
|
||||
{
|
||||
if (packet == nullptr || length == 0) {
|
||||
return false;
|
||||
@ -608,8 +611,12 @@ bool gcc_send_packet(const GC_Chat *chat, const GC_Connection *gconn, const uint
|
||||
return (uint16_t) sendpacket(chat->net, &gconn->addr.ip_port, packet, length) == length;
|
||||
}
|
||||
|
||||
if ((uint16_t) sendpacket(chat->net, &gconn->addr.ip_port, packet, length) == length) {
|
||||
direct_send_attempt = true;
|
||||
if (gcc_conn_should_try_direct(chat->mono_time, gconn)) {
|
||||
gconn->last_sent_direct_try_time = mono_time_get(chat->mono_time);
|
||||
|
||||
if ((uint16_t) sendpacket(chat->net, &gconn->addr.ip_port, packet, length) == length) {
|
||||
direct_send_attempt = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -617,7 +624,7 @@ bool gcc_send_packet(const GC_Chat *chat, const GC_Connection *gconn, const uint
|
||||
return ret == 0 || direct_send_attempt;
|
||||
}
|
||||
|
||||
int gcc_encrypt_and_send_lossless_packet(const GC_Chat *chat, const GC_Connection *gconn, const uint8_t *data,
|
||||
int gcc_encrypt_and_send_lossless_packet(const GC_Chat *chat, GC_Connection *gconn, const uint8_t *data,
|
||||
uint16_t length, uint64_t message_id, uint8_t packet_type)
|
||||
{
|
||||
const uint16_t packet_size = gc_get_wrapped_packet_size(length, NET_PACKET_GC_LOSSLESS);
|
||||
@ -659,6 +666,11 @@ bool gcc_conn_is_direct(const Mono_Time *mono_time, const GC_Connection *gconn)
|
||||
return GCC_UDP_DIRECT_TIMEOUT + gconn->last_received_direct_time > mono_time_get(mono_time);
|
||||
}
|
||||
|
||||
bool gcc_conn_should_try_direct(const Mono_Time *mono_time, const GC_Connection *gconn)
|
||||
{
|
||||
return mono_time_is_timeout(mono_time, gconn->last_sent_direct_try_time, GCC_UDP_DIRECT_RETRY);
|
||||
}
|
||||
|
||||
bool gcc_direct_conn_is_possible(const GC_Chat *chat, const GC_Connection *gconn)
|
||||
{
|
||||
return !net_family_is_unspec(gconn->addr.ip_port.ip.family) && !net_family_is_unspec(net_family(chat->net));
|
||||
|
@ -135,6 +135,10 @@ void gcc_make_session_shared_key(GC_Connection *gconn, const uint8_t *sender_pk)
|
||||
non_null()
|
||||
bool gcc_conn_is_direct(const Mono_Time *mono_time, const GC_Connection *gconn);
|
||||
|
||||
/** @brief Return true if we can try a direct connection with `gconn` again. */
|
||||
non_null()
|
||||
bool gcc_conn_should_try_direct(const Mono_Time *mono_time, const GC_Connection *gconn);
|
||||
|
||||
/** @brief Return true if a direct UDP connection is possible with `gconn`. */
|
||||
non_null()
|
||||
bool gcc_direct_conn_is_possible(const GC_Chat *chat, const GC_Connection *gconn);
|
||||
@ -146,7 +150,7 @@ bool gcc_direct_conn_is_possible(const GC_Chat *chat, const GC_Connection *gconn
|
||||
* Return true on success.
|
||||
*/
|
||||
non_null()
|
||||
bool gcc_send_packet(const GC_Chat *chat, const GC_Connection *gconn, const uint8_t *packet, uint16_t length);
|
||||
bool gcc_send_packet(const GC_Chat *chat, GC_Connection *gconn, const uint8_t *packet, uint16_t length);
|
||||
|
||||
/** @brief Sends a lossless packet to `gconn` comprised of `data` of size `length`.
|
||||
*
|
||||
@ -184,7 +188,7 @@ bool gcc_send_lossless_packet_fragments(const GC_Chat *chat, GC_Connection *gcon
|
||||
* Return -2 if the packet fails to send.
|
||||
*/
|
||||
non_null(1, 2) nullable(3)
|
||||
int gcc_encrypt_and_send_lossless_packet(const GC_Chat *chat, const GC_Connection *gconn, const uint8_t *data,
|
||||
int gcc_encrypt_and_send_lossless_packet(const GC_Chat *chat, GC_Connection *gconn, const uint8_t *data,
|
||||
uint16_t length, uint64_t message_id, uint8_t packet_type);
|
||||
|
||||
/** @brief Called when a peer leaves the group. */
|
||||
|
Reference in New Issue
Block a user