scapy icon indicating copy to clipboard operation
scapy copied to clipboard

RTCP improvements

Open oborichkin opened this issue 3 years ago • 1 comments

Hey there! I'm improving #3460 with correct dissection of stacked packets and new RTCP types.

oborichkin avatar Apr 12 '22 16:04 oborichkin

I encountered an issue with BitEnumField(ps_feedback_message_type) being always set to 0. Here is an example:

from scapy.all import raw
from scapy.contrib.rtcp import RTCP
#      ps_feedback_message_type
#           (equals 1)
#              |
#              v
raw_pli = b"\x81\xce\x00\x02\x14\x03\x00\x02\x1a\x68\x98\xf9"
pli = RTCP(raw_pli)
pli.show()
print(raw(pli))

my_pli = RTCP(
    version=2,
    padding=0,
    ps_feedback_message_type=0,
    packet_type=206,
    sender_ssrc=335740930,
    media_source_ssrc= 443062521
)
my_pli.show()
print(raw(my_pli))

assert raw(pli) == raw(my_pli)

Which prints out:

###[ RTCP ]### 
  version   = 2
  padding   = 0
  ps_feedback_message_type= 0
  packet_type= Payload-specific FB message
  length    = 2
  sender_ssrc= 335740930
  media_source_ssrc= 443062521

b'\x81\xce\x00\x02\x14\x03\x00\x02\x1ah\x98\xf9'
###[ RTCP ]### 
  version   = 2
  padding   = 0
  ps_feedback_message_type= 0
  packet_type= Payload-specific FB message
  length    = None
  sender_ssrc= 335740930
  media_source_ssrc= 443062521

b'\x80\xce\x00\x02\x14\x03\x00\x02\x1ah\x98\xf9'
Traceback (most recent call last):
  File "/home/pavel/work/src/scapy/test.py", line 23, in <module>
    assert raw(pli) == raw(my_pli)
AssertionError

First bytes are different, because ps_feedback_message_type is actually equals to 1, but it's 0 in `pli. What am I doing wrong?

oborichkin avatar Apr 12 '22 16:04 oborichkin