diff --git a/daemon/cli.c b/daemon/cli.c index dab17ea53..5083a3c04 100644 --- a/daemon/cli.c +++ b/daemon/cli.c @@ -590,109 +590,116 @@ static void cli_incoming_list_offertimeout(str *instr, struct streambuf *replybu } static void cli_incoming_list_callid(str *instr, struct streambuf *replybuffer) { - struct call* c=0; - struct call_monologue *ml; - struct call_media *md; - struct packet_stream *ps; - GList *l; - GList *k, *o; - struct timeval tim_result_duration; - struct timeval now; - char * local_addr; - - if (instr->len == 0) { - streambuf_printf(replybuffer, "%s\n", "More parameters required."); - return; - } + struct call *c = 0; + struct call_monologue *ml; + struct call_media *md; + struct packet_stream *ps; + GList *l; + GList *k, *o; + struct timeval tim_result_duration; + struct timeval now; + char *local_addr; - c = call_get(instr); + if (instr->len == 0) { + streambuf_printf(replybuffer, "%s\n", "More parameters required."); + return; + } - if (!c) { - streambuf_printf(replybuffer, "\nCall Id not found (%s).\n\n",instr->s); - return; - } + c = call_get(instr); - streambuf_printf(replybuffer, "\ncallid: %60s | deletionmark:%4s | created:%12i | proxy:%s | tos:%u | last_signal:%llu | redis_keyspace:%i | foreign:%s\n\n", - c->callid.s , c->ml_deleted?"yes":"no", (int)c->created.tv_sec, c->created_from, (unsigned int)c->tos, (unsigned long long)c->last_signal, c->redis_hosted_db, IS_FOREIGN_CALL(c)?"yes":"no"); + if (!c) { + streambuf_printf(replybuffer, "\nCall Id not found (%s).\n\n", instr->s); + return; + } - for (l = c->monologues.head; l; l = l->next) { - ml = l->data; - if (!ml->terminated.tv_sec) { - gettimeofday(&now, NULL); - } else { - now = ml->terminated; - } - timeval_subtract(&tim_result_duration,&now,&ml->started); - streambuf_printf(replybuffer, "--- Tag '"STR_FORMAT"' type: %s, callduration " - "%ld.%06ld , in dialogue with '"STR_FORMAT"'\n", - STR_FMT(&ml->tag), get_tag_type_text(ml->tagtype), - tim_result_duration.tv_sec, - tim_result_duration.tv_usec, - ml->active_dialogue ? ml->active_dialogue->tag.len : 6, - ml->active_dialogue ? ml->active_dialogue->tag.s : "(none)"); + streambuf_printf(replybuffer, + "\ncallid: %60s | deletionmark:%4s | created:%12i | proxy:%s | tos:%u | last_signal:%llu | " + "redis_keyspace:%i | foreign:%s\n\n", + c->callid.s, c->ml_deleted ? "yes" : "no", (int) c->created.tv_sec, c->created_from, + (unsigned int) c->tos, (unsigned long long) c->last_signal, c->redis_hosted_db, + IS_FOREIGN_CALL(c) ? "yes" : "no"); + + for (l = c->monologues.head; l; l = l->next) { + ml = l->data; + if (!ml->terminated.tv_sec) + gettimeofday(&now, NULL); + else + now = ml->terminated; - for (k = ml->medias.head; k; k = k->next) { - md = k->data; + timeval_subtract(&tim_result_duration, &now, &ml->started); + streambuf_printf(replybuffer, "--- Tag '" STR_FORMAT "' type: %s, callduration " + "%ld.%06ld , in dialogue with '" STR_FORMAT "'\n", + STR_FMT(&ml->tag), get_tag_type_text(ml->tagtype), + tim_result_duration.tv_sec, + tim_result_duration.tv_usec, + ml->active_dialogue ? ml->active_dialogue->tag.len : 6, + ml->active_dialogue ? ml->active_dialogue->tag.s : "(none)"); - const struct rtp_payload_type *rtp_pt = __rtp_stats_codec(md); + for (k = ml->medias.head; k; k = k->next) { + md = k->data; - for (o = md->streams.head; o; o = o->next) { - ps = o->data; + const struct rtp_payload_type *rtp_pt = __rtp_stats_codec(md); - if (PS_ISSET(ps, FALLBACK_RTCP)) - continue; + for (o = md->streams.head; o; o = o->next) { + ps = o->data; + + 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"; - local_addr = ps->selected_sfd ? sockaddr_print_buf(&ps->selected_sfd->socket.local.address) : "0.0.0.0"; #if (RE_HAS_MEASUREDELAY) - if (!PS_ISSET(ps, RTP) && PS_ISSET(ps, RTCP)) { - streambuf_printf(replybuffer, "------ Media #%u, %15s:%-5hu <> %15s:%-5hu%s, " - ""UINT64F" p, "UINT64F" b, "UINT64F" e, "UINT64F" last_packet\n", - md->index, - local_addr, (unsigned int) (ps->sfd ? ps->sfd->fd.localport : 0), - sockaddr_print_buf(&ps->endpoint.ip46), ps->endpoint.port, - (!PS_ISSET(ps, RTP) && PS_ISSET(ps, RTCP)) ? " (RTCP)" : "", - atomic64_get(&ps->stats.packets), - atomic64_get(&ps->stats.bytes), - atomic64_get(&ps->stats.errors), - atomic64_get(&ps->last_packet)); - } else { - streambuf_printf(replybuffer, "------ Media #%u, %15s:%-5hu <> %15s:%-5hu%s, " - ""UINT64F" p, "UINT64F" b, "UINT64F" e, "UINT64F" last_packet, " STR_FORMAT ", %.9f delay_min, %.9f delay_avg, %.9f delay_max\n", - md->index, - local_addr, (unsigned int) (ps->sfd ? ps->sfd->fd.localport : 0), - sockaddr_print_buf(&ps->endpoint.ip46), ps->endpoint.port, - (!PS_ISSET(ps, RTP) && PS_ISSET(ps, RTCP)) ? " (RTCP)" : "", - atomic64_get(&ps->stats.packets), - atomic64_get(&ps->stats.bytes), - atomic64_get(&ps->stats.errors), - atomic64_get(&ps->last_packet), - rtp_pt ? (int) rtp_pt->encoding_with_params.len : (int) strlen("unknown codec"), - rtp_pt ? rtp_pt->encoding_with_params.s : "unknown codec", - (double) ps->stats.delay_min / 1000000, - (double) ps->stats.delay_avg / 1000000, - (double) ps->stats.delay_max / 1000000); - } + if (!PS_ISSET(ps, RTP) && PS_ISSET(ps, RTCP)) { + streambuf_printf(replybuffer, "------ Media #%u, %15s:%-5hu <> %15s:%-5hu%s, " + "" UINT64F " p, " UINT64F " b, " UINT64F " e, " UINT64F " last_packet\n", + md->index, + local_addr, (unsigned int) (ps->sfd ? ps->sfd->fd.localport : 0), + sockaddr_print_buf(&ps->endpoint.ip46), ps->endpoint.port, + (!PS_ISSET(ps, RTP) && PS_ISSET(ps, RTCP)) ? " (RTCP)" : "", + atomic64_get(&ps->stats.packets), + atomic64_get(&ps->stats.bytes), + atomic64_get(&ps->stats.errors), atomic64_get(&ps->last_packet)); + } + else { + streambuf_printf(replybuffer, "------ Media #%u, %15s:%-5hu <> %15s:%-5hu%s, " + "" UINT64F " p, " UINT64F " b, " UINT64F " e, " UINT64F " last_packet, " + STR_FORMAT ", %.9f delay_min, %.9f delay_avg, %.9f delay_max\n", + md->index, local_addr, + (unsigned int) (ps->sfd ? ps->sfd->fd.localport : 0), + sockaddr_print_buf(&ps->endpoint.ip46), ps->endpoint.port, + (!PS_ISSET(ps, RTP) + && PS_ISSET(ps, RTCP)) ? " (RTCP)" : "", + atomic64_get(&ps->stats.packets), atomic64_get(&ps->stats.bytes), + atomic64_get(&ps->stats.errors), atomic64_get(&ps->last_packet), + rtp_pt ? (int) rtp_pt->encoding_with_params. + len : (int) strlen("unknown codec"), + rtp_pt ? rtp_pt->encoding_with_params.s : "unknown codec", + (double) ps->stats.delay_min / 1000000, + (double) ps->stats.delay_avg / 1000000, + (double) ps->stats.delay_max / 1000000); + } #else - streambuf_printf(replybuffer, "------ Media #%u, %15s:%-5u <> %15s:%-5u%s, " - ""UINT64F" p, "UINT64F" b, "UINT64F" e, "UINT64F" last_packet, " STR_FORMAT "\n", - md->index, - local_addr, (unsigned int) (ps->selected_sfd ? ps->selected_sfd->socket.local.port : 0), - sockaddr_print_buf(&ps->endpoint.address), ps->endpoint.port, - (!PS_ISSET(ps, RTP) && PS_ISSET(ps, RTCP)) ? " (RTCP)" : "", - atomic64_get(&ps->stats.packets), - atomic64_get(&ps->stats.bytes), - atomic64_get(&ps->stats.errors), - atomic64_get(&ps->last_packet), - rtp_pt ? (int) rtp_pt->encoding_with_params.len : (int) strlen("unknown codec"), - rtp_pt ? rtp_pt->encoding_with_params.s : "unknown codec"); + streambuf_printf(replybuffer, "------ Media #%u, %15s:%-5u <> %15s:%-5u%s, " + "" UINT64F " p, " UINT64F " b, " UINT64F " e, " UINT64F " last_packet, " + STR_FORMAT "\n", md->index, local_addr, + (unsigned int) (ps->selected_sfd ? ps->selected_sfd->socket.local.port : 0), + sockaddr_print_buf(&ps->endpoint.address), ps->endpoint.port, (!PS_ISSET(ps, RTP) + && PS_ISSET(ps, + RTCP)) + ? " (RTCP)" : "", atomic64_get(&ps->stats.packets), + atomic64_get(&ps->stats.bytes), atomic64_get(&ps->stats.errors), + atomic64_get(&ps->last_packet), + rtp_pt ? (int) rtp_pt->encoding_with_params.len : (int) strlen("unknown codec"), + rtp_pt ? rtp_pt->encoding_with_params.s : "unknown codec"); #endif - } - } - } - streambuf_printf(replybuffer, "\n"); + } + } + } + streambuf_printf(replybuffer, "\n"); - rwlock_unlock_w(&c->master_lock); // because of call_get(..) - obj_put(c); + rwlock_unlock_w(&c->master_lock); // because of call_get(..) + obj_put(c); } static void cli_incoming_list_sessions(str *instr, struct streambuf *replybuffer) {