Index: channels/chan_iax2.c =================================================================== --- channels/chan_iax2.c (revision 80234) +++ channels/chan_iax2.c (working copy) @@ -4880,6 +4880,75 @@ return RESULT_SUCCESS; } +static void log_jitterstats(unsigned short callno) +{ + int localjitter, localdelay, locallost, locallosspct, localdropped, localooo, localpackets; + jb_info jbinfo; + +#ifndef NEWJB + /* Don't bother for the old jb (SLD says post 1.4 its time to remove that!) */ + return; +#endif + + ast_mutex_lock(&iaxsl[callno]); + if (iaxs[callno] && iaxs[callno]->owner && iaxs[callno]->owner->name) { + if(ast_test_flag(iaxs[callno], IAX_USEJITTERBUF)) { + jb_getinfo(iaxs[callno]->jb, &jbinfo); + localjitter = jbinfo.jitter; + localdelay = jbinfo.current - jbinfo.min; + locallost = jbinfo.frames_lost; + locallosspct = jbinfo.losspct/1000; + localdropped = jbinfo.frames_dropped; + localooo = jbinfo.frames_ooo; + localpackets = jbinfo.frames_in; + } else { + localjitter = -1; + localdelay = 0; + locallost = -1; + locallosspct = -1; + localdropped = 0; + localooo = -1; + localpackets = -1; + } + ast_log(LOG_VERBOSE, "JB STATS:%s ping=%d ljitterms=%d ljbdelayms=%d ltotlost=%d lrecentlosspct=%d ldropped=%d looo=%d lrecvd=%d rjitterms=%d rjbdelayms=%d rtotlost=%d rrecentlosspct=%d rdropped=%d rooo=%d rrecvd=%d\n", + iaxs[callno]->owner ? iaxs[callno]->owner->name : "(None)", + iaxs[callno]->pingtime, + localjitter, + localdelay, + locallost, + locallosspct, + localdropped, + localooo, + localpackets, + iaxs[callno]->remote_rr.jitter, + iaxs[callno]->remote_rr.delay, + iaxs[callno]->remote_rr.losscnt, + iaxs[callno]->remote_rr.losspct/1000, + iaxs[callno]->remote_rr.dropped, + iaxs[callno]->remote_rr.ooo, + iaxs[callno]->remote_rr.packets + manager_event(EVENT_FLAG_REPORTING, "JB Stats", "Owner: %s\r\nPing: %d\r\nLocalJitter: %d\r\nLocalJBDelay: %d\t\nLocalTotalLost: %d LocalLossPercent: %d\r\nLocalDropped: %d\r\nLocalooo: %d\r\nLocalReceived: %d\r\nRemoteJitter: %d\r\nRemoteJBDelay: %d\r\nRemoteTotalLost: %d\r\nRemoteLossPercent: %d\r\nRemoteDropped: %d\r\nRemoteooo: %d\r\nRemoteReceived: %d\r\n", + iaxs[callno]->owner ? iaxs[callno]->owner->name : "(None)", + iaxs[callno]->pingtime, + localjitter, + localdelay, + locallost, + locallosspct, + localdropped, + localooo, + localpackets, + iaxs[callno]->remote_rr.jitter, + iaxs[callno]->remote_rr.delay, + iaxs[callno]->remote_rr.losscnt, + iaxs[callno]->remote_rr.losspct/1000, + iaxs[callno]->remote_rr.dropped, + iaxs[callno]->remote_rr.ooo, + iaxs[callno]->remote_rr.packets + ); + } + ast_mutex_unlock(&iaxsl[callno]); +} + static int iax2_do_debug(int fd, int argc, char *argv[]) { if (argc < 2 || argc > 3) @@ -7950,6 +8019,9 @@ /* save RR info */ save_rr(fr, &ies); + /* Good time to write jb stats for this call */ + log_jitterstats(fr->callno); + if (iaxs[fr->callno]->peerpoke) { peer = iaxs[fr->callno]->peerpoke; if ((peer->lastms < 0) || (peer->historicms > peer->maxms)) {