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

Source Code for Module dpkt.sccp

  1  # $Id$ 
  2   
  3  """Cisco Skinny Client Control Protocol.""" 
  4   
  5  import dpkt 
  6   
  7  KEYPAD_BUTTON           = 0x00000003 
  8  OFF_HOOK                = 0x00000006 
  9  ON_HOOK                 = 0x00000007 
 10  OPEN_RECEIVE_CHANNEL_ACK= 0x00000022 
 11  START_TONE              = 0x00000082 
 12  STOP_TONE               = 0x00000083 
 13  SET_LAMP                = 0x00000086 
 14  SET_SPEAKER_MODE        = 0x00000088 
 15  START_MEDIA_TRANSMIT    = 0x0000008A 
 16  STOP_MEDIA_TRANSMIT     = 0x0000008B 
 17  CALL_INFO               = 0x0000008F 
 18  DEFINE_TIME_DATE        = 0x00000094 
 19  DISPLAY_TEXT            = 0x00000099 
 20  OPEN_RECEIVE_CHANNEL    = 0x00000105 
 21  CLOSE_RECEIVE_CHANNEL   = 0x00000106 
 22  SELECT_SOFTKEYS         = 0x00000110 
 23  CALL_STATE              = 0x00000111 
 24  DISPLAY_PROMPT_STATUS   = 0x00000112 
 25  CLEAR_PROMPT_STATUS     = 0x00000113 
 26  ACTIVATE_CALL_PLANE     = 0x00000116 
 27   
