Package dpkt :: Module rtp
[hide private]
[frames] | no frames]

Source Code for Module dpkt.rtp

 1  # $Id$ 
 2   
 3  """Real-Time Transport Protocol""" 
 4   
 5  from dpkt import Packet 
 6   
 7  # version 1100 0000 0000 0000 ! 0xC000  14 
 8  # p       0010 0000 0000 0000 ! 0x2000  13 
 9  # x       0001 0000 0000 0000 ! 0x1000  12 
10  # cc      0000 1111 0000 0000 ! 0x0F00   8 
11  # m       0000 0000 1000 0000 ! 0x0080   7 
12  # pt      0000 0000 0111 1111 ! 0x007F   0 
13  # 
14   
15  _VERSION_MASK= 0xC000 
16  _P_MASK     = 0x2000 
17  _X_MASK     = 0x1000 
18  _CC_MASK    = 0x0F00 
19  _M_MASK     = 0x0080 
20  _PT_MASK    = 0x007F 
21  _VERSION_SHIFT=14 
22  _P_SHIFT    = 13 
23  _X_SHIFT    = 12 
24  _CC_SHIFT   = 8 
25  _M_SHIFT    = 7 
26  _PT_SHIFT   = 0 
27   
28  VERSION = 2 
29   
30 -class RTP(Packet):
31 __hdr__ = ( 32 ('_type', 'H', 0x8000), 33 ('seq', 'H', 0), 34 ('ts', 'I', 0), 35 ('ssrc', 'I', 0), 36 ) 37 csrc = '' 38
39 - def _get_version(self): return (self._type&_VERSION_MASK)>>_VERSION_SHIFT
40 - def _set_version(self, ver):
41 self._type = (ver << _VERSION_SHIFT) | (self._type & ~_VERSION_MASK)
42 - def _get_p(self): return (self._type & _P_MASK) >> _P_SHIFT
43 - def _set_p(self, p): self._type = (p << _P_SHIFT) | (self._type & ~_P_MASK)
44 - def _get_x(self): return (self._type & _X_MASK) >> _X_SHIFT
45 - def _set_x(self, x): self._type = (x << _X_SHIFT) | (self._type & ~_X_MASK)
46 - def _get_cc(self): return (self._type & _CC_MASK) >> _CC_SHIFT
47 - def _set_cc(self, cc): self._type = (cc<<_CC_SHIFT)|(self._type&~_CC_MASK)
48 - def _get_m(self): return (self._type & _M_MASK) >> _M_SHIFT
49 - def _set_m(self, m): self._type = (m << _M_SHIFT) | (self._type & ~_M_MASK)
50 - def _get_pt(self): return (self._type & _PT_MASK) >> _PT_SHIFT
51 - def _set_pt(self, m): self._type = (m << _PT_SHIFT)|(self._type&~_PT_MASK)
52 53 version = property(_get_version, _set_version) 54 p = property(_get_p, _set_p) 55 x = property(_get_x, _set_x) 56 cc = property(_get_cc, _set_cc) 57 m = property(_get_m, _set_m) 58 pt = property(_get_pt, _set_pt) 59
60 - def __len__(self):
61 return self.__hdr_len__ + len(self.csrc) + len(self.data)
62
63 - def __str__(self):
64 return self.pack_hdr() + self.csrc + str(self.data)
65
66 - def unpack(self, buf):
67 super(RTP, self).unpack(buf) 68 self.csrc = buf[self.__hdr_len__:self.__hdr_len__ + self.cc * 4] 69 self.data = buf[self.__hdr_len__ + self.cc * 4:]
70