/* Incoming data from TURN-server */ static void data_handler(struct allocation *alloc, const struct sa *src, struct mbuf *mb) { int err; if (!alloc->ok) { re_fprintf(stderr, "allocation not ready" " -- ignore %zu bytes from %J\n", mbuf_get_left(mb), src); return; } if (!sa_cmp(src, &alloc->peer, SA_ALL)) { re_printf("updating peer address: %J --> %J\n", &alloc->peer, src); alloc->peer = *src; if (!alloc->turn_ind) turnc_add_chan(alloc->turnc, src, NULL, NULL); tmr_start(&alloc->tmr_ping, PING_INTERVAL, tmr_ping_handler, alloc); } err = receiver_recv(&alloc->recv, src, mb); if (err) { re_fprintf(stderr, "corrupt packet coming from %J (%m)\n", src, err); } }
size_t receiver_to_unpacker(receiver* r, size_t request_size, msgpack_unpacker *unpacker) { size_t recv_len; // make sure there's enough room, or expand the unpacker accordingly if (msgpack_unpacker_buffer_capacity(unpacker) < request_size) { msgpack_unpacker_reserve_buffer(unpacker, request_size); assert(msgpack_unpacker_buffer_capacity(unpacker) >= request_size); } recv_len = receiver_recv(r, msgpack_unpacker_buffer(unpacker), request_size); msgpack_unpacker_buffer_consumed(unpacker, recv_len); return recv_len; }