summaryrefslogtreecommitdiff
path: root/toxav/bwcontroller.c
diff options
context:
space:
mode:
authorGregory Mullen (grayhatter) <greg@grayhatter.com>2016-09-11 16:27:03 -0700
committerGregory Mullen (grayhatter) <greg@grayhatter.com>2016-09-17 14:05:51 -0700
commit21f8db12c45bd56293262cd4abfb73cd9abec821 (patch)
tree580729367d00e1eb7e0c4d533777d22af7d7ffc5 /toxav/bwcontroller.c
parent5da85c582d97d746887da407153afc0acf0a4215 (diff)
Make ToxAV stateless
Diffstat (limited to 'toxav/bwcontroller.c')
-rw-r--r--toxav/bwcontroller.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/toxav/bwcontroller.c b/toxav/bwcontroller.c
index b97135d6..63350f17 100644
--- a/toxav/bwcontroller.c
+++ b/toxav/bwcontroller.c
@@ -40,7 +40,7 @@
40 */ 40 */
41 41
42struct BWController_s { 42struct BWController_s {
43 void (*mcb)(BWController *, uint32_t, float, void *); 43 void (*mcb)(BWController *, uint32_t, float, void *, void *);
44 void *mcb_data; 44 void *mcb_data;
45 45
46 Messenger *m; 46 Messenger *m;
@@ -61,17 +61,18 @@ struct BWController_s {
61 } rcvpkt; /* To calculate average received packet */ 61 } rcvpkt; /* To calculate average received packet */
62}; 62};
63 63
64int bwc_handle_data(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t length, void *object); 64int bwc_handle_data(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t length, void *object,
65 void *userdata);
65void send_update(BWController *bwc); 66void send_update(BWController *bwc);
66 67
67BWController *bwc_new(Messenger *m, uint32_t friendnumber, 68BWController *bwc_new(Messenger *m, uint32_t friendnumber,
68 void (*mcb)(BWController *, uint32_t, float, void *), 69 void (*mcb)(BWController *, uint32_t, float, void *, void *),
69 void *udata) 70 void *call_data)
70{ 71{
71 BWController *retu = calloc(sizeof(struct BWController_s), 1); 72 BWController *retu = calloc(sizeof(struct BWController_s), 1);
72 73
73 retu->mcb = mcb; 74 retu->mcb = mcb;
74 retu->mcb_data = udata; 75 retu->mcb_data = call_data;
75 retu->m = m; 76 retu->m = m;
76 retu->friend_number = friendnumber; 77 retu->friend_number = friendnumber;
77 retu->cycle.lsu = retu->cycle.lfu = current_time_monotonic(); 78 retu->cycle.lsu = retu->cycle.lfu = current_time_monotonic();
@@ -179,7 +180,7 @@ void send_update(BWController *bwc)
179 bwc->cycle.lsu = current_time_monotonic(); 180 bwc->cycle.lsu = current_time_monotonic();
180 } 181 }
181} 182}
182static int on_update(BWController *bwc, const struct BWCMessage *msg) 183static int on_update(BWController *bwc, const struct BWCMessage *msg, void *userdata)
183{ 184{
184 LOGGER_DEBUG(bwc->m->log, "%p Got update from peer", bwc); 185 LOGGER_DEBUG(bwc->m->log, "%p Got update from peer", bwc);
185 186
@@ -199,16 +200,18 @@ static int on_update(BWController *bwc, const struct BWCMessage *msg)
199 if (lost && bwc->mcb) { 200 if (lost && bwc->mcb) {
200 bwc->mcb(bwc, bwc->friend_number, 201 bwc->mcb(bwc, bwc->friend_number,
201 ((float) lost / (recv + lost)), 202 ((float) lost / (recv + lost)),
202 bwc->mcb_data); 203 bwc->mcb_data,
204 userdata);
203 } 205 }
204 206
205 return 0; 207 return 0;
206} 208}
207int bwc_handle_data(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t length, void *object) 209int bwc_handle_data(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t length, void *object,
210 void *userdata)
208{ 211{
209 if (length - 1 != sizeof(struct BWCMessage)) { 212 if (length - 1 != sizeof(struct BWCMessage)) {
210 return -1; 213 return -1;
211 } 214 }
212 215
213 return on_update(object, (const struct BWCMessage *)(data + 1)); 216 return on_update(object, (const struct BWCMessage *)(data + 1), userdata);
214} 217}