diff --git a/daemon/call.c b/daemon/call.c index 1fa0ad4d0..a0f8e1d70 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -394,7 +394,7 @@ void kernelize(struct packet_stream *stream) { if (!stream->sfd) goto no_kernel; - ilog(LOG_INFO, "Kernelizing media stream"); + ilog(LOG_INFO, "Kernelizing media stream: %s:%d", smart_ntop_p_buf(&stream->endpoint.ip46), stream->endpoint.port); sink = packet_stream_sink(stream); if (!sink) { @@ -820,6 +820,9 @@ loop_ok: mutex_unlock(&stream->out_lock); if (tmp && PS_ISSET(stream, STRICT_SOURCE)) { + ilog(LOG_INFO, "Drop due to strict-source attribute; got endpoint: %s:%d, expected stream_endpoint: %s:%d", + smart_ntop_p_buf(&endpoint.ip46), endpoint.port, + smart_ntop_p_buf(&stream->endpoint.ip46), stream->endpoint.port); atomic64_inc(&stream->stats.errors); goto drop; } @@ -867,11 +870,32 @@ update_addr: kernel_check: - if (PS_ISSET(stream, NO_KERNEL_SUPPORT)) + if (PS_ISSET(stream, NO_KERNEL_SUPPORT)) { + __C_DBG("No kernel support found for stream: %s:%d", smart_ntop_p_buf(&stream->endpoint.ip46), stream->endpoint.port); goto forward; + } + + if (!PS_ISSET(stream, CONFIRMED)) { + __C_DBG("stream %s:%d not CONFIRMED", smart_ntop_p_buf(&stream->endpoint.ip46), stream->endpoint.port); + goto forward; + } + + if (!sink) { + __C_DBG("sink is NULL for stream %s:%d", smart_ntop_p_buf(&stream->endpoint.ip46), stream->endpoint.port); + goto forward; + } + + if (!PS_ISSET(sink, CONFIRMED)) { + __C_DBG("sink not CONFIRMED for stream %s:%d", smart_ntop_p_buf(&stream->endpoint.ip46), stream->endpoint.port); + goto forward; + } + + if (!PS_ISSET(sink, FILLED)) { + __C_DBG("sink not FILLED for stream %s:%d", smart_ntop_p_buf(&stream->endpoint.ip46), stream->endpoint.port); + goto forward; + } - if (PS_ISSET(stream, CONFIRMED) && sink && PS_ARESET2(sink, CONFIRMED, FILLED)) - kernelize(stream); + kernelize(stream); forward: if (sink) @@ -907,6 +931,7 @@ forward: mh.msg_iovlen = 1; ret = sendmsg(sink->sfd->fd.fd, &mh, 0); + __C_DBG("Forward to sink endpoint: %s:%d", smart_ntop_p_buf(&sink->endpoint.ip46), sink->endpoint.port); if (ret == -1) { ret = 0; /* temp for address family mismatches */ @@ -1610,15 +1635,15 @@ static int get_port(struct udp_fd *r, u_int16_t p, const struct call *c) { __C_DBG("attempting to open port %u", p); if (bit_array_set(m->ports_used, p)) { - __C_DBG("port in use"); + __C_DBG("port %d in use", port); return -1; } - __C_DBG("port locked"); + __C_DBG("port %d locked", port); ret = get_port6(r, p, c); if (ret) { - __C_DBG("couldn't open port"); + __C_DBG("couldn't open port %d", port); bit_array_clear(m->ports_used, p); return ret; } @@ -1930,6 +1955,7 @@ static void __fill_stream(struct packet_stream *ps, const struct endpoint *epp, return; ps->endpoint = ep; + __C_DBG("filling stream endpoint: %s:%d", smart_ntop_p_buf(&ps->endpoint.ip46), ps->endpoint.port); if (PS_ISSET(ps, FILLED)) { /* we reset crypto params whenever the endpoint changes */