28 -class ActivateCallPlane(dpkt.Packet):
29 __byte_order__ = '<' 30 __hdr__ = ( 31 ('line_instance', 'I', 0), 32 )
33
34 -class CallInfo(dpkt.Packet):
35 __byte_order__ = '<' 36 __hdr__ = ( 37 ('calling_party_name', '40s', ''), 38 ('calling_party', '24s', ''), 39 ('called_party_name', '40s', ''), 40 ('called_party', '24s', ''), 41 ('line_instance', 'I', 0), 42 ('call_id', 'I', 0), 43 ('call_type', 'I', 0), 44 ('orig_called_party_name', '40s', ''), 45 ('orig_called_party', '24s', '') 46 )
47
48 -class CallState(dpkt.Packet):
49 __byte_order__ = '<' 50 __hdr__ = ( 51 ('call_state', 'I', 12), # 12: Proceed, 15: Connected 52 ('line_instance', 'I', 1), 53 ('call_id', 'I', 0) 54 )
55
56 -class ClearPromptStatus(dpkt.Packet):
57 __byte_order__ = '<' 58 __hdr__ = ( 59 ('line_instance', 'I', 1), 60 ('call_id', 'I', 0) 61 )
62
63 -class CloseReceiveChannel(dpkt.Packet):
64 __byte_order__ = '<' 65 __hdr__ = ( 66 ('conference_id', 'I', 0), 67 ('passthruparty_id', 'I', 0), 68 )
69
70 -class DisplayPromptStatus(dpkt.Packet):
71 __byte_order__ = '<' 72 __hdr__ = ( 73 ('msg_timeout', 'I', 0), 74 ('display_msg', '32s', ''), 75 ('line_instance', 'I', 1), 76 ('call_id', 'I', 0) 77 )
78
79 -class DisplayText(dpkt.Packet):
80 __byte_order__ = '<' 81 __hdr__ = ( 82 ('display_msg', '36s', ''), 83 )
84
85 -class KeypadButton(dpkt.Packet):
86 __byte_order__ = '<' 87 __hdr__ = ( 88 ('button', 'I', 0), 89 )
90
91 -class OpenReceiveChannel(dpkt.Packet):
92 __byte_order__ = '<' 93 __hdr__ = ( 94 ('conference_id', 'I', 0), 95 ('passthruparty_id', 'I', 0), 96 ('ms_packet', 'I', 0), 97 ('payload_capability', 'I', 4), # 4: G.711 u-law 64k 98 ('echo_cancel_type', 'I', 4), 99 ('g723_bitrate', 'I', 0), 100 )
101
102 -class OpenReceiveChannelAck(dpkt.Packet):
103 __byte_order__ = '<' 104 __hdr__ = ( 105 ('channel_status', 'I', 0), 106 ('ip', '4s', ''), 107 ('port', 'I', 0), 108 ('passthruparty_id', 'I', 0), 109 )
110
111 -class SelectStartKeys(dpkt.Packet):
112 __byte_order__ = '<' 113 __hdr__ = ( 114 ('line_id', 'I', 1), 115 ('call_id', 'I', 0), 116 ('softkey_set', 'I', 8), 117 ('softkey_map', 'I', 0xffffffffL) 118 )
119
120 -class SetLamp(dpkt.Packet):
121 __byte_order__ = '<' 122 __hdr__ = ( 123 ('stimulus', 'I', 9), # 9: Line 124 ('stimulus_instance', 'I', 1), 125 ('lamp_mode', 'I', 1), 126 )
127
128 -class SetSpeakerMode(dpkt.Packet):
129 __byte_order__ = '<' 130 __hdr__ = ( 131 ('speaker', 'I', 2), # 2: SpeakerOff 132 )
133
134 -class StartMediaTransmission(dpkt.Packet):
135 __byte_order__ = '<' 136 __hdr__ = ( 137 ('conference_id', 'I', 0), 138 ('passthruparty_id', 'I', 0), 139 ('remote_ip', '4s', ''), 140 ('remote_port', 'I', 0), 141 ('ms_packet', 'I', 0), 142 ('payload_capability', 'I', 4), # 4: G.711 u-law 64k 143 ('precedence', 'I', 0), 144 ('silence_suppression', 'I', 0), 145 ('max_frames_per_pkt', 'I', 1), 146 ('g723_bitrate', 'I', 0), 147 )
148
149 -class StartTone(dpkt.Packet):
150 __byte_order__ = '<' 151 __hdr__ = ( 152 ('tone', 'I', 0x24), # 0x24: AlertingTone 153 )
154
155 -class StopMediaTransmission(dpkt.Packet):
156 __byte_order__ = '<' 157 __hdr__ = ( 158 ('conference_id', 'I', 0), 159 ('passthruparty_id', 'I', 0), 160 )
161
162 -class SCCP(dpkt.Packet):
163 __byte_order__ = '<' 164 __hdr__ = ( 165 ('len', 'I', 0), 166 ('rsvd', 'I', 0), 167 ('msgid', 'I', 0), 168 ('msg', '0s', ''), 169 ) 170 _msgsw = { 171 KEYPAD_BUTTON:KeypadButton, 172 OPEN_RECEIVE_CHANNEL_ACK:OpenReceiveChannelAck, 173 START_TONE:StartTone, 174 SET_LAMP:SetLamp, 175 START_MEDIA_TRANSMIT:StartMediaTransmission, 176 STOP_MEDIA_TRANSMIT:StopMediaTransmission, 177 CALL_INFO:CallInfo, 178 DISPLAY_TEXT:DisplayText, 179 OPEN_RECEIVE_CHANNEL:OpenReceiveChannel, 180 CLOSE_RECEIVE_CHANNEL:CloseReceiveChannel, 181 CALL_STATE:CallState, 182 DISPLAY_PROMPT_STATUS:DisplayPromptStatus, 183 CLEAR_PROMPT_STATUS:ClearPromptStatus, 184 ACTIVATE_CALL_PLANE:ActivateCallPlane, 185 }
186 - def unpack(self, buf):
187 dpkt.Packet.unpack(self, buf) 188 n = self.len - 4 189 if n > len(self.data): 190 raise dpkt.NeedData('not enough data') 191 self.msg, self.data = self.data[:n], self.data[n:] 192 try: 193 p = self._msgsw[self.msgid](self.msg) 194 setattr(self, p.__class__.__name__.lower(), p) 195 except (KeyError, dpkt.UnpackError): 196 pass
197