|
|
|
@ -106,55 +106,50 @@ void statistics_update_foreignown_inc(struct call* c) { |
|
|
|
} |
|
|
|
|
|
|
|
void statistics_update_oneway(struct call* c) { |
|
|
|
struct packet_stream *ps = NULL, *ps2 = NULL; |
|
|
|
struct call_monologue *ml; |
|
|
|
struct call_media *md; |
|
|
|
GList *k, *o; |
|
|
|
int found = 0; |
|
|
|
GList *l; |
|
|
|
|
|
|
|
// --- for statistics getting one way stream or no relay at all |
|
|
|
int total_nopacket_relayed_sess = 0; |
|
|
|
if (IS_OWN_CALL(c)) { |
|
|
|
// --- for statistics getting one way stream or no relay at all |
|
|
|
unsigned int total_nopacket_relayed_sess = 0; |
|
|
|
struct packet_stream *ps, *ps2; |
|
|
|
|
|
|
|
for (l = c->monologues.head; l; l = l->next) { |
|
|
|
ml = l->data; |
|
|
|
for (l = c->monologues.head; l; l = l->next) { |
|
|
|
ml = l->data; |
|
|
|
|
|
|
|
// --- go through partner ml and search the RTP |
|
|
|
for (k = ml->medias.head; k; k = k->next) { |
|
|
|
md = k->data; |
|
|
|
// --- go through partner ml and search the RTP |
|
|
|
for (k = ml->medias.head; k; k = k->next) { |
|
|
|
md = k->data; |
|
|
|
|
|
|
|
for (o = md->streams.head; o; o = o->next) { |
|
|
|
ps = o->data; |
|
|
|
if (PS_ISSET(ps, RTP)) { |
|
|
|
// --- only RTP is interesting |
|
|
|
found = 1; |
|
|
|
break; |
|
|
|
for (o = md->streams.head; o; o = o->next) { |
|
|
|
ps = o->data; |
|
|
|
if (PS_ISSET(ps, RTP)) { |
|
|
|
// --- only RTP is interesting |
|
|
|
goto found; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (found) { break; } |
|
|
|
} |
|
|
|
|
|
|
|
if (!found) |
|
|
|
ps = NULL; |
|
|
|
continue; |
|
|
|
|
|
|
|
if (ps) { |
|
|
|
found:; |
|
|
|
struct sink_handler *sh = g_queue_peek_head(&ps->rtp_sinks); |
|
|
|
ps2 = sh ? sh->sink : NULL; |
|
|
|
} |
|
|
|
if (!ps2) |
|
|
|
continue; |
|
|
|
|
|
|
|
if (ps && ps2 && atomic64_get(&ps2->stats_in.packets)==0) { |
|
|
|
if (atomic64_get(&ps->stats_in.packets)!=0 && IS_OWN_CALL(c)){ |
|
|
|
if (atomic64_get(&ps2->stats_in.packets)==0) { |
|
|
|
if (atomic64_get(&ps->stats_in.packets)!=0) |
|
|
|
RTPE_STATS_INC(oneway_stream_sess); |
|
|
|
} |
|
|
|
else { |
|
|
|
total_nopacket_relayed_sess++; |
|
|
|
else |
|
|
|
total_nopacket_relayed_sess++; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (IS_OWN_CALL(c)) |
|
|
|
RTPE_STATS_ADD(nopacket_relayed_sess, total_nopacket_relayed_sess / 2); |
|
|
|
} |
|
|
|
|
|
|
|
if (c->monologues.head) { |
|
|
|
ml = c->monologues.head->data; |
|
|
|
|