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

Source Code for Module dpkt.sccp

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