Summary:ASTERISK-08931: marker bit lost in bridge_p2p_rtp_write
Reporter:edgreenberg (edgreenberg)Labels:
Date Opened:2007-03-03 22:36:07.000-0600Date Closed:2011-06-07 14:07:54
Versions:Frequency of
Environment:Attachments:( 0) rtp_marker_bit.patch
Description:When this test is not true:
       if (!ast_test_flag(rtp, FLAG_P2P_SENT_MARK)) {
               mark = 1;
               ast_set_flag(rtp, FLAG_P2P_SENT_MARK);
the marker bit is lost.


The marker bit is extracted from  rtrpheader[0] using
       mark = seqno & (1 << 23);
which means it's either 0 if false or 0x800000 if true.

Later, this value gets shifted left 23 bits (out of the 32 bit word.

Cure is to replace
       mark = seqno & (1 << 23);
       mark = (seqno & 0x800000) >> 23;
per the attached patch.

Note that padding and ext would suffer from these as well, but they are not used within the function.
Comments:By: Joshua C. Colp (jcolp) 2007-03-04 21:24:06.000-0600

Fixed in 1.4 as of revision 57768 and trunk as of revision 57769. Thanks!

By: edgreenberg (edgreenberg) 2008-01-09 13:37:41.000-0600

I had occasion to work in rtp.c again, and noted that the patch that I submitted is not present in trunk. Not in 1.4.17 either.

I do not understand.

By: Joshua C. Colp (jcolp) 2008-01-09 14:16:24.000-0600

The way packets were handled was changed almost completely so while your patch is no longer there, the issue should not be present.