TT#14008 remember last used local socket for reporting purposes

Change-Id: I4d52df89c58bb1544dab5a6c5a87aec7975607aa
pull/1439/head
Richard Fuchs 3 years ago
parent c42af688d4
commit 3c1f4b1f1e

@ -3384,12 +3384,13 @@ void call_destroy(struct call *c) {
continue;
char *addr = sockaddr_print_buf(&ps->endpoint.address);
char *local_addr = ps->selected_sfd ? sockaddr_print_buf(&ps->selected_sfd->socket.local.address) : "0.0.0.0";
endpoint_t *local_endpoint = packet_stream_local_addr(ps);
char *local_addr = sockaddr_print_buf(&local_endpoint->address);
ilog(LOG_INFO, "--------- Port %15s:%-5u <> %s%15s:%-5u%s%s, SSRC %s%" PRIx32 "%s, "
""UINT64F" p, "UINT64F" b, "UINT64F" e, "UINT64F" ts",
local_addr,
(unsigned int) (ps->selected_sfd ? ps->selected_sfd->socket.local.port : 0),
(unsigned int) local_endpoint->port,
FMT_M(addr, ps->endpoint.port),
(!PS_ISSET(ps, RTP) && PS_ISSET(ps, RTCP)) ? " (RTCP)" : "",
FMT_M(ps->ssrc_in[0] ? ps->ssrc_in[0]->parent->h.ssrc : 0),
@ -3850,6 +3851,8 @@ static void __monologue_destroy(struct call_monologue *monologue, bool recurse)
struct call_media *m = l->data;
for (GList *k = m->streams.head; k; k = k->next) {
struct packet_stream *ps = k->data;
if (ps->selected_sfd && ps->selected_sfd->socket.local.port)
ps->last_local_endpoint = ps->selected_sfd->socket.local;
ps->selected_sfd = NULL;
struct stream_fd *sfd;

@ -689,13 +689,13 @@ static void cli_list_tag_info(struct cli_writer *cw, struct call_monologue *ml)
if (PS_ISSET(ps, FALLBACK_RTCP))
continue;
local_addr = ps->selected_sfd ? sockaddr_print_buf(&ps->selected_sfd->socket.local.address)
: "0.0.0.0";
endpoint_t *local_endpoint = packet_stream_local_addr(ps);
local_addr = sockaddr_print_buf(&local_endpoint->address);
cw->cw_printf(cw, "-------- Port %15s:%-5u <> %15s:%-5u%s, SSRC %" PRIx32 ", "
"" UINT64F " p, " UINT64F " b, " UINT64F " e, " UINT64F " ts",
local_addr,
(unsigned int) (ps->selected_sfd ? ps->selected_sfd->socket.local.port : 0),
(unsigned int) local_endpoint->port,
sockaddr_print_buf(&ps->endpoint.address),
ps->endpoint.port,
(!PS_ISSET(ps, RTP) && PS_ISSET(ps, RTCP)) ? " (RTCP)" : "",

@ -323,6 +323,7 @@ struct packet_stream {
GQueue sfds; /* LOCK: call->master_lock */
struct stream_fd * selected_sfd;
endpoint_t last_local_endpoint;
struct dtls_connection ice_dtls; /* LOCK: in_lock */
GQueue rtp_sinks; // LOCK: call->master_lock, in_lock for streamhandler
GQueue rtcp_sinks; // LOCK: call->master_lock, in_lock for streamhandler
@ -747,5 +748,21 @@ INLINE void __call_unkernelize(struct call *call) {
__monologue_unkernelize(ml);
}
}
INLINE endpoint_t *packet_stream_local_addr(struct packet_stream *ps) {
if (ps->selected_sfd)
return &ps->selected_sfd->socket.local;
if (ps->last_local_endpoint.port)
return &ps->last_local_endpoint;
static endpoint_t dummy = {
.address = {
.u.ipv4.s_addr = 0,
},
.port = 0,
};
// one-time init
if (!dummy.address.family)
dummy.address.family = get_socket_family_enum(SF_IP4);
return &dummy;
}
#endif

Loading…
Cancel
Save