diff options
Diffstat (limited to 'toxav/bwcontroller.c')
-rw-r--r-- | toxav/bwcontroller.c | 23 |
1 files changed, 21 insertions, 2 deletions
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 { | |||
43 | void *mcb_user_data; | 43 | void *mcb_user_data; |
44 | 44 | ||
45 | Messenger *m; | 45 | Messenger *m; |
46 | Tox *tox; | ||
46 | uint32_t friend_number; | 47 | uint32_t friend_number; |
47 | 48 | ||
48 | BWCCycle cycle; | 49 | BWCCycle cycle; |
@@ -59,9 +60,10 @@ struct BWCMessage { | |||
59 | }; | 60 | }; |
60 | 61 | ||
61 | static int bwc_handle_data(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t length, void *object); | 62 | static int bwc_handle_data(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t length, void *object); |
63 | static int bwc_send_custom_lossy_packet(Tox *tox, int32_t friendnumber, const uint8_t *data, uint32_t length); | ||
62 | static void send_update(BWController *bwc); | 64 | static void send_update(BWController *bwc); |
63 | 65 | ||
64 | BWController *bwc_new(Messenger *m, uint32_t friendnumber, m_cb *mcb, void *mcb_user_data, | 66 | BWController *bwc_new(Messenger *m, Tox *tox, uint32_t friendnumber, m_cb *mcb, void *mcb_user_data, |
65 | Mono_Time *bwc_mono_time) | 67 | Mono_Time *bwc_mono_time) |
66 | { | 68 | { |
67 | BWController *retu = (BWController *)calloc(sizeof(struct BWController_s), 1); | 69 | 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_ | |||
74 | uint64_t now = current_time_monotonic(bwc_mono_time); | 76 | uint64_t now = current_time_monotonic(bwc_mono_time); |
75 | retu->cycle.last_sent_timestamp = now; | 77 | retu->cycle.last_sent_timestamp = now; |
76 | retu->cycle.last_refresh_timestamp = now; | 78 | retu->cycle.last_refresh_timestamp = now; |
79 | retu->tox = tox; | ||
77 | retu->rcvpkt.rb = rb_new(BWC_AVG_PKT_COUNT); | 80 | retu->rcvpkt.rb = rb_new(BWC_AVG_PKT_COUNT); |
78 | retu->cycle.lost = 0; | 81 | retu->cycle.lost = 0; |
79 | retu->cycle.recv = 0; | 82 | retu->cycle.recv = 0; |
@@ -143,7 +146,7 @@ static void send_update(BWController *bwc) | |||
143 | offset += net_pack_u32(bwc_packet + offset, bwc->cycle.recv); | 146 | offset += net_pack_u32(bwc_packet + offset, bwc->cycle.recv); |
144 | assert(offset == sizeof(bwc_packet)); | 147 | assert(offset == sizeof(bwc_packet)); |
145 | 148 | ||
146 | if (m_send_custom_lossy_packet(bwc->m, bwc->friend_number, bwc_packet, sizeof(bwc_packet)) == -1) { | 149 | if (bwc_send_custom_lossy_packet(bwc->tox, bwc->friend_number, bwc_packet, sizeof(bwc_packet)) == -1) { |
147 | const char *netstrerror = net_new_strerror(net_error()); | 150 | const char *netstrerror = net_new_strerror(net_error()); |
148 | LOGGER_WARNING(bwc->m->log, "BWC send failed (len: %u)! std error: %s, net error %s", | 151 | LOGGER_WARNING(bwc->m->log, "BWC send failed (len: %u)! std error: %s, net error %s", |
149 | (unsigned)sizeof(bwc_packet), strerror(errno), netstrerror); | 152 | (unsigned)sizeof(bwc_packet), strerror(errno), netstrerror); |
@@ -183,6 +186,22 @@ static int on_update(BWController *bwc, const struct BWCMessage *msg) | |||
183 | return 0; | 186 | return 0; |
184 | } | 187 | } |
185 | 188 | ||
189 | /* | ||
190 | * return -1 on failure, 0 on success | ||
191 | * | ||
192 | */ | ||
193 | static int bwc_send_custom_lossy_packet(Tox *tox, int32_t friendnumber, const uint8_t *data, uint32_t length) | ||
194 | { | ||
195 | Tox_Err_Friend_Custom_Packet error; | ||
196 | tox_friend_send_lossy_packet(tox, friendnumber, data, (size_t)length, &error); | ||
197 | |||
198 | if (error == TOX_ERR_FRIEND_CUSTOM_PACKET_OK) { | ||
199 | return 0; | ||
200 | } | ||
201 | |||
202 | return -1; | ||
203 | } | ||
204 | |||
186 | static int bwc_handle_data(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t length, void *object) | 205 | static int bwc_handle_data(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t length, void *object) |
187 | { | 206 | { |
188 | if (length - 1 != sizeof(struct BWCMessage)) { | 207 | if (length - 1 != sizeof(struct BWCMessage)) { |