From da2c4191b470fba44ed5a4cd4679d3fcee887f69 Mon Sep 17 00:00:00 2001 From: zoff99 Date: Tue, 7 Apr 2020 22:34:50 +0200 Subject: Use public API for sending in BWC. --- toxav/BUILD.bazel | 1 + toxav/bwcontroller.c | 23 +++++++++++++++++++++-- toxav/bwcontroller.h | 8 +++++++- toxav/toxav.c | 2 +- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/toxav/BUILD.bazel b/toxav/BUILD.bazel index 79dbd12d..33956aac 100644 --- a/toxav/BUILD.bazel +++ b/toxav/BUILD.bazel @@ -46,6 +46,7 @@ cc_library( deps = [ ":ring_buffer", "//c-toxcore/toxcore:Messenger", + "//c-toxcore/toxcore:toxcore", ], ) diff --git a/toxav/bwcontroller.c b/toxav/bwcontroller.c index a9018162..6f3f4d00 100644 --- a/toxav/bwcontroller.c +++ b/toxav/bwcontroller.c @@ -43,6 +43,7 @@ struct BWController_s { void *mcb_user_data; Messenger *m; + Tox *tox; uint32_t friend_number; BWCCycle cycle; @@ -59,9 +60,10 @@ struct BWCMessage { }; static int bwc_handle_data(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t length, void *object); +static int bwc_send_custom_lossy_packet(Tox *tox, int32_t friendnumber, const uint8_t *data, uint32_t length); static void send_update(BWController *bwc); -BWController *bwc_new(Messenger *m, uint32_t friendnumber, m_cb *mcb, void *mcb_user_data, +BWController *bwc_new(Messenger *m, Tox *tox, uint32_t friendnumber, m_cb *mcb, void *mcb_user_data, Mono_Time *bwc_mono_time) { BWController *retu = (BWController *)calloc(sizeof(struct BWController_s), 1); @@ -74,6 +76,7 @@ BWController *bwc_new(Messenger *m, uint32_t friendnumber, m_cb *mcb, void *mcb_ uint64_t now = current_time_monotonic(bwc_mono_time); retu->cycle.last_sent_timestamp = now; retu->cycle.last_refresh_timestamp = now; + retu->tox = tox; retu->rcvpkt.rb = rb_new(BWC_AVG_PKT_COUNT); retu->cycle.lost = 0; retu->cycle.recv = 0; @@ -143,7 +146,7 @@ static void send_update(BWController *bwc) offset += net_pack_u32(bwc_packet + offset, bwc->cycle.recv); assert(offset == sizeof(bwc_packet)); - if (m_send_custom_lossy_packet(bwc->m, bwc->friend_number, bwc_packet, sizeof(bwc_packet)) == -1) { + if (bwc_send_custom_lossy_packet(bwc->tox, bwc->friend_number, bwc_packet, sizeof(bwc_packet)) == -1) { const char *netstrerror = net_new_strerror(net_error()); LOGGER_WARNING(bwc->m->log, "BWC send failed (len: %u)! std error: %s, net error %s", (unsigned)sizeof(bwc_packet), strerror(errno), netstrerror); @@ -183,6 +186,22 @@ static int on_update(BWController *bwc, const struct BWCMessage *msg) return 0; } +/* + * return -1 on failure, 0 on success + * + */ +static int bwc_send_custom_lossy_packet(Tox *tox, int32_t friendnumber, const uint8_t *data, uint32_t length) +{ + Tox_Err_Friend_Custom_Packet error; + tox_friend_send_lossy_packet(tox, friendnumber, data, (size_t)length, &error); + + if (error == TOX_ERR_FRIEND_CUSTOM_PACKET_OK) { + return 0; + } + + return -1; +} + static int bwc_handle_data(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t length, void *object) { if (length - 1 != sizeof(struct BWCMessage)) { diff --git a/toxav/bwcontroller.h b/toxav/bwcontroller.h index 7c101b02..9470c125 100644 --- a/toxav/bwcontroller.h +++ b/toxav/bwcontroller.h @@ -6,12 +6,18 @@ #define C_TOXCORE_TOXAV_BWCONTROLLER_H #include "../toxcore/Messenger.h" +#include "../toxcore/tox.h" + +#ifndef TOX_DEFINED +#define TOX_DEFINED +typedef struct Tox Tox; +#endif /* TOX_DEFINED */ typedef struct BWController_s BWController; typedef void m_cb(BWController *bwc, uint32_t friend_number, float todo, void *user_data); -BWController *bwc_new(Messenger *m, uint32_t friendnumber, m_cb *mcb, void *mcb_user_data, +BWController *bwc_new(Messenger *m, Tox *tox, uint32_t friendnumber, m_cb *mcb, void *mcb_user_data, Mono_Time *bwc_mono_time); void bwc_kill(BWController *bwc); diff --git a/toxav/toxav.c b/toxav/toxav.c index dda16ecd..a3fa7894 100644 --- a/toxav/toxav.c +++ b/toxav/toxav.c @@ -1321,7 +1321,7 @@ static bool call_prepare_transmission(ToxAVCall *call) } /* Prepare bwc */ - call->bwc = bwc_new(av->m, call->friend_number, callback_bwc, call, av->toxav_mono_time); + call->bwc = bwc_new(av->m, av->tox, call->friend_number, callback_bwc, call, av->toxav_mono_time); { /* Prepare audio */ call->audio = ac_new(av->toxav_mono_time, av->m->log, av, call->friend_number, av->acb, av->acb_user_data); -- cgit v1.2.3