1## This file is part of Scapy 2## See http://www.secdev.org/projects/scapy for more informations 3## Copyright (C) Philippe Biondi <phil@secdev.org> 4## This program is published under a GPLv2 license 5 6""" 7RTP (Real-time Transport Protocol). 8""" 9 10from scapy.packet import * 11from scapy.fields import * 12 13_rtp_payload_types = { 14 # http://www.iana.org/assignments/rtp-parameters 15 0: 'G.711 PCMU', 3: 'GSM', 16 4: 'G723', 5: 'DVI4', 17 6: 'DVI4', 7: 'LPC', 18 8: 'PCMA', 9: 'G722', 19 10: 'L16', 11: 'L16', 20 12: 'QCELP', 13: 'CN', 21 14: 'MPA', 15: 'G728', 22 16: 'DVI4', 17: 'DVI4', 23 18: 'G729', 25: 'CelB', 24 26: 'JPEG', 28: 'nv', 25 31: 'H261', 32: 'MPV', 26 33: 'MP2T', 34: 'H263' } 27 28 29class RTPExtension(Packet): 30 name = "RTP extension" 31 fields_desc = [ ShortField("header_id", 0), 32 FieldLenField("header_len", None, count_of="header", fmt="H"), 33 FieldListField('header', [], IntField("hdr", 0), count_from=lambda pkt: pkt.header_len) ] 34 35 36class RTP(Packet): 37 name="RTP" 38 fields_desc = [ BitField('version', 2, 2), 39 BitField('padding', 0, 1), 40 BitField('extension', 0, 1), 41 BitFieldLenField('numsync', None, 4, count_of='sync'), 42 BitField('marker', 0, 1), 43 BitEnumField('payload_type', 0, 7, _rtp_payload_types), 44 ShortField('sequence', 0), 45 IntField('timestamp', 0), 46 IntField('sourcesync', 0), 47 FieldListField('sync', [], IntField("id",0), count_from=lambda pkt:pkt.numsync) ] 48 49bind_layers(RTP, RTPExtension, extension=1) 50