diff options
author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2014-10-06 21:01:26 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2014-10-09 17:22:33 +0200 |
commit | 05d481a42cb119c51773209528cc15d3d4584e79 (patch) | |
tree | 0235cde9bec83233e6f27b043d0b2287977471ea /openbsc/src/libmgcp | |
parent | a5a59c9a05982efdcf2a87337d9dc763beb5c3bd (diff) |
mgcp: Do not detect the initial package as a wrap around
The Annex A code has a probation period but we don't have it. When
starting with seq_no==0 do not assume that the sequence numbers
have wrapped. Do it by moving the entire checking code into the
else.
Diffstat (limited to 'openbsc/src/libmgcp')
-rw-r--r-- | openbsc/src/libmgcp/mgcp_network.c | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/openbsc/src/libmgcp/mgcp_network.c b/openbsc/src/libmgcp/mgcp_network.c index 888ec6eb7..9def94e41 100644 --- a/openbsc/src/libmgcp/mgcp_network.c +++ b/openbsc/src/libmgcp/mgcp_network.c @@ -336,7 +336,6 @@ void mgcp_rtp_annex_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta const uint16_t seq, const int32_t transit, const uint32_t ssrc) { - uint16_t udelta; int32_t d; /* initialize or re-initialize */ @@ -348,25 +347,27 @@ void mgcp_rtp_annex_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta state->stats_jitter = 0; state->stats_transit = transit; state->stats_cycles = 0; - } - - /* - * The below takes the shape of the validation of - * Appendix A. Check if there is something weird with - * the sequence number, otherwise check for a wrap - * around in the sequence number. - * It can't wrap during the initialization so let's - * skip it here. The Appendix A probably doesn't have - * this issue because of the probation. - */ - udelta = seq - state->stats_max_seq; - if (udelta < RTP_MAX_DROPOUT) { - if (seq < state->stats_max_seq) - state->stats_cycles += RTP_SEQ_MOD; - } else if (udelta <= RTP_SEQ_MOD - RTP_MAX_MISORDER) { - LOGP(DMGCP, LOGL_NOTICE, - "RTP seqno made a very large jump on 0x%x delta: %u\n", - ENDPOINT_NUMBER(endp), udelta); + } else { + uint16_t udelta; + + /* + * The below takes the shape of the validation of + * Appendix A. Check if there is something weird with + * the sequence number, otherwise check for a wrap + * around in the sequence number. + * It can't wrap during the initialization so let's + * skip it here. The Appendix A probably doesn't have + * this issue because of the probation. + */ + udelta = seq - state->stats_max_seq; + if (udelta < RTP_MAX_DROPOUT) { + if (seq < state->stats_max_seq) + state->stats_cycles += RTP_SEQ_MOD; + } else if (udelta <= RTP_SEQ_MOD - RTP_MAX_MISORDER) { + LOGP(DMGCP, LOGL_NOTICE, + "RTP seqno made a very large jump on 0x%x delta: %u\n", + ENDPOINT_NUMBER(endp), udelta); + } } /* |