From af6e27bbf1b447e6e85520b965f009b7ece81004 Mon Sep 17 00:00:00 2001 From: zoff99 Date: Wed, 8 Apr 2020 19:58:06 +0200 Subject: Use public API for sending in RTP. --- toxav/rtp.c | 30 ++++++++++++++++++++++++------ toxav/rtp.h | 8 +++++++- toxav/toxav.c | 4 ++-- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/toxav/rtp.c b/toxav/rtp.c index f48c483b..69aed2dc 100644 --- a/toxav/rtp.c +++ b/toxav/rtp.c @@ -26,6 +26,23 @@ */ #define VIDEO_KEEP_KEYFRAME_IN_BUFFER_FOR_MS 15 + +/* + * return -1 on failure, 0 on success + * + */ +static int rtp_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; +} + // allocate_len is NOT including header! static struct RTPMessage *new_message(const struct RTPHeader *header, size_t allocate_len, const uint8_t *data, uint16_t data_length) @@ -626,7 +643,7 @@ size_t rtp_header_unpack(const uint8_t *data, struct RTPHeader *header) return p - data; } -RTPSession *rtp_new(int payload_type, Messenger *m, uint32_t friendnumber, +RTPSession *rtp_new(int payload_type, Messenger *m, Tox *tox, uint32_t friendnumber, BWController *bwc, void *cs, rtp_m_cb *mcb) { assert(mcb != nullptr); @@ -654,6 +671,7 @@ RTPSession *rtp_new(int payload_type, Messenger *m, uint32_t friendnumber, session->ssrc = payload_type == RTP_TYPE_VIDEO ? 0 : random_u32(); session->payload_type = payload_type; session->m = m; + session->tox = tox; session->friend_number = friendnumber; // set NULL just in case @@ -787,7 +805,7 @@ int rtp_send_data(RTPSession *session, const uint8_t *data, uint32_t length, rtp_header_pack(rdata + 1, &header); memcpy(rdata + 1 + RTP_HEADER_SIZE, data, length); - if (-1 == m_send_custom_lossy_packet(session->m, session->friend_number, rdata, SIZEOF_VLA(rdata))) { + if (-1 == rtp_send_custom_lossy_packet(session->tox, session->friend_number, rdata, SIZEOF_VLA(rdata))) { const char *netstrerror = net_new_strerror(net_error()); LOGGER_WARNING(session->m->log, "RTP send failed (len: %u)! std error: %s, net error: %s", (unsigned)SIZEOF_VLA(rdata), strerror(errno), netstrerror); @@ -805,8 +823,8 @@ int rtp_send_data(RTPSession *session, const uint8_t *data, uint32_t length, rtp_header_pack(rdata + 1, &header); memcpy(rdata + 1 + RTP_HEADER_SIZE, data + sent, piece); - if (-1 == m_send_custom_lossy_packet(session->m, session->friend_number, - rdata, piece + RTP_HEADER_SIZE + 1)) { + if (-1 == rtp_send_custom_lossy_packet(session->tox, session->friend_number, + rdata, piece + RTP_HEADER_SIZE + 1)) { const char *netstrerror = net_new_strerror(net_error()); LOGGER_WARNING(session->m->log, "RTP send failed (len: %d)! std error: %s, net error: %s", piece + RTP_HEADER_SIZE + 1, strerror(errno), netstrerror); @@ -825,8 +843,8 @@ int rtp_send_data(RTPSession *session, const uint8_t *data, uint32_t length, rtp_header_pack(rdata + 1, &header); memcpy(rdata + 1 + RTP_HEADER_SIZE, data + sent, piece); - if (-1 == m_send_custom_lossy_packet(session->m, session->friend_number, rdata, - piece + RTP_HEADER_SIZE + 1)) { + if (-1 == rtp_send_custom_lossy_packet(session->tox, session->friend_number, rdata, + piece + RTP_HEADER_SIZE + 1)) { const char *netstrerror = net_new_strerror(net_error()); LOGGER_WARNING(session->m->log, "RTP send failed (len: %d)! std error: %s, net error: %s", piece + RTP_HEADER_SIZE + 1, strerror(errno), netstrerror); diff --git a/toxav/rtp.h b/toxav/rtp.h index 46cd6b86..be9e63f8 100644 --- a/toxav/rtp.h +++ b/toxav/rtp.h @@ -16,6 +16,11 @@ extern "C" { #endif +#ifndef TOX_DEFINED +#define TOX_DEFINED +typedef struct Tox Tox; +#endif /* TOX_DEFINED */ + /** * RTPHeader serialised size in bytes. */ @@ -159,6 +164,7 @@ typedef struct RTPSession { struct RTPWorkBufferList *work_buffer_list; uint8_t first_packets_counter; /* dismiss first few lost video packets */ Messenger *m; + Tox *tox; uint32_t friend_number; BWController *bwc; void *cs; @@ -184,7 +190,7 @@ size_t rtp_header_pack(uint8_t *rdata, const struct RTPHeader *header); */ size_t rtp_header_unpack(const uint8_t *data, struct RTPHeader *header); -RTPSession *rtp_new(int payload_type, Messenger *m, uint32_t friendnumber, +RTPSession *rtp_new(int payload_type, Messenger *m, Tox *tox, uint32_t friendnumber, BWController *bwc, void *cs, rtp_m_cb *mcb); void rtp_kill(RTPSession *session); int rtp_allow_receiving(RTPSession *session); diff --git a/toxav/toxav.c b/toxav/toxav.c index a3fa7894..3dbe2cff 100644 --- a/toxav/toxav.c +++ b/toxav/toxav.c @@ -1331,7 +1331,7 @@ static bool call_prepare_transmission(ToxAVCall *call) goto FAILURE; } - call->audio_rtp = rtp_new(RTP_TYPE_AUDIO, av->m, call->friend_number, call->bwc, + call->audio_rtp = rtp_new(RTP_TYPE_AUDIO, av->m, av->tox, call->friend_number, call->bwc, call->audio, ac_queue_message); if (!call->audio_rtp) { @@ -1347,7 +1347,7 @@ static bool call_prepare_transmission(ToxAVCall *call) goto FAILURE; } - call->video_rtp = rtp_new(RTP_TYPE_VIDEO, av->m, call->friend_number, call->bwc, + call->video_rtp = rtp_new(RTP_TYPE_VIDEO, av->m, av->tox, call->friend_number, call->bwc, call->video, vc_queue_message); if (!call->video_rtp) { -- cgit v1.2.3