Index: channels/chan_iax2.c =================================================================== --- channels/chan_iax2.c (revision 48974) +++ channels/chan_iax2.c (working copy) @@ -4516,6 +4516,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) @@ -7147,6 +7216,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)) { Index: include/asterisk/manager.h =================================================================== --- include/asterisk/manager.h (revision 48974) +++ include/asterisk/manager.h (working copy) @@ -55,6 +55,7 @@ #define EVENT_FLAG_AGENT (1 << 5) /* Ability to read/set agent info */ #define EVENT_FLAG_USER (1 << 6) /* Ability to read/set user info */ #define EVENT_FLAG_CONFIG (1 << 7) /* Ability to modify configurations */ +#define EVENT_FLAG_REPORTING (1 << 8) /* Reporting events such as rtcp sent */ /* Export manager structures */ #define AST_MAX_MANHEADERS 80 Index: main/manager.c =================================================================== --- main/manager.c (revision 48974) +++ main/manager.c (working copy) @@ -291,6 +291,7 @@ { EVENT_FLAG_AGENT, "agent" }, { EVENT_FLAG_USER, "user" }, { EVENT_FLAG_CONFIG, "config" }, + { EVENT_FLAG_REPORTING, "reporting" }, { -1, "all" }, { 0, "none" }, };