Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-skinny.c
blob4aa74a90ef69ea3b474e75d9ad8e8d290fef597e
1 /* Do not modify this file. Changes will be overwritten */
2 /* Generated Automatically */
3 /* packet-skinny.c */
5 /* packet-skinny.c
6 * Dissector for the Skinny Client Control Protocol
7 * (The "D-Channel"-Protocol for Cisco Systems' IP-Phones)
9 * Author: Diederik de Groot <ddegroot@user.sf.net>, Copyright 2014
10 * Rewritten to support newer skinny protocolversions (V0-V22)
11 * Based on previous versions/contributions:
12 * - Joerg Mayer <jmayer@loplof.de>, Copyright 2001
13 * - Paul E. Erkkila (pee@erkkila.org) - fleshed out the decode
14 * skeleton to report values for most message/message fields.
15 * Much help from Guy Harris on figuring out the wireshark api.
16 * - packet-aim.c by Ralf Hoelzer <ralf@well.com>, Copyright 2000
17 * - Wireshark - Network traffic analyzer,
18 * By Gerald Combs <gerald@wireshark.org>, Copyright 1998
20 * SPDX-License-Identifier: GPL-2.0-or-later
24 * Generated automatically Using (from wireshark base directory):
25 * cog.py -D xmlfile=tools/SkinnyProtocolOptimized.xml -d -c -o epan/dissectors/packet-skinny.c epan/dissectors/packet-skinny.c.in
28 /* c-basic-offset: 2; tab-width: 8; indent-tabs-mode: nil
29 * vi: set shiftwidth=2 tabstop=8 expandtab:
30 * :indentSize=2:tabSize=8:noTabs=true:
34 #include "config.h"
36 #include <epan/packet.h>
37 #include <epan/prefs.h>
38 #include <epan/conversation.h>
39 #include <epan/wmem_scopes.h>
40 #include <epan/to_str.h>
41 #include <epan/tap.h>
42 #include <epan/ptvcursor.h>
43 #include <epan/tfs.h>
44 #include <wsutil/array.h>
45 #include "packet-rtp.h"
46 #include "packet-tcp.h"
47 #include "packet-tls.h"
48 #include "packet-skinny.h"
50 /* un-comment the following as well as this line in conversation.c, to enable debug printing */
51 /* #define DEBUG_CONVERSATION */
52 #include "conversation_debug.h"
54 void proto_register_skinny(void);
55 void proto_reg_handoff_skinny(void);
57 #define TCP_PORT_SKINNY 2000 /* Not IANA registered */
58 #define SSL_PORT_SKINNY 2443 /* IANA assigned to PowerClient Central Storage Facility */
60 #define BASIC_MSG_TYPE 0x00
61 #define V10_MSG_TYPE 0x0A
62 #define V11_MSG_TYPE 0x0B
63 #define V15_MSG_TYPE 0x0F
64 #define V16_MSG_TYPE 0x10
65 #define V17_MSG_TYPE 0x11
66 #define V18_MSG_TYPE 0x12
67 #define V19_MSG_TYPE 0x13
68 #define V20_MSG_TYPE 0x14
69 #define V21_MSG_TYPE 0x15
70 #define V22_MSG_TYPE 0x16
72 static const value_string header_version[] = {
73 { BASIC_MSG_TYPE, "Basic" },
74 { V10_MSG_TYPE, "V10" },
75 { V11_MSG_TYPE, "V11" },
76 { V15_MSG_TYPE, "V15" },
77 { V16_MSG_TYPE, "V16" },
78 { V17_MSG_TYPE, "V17" },
79 { V18_MSG_TYPE, "V18" },
80 { V19_MSG_TYPE, "V19" },
81 { V20_MSG_TYPE, "V20" },
82 { V21_MSG_TYPE, "V21" },
83 { V22_MSG_TYPE, "V22" },
84 { 0 , NULL }
87 /* Declare MessageId */
88 static const value_string message_id[] = {
89 { 0x0000, "KeepAliveReq" },
90 { 0x0001, "RegisterReq" },
91 { 0x0002, "IpPort" },
92 { 0x0003, "KeypadButton" },
93 { 0x0004, "EnblocCall" },
94 { 0x0005, "Stimulus" },
95 { 0x0006, "OffHook" },
96 { 0x0007, "OnHook" },
97 { 0x0008, "HookFlash" },
98 { 0x0009, "ForwardStatReq" },
99 { 0x000a, "SpeedDialStatReq" },
100 { 0x000b, "LineStatReq" },
101 { 0x000c, "ConfigStatReq" },
102 { 0x000d, "TimeDateReq" },
103 { 0x000e, "ButtonTemplateReq" },
104 { 0x000f, "VersionReq" },
105 { 0x0010, "CapabilitiesRes" },
106 { 0x0012, "ServerReq" },
107 { 0x0020, "Alarm" },
108 { 0x0021, "MulticastMediaReceptionAck" },
109 { 0x0022, "OpenReceiveChannelAck" },
110 { 0x0023, "ConnectionStatisticsRes" },
111 { 0x0024, "OffHookWithCallingPartyNumber" },
112 { 0x0025, "SoftKeySetReq" },
113 { 0x0026, "SoftKeyEvent" },
114 { 0x0027, "UnregisterReq" },
115 { 0x0028, "SoftKeyTemplateReq" },
116 { 0x0029, "RegisterTokenReq" },
117 { 0x002a, "MediaTransmissionFailure" },
118 { 0x002b, "HeadsetStatus" },
119 { 0x002c, "MediaResourceNotification" },
120 { 0x002d, "RegisterAvailableLines" },
121 { 0x002e, "DeviceToUserData" },
122 { 0x002f, "DeviceToUserDataResponse" },
123 { 0x0030, "UpdateCapabilities" },
124 { 0x0031, "OpenMultiMediaReceiveChannelAck" },
125 { 0x0032, "ClearConference" },
126 { 0x0033, "ServiceURLStatReq" },
127 { 0x0034, "FeatureStatReq" },
128 { 0x0035, "CreateConferenceRes" },
129 { 0x0036, "DeleteConferenceRes" },
130 { 0x0037, "ModifyConferenceRes" },
131 { 0x0038, "AddParticipantRes" },
132 { 0x0039, "AuditConferenceRes" },
133 { 0x0040, "AuditParticipantRes" },
134 { 0x0041, "DeviceToUserDataVersion1" },
135 { 0x0042, "DeviceToUserDataResponseVersion1" },
136 { 0x0043, "CapabilitiesV2Res" },
137 { 0x0044, "CapabilitiesV3Res" },
138 { 0x0045, "PortRes" },
139 { 0x0046, "QoSResvNotify" },
140 { 0x0047, "QoSErrorNotify" },
141 { 0x0048, "SubscriptionStatReq" },
142 { 0x0049, "MediaPathEvent" },
143 { 0x004a, "MediaPathCapability" },
144 { 0x004c, "MwiNotification" },
145 { 0x0081, "RegisterAck" },
146 { 0x0082, "StartTone" },
147 { 0x0083, "StopTone" },
148 { 0x0085, "SetRinger" },
149 { 0x0086, "SetLamp" },
150 { 0x0087, "SetHookFlashDetect" },
151 { 0x0088, "SetSpeakerMode" },
152 { 0x0089, "SetMicroMode" },
153 { 0x008a, "StartMediaTransmission" },
154 { 0x008b, "StopMediaTransmission" },
155 { 0x008f, "CallInfo" },
156 { 0x0090, "ForwardStatRes" },
157 { 0x0091, "SpeedDialStatRes" },
158 { 0x0092, "LineStatRes" },
159 { 0x0093, "ConfigStatRes" },
160 { 0x0094, "TimeDateRes" },
161 { 0x0095, "StartSessionTransmission" },
162 { 0x0096, "StopSessionTransmission" },
163 { 0x0097, "ButtonTemplateRes" },
164 { 0x0098, "VersionRes" },
165 { 0x0099, "DisplayText" },
166 { 0x009a, "ClearDisplay" },
167 { 0x009b, "CapabilitiesReq" },
168 { 0x009d, "RegisterReject" },
169 { 0x009e, "ServerRes" },
170 { 0x009f, "Reset" },
171 { 0x0100, "KeepAliveAck" },
172 { 0x0101, "StartMulticastMediaReception" },
173 { 0x0102, "StartMulticastMediaTransmission" },
174 { 0x0103, "StopMulticastMediaReception" },
175 { 0x0104, "StopMulticastMediaTransmission" },
176 { 0x0105, "OpenReceiveChannel" },
177 { 0x0106, "CloseReceiveChannel" },
178 { 0x0107, "ConnectionStatisticsReq" },
179 { 0x0108, "SoftKeyTemplateRes" },
180 { 0x0109, "SoftKeySetRes" },
181 { 0x0110, "SelectSoftKeys" },
182 { 0x0111, "CallState" },
183 { 0x0112, "DisplayPromptStatus" },
184 { 0x0113, "ClearPromptStatus" },
185 { 0x0114, "DisplayNotify" },
186 { 0x0115, "ClearNotify" },
187 { 0x0116, "ActivateCallPlane" },
188 { 0x0117, "DeactivateCallPlane" },
189 { 0x0118, "UnregisterAck" },
190 { 0x0119, "BackSpaceRes" },
191 { 0x011a, "RegisterTokenAck" },
192 { 0x011b, "RegisterTokenReject" },
193 { 0x011c, "StartMediaFailureDetection" },
194 { 0x011d, "DialedNumber" },
195 { 0x011e, "UserToDeviceData" },
196 { 0x011f, "FeatureStatRes" },
197 { 0x0120, "DisplayPriNotify" },
198 { 0x0121, "ClearPriNotify" },
199 { 0x0122, "StartAnnouncement" },
200 { 0x0123, "StopAnnouncement" },
201 { 0x0124, "AnnouncementFinish" },
202 { 0x0127, "NotifyDtmfTone" },
203 { 0x0128, "SendDtmfTone" },
204 { 0x0129, "SubscribeDtmfPayloadReq" },
205 { 0x012a, "SubscribeDtmfPayloadRes" },
206 { 0x012b, "SubscribeDtmfPayloadErr" },
207 { 0x012c, "UnSubscribeDtmfPayloadReq" },
208 { 0x012d, "UnSubscribeDtmfPayloadRes" },
209 { 0x012e, "UnSubscribeDtmfPayloadErr" },
210 { 0x012f, "ServiceURLStatRes" },
211 { 0x0130, "CallSelectStatRes" },
212 { 0x0131, "OpenMultiMediaReceiveChannel" },
213 { 0x0132, "StartMultiMediaTransmission" },
214 { 0x0133, "StopMultiMediaTransmission" },
215 { 0x0134, "MiscellaneousCommand" },
216 { 0x0135, "FlowControlCommand" },
217 { 0x0136, "CloseMultiMediaReceiveChannel" },
218 { 0x0137, "CreateConferenceReq" },
219 { 0x0138, "DeleteConferenceReq" },
220 { 0x0139, "ModifyConferenceReq" },
221 { 0x013a, "AddParticipantReq" },
222 { 0x013b, "DropParticipantReq" },
223 { 0x013c, "AuditConferenceReq" },
224 { 0x013d, "AuditParticipantReq" },
225 { 0x013e, "ChangeParticipantReq" },
226 { 0x013f, "UserToDeviceDataVersion1" },
227 { 0x0140, "VideoDisplayCommand" },
228 { 0x0141, "FlowControlNotify" },
229 { 0x0142, "ConfigStatV2Res" },
230 { 0x0143, "DisplayNotifyV2" },
231 { 0x0144, "DisplayPriNotifyV2" },
232 { 0x0145, "DisplayPromptStatusV2" },
233 { 0x0146, "FeatureStatV2Res" },
234 { 0x0147, "LineStatV2Res" },
235 { 0x0148, "ServiceURLStatV2Res" },
236 { 0x0149, "SpeedDialStatV2Res" },
237 { 0x014a, "CallInfoV2" },
238 { 0x014b, "PortReq" },
239 { 0x014c, "PortClose" },
240 { 0x014d, "QoSListen" },
241 { 0x014e, "QoSPath" },
242 { 0x014f, "QoSTeardown" },
243 { 0x0150, "UpdateDSCP" },
244 { 0x0151, "QoSModify" },
245 { 0x0152, "SubscriptionStatRes" },
246 { 0x0153, "Notification" },
247 { 0x0154, "StartMediaTransmissionAck" },
248 { 0x0155, "StartMultiMediaTransmissionAck" },
249 { 0x0156, "CallHistoryInfo" },
250 { 0x0157, "LocationInfo" },
251 { 0x0158, "MwiRes" },
252 { 0x0159, "AddOnDeviceCapabilities" },
253 { 0x015a, "EnhancedAlarm" },
254 { 0x015e, "CallCountReq" },
255 { 0x015f, "CallCountResp" },
256 { 0x0160, "RecordingStatus" },
257 { 0x8000, "SPCPRegisterTokenReq" },
258 { 0x8100, "SPCPRegisterTokenAck" },
259 { 0x8101, "SPCPRegisterTokenReject" },
260 {0 , NULL}
262 static value_string_ext message_id_ext = VALUE_STRING_EXT_INIT(message_id);
264 /* Declare Enums and Defines */
265 static const value_string DisplayLabels_36[] = {
266 { 0x00000, "Empty" },
267 { 0x00002, "Acct" },
268 { 0x00003, "Flash" },
269 { 0x00004, "Login" },
270 { 0x00005, "Device In Home Location" },
271 { 0x00006, "Device In Roaming Location" },
272 { 0x00007, "Enter Authorization Code" },
273 { 0x00008, "Enter Client Matter Code" },
274 { 0x00009, "Calls Available For Pickup" },
275 { 0x0000a, "Cm Fallback Service Operating" },
276 { 0x0000b, "Max Phones Exceeded" },
277 { 0x0000c, "Waiting To Rehome" },
278 { 0x0000d, "Please End Call" },
279 { 0x0000e, "Paging" },
280 { 0x0000f, "Select Line" },
281 { 0x00010, "Transfer Destination Is Busy" },
282 { 0x00011, "Select A Service" },
283 { 0x00012, "Local Services" },
284 { 0x00013, "Enter Search Criteria" },
285 { 0x00014, "Night Service" },
286 { 0x00015, "Night Service Active" },
287 { 0x00016, "Night Service Disabled" },
288 { 0x00017, "Login Successful" },
289 { 0x00018, "Wrong Pin" },
290 { 0x00019, "Please Enter Pin" },
291 { 0x0001a, "Of" },
292 { 0x0001b, "Records 1 To" },
293 { 0x0001c, "No Record Found" },
294 { 0x0001d, "Search Results" },
295 { 0x0001e, "Calls In Queue" },
296 { 0x0001f, "Join To Hunt Group" },
297 { 0x00020, "Ready" },
298 { 0x00021, "Notready" },
299 { 0x00022, "Call On Hold" },
300 { 0x00023, "Hold Reversion" },
301 { 0x00024, "Setup Failed" },
302 { 0x00025, "No Resources" },
303 { 0x00026, "Device Not Authorized" },
304 { 0x00027, "Monitoring" },
305 { 0x00028, "Recording Awaiting Call To Be Active" },
306 { 0x00029, "Recording Already In Progress" },
307 { 0x0002a, "Inactive Recording Session" },
308 { 0x0002b, "Mobility" },
309 { 0x0002c, "Whisper" },
310 { 0x0002d, "Forward All" },
311 { 0x0002e, "Malicious Call Id" },
312 { 0x0002f, "Group Pickup" },
313 { 0x00030, "Remove Last Participant" },
314 { 0x00031, "Other Pickup" },
315 { 0x00032, "Video" },
316 { 0x00033, "End Call" },
317 { 0x00034, "Conference List" },
318 { 0x00035, "Quality Reporting Tool" },
319 { 0x00036, "Hunt Group" },
320 { 0x00037, "Use Line Or Join To Complete" },
321 { 0x00038, "Do Not Disturb" },
322 { 0x00039, "Do Not Disturb Is Active" },
323 { 0x0003a, "Cfwdall Loop Detected" },
324 { 0x0003b, "Cfwdall Hops Exceeded" },
325 { 0x0003c, "Abbrdial" },
326 { 0x0003d, "Pickup Is Unavailable" },
327 { 0x0003e, "Conference Is Unavailable" },
328 { 0x0003f, "Meetme Is Unavailable" },
329 { 0x00040, "Cannot Retrieve Parked Call" },
330 { 0x00041, "Cannot Send Call To Mobile" },
331 { 0x00043, "Record" },
332 { 0x00044, "Cannot Move Conversation" },
333 { 0x00045, "Cw Off" },
334 { 0x00046, "Coaching" },
335 { 0x0004f, "Recording" },
336 { 0x00050, "Recording Failed" },
337 { 0x00051, "Connecting" },
338 { 0x00000, NULL }
340 static value_string_ext DisplayLabels_36_ext = VALUE_STRING_EXT_INIT(DisplayLabels_36);
342 static const value_string DisplayLabels_200[] = {
343 { 0x00001, "Redial" },
344 { 0x00002, "Newcall" },
345 { 0x00003, "Hold" },
346 { 0x00004, "Transfer" },
347 { 0x00005, "Cfwdall" },
348 { 0x00006, "Cfwdbusy" },
349 { 0x00007, "Cfwdnoanswer" },
350 { 0x00008, "Backspace" },
351 { 0x00009, "Endcall" },
352 { 0x0000a, "Resume" },
353 { 0x0000b, "Answer" },
354 { 0x0000c, "Info" },
355 { 0x0000d, "Confrn" },
356 { 0x0000e, "Park" },
357 { 0x0000f, "Join" },
358 { 0x00010, "Meetme" },
359 { 0x00011, "Pickup" },
360 { 0x00012, "Gpickup" },
361 { 0x00013, "Your Current Options" },
362 { 0x00014, "Off Hook" },
363 { 0x00015, "On Hook" },
364 { 0x00016, "Ring Out" },
365 { 0x00017, "From " },
366 { 0x00018, "Connected" },
367 { 0x00019, "Busy" },
368 { 0x0001a, "Line In Use" },
369 { 0x0001b, "Call Waiting" },
370 { 0x0001c, "Call Transfer" },
371 { 0x0001d, "Call Park" },
372 { 0x0001e, "Call Proceed" },
373 { 0x0001f, "In Use Remote" },
374 { 0x00020, "Enter Number" },
375 { 0x00021, "Call Park At" },
376 { 0x00022, "Primary Only" },
377 { 0x00023, "Temp Fail" },
378 { 0x00024, "You Have Voicemail" },
379 { 0x00025, "Forwarded To" },
380 { 0x00026, "Can Not Complete Conference" },
381 { 0x00027, "No Conference Bridge" },
382 { 0x00028, "Can Not Hold Primary Control" },
383 { 0x00029, "Invalid Conference Participant" },
384 { 0x0002a, "In Conference Already" },
385 { 0x0002b, "No Participant Info" },
386 { 0x0002c, "Exceed Maximum Parties" },
387 { 0x0002d, "Key Is Not Active" },
388 { 0x0002e, "Error No License" },
389 { 0x0002f, "Error Dbconfig" },
390 { 0x00030, "Error Database" },
391 { 0x00031, "Error Pass Limit" },
392 { 0x00032, "Error Unknown" },
393 { 0x00033, "Error Mismatch" },
394 { 0x00034, "Conference" },
395 { 0x00035, "Park Number" },
396 { 0x00036, "Private" },
397 { 0x00037, "Not Enough Bandwidth" },
398 { 0x00038, "Unknown Number" },
399 { 0x00039, "Rmlstc" },
400 { 0x0003a, "Voicemail" },
401 { 0x0003b, "Immdiv" },
402 { 0x0003c, "Intrcpt" },
403 { 0x0003d, "Setwtch" },
404 { 0x0003e, "Trnsfvm" },
405 { 0x0003f, "Dnd" },
406 { 0x00040, "Divall" },
407 { 0x00041, "Callback" },
408 { 0x00042, "Network Congestion Rerouting" },
409 { 0x00043, "Barge" },
410 { 0x00044, "Failed To Setup Barge" },
411 { 0x00045, "Another Barge Exists" },
412 { 0x00046, "Incompatible Device Type" },
413 { 0x00047, "No Park Number Available" },
414 { 0x00048, "Callpark Reversion" },
415 { 0x00049, "Service Is Not Active" },
416 { 0x0004a, "High Traffic Try Again Later" },
417 { 0x0004b, "Qrt" },
418 { 0x0004c, "Mcid" },
419 { 0x0004d, "Dirtrfr" },
420 { 0x0004e, "Select" },
421 { 0x0004f, "Conflist" },
422 { 0x00050, "Idivert" },
423 { 0x00051, "Cbarge" },
424 { 0x00052, "Can Not Complete Transfer" },
425 { 0x00053, "Can Not Join Calls" },
426 { 0x00054, "Mcid Successful" },
427 { 0x00055, "Number Not Configured" },
428 { 0x00056, "Security Error" },
429 { 0x00057, "Video Bandwidth Unavailable" },
430 { 0x00058, "Vidmode" },
431 { 0x00059, "Max Call Duration Timeout" },
432 { 0x0005a, "Max Hold Duration Timeout" },
433 { 0x0005b, "Opickup" },
434 { 0x0005c, "Hlog" },
435 { 0x0005d, "Logged Out Of Hunt Group" },
436 { 0x0005e, "Park Slot Unavailable" },
437 { 0x0005f, "No Call Available For Pickup" },
438 { 0x00061, "External Transfer Restricted" },
439 { 0x00062, "No Line Available For Pickup" },
440 { 0x00063, "Path Replacement In Progress" },
441 { 0x00064, "Unknown 2" },
442 { 0x00065, "Mac Address" },
443 { 0x00066, "Host Name" },
444 { 0x00067, "Domain Name" },
445 { 0x00068, "Ip Address" },
446 { 0x00069, "Subnet Mask" },
447 { 0x0006a, "Tftp Server 1" },
448 { 0x0006b, "Default Router 1" },
449 { 0x0006c, "Default Router 2" },
450 { 0x0006d, "Default Router 3" },
451 { 0x0006e, "Default Router 4" },
452 { 0x0006f, "Default Router 5" },
453 { 0x00070, "Dns Server 1" },
454 { 0x00071, "Dns Server 2" },
455 { 0x00072, "Dns Server 3" },
456 { 0x00073, "Dns Server 4" },
457 { 0x00074, "Dns Server 5" },
458 { 0x00075, "Operational Vlan Id" },
459 { 0x00076, "Admin Vlan Id" },
460 { 0x00077, "Call Manager 1" },
461 { 0x00078, "Call Manager 2" },
462 { 0x00079, "Call Manager 3" },
463 { 0x0007a, "Call Manager 4" },
464 { 0x0007b, "Call Manager 5" },
465 { 0x0007c, "Information Url" },
466 { 0x0007d, "Directories Url" },
467 { 0x0007e, "Messages Url" },
468 { 0x0007f, "Services Url" },
469 { 0x00000, NULL }
471 static value_string_ext DisplayLabels_200_ext = VALUE_STRING_EXT_INIT(DisplayLabels_200);
473 static const value_string DeviceType[] = {
474 { 0x00001, "Station30SPplus" },
475 { 0x00002, "Station12SPplus" },
476 { 0x00003, "Station12SP" },
477 { 0x00004, "Station12" },
478 { 0x00005, "Station30VIP" },
479 { 0x00006, "Cisco 7910" },
480 { 0x00007, "StationTelecasterMgr" },
481 { 0x00008, "Cisco 7940" },
482 { 0x00009, "Cisco 7935" },
483 { 0x0000a, "StationVGC" },
484 { 0x0000b, "VGCVirtualPhone" },
485 { 0x0000c, "StationATA186" },
486 { 0x0000d, "StationATA188" },
487 { 0x0000f, "EmccBase" },
488 { 0x00014, "Virtual30SPplus" },
489 { 0x00015, "StationPhoneApplication" },
490 { 0x0001e, "AnalogAccess" },
491 { 0x00028, "DigitalAccessTitan1" },
492 { 0x00029, "Digital Access T1" },
493 { 0x0002a, "DigitalAccessTitan2" },
494 { 0x0002b, "DigitalAccessLennon" },
495 { 0x0002f, "AnalogAccessElvis" },
496 { 0x00030, "VGCGateway" },
497 { 0x00032, "ConferenceBridge" },
498 { 0x00033, "ConferenceBridgeYoko" },
499 { 0x00034, "ConferenceBridgeDixieLand" },
500 { 0x00035, "ConferenceBridgeSummit" },
501 { 0x0003c, "H225" },
502 { 0x0003d, "H323Phone" },
503 { 0x0003e, "H323Gateway" },
504 { 0x00046, "MusicOnHold" },
505 { 0x00047, "Pilot" },
506 { 0x00048, "TapiPort" },
507 { 0x00049, "TapiRoutePoint" },
508 { 0x00050, "VoiceInBox" },
509 { 0x00051, "VoiceInboxAdmin" },
510 { 0x00052, "LineAnnunciator" },
511 { 0x00053, "SoftwareMtpDixieLand" },
512 { 0x00054, "CiscoMediaServer" },
513 { 0x00055, "ConferenceBridgeFlint" },
514 { 0x00056, "ConferenceBridgeHetroGen" },
515 { 0x00057, "ConferenceBridgeAudVid" },
516 { 0x00058, "ConferenceHVideoBridge" },
517 { 0x0005a, "RouteList" },
518 { 0x00064, "LoadSimulator" },
519 { 0x0006e, "MediaTerminationPoint" },
520 { 0x0006f, "MediaTerminationPointYoko" },
521 { 0x00070, "MediaTerminationPointDixieLand" },
522 { 0x00071, "MediaTerminationPointSummit" },
523 { 0x00073, "7941G" },
524 { 0x00077, "7971" },
525 { 0x00078, "MGCPStation" },
526 { 0x00079, "MGCPTrunk" },
527 { 0x0007a, "RASProxy" },
528 { 0x0007c, "Cisco 7914 AddOn" },
529 { 0x0007d, "Trunk" },
530 { 0x0007e, "Annunciator" },
531 { 0x0007f, "MonitorBridge" },
532 { 0x00080, "Recorder" },
533 { 0x00081, "MonitorBridgeYoko" },
534 { 0x00083, "SipTrunk" },
535 { 0x00084, "SipGateway" },
536 { 0x00085, "WsmTrunk" },
537 { 0x00086, "RemoteDestination" },
538 { 0x000e3, "Cisco 7915 AddOn" },
539 { 0x000e4, "Cisco 7915 AddOn 24" },
540 { 0x000e5, "Cisco 7916 AddOn" },
541 { 0x000e6, "Cisco 7916 AddOn 24" },
542 { 0x000fd, "GenericDevice" },
543 { 0x000fe, "UnknownMGCPGateway" },
544 { 0x000ff, "NotDefined" },
545 { 0x00113, "Nokia E Series" },
546 { 0x0012e, "Cisco 7985" },
547 { 0x00133, "7911" },
548 { 0x00134, "Cisco 7961 GE" },
549 { 0x00135, "7961G_GE" },
550 { 0x0014f, "MotorolaCN622" },
551 { 0x00150, "3rdPartySipBasic" },
552 { 0x0015c, "Cisco 7931" },
553 { 0x00166, "UnifiedCommunicator" },
554 { 0x0016d, "7921" },
555 { 0x00171, "7906" },
556 { 0x00176, "3rdPartySipAdv" },
557 { 0x00177, "Telepresence" },
558 { 0x00178, "Nokia ICC client" },
559 { 0x00194, "7962" },
560 { 0x0019c, "3951" },
561 { 0x001af, "7937" },
562 { 0x001b2, "7942" },
563 { 0x001b3, "7945" },
564 { 0x001b4, "7965" },
565 { 0x001b5, "7975" },
566 { 0x001d4, "UnifiedMobileCommunicator" },
567 { 0x001e4, "Cisco 7925" },
568 { 0x001ed, "9971_CE" },
569 { 0x001ef, "Cisco 6921" },
570 { 0x001f0, "Cisco 6941" },
571 { 0x001f1, "Cisco 6961" },
572 { 0x001f7, "CSF" },
573 { 0x00223, "Cisco 6901" },
574 { 0x00224, "Cisco 6911" },
575 { 0x00234, "Cisco 6945" },
576 { 0x00249, "Cisco 8945" },
577 { 0x0024a, "Cisco 8941" },
578 { 0x00255, "CiscoTelepresenceMcu" },
579 { 0x00257, "CiscoTelePresenceExchange" },
580 { 0x00258, "CiscoTelePresenceSoftwareConferenceBridge" },
581 { 0x00277, "ASSip" },
582 { 0x0027b, "CtiRemoteDevice" },
583 { 0x04e20, "7905" },
584 { 0x07532, "7920" },
585 { 0x07536, "7970" },
586 { 0x07537, "7912" },
587 { 0x07538, "7902" },
588 { 0x07540, "Cisco IP Communicator" },
589 { 0x07542, "7961G" },
590 { 0x07543, "7936" },
591 { 0x0754b, "AnalogPhone" },
592 { 0x0754c, "ISDNBRIPhone" },
593 { 0x07550, "SCCPGwVirtualPhone" },
594 { 0x07553, "IP_STE" },
595 { 0x08cc9, "CiscoTelePresenceConductor" },
596 { 0x08d7b, "InteractiveVoiceResponse" },
597 { 0x13880, "Cisco SPA 521S" },
598 { 0x13883, "Cisco SPA 502G" },
599 { 0x13884, "Cisco SPA 504G" },
600 { 0x13885, "Cisco SPA 525G" },
601 { 0x13887, "Cisco SPA 509G" },
602 { 0x13889, "Cisco SPA 525G2" },
603 { 0x1388b, "Cisco SPA 303G" },
604 { 0x00000, NULL }
606 static value_string_ext DeviceType_ext = VALUE_STRING_EXT_INIT(DeviceType);
608 static const value_string KeyPadButton[] = {
609 { 0x00000, "Zero" },
610 { 0x00001, "One" },
611 { 0x00002, "Two" },
612 { 0x00003, "Three" },
613 { 0x00004, "Four" },
614 { 0x00005, "Five" },
615 { 0x00006, "Six" },
616 { 0x00007, "Seven" },
617 { 0x00008, "Eight" },
618 { 0x00009, "Nine" },
619 { 0x0000a, "A" },
620 { 0x0000b, "B" },
621 { 0x0000c, "C" },
622 { 0x0000d, "D" },
623 { 0x0000e, "Star" },
624 { 0x0000f, "Pound" },
625 { 0x00010, "Plus" },
626 { 0x00000, NULL }
628 static value_string_ext KeyPadButton_ext = VALUE_STRING_EXT_INIT(KeyPadButton);
630 static const value_string KeyPadButton_short[] = {
631 { 0x00000, "0" },
632 { 0x00001, "1" },
633 { 0x00002, "2" },
634 { 0x00003, "3" },
635 { 0x00004, "4" },
636 { 0x00005, "5" },
637 { 0x00006, "6" },
638 { 0x00007, "7" },
639 { 0x00008, "8" },
640 { 0x00009, "9" },
641 { 0x0000a, "A" },
642 { 0x0000b, "B" },
643 { 0x0000c, "C" },
644 { 0x0000d, "D" },
645 { 0x0000e, "*" },
646 { 0x0000f, "#" },
647 { 0x00010, "+" },
648 { 0x00000, NULL }
650 static value_string_ext KeyPadButton_short_ext = VALUE_STRING_EXT_INIT(KeyPadButton_short);
652 static const value_string DeviceStimulus[] = {
653 { 0x00001, "LastNumberRedial" },
654 { 0x00002, "SpeedDial" },
655 { 0x00003, "Hold" },
656 { 0x00004, "Transfer" },
657 { 0x00005, "ForwardAll" },
658 { 0x00006, "ForwardBusy" },
659 { 0x00007, "ForwardNoAnswer" },
660 { 0x00008, "Display" },
661 { 0x00009, "Line" },
662 { 0x0000a, "T120Chat" },
663 { 0x0000b, "T120Whiteboard" },
664 { 0x0000c, "T120ApplicationSharing" },
665 { 0x0000d, "T120FileTransfer" },
666 { 0x0000e, "Video" },
667 { 0x0000f, "VoiceMail" },
668 { 0x00010, "AnswerRelease" },
669 { 0x00011, "AutoAnswer" },
670 { 0x00012, "Select" },
671 { 0x00013, "Privacy" },
672 { 0x00014, "ServiceURL" },
673 { 0x00015, "BLFSpeedDial" },
674 { 0x00016, "DPark" },
675 { 0x00017, "Intercom" },
676 { 0x0001b, "MaliciousCall" },
677 { 0x00021, "GenericAppB1" },
678 { 0x00022, "GenericAppB2" },
679 { 0x00023, "GenericAppB3" },
680 { 0x00024, "GenericAppB4" },
681 { 0x00025, "GenericAppB5" },
682 { 0x0007b, "MeetMeConference" },
683 { 0x0007d, "Conference" },
684 { 0x0007e, "CallPark" },
685 { 0x0007f, "CallPickUp" },
686 { 0x00080, "GroupCallPickUp" },
687 { 0x00081, "Mobility" },
688 { 0x00082, "DoNotDisturb" },
689 { 0x00083, "ConfList" },
690 { 0x00084, "RemoveLastParticipant" },
691 { 0x00085, "QRT" },
692 { 0x00086, "CallBack" },
693 { 0x00087, "OtherPickup" },
694 { 0x00088, "VideoMode" },
695 { 0x00089, "NewCall" },
696 { 0x0008a, "EndCall" },
697 { 0x0008b, "HLog" },
698 { 0x0008f, "Queuing" },
699 { 0x000ff, "MaxStimulusValue" },
700 { 0x00000, NULL }
702 static value_string_ext DeviceStimulus_ext = VALUE_STRING_EXT_INIT(DeviceStimulus);
704 #define MEDIA_PAYLOAD_G711ALAW64K 0x00002 /* audio */
705 #define MEDIA_PAYLOAD_G711ALAW56K 0x00003 /* audio */
706 #define MEDIA_PAYLOAD_G711ULAW64K 0x00004 /* audio */
707 #define MEDIA_PAYLOAD_G711ULAW56K 0x00005 /* audio */
708 #define MEDIA_PAYLOAD_G722_64K 0x00006 /* audio */
709 #define MEDIA_PAYLOAD_G722_56K 0x00007 /* audio */
710 #define MEDIA_PAYLOAD_G722_48K 0x00008 /* audio */
711 #define MEDIA_PAYLOAD_G7231 0x00009 /* audio */
712 #define MEDIA_PAYLOAD_G728 0x0000a /* audio */
713 #define MEDIA_PAYLOAD_G729 0x0000b /* audio */
714 #define MEDIA_PAYLOAD_G729ANNEXA 0x0000c /* audio */
715 #define MEDIA_PAYLOAD_G729ANNEXB 0x0000f /* audio */
716 #define MEDIA_PAYLOAD_G729ANNEXAWANNEXB 0x00010 /* audio */
717 #define MEDIA_PAYLOAD_GSM_FULL_RATE 0x00012 /* audio */
718 #define MEDIA_PAYLOAD_GSM_HALF_RATE 0x00013 /* audio */
719 #define MEDIA_PAYLOAD_GSM_ENHANCED_FULL_RATE 0x00014 /* audio */
720 #define MEDIA_PAYLOAD_WIDE_BAND_256K 0x00019 /* audio */
721 #define MEDIA_PAYLOAD_DATA64 0x00020 /* audio */
722 #define MEDIA_PAYLOAD_DATA56 0x00021 /* audio */
723 #define MEDIA_PAYLOAD_G7221_32K 0x00028 /* audio */
724 #define MEDIA_PAYLOAD_G7221_24K 0x00029 /* audio */
725 #define MEDIA_PAYLOAD_AAC 0x0002a /* audio */
726 #define MEDIA_PAYLOAD_MP4ALATM_128 0x0002b /* audio */
727 #define MEDIA_PAYLOAD_MP4ALATM_64 0x0002c /* audio */
728 #define MEDIA_PAYLOAD_MP4ALATM_56 0x0002d /* audio */
729 #define MEDIA_PAYLOAD_MP4ALATM_48 0x0002e /* audio */
730 #define MEDIA_PAYLOAD_MP4ALATM_32 0x0002f /* audio */
731 #define MEDIA_PAYLOAD_MP4ALATM_24 0x00030 /* audio */
732 #define MEDIA_PAYLOAD_MP4ALATM_NA 0x00031 /* audio */
733 #define MEDIA_PAYLOAD_GSM 0x00050 /* audio */
734 #define MEDIA_PAYLOAD_G726_32K 0x00052 /* audio */
735 #define MEDIA_PAYLOAD_G726_24K 0x00053 /* audio */
736 #define MEDIA_PAYLOAD_G726_16K 0x00054 /* audio */
737 #define MEDIA_PAYLOAD_ILBC 0x00056 /* audio */
738 #define MEDIA_PAYLOAD_ISAC 0x00059 /* audio */
739 #define MEDIA_PAYLOAD_OPUS 0x0005a /* audio */
740 #define MEDIA_PAYLOAD_AMR 0x00061 /* audio */
741 #define MEDIA_PAYLOAD_AMR_WB 0x00062 /* audio */
742 #define MEDIA_PAYLOAD_H261 0x00064 /* video */
743 #define MEDIA_PAYLOAD_H263 0x00065 /* video */
744 #define MEDIA_PAYLOAD_VIEO 0x00066 /* video */
745 #define MEDIA_PAYLOAD_H264 0x00067 /* video */
746 #define MEDIA_PAYLOAD_H264_SVC 0x00068 /* video */
747 #define MEDIA_PAYLOAD_T120 0x00069 /* video */
748 #define MEDIA_PAYLOAD_H224 0x0006a /* video */
749 #define MEDIA_PAYLOAD_T38FAX 0x0006b /* video */
750 #define MEDIA_PAYLOAD_TOTE 0x0006c /* video */
751 #define MEDIA_PAYLOAD_H265 0x0006d /* video */
752 #define MEDIA_PAYLOAD_H264_UC 0x0006e /* video */
753 #define MEDIA_PAYLOAD_XV150_MR_711U 0x0006f /* video */
754 #define MEDIA_PAYLOAD_NSE_VBD_711U 0x00070 /* video */
755 #define MEDIA_PAYLOAD_XV150_MR_729A 0x00071 /* video */
756 #define MEDIA_PAYLOAD_NSE_VBD_729A 0x00072 /* video */
757 #define MEDIA_PAYLOAD_H264_FEC 0x00073 /* video */
758 #define MEDIA_PAYLOAD_CLEAR_CHAN 0x00078 /* data */
759 #define MEDIA_PAYLOAD_UNIVERSAL_XCODER 0x000de /* data */
760 #define MEDIA_PAYLOAD_RFC2833_DYNPAYLOAD 0x00101 /* data */
761 #define MEDIA_PAYLOAD_PASSTHROUGH 0x00102 /* data */
762 #define MEDIA_PAYLOAD_DYNAMIC_PAYLOAD_PASSTHRU 0x00103 /* data */
763 #define MEDIA_PAYLOAD_DTMF_OOB 0x00104 /* data */
764 #define MEDIA_PAYLOAD_INBAND_DTMF_RFC2833 0x00105 /* data */
765 #define MEDIA_PAYLOAD_CFB_TONES 0x00106 /* data */
766 #define MEDIA_PAYLOAD_NOAUDIO 0x0012b /* data */
767 #define MEDIA_PAYLOAD_V150_LC_MODEMRELAY 0x0012c /* data */
768 #define MEDIA_PAYLOAD_V150_LC_SPRT 0x0012d /* data */
769 #define MEDIA_PAYLOAD_V150_LC_SSE 0x0012e /* data */
770 #define MEDIA_PAYLOAD_MAX 0x0012f /* data */
772 static const value_string Media_PayloadType[] = {
773 { MEDIA_PAYLOAD_G711ALAW64K, "Media_Payload_G711Alaw64k" },
774 { MEDIA_PAYLOAD_G711ALAW56K, "Media_Payload_G711Alaw56k" },
775 { MEDIA_PAYLOAD_G711ULAW64K, "Media_Payload_G711Ulaw64k" },
776 { MEDIA_PAYLOAD_G711ULAW56K, "Media_Payload_G711Ulaw56k" },
777 { MEDIA_PAYLOAD_G722_64K, "Media_Payload_G722_64k" },
778 { MEDIA_PAYLOAD_G722_56K, "Media_Payload_G722_56k" },
779 { MEDIA_PAYLOAD_G722_48K, "Media_Payload_G722_48k" },
780 { MEDIA_PAYLOAD_G7231, "Media_Payload_G7231" },
781 { MEDIA_PAYLOAD_G728, "Media_Payload_G728" },
782 { MEDIA_PAYLOAD_G729, "Media_Payload_G729" },
783 { MEDIA_PAYLOAD_G729ANNEXA, "Media_Payload_G729AnnexA" },
784 { MEDIA_PAYLOAD_G729ANNEXB, "Media_Payload_G729AnnexB" },
785 { MEDIA_PAYLOAD_G729ANNEXAWANNEXB, "Media_Payload_G729AnnexAwAnnexB" },
786 { MEDIA_PAYLOAD_GSM_FULL_RATE, "Media_Payload_GSM_Full_Rate" },
787 { MEDIA_PAYLOAD_GSM_HALF_RATE, "Media_Payload_GSM_Half_Rate" },
788 { MEDIA_PAYLOAD_GSM_ENHANCED_FULL_RATE, "Media_Payload_GSM_Enhanced_Full_Rate" },
789 { MEDIA_PAYLOAD_WIDE_BAND_256K, "Media_Payload_Wide_Band_256k" },
790 { MEDIA_PAYLOAD_DATA64, "Media_Payload_Data64" },
791 { MEDIA_PAYLOAD_DATA56, "Media_Payload_Data56" },
792 { MEDIA_PAYLOAD_G7221_32K, "Media_Payload_G7221_32K" },
793 { MEDIA_PAYLOAD_G7221_24K, "Media_Payload_G7221_24K" },
794 { MEDIA_PAYLOAD_AAC, "Media_Payload_AAC" },
795 { MEDIA_PAYLOAD_MP4ALATM_128, "Media_Payload_MP4ALATM_128" },
796 { MEDIA_PAYLOAD_MP4ALATM_64, "Media_Payload_MP4ALATM_64" },
797 { MEDIA_PAYLOAD_MP4ALATM_56, "Media_Payload_MP4ALATM_56" },
798 { MEDIA_PAYLOAD_MP4ALATM_48, "Media_Payload_MP4ALATM_48" },
799 { MEDIA_PAYLOAD_MP4ALATM_32, "Media_Payload_MP4ALATM_32" },
800 { MEDIA_PAYLOAD_MP4ALATM_24, "Media_Payload_MP4ALATM_24" },
801 { MEDIA_PAYLOAD_MP4ALATM_NA, "Media_Payload_MP4ALATM_NA" },
802 { MEDIA_PAYLOAD_GSM, "Media_Payload_GSM" },
803 { MEDIA_PAYLOAD_G726_32K, "Media_Payload_G726_32K" },
804 { MEDIA_PAYLOAD_G726_24K, "Media_Payload_G726_24K" },
805 { MEDIA_PAYLOAD_G726_16K, "Media_Payload_G726_16K" },
806 { MEDIA_PAYLOAD_ILBC, "Media_Payload_ILBC" },
807 { MEDIA_PAYLOAD_ISAC, "Media_Payload_ISAC" },
808 { MEDIA_PAYLOAD_OPUS, "Media_Payload_OPUS" },
809 { MEDIA_PAYLOAD_AMR, "Media_Payload_AMR" },
810 { MEDIA_PAYLOAD_AMR_WB, "Media_Payload_AMR_WB" },
811 { MEDIA_PAYLOAD_H261, "Media_Payload_H261" },
812 { MEDIA_PAYLOAD_H263, "Media_Payload_H263" },
813 { MEDIA_PAYLOAD_VIEO, "Media_Payload_Vieo" },
814 { MEDIA_PAYLOAD_H264, "Media_Payload_H264" },
815 { MEDIA_PAYLOAD_H264_SVC, "Media_Payload_H264_SVC" },
816 { MEDIA_PAYLOAD_T120, "Media_Payload_T120" },
817 { MEDIA_PAYLOAD_H224, "Media_Payload_H224" },
818 { MEDIA_PAYLOAD_T38FAX, "Media_Payload_T38Fax" },
819 { MEDIA_PAYLOAD_TOTE, "Media_Payload_TOTE" },
820 { MEDIA_PAYLOAD_H265, "Media_Payload_H265" },
821 { MEDIA_PAYLOAD_H264_UC, "Media_Payload_H264_UC" },
822 { MEDIA_PAYLOAD_XV150_MR_711U, "Media_Payload_XV150_MR_711U" },
823 { MEDIA_PAYLOAD_NSE_VBD_711U, "Media_Payload_NSE_VBD_711U" },
824 { MEDIA_PAYLOAD_XV150_MR_729A, "Media_Payload_XV150_MR_729A" },
825 { MEDIA_PAYLOAD_NSE_VBD_729A, "Media_Payload_NSE_VBD_729A" },
826 { MEDIA_PAYLOAD_H264_FEC, "Media_Payload_H264_FEC" },
827 { MEDIA_PAYLOAD_CLEAR_CHAN, "Media_Payload_Clear_Chan" },
828 { MEDIA_PAYLOAD_UNIVERSAL_XCODER, "Media_Payload_Universal_Xcoder" },
829 { MEDIA_PAYLOAD_RFC2833_DYNPAYLOAD, "Media_Payload_RFC2833_DynPayload" },
830 { MEDIA_PAYLOAD_PASSTHROUGH, "Media_Payload_PassThrough" },
831 { MEDIA_PAYLOAD_DYNAMIC_PAYLOAD_PASSTHRU, "Media_Payload_Dynamic_Payload_PassThru" },
832 { MEDIA_PAYLOAD_DTMF_OOB, "Media_Payload_DTMF_OOB" },
833 { MEDIA_PAYLOAD_INBAND_DTMF_RFC2833, "Media_Payload_Inband_DTMF_RFC2833" },
834 { MEDIA_PAYLOAD_CFB_TONES, "Media_Payload_CFB_Tones" },
835 { MEDIA_PAYLOAD_NOAUDIO, "Media_Payload_NoAudio" },
836 { MEDIA_PAYLOAD_V150_LC_MODEMRELAY, "Media_Payload_v150_LC_ModemRelay" },
837 { MEDIA_PAYLOAD_V150_LC_SPRT, "Media_Payload_v150_LC_SPRT" },
838 { MEDIA_PAYLOAD_V150_LC_SSE, "Media_Payload_v150_LC_SSE" },
839 { MEDIA_PAYLOAD_MAX, "Media_Payload_Max" },
840 { 0x00000, NULL }
842 static value_string_ext Media_PayloadType_ext = VALUE_STRING_EXT_INIT(Media_PayloadType);
844 static const value_string Media_G723BitRate[] = {
845 { 0x00001, "Media_G723BRate_5_3" },
846 { 0x00002, "Media_G723BRate_6_3" },
847 { 0x00000, NULL }
849 static value_string_ext Media_G723BitRate_ext = VALUE_STRING_EXT_INIT(Media_G723BitRate);
851 static const value_string DeviceAlarmSeverity[] = {
852 { 0x00000, "Critical" },
853 { 0x00001, "Warning" },
854 { 0x00002, "Informational" },
855 { 0x00004, "Unknown" },
856 { 0x00007, "Major" },
857 { 0x00008, "Minor" },
858 { 0x0000a, "Marginal" },
859 { 0x00014, "TraceInfo" },
860 { 0x00000, NULL }
862 static value_string_ext DeviceAlarmSeverity_ext = VALUE_STRING_EXT_INIT(DeviceAlarmSeverity);
864 static const value_string MulticastMediaReceptionStatus[] = {
865 { 0x00000, "Ok" },
866 { 0x00001, "Error" },
867 { 0x00000, NULL }
869 static value_string_ext MulticastMediaReceptionStatus_ext = VALUE_STRING_EXT_INIT(MulticastMediaReceptionStatus);
871 static const value_string MediaStatus[] = {
872 { 0x00000, "Ok" },
873 { 0x00001, "Unknown" },
874 { 0x00002, "NotEnoughChannels" },
875 { 0x00003, "CodecTooComplex" },
876 { 0x00004, "InvalidPartyID" },
877 { 0x00005, "InvalidCallRef" },
878 { 0x00006, "InvalidCodec" },
879 { 0x00007, "InvalidPacketSize" },
880 { 0x00008, "OutOfSockets" },
881 { 0x00009, "EncoderOrDecoderFailed" },
882 { 0x0000a, "InvalidDynamicPayloadType" },
883 { 0x0000b, "RequestedIpAddrTypeUnAvailable" },
884 { 0x000ff, "DeviceOnHook" },
885 { 0x00000, NULL }
887 static value_string_ext MediaStatus_ext = VALUE_STRING_EXT_INIT(MediaStatus);
889 #define IPADDRTYPE_IPV4 0x00000
890 #define IPADDRTYPE_IPV6 0x00001
891 #define IPADDRTYPE_IPV4_V6 0x00002
892 #define IPADDRTYPE_IP_INVALID 0x00003
894 static const value_string IpAddrType[] = {
895 { IPADDRTYPE_IPV4, "v4" },
896 { IPADDRTYPE_IPV6, "v6" },
897 { IPADDRTYPE_IPV4_V6, "v4_v6" },
898 { IPADDRTYPE_IP_INVALID, "_Invalid" },
899 { 0x00000, NULL }
901 static value_string_ext IpAddrType_ext = VALUE_STRING_EXT_INIT(IpAddrType);
903 static const value_string StatsProcessingType[] = {
904 { 0x00000, "clearStats" },
905 { 0x00001, "doNotClearStats" },
906 { 0x00000, NULL }
908 static value_string_ext StatsProcessingType_ext = VALUE_STRING_EXT_INIT(StatsProcessingType);
910 static const value_string SoftKeySet[] = {
911 { 0x00000, "On Hook" },
912 { 0x00001, "Connected" },
913 { 0x00002, "On Hold" },
914 { 0x00003, "Ring In" },
915 { 0x00004, "Off Hook" },
916 { 0x00005, "Connected Transferable" },
917 { 0x00006, "Digits Following" },
918 { 0x00007, "Connected Conference" },
919 { 0x00008, "Ring Out" },
920 { 0x00009, "OffHook with Features" },
921 { 0x0000a, "In Use Hint" },
922 { 0x0000b, "On Hook with Stealable Call" },
923 { 0x00000, NULL }
925 static value_string_ext SoftKeySet_ext = VALUE_STRING_EXT_INIT(SoftKeySet);
927 static const value_string SoftKeyEvent[] = {
928 { 0x00001, "Redial" },
929 { 0x00002, "NewCall" },
930 { 0x00003, "Hold" },
931 { 0x00004, "Transfer" },
932 { 0x00005, "CfwdAll" },
933 { 0x00006, "CfwdBusy" },
934 { 0x00007, "CfwdNoAnswer" },
935 { 0x00008, "BackSpace" },
936 { 0x00009, "EndCall" },
937 { 0x0000a, "Resume" },
938 { 0x0000b, "Answer" },
939 { 0x0000c, "Info" },
940 { 0x0000d, "Confrn" },
941 { 0x0000e, "Park" },
942 { 0x0000f, "Join" },
943 { 0x00010, "MeetMe" },
944 { 0x00011, "PickUp" },
945 { 0x00012, "GrpPickup" },
946 { 0x00013, "Your current options" },
947 { 0x00014, "Off Hook" },
948 { 0x00015, "On Hook" },
949 { 0x00016, "Ring out" },
950 { 0x00017, "From " },
951 { 0x00018, "Connected" },
952 { 0x00019, "Busy" },
953 { 0x0001a, "Line In Use" },
954 { 0x0001b, "Call Waiting" },
955 { 0x0001c, "Call Transfer" },
956 { 0x0001d, "Call Park" },
957 { 0x0001e, "Call Proceed" },
958 { 0x0001f, "In Use Remote" },
959 { 0x00020, "Enter number" },
960 { 0x00021, "Call park At" },
961 { 0x00022, "Primary Only" },
962 { 0x00023, "Temp Fail" },
963 { 0x00024, "You Have a VoiceMail" },
964 { 0x00025, "Forwarded to" },
965 { 0x00026, "Can Not Complete Conference" },
966 { 0x00027, "No Conference Bridge" },
967 { 0x00028, "Can Not Hold Primary Control" },
968 { 0x00029, "Invalid Conference Participant" },
969 { 0x0002a, "In Conference Already" },
970 { 0x0002b, "No Participant Info" },
971 { 0x0002c, "Exceed Maximum Parties" },
972 { 0x0002d, "Key Is Not Active" },
973 { 0x0002e, "Error No License" },
974 { 0x0002f, "Error DBConfig" },
975 { 0x00030, "Error Database" },
976 { 0x00031, "Error Pass Limit" },
977 { 0x00032, "Error Unknown" },
978 { 0x00033, "Error Mismatch" },
979 { 0x00034, "Conference" },
980 { 0x00035, "Park Number" },
981 { 0x00036, "Private" },
982 { 0x00037, "Not Enough Bandwidth" },
983 { 0x00038, "Unknown Number" },
984 { 0x00039, "RmLstC" },
985 { 0x0003a, "Voicemail" },
986 { 0x0003b, "ImmDiv" },
987 { 0x0003c, "Intrcpt" },
988 { 0x0003d, "SetWtch" },
989 { 0x0003e, "TrnsfVM" },
990 { 0x0003f, "DND" },
991 { 0x00040, "DivAll" },
992 { 0x00041, "CallBack" },
993 { 0x00042, "Network congestion,rerouting" },
994 { 0x00043, "Barge" },
995 { 0x00044, "Failed to setup Barge" },
996 { 0x00045, "Another Barge exists" },
997 { 0x00046, "Incompatible device type" },
998 { 0x00047, "No Park Number Available" },
999 { 0x00048, "CallPark Reversion" },
1000 { 0x00049, "Service is not Active" },
1001 { 0x0004a, "High Traffic Try Again Later" },
1002 { 0x0004b, "QRT" },
1003 { 0x0004c, "MCID" },
1004 { 0x0004d, "DirTrfr" },
1005 { 0x0004e, "Select" },
1006 { 0x0004f, "ConfList" },
1007 { 0x00050, "iDivert" },
1008 { 0x00051, "cBarge" },
1009 { 0x00052, "Can Not Complete Transfer" },
1010 { 0x00053, "Can Not Join Calls" },
1011 { 0x00054, "Mcid Successful" },
1012 { 0x00055, "Number Not Configured" },
1013 { 0x00056, "Security Error" },
1014 { 0x00057, "Video Bandwidth Unavailable" },
1015 { 0x00058, "Video Mode" },
1016 { 0x000c9, "Dial" },
1017 { 0x000ca, "Record" },
1018 { 0x00000, NULL }
1020 static value_string_ext SoftKeyEvent_ext = VALUE_STRING_EXT_INIT(SoftKeyEvent);
1022 static const value_string UnRegReasonCode[] = {
1023 { 0x00000, "Unknown" },
1024 { 0x00001, "PowerSaveMode" },
1025 { 0x00000, NULL }
1027 static value_string_ext UnRegReasonCode_ext = VALUE_STRING_EXT_INIT(UnRegReasonCode);
1029 static const value_string HeadsetMode[] = {
1030 { 0x00001, "On" },
1031 { 0x00002, "Off" },
1032 { 0x00000, NULL }
1034 static value_string_ext HeadsetMode_ext = VALUE_STRING_EXT_INIT(HeadsetMode);
1036 static const value_string SequenceFlag[] = {
1037 { 0x00000, "First" },
1038 { 0x00001, "More" },
1039 { 0x00002, "Last" },
1040 { 0x00000, NULL }
1042 static value_string_ext SequenceFlag_ext = VALUE_STRING_EXT_INIT(SequenceFlag);
1044 static const value_string Layout[] = {
1045 { 0x00000, "NoLayout" },
1046 { 0x00001, "OneByOne" },
1047 { 0x00002, "OneByTwo" },
1048 { 0x00003, "TwoByTwo" },
1049 { 0x00004, "TwoByTwo3Alt1" },
1050 { 0x00005, "TwoByTwo3Alt2" },
1051 { 0x00006, "ThreeByThree" },
1052 { 0x00007, "ThreeByThree6Alt1" },
1053 { 0x00008, "ThreeByThree6Alt2" },
1054 { 0x00009, "ThreeByThree4Alt1" },
1055 { 0x0000a, "ThreeByThree4Alt2" },
1056 { 0x00000, NULL }
1058 static value_string_ext Layout_ext = VALUE_STRING_EXT_INIT(Layout);
1060 static const value_string TransmitOrReceive[] = {
1061 { 0x00000, "None" },
1062 { 0x00001, "ReceiveOnly" },
1063 { 0x00002, "TransmitOnly" },
1064 { 0x00003, "Both" },
1065 { 0x00000, NULL }
1067 static value_string_ext TransmitOrReceive_ext = VALUE_STRING_EXT_INIT(TransmitOrReceive);
1069 static const value_string OpenReceiveChanStatus[] = {
1070 { 0x00000, "Ok" },
1071 { 0x00001, "Error" },
1072 { 0x00000, NULL }
1074 static value_string_ext OpenReceiveChanStatus_ext = VALUE_STRING_EXT_INIT(OpenReceiveChanStatus);
1076 static const value_string CreateConfResult[] = {
1077 { 0x00000, "OK" },
1078 { 0x00001, "ResourceNotAvailable" },
1079 { 0x00002, "ConferenceAlreadyExist" },
1080 { 0x00003, "SystemErr" },
1081 { 0x00000, NULL }
1083 static value_string_ext CreateConfResult_ext = VALUE_STRING_EXT_INIT(CreateConfResult);
1085 static const value_string DeleteConfResult[] = {
1086 { 0x00000, "OK" },
1087 { 0x00001, "ConferenceNotExist" },
1088 { 0x00002, "SystemErr" },
1089 { 0x00000, NULL }
1091 static value_string_ext DeleteConfResult_ext = VALUE_STRING_EXT_INIT(DeleteConfResult);
1093 static const value_string ModifyConfResult[] = {
1094 { 0x00000, "OK" },
1095 { 0x00001, "ResourceNotAvailable" },
1096 { 0x00002, "ConferenceNotExist" },
1097 { 0x00003, "InvalidParameter" },
1098 { 0x00004, "MoreActiveCallsThanReserved" },
1099 { 0x00005, "InvalidResourceType" },
1100 { 0x00006, "SystemErr" },
1101 { 0x00000, NULL }
1103 static value_string_ext ModifyConfResult_ext = VALUE_STRING_EXT_INIT(ModifyConfResult);
1105 static const value_string AddParticipantResult[] = {
1106 { 0x00000, "OK" },
1107 { 0x00001, "ResourceNotAvailable" },
1108 { 0x00002, "ConferenceNotExist" },
1109 { 0x00003, "DuplicateCallRef" },
1110 { 0x00004, "SystemErr" },
1111 { 0x00000, NULL }
1113 static value_string_ext AddParticipantResult_ext = VALUE_STRING_EXT_INIT(AddParticipantResult);
1115 static const value_string ResourceType[] = {
1116 { 0x00000, "Conference" },
1117 { 0x00001, "IVR" },
1118 { 0x00000, NULL }
1120 static value_string_ext ResourceType_ext = VALUE_STRING_EXT_INIT(ResourceType);
1122 static const value_string AuditParticipantResult[] = {
1123 { 0x00000, "OK" },
1124 { 0x00001, "ConferenceNotExist" },
1125 { 0x00000, NULL }
1127 static value_string_ext AuditParticipantResult_ext = VALUE_STRING_EXT_INIT(AuditParticipantResult);
1129 static const value_string Media_Encryption_Capability[] = {
1130 { 0x00000, "NotEncryptionCapable" },
1131 { 0x00001, "EncryptionCapable" },
1132 { 0x00000, NULL }
1134 static value_string_ext Media_Encryption_Capability_ext = VALUE_STRING_EXT_INIT(Media_Encryption_Capability);
1136 static const value_string IpAddrMode[] = {
1137 { 0x00000, "ModeIpv4" },
1138 { 0x00001, "ModeIpv6" },
1139 { 0x00002, "ModeIpv4AndIpv6" },
1140 { 0x00000, NULL }
1142 static value_string_ext IpAddrMode_ext = VALUE_STRING_EXT_INIT(IpAddrMode);
1144 static const value_string MediaType[] = {
1145 { 0x00000, "MediaType_Invalid" },
1146 { 0x00001, "MediaType_Audio" },
1147 { 0x00002, "MediaType_Main_Video" },
1148 { 0x00003, "MediaType_FECC" },
1149 { 0x00004, "MediaType_Presentation_Video" },
1150 { 0x00005, "MediaType_DataApp_BFCP" },
1151 { 0x00006, "MediaType_DataApp_IXChannel" },
1152 { 0x00007, "MediaType_T38" },
1153 { 0x00008, "MediaType_Max" },
1154 { 0x00000, NULL }
1156 static value_string_ext MediaType_ext = VALUE_STRING_EXT_INIT(MediaType);
1158 static const value_string RSVPDirection[] = {
1159 { 0x00001, "SEND" },
1160 { 0x00002, "RECV" },
1161 { 0x00003, "SENDRECV" },
1162 { 0x00000, NULL }
1164 static value_string_ext RSVPDirection_ext = VALUE_STRING_EXT_INIT(RSVPDirection);
1166 static const value_string QoSErrorCode[] = {
1167 { 0x00000, "QOS_CAUSE_RESERVATION_TIMEOUT" },
1168 { 0x00001, "QOS_CAUSE_PATH_FAIL" },
1169 { 0x00002, "QOS_CAUSE_RESV_FAIL" },
1170 { 0x00003, "QOS_CAUSE_LISTEN_FAIL" },
1171 { 0x00004, "QOS_CAUSE_RESOURCE_UNAVAILABLE" },
1172 { 0x00005, "QOS_CAUSE_LISTEN_TIMEOUT" },
1173 { 0x00006, "QOS_CAUSE_RESV_RETRIES_FAIL" },
1174 { 0x00007, "QOS_CAUSE_PATH_RETRIES_FAIL" },
1175 { 0x00008, "QOS_CAUSE_RESV_PREEMPTION" },
1176 { 0x00009, "QOS_CAUSE_PATH_PREEMPTION" },
1177 { 0x0000a, "QOS_CAUSE_RESV_MODIFY_FAIL" },
1178 { 0x0000b, "QOS_CAUSE_PATH_MODIFY_FAIL" },
1179 { 0x0000c, "QOS_CAUSE_RESV_TEAR" },
1180 { 0x00000, NULL }
1182 static value_string_ext QoSErrorCode_ext = VALUE_STRING_EXT_INIT(QoSErrorCode);
1184 static const value_string RSVPErrorCode[] = {
1185 { 0x00000, "CONFIRM" },
1186 { 0x00001, "ADMISSION" },
1187 { 0x00002, "ADMINISTRATIVE" },
1188 { 0x00003, "NO_PATH_INFORMATION" },
1189 { 0x00004, "NO_SENDER_INFORMATION" },
1190 { 0x00005, "CONFLICTING_STYLE" },
1191 { 0x00006, "UNKNOWN_STYLE" },
1192 { 0x00007, "CONFLICTING_DST_PORTS" },
1193 { 0x00008, "CONFLICTING_SRC_PORTS" },
1194 { 0x0000c, "SERVICE_PREEMPTED" },
1195 { 0x0000d, "UNKNOWN_OBJECT_CLASS" },
1196 { 0x0000e, "UNKNOWN_CLASS_TYPE" },
1197 { 0x00014, "API" },
1198 { 0x00015, "TRAFFIC" },
1199 { 0x00016, "TRAFFIC_SYSTEM" },
1200 { 0x00017, "SYSTEM" },
1201 { 0x00018, "ROUTING_PROBLEM" },
1202 { 0x00000, NULL }
1204 static value_string_ext RSVPErrorCode_ext = VALUE_STRING_EXT_INIT(RSVPErrorCode);
1206 static const value_string SubscriptionFeatureID[] = {
1207 { 0x00001, "BLF" },
1208 { 0x00000, NULL }
1210 static value_string_ext SubscriptionFeatureID_ext = VALUE_STRING_EXT_INIT(SubscriptionFeatureID);
1212 static const value_string MediaPathID[] = {
1213 { 0x00001, "Headset" },
1214 { 0x00002, "Handset" },
1215 { 0x00003, "Speaker" },
1216 { 0x00000, NULL }
1218 static value_string_ext MediaPathID_ext = VALUE_STRING_EXT_INIT(MediaPathID);
1220 static const value_string MediaPathEvent[] = {
1221 { 0x00001, "On" },
1222 { 0x00002, "Off" },
1223 { 0x00000, NULL }
1225 static value_string_ext MediaPathEvent_ext = VALUE_STRING_EXT_INIT(MediaPathEvent);
1227 static const value_string MediaPathCapabilities[] = {
1228 { 0x00001, "Enable" },
1229 { 0x00002, "Disable" },
1230 { 0x00003, "Monitor" },
1231 { 0x00000, NULL }
1233 static value_string_ext MediaPathCapabilities_ext = VALUE_STRING_EXT_INIT(MediaPathCapabilities);
1235 static const value_string DeviceTone[] = {
1236 { 0x00000, "Silence" },
1237 { 0x00001, "Dtmf1" },
1238 { 0x00002, "Dtmf2" },
1239 { 0x00003, "Dtmf3" },
1240 { 0x00004, "Dtmf4" },
1241 { 0x00005, "Dtmf5" },
1242 { 0x00006, "Dtmf6" },
1243 { 0x00007, "Dtmf7" },
1244 { 0x00008, "Dtmf8" },
1245 { 0x00009, "Dtmf9" },
1246 { 0x0000a, "Dtmf0" },
1247 { 0x0000e, "DtmfStar" },
1248 { 0x0000f, "DtmfPound" },
1249 { 0x00010, "DtmfA" },
1250 { 0x00011, "DtmfB" },
1251 { 0x00012, "DtmfC" },
1252 { 0x00013, "DtmfD" },
1253 { 0x00021, "InsideDialTone" },
1254 { 0x00022, "OutsideDialTone" },
1255 { 0x00023, "LineBusyTone" },
1256 { 0x00024, "AlertingTone" },
1257 { 0x00025, "ReorderTone" },
1258 { 0x00026, "RecorderWarningTone" },
1259 { 0x00027, "RecorderDetectedTone" },
1260 { 0x00028, "RevertingTone" },
1261 { 0x00029, "ReceiverOffHookTone" },
1262 { 0x0002a, "MessageWaitingIndicatorTone" },
1263 { 0x0002b, "NoSuchNumberTone" },
1264 { 0x0002c, "BusyVerificationTone" },
1265 { 0x0002d, "CallWaitingTone" },
1266 { 0x0002e, "ConfirmationTone" },
1267 { 0x0002f, "CampOnIndicationTone" },
1268 { 0x00030, "RecallDialTone" },
1269 { 0x00031, "ZipZip" },
1270 { 0x00032, "Zip" },
1271 { 0x00033, "BeepBonk" },
1272 { 0x00034, "MusicTone" },
1273 { 0x00035, "HoldTone" },
1274 { 0x00036, "TestTone" },
1275 { 0x00038, "MonitorWarningTone" },
1276 { 0x00039, "SecureWarningTone" },
1277 { 0x00040, "AddCallWaiting" },
1278 { 0x00041, "PriorityCallWait" },
1279 { 0x00042, "RecallDial" },
1280 { 0x00043, "BargIn" },
1281 { 0x00044, "DistinctAlert" },
1282 { 0x00045, "PriorityAlert" },
1283 { 0x00046, "ReminderRing" },
1284 { 0x00047, "PrecedenceRingBack" },
1285 { 0x00048, "PreemptionTone" },
1286 { 0x00049, "NonSecureWarningTone" },
1287 { 0x00050, "MF1" },
1288 { 0x00051, "MF2" },
1289 { 0x00052, "MF3" },
1290 { 0x00053, "MF4" },
1291 { 0x00054, "MF5" },
1292 { 0x00055, "MF6" },
1293 { 0x00056, "MF7" },
1294 { 0x00057, "MF8" },
1295 { 0x00058, "MF9" },
1296 { 0x00059, "MF0" },
1297 { 0x0005a, "MFKP1" },
1298 { 0x0005b, "MFST" },
1299 { 0x0005c, "MFKP2" },
1300 { 0x0005d, "MFSTP" },
1301 { 0x0005e, "MFST3P" },
1302 { 0x0005f, "MILLIWATT" },
1303 { 0x00060, "MILLIWATTTEST" },
1304 { 0x00061, "HIGHTONE" },
1305 { 0x00062, "FLASHOVERRIDE" },
1306 { 0x00063, "FLASH" },
1307 { 0x00064, "PRIORITY" },
1308 { 0x00065, "IMMEDIATE" },
1309 { 0x00066, "PREAMPWARN" },
1310 { 0x00067, "2105HZ" },
1311 { 0x00068, "2600HZ" },
1312 { 0x00069, "440HZ" },
1313 { 0x0006a, "300HZ" },
1314 { 0x0006b, "Mobility_WP" },
1315 { 0x0006c, "Mobility_UAC" },
1316 { 0x0006d, "Mobility_WTDN" },
1317 { 0x0006e, "Mobility_MON" },
1318 { 0x0006f, "Mobility_MOFF" },
1319 { 0x00070, "Mobility_UKC" },
1320 { 0x00071, "Mobility_VMA" },
1321 { 0x00072, "Mobility_FAC" },
1322 { 0x00073, "Mobility_CMC" },
1323 { 0x00077, "MLPP_PALA" },
1324 { 0x00078, "MLPP_ICA" },
1325 { 0x00079, "MLPP_VCA" },
1326 { 0x0007a, "MLPP_BPA" },
1327 { 0x0007b, "MLPP_BNEA" },
1328 { 0x0007c, "MLPP_UPA" },
1329 { 0x0007d, "TUA" },
1330 { 0x0007e, "GONE" },
1331 { 0x0007f, "NoTone" },
1332 { 0x00080, "MeetMe_Greeting" },
1333 { 0x00081, "MeetMe_NumberInvalid" },
1334 { 0x00082, "MeetMe_NumberFailed" },
1335 { 0x00083, "MeetMe_EnterPIN" },
1336 { 0x00084, "MeetMe_InvalidPIN" },
1337 { 0x00085, "MeetMe_FailedPIN" },
1338 { 0x00086, "MeetMe_CFB_Failed" },
1339 { 0x00087, "MeetMe_EnterAccessCode" },
1340 { 0x00088, "MeetMe_AccessCodeInvalid" },
1341 { 0x00089, "MeetMe_AccessCodeFailed" },
1342 { 0x0008a, "MAX" },
1343 { 0x00000, NULL }
1345 static value_string_ext DeviceTone_ext = VALUE_STRING_EXT_INIT(DeviceTone);
1347 static const value_string ToneOutputDirection[] = {
1348 { 0x00000, "User" },
1349 { 0x00001, "Network" },
1350 { 0x00002, "All" },
1351 { 0x00000, NULL }
1353 static value_string_ext ToneOutputDirection_ext = VALUE_STRING_EXT_INIT(ToneOutputDirection);
1355 static const value_string RingMode[] = {
1356 { 0x00001, "RingOff" },
1357 { 0x00002, "InsideRing" },
1358 { 0x00003, "OutsideRing" },
1359 { 0x00004, "FeatureRing" },
1360 { 0x00005, "FlashOnly" },
1361 { 0x00006, "PrecedenceRing" },
1362 { 0x00000, NULL }
1364 static value_string_ext RingMode_ext = VALUE_STRING_EXT_INIT(RingMode);
1366 static const value_string RingDuration[] = {
1367 { 0x00001, "NormalRing" },
1368 { 0x00002, "SingleRing" },
1369 { 0x00000, NULL }
1371 static value_string_ext RingDuration_ext = VALUE_STRING_EXT_INIT(RingDuration);
1373 static const value_string LampMode[] = {
1374 { 0x00001, "Off" },
1375 { 0x00002, "On" },
1376 { 0x00003, "Wink" },
1377 { 0x00004, "Flash" },
1378 { 0x00005, "Blink" },
1379 { 0x00000, NULL }
1381 static value_string_ext LampMode_ext = VALUE_STRING_EXT_INIT(LampMode);
1383 static const value_string SpeakerMode[] = {
1384 { 0x00001, "On" },
1385 { 0x00002, "Off" },
1386 { 0x00000, NULL }
1388 static value_string_ext SpeakerMode_ext = VALUE_STRING_EXT_INIT(SpeakerMode);
1390 static const value_string MicrophoneMode[] = {
1391 { 0x00001, "On" },
1392 { 0x00002, "Off" },
1393 { 0x00000, NULL }
1395 static value_string_ext MicrophoneMode_ext = VALUE_STRING_EXT_INIT(MicrophoneMode);
1397 static const value_string Media_SilenceSuppression[] = {
1398 { 0x00000, "Media_SilenceSuppression_Off" },
1399 { 0x00001, "Media_SilenceSuppression_On" },
1400 { 0x00000, NULL }
1402 static value_string_ext Media_SilenceSuppression_ext = VALUE_STRING_EXT_INIT(Media_SilenceSuppression);
1404 static const value_string MediaEncryptionAlgorithmType[] = {
1405 { 0x00000, "NO_ENCRYPTION" },
1406 { 0x00001, "CCM_AES_CM_128_HMAC_SHA1_32" },
1407 { 0x00002, "CCM_AES_CM_128_HMAC_SHA1_80" },
1408 { 0x00003, "CCM_F8_128_HMAC_SHA1_32" },
1409 { 0x00004, "CCM_F8_128_HMAC_SHA1_80" },
1410 { 0x00005, "CCM_AEAD_AES_128_GCM" },
1411 { 0x00006, "CCM_AEAD_AES_256_GCM" },
1412 { 0x00000, NULL }
1414 static value_string_ext MediaEncryptionAlgorithmType_ext = VALUE_STRING_EXT_INIT(MediaEncryptionAlgorithmType);
1416 static const value_string PortHandling[] = {
1417 { 0x00000, "CLOSE_PORT" },
1418 { 0x00001, "KEEP_PORT" },
1419 { 0x00000, NULL }
1421 static value_string_ext PortHandling_ext = VALUE_STRING_EXT_INIT(PortHandling);
1423 static const value_string CallType[] = {
1424 { 0x00001, "InBoundCall" },
1425 { 0x00002, "OutBoundCall" },
1426 { 0x00003, "ForwardCall" },
1427 { 0x00000, NULL }
1429 static value_string_ext CallType_ext = VALUE_STRING_EXT_INIT(CallType);
1431 static const value_string CallSecurityStatusType[] = {
1432 { 0x00000, "Unknown" },
1433 { 0x00001, "NotAuthenticated" },
1434 { 0x00002, "Authenticated" },
1435 { 0x00003, "Encrypted" },
1436 { 0x00004, "Max" },
1437 { 0x00000, NULL }
1439 static value_string_ext CallSecurityStatusType_ext = VALUE_STRING_EXT_INIT(CallSecurityStatusType);
1441 static const value_string SessionType[] = {
1442 { 0x00001, "Chat" },
1443 { 0x00002, "Whiteboard" },
1444 { 0x00004, "ApplicationSharing" },
1445 { 0x00008, "FileTransfer" },
1446 { 0x00010, "Video" },
1447 { 0x00000, NULL }
1449 static value_string_ext SessionType_ext = VALUE_STRING_EXT_INIT(SessionType);
1451 static const value_string ButtonType[] = {
1452 { 0x00000, "Unused" },
1453 { 0x00001, "Last Number Redial" },
1454 { 0x00002, "SpeedDial" },
1455 { 0x00003, "Hold" },
1456 { 0x00004, "Transfer" },
1457 { 0x00005, "Forward All" },
1458 { 0x00006, "Forward Busy" },
1459 { 0x00007, "Forward No Answer" },
1460 { 0x00008, "Display" },
1461 { 0x00009, "Line" },
1462 { 0x0000a, "T120 Chat" },
1463 { 0x0000b, "T120 Whiteboard" },
1464 { 0x0000c, "T120 Application Sharing" },
1465 { 0x0000d, "T120 File Transfer" },
1466 { 0x0000e, "Video" },
1467 { 0x0000f, "Voicemail" },
1468 { 0x00010, "Answer Release" },
1469 { 0x00011, "Auto Answer" },
1470 { 0x00012, "Select" },
1471 { 0x00013, "Feature" },
1472 { 0x00014, "ServiceURL" },
1473 { 0x00015, "BusyLampField Speeddial" },
1474 { 0x0001b, "Malicious Call" },
1475 { 0x00021, "Generic App B1" },
1476 { 0x00022, "Generic App B2" },
1477 { 0x00023, "Generic App B3" },
1478 { 0x00024, "Generic App B4" },
1479 { 0x00025, "Generic App B5" },
1480 { 0x00026, "Monitor/Multiblink" },
1481 { 0x0007b, "Meet Me Conference" },
1482 { 0x0007d, "Conference" },
1483 { 0x0007e, "Call Park" },
1484 { 0x0007f, "Call Pickup" },
1485 { 0x00080, "Group Call Pickup" },
1486 { 0x00081, "Mobility" },
1487 { 0x00082, "DoNotDisturb" },
1488 { 0x00083, "ConfList" },
1489 { 0x00084, "RemoveLastParticipant" },
1490 { 0x00085, "QRT" },
1491 { 0x00086, "CallBack" },
1492 { 0x00087, "OtherPickup" },
1493 { 0x00088, "VideoMode" },
1494 { 0x00089, "NewCall" },
1495 { 0x0008a, "EndCall" },
1496 { 0x0008b, "HLog" },
1497 { 0x0008f, "Queuing" },
1498 { 0x000c0, "Test E" },
1499 { 0x000c1, "Test F" },
1500 { 0x000c2, "Messages" },
1501 { 0x000c3, "Directory" },
1502 { 0x000c4, "Test I" },
1503 { 0x000c5, "Application" },
1504 { 0x000c6, "Headset" },
1505 { 0x000f0, "Keypad" },
1506 { 0x000fd, "Aec" },
1507 { 0x000ff, "Undefined" },
1508 { 0x00000, NULL }
1510 static value_string_ext ButtonType_ext = VALUE_STRING_EXT_INIT(ButtonType);
1512 static const value_string DeviceResetType[] = {
1513 { 0x00001, "RESET" },
1514 { 0x00002, "RESTART" },
1515 { 0x00003, "APPLY_CONFIG" },
1516 { 0x00000, NULL }
1518 static value_string_ext DeviceResetType_ext = VALUE_STRING_EXT_INIT(DeviceResetType);
1520 static const value_string Media_EchoCancellation[] = {
1521 { 0x00000, "Media_EchoCancellation_Off" },
1522 { 0x00001, "Media_EchoCancellation_On" },
1523 { 0x00000, NULL }
1525 static value_string_ext Media_EchoCancellation_ext = VALUE_STRING_EXT_INIT(Media_EchoCancellation);
1527 static const value_string SoftKeyTemplateIndex[] = {
1528 { 0x00001, "Redial" },
1529 { 0x00002, "NewCall" },
1530 { 0x00003, "Hold" },
1531 { 0x00004, "Transfer" },
1532 { 0x00005, "CfwdAll" },
1533 { 0x00006, "CfwdBusy" },
1534 { 0x00007, "CfwdNoAnswer" },
1535 { 0x00008, "BackSpace" },
1536 { 0x00009, "EndCall" },
1537 { 0x0000a, "Resume" },
1538 { 0x0000b, "Answer" },
1539 { 0x0000c, "Info" },
1540 { 0x0000d, "Confrn" },
1541 { 0x0000e, "Park" },
1542 { 0x0000f, "Join" },
1543 { 0x00010, "MeetMe" },
1544 { 0x00011, "PickUp" },
1545 { 0x00012, "GrpPickup" },
1546 { 0x00013, "Monitor" },
1547 { 0x00014, "CallBack" },
1548 { 0x00015, "Barge" },
1549 { 0x00016, "DND" },
1550 { 0x00017, "ConfList" },
1551 { 0x00018, "Select" },
1552 { 0x00019, "Private" },
1553 { 0x0001a, "Transfer Voicemail" },
1554 { 0x0001b, "Direct Transfer" },
1555 { 0x0001c, "Immediate Divert" },
1556 { 0x0001d, "Video Mode" },
1557 { 0x0001e, "Intercept" },
1558 { 0x0001f, "Empty" },
1559 { 0x00020, "Dial" },
1560 { 0x00021, "Conference Barge" },
1561 { 0x00000, NULL }
1563 static value_string_ext SoftKeyTemplateIndex_ext = VALUE_STRING_EXT_INIT(SoftKeyTemplateIndex);
1565 static const value_string SoftKeyInfoIndex[] = {
1566 { 0x0012d, "Redial" },
1567 { 0x0012e, "NewCall" },
1568 { 0x0012f, "Hold" },
1569 { 0x00130, "Transfer" },
1570 { 0x00131, "CfwdAll" },
1571 { 0x00132, "CfwdBusy" },
1572 { 0x00133, "CfwdNoAnswer" },
1573 { 0x00134, "BackSpace" },
1574 { 0x00135, "EndCall" },
1575 { 0x00136, "Resume" },
1576 { 0x00137, "Answer" },
1577 { 0x00138, "Info" },
1578 { 0x00139, "Confrn" },
1579 { 0x0013a, "Park" },
1580 { 0x0013b, "Join" },
1581 { 0x0013c, "MeetMe" },
1582 { 0x0013d, "PickUp" },
1583 { 0x0013e, "GrpPickup" },
1584 { 0x0013f, "Monitor" },
1585 { 0x00140, "CallBack" },
1586 { 0x00141, "Barge" },
1587 { 0x00142, "DND" },
1588 { 0x00143, "ConfList" },
1589 { 0x00144, "Select" },
1590 { 0x00145, "Private" },
1591 { 0x00146, "Transfer Voicemail" },
1592 { 0x00147, "Direct Transfer" },
1593 { 0x00148, "Immediate Divert" },
1594 { 0x00149, "Video Mode" },
1595 { 0x0014a, "Intercept" },
1596 { 0x0014b, "Empty" },
1597 { 0x0014c, "Dial" },
1598 { 0x0014d, "Conference Barge" },
1599 { 0x00000, NULL }
1601 static value_string_ext SoftKeyInfoIndex_ext = VALUE_STRING_EXT_INIT(SoftKeyInfoIndex);
1603 static const value_string DCallState[] = {
1604 { 0x00000, "Idle" },
1605 { 0x00001, "OffHook" },
1606 { 0x00002, "OnHook" },
1607 { 0x00003, "RingOut" },
1608 { 0x00004, "RingIn" },
1609 { 0x00005, "Connected" },
1610 { 0x00006, "Busy" },
1611 { 0x00007, "Congestion" },
1612 { 0x00008, "Hold" },
1613 { 0x00009, "CallWaiting" },
1614 { 0x0000a, "CallTransfer" },
1615 { 0x0000b, "CallPark" },
1616 { 0x0000c, "Proceed" },
1617 { 0x0000d, "CallRemoteMultiline" },
1618 { 0x0000e, "InvalidNumber" },
1619 { 0x0000f, "HoldRevert" },
1620 { 0x00010, "Whisper" },
1621 { 0x00011, "RemoteHold" },
1622 { 0x00012, "MaxState" },
1623 { 0x00000, NULL }
1625 static value_string_ext DCallState_ext = VALUE_STRING_EXT_INIT(DCallState);
1627 static const value_string CallPrivacy[] = {
1628 { 0x00000, "None" },
1629 { 0x00001, "Limited" },
1630 { 0x00002, "Full" },
1631 { 0x00000, NULL }
1633 static value_string_ext CallPrivacy_ext = VALUE_STRING_EXT_INIT(CallPrivacy);
1635 static const value_string DeviceUnregisterStatus[] = {
1636 { 0x00000, "Ok" },
1637 { 0x00001, "Error" },
1638 { 0x00002, "NAK" },
1639 { 0x00000, NULL }
1641 static value_string_ext DeviceUnregisterStatus_ext = VALUE_STRING_EXT_INIT(DeviceUnregisterStatus);
1643 static const value_string EndOfAnnAck[] = {
1644 { 0x00000, "NoAnnAckRequired" },
1645 { 0x00001, "AnnAckRequired" },
1646 { 0x00000, NULL }
1648 static value_string_ext EndOfAnnAck_ext = VALUE_STRING_EXT_INIT(EndOfAnnAck);
1650 static const value_string AnnPlayMode[] = {
1651 { 0x00000, "XmlConfigMode" },
1652 { 0x00001, "OneShotMode" },
1653 { 0x00002, "ContinuousMode" },
1654 { 0x00000, NULL }
1656 static value_string_ext AnnPlayMode_ext = VALUE_STRING_EXT_INIT(AnnPlayMode);
1658 static const value_string PlayAnnStatus[] = {
1659 { 0x00000, "OK" },
1660 { 0x00001, "Err" },
1661 { 0x00000, NULL }
1663 static value_string_ext PlayAnnStatus_ext = VALUE_STRING_EXT_INIT(PlayAnnStatus);
1665 #define MISCCOMMANDTYPE_VIDEOFREEZEPICTURE 0x00000
1666 #define MISCCOMMANDTYPE_VIDEOFASTUPDATEPICTURE 0x00001
1667 #define MISCCOMMANDTYPE_VIDEOFASTUPDATEGOB 0x00002
1668 #define MISCCOMMANDTYPE_VIDEOFASTUPDATEMB 0x00003
1669 #define MISCCOMMANDTYPE_LOSTPICTURE 0x00004
1670 #define MISCCOMMANDTYPE_LOSTPARTIALPICTURE 0x00005
1671 #define MISCCOMMANDTYPE_RECOVERYREFERENCEPICTURE 0x00006
1672 #define MISCCOMMANDTYPE_TEMPORALSPATIALTRADEOFF 0x00007
1674 static const value_string MiscCommandType[] = {
1675 { MISCCOMMANDTYPE_VIDEOFREEZEPICTURE, "videoFreezePicture" },
1676 { MISCCOMMANDTYPE_VIDEOFASTUPDATEPICTURE, "videoFastUpdatePicture" },
1677 { MISCCOMMANDTYPE_VIDEOFASTUPDATEGOB, "videoFastUpdateGOB" },
1678 { MISCCOMMANDTYPE_VIDEOFASTUPDATEMB, "videoFastUpdateMB" },
1679 { MISCCOMMANDTYPE_LOSTPICTURE, "lostPicture" },
1680 { MISCCOMMANDTYPE_LOSTPARTIALPICTURE, "lostPartialPicture" },
1681 { MISCCOMMANDTYPE_RECOVERYREFERENCEPICTURE, "recoveryReferencePicture" },
1682 { MISCCOMMANDTYPE_TEMPORALSPATIALTRADEOFF, "temporalSpatialTradeOff" },
1683 { 0x00000, NULL }
1685 static value_string_ext MiscCommandType_ext = VALUE_STRING_EXT_INIT(MiscCommandType);
1687 static const value_string MediaTransportType[] = {
1688 { 0x00001, "RTP" },
1689 { 0x00002, "UDP" },
1690 { 0x00003, "TCP" },
1691 { 0x00000, NULL }
1693 static value_string_ext MediaTransportType_ext = VALUE_STRING_EXT_INIT(MediaTransportType);
1695 static const value_string ResvStyle[] = {
1696 { 0x00001, "FF" },
1697 { 0x00002, "SE" },
1698 { 0x00003, "WF" },
1699 { 0x00000, NULL }
1701 static value_string_ext ResvStyle_ext = VALUE_STRING_EXT_INIT(ResvStyle);
1703 static const value_string SubscribeCause[] = {
1704 { 0x00000, "OK" },
1705 { 0x00001, "RouteFail" },
1706 { 0x00002, "AuthFail" },
1707 { 0x00003, "Timeout" },
1708 { 0x00004, "TrunkTerm" },
1709 { 0x00005, "TrunkForbidden" },
1710 { 0x00006, "Throttle" },
1711 { 0x00000, NULL }
1713 static value_string_ext SubscribeCause_ext = VALUE_STRING_EXT_INIT(SubscribeCause);
1715 static const value_string CallHistoryDisposition[] = {
1716 { 0x00000, "Ignore" },
1717 { 0x00001, "PlacedCalls" },
1718 { 0x00002, "ReceivedCalls" },
1719 { 0x00003, "MissedCalls" },
1720 { 0x0ffff, "UnknownDisp" },
1721 { 0x00000, NULL }
1723 static value_string_ext CallHistoryDisposition_ext = VALUE_STRING_EXT_INIT(CallHistoryDisposition);
1725 static const value_string MwiNotificationResult[] = {
1726 { 0x00000, "Ok" },
1727 { 0x00001, "GeneralError" },
1728 { 0x00002, "RequestRejected" },
1729 { 0x00003, "VmCountOutOfBounds" },
1730 { 0x00004, "FaxCountOutOfBounds" },
1731 { 0x00005, "InvalidPriorityVmCount" },
1732 { 0x00006, "InvalidPriorityFaxCount" },
1733 { 0x00000, NULL }
1735 static value_string_ext MwiNotificationResult_ext = VALUE_STRING_EXT_INIT(MwiNotificationResult);
1737 static const value_string RecordingStatus[] = {
1738 { 0x00000, "_OFF" },
1739 { 0x00001, "_ON" },
1740 { 0x00000, NULL }
1742 static value_string_ext RecordingStatus_ext = VALUE_STRING_EXT_INIT(RecordingStatus);
1745 /* Staticly Declared Variables */
1746 static int proto_skinny;
1747 static int hf_skinny_messageId;
1748 static int hf_skinny_data_length;
1749 static int hf_skinny_hdr_version;
1750 static int hf_skinny_xmlData;
1751 static int hf_skinny_ipv4or6;
1752 static int hf_skinny_response_in;
1753 static int hf_skinny_response_to;
1754 static int hf_skinny_response_time;
1756 static int hf_skinny_AlternateCallingParty;
1757 static int hf_skinny_CallingPartyName;
1758 static int hf_skinny_CallingPartyNumber;
1759 static int hf_skinny_DSCPValue;
1760 static int hf_skinny_DeviceName;
1761 static int hf_skinny_FutureUse1;
1762 static int hf_skinny_FutureUse2;
1763 static int hf_skinny_FutureUse3;
1764 static int hf_skinny_Generic_Bitfield_Bit1;
1765 static int hf_skinny_Generic_Bitfield_Bit10;
1766 static int hf_skinny_Generic_Bitfield_Bit11;
1767 static int hf_skinny_Generic_Bitfield_Bit12;
1768 static int hf_skinny_Generic_Bitfield_Bit13;
1769 static int hf_skinny_Generic_Bitfield_Bit14;
1770 static int hf_skinny_Generic_Bitfield_Bit15;
1771 static int hf_skinny_Generic_Bitfield_Bit16;
1772 static int hf_skinny_Generic_Bitfield_Bit17;
1773 static int hf_skinny_Generic_Bitfield_Bit18;
1774 static int hf_skinny_Generic_Bitfield_Bit19;
1775 static int hf_skinny_Generic_Bitfield_Bit2;
1776 static int hf_skinny_Generic_Bitfield_Bit20;
1777 static int hf_skinny_Generic_Bitfield_Bit21;
1778 static int hf_skinny_Generic_Bitfield_Bit22;
1779 static int hf_skinny_Generic_Bitfield_Bit23;
1780 static int hf_skinny_Generic_Bitfield_Bit24;
1781 static int hf_skinny_Generic_Bitfield_Bit25;
1782 static int hf_skinny_Generic_Bitfield_Bit26;
1783 static int hf_skinny_Generic_Bitfield_Bit27;
1784 static int hf_skinny_Generic_Bitfield_Bit28;
1785 static int hf_skinny_Generic_Bitfield_Bit29;
1786 static int hf_skinny_Generic_Bitfield_Bit3;
1787 static int hf_skinny_Generic_Bitfield_Bit30;
1788 static int hf_skinny_Generic_Bitfield_Bit31;
1789 static int hf_skinny_Generic_Bitfield_Bit32;
1790 static int hf_skinny_Generic_Bitfield_Bit4;
1791 static int hf_skinny_Generic_Bitfield_Bit5;
1792 static int hf_skinny_Generic_Bitfield_Bit6;
1793 static int hf_skinny_Generic_Bitfield_Bit7;
1794 static int hf_skinny_Generic_Bitfield_Bit8;
1795 static int hf_skinny_Generic_Bitfield_Bit9;
1796 static int hf_skinny_HuntPilotName;
1797 static int hf_skinny_HuntPilotNumber;
1798 static int hf_skinny_MPI;
1799 static int hf_skinny_OrigDialed;
1800 static int hf_skinny_PhoneFeatures_Abbreviated_Dial;
1801 static int hf_skinny_PhoneFeatures_Bit1;
1802 static int hf_skinny_PhoneFeatures_Bit11;
1803 static int hf_skinny_PhoneFeatures_Bit12;
1804 static int hf_skinny_PhoneFeatures_Bit13;
1805 static int hf_skinny_PhoneFeatures_Bit14;
1806 static int hf_skinny_PhoneFeatures_Bit15;
1807 static int hf_skinny_PhoneFeatures_Bit2;
1808 static int hf_skinny_PhoneFeatures_Bit3;
1809 static int hf_skinny_PhoneFeatures_Bit4;
1810 static int hf_skinny_PhoneFeatures_Bit6;
1811 static int hf_skinny_PhoneFeatures_Bit7;
1812 static int hf_skinny_PhoneFeatures_Bit9;
1813 static int hf_skinny_PhoneFeatures_DynamicMessages;
1814 static int hf_skinny_PhoneFeatures_RFC2833;
1815 static int hf_skinny_PhoneFeatures_UTF8;
1816 static int hf_skinny_RFC2833PayloadType;
1817 static int hf_skinny_RTCPPortNumber;
1818 static int hf_skinny_RedirDialed;
1819 static int hf_skinny_RestrictInformationType_BitsReserved;
1820 static int hf_skinny_RestrictInformationType_CalledParty;
1821 static int hf_skinny_RestrictInformationType_CalledPartyName;
1822 static int hf_skinny_RestrictInformationType_CalledPartyNumber;
1823 static int hf_skinny_RestrictInformationType_CallingParty;
1824 static int hf_skinny_RestrictInformationType_CallingPartyName;
1825 static int hf_skinny_RestrictInformationType_CallingPartyNumber;
1826 static int hf_skinny_RestrictInformationType_LastRedirectParty;
1827 static int hf_skinny_RestrictInformationType_LastRedirectPartyName;
1828 static int hf_skinny_RestrictInformationType_LastRedirectPartyNumber;
1829 static int hf_skinny_RestrictInformationType_OriginalCalledParty;
1830 static int hf_skinny_RestrictInformationType_OriginalCalledPartyName;
1831 static int hf_skinny_RestrictInformationType_OriginalCalledPartyNumber;
1832 static int hf_skinny_ServerName;
1833 static int hf_skinny_SoftKeyMask_SoftKey1;
1834 static int hf_skinny_SoftKeyMask_SoftKey10;
1835 static int hf_skinny_SoftKeyMask_SoftKey11;
1836 static int hf_skinny_SoftKeyMask_SoftKey12;
1837 static int hf_skinny_SoftKeyMask_SoftKey13;
1838 static int hf_skinny_SoftKeyMask_SoftKey14;
1839 static int hf_skinny_SoftKeyMask_SoftKey15;
1840 static int hf_skinny_SoftKeyMask_SoftKey16;
1841 static int hf_skinny_SoftKeyMask_SoftKey2;
1842 static int hf_skinny_SoftKeyMask_SoftKey3;
1843 static int hf_skinny_SoftKeyMask_SoftKey4;
1844 static int hf_skinny_SoftKeyMask_SoftKey5;
1845 static int hf_skinny_SoftKeyMask_SoftKey6;
1846 static int hf_skinny_SoftKeyMask_SoftKey7;
1847 static int hf_skinny_SoftKeyMask_SoftKey8;
1848 static int hf_skinny_SoftKeyMask_SoftKey9;
1849 static int hf_skinny_active;
1850 static int hf_skinny_activeConferenceOnRegistration;
1851 static int hf_skinny_activeConferences;
1852 static int hf_skinny_activeForward;
1853 static int hf_skinny_activeStreams;
1854 static int hf_skinny_activeStreamsOnRegistration;
1855 static int hf_skinny_add_participant_result;
1856 static int hf_skinny_alarmInfo;
1857 static int hf_skinny_alarmSeverity;
1858 static int hf_skinny_algorithmID;
1859 static int hf_skinny_alignmentPadding;
1860 static int hf_skinny_annAckReq;
1861 static int hf_skinny_annPlayMode;
1862 static int hf_skinny_annStatus;
1863 static int hf_skinny_annexNandWFutureUse;
1864 static int hf_skinny_appConfID;
1865 static int hf_skinny_appData;
1866 static int hf_skinny_appInstanceID;
1867 static int hf_skinny_appName;
1868 static int hf_skinny_applicationId;
1869 static int hf_skinny_areMessagesWaiting;
1870 static int hf_skinny_associatedStreamId;
1871 static int hf_skinny_audioCapCount;
1872 static int hf_skinny_audioLevelAdjustment;
1873 static int hf_skinny_audit_participant_result;
1874 static int hf_skinny_averageBitRate;
1875 static int hf_skinny_bandwidth;
1876 static int hf_skinny_bitRate;
1877 static int hf_skinny_bridgeParticipantId;
1878 static int hf_skinny_burstSize;
1879 static int hf_skinny_busyTrigger;
1880 static int hf_skinny_buttonCount;
1881 static int hf_skinny_buttonDefinition;
1882 static int hf_skinny_buttonOffset;
1883 static int hf_skinny_callHistoryDisposition;
1884 static int hf_skinny_callInstance;
1885 static int hf_skinny_callReference;
1886 static int hf_skinny_callSecurityStatus;
1887 static int hf_skinny_callSelectStat;
1888 static int hf_skinny_callState;
1889 static int hf_skinny_callType;
1890 static int hf_skinny_calledParty;
1891 static int hf_skinny_calledPartyName;
1892 static int hf_skinny_callingParty;
1893 static int hf_skinny_callingPartyName;
1894 static int hf_skinny_callingPartyNumber;
1895 static int hf_skinny_capAndVer;
1896 static int hf_skinny_capCount;
1897 static int hf_skinny_cause;
1898 static int hf_skinny_cdpnVoiceMailbox;
1899 static int hf_skinny_cgpnVoiceMailbox;
1900 static int hf_skinny_chan0MaxPayload;
1901 static int hf_skinny_chan2MaxPayload;
1902 static int hf_skinny_chan2MaxWindow;
1903 static int hf_skinny_chan3MaxPayload;
1904 static int hf_skinny_clockConversionCode;
1905 static int hf_skinny_clockDivisor;
1906 static int hf_skinny_codecMode;
1907 static int hf_skinny_codecParam1;
1908 static int hf_skinny_codecParam2;
1909 static int hf_skinny_command;
1910 static int hf_skinny_compressionType;
1911 static int hf_skinny_confServiceNum;
1912 static int hf_skinny_conferenceId;
1913 static int hf_skinny_conferenceName;
1914 static int hf_skinny_configVersionStamp;
1915 static int hf_skinny_confirmRequired;
1916 static int hf_skinny_country;
1917 static int hf_skinny_customMaxBRandCPB;
1918 static int hf_skinny_customMaxDPB;
1919 static int hf_skinny_customMaxFS;
1920 static int hf_skinny_customMaxMBPS;
1921 static int hf_skinny_customPictureFormatCount;
1922 static int hf_skinny_data;
1923 static int hf_skinny_dataCapCount;
1924 static int hf_skinny_dataCapabilityDirection;
1925 static int hf_skinny_dataLength;
1926 static int hf_skinny_dataSize;
1927 static int hf_skinny_dateTemplate;
1928 static int hf_skinny_defendingPriority;
1929 static int hf_skinny_delete_conf_result;
1930 static int hf_skinny_deviceType;
1931 static int hf_skinny_dialedNumber;
1932 static int hf_skinny_direction;
1933 static int hf_skinny_directoryNum;
1934 static int hf_skinny_displayPriority;
1935 static int hf_skinny_dtmfType;
1936 static int hf_skinny_dynamicPayload;
1937 static int hf_skinny_ecValue;
1938 static int hf_skinny_encryptionCapability;
1939 static int hf_skinny_errorCode;
1940 static int hf_skinny_failureNodeIpAddr;
1941 static int hf_skinny_featureCapabilities;
1942 static int hf_skinny_featureID;
1943 static int hf_skinny_featureIndex;
1944 static int hf_skinny_featureStatus;
1945 static int hf_skinny_featureTextLabel;
1946 static int hf_skinny_features;
1947 static int hf_skinny_firmwareLoadName;
1948 static int hf_skinny_firstGOB;
1949 static int hf_skinny_firstMB;
1950 static int hf_skinny_format;
1951 static int hf_skinny_forwardAllActive;
1952 static int hf_skinny_forwardAllDirnum;
1953 static int hf_skinny_forwardBusyActive;
1954 static int hf_skinny_forwardBusyDirnum;
1955 static int hf_skinny_forwardNoAnswerActive;
1956 static int hf_skinny_forwardNoAnswerlDirnum;
1957 static int hf_skinny_g723BitRate;
1958 static int hf_skinny_headsetStatus;
1959 static int hf_skinny_hearingConfPartyMask;
1960 static int hf_skinny_instance;
1961 static int hf_skinny_instanceNumber;
1962 static int hf_skinny_ipAddr_ipv4;
1963 static int hf_skinny_ipAddr_ipv6;
1964 static int hf_skinny_ipAddressType;
1965 static int hf_skinny_ipAddressingMode;
1966 static int hf_skinny_ipV4AddressScope;
1967 static int hf_skinny_ipV6AddressScope;
1968 static int hf_skinny_isConferenceCreator;
1969 static int hf_skinny_isMKIPresent;
1970 static int hf_skinny_jitter;
1971 static int hf_skinny_keepAliveInterval;
1972 static int hf_skinny_key;
1973 static int hf_skinny_keyDerivationRate;
1974 static int hf_skinny_keylen;
1975 static int hf_skinny_kpButton;
1976 static int hf_skinny_lampMode;
1977 static int hf_skinny_last;
1978 static int hf_skinny_lastRedirectingParty;
1979 static int hf_skinny_lastRedirectingPartyName;
1980 static int hf_skinny_lastRedirectingReason;
1981 static int hf_skinny_lastRedirectingVoiceMailbox;
1982 static int hf_skinny_latency;
1983 static int hf_skinny_layoutCount;
1984 static int hf_skinny_layoutID;
1985 static int hf_skinny_layouts;
1986 static int hf_skinny_level;
1987 static int hf_skinny_levelPreferenceCount;
1988 static int hf_skinny_lineDataEntries;
1989 static int hf_skinny_lineDirNumber;
1990 static int hf_skinny_lineDisplayOptions;
1991 static int hf_skinny_lineFullyQualifiedDisplayName;
1992 static int hf_skinny_lineInstance;
1993 static int hf_skinny_lineNumber;
1994 static int hf_skinny_lineTextLabel;
1995 static int hf_skinny_locale;
1996 static int hf_skinny_locationInfo;
1997 static int hf_skinny_longTermPictureIndex;
1998 static int hf_skinny_macAddress;
1999 static int hf_skinny_matrixConfPartyID;
2000 static int hf_skinny_maxBW;
2001 static int hf_skinny_maxBitRate;
2002 static int hf_skinny_maxConferences;
2003 static int hf_skinny_maxFramesPerPacket;
2004 static int hf_skinny_maxNumCalls;
2005 static int hf_skinny_maxNumOfAvailLines;
2006 static int hf_skinny_maxNumberOfLines;
2007 static int hf_skinny_maxProtocolVer;
2008 static int hf_skinny_maxRetryNumber;
2009 static int hf_skinny_maxStreams;
2010 static int hf_skinny_maxStreamsPerConf;
2011 static int hf_skinny_maximumBitRate;
2012 static int hf_skinny_mediaPathCapabilities;
2013 static int hf_skinny_mediaPathEvent;
2014 static int hf_skinny_mediaPathID;
2015 static int hf_skinny_mediaReceptionStatus;
2016 static int hf_skinny_mediaTransmissionStatus;
2017 static int hf_skinny_mediaTransportType;
2018 static int hf_skinny_mediaType;
2019 static int hf_skinny_micMode;
2020 static int hf_skinny_milliSecondPacketSize;
2021 static int hf_skinny_minBitRate;
2022 static int hf_skinny_mixingMode;
2023 static int hf_skinny_modAnd2833;
2024 static int hf_skinny_modelNumber;
2025 static int hf_skinny_modify_conf_result;
2026 static int hf_skinny_multicastIpAddr_ipv4;
2027 static int hf_skinny_multicastIpAddr_ipv6;
2028 static int hf_skinny_multicastPortNumber;
2029 static int hf_skinny_multicastReceptionStatus;
2030 static int hf_skinny_multimediaReceptionStatus;
2031 static int hf_skinny_multimediaTransmissionStatus;
2032 static int hf_skinny_mwiControlNumber;
2033 static int hf_skinny_mwiTargetNumber;
2034 static int hf_skinny_mwi_notification_result;
2035 static int hf_skinny_noaudio;
2036 static int hf_skinny_none;
2037 static int hf_skinny_notificationStatus;
2038 static int hf_skinny_notify;
2039 static int hf_skinny_nse;
2040 static int hf_skinny_numNewMsgs;
2041 static int hf_skinny_numOldMsgs;
2042 static int hf_skinny_numberOctetsReceived;
2043 static int hf_skinny_numberOctetsSent;
2044 static int hf_skinny_numberOfActiveParticipants;
2045 static int hf_skinny_numberOfEntries;
2046 static int hf_skinny_numberOfGOBs;
2047 static int hf_skinny_numberOfInServiceStreams;
2048 static int hf_skinny_numberOfLines;
2049 static int hf_skinny_numberOfMBs;
2050 static int hf_skinny_numberOfOutOfServiceStreams;
2051 static int hf_skinny_numberOfReservedParticipants;
2052 static int hf_skinny_numberOfSpeedDials;
2053 static int hf_skinny_numberPacketsLost;
2054 static int hf_skinny_numberPacketsReceived;
2055 static int hf_skinny_numberPacketsSent;
2056 static int hf_skinny_originalCalledParty;
2057 static int hf_skinny_originalCalledPartyName;
2058 static int hf_skinny_originalCdpnRedirectReason;
2059 static int hf_skinny_originalCdpnVoiceMailbox;
2060 static int hf_skinny_padding;
2061 static int hf_skinny_parm1;
2062 static int hf_skinny_parm2;
2063 static int hf_skinny_participantEntry;
2064 static int hf_skinny_participantName;
2065 static int hf_skinny_participantNumber;
2066 static int hf_skinny_partyDirection;
2067 static int hf_skinny_passThroughPartyId;
2068 static int hf_skinny_passThruData;
2069 static int hf_skinny_passthruPartyID;
2070 static int hf_skinny_payloadCapability;
2071 static int hf_skinny_payloadDtmf;
2072 static int hf_skinny_payloadType;
2073 static int hf_skinny_payload_rfc_number;
2074 static int hf_skinny_peakRate;
2075 static int hf_skinny_pictureFormatCount;
2076 static int hf_skinny_pictureHeight;
2077 static int hf_skinny_pictureNumber;
2078 static int hf_skinny_pictureWidth;
2079 static int hf_skinny_pixelAspectRatio;
2080 static int hf_skinny_portHandlingFlag;
2081 static int hf_skinny_portNumber;
2082 static int hf_skinny_precedenceDomain;
2083 static int hf_skinny_precedenceLevel;
2084 static int hf_skinny_precedenceValue;
2085 static int hf_skinny_preemptionPriority;
2086 static int hf_skinny_priority;
2087 static int hf_skinny_privacy;
2088 static int hf_skinny_profile;
2089 static int hf_skinny_promptStatus;
2090 static int hf_skinny_protocolDependentData;
2091 static int hf_skinny_protocolVer;
2092 static int hf_skinny_recording_status;
2093 static int hf_skinny_recoveryReferencePictureCount;
2094 static int hf_skinny_remoteIpAddr_ipv4;
2095 static int hf_skinny_remoteIpAddr_ipv6;
2096 static int hf_skinny_remotePortNumber;
2097 static int hf_skinny_requestedIpAddrType;
2098 static int hf_skinny_reserved_for_future_use;
2099 static int hf_skinny_resetType;
2100 static int hf_skinny_resourceType;
2101 static int hf_skinny_result;
2102 static int hf_skinny_resvStyle;
2103 static int hf_skinny_retryTimer;
2104 static int hf_skinny_rfc2833;
2105 static int hf_skinny_ringDuration;
2106 static int hf_skinny_ringMode;
2107 static int hf_skinny_routingID;
2108 static int hf_skinny_rsvpErrorCode;
2109 static int hf_skinny_rsvpErrorFlag;
2110 static int hf_skinny_rsvpErrorSubCodeVal;
2111 static int hf_skinny_rtpMediaPort;
2112 static int hf_skinny_rtpPayloadFormat;
2113 static int hf_skinny_salt;
2114 static int hf_skinny_saltlen;
2115 static int hf_skinny_secondaryKeepAliveInterval;
2116 static int hf_skinny_sequenceFlag;
2117 static int hf_skinny_serverName;
2118 static int hf_skinny_serverTcpListenPort;
2119 static int hf_skinny_serviceNum;
2120 static int hf_skinny_serviceNumber;
2121 static int hf_skinny_serviceResourceCount;
2122 static int hf_skinny_serviceURL;
2123 static int hf_skinny_serviceURLDisplayName;
2124 static int hf_skinny_serviceURLIndex;
2125 static int hf_skinny_sessionType;
2126 static int hf_skinny_softKeyCount;
2127 static int hf_skinny_softKeyEvent;
2128 static int hf_skinny_softKeyInfoIndex;
2129 static int hf_skinny_softKeyLabel;
2130 static int hf_skinny_softKeyOffset;
2131 static int hf_skinny_softKeySetCount;
2132 static int hf_skinny_softKeySetIndex;
2133 static int hf_skinny_softKeySetOffset;
2134 static int hf_skinny_softKeyTemplateIndex;
2135 static int hf_skinny_sourceIpAddr_ipv4;
2136 static int hf_skinny_sourceIpAddr_ipv6;
2137 static int hf_skinny_sourcePortNumber;
2138 static int hf_skinny_speakerMode;
2139 static int hf_skinny_speedDialDirNumber;
2140 static int hf_skinny_speedDialDisplayName;
2141 static int hf_skinny_speedDialNumber;
2142 static int hf_skinny_ssValue;
2143 static int hf_skinny_sse;
2144 static int hf_skinny_standard;
2145 static int hf_skinny_startingLineInstance;
2146 static int hf_skinny_stationIpAddr;
2147 static int hf_skinny_stationIpAddr_ipv4;
2148 static int hf_skinny_stationIpAddr_ipv6;
2149 static int hf_skinny_stationIpV6Addr;
2150 static int hf_skinny_stationIpV6Addr_ipv4;
2151 static int hf_skinny_stationIpV6Addr_ipv6;
2152 static int hf_skinny_statsProcessingMode;
2153 static int hf_skinny_status;
2154 static int hf_skinny_stillImageTransmission;
2155 static int hf_skinny_stimulus;
2156 static int hf_skinny_stimulusInstance;
2157 static int hf_skinny_stimulusStatus;
2158 static int hf_skinny_streamPassThroughId;
2159 static int hf_skinny_subAppID;
2160 static int hf_skinny_subscriptionFeatureID;
2161 static int hf_skinny_subscriptionID;
2162 static int hf_skinny_systemTime;
2163 static int hf_skinny_temporalSpatialTradeOff;
2164 static int hf_skinny_temporalSpatialTradeOffCapability;
2165 static int hf_skinny_text;
2166 static int hf_skinny_timeOutValue;
2167 static int hf_skinny_timer;
2168 static int hf_skinny_tone;
2169 static int hf_skinny_toneAnnouncement;
2170 static int hf_skinny_tone_output_direction;
2171 static int hf_skinny_totalButtonCount;
2172 static int hf_skinny_totalNumOfConfiguredLines;
2173 static int hf_skinny_totalSoftKeyCount;
2174 static int hf_skinny_totalSoftKeySetCount;
2175 static int hf_skinny_transactionId;
2176 static int hf_skinny_transmitIpAddr_ipv4;
2177 static int hf_skinny_transmitIpAddr_ipv6;
2178 static int hf_skinny_transmitPreference;
2179 static int hf_skinny_unRegReasonCode;
2180 static int hf_skinny_unknown;
2181 static int hf_skinny_unknown1_0159;
2182 static int hf_skinny_unknown2_0159;
2183 static int hf_skinny_unknown3_0159;
2184 static int hf_skinny_unknownString_0159;
2185 static int hf_skinny_userName;
2186 static int hf_skinny_v150sprt;
2187 static int hf_skinny_vendor;
2188 static int hf_skinny_vendorID;
2189 static int hf_skinny_version;
2190 static int hf_skinny_versionStr;
2191 static int hf_skinny_videoCapCount;
2192 static int hf_skinny_videoCapabilityDirection;
2193 static int hf_skinny_wDay;
2194 static int hf_skinny_wDayOfWeek;
2195 static int hf_skinny_wHour;
2196 static int hf_skinny_wMilliseconds;
2197 static int hf_skinny_wMinute;
2198 static int hf_skinny_wMonth;
2199 static int hf_skinny_wSecond;
2200 static int hf_skinny_wYear;
2201 static int hf_skinny_waitTimeBeforeNextReq;
2202 static int hf_skinny_xmldata;
2204 static dissector_handle_t xml_handle;
2206 /* Initialize the subtree pointers */
2207 static int ett_skinny;
2208 static int ett_skinny_tree;
2210 /* preference globals */
2211 static bool global_skinny_desegment = true;
2213 /* tap register id */
2214 static int skinny_tap;
2216 /* skinny protocol tap info */
2217 #define MAX_SKINNY_MESSAGES_IN_PACKET 10
2218 static skinny_info_t pi_arr[MAX_SKINNY_MESSAGES_IN_PACKET];
2219 static int pi_current;
2220 static skinny_info_t *si;
2222 dissector_handle_t skinny_handle;
2224 /* Get the length of a single SKINNY PDU */
2225 static unsigned
2226 get_skinny_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *data _U_)
2228 uint32_t hdr_data_length;
2230 /* Get the length of the SKINNY packet. */
2231 hdr_data_length = tvb_get_letohl(tvb, offset);
2233 /* That length doesn't include the length of the header itself. */
2234 return hdr_data_length + 8;
2237 static void
2238 dissect_skinny_xml(ptvcursor_t *cursor, int hfindex, packet_info *pinfo, uint32_t length, uint32_t maxlength)
2240 proto_item *item = NULL;
2241 proto_tree *subtree = NULL;
2242 proto_tree *tree = ptvcursor_tree(cursor);
2243 uint32_t offset = ptvcursor_current_offset(cursor);
2244 tvbuff_t *tvb = ptvcursor_tvbuff(cursor);
2245 tvbuff_t *next_tvb;
2247 if (length == 0) {
2248 length = tvb_strnlen(tvb, offset, -1);
2250 if (length >= maxlength) {
2251 length = maxlength;
2254 ptvcursor_add_no_advance(cursor, hfindex, length, ENC_ASCII);
2256 item = proto_tree_add_item(tree, hf_skinny_xmlData, tvb, offset, length, ENC_ASCII);
2257 subtree = proto_item_add_subtree(item, 0);
2258 next_tvb = tvb_new_subset_length_caplen(tvb, offset, length, -1);
2259 if (xml_handle != NULL) {
2260 call_dissector(xml_handle, next_tvb, pinfo, subtree);
2262 ptvcursor_advance(cursor, maxlength);
2265 static void
2266 dissect_skinny_ipv4or6(ptvcursor_t *cursor, int hfindex_ipv4, int hfindex_ipv6)
2268 uint32_t ipversion = 0;
2269 uint32_t offset = ptvcursor_current_offset(cursor);
2270 tvbuff_t *tvb = ptvcursor_tvbuff(cursor);
2271 uint32_t hdr_version = tvb_get_letohl(tvb, 4);
2273 /* ProtocolVersion > 18 include and extra field to declare IPv4 (0) / IPv6 (1) */
2274 if (hdr_version >= V17_MSG_TYPE) {
2275 ipversion = tvb_get_letohl(tvb, offset);
2276 ptvcursor_add(cursor, hf_skinny_ipv4or6, 4, ENC_LITTLE_ENDIAN);
2278 if (ipversion == IPADDRTYPE_IPV4) {
2279 ptvcursor_add(cursor, hfindex_ipv4, 4, ENC_BIG_ENDIAN);
2280 if (hdr_version >= V17_MSG_TYPE) {
2281 /* skip over the extra room for ipv6 addresses */
2282 ptvcursor_advance(cursor, 12);
2284 } else if (ipversion == IPADDRTYPE_IPV6 || ipversion == IPADDRTYPE_IPV4_V6) {
2285 ptvcursor_add(cursor, hfindex_ipv6, 16, ENC_NA);
2286 } else {
2287 /* Invalid : skip over ipv6 space completely */
2288 ptvcursor_advance(cursor, 16);
2292 /* Reads address to provided variable */
2293 static void
2294 read_skinny_ipv4or6(ptvcursor_t *cursor, address *media_addr)
2296 uint32_t ipversion = IPADDRTYPE_IPV4;
2297 uint32_t offset = ptvcursor_current_offset(cursor);
2298 uint32_t offset2 = 0;
2299 tvbuff_t *tvb = ptvcursor_tvbuff(cursor);
2300 uint32_t hdr_version = tvb_get_letohl(tvb, 4);
2302 /* ProtocolVersion > 18 include and extra field to declare IPv4 (0) / IPv6 (1) */
2303 if (hdr_version >= V17_MSG_TYPE) {
2304 ipversion = tvb_get_letohl(tvb, offset);
2305 offset2 = 4;
2307 if (ipversion == IPADDRTYPE_IPV4) {
2308 set_address_tvb(media_addr, AT_IPv4, 4, tvb, offset+offset2);
2309 } else if (ipversion == IPADDRTYPE_IPV6 || ipversion == IPADDRTYPE_IPV4_V6) {
2310 set_address_tvb(media_addr, AT_IPv6, 16, tvb, offset+offset2);
2311 } else {
2312 clear_address(media_addr);
2317 * Parse a displayLabel string and check if it is using any embedded labels, if so lookup the label and add a user readable translation to the item_tree
2319 static void
2320 dissect_skinny_displayLabel(ptvcursor_t *cursor, packet_info *pinfo, int hfindex, int length)
2322 proto_item *item = NULL;
2323 proto_tree *tree = ptvcursor_tree(cursor);
2324 uint32_t offset = ptvcursor_current_offset(cursor);
2325 tvbuff_t *tvb = ptvcursor_tvbuff(cursor);
2326 wmem_strbuf_t *wmem_new = NULL;
2327 char *disp_string = NULL;
2328 const char *replacestr = NULL;
2329 bool show_replaced_str = false;
2330 int x = 0;
2332 if (length == 0) {
2333 length = tvb_strnlen(tvb, offset, -1);
2334 if (length == -1) {
2335 /* did not find end of string */
2336 length = tvb_captured_length_remaining(tvb, offset);
2340 item = proto_tree_add_item(tree, hfindex, tvb, offset, length, ENC_ASCII);
2342 wmem_new = wmem_strbuf_new_sized(pinfo->pool, length + 1);
2343 disp_string = (char*) wmem_alloc(pinfo->pool, length + 1);
2344 disp_string[length] = '\0';
2345 tvb_memcpy(tvb, (void*)disp_string, offset, length);
2347 for (x = 0; x < length && disp_string[x] != '\0'; x++) {
2348 replacestr = NULL;
2349 if (x + 1 < length) {
2350 if (disp_string[x] == '\36') {
2351 replacestr = try_val_to_str_ext(disp_string[x + 1], &DisplayLabels_36_ext);
2352 } else if (disp_string[x] == '\200') {
2353 replacestr = try_val_to_str_ext(disp_string[x + 1], &DisplayLabels_200_ext);
2356 if (replacestr) {
2357 x++; /* swallow replaced characters */
2358 wmem_strbuf_append(wmem_new, replacestr);
2359 show_replaced_str = true;
2360 } else if (disp_string[x] & 0x80) {
2361 wmem_strbuf_append_unichar_repl(wmem_new);
2362 } else {
2363 wmem_strbuf_append_c(wmem_new, disp_string[x]);
2366 if (show_replaced_str) {
2367 si->additionalInfo = ws_strdup_printf("\"%s\"", wmem_strbuf_get_str(wmem_new));
2368 proto_item_append_text(item, " => \"%s\"" , wmem_strbuf_get_str(wmem_new));
2370 ptvcursor_advance(cursor, length);
2373 /*** Request / Response helper functions */
2374 static void skinny_reqrep_add_request(ptvcursor_t *cursor, packet_info * pinfo, skinny_conv_info_t * skinny_conv, const int request_key)
2376 proto_tree *tree = ptvcursor_tree(cursor);
2377 tvbuff_t *tvb = ptvcursor_tvbuff(cursor);
2378 skinny_req_resp_t *req_resp = NULL;
2380 if (!PINFO_FD_VISITED(pinfo)) {
2381 req_resp = wmem_new0(wmem_file_scope(), skinny_req_resp_t);
2382 req_resp->request_frame = pinfo->num;
2383 req_resp->response_frame = 0;
2384 req_resp->request_time = pinfo->abs_ts;
2385 wmem_map_insert(skinny_conv->pending_req_resp, GINT_TO_POINTER(request_key), (void *)req_resp);
2386 DPRINT(("SKINNY: setup_request: frame=%d add key=%d to map\n", pinfo->num, request_key));
2389 req_resp = (skinny_req_resp_t *) wmem_map_lookup(skinny_conv->requests, GUINT_TO_POINTER(pinfo->num));
2390 if (req_resp && req_resp->response_frame) {
2391 DPRINT(("SKINNY: show request in tree: frame/key=%d\n", pinfo->num));
2392 proto_item *it;
2393 it = proto_tree_add_uint(tree, hf_skinny_response_in, tvb, 0, 0, req_resp->response_frame);
2394 proto_item_set_generated(it);
2395 } else {
2396 DPRINT(("SKINNY: no request found for frame/key=%d\n", pinfo->num));
2401 static void skinny_reqrep_add_response(ptvcursor_t *cursor, packet_info * pinfo, skinny_conv_info_t * skinny_conv, const int request_key)
2403 proto_tree *tree = ptvcursor_tree(cursor);
2404 tvbuff_t *tvb = ptvcursor_tvbuff(cursor);
2405 skinny_req_resp_t *req_resp = NULL;
2407 if (!PINFO_FD_VISITED(pinfo)) {
2408 req_resp = (skinny_req_resp_t *) wmem_map_remove(skinny_conv->pending_req_resp, GINT_TO_POINTER(request_key));
2409 if (req_resp) {
2410 DPRINT(("SKINNY: match request:%d with response:%d for key=%d\n", req_resp->request_frame, pinfo->num, request_key));
2411 req_resp->response_frame = pinfo->num;
2412 wmem_map_insert(skinny_conv->requests, GUINT_TO_POINTER(req_resp->request_frame), (void *)req_resp);
2413 wmem_map_insert(skinny_conv->responses, GUINT_TO_POINTER(pinfo->num), (void *)req_resp);
2414 } else {
2415 DPRINT(("SKINNY: no match found for response frame=%d and key=%d\n", pinfo->num, request_key));
2419 req_resp = (skinny_req_resp_t *) wmem_map_lookup(skinny_conv->responses, GUINT_TO_POINTER(pinfo->num));
2420 if (req_resp && req_resp->request_frame) {
2421 DPRINT(("SKINNY: show response in tree: frame/key=%d\n", pinfo->num));
2422 proto_item *it;
2423 nstime_t ns;
2424 it = proto_tree_add_uint(tree, hf_skinny_response_to, tvb, 0, 0, req_resp->request_frame);
2425 proto_item_set_generated(it);
2427 nstime_delta(&ns, &pinfo->abs_ts, &req_resp->request_time);
2428 it = proto_tree_add_time(tree, hf_skinny_response_time, tvb, 0, 0, &ns);
2429 proto_item_set_generated(it);
2430 } else {
2431 DPRINT(("SKINNY: no response found for frame/key=%d\n", pinfo->num));
2435 /*** Messages Handlers ***/
2437 * Message: RegisterReqMessage
2438 * Opcode: 0x0001
2439 * Type: RegistrationAndManagement
2440 * Direction: dev2pbx
2441 * VarLength: no
2442 * MsgType: request
2444 static void
2445 handle_RegisterReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2447 uint32_t hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2450 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
2451 ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII);
2452 ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
2453 ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
2454 ptvcursor_pop_subtree(cursor);
2456 ptvcursor_add(cursor, hf_skinny_stationIpAddr, 4, ENC_BIG_ENDIAN);
2457 ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN);
2458 ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
2459 if (hdr_data_length > 52) {
2460 ptvcursor_add(cursor, hf_skinny_activeStreams, 4, ENC_LITTLE_ENDIAN);
2461 ptvcursor_add(cursor, hf_skinny_protocolVer, 1, ENC_LITTLE_ENDIAN);
2462 ptvcursor_add(cursor, hf_skinny_unknown, 1, ENC_LITTLE_ENDIAN);
2463 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "phoneFeatures");
2464 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit1, 2, ENC_LITTLE_ENDIAN);
2465 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit2, 2, ENC_LITTLE_ENDIAN);
2466 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit3, 2, ENC_LITTLE_ENDIAN);
2467 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit4, 2, ENC_LITTLE_ENDIAN);
2468 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_UTF8, 2, ENC_LITTLE_ENDIAN);
2469 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit6, 2, ENC_LITTLE_ENDIAN);
2470 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit7, 2, ENC_LITTLE_ENDIAN);
2471 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_DynamicMessages, 2, ENC_LITTLE_ENDIAN);
2472 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit9, 2, ENC_LITTLE_ENDIAN);
2473 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_RFC2833, 2, ENC_LITTLE_ENDIAN);
2474 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit11, 2, ENC_LITTLE_ENDIAN);
2475 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit12, 2, ENC_LITTLE_ENDIAN);
2476 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit13, 2, ENC_LITTLE_ENDIAN);
2477 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit14, 2, ENC_LITTLE_ENDIAN);
2478 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit15, 2, ENC_LITTLE_ENDIAN);
2479 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Abbreviated_Dial, 2, ENC_LITTLE_ENDIAN);
2480 ptvcursor_advance(cursor, 2);
2481 ptvcursor_pop_subtree(cursor); /* end bitfield: phoneFeatures */
2482 ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
2484 if (hdr_data_length > 100) {
2485 ptvcursor_add(cursor, hf_skinny_activeConferences, 4, ENC_LITTLE_ENDIAN);
2486 ptvcursor_add(cursor, hf_skinny_macAddress, 6, ENC_NA);
2487 ptvcursor_advance(cursor, 12 - 6);
2488 ptvcursor_add(cursor, hf_skinny_ipV4AddressScope, 4, ENC_LITTLE_ENDIAN);
2489 ptvcursor_add(cursor, hf_skinny_maxNumberOfLines, 4, ENC_LITTLE_ENDIAN);
2490 ptvcursor_add(cursor, hf_skinny_stationIpV6Addr, 16, ENC_NA);
2491 ptvcursor_add(cursor, hf_skinny_ipV6AddressScope, 4, ENC_LITTLE_ENDIAN);
2492 ptvcursor_add(cursor, hf_skinny_firmwareLoadName, 32, ENC_ASCII);
2494 if (hdr_data_length > 191) {
2495 ptvcursor_add(cursor, hf_skinny_configVersionStamp, 48, ENC_ASCII);
2497 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0001);
2501 * Message: IpPortMessage
2502 * Opcode: 0x0002
2503 * Type: CallControl
2504 * Direction: dev2pbx
2505 * VarLength: no
2506 * MsgType: event
2508 static void
2509 handle_IpPortMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2511 ptvcursor_add(cursor, hf_skinny_rtpMediaPort, 4, ENC_LITTLE_ENDIAN);
2515 * Message: KeypadButtonMessage
2516 * Opcode: 0x0003
2517 * Type: CallControl
2518 * Direction: dev2pbx
2519 * VarLength: no
2520 * MsgType: event
2522 static void
2523 handle_KeypadButtonMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2525 uint32_t hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2527 si->additionalInfo = ws_strdup_printf("\"%s\"",
2528 try_val_to_str_ext(
2529 tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)),
2530 &KeyPadButton_short_ext
2533 ptvcursor_add(cursor, hf_skinny_kpButton, 4, ENC_LITTLE_ENDIAN);
2534 if (hdr_data_length > 8) {
2535 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2536 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2537 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2538 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2543 * Message: EnblocCallMessage
2544 * Opcode: 0x0004
2545 * Type: CallControl
2546 * Direction: dev2pbx
2547 * VarLength: no
2548 * MsgType: event
2550 static void
2551 handle_EnblocCallMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2553 uint32_t hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2554 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
2555 uint32_t VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;
2557 si->calledParty = g_strdup(tvb_format_stringzpad(pinfo->pool, ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), VariableDirnumSize));
2558 ptvcursor_add(cursor, hf_skinny_calledParty, VariableDirnumSize, ENC_ASCII);
2559 if (hdr_data_length > 28) {
2560 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2561 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2566 * Message: StimulusMessage
2567 * Opcode: 0x0005
2568 * Type: CallControl
2569 * Direction: dev2pbx
2570 * VarLength: no
2571 * MsgType: event
2573 static void
2574 handle_StimulusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2576 ptvcursor_add(cursor, hf_skinny_stimulus, 4, ENC_LITTLE_ENDIAN);
2577 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2578 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2579 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2580 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2581 ptvcursor_add(cursor, hf_skinny_stimulusStatus, 4, ENC_LITTLE_ENDIAN);
2585 * Message: OffHookMessage
2586 * Opcode: 0x0006
2587 * Type: CallControl
2588 * Direction: dev2pbx
2589 * VarLength: no
2590 * MsgType: event
2592 static void
2593 handle_OffHookMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2595 uint32_t hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2597 if (hdr_data_length > 4) {
2598 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2599 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2600 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2601 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2606 * Message: OnHookMessage
2607 * Opcode: 0x0007
2608 * Type: CallControl
2609 * Direction: dev2pbx
2610 * VarLength: no
2611 * MsgType: event
2613 static void
2614 handle_OnHookMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2616 uint32_t hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2618 if (hdr_data_length > 4) {
2619 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2620 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2621 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2622 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2627 * Message: HookFlashMessage
2628 * Opcode: 0x0008
2629 * Type: CallControl
2630 * Direction: dev2pbx
2631 * VarLength: no
2632 * MsgType: event
2634 static void
2635 handle_HookFlashMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2637 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2638 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2639 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2640 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2644 * Message: ForwardStatReqMessage
2645 * Opcode: 0x0009
2646 * Type: RegistrationAndManagement
2647 * Direction: dev2pbx
2648 * VarLength: no
2649 * MsgType: request
2651 static void
2652 handle_ForwardStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2654 uint32_t lineNumber = 0;
2655 lineNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2656 ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN);
2657 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0009 ^ lineNumber);
2661 * Message: SpeedDialStatReqMessage
2662 * Opcode: 0x000a
2663 * Type: RegistrationAndManagement
2664 * Direction: dev2pbx
2665 * VarLength: no
2666 * MsgType: request
2668 static void
2669 handle_SpeedDialStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2671 uint32_t speedDialNumber = 0;
2672 speedDialNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2673 ptvcursor_add(cursor, hf_skinny_speedDialNumber, 4, ENC_LITTLE_ENDIAN);
2674 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x000a ^ speedDialNumber);
2678 * Message: LineStatReqMessage
2679 * Opcode: 0x000b
2680 * Type: RegistrationAndManagement
2681 * Direction: dev2pbx
2682 * VarLength: no
2683 * MsgType: request
2685 static void
2686 handle_LineStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2688 uint32_t lineNumber = 0;
2689 lineNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2690 ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN);
2691 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x000b ^ lineNumber);
2695 * Message: CapabilitiesResMessage
2696 * Opcode: 0x0010
2697 * Type: RegistrationAndManagement
2698 * Direction: dev2pbx
2699 * VarLength: no
2700 * MsgType: response
2702 static void
2703 handle_CapabilitiesResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2705 uint32_t capCount = 0;
2706 uint32_t payloadCapability = 0;
2707 capCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2708 ptvcursor_add(cursor, hf_skinny_capCount, 4, ENC_LITTLE_ENDIAN);
2709 if (capCount <= 18) {
2710 uint32_t counter_1 = 0;
2711 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "caps [ref:capCount = %d, max:18]", capCount);
2712 if (capCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (capCount * 16) && capCount <= 18) {
2713 for (counter_1 = 0; counter_1 < 18; counter_1++) {
2714 if (counter_1 < capCount) {
2715 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "caps [%d / %d]", counter_1 + 1, capCount);
2716 payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2717 ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
2718 ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
2719 if (payloadCapability == MEDIA_PAYLOAD_G7231) {
2720 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
2721 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
2722 ptvcursor_pop_subtree(cursor);
2723 ptvcursor_advance(cursor, 4);
2724 } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
2725 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
2727 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
2728 ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
2729 ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
2730 ptvcursor_pop_subtree(cursor);
2732 ptvcursor_pop_subtree(cursor);
2733 } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
2734 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
2736 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
2737 ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
2738 ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
2739 ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
2740 ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
2741 ptvcursor_pop_subtree(cursor);
2743 ptvcursor_pop_subtree(cursor);
2744 } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
2745 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
2747 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
2748 ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
2749 ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
2750 ptvcursor_pop_subtree(cursor);
2752 ptvcursor_pop_subtree(cursor);
2753 } else {
2754 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
2756 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
2757 ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
2758 ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
2759 ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
2760 ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
2761 ptvcursor_pop_subtree(cursor);
2763 ptvcursor_pop_subtree(cursor);
2764 ptvcursor_advance(cursor, 4);
2766 } else {
2767 ptvcursor_advance(cursor, 16);
2769 ptvcursor_pop_subtree(cursor);
2772 ptvcursor_pop_subtree(cursor);
2773 } else {
2774 ptvcursor_advance(cursor, (capCount * 16));
2776 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x009b);
2780 * Message: AlarmMessage
2781 * Opcode: 0x0020
2782 * Type: RegistrationAndManagement
2783 * Direction: dev2pbx
2784 * VarLength: no
2785 * MsgType: event
2787 static void
2788 handle_AlarmMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2790 ptvcursor_add(cursor, hf_skinny_alarmSeverity, 4, ENC_LITTLE_ENDIAN);
2791 ptvcursor_add(cursor, hf_skinny_text, 80, ENC_ASCII);
2792 ptvcursor_add(cursor, hf_skinny_parm1, 4, ENC_LITTLE_ENDIAN);
2793 ptvcursor_add(cursor, hf_skinny_parm2, 4, ENC_LITTLE_ENDIAN);
2797 * Message: MulticastMediaReceptionAckMessage
2798 * Opcode: 0x0021
2799 * Type: MediaControl
2800 * Direction: dev2pbx
2801 * VarLength: no
2802 * MsgType: response
2804 static void
2805 handle_MulticastMediaReceptionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2807 uint32_t passThroughPartyId = 0;
2808 si->multicastReceptionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2809 ptvcursor_add(cursor, hf_skinny_multicastReceptionStatus, 4, ENC_LITTLE_ENDIAN);
2810 passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2811 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2812 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
2813 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2814 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2815 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0101 ^ passThroughPartyId);
2819 * Message: OpenReceiveChannelAckMessage
2820 * Opcode: 0x0022
2821 * Type: MediaControl
2822 * Direction: dev2pbx
2823 * VarLength: no
2824 * MsgType: response
2826 static void
2827 handle_OpenReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2829 uint32_t hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2830 address ipAddr;
2831 char *ipAddr_str = NULL;
2832 uint32_t portNumber = 0;
2833 uint32_t passThroughPartyId = 0;
2835 si->mediaReceptionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2836 ptvcursor_add(cursor, hf_skinny_mediaReceptionStatus, 4, ENC_LITTLE_ENDIAN);
2837 read_skinny_ipv4or6(cursor, &ipAddr);
2838 dissect_skinny_ipv4or6(cursor, hf_skinny_ipAddr_ipv4, hf_skinny_ipAddr_ipv6);
2839 portNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2840 ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN);
2841 srtp_add_address(pinfo, PT_UDP, &ipAddr, portNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
2842 ipAddr_str = address_to_display(NULL, &ipAddr);
2843 si->additionalInfo = ws_strdup_printf("%s:%d", ipAddr_str, portNumber);
2844 wmem_free(NULL, ipAddr_str);
2845 passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2846 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2847 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
2848 if (hdr_data_length > 20) {
2849 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2850 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2852 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0105 ^ passThroughPartyId);
2856 * Message: ConnectionStatisticsResMessage
2857 * Opcode: 0x0023
2858 * Type: CallControl
2859 * Direction: dev2pbx
2860 * VarLength: no
2861 * MsgType: response
2863 static void
2864 handle_ConnectionStatisticsResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2866 uint32_t hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2867 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
2868 uint32_t callReference = 0;
2869 uint32_t dataSize = 0;
2871 if (hdr_version <= V17_MSG_TYPE) {
2872 ptvcursor_add(cursor, hf_skinny_directoryNum, 24, ENC_ASCII);
2873 callReference = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2874 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2875 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2876 ptvcursor_add(cursor, hf_skinny_statsProcessingMode, 4, ENC_LITTLE_ENDIAN);
2878 if (hdr_version >= V18_MSG_TYPE) {
2879 ptvcursor_add(cursor, hf_skinny_directoryNum, 28, ENC_ASCII);
2880 callReference = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2881 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2882 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2883 ptvcursor_add(cursor, hf_skinny_statsProcessingMode, 1, ENC_LITTLE_ENDIAN);
2885 ptvcursor_add(cursor, hf_skinny_numberPacketsSent, 4, ENC_LITTLE_ENDIAN);
2886 ptvcursor_add(cursor, hf_skinny_numberOctetsSent, 4, ENC_LITTLE_ENDIAN);
2887 ptvcursor_add(cursor, hf_skinny_numberPacketsReceived, 4, ENC_LITTLE_ENDIAN);
2888 ptvcursor_add(cursor, hf_skinny_numberOctetsReceived, 4, ENC_LITTLE_ENDIAN);
2889 ptvcursor_add(cursor, hf_skinny_numberPacketsLost, 4, ENC_LITTLE_ENDIAN);
2890 ptvcursor_add(cursor, hf_skinny_jitter, 4, ENC_LITTLE_ENDIAN);
2891 ptvcursor_add(cursor, hf_skinny_latency, 4, ENC_LITTLE_ENDIAN);
2892 if (hdr_data_length > 64) {
2893 dataSize = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2894 ptvcursor_add(cursor, hf_skinny_dataSize, 4, ENC_LITTLE_ENDIAN);
2895 ptvcursor_add(cursor, hf_skinny_data, dataSize, ENC_ASCII);
2897 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0107 ^ callReference);
2901 * Message: OffHookWithCallingPartyNumberMessage
2902 * Opcode: 0x0024
2903 * Type: CallControl
2904 * Direction: dev2pbx
2905 * VarLength: no
2906 * MsgType: event
2908 static void
2909 handle_OffHookWithCallingPartyNumberMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2911 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
2912 uint32_t VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;
2913 ptvcursor_add(cursor, hf_skinny_callingPartyNumber, VariableDirnumSize, ENC_ASCII);
2914 ptvcursor_add(cursor, hf_skinny_cgpnVoiceMailbox, VariableDirnumSize, ENC_ASCII);
2915 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2916 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2920 * Message: SoftKeyEventMessage
2921 * Opcode: 0x0026
2922 * Type: RegistrationAndManagement
2923 * Direction: dev2pbx
2924 * VarLength: no
2925 * MsgType: event
2927 static void
2928 handle_SoftKeyEventMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2930 ptvcursor_add(cursor, hf_skinny_softKeyEvent, 4, ENC_LITTLE_ENDIAN);
2931 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2932 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2933 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2934 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2938 * Message: UnregisterReqMessage
2939 * Opcode: 0x0027
2940 * Type: RegistrationAndManagement
2941 * Direction: dev2pbx
2942 * VarLength: no
2943 * MsgType: request
2945 static void
2946 handle_UnregisterReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2948 uint32_t hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2950 if (hdr_data_length > 12) {
2951 ptvcursor_add(cursor, hf_skinny_unRegReasonCode, 4, ENC_LITTLE_ENDIAN);
2953 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0027);
2957 * Message: RegisterTokenReq
2958 * Opcode: 0x0029
2959 * Type: RegistrationAndManagement
2960 * Direction: dev2pbx
2961 * VarLength: no
2962 * MsgType: request
2964 static void
2965 handle_RegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2968 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
2969 ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII);
2970 ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
2971 ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
2972 ptvcursor_pop_subtree(cursor);
2974 ptvcursor_add(cursor, hf_skinny_stationIpAddr, 4, ENC_LITTLE_ENDIAN);
2975 ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN);
2976 dissect_skinny_ipv4or6(cursor, hf_skinny_stationIpV6Addr_ipv4, hf_skinny_stationIpV6Addr_ipv6);
2977 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0029);
2981 * Message: MediaTransmissionFailureMessage
2982 * Opcode: 0x002a
2983 * Type: MediaControl
2984 * Direction: dev2pbx
2985 * VarLength: no
2986 * MsgType: response
2988 static void
2989 handle_MediaTransmissionFailureMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
2991 uint32_t passThroughPartyId = 0;
2992 address remoteIpAddr;
2993 char *remoteIpAddr_str = NULL;
2994 uint32_t remotePortNumber = 0;
2995 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
2996 passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2997 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2998 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
2999 read_skinny_ipv4or6(cursor, &remoteIpAddr);
3000 dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6);
3001 remotePortNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3002 ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
3003 srtp_add_address(pinfo, PT_UDP, &remoteIpAddr, remotePortNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
3004 remoteIpAddr_str = address_to_display(NULL, &remoteIpAddr);
3005 si->additionalInfo = ws_strdup_printf("%s:%d", remoteIpAddr_str, remotePortNumber);
3006 wmem_free(NULL, remoteIpAddr_str);
3007 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3008 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
3009 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x008a ^ passThroughPartyId);
3013 * Message: HeadsetStatusMessage
3014 * Opcode: 0x002b
3015 * Type: CallControl
3016 * Direction: dev2pbx
3017 * VarLength: no
3018 * MsgType: event
3020 static void
3021 handle_HeadsetStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3023 ptvcursor_add(cursor, hf_skinny_headsetStatus, 4, ENC_LITTLE_ENDIAN);
3027 * Message: MediaResourceNotificationMessage
3028 * Opcode: 0x002c
3029 * Type: MediaControl
3030 * Direction: dev2pbx
3031 * VarLength: no
3032 * MsgType: event
3034 static void
3035 handle_MediaResourceNotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3037 ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN);
3038 ptvcursor_add(cursor, hf_skinny_numberOfInServiceStreams, 4, ENC_LITTLE_ENDIAN);
3039 ptvcursor_add(cursor, hf_skinny_maxStreamsPerConf, 4, ENC_LITTLE_ENDIAN);
3040 ptvcursor_add(cursor, hf_skinny_numberOfOutOfServiceStreams, 4, ENC_LITTLE_ENDIAN);
3044 * Message: RegisterAvailableLinesMessage
3045 * Opcode: 0x002d
3046 * Type: RegistrationAndManagement
3047 * Direction: dev2pbx
3048 * VarLength: no
3049 * MsgType: event
3051 static void
3052 handle_RegisterAvailableLinesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3054 ptvcursor_add(cursor, hf_skinny_maxNumOfAvailLines, 4, ENC_LITTLE_ENDIAN);
3058 * Message: DeviceToUserDataMessage
3059 * Opcode: 0x002e
3060 * Type: RegistrationAndManagement
3061 * Direction: dev2pbx
3062 * VarLength: no
3063 * MsgType: request
3065 static void
3066 handle_DeviceToUserDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3068 uint32_t dataLength = 0;
3070 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserData");
3071 ptvcursor_add(cursor, hf_skinny_applicationId, 4, ENC_LITTLE_ENDIAN);
3072 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3073 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
3074 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3075 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
3076 ptvcursor_add(cursor, hf_skinny_transactionId, 4, ENC_LITTLE_ENDIAN);
3077 dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3078 ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
3079 dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
3080 ptvcursor_pop_subtree(cursor);
3082 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x002e);
3086 * Message: DeviceToUserDataResponseMessage
3087 * Opcode: 0x002f
3088 * Type: RegistrationAndManagement
3089 * Direction: dev2pbx
3090 * VarLength: no
3091 * MsgType: response
3093 static void
3094 handle_DeviceToUserDataResponseMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3096 uint32_t dataLength = 0;
3098 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserData");
3099 ptvcursor_add(cursor, hf_skinny_applicationId, 4, ENC_LITTLE_ENDIAN);
3100 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3101 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
3102 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3103 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
3104 ptvcursor_add(cursor, hf_skinny_transactionId, 4, ENC_LITTLE_ENDIAN);
3105 dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3106 ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
3107 dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
3108 ptvcursor_pop_subtree(cursor);
3110 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x002e);
3114 * Message: UpdateCapabilitiesMessage
3115 * Opcode: 0x0030
3116 * Type: RegistrationAndManagement
3117 * Direction: dev2pbx
3118 * VarLength: no
3119 * MsgType: event
3121 static void
3122 handle_UpdateCapabilitiesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3124 uint32_t audioCapCount = 0;
3125 uint32_t videoCapCount = 0;
3126 uint32_t dataCapCount = 0;
3127 uint32_t customPictureFormatCount = 0;
3128 uint32_t serviceResourceCount = 0;
3129 uint32_t layoutCount = 0;
3130 uint32_t payloadCapability = 0;
3131 uint32_t levelPreferenceCount = 0;
3132 audioCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3133 ptvcursor_add(cursor, hf_skinny_audioCapCount, 4, ENC_LITTLE_ENDIAN);
3134 videoCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3135 ptvcursor_add(cursor, hf_skinny_videoCapCount, 4, ENC_LITTLE_ENDIAN);
3136 dataCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3137 ptvcursor_add(cursor, hf_skinny_dataCapCount, 4, ENC_LITTLE_ENDIAN);
3138 ptvcursor_add(cursor, hf_skinny_rtpPayloadFormat, 4, ENC_LITTLE_ENDIAN);
3139 customPictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3140 ptvcursor_add(cursor, hf_skinny_customPictureFormatCount, 4, ENC_LITTLE_ENDIAN);
3141 if (customPictureFormatCount <= 6) {
3142 uint32_t counter_1 = 0;
3143 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [ref:customPictureFormatCount = %d, max:6]", customPictureFormatCount);
3144 if (customPictureFormatCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (customPictureFormatCount * 20) && customPictureFormatCount <= 6) {
3145 for (counter_1 = 0; counter_1 < 6; counter_1++) {
3146 if (counter_1 < customPictureFormatCount) {
3147 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [%d / %d]", counter_1 + 1, customPictureFormatCount);
3148 ptvcursor_add(cursor, hf_skinny_pictureWidth, 4, ENC_LITTLE_ENDIAN);
3149 ptvcursor_add(cursor, hf_skinny_pictureHeight, 4, ENC_LITTLE_ENDIAN);
3150 ptvcursor_add(cursor, hf_skinny_pixelAspectRatio, 4, ENC_LITTLE_ENDIAN);
3151 ptvcursor_add(cursor, hf_skinny_clockConversionCode, 4, ENC_LITTLE_ENDIAN);
3152 ptvcursor_add(cursor, hf_skinny_clockDivisor, 4, ENC_LITTLE_ENDIAN);
3153 } else {
3154 ptvcursor_advance(cursor, 20);
3156 ptvcursor_pop_subtree(cursor);
3159 ptvcursor_pop_subtree(cursor);
3160 } else {
3161 ptvcursor_advance(cursor, (customPictureFormatCount * 20));
3164 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "confResources");
3165 ptvcursor_add(cursor, hf_skinny_activeStreamsOnRegistration, 4, ENC_LITTLE_ENDIAN);
3166 ptvcursor_add(cursor, hf_skinny_maxBW, 4, ENC_LITTLE_ENDIAN);
3167 serviceResourceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3168 ptvcursor_add(cursor, hf_skinny_serviceResourceCount, 4, ENC_LITTLE_ENDIAN);
3169 if (serviceResourceCount <= 4) {
3170 uint32_t counter_2 = 0;
3171 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [ref:serviceResourceCount = %d, max:4]", serviceResourceCount);
3172 if (serviceResourceCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (serviceResourceCount * 24) && serviceResourceCount <= 4) {
3173 for (counter_2 = 0; counter_2 < 4; counter_2++) {
3174 if (counter_2 < serviceResourceCount) {
3175 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [%d / %d]", counter_2 + 1, serviceResourceCount);
3176 layoutCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3177 ptvcursor_add(cursor, hf_skinny_layoutCount, 4, ENC_LITTLE_ENDIAN);
3178 if (layoutCount <= 5) { /* tvb enum size guard */
3179 uint32_t counter_7 = 0;
3180 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "layouts [ref: layoutCount = %d, max:5]", layoutCount);
3181 for (counter_7 = 0; counter_7 < 5; counter_7++) {
3182 if (counter_7 < layoutCount) {
3183 ptvcursor_add(cursor, hf_skinny_layouts, 4, ENC_LITTLE_ENDIAN);
3184 } else {
3185 ptvcursor_advance(cursor, 4);
3188 ptvcursor_pop_subtree(cursor);
3189 } else {
3190 ptvcursor_advance(cursor, (5 * 4)); /* guard kicked in -> skip the rest */;
3192 ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
3193 ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
3194 ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
3195 ptvcursor_add(cursor, hf_skinny_activeConferenceOnRegistration, 4, ENC_LITTLE_ENDIAN);
3196 } else {
3197 ptvcursor_advance(cursor, 24);
3199 ptvcursor_pop_subtree(cursor);
3202 ptvcursor_pop_subtree(cursor);
3203 } else {
3204 ptvcursor_advance(cursor, (serviceResourceCount * 24));
3206 ptvcursor_pop_subtree(cursor);
3208 if (audioCapCount <= 18) {
3209 uint32_t counter_1 = 0;
3210 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [ref:audioCapCount = %d, max:18]", audioCapCount);
3211 if (audioCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (audioCapCount * 16) && audioCapCount <= 18) {
3212 for (counter_1 = 0; counter_1 < 18; counter_1++) {
3213 if (counter_1 < audioCapCount) {
3214 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [%d / %d]", counter_1 + 1, audioCapCount);
3215 payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3216 ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
3217 ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
3218 if (payloadCapability == MEDIA_PAYLOAD_G7231) {
3219 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
3220 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
3221 ptvcursor_pop_subtree(cursor);
3222 ptvcursor_advance(cursor, 4);
3223 } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
3224 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
3226 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
3227 ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
3228 ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
3229 ptvcursor_pop_subtree(cursor);
3231 ptvcursor_pop_subtree(cursor);
3232 } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
3233 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
3235 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
3236 ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
3237 ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
3238 ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
3239 ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
3240 ptvcursor_pop_subtree(cursor);
3242 ptvcursor_pop_subtree(cursor);
3243 } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
3244 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
3246 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
3247 ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
3248 ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
3249 ptvcursor_pop_subtree(cursor);
3251 ptvcursor_pop_subtree(cursor);
3252 } else {
3253 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
3255 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
3256 ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
3257 ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
3258 ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
3259 ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
3260 ptvcursor_pop_subtree(cursor);
3262 ptvcursor_pop_subtree(cursor);
3263 ptvcursor_advance(cursor, 4);
3265 } else {
3266 ptvcursor_advance(cursor, 16);
3268 ptvcursor_pop_subtree(cursor);
3271 ptvcursor_pop_subtree(cursor);
3272 } else {
3273 ptvcursor_advance(cursor, (audioCapCount * 16));
3275 if (videoCapCount <= 10) {
3276 uint32_t counter_1 = 0;
3277 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [ref:videoCapCount = %d, max:10]", videoCapCount);
3278 if (videoCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (videoCapCount * 44) && videoCapCount <= 10) {
3279 for (counter_1 = 0; counter_1 < 10; counter_1++) {
3280 if (counter_1 < videoCapCount) {
3281 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [%d / %d]", counter_1 + 1, videoCapCount);
3282 payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3283 ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
3284 ptvcursor_add(cursor, hf_skinny_videoCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
3285 levelPreferenceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3286 ptvcursor_add(cursor, hf_skinny_levelPreferenceCount, 4, ENC_LITTLE_ENDIAN);
3287 if (levelPreferenceCount <= 4) {
3288 uint32_t counter_5 = 0;
3289 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [ref:levelPreferenceCount = %d, max:4]", levelPreferenceCount);
3290 if (levelPreferenceCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (levelPreferenceCount * 24) && levelPreferenceCount <= 4) {
3291 for (counter_5 = 0; counter_5 < 4; counter_5++) {
3292 if (counter_5 < levelPreferenceCount) {
3293 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [%d / %d]", counter_5 + 1, levelPreferenceCount);
3294 ptvcursor_add(cursor, hf_skinny_transmitPreference, 4, ENC_LITTLE_ENDIAN);
3295 ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
3296 ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
3297 ptvcursor_add(cursor, hf_skinny_minBitRate, 4, ENC_LITTLE_ENDIAN);
3298 ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
3299 ptvcursor_add(cursor, hf_skinny_serviceNumber, 4, ENC_LITTLE_ENDIAN);
3300 } else {
3301 ptvcursor_advance(cursor, 24);
3303 ptvcursor_pop_subtree(cursor);
3306 ptvcursor_pop_subtree(cursor);
3307 } else {
3308 ptvcursor_advance(cursor, (levelPreferenceCount * 24));
3310 if (payloadCapability == MEDIA_PAYLOAD_H261) {
3311 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H261");
3313 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
3314 ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
3315 ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
3316 ptvcursor_pop_subtree(cursor);
3318 ptvcursor_pop_subtree(cursor);
3319 } else if (payloadCapability == MEDIA_PAYLOAD_H263) {
3320 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H263");
3322 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
3323 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
3324 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
3325 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
3326 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
3327 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
3328 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
3329 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
3330 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
3331 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
3332 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
3333 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
3334 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
3335 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
3336 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
3337 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
3338 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
3339 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
3340 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
3341 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
3342 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
3343 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
3344 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
3345 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
3346 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
3347 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
3348 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
3349 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
3350 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
3351 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
3352 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
3353 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
3354 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
3355 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
3356 ptvcursor_advance(cursor, 4);
3357 ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
3358 ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
3359 ptvcursor_pop_subtree(cursor);
3361 ptvcursor_pop_subtree(cursor);
3362 } else if (payloadCapability == MEDIA_PAYLOAD_VIEO) {
3363 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_Vieo");
3365 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
3366 ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
3367 ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
3368 ptvcursor_pop_subtree(cursor);
3370 ptvcursor_pop_subtree(cursor);
3372 } else {
3373 ptvcursor_advance(cursor, 44);
3375 ptvcursor_pop_subtree(cursor);
3378 ptvcursor_pop_subtree(cursor);
3379 } else {
3380 ptvcursor_advance(cursor, (videoCapCount * 44));
3382 if (dataCapCount <= 5) {
3383 uint32_t counter_1 = 0;
3384 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [ref:dataCapCount = %d, max:5]", dataCapCount);
3385 if (dataCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (dataCapCount * 16) && dataCapCount <= 5) {
3386 for (counter_1 = 0; counter_1 < 5; counter_1++) {
3387 if (counter_1 < dataCapCount) {
3388 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [%d / %d]", counter_1 + 1, dataCapCount);
3389 ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
3390 ptvcursor_add(cursor, hf_skinny_dataCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
3391 ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
3392 ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
3393 } else {
3394 ptvcursor_advance(cursor, 16);
3396 ptvcursor_pop_subtree(cursor);
3399 ptvcursor_pop_subtree(cursor);
3400 } else {
3401 ptvcursor_advance(cursor, (dataCapCount * 16));
3406 * Message: OpenMultiMediaReceiveChannelAckMessage
3407 * Opcode: 0x0031
3408 * Type: MediaControl
3409 * Direction: dev2pbx
3410 * VarLength: no
3411 * MsgType: response
3413 static void
3414 handle_OpenMultiMediaReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3416 address ipAddr;
3417 char *ipAddr_str = NULL;
3418 uint32_t portNumber = 0;
3419 uint32_t passThroughPartyId = 0;
3420 si->multimediaReceptionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3421 ptvcursor_add(cursor, hf_skinny_multimediaReceptionStatus, 4, ENC_LITTLE_ENDIAN);
3422 read_skinny_ipv4or6(cursor, &ipAddr);
3423 dissect_skinny_ipv4or6(cursor, hf_skinny_ipAddr_ipv4, hf_skinny_ipAddr_ipv6);
3424 portNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3425 ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN);
3426 srtp_add_address(pinfo, PT_UDP, &ipAddr, portNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
3427 ipAddr_str = address_to_display(NULL, &ipAddr);
3428 si->additionalInfo = ws_strdup_printf("%s:%d", ipAddr_str, portNumber);
3429 wmem_free(NULL, ipAddr_str);
3430 passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3431 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3432 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
3433 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3434 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
3435 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0131 ^ passThroughPartyId);
3439 * Message: ClearConferenceMessage
3440 * Opcode: 0x0032
3441 * Type: Conference
3442 * Direction: dev2pbx
3443 * VarLength: no
3444 * MsgType: event
3446 static void
3447 handle_ClearConferenceMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3449 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
3450 ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
3454 * Message: ServiceURLStatReqMessage
3455 * Opcode: 0x0033
3456 * Type: RegistrationAndManagement
3457 * Direction: dev2pbx
3458 * VarLength: no
3459 * MsgType: request
3461 static void
3462 handle_ServiceURLStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3464 uint32_t serviceURLIndex = 0;
3465 serviceURLIndex = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3466 ptvcursor_add(cursor, hf_skinny_serviceURLIndex, 4, ENC_LITTLE_ENDIAN);
3467 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0033 ^ serviceURLIndex);
3471 * Message: FeatureStatReqMessage
3472 * Opcode: 0x0034
3473 * Type: RegistrationAndManagement
3474 * Direction: dev2pbx
3475 * VarLength: no
3476 * MsgType: request
3478 static void
3479 handle_FeatureStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3481 uint32_t hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
3482 uint32_t featureIndex = 0;
3484 featureIndex = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3485 ptvcursor_add(cursor, hf_skinny_featureIndex, 4, ENC_LITTLE_ENDIAN);
3486 if (hdr_data_length > 16) {
3487 ptvcursor_add(cursor, hf_skinny_featureCapabilities, 4, ENC_LITTLE_ENDIAN);
3489 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0034 ^ featureIndex);
3493 * Message: CreateConferenceResMessage
3494 * Opcode: 0x0035
3495 * Type: IntraCCM
3496 * Direction: pbx2pbx
3497 * VarLength: no
3498 * MsgType: response
3500 static void
3501 handle_CreateConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3503 uint32_t conferenceId = 0;
3504 uint32_t dataLength = 0;
3505 conferenceId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3506 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
3507 ptvcursor_add(cursor, hf_skinny_result, 4, ENC_LITTLE_ENDIAN);
3508 dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3509 ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
3510 ptvcursor_add(cursor, hf_skinny_passThruData, dataLength, ENC_ASCII);
3511 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0137 ^ conferenceId);
3515 * Message: DeleteConferenceResMessage
3516 * Opcode: 0x0036
3517 * Type: IntraCCM
3518 * Direction: pbx2pbx
3519 * VarLength: no
3520 * MsgType: response
3522 static void
3523 handle_DeleteConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3525 uint32_t conferenceId = 0;
3526 conferenceId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3527 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
3528 ptvcursor_add(cursor, hf_skinny_delete_conf_result, 4, ENC_LITTLE_ENDIAN);
3529 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0138 ^ conferenceId);
3533 * Message: ModifyConferenceResMessage
3534 * Opcode: 0x0037
3535 * Type: IntraCCM
3536 * Direction: pbx2pbx
3537 * VarLength: no
3538 * MsgType: response
3540 static void
3541 handle_ModifyConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3543 uint32_t conferenceId = 0;
3544 uint32_t dataLength = 0;
3545 conferenceId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3546 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
3547 ptvcursor_add(cursor, hf_skinny_modify_conf_result, 4, ENC_LITTLE_ENDIAN);
3548 dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3549 ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
3550 ptvcursor_add(cursor, hf_skinny_passThruData, dataLength, ENC_ASCII);
3551 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0139 ^ conferenceId);
3555 * Message: AddParticipantResMessage
3556 * Opcode: 0x0038
3557 * Type: IntraCCM
3558 * Direction: pbx2pbx
3559 * VarLength: no
3560 * MsgType: response
3562 static void
3563 handle_AddParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3565 uint32_t conferenceId = 0;
3566 conferenceId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3567 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
3568 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3569 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
3570 ptvcursor_add(cursor, hf_skinny_add_participant_result, 4, ENC_LITTLE_ENDIAN);
3571 ptvcursor_add(cursor, hf_skinny_bridgeParticipantId, 257, ENC_ASCII);
3572 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x013a ^ conferenceId);
3576 * Message: AuditConferenceResMessage
3577 * Opcode: 0x0039
3578 * Type: IntraCCM
3579 * Direction: pbx2pbx
3580 * VarLength: no
3581 * MsgType: response
3583 static void
3584 handle_AuditConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3586 uint32_t numberOfEntries = 0;
3587 ptvcursor_add(cursor, hf_skinny_last, 4, ENC_LITTLE_ENDIAN);
3588 numberOfEntries = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3589 ptvcursor_add(cursor, hf_skinny_numberOfEntries, 4, ENC_LITTLE_ENDIAN);
3590 if (numberOfEntries <= 32) {
3591 uint32_t counter_1 = 0;
3592 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "conferenceEntry [ref:numberOfEntries = %d, max:32]", numberOfEntries);
3593 if (numberOfEntries && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (numberOfEntries * 76) && numberOfEntries <= 32) {
3594 for (counter_1 = 0; counter_1 < 32; counter_1++) {
3595 if (counter_1 < numberOfEntries) {
3596 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "conferenceEntry [%d / %d]", counter_1 + 1, numberOfEntries);
3597 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
3598 ptvcursor_add(cursor, hf_skinny_resourceType, 4, ENC_LITTLE_ENDIAN);
3599 ptvcursor_add(cursor, hf_skinny_numberOfReservedParticipants, 4, ENC_LITTLE_ENDIAN);
3600 ptvcursor_add(cursor, hf_skinny_numberOfActiveParticipants, 4, ENC_LITTLE_ENDIAN);
3601 ptvcursor_add(cursor, hf_skinny_applicationId, 4, ENC_LITTLE_ENDIAN);
3602 ptvcursor_add(cursor, hf_skinny_appConfID, 32, ENC_ASCII);
3603 ptvcursor_add(cursor, hf_skinny_appData, 24, ENC_ASCII);
3604 } else {
3605 ptvcursor_advance(cursor, 76);
3607 ptvcursor_pop_subtree(cursor);
3610 ptvcursor_pop_subtree(cursor);
3611 } else {
3612 ptvcursor_advance(cursor, (numberOfEntries * 76));
3614 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x013c);
3618 * Message: AuditParticipantResMessage
3619 * Opcode: 0x0040
3620 * Type: IntraCCM
3621 * Direction: pbx2pbx
3622 * VarLength: no
3623 * MsgType: response
3625 static void
3626 handle_AuditParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3628 uint32_t conferenceId = 0;
3629 uint32_t numberOfEntries = 0;
3630 ptvcursor_add(cursor, hf_skinny_audit_participant_result, 4, ENC_LITTLE_ENDIAN);
3631 ptvcursor_add(cursor, hf_skinny_last, 4, ENC_LITTLE_ENDIAN);
3632 conferenceId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3633 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
3634 numberOfEntries = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3635 ptvcursor_add(cursor, hf_skinny_numberOfEntries, 4, ENC_LITTLE_ENDIAN);
3636 if (numberOfEntries <= 256) {
3637 uint32_t counter_2 = 0;
3638 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "participantEntry [ref:numberOfEntries = %d, max:256]", numberOfEntries);
3639 for (counter_2 = 0; counter_2 < 256; counter_2++) {
3640 if (counter_2 < numberOfEntries) {
3641 ptvcursor_add(cursor, hf_skinny_participantEntry, 4, ENC_LITTLE_ENDIAN);
3642 } else {
3643 ptvcursor_advance(cursor, 4);
3646 ptvcursor_pop_subtree(cursor);
3647 } else {
3648 ptvcursor_advance(cursor, (256 * 4));
3650 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x013d ^ conferenceId);
3654 * Message: DeviceToUserDataMessageVersion1
3655 * Opcode: 0x0041
3656 * Type: RegistrationAndManagement
3657 * Direction: dev2pbx
3658 * VarLength: no
3659 * MsgType: request
3661 static void
3662 handle_DeviceToUserDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3664 uint32_t dataLength = 0;
3666 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserDataVersion1");
3667 ptvcursor_add(cursor, hf_skinny_applicationId, 4, ENC_LITTLE_ENDIAN);
3668 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3669 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
3670 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3671 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
3672 ptvcursor_add(cursor, hf_skinny_transactionId, 4, ENC_LITTLE_ENDIAN);
3673 dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3674 ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
3675 ptvcursor_add(cursor, hf_skinny_sequenceFlag, 4, ENC_LITTLE_ENDIAN);
3676 ptvcursor_add(cursor, hf_skinny_displayPriority, 4, ENC_LITTLE_ENDIAN);
3677 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
3678 ptvcursor_add(cursor, hf_skinny_appInstanceID, 4, ENC_LITTLE_ENDIAN);
3679 ptvcursor_add(cursor, hf_skinny_routingID, 4, ENC_LITTLE_ENDIAN);
3680 dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
3681 ptvcursor_pop_subtree(cursor);
3683 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0041);
3687 * Message: DeviceToUserDataResponseMessageVersion1
3688 * Opcode: 0x0042
3689 * Type: RegistrationAndManagement
3690 * Direction: dev2pbx
3691 * VarLength: no
3692 * MsgType: response
3694 static void
3695 handle_DeviceToUserDataResponseMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3697 uint32_t dataLength = 0;
3699 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserDataVersion1");
3700 ptvcursor_add(cursor, hf_skinny_applicationId, 4, ENC_LITTLE_ENDIAN);
3701 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3702 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
3703 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3704 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
3705 ptvcursor_add(cursor, hf_skinny_transactionId, 4, ENC_LITTLE_ENDIAN);
3706 dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3707 ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
3708 ptvcursor_add(cursor, hf_skinny_sequenceFlag, 4, ENC_LITTLE_ENDIAN);
3709 ptvcursor_add(cursor, hf_skinny_displayPriority, 4, ENC_LITTLE_ENDIAN);
3710 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
3711 ptvcursor_add(cursor, hf_skinny_appInstanceID, 4, ENC_LITTLE_ENDIAN);
3712 ptvcursor_add(cursor, hf_skinny_routingID, 4, ENC_LITTLE_ENDIAN);
3713 dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
3714 ptvcursor_pop_subtree(cursor);
3716 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0041);
3720 * Message: CapabilitiesV2ResMessage
3721 * Opcode: 0x0043
3722 * Type: RegistrationAndManagement
3723 * Direction: dev2pbx
3724 * VarLength: no
3725 * MsgType: response
3727 static void
3728 handle_CapabilitiesV2ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
3730 uint32_t audioCapCount = 0;
3731 uint32_t videoCapCount = 0;
3732 uint32_t dataCapCount = 0;
3733 uint32_t customPictureFormatCount = 0;
3734 uint32_t serviceResourceCount = 0;
3735 uint32_t layoutCount = 0;
3736 uint32_t payloadCapability = 0;
3737 uint32_t levelPreferenceCount = 0;
3738 audioCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3739 ptvcursor_add(cursor, hf_skinny_audioCapCount, 4, ENC_LITTLE_ENDIAN);
3740 videoCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3741 ptvcursor_add(cursor, hf_skinny_videoCapCount, 4, ENC_LITTLE_ENDIAN);
3742 dataCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3743 ptvcursor_add(cursor, hf_skinny_dataCapCount, 4, ENC_LITTLE_ENDIAN);
3744 ptvcursor_add(cursor, hf_skinny_rtpPayloadFormat, 4, ENC_LITTLE_ENDIAN);
3745 customPictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3746 ptvcursor_add(cursor, hf_skinny_customPictureFormatCount, 4, ENC_LITTLE_ENDIAN);
3747 if (customPictureFormatCount <= 6) {
3748 uint32_t counter_1 = 0;
3749 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [ref:customPictureFormatCount = %d, max:6]", customPictureFormatCount);
3750 if (customPictureFormatCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (customPictureFormatCount * 20) && customPictureFormatCount <= 6) {
3751 for (counter_1 = 0; counter_1 < 6; counter_1++) {
3752 if (counter_1 < customPictureFormatCount) {
3753 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [%d / %d]", counter_1 + 1, customPictureFormatCount);
3754 ptvcursor_add(cursor, hf_skinny_pictureWidth, 4, ENC_LITTLE_ENDIAN);
3755 ptvcursor_add(cursor, hf_skinny_pictureHeight, 4, ENC_LITTLE_ENDIAN);
3756 ptvcursor_add(cursor, hf_skinny_pixelAspectRatio, 4, ENC_LITTLE_ENDIAN);
3757 ptvcursor_add(cursor, hf_skinny_clockConversionCode, 4, ENC_LITTLE_ENDIAN);
3758 ptvcursor_add(cursor, hf_skinny_clockDivisor, 4, ENC_LITTLE_ENDIAN);
3759 } else {
3760 ptvcursor_advance(cursor, 20);
3762 ptvcursor_pop_subtree(cursor);
3765 ptvcursor_pop_subtree(cursor);
3766 } else {
3767 ptvcursor_advance(cursor, (customPictureFormatCount * 20));
3770 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "confResources");
3771 ptvcursor_add(cursor, hf_skinny_activeStreamsOnRegistration, 4, ENC_LITTLE_ENDIAN);
3772 ptvcursor_add(cursor, hf_skinny_maxBW, 4, ENC_LITTLE_ENDIAN);
3773 serviceResourceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3774 ptvcursor_add(cursor, hf_skinny_serviceResourceCount, 4, ENC_LITTLE_ENDIAN);
3775 if (serviceResourceCount <= 4) {
3776 uint32_t counter_2 = 0;
3777 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [ref:serviceResourceCount = %d, max:4]", serviceResourceCount);
3778 if (serviceResourceCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (serviceResourceCount * 24) && serviceResourceCount <= 4) {
3779 for (counter_2 = 0; counter_2 < 4; counter_2++) {
3780 if (counter_2 < serviceResourceCount) {
3781 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [%d / %d]", counter_2 + 1, serviceResourceCount);
3782 layoutCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3783 ptvcursor_add(cursor, hf_skinny_layoutCount, 4, ENC_LITTLE_ENDIAN);
3784 if (layoutCount <= 5) { /* tvb enum size guard */
3785 uint32_t counter_7 = 0;
3786 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "layouts [ref: layoutCount = %d, max:5]", layoutCount);
3787 for (counter_7 = 0; counter_7 < 5; counter_7++) {
3788 if (counter_7 < layoutCount) {
3789 ptvcursor_add(cursor, hf_skinny_layouts, 4, ENC_LITTLE_ENDIAN);
3790 } else {
3791 ptvcursor_advance(cursor, 4);
3794 ptvcursor_pop_subtree(cursor);
3795 } else {
3796 ptvcursor_advance(cursor, (5 * 4)); /* guard kicked in -> skip the rest */;
3798 ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
3799 ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
3800 ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
3801 ptvcursor_add(cursor, hf_skinny_activeConferenceOnRegistration, 4, ENC_LITTLE_ENDIAN);
3802 } else {
3803 ptvcursor_advance(cursor, 24);
3805 ptvcursor_pop_subtree(cursor);
3808 ptvcursor_pop_subtree(cursor);
3809 } else {
3810 ptvcursor_advance(cursor, (serviceResourceCount * 24));
3812 ptvcursor_pop_subtree(cursor);
3814 if (audioCapCount <= 18) {
3815 uint32_t counter_1 = 0;
3816 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [ref:audioCapCount = %d, max:18]", audioCapCount);
3817 if (audioCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (audioCapCount * 16) && audioCapCount <= 18) {
3818 for (counter_1 = 0; counter_1 < 18; counter_1++) {
3819 if (counter_1 < audioCapCount) {
3820 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [%d / %d]", counter_1 + 1, audioCapCount);
3821 payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3822 ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
3823 ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
3824 if (payloadCapability == MEDIA_PAYLOAD_G7231) {
3825 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
3826 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
3827 ptvcursor_pop_subtree(cursor);
3828 ptvcursor_advance(cursor, 4);
3829 } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
3830 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
3832 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
3833 ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
3834 ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
3835 ptvcursor_pop_subtree(cursor);
3837 ptvcursor_pop_subtree(cursor);
3838 } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
3839 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
3841 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
3842 ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
3843 ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
3844 ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
3845 ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
3846 ptvcursor_pop_subtree(cursor);
3848 ptvcursor_pop_subtree(cursor);
3849 } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
3850 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
3852 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
3853 ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
3854 ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
3855 ptvcursor_pop_subtree(cursor);
3857 ptvcursor_pop_subtree(cursor);
3858 } else {
3859 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
3861 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
3862 ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
3863 ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
3864 ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
3865 ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
3866 ptvcursor_pop_subtree(cursor);
3868 ptvcursor_pop_subtree(cursor);
3869 ptvcursor_advance(cursor, 4);
3871 } else {
3872 ptvcursor_advance(cursor, 16);
3874 ptvcursor_pop_subtree(cursor);
3877 ptvcursor_pop_subtree(cursor);
3878 } else {
3879 ptvcursor_advance(cursor, (audioCapCount * 16));
3881 if (videoCapCount <= 10) {
3882 uint32_t counter_1 = 0;
3883 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [ref:videoCapCount = %d, max:10]", videoCapCount);
3884 if (videoCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (videoCapCount * 60) && videoCapCount <= 10) {
3885 for (counter_1 = 0; counter_1 < 10; counter_1++) {
3886 if (counter_1 < videoCapCount) {
3887 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [%d / %d]", counter_1 + 1, videoCapCount);
3888 payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3889 ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
3890 ptvcursor_add(cursor, hf_skinny_videoCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
3891 levelPreferenceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3892 ptvcursor_add(cursor, hf_skinny_levelPreferenceCount, 4, ENC_LITTLE_ENDIAN);
3893 if (levelPreferenceCount <= 4) {
3894 uint32_t counter_5 = 0;
3895 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [ref:levelPreferenceCount = %d, max:4]", levelPreferenceCount);
3896 if (levelPreferenceCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (levelPreferenceCount * 24) && levelPreferenceCount <= 4) {
3897 for (counter_5 = 0; counter_5 < 4; counter_5++) {
3898 if (counter_5 < levelPreferenceCount) {
3899 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [%d / %d]", counter_5 + 1, levelPreferenceCount);
3900 ptvcursor_add(cursor, hf_skinny_transmitPreference, 4, ENC_LITTLE_ENDIAN);
3901 ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
3902 ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
3903 ptvcursor_add(cursor, hf_skinny_minBitRate, 4, ENC_LITTLE_ENDIAN);
3904 ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
3905 ptvcursor_add(cursor, hf_skinny_serviceNumber, 4, ENC_LITTLE_ENDIAN);
3906 } else {
3907 ptvcursor_advance(cursor, 24);
3909 ptvcursor_pop_subtree(cursor);
3912 ptvcursor_pop_subtree(cursor);
3913 } else {
3914 ptvcursor_advance(cursor, (levelPreferenceCount * 24));
3916 if (payloadCapability == MEDIA_PAYLOAD_H261) {
3917 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H261");
3919 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
3920 ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
3921 ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
3922 ptvcursor_pop_subtree(cursor);
3924 ptvcursor_pop_subtree(cursor);
3925 ptvcursor_advance(cursor, 16);
3926 } else if (payloadCapability == MEDIA_PAYLOAD_H263) {
3927 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H263");
3929 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
3930 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
3931 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
3932 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
3933 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
3934 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
3935 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
3936 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
3937 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
3938 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
3939 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
3940 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
3941 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
3942 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
3943 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
3944 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
3945 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
3946 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
3947 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
3948 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
3949 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
3950 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
3951 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
3952 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
3953 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
3954 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
3955 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
3956 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
3957 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
3958 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
3959 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
3960 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
3961 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
3962 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
3963 ptvcursor_advance(cursor, 4);
3964 ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
3965 ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
3966 ptvcursor_pop_subtree(cursor);
3968 ptvcursor_pop_subtree(cursor);
3969 ptvcursor_advance(cursor, 16);
3970 } else if (payloadCapability == MEDIA_PAYLOAD_H264) {
3971 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H264");
3973 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h264VideoCapability");
3974 ptvcursor_add(cursor, hf_skinny_profile, 4, ENC_LITTLE_ENDIAN);
3975 ptvcursor_add(cursor, hf_skinny_level, 4, ENC_LITTLE_ENDIAN);
3976 ptvcursor_add(cursor, hf_skinny_customMaxMBPS, 4, ENC_LITTLE_ENDIAN);
3977 ptvcursor_add(cursor, hf_skinny_customMaxFS, 4, ENC_LITTLE_ENDIAN);
3978 ptvcursor_add(cursor, hf_skinny_customMaxDPB, 4, ENC_LITTLE_ENDIAN);
3979 ptvcursor_add(cursor, hf_skinny_customMaxBRandCPB, 4, ENC_LITTLE_ENDIAN);
3980 ptvcursor_pop_subtree(cursor);
3982 ptvcursor_pop_subtree(cursor);
3983 } else if (payloadCapability == MEDIA_PAYLOAD_VIEO) {
3984 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_Vieo");
3986 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
3987 ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
3988 ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
3989 ptvcursor_pop_subtree(cursor);
3991 ptvcursor_pop_subtree(cursor);
3992 ptvcursor_advance(cursor, 16);
3994 } else {
3995 ptvcursor_advance(cursor, 60);
3997 ptvcursor_pop_subtree(cursor);
4000 ptvcursor_pop_subtree(cursor);
4001 } else {
4002 ptvcursor_advance(cursor, (videoCapCount * 60));
4004 if (dataCapCount <= 5) {
4005 uint32_t counter_1 = 0;
4006 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [ref:dataCapCount = %d, max:5]", dataCapCount);
4007 if (dataCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (dataCapCount * 16) && dataCapCount <= 5) {
4008 for (counter_1 = 0; counter_1 < 5; counter_1++) {
4009 if (counter_1 < dataCapCount) {
4010 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [%d / %d]", counter_1 + 1, dataCapCount);
4011 ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
4012 ptvcursor_add(cursor, hf_skinny_dataCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
4013 ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
4014 ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
4015 } else {
4016 ptvcursor_advance(cursor, 16);
4018 ptvcursor_pop_subtree(cursor);
4021 ptvcursor_pop_subtree(cursor);
4022 } else {
4023 ptvcursor_advance(cursor, (dataCapCount * 16));
4025 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x009b);
4029 * Message: CapabilitiesV3ResMessage
4030 * Opcode: 0x0044
4031 * Type: RegistrationAndManagement
4032 * Direction: dev2pbx
4033 * VarLength: yes
4034 * MsgType: response
4036 static void
4037 handle_CapabilitiesV3ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4039 uint32_t audioCapCount = 0;
4040 uint32_t videoCapCount = 0;
4041 uint32_t dataCapCount = 0;
4042 uint32_t customPictureFormatCount = 0;
4043 uint32_t serviceResourceCount = 0;
4044 uint32_t layoutCount = 0;
4045 uint32_t payloadCapability = 0;
4046 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
4047 uint32_t levelPreferenceCount = 0;
4048 audioCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4049 ptvcursor_add(cursor, hf_skinny_audioCapCount, 4, ENC_LITTLE_ENDIAN);
4050 videoCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4051 ptvcursor_add(cursor, hf_skinny_videoCapCount, 4, ENC_LITTLE_ENDIAN);
4052 dataCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4053 ptvcursor_add(cursor, hf_skinny_dataCapCount, 4, ENC_LITTLE_ENDIAN);
4054 ptvcursor_add(cursor, hf_skinny_rtpPayloadFormat, 4, ENC_LITTLE_ENDIAN);
4055 customPictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4056 ptvcursor_add(cursor, hf_skinny_customPictureFormatCount, 4, ENC_LITTLE_ENDIAN);
4057 if (customPictureFormatCount <= 6) {
4058 uint32_t counter_1 = 0;
4059 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [ref:customPictureFormatCount = %d, max:6]", customPictureFormatCount);
4060 if (customPictureFormatCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (customPictureFormatCount * 20) && customPictureFormatCount <= 6) {
4061 for (counter_1 = 0; counter_1 < 6; counter_1++) {
4062 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [%d / %d]", counter_1 + 1, customPictureFormatCount);
4063 ptvcursor_add(cursor, hf_skinny_pictureWidth, 4, ENC_LITTLE_ENDIAN);
4064 ptvcursor_add(cursor, hf_skinny_pictureHeight, 4, ENC_LITTLE_ENDIAN);
4065 ptvcursor_add(cursor, hf_skinny_pixelAspectRatio, 4, ENC_LITTLE_ENDIAN);
4066 ptvcursor_add(cursor, hf_skinny_clockConversionCode, 4, ENC_LITTLE_ENDIAN);
4067 ptvcursor_add(cursor, hf_skinny_clockDivisor, 4, ENC_LITTLE_ENDIAN);
4068 ptvcursor_pop_subtree(cursor);
4071 ptvcursor_pop_subtree(cursor);
4072 } else {
4073 ptvcursor_advance(cursor, (customPictureFormatCount * 20));
4076 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "confResources");
4077 ptvcursor_add(cursor, hf_skinny_activeStreamsOnRegistration, 4, ENC_LITTLE_ENDIAN);
4078 ptvcursor_add(cursor, hf_skinny_maxBW, 4, ENC_LITTLE_ENDIAN);
4079 serviceResourceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4080 ptvcursor_add(cursor, hf_skinny_serviceResourceCount, 4, ENC_LITTLE_ENDIAN);
4081 if (serviceResourceCount <= 4) {
4082 uint32_t counter_2 = 0;
4083 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [ref:serviceResourceCount = %d, max:4]", serviceResourceCount);
4084 if (serviceResourceCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (serviceResourceCount * 24) && serviceResourceCount <= 4) {
4085 for (counter_2 = 0; counter_2 < 4; counter_2++) {
4086 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [%d / %d]", counter_2 + 1, serviceResourceCount);
4087 layoutCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4088 ptvcursor_add(cursor, hf_skinny_layoutCount, 4, ENC_LITTLE_ENDIAN);
4089 if (layoutCount <= 5) { /* tvb enum size guard */
4090 uint32_t counter_6 = 0;
4091 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "layouts [ref: layoutCount = %d, max:layoutCount]", layoutCount);
4092 for (counter_6 = 0; counter_6 < layoutCount; counter_6++) {
4093 ptvcursor_add(cursor, hf_skinny_layouts, 4, ENC_LITTLE_ENDIAN);
4095 ptvcursor_pop_subtree(cursor);
4096 } else {
4097 ptvcursor_advance(cursor, (layoutCount * 4)); /* guard kicked in -> skip the rest */;
4099 ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
4100 ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
4101 ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
4102 ptvcursor_add(cursor, hf_skinny_activeConferenceOnRegistration, 4, ENC_LITTLE_ENDIAN);
4103 ptvcursor_pop_subtree(cursor);
4106 ptvcursor_pop_subtree(cursor);
4107 } else {
4108 ptvcursor_advance(cursor, (serviceResourceCount * 24));
4110 ptvcursor_pop_subtree(cursor);
4112 if (audioCapCount <= 18) {
4113 uint32_t counter_1 = 0;
4114 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [ref:audioCapCount = %d, max:18]", audioCapCount);
4115 if (audioCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (audioCapCount * 16) && audioCapCount <= 18) {
4116 for (counter_1 = 0; counter_1 < 18; counter_1++) {
4117 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [%d / %d]", counter_1 + 1, audioCapCount);
4118 payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4119 ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
4120 ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
4121 if (payloadCapability == MEDIA_PAYLOAD_G7231) {
4122 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
4123 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
4124 ptvcursor_pop_subtree(cursor);
4125 ptvcursor_advance(cursor, 4);
4126 } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
4127 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
4129 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
4130 ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
4131 ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
4132 ptvcursor_pop_subtree(cursor);
4134 ptvcursor_pop_subtree(cursor);
4135 } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
4136 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
4138 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
4139 ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
4140 ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
4141 ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
4142 ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
4143 ptvcursor_pop_subtree(cursor);
4145 ptvcursor_pop_subtree(cursor);
4146 } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
4147 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
4149 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
4150 ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
4151 ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
4152 ptvcursor_pop_subtree(cursor);
4154 ptvcursor_pop_subtree(cursor);
4155 } else {
4156 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
4158 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
4159 ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
4160 ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
4161 ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
4162 ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
4163 ptvcursor_pop_subtree(cursor);
4165 ptvcursor_pop_subtree(cursor);
4166 ptvcursor_advance(cursor, 4);
4168 ptvcursor_pop_subtree(cursor);
4171 ptvcursor_pop_subtree(cursor);
4172 } else {
4173 ptvcursor_advance(cursor, (audioCapCount * 16));
4175 if (videoCapCount <= 10) {
4176 uint32_t counter_1 = 0;
4177 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [ref:videoCapCount = %d, max:10]", videoCapCount);
4178 if (videoCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (videoCapCount * 4) && videoCapCount <= 10) {
4179 for (counter_1 = 0; counter_1 < 10; counter_1++) {
4180 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [%d / %d]", counter_1 + 1, videoCapCount);
4181 payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4182 ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
4183 ptvcursor_add(cursor, hf_skinny_videoCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
4184 levelPreferenceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4185 ptvcursor_add(cursor, hf_skinny_levelPreferenceCount, 4, ENC_LITTLE_ENDIAN);
4186 if (levelPreferenceCount <= 4) {
4187 uint32_t counter_4 = 0;
4188 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [ref:levelPreferenceCount = %d, max:4]", levelPreferenceCount);
4189 if (levelPreferenceCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (levelPreferenceCount * 24) && levelPreferenceCount <= 4) {
4190 for (counter_4 = 0; counter_4 < 4; counter_4++) {
4191 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [%d / %d]", counter_4 + 1, levelPreferenceCount);
4192 ptvcursor_add(cursor, hf_skinny_transmitPreference, 4, ENC_LITTLE_ENDIAN);
4193 ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
4194 ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
4195 ptvcursor_add(cursor, hf_skinny_minBitRate, 4, ENC_LITTLE_ENDIAN);
4196 ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
4197 ptvcursor_add(cursor, hf_skinny_serviceNumber, 4, ENC_LITTLE_ENDIAN);
4198 ptvcursor_pop_subtree(cursor);
4201 ptvcursor_pop_subtree(cursor);
4202 } else {
4203 ptvcursor_advance(cursor, (levelPreferenceCount * 24));
4205 ptvcursor_add(cursor, hf_skinny_encryptionCapability, 4, ENC_LITTLE_ENDIAN);
4206 if (payloadCapability == MEDIA_PAYLOAD_H261) {
4207 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H261");
4209 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
4210 ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
4211 ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
4212 ptvcursor_pop_subtree(cursor);
4214 ptvcursor_pop_subtree(cursor);
4215 ptvcursor_advance(cursor, 16);
4216 } else if (payloadCapability == MEDIA_PAYLOAD_H263) {
4217 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H263");
4219 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
4220 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
4221 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
4222 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
4223 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
4224 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
4225 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
4226 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
4227 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
4228 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
4229 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
4230 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
4231 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
4232 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
4233 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
4234 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
4235 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
4236 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
4237 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
4238 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
4239 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
4240 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
4241 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
4242 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
4243 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
4244 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
4245 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
4246 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
4247 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
4248 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
4249 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
4250 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
4251 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
4252 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
4253 ptvcursor_advance(cursor, 4);
4254 ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
4255 ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
4256 ptvcursor_pop_subtree(cursor);
4258 ptvcursor_pop_subtree(cursor);
4259 ptvcursor_advance(cursor, 16);
4260 } else if (payloadCapability == MEDIA_PAYLOAD_H264) {
4261 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H264");
4263 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h264VideoCapability");
4264 ptvcursor_add(cursor, hf_skinny_profile, 4, ENC_LITTLE_ENDIAN);
4265 ptvcursor_add(cursor, hf_skinny_level, 4, ENC_LITTLE_ENDIAN);
4266 ptvcursor_add(cursor, hf_skinny_customMaxMBPS, 4, ENC_LITTLE_ENDIAN);
4267 ptvcursor_add(cursor, hf_skinny_customMaxFS, 4, ENC_LITTLE_ENDIAN);
4268 ptvcursor_add(cursor, hf_skinny_customMaxDPB, 4, ENC_LITTLE_ENDIAN);
4269 ptvcursor_add(cursor, hf_skinny_customMaxBRandCPB, 4, ENC_LITTLE_ENDIAN);
4270 ptvcursor_pop_subtree(cursor);
4272 ptvcursor_pop_subtree(cursor);
4273 } else if (payloadCapability == MEDIA_PAYLOAD_VIEO) {
4274 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_Vieo");
4276 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
4277 ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
4278 ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
4279 ptvcursor_pop_subtree(cursor);
4281 ptvcursor_pop_subtree(cursor);
4282 ptvcursor_advance(cursor, 16);
4284 ptvcursor_add(cursor, hf_skinny_ipAddressingMode, 4, ENC_LITTLE_ENDIAN);
4285 if (hdr_version >= V16_MSG_TYPE) {
4286 ptvcursor_add(cursor, hf_skinny_ipAddressingMode, 4, ENC_LITTLE_ENDIAN);
4288 ptvcursor_pop_subtree(cursor);
4291 ptvcursor_pop_subtree(cursor);
4292 } else {
4293 ptvcursor_advance(cursor, (videoCapCount * 4));
4295 if (dataCapCount <= 5) {
4296 uint32_t counter_1 = 0;
4297 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [ref:dataCapCount = %d, max:5]", dataCapCount);
4298 if (dataCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (dataCapCount * 20) && dataCapCount <= 5) {
4299 for (counter_1 = 0; counter_1 < 5; counter_1++) {
4300 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [%d / %d]", counter_1 + 1, dataCapCount);
4301 ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
4302 ptvcursor_add(cursor, hf_skinny_dataCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
4303 ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
4304 ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
4305 ptvcursor_add(cursor, hf_skinny_encryptionCapability, 4, ENC_LITTLE_ENDIAN);
4306 ptvcursor_pop_subtree(cursor);
4309 ptvcursor_pop_subtree(cursor);
4310 } else {
4311 ptvcursor_advance(cursor, (dataCapCount * 20));
4313 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x009b);
4317 * Message: PortResMessage
4318 * Opcode: 0x0045
4319 * Type: MediaControl
4320 * Direction: dev2pbx
4321 * VarLength: no
4322 * MsgType: response
4324 static void
4325 handle_PortResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4327 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
4328 uint32_t callReference = 0;
4329 address ipAddr;
4330 char *ipAddr_str = NULL;
4331 uint32_t portNumber = 0;
4333 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
4334 callReference = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4335 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4336 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
4337 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4338 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
4339 read_skinny_ipv4or6(cursor, &ipAddr);
4340 dissect_skinny_ipv4or6(cursor, hf_skinny_ipAddr_ipv4, hf_skinny_ipAddr_ipv6);
4341 portNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4342 ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN);
4343 srtp_add_address(pinfo, PT_UDP, &ipAddr, portNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
4344 ipAddr_str = address_to_display(NULL, &ipAddr);
4345 si->additionalInfo = ws_strdup_printf("%s:%d", ipAddr_str, portNumber);
4346 wmem_free(NULL, ipAddr_str);
4347 ptvcursor_add(cursor, hf_skinny_RTCPPortNumber, 4, ENC_LITTLE_ENDIAN);
4348 if (hdr_version >= V19_MSG_TYPE) {
4349 ptvcursor_add(cursor, hf_skinny_mediaType, 4, ENC_LITTLE_ENDIAN);
4351 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x014b ^ callReference);
4355 * Message: QoSResvNotifyMessage
4356 * Opcode: 0x0046
4357 * Type: IntraCCM
4358 * Direction: pbx2pbx
4359 * VarLength: no
4360 * MsgType: event
4362 static void
4363 handle_QoSResvNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4365 address remoteIpAddr;
4366 char *remoteIpAddr_str = NULL;
4367 uint32_t remotePortNumber = 0;
4368 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
4369 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4370 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
4371 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4372 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
4373 read_skinny_ipv4or6(cursor, &remoteIpAddr);
4374 dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6);
4375 remotePortNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4376 ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
4377 srtp_add_address(pinfo, PT_UDP, &remoteIpAddr, remotePortNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
4378 remoteIpAddr_str = address_to_display(NULL, &remoteIpAddr);
4379 si->additionalInfo = ws_strdup_printf("%s:%d", remoteIpAddr_str, remotePortNumber);
4380 wmem_free(NULL, remoteIpAddr_str);
4381 ptvcursor_add(cursor, hf_skinny_direction, 4, ENC_LITTLE_ENDIAN);
4385 * Message: QoSErrorNotifyMessage
4386 * Opcode: 0x0047
4387 * Type: IntraCCM
4388 * Direction: pbx2pbx
4389 * VarLength: no
4390 * MsgType: event
4392 static void
4393 handle_QoSErrorNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4395 address remoteIpAddr;
4396 char *remoteIpAddr_str = NULL;
4397 uint32_t remotePortNumber = 0;
4398 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
4399 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4400 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
4401 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4402 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
4403 read_skinny_ipv4or6(cursor, &remoteIpAddr);
4404 dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6);
4405 remotePortNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4406 ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
4407 srtp_add_address(pinfo, PT_UDP, &remoteIpAddr, remotePortNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
4408 remoteIpAddr_str = address_to_display(NULL, &remoteIpAddr);
4409 si->additionalInfo = ws_strdup_printf("%s:%d", remoteIpAddr_str, remotePortNumber);
4410 wmem_free(NULL, remoteIpAddr_str);
4411 ptvcursor_add(cursor, hf_skinny_direction, 4, ENC_LITTLE_ENDIAN);
4412 ptvcursor_add(cursor, hf_skinny_errorCode, 4, ENC_LITTLE_ENDIAN);
4413 ptvcursor_add(cursor, hf_skinny_failureNodeIpAddr, 4, ENC_LITTLE_ENDIAN);
4414 ptvcursor_add(cursor, hf_skinny_rsvpErrorCode, 4, ENC_LITTLE_ENDIAN);
4415 ptvcursor_add(cursor, hf_skinny_rsvpErrorSubCodeVal, 4, ENC_LITTLE_ENDIAN);
4416 ptvcursor_add(cursor, hf_skinny_rsvpErrorFlag, 4, ENC_LITTLE_ENDIAN);
4420 * Message: SubscriptionStatReqMessage
4421 * Opcode: 0x0048
4422 * Type: CallControl
4423 * Direction: dev2pbx
4424 * VarLength: no
4425 * MsgType: request
4427 static void
4428 handle_SubscriptionStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4430 uint32_t transactionId = 0;
4431 transactionId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4432 ptvcursor_add(cursor, hf_skinny_transactionId, 4, ENC_LITTLE_ENDIAN);
4433 ptvcursor_add(cursor, hf_skinny_subscriptionFeatureID, 4, ENC_LITTLE_ENDIAN);
4434 ptvcursor_add(cursor, hf_skinny_timer, 4, ENC_LITTLE_ENDIAN);
4435 ptvcursor_add(cursor, hf_skinny_subscriptionID, 64, ENC_ASCII);
4436 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0048 ^ transactionId);
4440 * Message: MediaPathEventMessage
4441 * Opcode: 0x0049
4442 * Type: CallControl
4443 * Direction: dev2pbx
4444 * VarLength: no
4445 * MsgType: event
4447 static void
4448 handle_MediaPathEventMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4450 ptvcursor_add(cursor, hf_skinny_mediaPathID, 4, ENC_LITTLE_ENDIAN);
4451 ptvcursor_add(cursor, hf_skinny_mediaPathEvent, 4, ENC_LITTLE_ENDIAN);
4455 * Message: MediaPathCapabilityMessage
4456 * Opcode: 0x004a
4457 * Type: CallControl
4458 * Direction: dev2pbx
4459 * VarLength: no
4460 * MsgType: event
4462 static void
4463 handle_MediaPathCapabilityMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4465 ptvcursor_add(cursor, hf_skinny_mediaPathID, 4, ENC_LITTLE_ENDIAN);
4466 ptvcursor_add(cursor, hf_skinny_mediaPathCapabilities, 4, ENC_LITTLE_ENDIAN);
4470 * Message: MwiNotificationMessage
4471 * Opcode: 0x004c
4472 * Type: RegistrationAndManagement
4473 * Direction: pbx2pbx
4474 * VarLength: no
4475 * MsgType: request
4477 static void
4478 handle_MwiNotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4480 ptvcursor_add(cursor, hf_skinny_mwiTargetNumber, 25, ENC_ASCII);
4481 ptvcursor_add(cursor, hf_skinny_mwiControlNumber, 25, ENC_ASCII);
4482 ptvcursor_add(cursor, hf_skinny_areMessagesWaiting, 4, ENC_LITTLE_ENDIAN);
4484 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "totalVmCounts");
4485 ptvcursor_add(cursor, hf_skinny_numNewMsgs, 4, ENC_LITTLE_ENDIAN);
4486 ptvcursor_add(cursor, hf_skinny_numOldMsgs, 4, ENC_LITTLE_ENDIAN);
4487 ptvcursor_pop_subtree(cursor);
4490 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "priorityVmCounts");
4491 ptvcursor_add(cursor, hf_skinny_numNewMsgs, 4, ENC_LITTLE_ENDIAN);
4492 ptvcursor_add(cursor, hf_skinny_numOldMsgs, 4, ENC_LITTLE_ENDIAN);
4493 ptvcursor_pop_subtree(cursor);
4496 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "totalFaxCounts");
4497 ptvcursor_add(cursor, hf_skinny_numNewMsgs, 4, ENC_LITTLE_ENDIAN);
4498 ptvcursor_add(cursor, hf_skinny_numOldMsgs, 4, ENC_LITTLE_ENDIAN);
4499 ptvcursor_pop_subtree(cursor);
4502 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "priorityFaxCounts");
4503 ptvcursor_add(cursor, hf_skinny_numNewMsgs, 4, ENC_LITTLE_ENDIAN);
4504 ptvcursor_add(cursor, hf_skinny_numOldMsgs, 4, ENC_LITTLE_ENDIAN);
4505 ptvcursor_pop_subtree(cursor);
4507 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x004c);
4511 * Message: RegisterAckMessage
4512 * Opcode: 0x0081
4513 * Type: RegistrationAndManagement
4514 * Direction: pbx2dev
4515 * VarLength: no
4516 * MsgType: response
4518 static void
4519 handle_RegisterAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4521 ptvcursor_add(cursor, hf_skinny_keepAliveInterval, 4, ENC_LITTLE_ENDIAN);
4522 ptvcursor_add(cursor, hf_skinny_dateTemplate, 6, ENC_ASCII);
4523 ptvcursor_add(cursor, hf_skinny_alignmentPadding, 2, ENC_LITTLE_ENDIAN);
4524 ptvcursor_add(cursor, hf_skinny_secondaryKeepAliveInterval, 4, ENC_LITTLE_ENDIAN);
4525 ptvcursor_add(cursor, hf_skinny_maxProtocolVer, 1, ENC_LITTLE_ENDIAN);
4526 ptvcursor_add(cursor, hf_skinny_unknown, 1, ENC_LITTLE_ENDIAN);
4527 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "phoneFeatures");
4528 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit1, 2, ENC_LITTLE_ENDIAN);
4529 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit2, 2, ENC_LITTLE_ENDIAN);
4530 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit3, 2, ENC_LITTLE_ENDIAN);
4531 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit4, 2, ENC_LITTLE_ENDIAN);
4532 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_UTF8, 2, ENC_LITTLE_ENDIAN);
4533 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit6, 2, ENC_LITTLE_ENDIAN);
4534 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit7, 2, ENC_LITTLE_ENDIAN);
4535 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_DynamicMessages, 2, ENC_LITTLE_ENDIAN);
4536 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit9, 2, ENC_LITTLE_ENDIAN);
4537 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_RFC2833, 2, ENC_LITTLE_ENDIAN);
4538 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit11, 2, ENC_LITTLE_ENDIAN);
4539 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit12, 2, ENC_LITTLE_ENDIAN);
4540 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit13, 2, ENC_LITTLE_ENDIAN);
4541 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit14, 2, ENC_LITTLE_ENDIAN);
4542 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit15, 2, ENC_LITTLE_ENDIAN);
4543 ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Abbreviated_Dial, 2, ENC_LITTLE_ENDIAN);
4544 ptvcursor_advance(cursor, 2);
4545 ptvcursor_pop_subtree(cursor); /* end bitfield: phoneFeatures */
4546 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0001);
4550 * Message: StartToneMessage
4551 * Opcode: 0x0082
4552 * Type: MediaControl
4553 * Direction: pbx2dev
4554 * VarLength: no
4555 * MsgType: event
4557 static void
4558 handle_StartToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4560 si->additionalInfo = ws_strdup_printf("\"%s\"",
4561 try_val_to_str_ext(
4562 tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)),
4563 &DeviceTone_ext
4566 ptvcursor_add(cursor, hf_skinny_tone, 4, ENC_LITTLE_ENDIAN);
4567 ptvcursor_add(cursor, hf_skinny_tone_output_direction, 4, ENC_LITTLE_ENDIAN);
4568 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4569 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
4570 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4571 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
4575 * Message: StopToneMessage
4576 * Opcode: 0x0083
4577 * Type: MediaControl
4578 * Direction: pbx2dev
4579 * VarLength: no
4580 * MsgType: event
4582 static void
4583 handle_StopToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4585 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
4587 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4588 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
4589 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4590 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
4591 if (hdr_version >= V11_MSG_TYPE) {
4592 ptvcursor_add(cursor, hf_skinny_tone, 4, ENC_LITTLE_ENDIAN);
4597 * Message: SetRingerMessage
4598 * Opcode: 0x0085
4599 * Type: CallControl
4600 * Direction: pbx2dev
4601 * VarLength: no
4602 * MsgType: event
4604 static void
4605 handle_SetRingerMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4607 ptvcursor_add(cursor, hf_skinny_ringMode, 4, ENC_LITTLE_ENDIAN);
4608 ptvcursor_add(cursor, hf_skinny_ringDuration, 4, ENC_LITTLE_ENDIAN);
4609 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4610 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
4611 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4612 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
4616 * Message: SetLampMessage
4617 * Opcode: 0x0086
4618 * Type: CallControl
4619 * Direction: pbx2dev
4620 * VarLength: no
4621 * MsgType: event
4623 static void
4624 handle_SetLampMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4626 ptvcursor_add(cursor, hf_skinny_stimulus, 4, ENC_LITTLE_ENDIAN);
4627 ptvcursor_add(cursor, hf_skinny_stimulusInstance, 4, ENC_LITTLE_ENDIAN);
4628 ptvcursor_add(cursor, hf_skinny_lampMode, 4, ENC_LITTLE_ENDIAN);
4632 * Message: SetSpeakerModeMessage
4633 * Opcode: 0x0088
4634 * Type: CallControl
4635 * Direction: pbx2dev
4636 * VarLength: no
4637 * MsgType: event
4639 static void
4640 handle_SetSpeakerModeMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4642 ptvcursor_add(cursor, hf_skinny_speakerMode, 4, ENC_LITTLE_ENDIAN);
4646 * Message: SetMicroModeMessage
4647 * Opcode: 0x0089
4648 * Type: CallControl
4649 * Direction: pbx2dev
4650 * VarLength: no
4651 * MsgType: event
4653 static void
4654 handle_SetMicroModeMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4656 ptvcursor_add(cursor, hf_skinny_micMode, 4, ENC_LITTLE_ENDIAN);
4660 * Message: StartMediaTransmissionMessage
4661 * Opcode: 0x008a
4662 * Type: MediaControl
4663 * Direction: pbx2dev
4664 * VarLength: no
4665 * MsgType: request
4667 static void
4668 handle_StartMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4670 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
4671 uint32_t passThroughPartyId = 0;
4672 address remoteIpAddr;
4673 char *remoteIpAddr_str = NULL;
4674 uint32_t remotePortNumber = 0;
4675 uint32_t compressionType = 0;
4676 uint16_t keylen = 0;
4677 uint16_t saltlen = 0;
4679 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
4680 passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4681 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4682 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
4683 read_skinny_ipv4or6(cursor, &remoteIpAddr);
4684 dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6);
4685 remotePortNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4686 ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
4687 srtp_add_address(pinfo, PT_UDP, &remoteIpAddr, remotePortNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
4688 remoteIpAddr_str = address_to_display(NULL, &remoteIpAddr);
4689 si->additionalInfo = ws_strdup_printf("%s:%d", remoteIpAddr_str, remotePortNumber);
4690 wmem_free(NULL, remoteIpAddr_str);
4691 ptvcursor_add(cursor, hf_skinny_milliSecondPacketSize, 4, ENC_LITTLE_ENDIAN);
4692 compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4693 ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
4695 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierOut");
4696 ptvcursor_add(cursor, hf_skinny_precedenceValue, 4, ENC_LITTLE_ENDIAN);
4697 ptvcursor_add(cursor, hf_skinny_ssValue, 4, ENC_LITTLE_ENDIAN);
4698 ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 2, ENC_LITTLE_ENDIAN);
4699 ptvcursor_add(cursor, hf_skinny_padding, 2, ENC_LITTLE_ENDIAN);
4700 if (hdr_version <= V10_MSG_TYPE) {
4701 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
4703 if (hdr_version >= V11_MSG_TYPE) {
4704 if (compressionType == MEDIA_PAYLOAD_G7231) {
4705 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
4706 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
4707 ptvcursor_pop_subtree(cursor);
4708 } else {
4709 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
4711 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
4712 ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
4713 ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
4714 ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
4715 ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
4716 ptvcursor_pop_subtree(cursor);
4718 ptvcursor_pop_subtree(cursor);
4721 ptvcursor_pop_subtree(cursor);
4723 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4724 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
4726 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "mTxMediaEncryptionKeyInfo");
4727 ptvcursor_add(cursor, hf_skinny_algorithmID, 4, ENC_LITTLE_ENDIAN);
4728 keylen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4729 ptvcursor_add(cursor, hf_skinny_keylen, 2, ENC_LITTLE_ENDIAN);
4730 saltlen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4731 ptvcursor_add(cursor, hf_skinny_saltlen, 2, ENC_LITTLE_ENDIAN);
4732 if (keylen <= 16) {
4733 uint32_t counter_3 = 0;
4734 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "key [ref:keylen = %d, max:16]", keylen);
4735 for (counter_3 = 0; counter_3 < 16; counter_3++) {
4736 if (counter_3 < keylen) {
4737 ptvcursor_add(cursor, hf_skinny_key, 1, ENC_LITTLE_ENDIAN);
4738 } else {
4739 ptvcursor_advance(cursor, 1);
4742 ptvcursor_pop_subtree(cursor);
4743 } else {
4744 ptvcursor_advance(cursor, (16 * 1));
4746 if (saltlen <= 16) {
4747 uint32_t counter_3 = 0;
4748 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "salt [ref:saltlen = %d, max:16]", saltlen);
4749 for (counter_3 = 0; counter_3 < 16; counter_3++) {
4750 if (counter_3 < saltlen) {
4751 ptvcursor_add(cursor, hf_skinny_salt, 1, ENC_LITTLE_ENDIAN);
4752 } else {
4753 ptvcursor_advance(cursor, 1);
4756 ptvcursor_pop_subtree(cursor);
4757 } else {
4758 ptvcursor_advance(cursor, (16 * 1));
4760 ptvcursor_add(cursor, hf_skinny_isMKIPresent, 4, ENC_LITTLE_ENDIAN);
4761 ptvcursor_add(cursor, hf_skinny_keyDerivationRate, 4, ENC_LITTLE_ENDIAN);
4762 ptvcursor_pop_subtree(cursor);
4764 ptvcursor_add(cursor, hf_skinny_streamPassThroughId, 4, ENC_LITTLE_ENDIAN);
4765 ptvcursor_add(cursor, hf_skinny_associatedStreamId, 4, ENC_LITTLE_ENDIAN);
4766 ptvcursor_add(cursor, hf_skinny_RFC2833PayloadType, 4, ENC_LITTLE_ENDIAN);
4767 ptvcursor_add(cursor, hf_skinny_dtmfType, 4, ENC_LITTLE_ENDIAN);
4768 ptvcursor_add(cursor, hf_skinny_mixingMode, 4, ENC_LITTLE_ENDIAN);
4769 if (hdr_version >= V15_MSG_TYPE) {
4770 ptvcursor_add(cursor, hf_skinny_partyDirection, 4, ENC_LITTLE_ENDIAN);
4772 if (hdr_version >= V21_MSG_TYPE) {
4774 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "latentCapsInfo");
4775 ptvcursor_add(cursor, hf_skinny_active, 4, ENC_LITTLE_ENDIAN);
4777 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
4778 ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
4779 ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
4780 ptvcursor_pop_subtree(cursor);
4783 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
4784 ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
4785 ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
4786 ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
4787 ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
4788 ptvcursor_pop_subtree(cursor);
4791 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
4792 ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
4793 ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
4794 ptvcursor_pop_subtree(cursor);
4797 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadParam");
4798 ptvcursor_add(cursor, hf_skinny_nse, 1, ENC_LITTLE_ENDIAN);
4799 ptvcursor_add(cursor, hf_skinny_rfc2833, 1, ENC_LITTLE_ENDIAN);
4800 ptvcursor_add(cursor, hf_skinny_sse, 1, ENC_LITTLE_ENDIAN);
4801 ptvcursor_add(cursor, hf_skinny_v150sprt, 1, ENC_LITTLE_ENDIAN);
4802 ptvcursor_add(cursor, hf_skinny_noaudio, 1, ENC_LITTLE_ENDIAN);
4803 ptvcursor_add(cursor, hf_skinny_FutureUse1, 1, ENC_LITTLE_ENDIAN);
4804 ptvcursor_add(cursor, hf_skinny_FutureUse2, 1, ENC_LITTLE_ENDIAN);
4805 ptvcursor_add(cursor, hf_skinny_FutureUse3, 1, ENC_LITTLE_ENDIAN);
4806 ptvcursor_pop_subtree(cursor);
4808 ptvcursor_pop_subtree(cursor);
4811 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x008a ^ passThroughPartyId);
4815 * Message: StopMediaTransmissionMessage
4816 * Opcode: 0x008b
4817 * Type: MediaControl
4818 * Direction: pbx2dev
4819 * VarLength: no
4820 * MsgType: event
4822 static void
4823 handle_StopMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4825 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
4826 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4827 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
4828 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4829 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
4830 ptvcursor_add(cursor, hf_skinny_portHandlingFlag, 4, ENC_LITTLE_ENDIAN);
4834 * Message: CallInfoMessage
4835 * Opcode: 0x008f
4836 * Type: CallControl
4837 * Direction: pbx2dev
4838 * VarLength: no
4839 * MsgType: event
4841 static void
4842 handle_CallInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4844 ptvcursor_add(cursor, hf_skinny_callingPartyName, 40, ENC_ASCII);
4845 si->callingParty = g_strdup(tvb_format_stringzpad(pinfo->pool, ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), 24));
4846 ptvcursor_add(cursor, hf_skinny_callingParty, 24, ENC_ASCII);
4847 ptvcursor_add(cursor, hf_skinny_calledPartyName, 40, ENC_ASCII);
4848 si->calledParty = g_strdup(tvb_format_stringzpad(pinfo->pool, ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), 24));
4849 ptvcursor_add(cursor, hf_skinny_calledParty, 24, ENC_ASCII);
4850 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4851 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
4852 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4853 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
4854 ptvcursor_add(cursor, hf_skinny_callType, 4, ENC_LITTLE_ENDIAN);
4855 ptvcursor_add(cursor, hf_skinny_originalCalledPartyName, 40, ENC_ASCII);
4856 ptvcursor_add(cursor, hf_skinny_originalCalledParty, 24, ENC_ASCII);
4857 ptvcursor_add(cursor, hf_skinny_lastRedirectingPartyName, 40, ENC_ASCII);
4858 ptvcursor_add(cursor, hf_skinny_lastRedirectingParty, 24, ENC_ASCII);
4859 ptvcursor_add(cursor, hf_skinny_originalCdpnRedirectReason, 4, ENC_LITTLE_ENDIAN);
4860 ptvcursor_add(cursor, hf_skinny_lastRedirectingReason, 4, ENC_LITTLE_ENDIAN);
4861 ptvcursor_add(cursor, hf_skinny_cgpnVoiceMailbox, 24, ENC_ASCII);
4862 ptvcursor_add(cursor, hf_skinny_cdpnVoiceMailbox, 24, ENC_ASCII);
4863 ptvcursor_add(cursor, hf_skinny_originalCdpnVoiceMailbox, 24, ENC_ASCII);
4864 ptvcursor_add(cursor, hf_skinny_lastRedirectingVoiceMailbox, 24, ENC_ASCII);
4865 ptvcursor_add(cursor, hf_skinny_callInstance, 4, ENC_LITTLE_ENDIAN);
4866 ptvcursor_add(cursor, hf_skinny_callSecurityStatus, 4, ENC_LITTLE_ENDIAN);
4867 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "partyPIRestrictionBits");
4868 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyName, 4, ENC_LITTLE_ENDIAN);
4869 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyNumber, 4, ENC_LITTLE_ENDIAN);
4870 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingParty, 4, ENC_LITTLE_ENDIAN);
4871 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyName, 4, ENC_LITTLE_ENDIAN);
4872 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
4873 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledParty, 4, ENC_LITTLE_ENDIAN);
4874 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyName, 4, ENC_LITTLE_ENDIAN);
4875 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
4876 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledParty, 4, ENC_LITTLE_ENDIAN);
4877 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyName, 4, ENC_LITTLE_ENDIAN);
4878 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyNumber, 4, ENC_LITTLE_ENDIAN);
4879 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectParty, 4, ENC_LITTLE_ENDIAN);
4880 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_BitsReserved, 4, ENC_LITTLE_ENDIAN);
4881 ptvcursor_advance(cursor, 4);
4882 ptvcursor_pop_subtree(cursor); /* end bitfield: partyPIRestrictionBits */
4883 if (si->callingParty && si->calledParty) {
4884 si->additionalInfo = ws_strdup_printf("\"%s -> %s\"", si->callingParty, si->calledParty);
4889 * Message: ForwardStatResMessage
4890 * Opcode: 0x0090
4891 * Type: RegistrationAndManagement
4892 * Direction: pbx2dev
4893 * VarLength: no
4894 * MsgType: response
4896 static void
4897 handle_ForwardStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4899 uint32_t lineNumber = 0;
4900 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
4901 uint32_t VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;
4902 ptvcursor_add(cursor, hf_skinny_activeForward, 4, ENC_LITTLE_ENDIAN);
4903 lineNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4904 ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN);
4905 ptvcursor_add(cursor, hf_skinny_forwardAllActive, 4, ENC_LITTLE_ENDIAN);
4906 ptvcursor_add(cursor, hf_skinny_forwardAllDirnum, VariableDirnumSize, ENC_ASCII);
4907 ptvcursor_add(cursor, hf_skinny_forwardBusyActive, 4, ENC_LITTLE_ENDIAN);
4908 ptvcursor_add(cursor, hf_skinny_forwardBusyDirnum, VariableDirnumSize, ENC_ASCII);
4909 ptvcursor_add(cursor, hf_skinny_forwardNoAnswerActive, 4, ENC_LITTLE_ENDIAN);
4910 ptvcursor_add(cursor, hf_skinny_forwardNoAnswerlDirnum, VariableDirnumSize, ENC_ASCII);
4911 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0009 ^ lineNumber);
4915 * Message: SpeedDialStatResMessage
4916 * Opcode: 0x0091
4917 * Type: RegistrationAndManagement
4918 * Direction: pbx2dev
4919 * VarLength: no
4920 * MsgType: response
4922 static void
4923 handle_SpeedDialStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4925 uint32_t speedDialNumber = 0;
4926 speedDialNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4927 ptvcursor_add(cursor, hf_skinny_speedDialNumber, 4, ENC_LITTLE_ENDIAN);
4928 ptvcursor_add(cursor, hf_skinny_speedDialDirNumber, 24, ENC_ASCII);
4929 ptvcursor_add(cursor, hf_skinny_speedDialDisplayName, 40, ENC_ASCII);
4930 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000a ^ speedDialNumber);
4934 * Message: LineStatResMessage
4935 * Opcode: 0x0092
4936 * Type: RegistrationAndManagement
4937 * Direction: pbx2dev
4938 * VarLength: no
4939 * MsgType: response
4941 static void
4942 handle_LineStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4944 uint32_t lineNumber = 0;
4945 lineNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
4946 ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN);
4947 ptvcursor_add(cursor, hf_skinny_lineDirNumber, 24, ENC_ASCII);
4948 ptvcursor_add(cursor, hf_skinny_lineFullyQualifiedDisplayName, 40, ENC_ASCII);
4949 ptvcursor_add(cursor, hf_skinny_lineTextLabel, 40, ENC_ASCII);
4950 ptvcursor_add(cursor, hf_skinny_lineDisplayOptions, 4, ENC_LITTLE_ENDIAN);
4951 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000b ^ lineNumber);
4955 * Message: ConfigStatResMessage
4956 * Opcode: 0x0093
4957 * Type: RegistrationAndManagement
4958 * Direction: pbx2dev
4959 * VarLength: no
4960 * MsgType: response
4962 static void
4963 handle_ConfigStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4966 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
4967 ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII);
4968 ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
4969 ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
4970 ptvcursor_pop_subtree(cursor);
4972 ptvcursor_add(cursor, hf_skinny_userName, 40, ENC_ASCII);
4973 ptvcursor_add(cursor, hf_skinny_serverName, 40, ENC_ASCII);
4974 ptvcursor_add(cursor, hf_skinny_numberOfLines, 4, ENC_LITTLE_ENDIAN);
4975 ptvcursor_add(cursor, hf_skinny_numberOfSpeedDials, 4, ENC_LITTLE_ENDIAN);
4976 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000c);
4980 * Message: TimeDateResMessage
4981 * Opcode: 0x0094
4982 * Type: RegistrationAndManagement
4983 * Direction: pbx2dev
4984 * VarLength: no
4985 * MsgType: response
4987 static void
4988 handle_TimeDateResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
4991 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "timeDataInfo");
4992 ptvcursor_add(cursor, hf_skinny_wYear, 4, ENC_LITTLE_ENDIAN);
4993 ptvcursor_add(cursor, hf_skinny_wMonth, 4, ENC_LITTLE_ENDIAN);
4994 ptvcursor_add(cursor, hf_skinny_wDayOfWeek, 4, ENC_LITTLE_ENDIAN);
4995 ptvcursor_add(cursor, hf_skinny_wDay, 4, ENC_LITTLE_ENDIAN);
4996 ptvcursor_add(cursor, hf_skinny_wHour, 4, ENC_LITTLE_ENDIAN);
4997 ptvcursor_add(cursor, hf_skinny_wMinute, 4, ENC_LITTLE_ENDIAN);
4998 ptvcursor_add(cursor, hf_skinny_wSecond, 4, ENC_LITTLE_ENDIAN);
4999 ptvcursor_add(cursor, hf_skinny_wMilliseconds, 4, ENC_LITTLE_ENDIAN);
5000 ptvcursor_pop_subtree(cursor);
5002 ptvcursor_add(cursor, hf_skinny_systemTime, 4, ENC_LITTLE_ENDIAN);
5003 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000d);
5007 * Message: StartSessionTransmissionMessage
5008 * Opcode: 0x0095
5009 * Type: IntraCCM
5010 * Direction: pbx2pbx
5011 * VarLength: no
5012 * MsgType: event
5014 static void
5015 handle_StartSessionTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5017 dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6);
5018 ptvcursor_add(cursor, hf_skinny_sessionType, 4, ENC_LITTLE_ENDIAN);
5022 * Message: StopSessionTransmissionMessage
5023 * Opcode: 0x0096
5024 * Type: IntraCCM
5025 * Direction: pbx2pbx
5026 * VarLength: no
5027 * MsgType: event
5029 static void
5030 handle_StopSessionTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5032 dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6);
5033 ptvcursor_add(cursor, hf_skinny_sessionType, 4, ENC_LITTLE_ENDIAN);
5037 * Message: ButtonTemplateResMessage
5038 * Opcode: 0x0097
5039 * Type: RegistrationAndManagement
5040 * Direction: pbx2dev
5041 * VarLength: no
5042 * MsgType: response
5044 static void
5045 handle_ButtonTemplateResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5047 uint32_t totalButtonCount = 0;
5049 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "buttonTemplate");
5050 ptvcursor_add(cursor, hf_skinny_buttonOffset, 4, ENC_LITTLE_ENDIAN);
5051 ptvcursor_add(cursor, hf_skinny_buttonCount, 4, ENC_LITTLE_ENDIAN);
5052 totalButtonCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5053 ptvcursor_add(cursor, hf_skinny_totalButtonCount, 4, ENC_LITTLE_ENDIAN);
5054 if (totalButtonCount <= 42) {
5055 uint32_t counter_2 = 0;
5056 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [ref:totalButtonCount = %d, max:42]", totalButtonCount);
5057 if (totalButtonCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (totalButtonCount * 2) && totalButtonCount <= 42) {
5058 for (counter_2 = 0; counter_2 < 42; counter_2++) {
5059 if (counter_2 < totalButtonCount) {
5060 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [%d / %d]", counter_2 + 1, totalButtonCount);
5061 ptvcursor_add(cursor, hf_skinny_instanceNumber, 1, ENC_LITTLE_ENDIAN);
5062 ptvcursor_add(cursor, hf_skinny_buttonDefinition, 1, ENC_LITTLE_ENDIAN);
5063 } else {
5064 ptvcursor_advance(cursor, 2);
5066 ptvcursor_pop_subtree(cursor);
5069 ptvcursor_pop_subtree(cursor);
5070 } else {
5071 ptvcursor_advance(cursor, (totalButtonCount * 2));
5073 ptvcursor_pop_subtree(cursor);
5075 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000e);
5079 * Message: VersionResMessage
5080 * Opcode: 0x0098
5081 * Type: RegistrationAndManagement
5082 * Direction: pbx2dev
5083 * VarLength: no
5084 * MsgType: response
5086 static void
5087 handle_VersionResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5089 ptvcursor_add(cursor, hf_skinny_versionStr, 16, ENC_ASCII);
5090 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000f);
5094 * Message: DisplayTextMessage
5095 * Opcode: 0x0099
5096 * Type: CallControl
5097 * Direction: pbx2dev
5098 * VarLength: no
5099 * MsgType: event
5101 static void
5102 handle_DisplayTextMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5104 ptvcursor_add(cursor, hf_skinny_text, 32, ENC_ASCII);
5108 * Message: RegisterRejectMessage
5109 * Opcode: 0x009d
5110 * Type: RegistrationAndManagement
5111 * Direction: pbx2dev
5112 * VarLength: no
5113 * MsgType: event
5115 static void
5116 handle_RegisterRejectMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5118 ptvcursor_add(cursor, hf_skinny_text, 32, ENC_ASCII);
5122 * Message: ServerResMessage
5123 * Opcode: 0x009e
5124 * Type: RegistrationAndManagement
5125 * Direction: pbx2dev
5126 * VarLength: no
5127 * MsgType: response
5129 static void
5130 handle_ServerResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5132 uint32_t hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
5135 uint32_t counter_1 = 0;
5136 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "server [max:5]");
5137 for (counter_1 = 0; counter_1 < 5; counter_1++) {
5138 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "server [%d / %d]", counter_1 + 1, 5);
5139 ptvcursor_add(cursor, hf_skinny_ServerName, 48, ENC_ASCII);
5140 ptvcursor_pop_subtree(cursor);
5142 ptvcursor_pop_subtree(cursor);
5145 uint32_t counter_2 = 0;
5146 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serverTcpListenPort [max:5]");
5147 for (counter_2 = 0; counter_2 < 5; counter_2++) {
5148 ptvcursor_add(cursor, hf_skinny_serverTcpListenPort, 4, ENC_LITTLE_ENDIAN);
5150 ptvcursor_pop_subtree(cursor);
5152 if (hdr_data_length < 293) {
5154 uint32_t counter_2 = 0;
5155 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serverIpAddr [max:5]");
5156 for (counter_2 = 0; counter_2 < 5; counter_2++) {
5157 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serverIpAddr [%d / %d]", counter_2 + 1, 5);
5158 ptvcursor_add(cursor, hf_skinny_stationIpAddr, 4, ENC_BIG_ENDIAN);
5159 ptvcursor_pop_subtree(cursor);
5161 ptvcursor_pop_subtree(cursor);
5164 if (hdr_data_length > 292) {
5166 uint32_t counter_2 = 0;
5167 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serverIpAddr [max:5]");
5168 for (counter_2 = 0; counter_2 < 5; counter_2++) {
5169 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serverIpAddr [%d / %d]", counter_2 + 1, 5);
5170 dissect_skinny_ipv4or6(cursor, hf_skinny_stationIpAddr_ipv4, hf_skinny_stationIpAddr_ipv6);
5171 ptvcursor_pop_subtree(cursor);
5173 ptvcursor_pop_subtree(cursor);
5176 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0012);
5180 * Message: Reset
5181 * Opcode: 0x009f
5182 * Type: RegistrationAndManagement
5183 * Direction: pbx2dev
5184 * VarLength: no
5185 * MsgType: event
5187 static void
5188 handle_Reset(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5190 ptvcursor_add(cursor, hf_skinny_resetType, 4, ENC_LITTLE_ENDIAN);
5194 * Message: StartMulticastMediaReceptionMessage
5195 * Opcode: 0x0101
5196 * Type: MediaControl
5197 * Direction: pbx2dev
5198 * VarLength: no
5199 * MsgType: request
5201 static void
5202 handle_StartMulticastMediaReceptionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5204 uint32_t passThroughPartyId = 0;
5205 address multicastIpAddr;
5206 char *multicastIpAddr_str = NULL;
5207 uint32_t multicastPortNumber = 0;
5208 uint32_t compressionType = 0;
5209 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
5210 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
5211 passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5212 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5213 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
5214 read_skinny_ipv4or6(cursor, &multicastIpAddr);
5215 dissect_skinny_ipv4or6(cursor, hf_skinny_multicastIpAddr_ipv4, hf_skinny_multicastIpAddr_ipv6);
5216 multicastPortNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5217 ptvcursor_add(cursor, hf_skinny_multicastPortNumber, 4, ENC_LITTLE_ENDIAN);
5218 srtp_add_address(pinfo, PT_UDP, &multicastIpAddr, multicastPortNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
5219 multicastIpAddr_str = address_to_display(NULL, &multicastIpAddr);
5220 si->additionalInfo = ws_strdup_printf("%s:%d", multicastIpAddr_str, multicastPortNumber);
5221 wmem_free(NULL, multicastIpAddr_str);
5222 ptvcursor_add(cursor, hf_skinny_milliSecondPacketSize, 4, ENC_LITTLE_ENDIAN);
5223 compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5224 ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
5226 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
5227 ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
5228 if (hdr_version <= V10_MSG_TYPE) {
5229 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
5231 if (hdr_version >= V11_MSG_TYPE) {
5232 if (compressionType == MEDIA_PAYLOAD_G7231) {
5233 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
5234 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
5235 ptvcursor_pop_subtree(cursor);
5236 } else {
5237 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
5239 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
5240 ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
5241 ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
5242 ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
5243 ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
5244 ptvcursor_pop_subtree(cursor);
5246 ptvcursor_pop_subtree(cursor);
5249 ptvcursor_pop_subtree(cursor);
5251 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5252 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5253 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0101 ^ passThroughPartyId);
5257 * Message: StartMulticastMediaTransmissionMessage
5258 * Opcode: 0x0102
5259 * Type: MediaControl
5260 * Direction: pbx2dev
5261 * VarLength: no
5262 * MsgType: request
5264 static void
5265 handle_StartMulticastMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5267 uint32_t passThroughPartyId = 0;
5268 address multicastIpAddr;
5269 char *multicastIpAddr_str = NULL;
5270 uint32_t multicastPortNumber = 0;
5271 uint32_t compressionType = 0;
5272 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
5273 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
5274 passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5275 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5276 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
5277 read_skinny_ipv4or6(cursor, &multicastIpAddr);
5278 dissect_skinny_ipv4or6(cursor, hf_skinny_multicastIpAddr_ipv4, hf_skinny_multicastIpAddr_ipv6);
5279 multicastPortNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5280 ptvcursor_add(cursor, hf_skinny_multicastPortNumber, 4, ENC_LITTLE_ENDIAN);
5281 srtp_add_address(pinfo, PT_UDP, &multicastIpAddr, multicastPortNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
5282 multicastIpAddr_str = address_to_display(NULL, &multicastIpAddr);
5283 si->additionalInfo = ws_strdup_printf("%s:%d", multicastIpAddr_str, multicastPortNumber);
5284 wmem_free(NULL, multicastIpAddr_str);
5285 ptvcursor_add(cursor, hf_skinny_milliSecondPacketSize, 4, ENC_LITTLE_ENDIAN);
5286 compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5287 ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
5289 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierOut");
5290 ptvcursor_add(cursor, hf_skinny_precedenceValue, 4, ENC_LITTLE_ENDIAN);
5291 ptvcursor_add(cursor, hf_skinny_ssValue, 4, ENC_LITTLE_ENDIAN);
5292 ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 2, ENC_LITTLE_ENDIAN);
5293 ptvcursor_add(cursor, hf_skinny_padding, 2, ENC_LITTLE_ENDIAN);
5294 if (hdr_version <= V10_MSG_TYPE) {
5295 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
5297 if (hdr_version >= V11_MSG_TYPE) {
5298 if (compressionType == MEDIA_PAYLOAD_G7231) {
5299 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
5300 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
5301 ptvcursor_pop_subtree(cursor);
5302 } else {
5303 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
5305 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
5306 ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
5307 ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
5308 ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
5309 ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
5310 ptvcursor_pop_subtree(cursor);
5312 ptvcursor_pop_subtree(cursor);
5315 ptvcursor_pop_subtree(cursor);
5317 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5318 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5319 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0102 ^ passThroughPartyId);
5323 * Message: StopMulticastMediaReceptionMessage
5324 * Opcode: 0x0103
5325 * Type: MediaControl
5326 * Direction: pbx2dev
5327 * VarLength: no
5328 * MsgType: event
5330 static void
5331 handle_StopMulticastMediaReceptionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5333 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
5334 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5335 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
5336 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5337 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5341 * Message: StopMulticastMediaTransmissionMessage
5342 * Opcode: 0x0104
5343 * Type: MediaControl
5344 * Direction: pbx2dev
5345 * VarLength: no
5346 * MsgType: event
5348 static void
5349 handle_StopMulticastMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5351 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
5352 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5353 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
5354 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5355 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5359 * Message: OpenReceiveChannelMessage
5360 * Opcode: 0x0105
5361 * Type: MediaControl
5362 * Direction: pbx2dev
5363 * VarLength: no
5364 * MsgType: request
5366 static void
5367 handle_OpenReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5369 uint32_t hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
5370 uint32_t passThroughPartyId = 0;
5371 uint32_t compressionType = 0;
5372 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
5373 uint16_t keylen = 0;
5374 uint16_t saltlen = 0;
5375 address sourceIpAddr;
5376 char *sourceIpAddr_str = NULL;
5377 uint32_t sourcePortNumber = 0;
5379 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
5380 passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5381 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5382 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
5383 ptvcursor_add(cursor, hf_skinny_milliSecondPacketSize, 4, ENC_LITTLE_ENDIAN);
5384 compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5385 ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
5387 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
5388 ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
5389 if (hdr_version <= V10_MSG_TYPE) {
5390 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
5392 if (hdr_version >= V11_MSG_TYPE) {
5393 if (compressionType == MEDIA_PAYLOAD_G7231) {
5394 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
5395 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
5396 ptvcursor_pop_subtree(cursor);
5397 } else {
5398 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
5400 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
5401 ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
5402 ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
5403 ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
5404 ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
5405 ptvcursor_pop_subtree(cursor);
5407 ptvcursor_pop_subtree(cursor);
5410 ptvcursor_pop_subtree(cursor);
5412 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5413 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5415 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "mRxMediaEncryptionKeyInfo");
5416 ptvcursor_add(cursor, hf_skinny_algorithmID, 4, ENC_LITTLE_ENDIAN);
5417 keylen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5418 ptvcursor_add(cursor, hf_skinny_keylen, 2, ENC_LITTLE_ENDIAN);
5419 saltlen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5420 ptvcursor_add(cursor, hf_skinny_saltlen, 2, ENC_LITTLE_ENDIAN);
5421 if (keylen <= 16) {
5422 uint32_t counter_3 = 0;
5423 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "key [ref:keylen = %d, max:16]", keylen);
5424 for (counter_3 = 0; counter_3 < 16; counter_3++) {
5425 if (counter_3 < keylen) {
5426 ptvcursor_add(cursor, hf_skinny_key, 1, ENC_LITTLE_ENDIAN);
5427 } else {
5428 ptvcursor_advance(cursor, 1);
5431 ptvcursor_pop_subtree(cursor);
5432 } else {
5433 ptvcursor_advance(cursor, (16 * 1));
5435 if (saltlen <= 16) {
5436 uint32_t counter_3 = 0;
5437 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "salt [ref:saltlen = %d, max:16]", saltlen);
5438 for (counter_3 = 0; counter_3 < 16; counter_3++) {
5439 if (counter_3 < saltlen) {
5440 ptvcursor_add(cursor, hf_skinny_salt, 1, ENC_LITTLE_ENDIAN);
5441 } else {
5442 ptvcursor_advance(cursor, 1);
5445 ptvcursor_pop_subtree(cursor);
5446 } else {
5447 ptvcursor_advance(cursor, (16 * 1));
5449 ptvcursor_add(cursor, hf_skinny_isMKIPresent, 4, ENC_LITTLE_ENDIAN);
5450 ptvcursor_add(cursor, hf_skinny_keyDerivationRate, 4, ENC_LITTLE_ENDIAN);
5451 ptvcursor_pop_subtree(cursor);
5453 ptvcursor_add(cursor, hf_skinny_streamPassThroughId, 4, ENC_LITTLE_ENDIAN);
5454 ptvcursor_add(cursor, hf_skinny_associatedStreamId, 4, ENC_LITTLE_ENDIAN);
5455 ptvcursor_add(cursor, hf_skinny_RFC2833PayloadType, 4, ENC_LITTLE_ENDIAN);
5456 ptvcursor_add(cursor, hf_skinny_dtmfType, 4, ENC_LITTLE_ENDIAN);
5457 if (hdr_version >= V11_MSG_TYPE) {
5458 ptvcursor_add(cursor, hf_skinny_mixingMode, 4, ENC_LITTLE_ENDIAN);
5459 ptvcursor_add(cursor, hf_skinny_partyDirection, 4, ENC_LITTLE_ENDIAN);
5460 read_skinny_ipv4or6(cursor, &sourceIpAddr);
5461 dissect_skinny_ipv4or6(cursor, hf_skinny_sourceIpAddr_ipv4, hf_skinny_sourceIpAddr_ipv6);
5462 sourcePortNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5463 ptvcursor_add(cursor, hf_skinny_sourcePortNumber, 4, ENC_LITTLE_ENDIAN);
5464 srtp_add_address(pinfo, PT_UDP, &sourceIpAddr, sourcePortNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
5465 sourceIpAddr_str = address_to_display(NULL, &sourceIpAddr);
5466 si->additionalInfo = ws_strdup_printf("%s:%d", sourceIpAddr_str, sourcePortNumber);
5467 wmem_free(NULL, sourceIpAddr_str);
5469 if (hdr_version >= V16_MSG_TYPE) {
5470 ptvcursor_add(cursor, hf_skinny_requestedIpAddrType, 4, ENC_LITTLE_ENDIAN);
5472 if (hdr_version >= V17_MSG_TYPE) {
5473 if (hdr_data_length > 132) {
5474 ptvcursor_add(cursor, hf_skinny_audioLevelAdjustment, 4, ENC_LITTLE_ENDIAN);
5477 if (hdr_version >= V21_MSG_TYPE) {
5478 if (hdr_data_length > 132) {
5480 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "latentCapsInfo");
5481 ptvcursor_add(cursor, hf_skinny_active, 4, ENC_LITTLE_ENDIAN);
5483 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
5484 ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
5485 ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
5486 ptvcursor_pop_subtree(cursor);
5489 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
5490 ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
5491 ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
5492 ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
5493 ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
5494 ptvcursor_pop_subtree(cursor);
5497 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
5498 ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
5499 ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
5500 ptvcursor_pop_subtree(cursor);
5503 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadParam");
5504 ptvcursor_add(cursor, hf_skinny_nse, 1, ENC_LITTLE_ENDIAN);
5505 ptvcursor_add(cursor, hf_skinny_rfc2833, 1, ENC_LITTLE_ENDIAN);
5506 ptvcursor_add(cursor, hf_skinny_sse, 1, ENC_LITTLE_ENDIAN);
5507 ptvcursor_add(cursor, hf_skinny_v150sprt, 1, ENC_LITTLE_ENDIAN);
5508 ptvcursor_add(cursor, hf_skinny_noaudio, 1, ENC_LITTLE_ENDIAN);
5509 ptvcursor_add(cursor, hf_skinny_FutureUse1, 1, ENC_LITTLE_ENDIAN);
5510 ptvcursor_add(cursor, hf_skinny_FutureUse2, 1, ENC_LITTLE_ENDIAN);
5511 ptvcursor_add(cursor, hf_skinny_FutureUse3, 1, ENC_LITTLE_ENDIAN);
5512 ptvcursor_pop_subtree(cursor);
5514 ptvcursor_pop_subtree(cursor);
5518 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0105 ^ passThroughPartyId);
5522 * Message: CloseReceiveChannelMessage
5523 * Opcode: 0x0106
5524 * Type: MediaControl
5525 * Direction: pbx2dev
5526 * VarLength: no
5527 * MsgType: event
5529 static void
5530 handle_CloseReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5532 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
5533 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5534 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
5535 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5536 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5537 ptvcursor_add(cursor, hf_skinny_portHandlingFlag, 4, ENC_LITTLE_ENDIAN);
5541 * Message: ConnectionStatisticsReqMessage
5542 * Opcode: 0x0107
5543 * Type: CallControl
5544 * Direction: pbx2dev
5545 * VarLength: no
5546 * MsgType: request
5548 static void
5549 handle_ConnectionStatisticsReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5551 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
5552 uint32_t callReference = 0;
5554 if (hdr_version <= V17_MSG_TYPE) {
5555 ptvcursor_add(cursor, hf_skinny_directoryNum, 24, ENC_ASCII);
5557 if (hdr_version >= V18_MSG_TYPE) {
5558 ptvcursor_add(cursor, hf_skinny_directoryNum, 28, ENC_ASCII);
5560 callReference = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5561 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5562 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5563 ptvcursor_add(cursor, hf_skinny_statsProcessingMode, 4, ENC_LITTLE_ENDIAN);
5564 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0107 ^ callReference);
5568 * Message: SoftKeyTemplateResMessage
5569 * Opcode: 0x0108
5570 * Type: RegistrationAndManagement
5571 * Direction: pbx2dev
5572 * VarLength: no
5573 * MsgType: response
5575 static void
5576 handle_SoftKeyTemplateResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5578 uint32_t totalSoftKeyCount = 0;
5580 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeyTemplate");
5581 ptvcursor_add(cursor, hf_skinny_softKeyOffset, 4, ENC_LITTLE_ENDIAN);
5582 ptvcursor_add(cursor, hf_skinny_softKeyCount, 4, ENC_LITTLE_ENDIAN);
5583 totalSoftKeyCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5584 ptvcursor_add(cursor, hf_skinny_totalSoftKeyCount, 4, ENC_LITTLE_ENDIAN);
5585 if (totalSoftKeyCount <= 32) {
5586 uint32_t counter_2 = 0;
5587 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [ref:totalSoftKeyCount = %d, max:32]", totalSoftKeyCount);
5588 if (totalSoftKeyCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (totalSoftKeyCount * 20) && totalSoftKeyCount <= 32) {
5589 for (counter_2 = 0; counter_2 < 32; counter_2++) {
5590 if (counter_2 < totalSoftKeyCount) {
5591 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [%d / %d]", counter_2 + 1, totalSoftKeyCount);
5592 dissect_skinny_displayLabel(cursor, pinfo, hf_skinny_softKeyLabel, 16);
5593 ptvcursor_add(cursor, hf_skinny_softKeyEvent, 4, ENC_LITTLE_ENDIAN);
5594 } else {
5595 ptvcursor_advance(cursor, 20);
5597 ptvcursor_pop_subtree(cursor);
5600 ptvcursor_pop_subtree(cursor);
5601 } else {
5602 ptvcursor_advance(cursor, (totalSoftKeyCount * 20));
5604 ptvcursor_pop_subtree(cursor);
5606 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0028);
5610 * Message: SoftKeySetResMessage
5611 * Opcode: 0x0109
5612 * Type: RegistrationAndManagement
5613 * Direction: pbx2dev
5614 * VarLength: no
5615 * MsgType: response
5617 static void
5618 handle_SoftKeySetResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5620 uint32_t totalSoftKeySetCount = 0;
5622 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeySets");
5623 ptvcursor_add(cursor, hf_skinny_softKeySetOffset, 4, ENC_LITTLE_ENDIAN);
5624 ptvcursor_add(cursor, hf_skinny_softKeySetCount, 4, ENC_LITTLE_ENDIAN);
5625 totalSoftKeySetCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5626 ptvcursor_add(cursor, hf_skinny_totalSoftKeySetCount, 4, ENC_LITTLE_ENDIAN);
5627 if (totalSoftKeySetCount <= 16) {
5628 uint32_t counter_2 = 0;
5629 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [ref:totalSoftKeySetCount = %d, max:16]", totalSoftKeySetCount);
5630 if (totalSoftKeySetCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (totalSoftKeySetCount * 3) && totalSoftKeySetCount <= 16) {
5631 for (counter_2 = 0; counter_2 < 16; counter_2++) {
5632 if (counter_2 < totalSoftKeySetCount) {
5633 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [%d / %d]", counter_2 + 1, totalSoftKeySetCount);
5635 uint32_t counter_7 = 0;
5636 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeyTemplateIndex [max:16]");
5637 for (counter_7 = 0; counter_7 < 16; counter_7++) {
5638 ptvcursor_add(cursor, hf_skinny_softKeyTemplateIndex, 1, ENC_LITTLE_ENDIAN);
5640 ptvcursor_pop_subtree(cursor);
5643 uint32_t counter_7 = 0;
5644 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeyInfoIndex [max:16]");
5645 for (counter_7 = 0; counter_7 < 16; counter_7++) {
5646 ptvcursor_add(cursor, hf_skinny_softKeyInfoIndex, 2, ENC_LITTLE_ENDIAN);
5648 ptvcursor_pop_subtree(cursor);
5650 } else {
5651 ptvcursor_advance(cursor, 3);
5653 ptvcursor_pop_subtree(cursor);
5656 ptvcursor_pop_subtree(cursor);
5657 } else {
5658 ptvcursor_advance(cursor, (totalSoftKeySetCount * 3));
5660 ptvcursor_pop_subtree(cursor);
5662 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0025);
5666 * Message: SelectSoftKeysMessage
5667 * Opcode: 0x0110
5668 * Type: RegistrationAndManagement
5669 * Direction: pbx2dev
5670 * VarLength: no
5671 * MsgType: event
5673 static void
5674 handle_SelectSoftKeysMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5676 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5677 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
5678 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5679 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5680 ptvcursor_add(cursor, hf_skinny_softKeySetIndex, 4, ENC_LITTLE_ENDIAN);
5681 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "validKeyMask");
5682 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey1, 4, ENC_LITTLE_ENDIAN);
5683 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey2, 4, ENC_LITTLE_ENDIAN);
5684 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey3, 4, ENC_LITTLE_ENDIAN);
5685 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey4, 4, ENC_LITTLE_ENDIAN);
5686 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey5, 4, ENC_LITTLE_ENDIAN);
5687 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey6, 4, ENC_LITTLE_ENDIAN);
5688 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey7, 4, ENC_LITTLE_ENDIAN);
5689 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey8, 4, ENC_LITTLE_ENDIAN);
5690 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey9, 4, ENC_LITTLE_ENDIAN);
5691 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey10, 4, ENC_LITTLE_ENDIAN);
5692 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey11, 4, ENC_LITTLE_ENDIAN);
5693 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey12, 4, ENC_LITTLE_ENDIAN);
5694 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey13, 4, ENC_LITTLE_ENDIAN);
5695 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey14, 4, ENC_LITTLE_ENDIAN);
5696 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey15, 4, ENC_LITTLE_ENDIAN);
5697 ptvcursor_add_no_advance(cursor, hf_skinny_SoftKeyMask_SoftKey16, 4, ENC_LITTLE_ENDIAN);
5698 ptvcursor_advance(cursor, 4);
5699 ptvcursor_pop_subtree(cursor); /* end bitfield: validKeyMask */
5703 * Message: CallStateMessage
5704 * Opcode: 0x0111
5705 * Type: CallControl
5706 * Direction: pbx2dev
5707 * VarLength: no
5708 * MsgType: event
5710 static void
5711 handle_CallStateMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5713 si->additionalInfo = ws_strdup_printf("\"%s\"",
5714 try_val_to_str_ext(
5715 tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)),
5716 &DCallState_ext
5719 si->callState = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5720 ptvcursor_add(cursor, hf_skinny_callState, 4, ENC_LITTLE_ENDIAN);
5721 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5722 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
5723 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5724 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5725 ptvcursor_add(cursor, hf_skinny_privacy, 4, ENC_LITTLE_ENDIAN);
5727 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "precedence");
5728 ptvcursor_add(cursor, hf_skinny_precedenceLevel, 4, ENC_LITTLE_ENDIAN);
5729 ptvcursor_add(cursor, hf_skinny_precedenceDomain, 4, ENC_LITTLE_ENDIAN);
5730 ptvcursor_pop_subtree(cursor);
5735 * Message: DisplayPromptStatusMessage
5736 * Opcode: 0x0112
5737 * Type: CallControl
5738 * Direction: pbx2dev
5739 * VarLength: no
5740 * MsgType: event
5742 static void
5743 handle_DisplayPromptStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5745 ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN);
5746 dissect_skinny_displayLabel(cursor, pinfo, hf_skinny_promptStatus, 32);
5747 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5748 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
5749 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5750 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5754 * Message: ClearPromptStatusMessage
5755 * Opcode: 0x0113
5756 * Type: CallControl
5757 * Direction: pbx2dev
5758 * VarLength: no
5759 * MsgType: event
5761 static void
5762 handle_ClearPromptStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5764 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5765 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
5766 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5767 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5771 * Message: DisplayNotifyMessage
5772 * Opcode: 0x0114
5773 * Type: CallControl
5774 * Direction: pbx2dev
5775 * VarLength: no
5776 * MsgType: event
5778 static void
5779 handle_DisplayNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5781 ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN);
5782 dissect_skinny_displayLabel(cursor, pinfo, hf_skinny_notify, 32);
5786 * Message: ActivateCallPlaneMessage
5787 * Opcode: 0x0116
5788 * Type: CallControl
5789 * Direction: pbx2dev
5790 * VarLength: no
5791 * MsgType: event
5793 static void
5794 handle_ActivateCallPlaneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5796 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5797 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
5801 * Message: UnregisterAckMessage
5802 * Opcode: 0x0118
5803 * Type: RegistrationAndManagement
5804 * Direction: pbx2dev
5805 * VarLength: no
5806 * MsgType: response
5808 static void
5809 handle_UnregisterAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5811 ptvcursor_add(cursor, hf_skinny_status, 4, ENC_LITTLE_ENDIAN);
5812 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0027);
5816 * Message: BackSpaceResMessage
5817 * Opcode: 0x0119
5818 * Type: CallControl
5819 * Direction: pbx2dev
5820 * VarLength: no
5821 * MsgType: event
5823 static void
5824 handle_BackSpaceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5826 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5827 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
5828 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5829 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5833 * Message: RegisterTokenReject
5834 * Opcode: 0x011b
5835 * Type: RegistrationAndManagement
5836 * Direction: pbx2dev
5837 * VarLength: no
5838 * MsgType: response
5840 static void
5841 handle_RegisterTokenReject(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5843 ptvcursor_add(cursor, hf_skinny_waitTimeBeforeNextReq, 4, ENC_LITTLE_ENDIAN);
5844 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0029);
5848 * Message: StartMediaFailureDetectionMessage
5849 * Opcode: 0x011c
5850 * Type: MediaControl
5851 * Direction: pbx2dev
5852 * VarLength: no
5853 * MsgType: event
5855 static void
5856 handle_StartMediaFailureDetectionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5858 uint32_t compressionType = 0;
5859 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
5860 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
5861 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5862 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
5863 ptvcursor_add(cursor, hf_skinny_milliSecondPacketSize, 4, ENC_LITTLE_ENDIAN);
5864 compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5865 ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
5867 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
5868 ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
5869 if (hdr_version <= V10_MSG_TYPE) {
5870 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
5872 if (hdr_version >= V11_MSG_TYPE) {
5873 if (compressionType == MEDIA_PAYLOAD_G7231) {
5874 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
5875 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
5876 ptvcursor_pop_subtree(cursor);
5877 } else {
5878 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
5880 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
5881 ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
5882 ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
5883 ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
5884 ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
5885 ptvcursor_pop_subtree(cursor);
5887 ptvcursor_pop_subtree(cursor);
5890 ptvcursor_pop_subtree(cursor);
5892 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5893 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5897 * Message: DialedNumberMessage
5898 * Opcode: 0x011d
5899 * Type: CallControl
5900 * Direction: pbx2dev
5901 * VarLength: no
5902 * MsgType: event
5904 static void
5905 handle_DialedNumberMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5907 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
5908 uint32_t VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;
5910 if (hdr_version <= V17_MSG_TYPE) {
5911 uint32_t dialedNumber_len;
5912 dialedNumber_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), 24)+1;
5913 if (dialedNumber_len > 1) {
5914 si->additionalInfo = ws_strdup_printf("\"%s\"", tvb_format_stringzpad(pinfo->pool, ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), dialedNumber_len));
5916 ptvcursor_add(cursor, hf_skinny_dialedNumber, 24, ENC_ASCII);
5917 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5918 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
5919 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5920 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5922 if (hdr_version >= V18_MSG_TYPE) {
5923 uint32_t dialedNumber_len;
5924 dialedNumber_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), VariableDirnumSize)+1;
5925 if (dialedNumber_len > 1) {
5926 si->additionalInfo = ws_strdup_printf("\"%s\"", tvb_format_stringzpad(pinfo->pool, ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), dialedNumber_len));
5928 ptvcursor_add(cursor, hf_skinny_dialedNumber, VariableDirnumSize, ENC_ASCII);
5929 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5930 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
5931 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5932 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5937 * Message: UserToDeviceDataMessage
5938 * Opcode: 0x011e
5939 * Type: RegistrationAndManagement
5940 * Direction: pbx2dev
5941 * VarLength: no
5942 * MsgType: event
5944 static void
5945 handle_UserToDeviceDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5947 uint32_t dataLength = 0;
5949 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "userToDeviceData");
5950 ptvcursor_add(cursor, hf_skinny_applicationId, 4, ENC_LITTLE_ENDIAN);
5951 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5952 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
5953 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5954 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
5955 ptvcursor_add(cursor, hf_skinny_transactionId, 4, ENC_LITTLE_ENDIAN);
5956 dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5957 ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
5958 dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
5959 ptvcursor_pop_subtree(cursor);
5964 * Message: FeatureStatResMessage
5965 * Opcode: 0x011f
5966 * Type: RegistrationAndManagement
5967 * Direction: pbx2dev
5968 * VarLength: no
5969 * MsgType: response
5971 static void
5972 handle_FeatureStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5974 uint32_t featureIndex = 0;
5975 featureIndex = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
5976 ptvcursor_add(cursor, hf_skinny_featureIndex, 4, ENC_LITTLE_ENDIAN);
5977 ptvcursor_add(cursor, hf_skinny_featureID, 4, ENC_LITTLE_ENDIAN);
5978 ptvcursor_add(cursor, hf_skinny_featureTextLabel, 40, ENC_ASCII);
5979 ptvcursor_add(cursor, hf_skinny_featureStatus, 4, ENC_LITTLE_ENDIAN);
5980 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0034 ^ featureIndex);
5984 * Message: DisplayPriNotifyMessage
5985 * Opcode: 0x0120
5986 * Type: RegistrationAndManagement
5987 * Direction: pbx2dev
5988 * VarLength: no
5989 * MsgType: event
5991 static void
5992 handle_DisplayPriNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
5994 ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN);
5995 ptvcursor_add(cursor, hf_skinny_priority, 4, ENC_LITTLE_ENDIAN);
5996 dissect_skinny_displayLabel(cursor, pinfo, hf_skinny_notify, 32);
6000 * Message: ClearPriNotifyMessage
6001 * Opcode: 0x0121
6002 * Type: RegistrationAndManagement
6003 * Direction: pbx2dev
6004 * VarLength: no
6005 * MsgType: event
6007 static void
6008 handle_ClearPriNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6010 ptvcursor_add(cursor, hf_skinny_priority, 4, ENC_LITTLE_ENDIAN);
6014 * Message: StartAnnouncementMessage
6015 * Opcode: 0x0122
6016 * Type: IntraCCM
6017 * Direction: pbx2pbx
6018 * VarLength: no
6019 * MsgType: event
6021 static void
6022 handle_StartAnnouncementMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6025 uint32_t counter_1 = 0;
6026 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "AnnList [max:32]");
6027 for (counter_1 = 0; counter_1 < 32; counter_1++) {
6028 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "AnnList [%d / %d]", counter_1 + 1, 32);
6029 ptvcursor_add(cursor, hf_skinny_locale, 4, ENC_LITTLE_ENDIAN);
6030 ptvcursor_add(cursor, hf_skinny_country, 4, ENC_LITTLE_ENDIAN);
6031 ptvcursor_add(cursor, hf_skinny_toneAnnouncement, 4, ENC_LITTLE_ENDIAN);
6032 ptvcursor_pop_subtree(cursor);
6034 ptvcursor_pop_subtree(cursor);
6036 ptvcursor_add(cursor, hf_skinny_annAckReq, 4, ENC_LITTLE_ENDIAN);
6037 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6039 uint32_t counter_2 = 0;
6040 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "matrixConfPartyID [max:16]");
6041 for (counter_2 = 0; counter_2 < 16; counter_2++) {
6042 ptvcursor_add(cursor, hf_skinny_matrixConfPartyID, 4, ENC_LITTLE_ENDIAN);
6044 ptvcursor_pop_subtree(cursor);
6046 ptvcursor_add(cursor, hf_skinny_hearingConfPartyMask, 4, ENC_LITTLE_ENDIAN);
6047 ptvcursor_add(cursor, hf_skinny_annPlayMode, 4, ENC_LITTLE_ENDIAN);
6051 * Message: StopAnnouncementMessage
6052 * Opcode: 0x0123
6053 * Type: IntraCCM
6054 * Direction: pbx2pbx
6055 * VarLength: no
6056 * MsgType: event
6058 static void
6059 handle_StopAnnouncementMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6061 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6065 * Message: AnnouncementFinishMessage
6066 * Opcode: 0x0124
6067 * Type: IntraCCM
6068 * Direction: pbx2pbx
6069 * VarLength: no
6070 * MsgType: event
6072 static void
6073 handle_AnnouncementFinishMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6075 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6076 ptvcursor_add(cursor, hf_skinny_annStatus, 4, ENC_LITTLE_ENDIAN);
6080 * Message: NotifyDtmfToneMessage
6081 * Opcode: 0x0127
6082 * Type: CallControl
6083 * Direction: pbx2dev
6084 * VarLength: no
6085 * MsgType: event
6087 static void
6088 handle_NotifyDtmfToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6090 ptvcursor_add(cursor, hf_skinny_tone, 4, ENC_LITTLE_ENDIAN);
6091 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6092 ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
6096 * Message: SendDtmfToneMessage
6097 * Opcode: 0x0128
6098 * Type: CallControl
6099 * Direction: pbx2dev
6100 * VarLength: no
6101 * MsgType: event
6103 static void
6104 handle_SendDtmfToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6106 ptvcursor_add(cursor, hf_skinny_tone, 4, ENC_LITTLE_ENDIAN);
6107 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6108 ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
6112 * Message: SubscribeDtmfPayloadReqMessage
6113 * Opcode: 0x0129
6114 * Type: CallControl
6115 * Direction: pbx2dev
6116 * VarLength: no
6117 * MsgType: request
6119 static void
6120 handle_SubscribeDtmfPayloadReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6122 ptvcursor_add(cursor, hf_skinny_payloadDtmf, 4, ENC_LITTLE_ENDIAN);
6123 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6124 ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
6125 ptvcursor_add(cursor, hf_skinny_dtmfType, 4, ENC_LITTLE_ENDIAN);
6126 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0129);
6130 * Message: SubscribeDtmfPayloadResMessage
6131 * Opcode: 0x012a
6132 * Type: CallControl
6133 * Direction: pbx2dev
6134 * VarLength: no
6135 * MsgType: response
6137 static void
6138 handle_SubscribeDtmfPayloadResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6140 uint32_t passthruPartyID = 0;
6141 ptvcursor_add(cursor, hf_skinny_payloadDtmf, 4, ENC_LITTLE_ENDIAN);
6142 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6143 passthruPartyID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6144 ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
6145 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0129 ^ passthruPartyID);
6149 * Message: SubscribeDtmfPayloadErrMessage
6150 * Opcode: 0x012b
6151 * Type: CallControl
6152 * Direction: pbx2dev
6153 * VarLength: no
6154 * MsgType: response
6156 static void
6157 handle_SubscribeDtmfPayloadErrMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6159 uint32_t passthruPartyID = 0;
6160 ptvcursor_add(cursor, hf_skinny_payloadDtmf, 4, ENC_LITTLE_ENDIAN);
6161 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6162 passthruPartyID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6163 ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
6164 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0129 ^ passthruPartyID);
6168 * Message: UnSubscribeDtmfPayloadReqMessage
6169 * Opcode: 0x012c
6170 * Type: CallControl
6171 * Direction: pbx2dev
6172 * VarLength: no
6173 * MsgType: request
6175 static void
6176 handle_UnSubscribeDtmfPayloadReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6178 uint32_t passthruPartyID = 0;
6179 ptvcursor_add(cursor, hf_skinny_payloadDtmf, 4, ENC_LITTLE_ENDIAN);
6180 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6181 passthruPartyID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6182 ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
6183 ptvcursor_add(cursor, hf_skinny_dtmfType, 4, ENC_LITTLE_ENDIAN);
6184 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x012c ^ passthruPartyID);
6188 * Message: UnSubscribeDtmfPayloadResMessage
6189 * Opcode: 0x012d
6190 * Type: CallControl
6191 * Direction: pbx2dev
6192 * VarLength: no
6193 * MsgType: response
6195 static void
6196 handle_UnSubscribeDtmfPayloadResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6198 uint32_t passthruPartyID = 0;
6199 ptvcursor_add(cursor, hf_skinny_payloadDtmf, 4, ENC_LITTLE_ENDIAN);
6200 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6201 passthruPartyID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6202 ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
6203 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x012d ^ passthruPartyID);
6207 * Message: UnSubscribeDtmfPayloadErrMessage
6208 * Opcode: 0x012e
6209 * Type: CallControl
6210 * Direction: pbx2dev
6211 * VarLength: no
6212 * MsgType: response
6214 static void
6215 handle_UnSubscribeDtmfPayloadErrMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6217 uint32_t passthruPartyID = 0;
6218 ptvcursor_add(cursor, hf_skinny_payloadDtmf, 4, ENC_LITTLE_ENDIAN);
6219 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6220 passthruPartyID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6221 ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
6222 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x012d ^ passthruPartyID);
6226 * Message: ServiceURLStatResMessage
6227 * Opcode: 0x012f
6228 * Type: RegistrationAndManagement
6229 * Direction: pbx2dev
6230 * VarLength: no
6231 * MsgType: response
6233 static void
6234 handle_ServiceURLStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6236 uint32_t serviceURLIndex = 0;
6237 serviceURLIndex = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6238 ptvcursor_add(cursor, hf_skinny_serviceURLIndex, 4, ENC_LITTLE_ENDIAN);
6239 ptvcursor_add(cursor, hf_skinny_serviceURL, 256, ENC_ASCII);
6240 ptvcursor_add(cursor, hf_skinny_serviceURLDisplayName, 40, ENC_ASCII);
6241 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0033 ^ serviceURLIndex);
6245 * Message: CallSelectStatResMessage
6246 * Opcode: 0x0130
6247 * Type: CallControl
6248 * Direction: pbx2dev
6249 * VarLength: no
6250 * MsgType: event
6252 static void
6253 handle_CallSelectStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6255 ptvcursor_add(cursor, hf_skinny_callSelectStat, 4, ENC_LITTLE_ENDIAN);
6256 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6257 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
6258 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6259 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
6263 * Message: OpenMultiMediaReceiveChannelMessage
6264 * Opcode: 0x0131
6265 * Type: MediaControl
6266 * Direction: pbx2dev
6267 * VarLength: no
6268 * MsgType: request
6270 static void
6271 handle_OpenMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6273 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
6274 uint32_t passThroughPartyId = 0;
6275 uint32_t compressionType = 0;
6276 uint32_t payloadType = 0;
6277 uint32_t pictureFormatCount = 0;
6278 uint16_t keylen = 0;
6279 uint16_t saltlen = 0;
6280 address sourceIpAddr;
6281 char *sourceIpAddr_str = NULL;
6282 uint32_t sourcePortNumber = 0;
6284 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6285 passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6286 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6287 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
6288 compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6289 ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
6290 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6291 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
6292 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6293 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
6295 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType");
6296 ptvcursor_add(cursor, hf_skinny_payload_rfc_number, 4, ENC_LITTLE_ENDIAN);
6297 payloadType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6298 ptvcursor_add(cursor, hf_skinny_payloadType, 4, ENC_LITTLE_ENDIAN);
6299 ptvcursor_pop_subtree(cursor);
6301 ptvcursor_add(cursor, hf_skinny_isConferenceCreator, 4, ENC_LITTLE_ENDIAN);
6302 if (payloadType <= MEDIA_PAYLOAD_AMR_WB) {
6303 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType <= Media_Payload_AMR_WB");
6305 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audioParameters");
6306 ptvcursor_add(cursor, hf_skinny_milliSecondPacketSize, 4, ENC_LITTLE_ENDIAN);
6308 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
6309 ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
6310 if (hdr_version <= V10_MSG_TYPE) {
6311 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
6313 if (hdr_version >= V11_MSG_TYPE) {
6314 if (compressionType == MEDIA_PAYLOAD_G7231) {
6315 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
6316 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
6317 ptvcursor_pop_subtree(cursor);
6318 } else {
6319 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
6321 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
6322 ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
6323 ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
6324 ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
6325 ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
6326 ptvcursor_pop_subtree(cursor);
6328 ptvcursor_pop_subtree(cursor);
6331 ptvcursor_pop_subtree(cursor);
6333 ptvcursor_pop_subtree(cursor);
6335 ptvcursor_pop_subtree(cursor);
6336 ptvcursor_advance(cursor, 36);
6337 } else if (payloadType >= MEDIA_PAYLOAD_H261 && payloadType <= MEDIA_PAYLOAD_H264_FEC) {
6338 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "Media_Payload_H261 <= payloadType <= Media_Payload_H264_FEC");
6340 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidParameters");
6341 ptvcursor_add(cursor, hf_skinny_bitRate, 4, ENC_LITTLE_ENDIAN);
6342 pictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6343 ptvcursor_add(cursor, hf_skinny_pictureFormatCount, 4, ENC_LITTLE_ENDIAN);
6344 if (pictureFormatCount <= 5) {
6345 uint32_t counter_3 = 0;
6346 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [ref:pictureFormatCount = %d, max:5]", pictureFormatCount);
6347 if (pictureFormatCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (pictureFormatCount * 8) && pictureFormatCount <= 5) {
6348 for (counter_3 = 0; counter_3 < 5; counter_3++) {
6349 if (counter_3 < pictureFormatCount) {
6350 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [%d / %d]", counter_3 + 1, pictureFormatCount);
6351 ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
6352 ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
6353 } else {
6354 ptvcursor_advance(cursor, 8);
6356 ptvcursor_pop_subtree(cursor);
6359 ptvcursor_pop_subtree(cursor);
6360 } else {
6361 ptvcursor_advance(cursor, (pictureFormatCount * 8));
6363 ptvcursor_add(cursor, hf_skinny_confServiceNum, 4, ENC_LITTLE_ENDIAN);
6364 if (payloadType == MEDIA_PAYLOAD_H261) {
6365 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H261");
6367 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
6368 ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
6369 ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
6370 ptvcursor_pop_subtree(cursor);
6372 ptvcursor_pop_subtree(cursor);
6373 ptvcursor_advance(cursor, 16);
6374 } else if (payloadType == MEDIA_PAYLOAD_H263) {
6375 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H263");
6377 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
6378 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
6379 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
6380 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
6381 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
6382 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
6383 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
6384 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
6385 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
6386 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
6387 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
6388 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
6389 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
6390 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
6391 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
6392 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
6393 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
6394 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
6395 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
6396 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
6397 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
6398 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
6399 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
6400 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
6401 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
6402 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
6403 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
6404 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
6405 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
6406 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
6407 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
6408 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
6409 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
6410 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
6411 ptvcursor_advance(cursor, 4);
6412 ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
6413 ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
6414 ptvcursor_pop_subtree(cursor);
6416 ptvcursor_pop_subtree(cursor);
6417 ptvcursor_advance(cursor, 16);
6418 } else if (payloadType == MEDIA_PAYLOAD_H264) {
6419 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H264");
6421 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h264VideoCapability");
6422 ptvcursor_add(cursor, hf_skinny_profile, 4, ENC_LITTLE_ENDIAN);
6423 ptvcursor_add(cursor, hf_skinny_level, 4, ENC_LITTLE_ENDIAN);
6424 ptvcursor_add(cursor, hf_skinny_customMaxMBPS, 4, ENC_LITTLE_ENDIAN);
6425 ptvcursor_add(cursor, hf_skinny_customMaxFS, 4, ENC_LITTLE_ENDIAN);
6426 ptvcursor_add(cursor, hf_skinny_customMaxDPB, 4, ENC_LITTLE_ENDIAN);
6427 ptvcursor_add(cursor, hf_skinny_customMaxBRandCPB, 4, ENC_LITTLE_ENDIAN);
6428 ptvcursor_pop_subtree(cursor);
6430 ptvcursor_pop_subtree(cursor);
6431 } else if (payloadType == MEDIA_PAYLOAD_VIEO) {
6432 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_Vieo");
6434 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
6435 ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
6436 ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
6437 ptvcursor_pop_subtree(cursor);
6439 ptvcursor_pop_subtree(cursor);
6440 ptvcursor_advance(cursor, 16);
6442 ptvcursor_pop_subtree(cursor);
6444 ptvcursor_pop_subtree(cursor);
6445 } else if (payloadType >= MEDIA_PAYLOAD_CLEAR_CHAN) {
6446 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType >= Media_Payload_Clear_Chan");
6448 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataParameters");
6449 ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
6450 ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
6451 ptvcursor_pop_subtree(cursor);
6453 ptvcursor_pop_subtree(cursor);
6454 ptvcursor_advance(cursor, 36);
6457 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "mRxMediaEncryptionKeyInfo");
6458 ptvcursor_add(cursor, hf_skinny_algorithmID, 4, ENC_LITTLE_ENDIAN);
6459 keylen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6460 ptvcursor_add(cursor, hf_skinny_keylen, 2, ENC_LITTLE_ENDIAN);
6461 saltlen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6462 ptvcursor_add(cursor, hf_skinny_saltlen, 2, ENC_LITTLE_ENDIAN);
6463 if (keylen <= 16) {
6464 uint32_t counter_3 = 0;
6465 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "key [ref:keylen = %d, max:16]", keylen);
6466 for (counter_3 = 0; counter_3 < 16; counter_3++) {
6467 if (counter_3 < keylen) {
6468 ptvcursor_add(cursor, hf_skinny_key, 1, ENC_LITTLE_ENDIAN);
6469 } else {
6470 ptvcursor_advance(cursor, 1);
6473 ptvcursor_pop_subtree(cursor);
6474 } else {
6475 ptvcursor_advance(cursor, (16 * 1));
6477 if (saltlen <= 16) {
6478 uint32_t counter_3 = 0;
6479 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "salt [ref:saltlen = %d, max:16]", saltlen);
6480 for (counter_3 = 0; counter_3 < 16; counter_3++) {
6481 if (counter_3 < saltlen) {
6482 ptvcursor_add(cursor, hf_skinny_salt, 1, ENC_LITTLE_ENDIAN);
6483 } else {
6484 ptvcursor_advance(cursor, 1);
6487 ptvcursor_pop_subtree(cursor);
6488 } else {
6489 ptvcursor_advance(cursor, (16 * 1));
6491 ptvcursor_add(cursor, hf_skinny_isMKIPresent, 4, ENC_LITTLE_ENDIAN);
6492 ptvcursor_add(cursor, hf_skinny_keyDerivationRate, 4, ENC_LITTLE_ENDIAN);
6493 ptvcursor_pop_subtree(cursor);
6495 ptvcursor_add(cursor, hf_skinny_streamPassThroughId, 4, ENC_LITTLE_ENDIAN);
6496 ptvcursor_add(cursor, hf_skinny_associatedStreamId, 4, ENC_LITTLE_ENDIAN);
6497 if (hdr_version >= V11_MSG_TYPE) {
6498 read_skinny_ipv4or6(cursor, &sourceIpAddr);
6499 dissect_skinny_ipv4or6(cursor, hf_skinny_sourceIpAddr_ipv4, hf_skinny_sourceIpAddr_ipv6);
6500 sourcePortNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6501 ptvcursor_add(cursor, hf_skinny_sourcePortNumber, 4, ENC_LITTLE_ENDIAN);
6502 srtp_add_address(pinfo, PT_UDP, &sourceIpAddr, sourcePortNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
6503 sourceIpAddr_str = address_to_display(NULL, &sourceIpAddr);
6504 si->additionalInfo = ws_strdup_printf("%s:%d", sourceIpAddr_str, sourcePortNumber);
6505 wmem_free(NULL, sourceIpAddr_str);
6507 if (hdr_version >= V16_MSG_TYPE) {
6508 ptvcursor_add(cursor, hf_skinny_requestedIpAddrType, 4, ENC_LITTLE_ENDIAN);
6510 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0131 ^ passThroughPartyId);
6514 * Message: StartMultiMediaTransmissionMessage
6515 * Opcode: 0x0132
6516 * Type: MediaControl
6517 * Direction: pbx2dev
6518 * VarLength: no
6519 * MsgType: request
6521 static void
6522 handle_StartMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6524 uint32_t passthruPartyID = 0;
6525 uint32_t compressionType = 0;
6526 uint32_t payloadType = 0;
6527 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
6528 uint32_t pictureFormatCount = 0;
6529 uint16_t keylen = 0;
6530 uint16_t saltlen = 0;
6531 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6532 passthruPartyID = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6533 ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
6534 compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6535 ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
6536 dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6);
6537 ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
6538 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6539 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
6541 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType");
6542 ptvcursor_add(cursor, hf_skinny_payload_rfc_number, 4, ENC_LITTLE_ENDIAN);
6543 payloadType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6544 ptvcursor_add(cursor, hf_skinny_payloadType, 4, ENC_LITTLE_ENDIAN);
6545 ptvcursor_pop_subtree(cursor);
6547 ptvcursor_add(cursor, hf_skinny_DSCPValue, 4, ENC_LITTLE_ENDIAN);
6548 if (payloadType <= MEDIA_PAYLOAD_AMR_WB) {
6549 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType <= Media_Payload_AMR_WB");
6551 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audioParameters");
6552 ptvcursor_add(cursor, hf_skinny_milliSecondPacketSize, 4, ENC_LITTLE_ENDIAN);
6554 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
6555 ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
6556 if (hdr_version <= V10_MSG_TYPE) {
6557 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
6559 if (hdr_version >= V11_MSG_TYPE) {
6560 if (compressionType == MEDIA_PAYLOAD_G7231) {
6561 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
6562 ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
6563 ptvcursor_pop_subtree(cursor);
6564 } else {
6565 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
6567 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
6568 ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
6569 ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
6570 ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
6571 ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
6572 ptvcursor_pop_subtree(cursor);
6574 ptvcursor_pop_subtree(cursor);
6577 ptvcursor_pop_subtree(cursor);
6579 ptvcursor_pop_subtree(cursor);
6581 ptvcursor_pop_subtree(cursor);
6582 ptvcursor_advance(cursor, 36);
6583 } else if (payloadType >= MEDIA_PAYLOAD_H261 && payloadType <= MEDIA_PAYLOAD_H264_FEC) {
6584 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "Media_Payload_H261 <= payloadType <= Media_Payload_H264_FEC");
6586 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidParameters");
6587 ptvcursor_add(cursor, hf_skinny_bitRate, 4, ENC_LITTLE_ENDIAN);
6588 pictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6589 ptvcursor_add(cursor, hf_skinny_pictureFormatCount, 4, ENC_LITTLE_ENDIAN);
6590 if (pictureFormatCount <= 5) {
6591 uint32_t counter_3 = 0;
6592 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [ref:pictureFormatCount = %d, max:5]", pictureFormatCount);
6593 if (pictureFormatCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (pictureFormatCount * 8) && pictureFormatCount <= 5) {
6594 for (counter_3 = 0; counter_3 < 5; counter_3++) {
6595 if (counter_3 < pictureFormatCount) {
6596 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [%d / %d]", counter_3 + 1, pictureFormatCount);
6597 ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
6598 ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
6599 } else {
6600 ptvcursor_advance(cursor, 8);
6602 ptvcursor_pop_subtree(cursor);
6605 ptvcursor_pop_subtree(cursor);
6606 } else {
6607 ptvcursor_advance(cursor, (pictureFormatCount * 8));
6609 ptvcursor_add(cursor, hf_skinny_confServiceNum, 4, ENC_LITTLE_ENDIAN);
6610 if (payloadType == MEDIA_PAYLOAD_H261) {
6611 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H261");
6613 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
6614 ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
6615 ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
6616 ptvcursor_pop_subtree(cursor);
6618 ptvcursor_pop_subtree(cursor);
6619 ptvcursor_advance(cursor, 16);
6620 } else if (payloadType == MEDIA_PAYLOAD_H263) {
6621 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H263");
6623 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
6624 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
6625 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
6626 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
6627 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
6628 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
6629 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
6630 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
6631 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
6632 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
6633 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
6634 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
6635 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
6636 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
6637 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
6638 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
6639 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
6640 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
6641 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
6642 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
6643 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
6644 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
6645 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
6646 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
6647 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
6648 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
6649 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
6650 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
6651 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
6652 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
6653 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
6654 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
6655 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
6656 ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
6657 ptvcursor_advance(cursor, 4);
6658 ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
6659 ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
6660 ptvcursor_pop_subtree(cursor);
6662 ptvcursor_pop_subtree(cursor);
6663 ptvcursor_advance(cursor, 16);
6664 } else if (payloadType == MEDIA_PAYLOAD_H264) {
6665 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H264");
6667 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h264VideoCapability");
6668 ptvcursor_add(cursor, hf_skinny_profile, 4, ENC_LITTLE_ENDIAN);
6669 ptvcursor_add(cursor, hf_skinny_level, 4, ENC_LITTLE_ENDIAN);
6670 ptvcursor_add(cursor, hf_skinny_customMaxMBPS, 4, ENC_LITTLE_ENDIAN);
6671 ptvcursor_add(cursor, hf_skinny_customMaxFS, 4, ENC_LITTLE_ENDIAN);
6672 ptvcursor_add(cursor, hf_skinny_customMaxDPB, 4, ENC_LITTLE_ENDIAN);
6673 ptvcursor_add(cursor, hf_skinny_customMaxBRandCPB, 4, ENC_LITTLE_ENDIAN);
6674 ptvcursor_pop_subtree(cursor);
6676 ptvcursor_pop_subtree(cursor);
6677 } else if (payloadType == MEDIA_PAYLOAD_VIEO) {
6678 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_Vieo");
6680 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
6681 ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
6682 ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
6683 ptvcursor_pop_subtree(cursor);
6685 ptvcursor_pop_subtree(cursor);
6686 ptvcursor_advance(cursor, 16);
6688 ptvcursor_pop_subtree(cursor);
6690 ptvcursor_pop_subtree(cursor);
6691 } else if (payloadType >= MEDIA_PAYLOAD_CLEAR_CHAN) {
6692 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType >= Media_Payload_Clear_Chan");
6694 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataParameters");
6695 ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
6696 ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
6697 ptvcursor_pop_subtree(cursor);
6699 ptvcursor_pop_subtree(cursor);
6700 ptvcursor_advance(cursor, 36);
6703 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "mTxMediaEncryptionKeyInfo");
6704 ptvcursor_add(cursor, hf_skinny_algorithmID, 4, ENC_LITTLE_ENDIAN);
6705 keylen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6706 ptvcursor_add(cursor, hf_skinny_keylen, 2, ENC_LITTLE_ENDIAN);
6707 saltlen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6708 ptvcursor_add(cursor, hf_skinny_saltlen, 2, ENC_LITTLE_ENDIAN);
6709 if (keylen <= 16) {
6710 uint32_t counter_3 = 0;
6711 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "key [ref:keylen = %d, max:16]", keylen);
6712 for (counter_3 = 0; counter_3 < 16; counter_3++) {
6713 if (counter_3 < keylen) {
6714 ptvcursor_add(cursor, hf_skinny_key, 1, ENC_LITTLE_ENDIAN);
6715 } else {
6716 ptvcursor_advance(cursor, 1);
6719 ptvcursor_pop_subtree(cursor);
6720 } else {
6721 ptvcursor_advance(cursor, (16 * 1));
6723 if (saltlen <= 16) {
6724 uint32_t counter_3 = 0;
6725 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "salt [ref:saltlen = %d, max:16]", saltlen);
6726 for (counter_3 = 0; counter_3 < 16; counter_3++) {
6727 if (counter_3 < saltlen) {
6728 ptvcursor_add(cursor, hf_skinny_salt, 1, ENC_LITTLE_ENDIAN);
6729 } else {
6730 ptvcursor_advance(cursor, 1);
6733 ptvcursor_pop_subtree(cursor);
6734 } else {
6735 ptvcursor_advance(cursor, (16 * 1));
6737 ptvcursor_add(cursor, hf_skinny_isMKIPresent, 4, ENC_LITTLE_ENDIAN);
6738 ptvcursor_add(cursor, hf_skinny_keyDerivationRate, 4, ENC_LITTLE_ENDIAN);
6739 ptvcursor_pop_subtree(cursor);
6741 ptvcursor_add(cursor, hf_skinny_streamPassThroughId, 4, ENC_LITTLE_ENDIAN);
6742 ptvcursor_add(cursor, hf_skinny_associatedStreamId, 4, ENC_LITTLE_ENDIAN);
6743 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0132 ^ passthruPartyID);
6747 * Message: StopMultiMediaTransmissionMessage
6748 * Opcode: 0x0133
6749 * Type: MediaControl
6750 * Direction: pbx2dev
6751 * VarLength: no
6752 * MsgType: event
6754 static void
6755 handle_StopMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6757 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6758 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6759 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
6760 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6761 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
6762 ptvcursor_add(cursor, hf_skinny_portHandlingFlag, 4, ENC_LITTLE_ENDIAN);
6766 * Message: MiscellaneousCommandMessage
6767 * Opcode: 0x0134
6768 * Type: CallControl
6769 * Direction: pbx2dev
6770 * VarLength: no
6771 * MsgType: event
6773 static void
6774 handle_MiscellaneousCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6776 uint32_t command = 0;
6777 uint32_t recoveryReferencePictureCount = 0;
6778 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6779 ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
6780 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6781 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
6782 command = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6783 ptvcursor_add(cursor, hf_skinny_command, 4, ENC_LITTLE_ENDIAN);
6784 if (command == MISCCOMMANDTYPE_VIDEOFASTUPDATEPICTURE) {
6785 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_videoFastUpdatePicture");
6787 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "videoFastUpdatePicture");
6788 ptvcursor_add(cursor, hf_skinny_firstGOB, 4, ENC_LITTLE_ENDIAN);
6789 ptvcursor_add(cursor, hf_skinny_numberOfGOBs, 4, ENC_LITTLE_ENDIAN);
6790 ptvcursor_pop_subtree(cursor);
6792 ptvcursor_pop_subtree(cursor);
6793 ptvcursor_advance(cursor, 8);
6794 } else if (command == MISCCOMMANDTYPE_VIDEOFASTUPDATEGOB) {
6795 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_videoFastUpdateGOB");
6797 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "videoFastUpdateGOB");
6798 ptvcursor_add(cursor, hf_skinny_firstGOB, 4, ENC_LITTLE_ENDIAN);
6799 ptvcursor_add(cursor, hf_skinny_numberOfGOBs, 4, ENC_LITTLE_ENDIAN);
6800 ptvcursor_pop_subtree(cursor);
6802 ptvcursor_pop_subtree(cursor);
6803 ptvcursor_advance(cursor, 8);
6804 } else if (command == MISCCOMMANDTYPE_VIDEOFASTUPDATEMB) {
6805 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_videoFastUpdateMB");
6807 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "videoFastUpdateMB");
6808 ptvcursor_add(cursor, hf_skinny_firstGOB, 4, ENC_LITTLE_ENDIAN);
6809 ptvcursor_add(cursor, hf_skinny_firstMB, 4, ENC_LITTLE_ENDIAN);
6810 ptvcursor_add(cursor, hf_skinny_numberOfMBs, 4, ENC_LITTLE_ENDIAN);
6811 ptvcursor_pop_subtree(cursor);
6813 ptvcursor_pop_subtree(cursor);
6814 ptvcursor_advance(cursor, 4);
6815 } else if (command == MISCCOMMANDTYPE_LOSTPICTURE) {
6816 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_lostPicture");
6818 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lostPicture");
6819 ptvcursor_add(cursor, hf_skinny_pictureNumber, 4, ENC_LITTLE_ENDIAN);
6820 ptvcursor_add(cursor, hf_skinny_longTermPictureIndex, 4, ENC_LITTLE_ENDIAN);
6821 ptvcursor_pop_subtree(cursor);
6823 ptvcursor_pop_subtree(cursor);
6824 ptvcursor_advance(cursor, 8);
6825 } else if (command == MISCCOMMANDTYPE_LOSTPARTIALPICTURE) {
6826 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_lostPartialPicture");
6828 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lostPartialPicture");
6830 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureReference");
6831 ptvcursor_add(cursor, hf_skinny_pictureNumber, 4, ENC_LITTLE_ENDIAN);
6832 ptvcursor_add(cursor, hf_skinny_longTermPictureIndex, 4, ENC_LITTLE_ENDIAN);
6833 ptvcursor_pop_subtree(cursor);
6835 ptvcursor_add(cursor, hf_skinny_firstMB, 4, ENC_LITTLE_ENDIAN);
6836 ptvcursor_add(cursor, hf_skinny_numberOfMBs, 4, ENC_LITTLE_ENDIAN);
6837 ptvcursor_pop_subtree(cursor);
6839 ptvcursor_pop_subtree(cursor);
6840 } else if (command == MISCCOMMANDTYPE_RECOVERYREFERENCEPICTURE) {
6841 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_recoveryReferencePicture");
6843 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "recoveryReferencePictureValue");
6844 recoveryReferencePictureCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6845 ptvcursor_add(cursor, hf_skinny_recoveryReferencePictureCount, 4, ENC_LITTLE_ENDIAN);
6846 if (recoveryReferencePictureCount <= 4) {
6847 uint32_t counter_3 = 0;
6848 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "recoveryReferencePicture [ref:recoveryReferencePictureCount = %d, max:4]", recoveryReferencePictureCount);
6849 if (recoveryReferencePictureCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (recoveryReferencePictureCount * 8) && recoveryReferencePictureCount <= 4) {
6850 for (counter_3 = 0; counter_3 < 4; counter_3++) {
6851 if (counter_3 < recoveryReferencePictureCount) {
6852 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "recoveryReferencePicture [%d / %d]", counter_3 + 1, recoveryReferencePictureCount);
6853 ptvcursor_add(cursor, hf_skinny_pictureNumber, 4, ENC_LITTLE_ENDIAN);
6854 ptvcursor_add(cursor, hf_skinny_longTermPictureIndex, 4, ENC_LITTLE_ENDIAN);
6855 } else {
6856 ptvcursor_advance(cursor, 8);
6858 ptvcursor_pop_subtree(cursor);
6861 ptvcursor_pop_subtree(cursor);
6862 } else {
6863 ptvcursor_advance(cursor, (recoveryReferencePictureCount * 8));
6865 ptvcursor_pop_subtree(cursor);
6867 ptvcursor_pop_subtree(cursor);
6868 ptvcursor_advance(cursor, 4);
6869 } else if (command == MISCCOMMANDTYPE_TEMPORALSPATIALTRADEOFF) {
6870 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_temporalSpatialTradeOff");
6871 ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOff, 4, ENC_LITTLE_ENDIAN);
6872 ptvcursor_pop_subtree(cursor);
6873 ptvcursor_advance(cursor, 12);
6874 } else {
6875 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any command");
6876 ptvcursor_add(cursor, hf_skinny_none, 4, ENC_LITTLE_ENDIAN);
6877 ptvcursor_pop_subtree(cursor);
6878 ptvcursor_advance(cursor, 12);
6883 * Message: FlowControlCommandMessage
6884 * Opcode: 0x0135
6885 * Type: CallControl
6886 * Direction: pbx2dev
6887 * VarLength: no
6888 * MsgType: event
6890 static void
6891 handle_FlowControlCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6893 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6894 ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
6895 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6896 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
6897 ptvcursor_add(cursor, hf_skinny_maximumBitRate, 4, ENC_LITTLE_ENDIAN);
6901 * Message: CloseMultiMediaReceiveChannelMessage
6902 * Opcode: 0x0136
6903 * Type: MediaControl
6904 * Direction: pbx2dev
6905 * VarLength: no
6906 * MsgType: event
6908 static void
6909 handle_CloseMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6911 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6912 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6913 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
6914 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6915 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
6916 ptvcursor_add(cursor, hf_skinny_portHandlingFlag, 4, ENC_LITTLE_ENDIAN);
6920 * Message: CreateConferenceReqMessage
6921 * Opcode: 0x0137
6922 * Type: IntraCCM
6923 * Direction: pbx2pbx
6924 * VarLength: no
6925 * MsgType: request
6927 static void
6928 handle_CreateConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6930 uint32_t conferenceId = 0;
6931 uint32_t dataLength = 0;
6932 conferenceId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6933 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6934 ptvcursor_add(cursor, hf_skinny_numberOfReservedParticipants, 4, ENC_LITTLE_ENDIAN);
6935 ptvcursor_add(cursor, hf_skinny_resourceType, 4, ENC_LITTLE_ENDIAN);
6936 ptvcursor_add(cursor, hf_skinny_applicationId, 4, ENC_LITTLE_ENDIAN);
6937 ptvcursor_add(cursor, hf_skinny_appConfID, 32, ENC_ASCII);
6938 ptvcursor_add(cursor, hf_skinny_appData, 24, ENC_ASCII);
6939 dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6940 ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
6941 ptvcursor_add(cursor, hf_skinny_passThruData, dataLength, ENC_ASCII);
6942 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0137 ^ conferenceId);
6946 * Message: DeleteConferenceReqMessage
6947 * Opcode: 0x0138
6948 * Type: IntraCCM
6949 * Direction: pbx2pbx
6950 * VarLength: no
6951 * MsgType: request
6953 static void
6954 handle_DeleteConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6956 uint32_t conferenceId = 0;
6957 conferenceId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6958 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6959 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0138 ^ conferenceId);
6963 * Message: ModifyConferenceReqMessage
6964 * Opcode: 0x0139
6965 * Type: IntraCCM
6966 * Direction: pbx2pbx
6967 * VarLength: no
6968 * MsgType: request
6970 static void
6971 handle_ModifyConferenceReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6973 uint32_t conferenceId = 0;
6974 uint32_t dataLength = 0;
6975 conferenceId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6976 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
6977 ptvcursor_add(cursor, hf_skinny_numberOfReservedParticipants, 4, ENC_LITTLE_ENDIAN);
6978 ptvcursor_add(cursor, hf_skinny_applicationId, 4, ENC_LITTLE_ENDIAN);
6979 ptvcursor_add(cursor, hf_skinny_appConfID, 32, ENC_ASCII);
6980 ptvcursor_add(cursor, hf_skinny_appData, 24, ENC_ASCII);
6981 dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
6982 ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
6983 ptvcursor_add(cursor, hf_skinny_passThruData, dataLength, ENC_ASCII);
6984 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x0139 ^ conferenceId);
6988 * Message: AddParticipantReqMessage
6989 * Opcode: 0x013a
6990 * Type: IntraCCM
6991 * Direction: pbx2pbx
6992 * VarLength: no
6993 * MsgType: request
6995 static void
6996 handle_AddParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
6998 uint32_t conferenceId = 0;
6999 conferenceId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7000 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7001 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7002 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7003 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "partyPIRestrictionBits");
7004 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyName, 4, ENC_LITTLE_ENDIAN);
7005 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyNumber, 4, ENC_LITTLE_ENDIAN);
7006 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingParty, 4, ENC_LITTLE_ENDIAN);
7007 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyName, 4, ENC_LITTLE_ENDIAN);
7008 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
7009 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledParty, 4, ENC_LITTLE_ENDIAN);
7010 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyName, 4, ENC_LITTLE_ENDIAN);
7011 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
7012 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledParty, 4, ENC_LITTLE_ENDIAN);
7013 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyName, 4, ENC_LITTLE_ENDIAN);
7014 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyNumber, 4, ENC_LITTLE_ENDIAN);
7015 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectParty, 4, ENC_LITTLE_ENDIAN);
7016 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_BitsReserved, 4, ENC_LITTLE_ENDIAN);
7017 ptvcursor_advance(cursor, 4);
7018 ptvcursor_pop_subtree(cursor); /* end bitfield: partyPIRestrictionBits */
7019 ptvcursor_add(cursor, hf_skinny_participantName, 40, ENC_ASCII);
7020 ptvcursor_add(cursor, hf_skinny_participantNumber, 24, ENC_ASCII);
7021 ptvcursor_add(cursor, hf_skinny_conferenceName, 32, ENC_ASCII);
7022 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x013a ^ conferenceId);
7026 * Message: DropParticipantReqMessage
7027 * Opcode: 0x013b
7028 * Type: IntraCCM
7029 * Direction: pbx2pbx
7030 * VarLength: no
7031 * MsgType: request
7033 static void
7034 handle_DropParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7036 uint32_t conferenceId = 0;
7037 conferenceId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7038 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7039 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7040 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7041 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x013b ^ conferenceId);
7045 * Message: AuditParticipantReqMessage
7046 * Opcode: 0x013d
7047 * Type: IntraCCM
7048 * Direction: pbx2pbx
7049 * VarLength: no
7050 * MsgType: request
7052 static void
7053 handle_AuditParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7055 uint32_t conferenceId = 0;
7056 conferenceId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7057 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7058 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x013d ^ conferenceId);
7062 * Message: ChangeParticipantReqMessage
7063 * Opcode: 0x013e
7064 * Type: IntraCCM
7065 * Direction: pbx2pbx
7066 * VarLength: no
7067 * MsgType: request
7069 static void
7070 handle_ChangeParticipantReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7072 uint32_t conferenceId = 0;
7073 conferenceId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7074 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7075 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7076 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7077 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "partyPIRestrictionBits");
7078 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyName, 4, ENC_LITTLE_ENDIAN);
7079 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyNumber, 4, ENC_LITTLE_ENDIAN);
7080 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingParty, 4, ENC_LITTLE_ENDIAN);
7081 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyName, 4, ENC_LITTLE_ENDIAN);
7082 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
7083 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledParty, 4, ENC_LITTLE_ENDIAN);
7084 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyName, 4, ENC_LITTLE_ENDIAN);
7085 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
7086 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledParty, 4, ENC_LITTLE_ENDIAN);
7087 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyName, 4, ENC_LITTLE_ENDIAN);
7088 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyNumber, 4, ENC_LITTLE_ENDIAN);
7089 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectParty, 4, ENC_LITTLE_ENDIAN);
7090 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_BitsReserved, 4, ENC_LITTLE_ENDIAN);
7091 ptvcursor_advance(cursor, 4);
7092 ptvcursor_pop_subtree(cursor); /* end bitfield: partyPIRestrictionBits */
7093 ptvcursor_add(cursor, hf_skinny_participantName, 40, ENC_ASCII);
7094 ptvcursor_add(cursor, hf_skinny_participantNumber, 24, ENC_ASCII);
7095 ptvcursor_add(cursor, hf_skinny_conferenceName, 32, ENC_ASCII);
7096 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x013e ^ conferenceId);
7100 * Message: UserToDeviceDataMessageVersion1
7101 * Opcode: 0x013f
7102 * Type: RegistrationAndManagement
7103 * Direction: pbx2dev
7104 * VarLength: no
7105 * MsgType: event
7107 static void
7108 handle_UserToDeviceDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7110 uint32_t dataLength = 0;
7112 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "userToDeviceDataVersion1");
7113 ptvcursor_add(cursor, hf_skinny_applicationId, 4, ENC_LITTLE_ENDIAN);
7114 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7115 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
7116 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7117 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7118 ptvcursor_add(cursor, hf_skinny_transactionId, 4, ENC_LITTLE_ENDIAN);
7119 dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7120 ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
7121 ptvcursor_add(cursor, hf_skinny_sequenceFlag, 4, ENC_LITTLE_ENDIAN);
7122 ptvcursor_add(cursor, hf_skinny_displayPriority, 4, ENC_LITTLE_ENDIAN);
7123 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7124 ptvcursor_add(cursor, hf_skinny_appInstanceID, 4, ENC_LITTLE_ENDIAN);
7125 ptvcursor_add(cursor, hf_skinny_routingID, 4, ENC_LITTLE_ENDIAN);
7126 dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
7127 ptvcursor_pop_subtree(cursor);
7132 * Message: VideoDisplayCommandMessage
7133 * Opcode: 0x0140
7134 * Type: MediaControl
7135 * Direction: pbx2dev
7136 * VarLength: no
7137 * MsgType: event
7139 static void
7140 handle_VideoDisplayCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7142 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7143 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7144 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7145 ptvcursor_add(cursor, hf_skinny_layoutID, 4, ENC_LITTLE_ENDIAN);
7149 * Message: FlowControlNotifyMessage
7150 * Opcode: 0x0141
7151 * Type: CallControl
7152 * Direction: pbx2dev
7153 * VarLength: no
7154 * MsgType: event
7156 static void
7157 handle_FlowControlNotifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7159 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7160 ptvcursor_add(cursor, hf_skinny_passthruPartyID, 4, ENC_LITTLE_ENDIAN);
7161 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7162 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7163 ptvcursor_add(cursor, hf_skinny_maximumBitRate, 4, ENC_LITTLE_ENDIAN);
7167 * Message: ConfigStatV2ResMessage
7168 * Opcode: 0x0142
7169 * Type: RegistrationAndManagement
7170 * Direction: pbx2dev
7171 * VarLength: yes
7172 * MsgType: response
7174 static void
7175 handle_ConfigStatV2ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7177 uint32_t DeviceName_len = 0;
7178 uint32_t userName_len = 0;
7179 uint32_t serverName_len = 0;
7181 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
7182 DeviceName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7183 if (DeviceName_len > 1) {
7184 ptvcursor_add(cursor, hf_skinny_DeviceName, DeviceName_len, ENC_ASCII);
7185 } else {
7186 ptvcursor_advance(cursor, 1);
7188 ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
7189 ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
7190 ptvcursor_pop_subtree(cursor);
7192 ptvcursor_add(cursor, hf_skinny_numberOfLines, 4, ENC_LITTLE_ENDIAN);
7193 ptvcursor_add(cursor, hf_skinny_numberOfSpeedDials, 4, ENC_LITTLE_ENDIAN);
7194 userName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7195 if (userName_len > 1) {
7196 ptvcursor_add(cursor, hf_skinny_userName, userName_len, ENC_ASCII);
7197 } else {
7198 ptvcursor_advance(cursor, 1);
7200 serverName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7201 if (serverName_len > 1) {
7202 ptvcursor_add(cursor, hf_skinny_serverName, serverName_len, ENC_ASCII);
7203 } else {
7204 ptvcursor_advance(cursor, 1);
7206 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000c);
7210 * Message: DisplayNotifyV2Message
7211 * Opcode: 0x0143
7212 * Type: RegistrationAndManagement
7213 * Direction: pbx2dev
7214 * VarLength: yes
7215 * MsgType: event
7217 static void
7218 handle_DisplayNotifyV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7220 ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN);
7221 dissect_skinny_displayLabel(cursor, pinfo, hf_skinny_notify, 0);
7225 * Message: DisplayPriNotifyV2Message
7226 * Opcode: 0x0144
7227 * Type: RegistrationAndManagement
7228 * Direction: pbx2dev
7229 * VarLength: yes
7230 * MsgType: event
7232 static void
7233 handle_DisplayPriNotifyV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7235 ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN);
7236 ptvcursor_add(cursor, hf_skinny_priority, 4, ENC_LITTLE_ENDIAN);
7237 dissect_skinny_displayLabel(cursor, pinfo, hf_skinny_notify, 0);
7241 * Message: DisplayPromptStatusV2Message
7242 * Opcode: 0x0145
7243 * Type: CallControl
7244 * Direction: pbx2dev
7245 * VarLength: yes
7246 * MsgType: event
7248 static void
7249 handle_DisplayPromptStatusV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7251 ptvcursor_add(cursor, hf_skinny_timeOutValue, 4, ENC_LITTLE_ENDIAN);
7252 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7253 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
7254 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7255 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7256 dissect_skinny_displayLabel(cursor, pinfo, hf_skinny_promptStatus, 0);
7260 * Message: FeatureStatV2ResMessage
7261 * Opcode: 0x0146
7262 * Type: RegistrationAndManagement
7263 * Direction: pbx2dev
7264 * VarLength: yes
7265 * MsgType: response
7267 static void
7268 handle_FeatureStatV2ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7270 uint32_t featureTextLabel_len = 0;
7271 ptvcursor_add(cursor, hf_skinny_featureIndex, 4, ENC_LITTLE_ENDIAN);
7272 ptvcursor_add(cursor, hf_skinny_featureID, 4, ENC_LITTLE_ENDIAN);
7273 ptvcursor_add(cursor, hf_skinny_featureStatus, 4, ENC_LITTLE_ENDIAN);
7274 featureTextLabel_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7275 if (featureTextLabel_len > 1) {
7276 ptvcursor_add(cursor, hf_skinny_featureTextLabel, featureTextLabel_len, ENC_ASCII);
7277 } else {
7278 ptvcursor_advance(cursor, 1);
7280 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0034);
7284 * Message: LineStatV2ResMessage
7285 * Opcode: 0x0147
7286 * Type: RegistrationAndManagement
7287 * Direction: pbx2dev
7288 * VarLength: yes
7289 * MsgType: response
7291 static void
7292 handle_LineStatV2ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7294 uint32_t lineNumber = 0;
7295 uint32_t lineDirNumber_len = 0;
7296 uint32_t lineFullyQualifiedDisplayName_len = 0;
7297 uint32_t lineTextLabel_len = 0;
7298 lineNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7299 ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN);
7300 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lineType");
7301 ptvcursor_add_no_advance(cursor, hf_skinny_OrigDialed, 4, ENC_LITTLE_ENDIAN);
7302 ptvcursor_add_no_advance(cursor, hf_skinny_RedirDialed, 4, ENC_LITTLE_ENDIAN);
7303 ptvcursor_add_no_advance(cursor, hf_skinny_CallingPartyNumber, 4, ENC_LITTLE_ENDIAN);
7304 ptvcursor_add_no_advance(cursor, hf_skinny_CallingPartyName, 4, ENC_LITTLE_ENDIAN);
7305 ptvcursor_advance(cursor, 4);
7306 ptvcursor_pop_subtree(cursor); /* end bitfield: lineType */
7307 lineDirNumber_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7308 if (lineDirNumber_len > 1) {
7309 ptvcursor_add(cursor, hf_skinny_lineDirNumber, lineDirNumber_len, ENC_ASCII);
7310 } else {
7311 ptvcursor_advance(cursor, 1);
7313 lineFullyQualifiedDisplayName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7314 if (lineFullyQualifiedDisplayName_len > 1) {
7315 ptvcursor_add(cursor, hf_skinny_lineFullyQualifiedDisplayName, lineFullyQualifiedDisplayName_len, ENC_ASCII);
7316 } else {
7317 ptvcursor_advance(cursor, 1);
7319 lineTextLabel_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7320 if (lineTextLabel_len > 1) {
7321 ptvcursor_add(cursor, hf_skinny_lineTextLabel, lineTextLabel_len, ENC_ASCII);
7322 } else {
7323 ptvcursor_advance(cursor, 1);
7325 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000b ^ lineNumber);
7329 * Message: ServiceURLStatV2ResMessage
7330 * Opcode: 0x0148
7331 * Type: RegistrationAndManagement
7332 * Direction: pbx2dev
7333 * VarLength: yes
7334 * MsgType: response
7336 static void
7337 handle_ServiceURLStatV2ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7339 uint32_t serviceURLIndex = 0;
7340 serviceURLIndex = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7341 ptvcursor_add(cursor, hf_skinny_serviceURLIndex, 4, ENC_LITTLE_ENDIAN);
7342 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0033 ^ serviceURLIndex);
7346 * Message: SpeedDialStatV2ResMessage
7347 * Opcode: 0x0149
7348 * Type: RegistrationAndManagement
7349 * Direction: pbx2dev
7350 * VarLength: yes
7351 * MsgType: response
7353 static void
7354 handle_SpeedDialStatV2ResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7356 uint32_t speedDialNumber = 0;
7357 uint32_t speedDialDirNumber_len = 0;
7358 uint32_t speedDialDisplayName_len = 0;
7359 speedDialNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7360 ptvcursor_add(cursor, hf_skinny_speedDialNumber, 4, ENC_LITTLE_ENDIAN);
7361 speedDialDirNumber_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7362 if (speedDialDirNumber_len > 1) {
7363 ptvcursor_add(cursor, hf_skinny_speedDialDirNumber, speedDialDirNumber_len, ENC_ASCII);
7364 } else {
7365 ptvcursor_advance(cursor, 1);
7367 speedDialDisplayName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7368 if (speedDialDisplayName_len > 1) {
7369 ptvcursor_add(cursor, hf_skinny_speedDialDisplayName, speedDialDisplayName_len, ENC_ASCII);
7370 } else {
7371 ptvcursor_advance(cursor, 1);
7373 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x000a ^ speedDialNumber);
7377 * Message: CallInfoV2Message
7378 * Opcode: 0x014a
7379 * Type: CallControl
7380 * Direction: pbx2dev
7381 * VarLength: yes
7382 * MsgType: event
7384 static void
7385 handle_CallInfoV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7387 uint32_t hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
7388 uint32_t callingParty_len = 0;
7389 uint32_t AlternateCallingParty_len = 0;
7390 uint32_t calledParty_len = 0;
7391 uint32_t originalCalledParty_len = 0;
7392 uint32_t lastRedirectingParty_len = 0;
7393 uint32_t cgpnVoiceMailbox_len = 0;
7394 uint32_t cdpnVoiceMailbox_len = 0;
7395 uint32_t originalCdpnVoiceMailbox_len = 0;
7396 uint32_t lastRedirectingVoiceMailbox_len = 0;
7397 uint32_t callingPartyName_len = 0;
7398 uint32_t calledPartyName_len = 0;
7399 uint32_t originalCalledPartyName_len = 0;
7400 uint32_t lastRedirectingPartyName_len = 0;
7401 uint32_t HuntPilotNumber_len = 0;
7402 uint32_t HuntPilotName_len = 0;
7404 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7405 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
7406 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7407 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7408 ptvcursor_add(cursor, hf_skinny_callType, 4, ENC_LITTLE_ENDIAN);
7409 ptvcursor_add(cursor, hf_skinny_originalCdpnRedirectReason, 4, ENC_LITTLE_ENDIAN);
7410 ptvcursor_add(cursor, hf_skinny_lastRedirectingReason, 4, ENC_LITTLE_ENDIAN);
7411 ptvcursor_add(cursor, hf_skinny_callInstance, 4, ENC_LITTLE_ENDIAN);
7412 ptvcursor_add(cursor, hf_skinny_callSecurityStatus, 4, ENC_LITTLE_ENDIAN);
7413 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "partyPIRestrictionBits");
7414 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyName, 4, ENC_LITTLE_ENDIAN);
7415 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingPartyNumber, 4, ENC_LITTLE_ENDIAN);
7416 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CallingParty, 4, ENC_LITTLE_ENDIAN);
7417 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyName, 4, ENC_LITTLE_ENDIAN);
7418 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
7419 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_CalledParty, 4, ENC_LITTLE_ENDIAN);
7420 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyName, 4, ENC_LITTLE_ENDIAN);
7421 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledPartyNumber, 4, ENC_LITTLE_ENDIAN);
7422 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_OriginalCalledParty, 4, ENC_LITTLE_ENDIAN);
7423 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyName, 4, ENC_LITTLE_ENDIAN);
7424 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectPartyNumber, 4, ENC_LITTLE_ENDIAN);
7425 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_LastRedirectParty, 4, ENC_LITTLE_ENDIAN);
7426 ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_BitsReserved, 4, ENC_LITTLE_ENDIAN);
7427 ptvcursor_advance(cursor, 4);
7428 ptvcursor_pop_subtree(cursor); /* end bitfield: partyPIRestrictionBits */
7429 callingParty_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7430 if (callingParty_len > 1) {
7431 si->callingParty = g_strdup(tvb_format_stringzpad(pinfo->pool, ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), callingParty_len));
7432 ptvcursor_add(cursor, hf_skinny_callingParty, callingParty_len, ENC_ASCII);
7433 } else {
7434 ptvcursor_advance(cursor, 1);
7436 AlternateCallingParty_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7437 if (AlternateCallingParty_len > 1) {
7438 ptvcursor_add(cursor, hf_skinny_AlternateCallingParty, AlternateCallingParty_len, ENC_ASCII);
7439 } else {
7440 ptvcursor_advance(cursor, 1);
7442 calledParty_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7443 if (calledParty_len > 1) {
7444 si->calledParty = g_strdup(tvb_format_stringzpad(pinfo->pool, ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), calledParty_len));
7445 ptvcursor_add(cursor, hf_skinny_calledParty, calledParty_len, ENC_ASCII);
7446 } else {
7447 ptvcursor_advance(cursor, 1);
7449 originalCalledParty_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7450 if (originalCalledParty_len > 1) {
7451 ptvcursor_add(cursor, hf_skinny_originalCalledParty, originalCalledParty_len, ENC_ASCII);
7452 } else {
7453 ptvcursor_advance(cursor, 1);
7455 lastRedirectingParty_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7456 if (lastRedirectingParty_len > 1) {
7457 ptvcursor_add(cursor, hf_skinny_lastRedirectingParty, lastRedirectingParty_len, ENC_ASCII);
7458 } else {
7459 ptvcursor_advance(cursor, 1);
7461 cgpnVoiceMailbox_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7462 if (cgpnVoiceMailbox_len > 1) {
7463 ptvcursor_add(cursor, hf_skinny_cgpnVoiceMailbox, cgpnVoiceMailbox_len, ENC_ASCII);
7464 } else {
7465 ptvcursor_advance(cursor, 1);
7467 cdpnVoiceMailbox_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7468 if (cdpnVoiceMailbox_len > 1) {
7469 ptvcursor_add(cursor, hf_skinny_cdpnVoiceMailbox, cdpnVoiceMailbox_len, ENC_ASCII);
7470 } else {
7471 ptvcursor_advance(cursor, 1);
7473 originalCdpnVoiceMailbox_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7474 if (originalCdpnVoiceMailbox_len > 1) {
7475 ptvcursor_add(cursor, hf_skinny_originalCdpnVoiceMailbox, originalCdpnVoiceMailbox_len, ENC_ASCII);
7476 } else {
7477 ptvcursor_advance(cursor, 1);
7479 lastRedirectingVoiceMailbox_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7480 if (lastRedirectingVoiceMailbox_len > 1) {
7481 ptvcursor_add(cursor, hf_skinny_lastRedirectingVoiceMailbox, lastRedirectingVoiceMailbox_len, ENC_ASCII);
7482 } else {
7483 ptvcursor_advance(cursor, 1);
7485 callingPartyName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7486 if (callingPartyName_len > 1) {
7487 ptvcursor_add(cursor, hf_skinny_callingPartyName, callingPartyName_len, ENC_ASCII);
7488 } else {
7489 ptvcursor_advance(cursor, 1);
7491 calledPartyName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7492 if (calledPartyName_len > 1) {
7493 ptvcursor_add(cursor, hf_skinny_calledPartyName, calledPartyName_len, ENC_ASCII);
7494 } else {
7495 ptvcursor_advance(cursor, 1);
7497 originalCalledPartyName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7498 if (originalCalledPartyName_len > 1) {
7499 ptvcursor_add(cursor, hf_skinny_originalCalledPartyName, originalCalledPartyName_len, ENC_ASCII);
7500 } else {
7501 ptvcursor_advance(cursor, 1);
7503 lastRedirectingPartyName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7504 if (lastRedirectingPartyName_len > 1) {
7505 ptvcursor_add(cursor, hf_skinny_lastRedirectingPartyName, lastRedirectingPartyName_len, ENC_ASCII);
7506 } else {
7507 ptvcursor_advance(cursor, 1);
7509 if (hdr_version >= V17_MSG_TYPE) {
7510 HuntPilotNumber_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7511 if (HuntPilotNumber_len > 1) {
7512 ptvcursor_add(cursor, hf_skinny_HuntPilotNumber, HuntPilotNumber_len, ENC_ASCII);
7513 } else {
7514 ptvcursor_advance(cursor, 1);
7516 HuntPilotName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
7517 if (HuntPilotName_len > 1) {
7518 ptvcursor_add(cursor, hf_skinny_HuntPilotName, HuntPilotName_len, ENC_ASCII);
7519 } else {
7520 ptvcursor_advance(cursor, 1);
7523 if (si->callingParty && si->calledParty) {
7524 si->additionalInfo = ws_strdup_printf("\"%s -> %s\"", si->callingParty, si->calledParty);
7529 * Message: PortReqMessage
7530 * Opcode: 0x014b
7531 * Type: MediaControl
7532 * Direction: pbx2dev
7533 * VarLength: no
7534 * MsgType: request
7536 static void
7537 handle_PortReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7539 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7540 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7541 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7542 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7543 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
7544 ptvcursor_add(cursor, hf_skinny_mediaTransportType, 4, ENC_LITTLE_ENDIAN);
7545 ptvcursor_add(cursor, hf_skinny_ipAddressType, 4, ENC_LITTLE_ENDIAN);
7546 ptvcursor_add(cursor, hf_skinny_mediaType, 4, ENC_LITTLE_ENDIAN);
7547 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x014b);
7551 * Message: PortCloseMessage
7552 * Opcode: 0x014c
7553 * Type: MediaControl
7554 * Direction: pbx2dev
7555 * VarLength: no
7556 * MsgType: event
7558 static void
7559 handle_PortCloseMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7561 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7562 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7563 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7564 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7565 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
7566 ptvcursor_add(cursor, hf_skinny_mediaType, 4, ENC_LITTLE_ENDIAN);
7570 * Message: QoSListenMessage
7571 * Opcode: 0x014d
7572 * Type: IntraCCM
7573 * Direction: pbx2pbx
7574 * VarLength: no
7575 * MsgType: event
7577 static void
7578 handle_QoSListenMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7580 address remoteIpAddr;
7581 char *remoteIpAddr_str = NULL;
7582 uint32_t remotePortNumber = 0;
7583 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7584 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7585 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7586 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7587 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
7588 read_skinny_ipv4or6(cursor, &remoteIpAddr);
7589 dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6);
7590 remotePortNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7591 ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
7592 srtp_add_address(pinfo, PT_UDP, &remoteIpAddr, remotePortNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
7593 remoteIpAddr_str = address_to_display(NULL, &remoteIpAddr);
7594 si->additionalInfo = ws_strdup_printf("%s:%d", remoteIpAddr_str, remotePortNumber);
7595 wmem_free(NULL, remoteIpAddr_str);
7596 ptvcursor_add(cursor, hf_skinny_resvStyle, 4, ENC_LITTLE_ENDIAN);
7597 ptvcursor_add(cursor, hf_skinny_maxRetryNumber, 4, ENC_LITTLE_ENDIAN);
7598 ptvcursor_add(cursor, hf_skinny_retryTimer, 4, ENC_LITTLE_ENDIAN);
7599 ptvcursor_add(cursor, hf_skinny_confirmRequired, 4, ENC_LITTLE_ENDIAN);
7600 ptvcursor_add(cursor, hf_skinny_preemptionPriority, 4, ENC_LITTLE_ENDIAN);
7601 ptvcursor_add(cursor, hf_skinny_defendingPriority, 4, ENC_LITTLE_ENDIAN);
7602 ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
7603 ptvcursor_add(cursor, hf_skinny_averageBitRate, 4, ENC_LITTLE_ENDIAN);
7604 ptvcursor_add(cursor, hf_skinny_burstSize, 4, ENC_LITTLE_ENDIAN);
7605 ptvcursor_add(cursor, hf_skinny_peakRate, 4, ENC_LITTLE_ENDIAN);
7607 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "applicationID");
7608 ptvcursor_add(cursor, hf_skinny_vendorID, 32, ENC_ASCII);
7609 ptvcursor_add(cursor, hf_skinny_version, 16, ENC_ASCII);
7610 ptvcursor_add(cursor, hf_skinny_appName, 32, ENC_ASCII);
7611 ptvcursor_add(cursor, hf_skinny_subAppID, 32, ENC_ASCII);
7612 ptvcursor_pop_subtree(cursor);
7617 * Message: QoSPathMessage
7618 * Opcode: 0x014e
7619 * Type: IntraCCM
7620 * Direction: pbx2pbx
7621 * VarLength: no
7622 * MsgType: event
7624 static void
7625 handle_QoSPathMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7627 address remoteIpAddr;
7628 char *remoteIpAddr_str = NULL;
7629 uint32_t remotePortNumber = 0;
7630 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7631 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7632 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7633 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7634 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
7635 read_skinny_ipv4or6(cursor, &remoteIpAddr);
7636 dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6);
7637 remotePortNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7638 ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
7639 srtp_add_address(pinfo, PT_UDP, &remoteIpAddr, remotePortNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
7640 remoteIpAddr_str = address_to_display(NULL, &remoteIpAddr);
7641 si->additionalInfo = ws_strdup_printf("%s:%d", remoteIpAddr_str, remotePortNumber);
7642 wmem_free(NULL, remoteIpAddr_str);
7643 ptvcursor_add(cursor, hf_skinny_resvStyle, 4, ENC_LITTLE_ENDIAN);
7644 ptvcursor_add(cursor, hf_skinny_maxRetryNumber, 4, ENC_LITTLE_ENDIAN);
7645 ptvcursor_add(cursor, hf_skinny_retryTimer, 4, ENC_LITTLE_ENDIAN);
7646 ptvcursor_add(cursor, hf_skinny_preemptionPriority, 4, ENC_LITTLE_ENDIAN);
7647 ptvcursor_add(cursor, hf_skinny_defendingPriority, 4, ENC_LITTLE_ENDIAN);
7648 ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
7649 ptvcursor_add(cursor, hf_skinny_averageBitRate, 4, ENC_LITTLE_ENDIAN);
7650 ptvcursor_add(cursor, hf_skinny_burstSize, 4, ENC_LITTLE_ENDIAN);
7651 ptvcursor_add(cursor, hf_skinny_peakRate, 4, ENC_LITTLE_ENDIAN);
7653 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "applicationID");
7654 ptvcursor_add(cursor, hf_skinny_vendorID, 32, ENC_ASCII);
7655 ptvcursor_add(cursor, hf_skinny_version, 16, ENC_ASCII);
7656 ptvcursor_add(cursor, hf_skinny_appName, 32, ENC_ASCII);
7657 ptvcursor_add(cursor, hf_skinny_subAppID, 32, ENC_ASCII);
7658 ptvcursor_pop_subtree(cursor);
7663 * Message: QoSTeardownMessage
7664 * Opcode: 0x014f
7665 * Type: IntraCCM
7666 * Direction: pbx2pbx
7667 * VarLength: no
7668 * MsgType: event
7670 static void
7671 handle_QoSTeardownMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7673 address remoteIpAddr;
7674 char *remoteIpAddr_str = NULL;
7675 uint32_t remotePortNumber = 0;
7676 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7677 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7678 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7679 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7680 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
7681 read_skinny_ipv4or6(cursor, &remoteIpAddr);
7682 dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6);
7683 remotePortNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7684 ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
7685 srtp_add_address(pinfo, PT_UDP, &remoteIpAddr, remotePortNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
7686 remoteIpAddr_str = address_to_display(NULL, &remoteIpAddr);
7687 si->additionalInfo = ws_strdup_printf("%s:%d", remoteIpAddr_str, remotePortNumber);
7688 wmem_free(NULL, remoteIpAddr_str);
7689 ptvcursor_add(cursor, hf_skinny_direction, 4, ENC_LITTLE_ENDIAN);
7693 * Message: UpdateDSCPMessage
7694 * Opcode: 0x0150
7695 * Type: IntraCCM
7696 * Direction: pbx2pbx
7697 * VarLength: no
7698 * MsgType: event
7700 static void
7701 handle_UpdateDSCPMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7703 address remoteIpAddr;
7704 char *remoteIpAddr_str = NULL;
7705 uint32_t remotePortNumber = 0;
7706 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7707 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7708 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7709 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7710 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
7711 read_skinny_ipv4or6(cursor, &remoteIpAddr);
7712 dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6);
7713 remotePortNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7714 ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
7715 srtp_add_address(pinfo, PT_UDP, &remoteIpAddr, remotePortNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
7716 remoteIpAddr_str = address_to_display(NULL, &remoteIpAddr);
7717 si->additionalInfo = ws_strdup_printf("%s:%d", remoteIpAddr_str, remotePortNumber);
7718 wmem_free(NULL, remoteIpAddr_str);
7719 ptvcursor_add(cursor, hf_skinny_DSCPValue, 4, ENC_LITTLE_ENDIAN);
7723 * Message: QoSModifyMessage
7724 * Opcode: 0x0151
7725 * Type: IntraCCM
7726 * Direction: pbx2pbx
7727 * VarLength: no
7728 * MsgType: event
7730 static void
7731 handle_QoSModifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7733 address remoteIpAddr;
7734 char *remoteIpAddr_str = NULL;
7735 uint32_t remotePortNumber = 0;
7736 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7737 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7738 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7739 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7740 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
7741 read_skinny_ipv4or6(cursor, &remoteIpAddr);
7742 dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6);
7743 remotePortNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7744 ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
7745 srtp_add_address(pinfo, PT_UDP, &remoteIpAddr, remotePortNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
7746 remoteIpAddr_str = address_to_display(NULL, &remoteIpAddr);
7747 si->additionalInfo = ws_strdup_printf("%s:%d", remoteIpAddr_str, remotePortNumber);
7748 wmem_free(NULL, remoteIpAddr_str);
7749 ptvcursor_add(cursor, hf_skinny_direction, 4, ENC_LITTLE_ENDIAN);
7750 ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
7751 ptvcursor_add(cursor, hf_skinny_averageBitRate, 4, ENC_LITTLE_ENDIAN);
7752 ptvcursor_add(cursor, hf_skinny_burstSize, 4, ENC_LITTLE_ENDIAN);
7753 ptvcursor_add(cursor, hf_skinny_peakRate, 4, ENC_LITTLE_ENDIAN);
7755 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "applicationID");
7756 ptvcursor_add(cursor, hf_skinny_vendorID, 32, ENC_ASCII);
7757 ptvcursor_add(cursor, hf_skinny_version, 16, ENC_ASCII);
7758 ptvcursor_add(cursor, hf_skinny_appName, 32, ENC_ASCII);
7759 ptvcursor_add(cursor, hf_skinny_subAppID, 32, ENC_ASCII);
7760 ptvcursor_pop_subtree(cursor);
7765 * Message: SubscriptionStatResMessage
7766 * Opcode: 0x0152
7767 * Type: RegistrationAndManagement
7768 * Direction: pbx2dev
7769 * VarLength: no
7770 * MsgType: response
7772 static void
7773 handle_SubscriptionStatResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7775 uint32_t transactionId = 0;
7776 transactionId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7777 ptvcursor_add(cursor, hf_skinny_transactionId, 4, ENC_LITTLE_ENDIAN);
7778 ptvcursor_add(cursor, hf_skinny_subscriptionFeatureID, 4, ENC_LITTLE_ENDIAN);
7779 ptvcursor_add(cursor, hf_skinny_timer, 4, ENC_LITTLE_ENDIAN);
7780 ptvcursor_add(cursor, hf_skinny_cause, 4, ENC_LITTLE_ENDIAN);
7781 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0048 ^ transactionId);
7785 * Message: NotificationMessage
7786 * Opcode: 0x0153
7787 * Type: RegistrationAndManagement
7788 * Direction: pbx2dev
7789 * VarLength: no
7790 * MsgType: event
7792 static void
7793 handle_NotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7795 ptvcursor_add(cursor, hf_skinny_transactionId, 4, ENC_LITTLE_ENDIAN);
7796 ptvcursor_add(cursor, hf_skinny_subscriptionFeatureID, 4, ENC_LITTLE_ENDIAN);
7797 ptvcursor_add(cursor, hf_skinny_notificationStatus, 4, ENC_LITTLE_ENDIAN);
7798 ptvcursor_add(cursor, hf_skinny_text, 97, ENC_ASCII);
7802 * Message: StartMediaTransmissionAckMessage
7803 * Opcode: 0x0154
7804 * Type: MediaControl
7805 * Direction: pbx2dev
7806 * VarLength: no
7807 * MsgType: response
7809 static void
7810 handle_StartMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7812 uint32_t passThroughPartyId = 0;
7813 address transmitIpAddr;
7814 char *transmitIpAddr_str = NULL;
7815 uint32_t portNumber = 0;
7816 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7817 passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7818 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7819 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
7820 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7821 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7822 read_skinny_ipv4or6(cursor, &transmitIpAddr);
7823 dissect_skinny_ipv4or6(cursor, hf_skinny_transmitIpAddr_ipv4, hf_skinny_transmitIpAddr_ipv6);
7824 portNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7825 ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN);
7826 srtp_add_address(pinfo, PT_UDP, &transmitIpAddr, portNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
7827 transmitIpAddr_str = address_to_display(NULL, &transmitIpAddr);
7828 si->additionalInfo = ws_strdup_printf("%s:%d", transmitIpAddr_str, portNumber);
7829 wmem_free(NULL, transmitIpAddr_str);
7830 si->mediaTransmissionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7831 ptvcursor_add(cursor, hf_skinny_mediaTransmissionStatus, 4, ENC_LITTLE_ENDIAN);
7832 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x008a ^ passThroughPartyId);
7836 * Message: StartMultiMediaTransmissionAckMessage
7837 * Opcode: 0x0155
7838 * Type: MediaControl
7839 * Direction: pbx2dev
7840 * VarLength: no
7841 * MsgType: response
7843 static void
7844 handle_StartMultiMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7846 uint32_t passThroughPartyId = 0;
7847 address transmitIpAddr;
7848 char *transmitIpAddr_str = NULL;
7849 uint32_t portNumber = 0;
7850 ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN);
7851 passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7852 si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7853 ptvcursor_add(cursor, hf_skinny_passThroughPartyId, 4, ENC_LITTLE_ENDIAN);
7854 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7855 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7856 read_skinny_ipv4or6(cursor, &transmitIpAddr);
7857 dissect_skinny_ipv4or6(cursor, hf_skinny_transmitIpAddr_ipv4, hf_skinny_transmitIpAddr_ipv6);
7858 portNumber = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7859 ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN);
7860 srtp_add_address(pinfo, PT_UDP, &transmitIpAddr, portNumber, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL);
7861 transmitIpAddr_str = address_to_display(NULL, &transmitIpAddr);
7862 si->additionalInfo = ws_strdup_printf("%s:%d", transmitIpAddr_str, portNumber);
7863 wmem_free(NULL, transmitIpAddr_str);
7864 si->multimediaTransmissionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7865 ptvcursor_add(cursor, hf_skinny_multimediaTransmissionStatus, 4, ENC_LITTLE_ENDIAN);
7866 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x0132 ^ passThroughPartyId);
7870 * Message: CallHistoryInfoMessage
7871 * Opcode: 0x0156
7872 * Type: CallControl
7873 * Direction: pbx2dev
7874 * VarLength: no
7875 * MsgType: event
7877 static void
7878 handle_CallHistoryInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7880 ptvcursor_add(cursor, hf_skinny_callHistoryDisposition, 4, ENC_LITTLE_ENDIAN);
7881 si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7882 ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
7883 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7884 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
7888 * Message: LocationInfoMessage
7889 * Opcode: 0x0157
7890 * Type: RegistrationAndManagement
7891 * Direction: pbx2dev
7892 * VarLength: no
7893 * MsgType: event
7894 * Comment: Sent by wifi devices, contains xml information about connected SSID
7896 static void
7897 handle_LocationInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7899 ptvcursor_add(cursor, hf_skinny_locationInfo, 2401, ENC_ASCII);
7903 * Message: MwiResMessage
7904 * Opcode: 0x0158
7905 * Type: RegistrationAndManagement
7906 * Direction: pbx2pbx
7907 * VarLength: no
7908 * MsgType: response
7910 static void
7911 handle_MwiResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7913 ptvcursor_add(cursor, hf_skinny_mwiTargetNumber, 25, ENC_ASCII);
7914 ptvcursor_add(cursor, hf_skinny_mwi_notification_result, 4, ENC_LITTLE_ENDIAN);
7915 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x004c);
7919 * Message: AddOnDeviceCapabilitiesMessage
7920 * Opcode: 0x0159
7921 * Type: RegistrationAndManagement
7922 * Direction: dev2pbx
7923 * VarLength: no
7924 * MsgType: event
7926 static void
7927 handle_AddOnDeviceCapabilitiesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7929 ptvcursor_add(cursor, hf_skinny_unknown1_0159, 4, ENC_LITTLE_ENDIAN);
7930 ptvcursor_add(cursor, hf_skinny_unknown2_0159, 4, ENC_LITTLE_ENDIAN);
7931 ptvcursor_add(cursor, hf_skinny_unknown3_0159, 4, ENC_LITTLE_ENDIAN);
7932 ptvcursor_add(cursor, hf_skinny_unknownString_0159, 152, ENC_ASCII);
7936 * Message: EnhancedAlarmMessage
7937 * Opcode: 0x015a
7938 * Type: RegistrationAndManagement
7939 * Direction: pbx2dev
7940 * VarLength: no
7941 * MsgType: event
7943 static void
7944 handle_EnhancedAlarmMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7946 dissect_skinny_xml(cursor, hf_skinny_alarmInfo, pinfo, 0, 2048);
7950 * Message: CallCountRespMessage
7951 * Opcode: 0x015f
7952 * Type: CallControl
7953 * Direction: pbx2pbx
7954 * VarLength: no
7955 * MsgType: response
7957 static void
7958 handle_CallCountRespMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7960 uint32_t lineDataEntries = 0;
7961 ptvcursor_add(cursor, hf_skinny_totalNumOfConfiguredLines, 4, ENC_LITTLE_ENDIAN);
7962 ptvcursor_add(cursor, hf_skinny_startingLineInstance, 4, ENC_LITTLE_ENDIAN);
7963 lineDataEntries = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7964 ptvcursor_add(cursor, hf_skinny_lineDataEntries, 4, ENC_LITTLE_ENDIAN);
7965 if (lineDataEntries <= 42) {
7966 uint32_t counter_1 = 0;
7967 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lineData [ref:lineDataEntries = %d, max:42]", lineDataEntries);
7968 if (lineDataEntries && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (lineDataEntries * 4) && lineDataEntries <= 42) {
7969 for (counter_1 = 0; counter_1 < 42; counter_1++) {
7970 if (counter_1 < lineDataEntries) {
7971 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lineData [%d / %d]", counter_1 + 1, lineDataEntries);
7972 ptvcursor_add(cursor, hf_skinny_maxNumCalls, 2, ENC_LITTLE_ENDIAN);
7973 ptvcursor_add(cursor, hf_skinny_busyTrigger, 2, ENC_LITTLE_ENDIAN);
7974 } else {
7975 ptvcursor_advance(cursor, 4);
7977 ptvcursor_pop_subtree(cursor);
7980 ptvcursor_pop_subtree(cursor);
7981 } else {
7982 ptvcursor_advance(cursor, (lineDataEntries * 4));
7984 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x015e);
7988 * Message: RecordingStatusMessage
7989 * Opcode: 0x0160
7990 * Type: CallControl
7991 * Direction: pbx2dev
7992 * VarLength: no
7993 * MsgType: event
7995 static void
7996 handle_RecordingStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
7998 si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
7999 ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
8000 ptvcursor_add(cursor, hf_skinny_recording_status, 4, ENC_LITTLE_ENDIAN);
8004 * Message: SPCPRegisterTokenReq
8005 * Opcode: 0x8000
8006 * Type: RegistrationAndManagement
8007 * Direction: dev2pbx
8008 * VarLength: no
8009 * MsgType: request
8011 static void
8012 handle_SPCPRegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
8015 ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
8016 ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII);
8017 ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
8018 ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
8019 ptvcursor_pop_subtree(cursor);
8021 ptvcursor_add(cursor, hf_skinny_stationIpAddr, 4, ENC_LITTLE_ENDIAN);
8022 ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN);
8023 ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
8024 skinny_reqrep_add_request(cursor, pinfo, skinny_conv, 0x8000);
8028 * Message: SPCPRegisterTokenAck
8029 * Opcode: 0x8100
8030 * Type: RegistrationAndManagement
8031 * Direction: pbx2dev
8032 * VarLength: no
8033 * MsgType: response
8035 static void
8036 handle_SPCPRegisterTokenAck(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
8038 ptvcursor_add(cursor, hf_skinny_features, 4, ENC_LITTLE_ENDIAN);
8039 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x8000);
8043 * Message: SPCPRegisterTokenReject
8044 * Opcode: 0x8101
8045 * Type: RegistrationAndManagement
8046 * Direction: pbx2dev
8047 * VarLength: no
8048 * MsgType: response
8050 static void
8051 handle_SPCPRegisterTokenReject(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_)
8053 ptvcursor_add(cursor, hf_skinny_waitTimeBeforeNextReq, 4, ENC_LITTLE_ENDIAN);
8054 skinny_reqrep_add_response(cursor, pinfo, skinny_conv, 0x8000);
8058 typedef void (*message_handler) (ptvcursor_t * cursor, packet_info *pinfo, skinny_conv_info_t * skinny_conv);
8060 typedef struct _skinny_opcode_map_t {
8061 uint32_t opcode;
8062 message_handler handler;
8063 skinny_message_type_t type;
8064 const char *name;
8065 } skinny_opcode_map_t;
8067 /* Messages Handler Array */
8068 static const skinny_opcode_map_t skinny_opcode_map[] = {
8069 {0x0000, NULL , SKINNY_MSGTYPE_REQUEST , "KeepAliveReqMessage"},
8070 {0x0001, handle_RegisterReqMessage , SKINNY_MSGTYPE_REQUEST , "RegisterReqMessage"},
8071 {0x0002, handle_IpPortMessage , SKINNY_MSGTYPE_EVENT , "IpPortMessage"},
8072 {0x0003, handle_KeypadButtonMessage , SKINNY_MSGTYPE_EVENT , "KeypadButtonMessage"},
8073 {0x0004, handle_EnblocCallMessage , SKINNY_MSGTYPE_EVENT , "EnblocCallMessage"},
8074 {0x0005, handle_StimulusMessage , SKINNY_MSGTYPE_EVENT , "StimulusMessage"},
8075 {0x0006, handle_OffHookMessage , SKINNY_MSGTYPE_EVENT , "OffHookMessage"},
8076 {0x0007, handle_OnHookMessage , SKINNY_MSGTYPE_EVENT , "OnHookMessage"},
8077 {0x0008, handle_HookFlashMessage , SKINNY_MSGTYPE_EVENT , "HookFlashMessage"},
8078 {0x0009, handle_ForwardStatReqMessage , SKINNY_MSGTYPE_REQUEST , "ForwardStatReqMessage"},
8079 {0x000a, handle_SpeedDialStatReqMessage , SKINNY_MSGTYPE_REQUEST , "SpeedDialStatReqMessage"},
8080 {0x000b, handle_LineStatReqMessage , SKINNY_MSGTYPE_REQUEST , "LineStatReqMessage"},
8081 {0x000c, NULL , SKINNY_MSGTYPE_REQUEST , "ConfigStatReqMessage"},
8082 {0x000d, NULL , SKINNY_MSGTYPE_REQUEST , "TimeDateReqMessage"},
8083 {0x000e, NULL , SKINNY_MSGTYPE_REQUEST , "ButtonTemplateReqMessage"},
8084 {0x000f, NULL , SKINNY_MSGTYPE_REQUEST , "VersionReqMessage"},
8085 {0x0010, handle_CapabilitiesResMessage , SKINNY_MSGTYPE_RESPONSE , "CapabilitiesResMessage"},
8086 {0x0012, NULL , SKINNY_MSGTYPE_REQUEST , "ServerReqMessage"},
8087 {0x0020, handle_AlarmMessage , SKINNY_MSGTYPE_EVENT , "AlarmMessage"},
8088 {0x0021, handle_MulticastMediaReceptionAckMessage , SKINNY_MSGTYPE_RESPONSE , "MulticastMediaReceptionAckMessage"},
8089 {0x0022, handle_OpenReceiveChannelAckMessage , SKINNY_MSGTYPE_RESPONSE , "OpenReceiveChannelAckMessage"},
8090 {0x0023, handle_ConnectionStatisticsResMessage , SKINNY_MSGTYPE_RESPONSE , "ConnectionStatisticsResMessage"},
8091 {0x0024, handle_OffHookWithCallingPartyNumberMessage , SKINNY_MSGTYPE_EVENT , "OffHookWithCallingPartyNumberMessage"},
8092 {0x0025, NULL , SKINNY_MSGTYPE_REQUEST , "SoftKeySetReqMessage"},
8093 {0x0026, handle_SoftKeyEventMessage , SKINNY_MSGTYPE_EVENT , "SoftKeyEventMessage"},
8094 {0x0027, handle_UnregisterReqMessage , SKINNY_MSGTYPE_REQUEST , "UnregisterReqMessage"},
8095 {0x0028, NULL , SKINNY_MSGTYPE_REQUEST , "SoftKeyTemplateReqMessage"},
8096 {0x0029, handle_RegisterTokenReq , SKINNY_MSGTYPE_REQUEST , "RegisterTokenReq"},
8097 {0x002a, handle_MediaTransmissionFailureMessage , SKINNY_MSGTYPE_RESPONSE , "MediaTransmissionFailureMessage"},
8098 {0x002b, handle_HeadsetStatusMessage , SKINNY_MSGTYPE_EVENT , "HeadsetStatusMessage"},
8099 {0x002c, handle_MediaResourceNotificationMessage , SKINNY_MSGTYPE_EVENT , "MediaResourceNotificationMessage"},
8100 {0x002d, handle_RegisterAvailableLinesMessage , SKINNY_MSGTYPE_EVENT , "RegisterAvailableLinesMessage"},
8101 {0x002e, handle_DeviceToUserDataMessage , SKINNY_MSGTYPE_REQUEST , "DeviceToUserDataMessage"},
8102 {0x002f, handle_DeviceToUserDataResponseMessage , SKINNY_MSGTYPE_RESPONSE , "DeviceToUserDataResponseMessage"},
8103 {0x0030, handle_UpdateCapabilitiesMessage , SKINNY_MSGTYPE_EVENT , "UpdateCapabilitiesMessage"},
8104 {0x0031, handle_OpenMultiMediaReceiveChannelAckMessage , SKINNY_MSGTYPE_RESPONSE , "OpenMultiMediaReceiveChannelAckMessage"},
8105 {0x0032, handle_ClearConferenceMessage , SKINNY_MSGTYPE_EVENT , "ClearConferenceMessage"},
8106 {0x0033, handle_ServiceURLStatReqMessage , SKINNY_MSGTYPE_REQUEST , "ServiceURLStatReqMessage"},
8107 {0x0034, handle_FeatureStatReqMessage , SKINNY_MSGTYPE_REQUEST , "FeatureStatReqMessage"},
8108 {0x0035, handle_CreateConferenceResMessage , SKINNY_MSGTYPE_RESPONSE , "CreateConferenceResMessage"},
8109 {0x0036, handle_DeleteConferenceResMessage , SKINNY_MSGTYPE_RESPONSE , "DeleteConferenceResMessage"},
8110 {0x0037, handle_ModifyConferenceResMessage , SKINNY_MSGTYPE_RESPONSE , "ModifyConferenceResMessage"},
8111 {0x0038, handle_AddParticipantResMessage , SKINNY_MSGTYPE_RESPONSE , "AddParticipantResMessage"},
8112 {0x0039, handle_AuditConferenceResMessage , SKINNY_MSGTYPE_RESPONSE , "AuditConferenceResMessage"},
8113 {0x0040, handle_AuditParticipantResMessage , SKINNY_MSGTYPE_RESPONSE , "AuditParticipantResMessage"},
8114 {0x0041, handle_DeviceToUserDataMessageVersion1 , SKINNY_MSGTYPE_REQUEST , "DeviceToUserDataMessageVersion1"},
8115 {0x0042, handle_DeviceToUserDataResponseMessageVersion1 , SKINNY_MSGTYPE_RESPONSE , "DeviceToUserDataResponseMessageVersion1"},
8116 {0x0043, handle_CapabilitiesV2ResMessage , SKINNY_MSGTYPE_RESPONSE , "CapabilitiesV2ResMessage"},
8117 {0x0044, handle_CapabilitiesV3ResMessage , SKINNY_MSGTYPE_RESPONSE , "CapabilitiesV3ResMessage"},
8118 {0x0045, handle_PortResMessage , SKINNY_MSGTYPE_RESPONSE , "PortResMessage"},
8119 {0x0046, handle_QoSResvNotifyMessage , SKINNY_MSGTYPE_EVENT , "QoSResvNotifyMessage"},
8120 {0x0047, handle_QoSErrorNotifyMessage , SKINNY_MSGTYPE_EVENT , "QoSErrorNotifyMessage"},
8121 {0x0048, handle_SubscriptionStatReqMessage , SKINNY_MSGTYPE_REQUEST , "SubscriptionStatReqMessage"},
8122 {0x0049, handle_MediaPathEventMessage , SKINNY_MSGTYPE_EVENT , "MediaPathEventMessage"},
8123 {0x004a, handle_MediaPathCapabilityMessage , SKINNY_MSGTYPE_EVENT , "MediaPathCapabilityMessage"},
8124 {0x004c, handle_MwiNotificationMessage , SKINNY_MSGTYPE_REQUEST , "MwiNotificationMessage"},
8125 {0x0081, handle_RegisterAckMessage , SKINNY_MSGTYPE_RESPONSE , "RegisterAckMessage"},
8126 {0x0082, handle_StartToneMessage , SKINNY_MSGTYPE_EVENT , "StartToneMessage"},
8127 {0x0083, handle_StopToneMessage , SKINNY_MSGTYPE_EVENT , "StopToneMessage"},
8128 {0x0085, handle_SetRingerMessage , SKINNY_MSGTYPE_EVENT , "SetRingerMessage"},
8129 {0x0086, handle_SetLampMessage , SKINNY_MSGTYPE_EVENT , "SetLampMessage"},
8130 {0x0087, NULL , SKINNY_MSGTYPE_EVENT , "SetHookFlashDetectMessage"},
8131 {0x0088, handle_SetSpeakerModeMessage , SKINNY_MSGTYPE_EVENT , "SetSpeakerModeMessage"},
8132 {0x0089, handle_SetMicroModeMessage , SKINNY_MSGTYPE_EVENT , "SetMicroModeMessage"},
8133 {0x008a, handle_StartMediaTransmissionMessage , SKINNY_MSGTYPE_REQUEST , "StartMediaTransmissionMessage"},
8134 {0x008b, handle_StopMediaTransmissionMessage , SKINNY_MSGTYPE_EVENT , "StopMediaTransmissionMessage"},
8135 {0x008f, handle_CallInfoMessage , SKINNY_MSGTYPE_EVENT , "CallInfoMessage"},
8136 {0x0090, handle_ForwardStatResMessage , SKINNY_MSGTYPE_RESPONSE , "ForwardStatResMessage"},
8137 {0x0091, handle_SpeedDialStatResMessage , SKINNY_MSGTYPE_RESPONSE , "SpeedDialStatResMessage"},
8138 {0x0092, handle_LineStatResMessage , SKINNY_MSGTYPE_RESPONSE , "LineStatResMessage"},
8139 {0x0093, handle_ConfigStatResMessage , SKINNY_MSGTYPE_RESPONSE , "ConfigStatResMessage"},
8140 {0x0094, handle_TimeDateResMessage , SKINNY_MSGTYPE_RESPONSE , "TimeDateResMessage"},
8141 {0x0095, handle_StartSessionTransmissionMessage , SKINNY_MSGTYPE_EVENT , "StartSessionTransmissionMessage"},
8142 {0x0096, handle_StopSessionTransmissionMessage , SKINNY_MSGTYPE_EVENT , "StopSessionTransmissionMessage"},
8143 {0x0097, handle_ButtonTemplateResMessage , SKINNY_MSGTYPE_RESPONSE , "ButtonTemplateResMessage"},
8144 {0x0098, handle_VersionResMessage , SKINNY_MSGTYPE_RESPONSE , "VersionResMessage"},
8145 {0x0099, handle_DisplayTextMessage , SKINNY_MSGTYPE_EVENT , "DisplayTextMessage"},
8146 {0x009a, NULL , SKINNY_MSGTYPE_EVENT , "ClearDisplay"},
8147 {0x009b, NULL , SKINNY_MSGTYPE_EVENT , "CapabilitiesReq"},
8148 {0x009d, handle_RegisterRejectMessage , SKINNY_MSGTYPE_EVENT , "RegisterRejectMessage"},
8149 {0x009e, handle_ServerResMessage , SKINNY_MSGTYPE_RESPONSE , "ServerResMessage"},
8150 {0x009f, handle_Reset , SKINNY_MSGTYPE_EVENT , "Reset"},
8151 {0x0100, NULL , SKINNY_MSGTYPE_RESPONSE , "KeepAliveAckMessage"},
8152 {0x0101, handle_StartMulticastMediaReceptionMessage , SKINNY_MSGTYPE_REQUEST , "StartMulticastMediaReceptionMessage"},
8153 {0x0102, handle_StartMulticastMediaTransmissionMessage , SKINNY_MSGTYPE_REQUEST , "StartMulticastMediaTransmissionMessage"},
8154 {0x0103, handle_StopMulticastMediaReceptionMessage , SKINNY_MSGTYPE_EVENT , "StopMulticastMediaReceptionMessage"},
8155 {0x0104, handle_StopMulticastMediaTransmissionMessage , SKINNY_MSGTYPE_EVENT , "StopMulticastMediaTransmissionMessage"},
8156 {0x0105, handle_OpenReceiveChannelMessage , SKINNY_MSGTYPE_REQUEST , "OpenReceiveChannelMessage"},
8157 {0x0106, handle_CloseReceiveChannelMessage , SKINNY_MSGTYPE_EVENT , "CloseReceiveChannelMessage"},
8158 {0x0107, handle_ConnectionStatisticsReqMessage , SKINNY_MSGTYPE_REQUEST , "ConnectionStatisticsReqMessage"},
8159 {0x0108, handle_SoftKeyTemplateResMessage , SKINNY_MSGTYPE_RESPONSE , "SoftKeyTemplateResMessage"},
8160 {0x0109, handle_SoftKeySetResMessage , SKINNY_MSGTYPE_RESPONSE , "SoftKeySetResMessage"},
8161 {0x0110, handle_SelectSoftKeysMessage , SKINNY_MSGTYPE_EVENT , "SelectSoftKeysMessage"},
8162 {0x0111, handle_CallStateMessage , SKINNY_MSGTYPE_EVENT , "CallStateMessage"},
8163 {0x0112, handle_DisplayPromptStatusMessage , SKINNY_MSGTYPE_EVENT , "DisplayPromptStatusMessage"},
8164 {0x0113, handle_ClearPromptStatusMessage , SKINNY_MSGTYPE_EVENT , "ClearPromptStatusMessage"},
8165 {0x0114, handle_DisplayNotifyMessage , SKINNY_MSGTYPE_EVENT , "DisplayNotifyMessage"},
8166 {0x0115, NULL , SKINNY_MSGTYPE_EVENT , "ClearNotifyMessage"},
8167 {0x0116, handle_ActivateCallPlaneMessage , SKINNY_MSGTYPE_EVENT , "ActivateCallPlaneMessage"},
8168 {0x0117, NULL , SKINNY_MSGTYPE_EVENT , "DeactivateCallPlaneMessage"},
8169 {0x0118, handle_UnregisterAckMessage , SKINNY_MSGTYPE_RESPONSE , "UnregisterAckMessage"},
8170 {0x0119, handle_BackSpaceResMessage , SKINNY_MSGTYPE_EVENT , "BackSpaceResMessage"},
8171 {0x011a, NULL , SKINNY_MSGTYPE_RESPONSE , "RegisterTokenAck"},
8172 {0x011b, handle_RegisterTokenReject , SKINNY_MSGTYPE_RESPONSE , "RegisterTokenReject"},
8173 {0x011c, handle_StartMediaFailureDetectionMessage , SKINNY_MSGTYPE_EVENT , "StartMediaFailureDetectionMessage"},
8174 {0x011d, handle_DialedNumberMessage , SKINNY_MSGTYPE_EVENT , "DialedNumberMessage"},
8175 {0x011e, handle_UserToDeviceDataMessage , SKINNY_MSGTYPE_EVENT , "UserToDeviceDataMessage"},
8176 {0x011f, handle_FeatureStatResMessage , SKINNY_MSGTYPE_RESPONSE , "FeatureStatResMessage"},
8177 {0x0120, handle_DisplayPriNotifyMessage , SKINNY_MSGTYPE_EVENT , "DisplayPriNotifyMessage"},
8178 {0x0121, handle_ClearPriNotifyMessage , SKINNY_MSGTYPE_EVENT , "ClearPriNotifyMessage"},
8179 {0x0122, handle_StartAnnouncementMessage , SKINNY_MSGTYPE_EVENT , "StartAnnouncementMessage"},
8180 {0x0123, handle_StopAnnouncementMessage , SKINNY_MSGTYPE_EVENT , "StopAnnouncementMessage"},
8181 {0x0124, handle_AnnouncementFinishMessage , SKINNY_MSGTYPE_EVENT , "AnnouncementFinishMessage"},
8182 {0x0127, handle_NotifyDtmfToneMessage , SKINNY_MSGTYPE_EVENT , "NotifyDtmfToneMessage"},
8183 {0x0128, handle_SendDtmfToneMessage , SKINNY_MSGTYPE_EVENT , "SendDtmfToneMessage"},
8184 {0x0129, handle_SubscribeDtmfPayloadReqMessage , SKINNY_MSGTYPE_REQUEST , "SubscribeDtmfPayloadReqMessage"},
8185 {0x012a, handle_SubscribeDtmfPayloadResMessage , SKINNY_MSGTYPE_RESPONSE , "SubscribeDtmfPayloadResMessage"},
8186 {0x012b, handle_SubscribeDtmfPayloadErrMessage , SKINNY_MSGTYPE_RESPONSE , "SubscribeDtmfPayloadErrMessage"},
8187 {0x012c, handle_UnSubscribeDtmfPayloadReqMessage , SKINNY_MSGTYPE_REQUEST , "UnSubscribeDtmfPayloadReqMessage"},
8188 {0x012d, handle_UnSubscribeDtmfPayloadResMessage , SKINNY_MSGTYPE_RESPONSE , "UnSubscribeDtmfPayloadResMessage"},
8189 {0x012e, handle_UnSubscribeDtmfPayloadErrMessage , SKINNY_MSGTYPE_RESPONSE , "UnSubscribeDtmfPayloadErrMessage"},
8190 {0x012f, handle_ServiceURLStatResMessage , SKINNY_MSGTYPE_RESPONSE , "ServiceURLStatResMessage"},
8191 {0x0130, handle_CallSelectStatResMessage , SKINNY_MSGTYPE_EVENT , "CallSelectStatResMessage"},
8192 {0x0131, handle_OpenMultiMediaReceiveChannelMessage , SKINNY_MSGTYPE_REQUEST , "OpenMultiMediaReceiveChannelMessage"},
8193 {0x0132, handle_StartMultiMediaTransmissionMessage , SKINNY_MSGTYPE_REQUEST , "StartMultiMediaTransmissionMessage"},
8194 {0x0133, handle_StopMultiMediaTransmissionMessage , SKINNY_MSGTYPE_EVENT , "StopMultiMediaTransmissionMessage"},
8195 {0x0134, handle_MiscellaneousCommandMessage , SKINNY_MSGTYPE_EVENT , "MiscellaneousCommandMessage"},
8196 {0x0135, handle_FlowControlCommandMessage , SKINNY_MSGTYPE_EVENT , "FlowControlCommandMessage"},
8197 {0x0136, handle_CloseMultiMediaReceiveChannelMessage , SKINNY_MSGTYPE_EVENT , "CloseMultiMediaReceiveChannelMessage"},
8198 {0x0137, handle_CreateConferenceReqMessage , SKINNY_MSGTYPE_REQUEST , "CreateConferenceReqMessage"},
8199 {0x0138, handle_DeleteConferenceReqMessage , SKINNY_MSGTYPE_REQUEST , "DeleteConferenceReqMessage"},
8200 {0x0139, handle_ModifyConferenceReqMessage , SKINNY_MSGTYPE_REQUEST , "ModifyConferenceReqMessage"},
8201 {0x013a, handle_AddParticipantReqMessage , SKINNY_MSGTYPE_REQUEST , "AddParticipantReqMessage"},
8202 {0x013b, handle_DropParticipantReqMessage , SKINNY_MSGTYPE_REQUEST , "DropParticipantReqMessage"},
8203 {0x013c, NULL , SKINNY_MSGTYPE_REQUEST , "AuditConferenceReqMessage"},
8204 {0x013d, handle_AuditParticipantReqMessage , SKINNY_MSGTYPE_REQUEST , "AuditParticipantReqMessage"},
8205 {0x013e, handle_ChangeParticipantReqMessage , SKINNY_MSGTYPE_REQUEST , "ChangeParticipantReqMessage"},
8206 {0x013f, handle_UserToDeviceDataMessageVersion1 , SKINNY_MSGTYPE_EVENT , "UserToDeviceDataMessageVersion1"},
8207 {0x0140, handle_VideoDisplayCommandMessage , SKINNY_MSGTYPE_EVENT , "VideoDisplayCommandMessage"},
8208 {0x0141, handle_FlowControlNotifyMessage , SKINNY_MSGTYPE_EVENT , "FlowControlNotifyMessage"},
8209 {0x0142, handle_ConfigStatV2ResMessage , SKINNY_MSGTYPE_RESPONSE , "ConfigStatV2ResMessage"},
8210 {0x0143, handle_DisplayNotifyV2Message , SKINNY_MSGTYPE_EVENT , "DisplayNotifyV2Message"},
8211 {0x0144, handle_DisplayPriNotifyV2Message , SKINNY_MSGTYPE_EVENT , "DisplayPriNotifyV2Message"},
8212 {0x0145, handle_DisplayPromptStatusV2Message , SKINNY_MSGTYPE_EVENT , "DisplayPromptStatusV2Message"},
8213 {0x0146, handle_FeatureStatV2ResMessage , SKINNY_MSGTYPE_RESPONSE , "FeatureStatV2ResMessage"},
8214 {0x0147, handle_LineStatV2ResMessage , SKINNY_MSGTYPE_RESPONSE , "LineStatV2ResMessage"},
8215 {0x0148, handle_ServiceURLStatV2ResMessage , SKINNY_MSGTYPE_RESPONSE , "ServiceURLStatV2ResMessage"},
8216 {0x0149, handle_SpeedDialStatV2ResMessage , SKINNY_MSGTYPE_RESPONSE , "SpeedDialStatV2ResMessage"},
8217 {0x014a, handle_CallInfoV2Message , SKINNY_MSGTYPE_EVENT , "CallInfoV2Message"},
8218 {0x014b, handle_PortReqMessage , SKINNY_MSGTYPE_REQUEST , "PortReqMessage"},
8219 {0x014c, handle_PortCloseMessage , SKINNY_MSGTYPE_EVENT , "PortCloseMessage"},
8220 {0x014d, handle_QoSListenMessage , SKINNY_MSGTYPE_EVENT , "QoSListenMessage"},
8221 {0x014e, handle_QoSPathMessage , SKINNY_MSGTYPE_EVENT , "QoSPathMessage"},
8222 {0x014f, handle_QoSTeardownMessage , SKINNY_MSGTYPE_EVENT , "QoSTeardownMessage"},
8223 {0x0150, handle_UpdateDSCPMessage , SKINNY_MSGTYPE_EVENT , "UpdateDSCPMessage"},
8224 {0x0151, handle_QoSModifyMessage , SKINNY_MSGTYPE_EVENT , "QoSModifyMessage"},
8225 {0x0152, handle_SubscriptionStatResMessage , SKINNY_MSGTYPE_RESPONSE , "SubscriptionStatResMessage"},
8226 {0x0153, handle_NotificationMessage , SKINNY_MSGTYPE_EVENT , "NotificationMessage"},
8227 {0x0154, handle_StartMediaTransmissionAckMessage , SKINNY_MSGTYPE_RESPONSE , "StartMediaTransmissionAckMessage"},
8228 {0x0155, handle_StartMultiMediaTransmissionAckMessage , SKINNY_MSGTYPE_RESPONSE , "StartMultiMediaTransmissionAckMessage"},
8229 {0x0156, handle_CallHistoryInfoMessage , SKINNY_MSGTYPE_EVENT , "CallHistoryInfoMessage"},
8230 {0x0157, handle_LocationInfoMessage , SKINNY_MSGTYPE_EVENT , "LocationInfoMessage"},
8231 {0x0158, handle_MwiResMessage , SKINNY_MSGTYPE_RESPONSE , "MwiResMessage"},
8232 {0x0159, handle_AddOnDeviceCapabilitiesMessage , SKINNY_MSGTYPE_EVENT , "AddOnDeviceCapabilitiesMessage"},
8233 {0x015a, handle_EnhancedAlarmMessage , SKINNY_MSGTYPE_EVENT , "EnhancedAlarmMessage"},
8234 {0x015e, NULL , SKINNY_MSGTYPE_REQUEST , "CallCountReqMessage"},
8235 {0x015f, handle_CallCountRespMessage , SKINNY_MSGTYPE_RESPONSE , "CallCountRespMessage"},
8236 {0x0160, handle_RecordingStatusMessage , SKINNY_MSGTYPE_EVENT , "RecordingStatusMessage"},
8237 {0x8000, handle_SPCPRegisterTokenReq , SKINNY_MSGTYPE_REQUEST , "SPCPRegisterTokenReq"},
8238 {0x8100, handle_SPCPRegisterTokenAck , SKINNY_MSGTYPE_RESPONSE , "SPCPRegisterTokenAck"},
8239 {0x8101, handle_SPCPRegisterTokenReject , SKINNY_MSGTYPE_RESPONSE , "SPCPRegisterTokenReject"},
8242 /* Dissect a single SKINNY PDU */
8243 static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
8245 unsigned offset = 0;
8246 /*bool is_video = false;*/ /* FIX ME: need to indicate video or not */
8247 ptvcursor_t* cursor;
8248 conversation_t *conversation;
8249 skinny_conv_info_t *skinny_conv;
8250 const skinny_opcode_map_t *opcode_entry = NULL;
8252 /* Header fields */
8253 uint32_t hdr_data_length;
8254 uint32_t hdr_version;
8255 uint32_t hdr_opcode;
8256 uint16_t i;
8258 /* Set up structures we will need to add the protocol subtree and manage it */
8259 proto_tree *skinny_tree = NULL;
8260 proto_item *ti = NULL;
8262 /* Initialization */
8263 hdr_data_length = tvb_get_letohl(tvb, 0);
8264 hdr_version = tvb_get_letohl(tvb, 4);
8265 hdr_opcode = tvb_get_letohl(tvb, 8);
8267 for (i = 0; i < array_length(skinny_opcode_map); i++) {
8268 if (skinny_opcode_map[i].opcode == hdr_opcode) {
8269 opcode_entry = &skinny_opcode_map[i];
8273 conversation = find_or_create_conversation(pinfo);
8274 skinny_conv = (skinny_conv_info_t *)conversation_get_proto_data(conversation, proto_skinny);
8275 if (!skinny_conv) {
8276 skinny_conv = wmem_new0(wmem_file_scope(), skinny_conv_info_t);
8277 //skinny_conv->pending_req_resp = wmem_map_new(wmem_file_scope(), wmem_str_hash, g_str_equal);
8278 skinny_conv->pending_req_resp = wmem_map_new(wmem_file_scope(), g_direct_hash, g_direct_equal);
8279 skinny_conv->requests = wmem_map_new(wmem_file_scope(), g_direct_hash, g_direct_equal);
8280 skinny_conv->responses = wmem_map_new(wmem_file_scope(), g_direct_hash, g_direct_equal);
8281 skinny_conv->lineId = -1;
8282 skinny_conv->mtype = SKINNY_MSGTYPE_EVENT;
8283 conversation_add_proto_data(conversation, proto_skinny, skinny_conv);
8286 /* Initialise stat info for passing to tap */
8287 /* WIP: will be (partially) replaced in favor of conversionation, dependents: ui/voip_calls.c */
8288 pi_current++;
8289 if (pi_current == MAX_SKINNY_MESSAGES_IN_PACKET)
8291 /* Overwrite info in first struct if run out of space... */
8292 pi_current = 0;
8294 si = &pi_arr[pi_current];
8295 si->messId = hdr_opcode;
8296 si->messageName = val_to_str_ext(hdr_opcode, &message_id_ext, "0x%08X (Unknown)");
8297 si->callId = 0;
8298 si->lineId = 0;
8299 si->passThroughPartyId = 0;
8300 si->callState = 0;
8301 g_free(si->callingParty);
8302 si->callingParty = NULL;
8303 g_free(si->calledParty);
8304 si->calledParty = NULL;
8305 si->mediaReceptionStatus = -1;
8306 si->mediaTransmissionStatus = -1;
8307 si->multimediaReceptionStatus = -1;
8308 si->multimediaTransmissionStatus = -1;
8309 si->multicastReceptionStatus = -1;
8310 g_free(si->additionalInfo);
8311 si->additionalInfo = NULL;
8313 col_add_fstr(pinfo->cinfo, COL_INFO,"%s ", si->messageName);
8314 col_set_fence(pinfo->cinfo, COL_INFO);
8316 if (tree) {
8317 ti = proto_tree_add_item(tree, proto_skinny, tvb, offset, hdr_data_length+8, ENC_NA);
8318 skinny_tree = proto_item_add_subtree(ti, ett_skinny);
8321 if (opcode_entry && opcode_entry->type != SKINNY_MSGTYPE_EVENT) {
8322 skinny_conv->mtype = opcode_entry->type;
8323 if (opcode_entry->type == SKINNY_MSGTYPE_REQUEST) {
8324 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SKINNY/REQ");
8325 } else {
8326 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SKINNY/RESP");
8330 if (skinny_tree) {
8331 proto_tree_add_uint(skinny_tree, hf_skinny_data_length, tvb, offset , 4, hdr_data_length);
8332 proto_tree_add_uint(skinny_tree, hf_skinny_hdr_version, tvb, offset+4, 4, hdr_version);
8333 proto_tree_add_uint(skinny_tree, hf_skinny_messageId, tvb, offset+8, 4, hdr_opcode );
8335 offset += 12;
8337 cursor = ptvcursor_new(pinfo->pool, skinny_tree, tvb, offset);
8338 if (opcode_entry && opcode_entry->handler) {
8339 opcode_entry->handler(cursor, pinfo, skinny_conv);
8341 ptvcursor_free(cursor);
8343 tap_queue_packet(skinny_tap, pinfo, si);
8345 return tvb_captured_length(tvb);
8348 /* Code to actually dissect the packets */
8349 static int
8350 dissect_skinny(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
8352 /* The general structure of a packet: {IP-Header|TCP-Header|n*SKINNY}
8353 * SKINNY-Packet: {Header(Size, Reserved)|Data(MessageID, Message-Data)}
8355 /* Header fields */
8356 uint32_t hdr_data_length;
8357 uint32_t hdr_version;
8359 /* check, if this is really an SKINNY packet, they start with a length + 0 */
8361 if (tvb_captured_length(tvb) < 8)
8363 return 0;
8365 /* get relevant header information */
8366 hdr_data_length = tvb_get_letohl(tvb, 0);
8367 hdr_version = tvb_get_letohl(tvb, 4);
8369 /* data_size = MIN(8+hdr_data_length, tvb_length(tvb)) - 0xC; */
8371 if (
8372 (hdr_data_length < 4) ||
8373 ((hdr_version != BASIC_MSG_TYPE) &&
8374 (hdr_version != V10_MSG_TYPE) &&
8375 (hdr_version != V11_MSG_TYPE) &&
8376 (hdr_version != V15_MSG_TYPE) &&
8377 (hdr_version != V16_MSG_TYPE) &&
8378 (hdr_version != V17_MSG_TYPE) &&
8379 (hdr_version != V18_MSG_TYPE) &&
8380 (hdr_version != V19_MSG_TYPE) &&
8381 (hdr_version != V20_MSG_TYPE) &&
8382 (hdr_version != V21_MSG_TYPE) &&
8383 (hdr_version != V22_MSG_TYPE))
8386 /* Not an SKINNY packet, just happened to use the same port */
8387 return 0;
8390 /* Make entries in Protocol column and Info column on summary display */
8391 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SKINNY");
8393 col_set_str(pinfo->cinfo, COL_INFO, "Skinny Client Control Protocol");
8395 tcp_dissect_pdus(tvb, pinfo, tree, global_skinny_desegment, 4, get_skinny_pdu_len, dissect_skinny_pdu, data);
8397 return tvb_captured_length(tvb);
8400 /* Register the protocol with Wireshark */
8401 void
8402 proto_register_skinny(void)
8404 /* Setup list of header fields */
8405 static hf_register_info hf[] = {
8406 { &hf_skinny_data_length,
8408 "Data length", "skinny.data_length", FT_UINT32, BASE_DEC, NULL, 0x0,
8409 "Number of bytes in the data portion.", HFILL }},
8410 { &hf_skinny_hdr_version,
8412 "Header version", "skinny.hdr_version", FT_UINT32, BASE_HEX, VALS(header_version), 0x0,
8413 NULL, HFILL }},
8414 { &hf_skinny_messageId,
8416 "Message ID", "skinny.messageId", FT_UINT32, BASE_DEC|BASE_EXT_STRING, &message_id_ext, 0x0,
8417 NULL, HFILL }},
8418 { &hf_skinny_xmlData,
8420 "XML data", "skinny.xmlData", FT_STRING, BASE_NONE, NULL, 0x0,
8421 NULL, HFILL }},
8422 { &hf_skinny_ipv4or6,
8424 "IPv4or6", "skinny.ipv4or6", FT_UINT32, BASE_DEC|BASE_EXT_STRING, &IpAddrType_ext, 0x0,
8425 NULL, HFILL }},
8426 { &hf_skinny_response_in,
8428 "Response In", "skinny.response_in", FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0,
8429 "The response to this SKINNY request is in this frame", HFILL }},
8430 { &hf_skinny_response_to,
8432 "Request In", "skinny.response_to", FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_REQUEST), 0x0,
8433 "This is a response to the SKINNY request in this frame", HFILL }},
8434 { &hf_skinny_response_time,
8436 "Response Time", "skinny.response_time", FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
8437 "The time between the Call and the Reply", HFILL }},
8438 { &hf_skinny_CallingPartyName,
8440 "CallingName", "skinny.CallingPartyName", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000008,
8441 NULL, HFILL }},
8442 { &hf_skinny_CallingPartyNumber,
8444 "CallingNum", "skinny.CallingPartyNumber", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000004,
8445 NULL, HFILL }},
8446 { &hf_skinny_DSCPValue,
8448 "DSCPValue", "skinny.DSCPValue", FT_UINT32, BASE_DEC, NULL, 0x0,
8449 NULL, HFILL }},
8450 { &hf_skinny_FutureUse1,
8452 "FutureUse1", "skinny.FutureUse1", FT_UINT8, BASE_DEC, NULL, 0x0,
8453 NULL, HFILL }},
8454 { &hf_skinny_FutureUse2,
8456 "FutureUse2", "skinny.FutureUse2", FT_UINT8, BASE_DEC, NULL, 0x0,
8457 NULL, HFILL }},
8458 { &hf_skinny_FutureUse3,
8460 "FutureUse3", "skinny.FutureUse3", FT_UINT8, BASE_DEC, NULL, 0x0,
8461 NULL, HFILL }},
8462 { &hf_skinny_Generic_Bitfield_Bit1,
8464 "Bit1", "skinny.Generic.Bitfield.Bit1", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000001,
8465 "H263 Capability BitField", HFILL }},
8466 { &hf_skinny_Generic_Bitfield_Bit10,
8468 "Bit10", "skinny.Generic.Bitfield.Bit10", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000200,
8469 "H263 Capability BitField", HFILL }},
8470 { &hf_skinny_Generic_Bitfield_Bit11,
8472 "Bit11", "skinny.Generic.Bitfield.Bit11", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000400,
8473 "H263 Capability BitField", HFILL }},
8474 { &hf_skinny_Generic_Bitfield_Bit12,
8476 "Bit12", "skinny.Generic.Bitfield.Bit12", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000800,
8477 "H263 Capability BitField", HFILL }},
8478 { &hf_skinny_Generic_Bitfield_Bit13,
8480 "Bit13", "skinny.Generic.Bitfield.Bit13", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00001000,
8481 "H263 Capability BitField", HFILL }},
8482 { &hf_skinny_Generic_Bitfield_Bit14,
8484 "Bit14", "skinny.Generic.Bitfield.Bit14", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00002000,
8485 "H263 Capability BitField", HFILL }},
8486 { &hf_skinny_Generic_Bitfield_Bit15,
8488 "Bit15", "skinny.Generic.Bitfield.Bit15", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00004000,
8489 "H263 Capability BitField", HFILL }},
8490 { &hf_skinny_Generic_Bitfield_Bit16,
8492 "Bit16", "skinny.Generic.Bitfield.Bit16", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00008000,
8493 "H263 Capability BitField", HFILL }},
8494 { &hf_skinny_Generic_Bitfield_Bit17,
8496 "Bit17", "skinny.Generic.Bitfield.Bit17", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00010000,
8497 "H263 Capability BitField", HFILL }},
8498 { &hf_skinny_Generic_Bitfield_Bit18,
8500 "Bit18", "skinny.Generic.Bitfield.Bit18", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00020000,
8501 "H263 Capability BitField", HFILL }},
8502 { &hf_skinny_Generic_Bitfield_Bit19,
8504 "Bit19", "skinny.Generic.Bitfield.Bit19", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00040000,
8505 "H263 Capability BitField", HFILL }},
8506 { &hf_skinny_Generic_Bitfield_Bit2,
8508 "Bit2", "skinny.Generic.Bitfield.Bit2", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000002,
8509 "H263 Capability BitField", HFILL }},
8510 { &hf_skinny_Generic_Bitfield_Bit20,
8512 "Bit20", "skinny.Generic.Bitfield.Bit20", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00080000,
8513 "H263 Capability BitField", HFILL }},
8514 { &hf_skinny_Generic_Bitfield_Bit21,
8516 "Bit21", "skinny.Generic.Bitfield.Bit21", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00100000,
8517 "H263 Capability BitField", HFILL }},
8518 { &hf_skinny_Generic_Bitfield_Bit22,
8520 "Bit22", "skinny.Generic.Bitfield.Bit22", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00200000,
8521 "H263 Capability BitField", HFILL }},
8522 { &hf_skinny_Generic_Bitfield_Bit23,
8524 "Bit23", "skinny.Generic.Bitfield.Bit23", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00400000,
8525 "H263 Capability BitField", HFILL }},
8526 { &hf_skinny_Generic_Bitfield_Bit24,
8528 "Bit24", "skinny.Generic.Bitfield.Bit24", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00800000,
8529 "H263 Capability BitField", HFILL }},
8530 { &hf_skinny_Generic_Bitfield_Bit25,
8532 "Bit25", "skinny.Generic.Bitfield.Bit25", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x01000000,
8533 "H263 Capability BitField", HFILL }},
8534 { &hf_skinny_Generic_Bitfield_Bit26,
8536 "Bit26", "skinny.Generic.Bitfield.Bit26", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x02000000,
8537 "H263 Capability BitField", HFILL }},
8538 { &hf_skinny_Generic_Bitfield_Bit27,
8540 "Bit27", "skinny.Generic.Bitfield.Bit27", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x04000000,
8541 "H263 Capability BitField", HFILL }},
8542 { &hf_skinny_Generic_Bitfield_Bit28,
8544 "Bit28", "skinny.Generic.Bitfield.Bit28", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x08000000,
8545 "H263 Capability BitField", HFILL }},
8546 { &hf_skinny_Generic_Bitfield_Bit29,
8548 "Bit29", "skinny.Generic.Bitfield.Bit29", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x10000000,
8549 "H263 Capability BitField", HFILL }},
8550 { &hf_skinny_Generic_Bitfield_Bit3,
8552 "Bit3", "skinny.Generic.Bitfield.Bit3", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000004,
8553 "H263 Capability BitField", HFILL }},
8554 { &hf_skinny_Generic_Bitfield_Bit30,
8556 "Bit30", "skinny.Generic.Bitfield.Bit30", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x20000000,
8557 "H263 Capability BitField", HFILL }},
8558 { &hf_skinny_Generic_Bitfield_Bit31,
8560 "Bit31", "skinny.Generic.Bitfield.Bit31", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x40000000,
8561 "H263 Capability BitField", HFILL }},
8562 { &hf_skinny_Generic_Bitfield_Bit32,
8564 "Bit32", "skinny.Generic.Bitfield.Bit32", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x80000000,
8565 "H263 Capability BitField", HFILL }},
8566 { &hf_skinny_Generic_Bitfield_Bit4,
8568 "Bit4", "skinny.Generic.Bitfield.Bit4", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000008,
8569 "H263 Capability BitField", HFILL }},
8570 { &hf_skinny_Generic_Bitfield_Bit5,
8572 "Bit5", "skinny.Generic.Bitfield.Bit5", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000010,
8573 "H263 Capability BitField", HFILL }},
8574 { &hf_skinny_Generic_Bitfield_Bit6,
8576 "Bit6", "skinny.Generic.Bitfield.Bit6", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000020,
8577 "H263 Capability BitField", HFILL }},
8578 { &hf_skinny_Generic_Bitfield_Bit7,
8580 "Bit7", "skinny.Generic.Bitfield.Bit7", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000040,
8581 "H263 Capability BitField", HFILL }},
8582 { &hf_skinny_Generic_Bitfield_Bit8,
8584 "Bit8", "skinny.Generic.Bitfield.Bit8", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000080,
8585 "H263 Capability BitField", HFILL }},
8586 { &hf_skinny_Generic_Bitfield_Bit9,
8588 "Bit9", "skinny.Generic.Bitfield.Bit9", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000100,
8589 "H263 Capability BitField", HFILL }},
8590 { &hf_skinny_MPI,
8592 "MPI", "skinny.MPI", FT_UINT32, BASE_DEC, NULL, 0x0,
8593 NULL, HFILL }},
8594 { &hf_skinny_OrigDialed,
8596 "Originally Dialed", "skinny.OrigDialed", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000001,
8597 NULL, HFILL }},
8598 { &hf_skinny_PhoneFeatures_Abbreviated_Dial,
8600 "AbbrevDial", "skinny.PhoneFeatures.Abbreviated.Dial", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x8000,
8601 "Features this device supports", HFILL }},
8602 { &hf_skinny_PhoneFeatures_Bit1,
8604 "Bit1", "skinny.PhoneFeatures.Bit1", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0001,
8605 "Features this device supports", HFILL }},
8606 { &hf_skinny_PhoneFeatures_Bit11,
8608 "Bit11", "skinny.PhoneFeatures.Bit11", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0400,
8609 "Features this device supports", HFILL }},
8610 { &hf_skinny_PhoneFeatures_Bit12,
8612 "Bit12", "skinny.PhoneFeatures.Bit12", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0800,
8613 "Features this device supports", HFILL }},
8614 { &hf_skinny_PhoneFeatures_Bit13,
8616 "Bit13", "skinny.PhoneFeatures.Bit13", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x1000,
8617 "Features this device supports", HFILL }},
8618 { &hf_skinny_PhoneFeatures_Bit14,
8620 "Bit14", "skinny.PhoneFeatures.Bit14", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x2000,
8621 "Features this device supports", HFILL }},
8622 { &hf_skinny_PhoneFeatures_Bit15,
8624 "Bit15", "skinny.PhoneFeatures.Bit15", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x4000,
8625 "Features this device supports", HFILL }},
8626 { &hf_skinny_PhoneFeatures_Bit2,
8628 "Bit2", "skinny.PhoneFeatures.Bit2", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0002,
8629 "Features this device supports", HFILL }},
8630 { &hf_skinny_PhoneFeatures_Bit3,
8632 "Bit3", "skinny.PhoneFeatures.Bit3", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0004,
8633 "Features this device supports", HFILL }},
8634 { &hf_skinny_PhoneFeatures_Bit4,
8636 "Bit4", "skinny.PhoneFeatures.Bit4", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0008,
8637 "Features this device supports", HFILL }},
8638 { &hf_skinny_PhoneFeatures_Bit6,
8640 "Bit6", "skinny.PhoneFeatures.Bit6", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0020,
8641 "Features this device supports", HFILL }},
8642 { &hf_skinny_PhoneFeatures_Bit7,
8644 "Bit7", "skinny.PhoneFeatures.Bit7", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0040,
8645 "Features this device supports", HFILL }},
8646 { &hf_skinny_PhoneFeatures_Bit9,
8648 "Bit9", "skinny.PhoneFeatures.Bit9", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0100,
8649 "Features this device supports", HFILL }},
8650 { &hf_skinny_PhoneFeatures_DynamicMessages,
8652 "DynamicMessages", "skinny.PhoneFeatures.DynamicMessages", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0080,
8653 "Features this device supports", HFILL }},
8654 { &hf_skinny_PhoneFeatures_RFC2833,
8656 "RFC2833", "skinny.PhoneFeatures.RFC2833", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0200,
8657 "Features this device supports", HFILL }},
8658 { &hf_skinny_PhoneFeatures_UTF8,
8660 "UTF8Bit5", "skinny.PhoneFeatures.UTF8", FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0010,
8661 "Features this device supports", HFILL }},
8662 { &hf_skinny_RFC2833PayloadType,
8664 "RFC2833PayloadType", "skinny.RFC2833PayloadType", FT_UINT32, BASE_DEC, NULL, 0x0,
8665 NULL, HFILL }},
8666 { &hf_skinny_RTCPPortNumber,
8668 "RTCPPortNumber", "skinny.RTCPPortNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
8669 NULL, HFILL }},
8670 { &hf_skinny_RedirDialed,
8672 "Redirected Dialed", "skinny.RedirDialed", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000002,
8673 NULL, HFILL }},
8674 { &hf_skinny_RestrictInformationType_BitsReserved,
8676 "BitsReserved", "skinny.RestrictInformationType.BitsReserved", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0xffffff00,
8677 NULL, HFILL }},
8678 { &hf_skinny_RestrictInformationType_CalledParty,
8680 "CalledParty", "skinny.RestrictInformationType.CalledParty", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x0000000c,
8681 NULL, HFILL }},
8682 { &hf_skinny_RestrictInformationType_CalledPartyName,
8684 "CalledPartyName", "skinny.RestrictInformationType.CalledPartyName", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000004,
8685 NULL, HFILL }},
8686 { &hf_skinny_RestrictInformationType_CalledPartyNumber,
8688 "CalledPartyNumber", "skinny.RestrictInformationType.CalledPartyNumber", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000008,
8689 NULL, HFILL }},
8690 { &hf_skinny_RestrictInformationType_CallingParty,
8692 "CallingParty", "skinny.RestrictInformationType.CallingParty", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000003,
8693 NULL, HFILL }},
8694 { &hf_skinny_RestrictInformationType_CallingPartyName,
8696 "CallingPartyName", "skinny.RestrictInformationType.CallingPartyName", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000001,
8697 NULL, HFILL }},
8698 { &hf_skinny_RestrictInformationType_CallingPartyNumber,
8700 "CallingPartyNumber", "skinny.RestrictInformationType.CallingPartyNumber", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000002,
8701 NULL, HFILL }},
8702 { &hf_skinny_RestrictInformationType_LastRedirectParty,
8704 "LastRedirectParty", "skinny.RestrictInformationType.LastRedirectParty", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x000000c0,
8705 NULL, HFILL }},
8706 { &hf_skinny_RestrictInformationType_LastRedirectPartyName,
8708 "LastRedirectPartyName", "skinny.RestrictInformationType.LastRedirectPartyName", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000040,
8709 NULL, HFILL }},
8710 { &hf_skinny_RestrictInformationType_LastRedirectPartyNumber,
8712 "LastRedirectPartyNumber", "skinny.RestrictInformationType.LastRedirectPartyNumber", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000080,
8713 NULL, HFILL }},
8714 { &hf_skinny_RestrictInformationType_OriginalCalledParty,
8716 "OriginalCalledParty", "skinny.RestrictInformationType.OriginalCalledParty", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000030,
8717 NULL, HFILL }},
8718 { &hf_skinny_RestrictInformationType_OriginalCalledPartyName,
8720 "OriginalCalledPartyName", "skinny.RestrictInformationType.OriginalCalledPartyName", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000010,
8721 NULL, HFILL }},
8722 { &hf_skinny_RestrictInformationType_OriginalCalledPartyNumber,
8724 "OriginalCalledPartyNumber", "skinny.RestrictInformationType.OriginalCalledPartyNumber", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000020,
8725 NULL, HFILL }},
8726 { &hf_skinny_SoftKeyMask_SoftKey1,
8728 "SoftKey1", "skinny.SoftKeyMask.SoftKey1", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000001,
8729 NULL, HFILL }},
8730 { &hf_skinny_SoftKeyMask_SoftKey10,
8732 "SoftKey10", "skinny.SoftKeyMask.SoftKey10", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000200,
8733 NULL, HFILL }},
8734 { &hf_skinny_SoftKeyMask_SoftKey11,
8736 "SoftKey11", "skinny.SoftKeyMask.SoftKey11", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000400,
8737 NULL, HFILL }},
8738 { &hf_skinny_SoftKeyMask_SoftKey12,
8740 "SoftKey12", "skinny.SoftKeyMask.SoftKey12", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000800,
8741 NULL, HFILL }},
8742 { &hf_skinny_SoftKeyMask_SoftKey13,
8744 "SoftKey13", "skinny.SoftKeyMask.SoftKey13", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00001000,
8745 NULL, HFILL }},
8746 { &hf_skinny_SoftKeyMask_SoftKey14,
8748 "SoftKey14", "skinny.SoftKeyMask.SoftKey14", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00002000,
8749 NULL, HFILL }},
8750 { &hf_skinny_SoftKeyMask_SoftKey15,
8752 "SoftKey15", "skinny.SoftKeyMask.SoftKey15", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00004000,
8753 NULL, HFILL }},
8754 { &hf_skinny_SoftKeyMask_SoftKey16,
8756 "SoftKey16", "skinny.SoftKeyMask.SoftKey16", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00008000,
8757 NULL, HFILL }},
8758 { &hf_skinny_SoftKeyMask_SoftKey2,
8760 "SoftKey2", "skinny.SoftKeyMask.SoftKey2", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000002,
8761 NULL, HFILL }},
8762 { &hf_skinny_SoftKeyMask_SoftKey3,
8764 "SoftKey3", "skinny.SoftKeyMask.SoftKey3", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000004,
8765 NULL, HFILL }},
8766 { &hf_skinny_SoftKeyMask_SoftKey4,
8768 "SoftKey4", "skinny.SoftKeyMask.SoftKey4", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000008,
8769 NULL, HFILL }},
8770 { &hf_skinny_SoftKeyMask_SoftKey5,
8772 "SoftKey5", "skinny.SoftKeyMask.SoftKey5", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000010,
8773 NULL, HFILL }},
8774 { &hf_skinny_SoftKeyMask_SoftKey6,
8776 "SoftKey6", "skinny.SoftKeyMask.SoftKey6", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000020,
8777 NULL, HFILL }},
8778 { &hf_skinny_SoftKeyMask_SoftKey7,
8780 "SoftKey7", "skinny.SoftKeyMask.SoftKey7", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000040,
8781 NULL, HFILL }},
8782 { &hf_skinny_SoftKeyMask_SoftKey8,
8784 "SoftKey8", "skinny.SoftKeyMask.SoftKey8", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000080,
8785 NULL, HFILL }},
8786 { &hf_skinny_SoftKeyMask_SoftKey9,
8788 "SoftKey9", "skinny.SoftKeyMask.SoftKey9", FT_BOOLEAN, 32, TFS(&tfs_yes_no), 0x00000100,
8789 NULL, HFILL }},
8790 { &hf_skinny_active,
8792 "active", "skinny.active", FT_UINT32, BASE_DEC, NULL, 0x0,
8793 NULL, HFILL }},
8794 { &hf_skinny_activeConferenceOnRegistration,
8796 "Active Conference", "skinny.activeConferenceOnRegistration", FT_UINT32, BASE_DEC, NULL, 0x0,
8797 "Active conference at Registration", HFILL }},
8798 { &hf_skinny_activeConferences,
8800 "Active Conferences", "skinny.activeConferences", FT_UINT32, BASE_DEC, NULL, 0x0,
8801 "Active Conferences at Registration", HFILL }},
8802 { &hf_skinny_activeForward,
8804 "activeForward", "skinny.activeForward", FT_UINT32, BASE_DEC, NULL, 0x0,
8805 NULL, HFILL }},
8806 { &hf_skinny_activeStreams,
8808 "Active RTP Streams", "skinny.activeStreams", FT_UINT32, BASE_DEC, NULL, 0x0,
8809 "Active RTP Streams at Registration", HFILL }},
8810 { &hf_skinny_activeStreamsOnRegistration,
8812 "activeStreamsOnRegistration", "skinny.activeStreamsOnRegistration", FT_UINT32, BASE_DEC, NULL, 0x0,
8813 NULL, HFILL }},
8814 { &hf_skinny_alarmInfo,
8816 "alarmInfo", "skinny.alarmInfo", FT_STRING, BASE_NONE, NULL, 0x0,
8817 NULL, HFILL }},
8818 { &hf_skinny_alignmentPadding,
8820 "alignmentPadding", "skinny.alignmentPadding", FT_UINT16, BASE_DEC, NULL, 0x0,
8821 NULL, HFILL }},
8822 { &hf_skinny_annexNandWFutureUse,
8824 "annexNandWFutureUse", "skinny.annexNandWFutureUse", FT_UINT32, BASE_DEC, NULL, 0x0,
8825 NULL, HFILL }},
8826 { &hf_skinny_appInstanceID,
8828 "appInstanceID", "skinny.appInstanceID", FT_UINT32, BASE_DEC, NULL, 0x0,
8829 NULL, HFILL }},
8830 { &hf_skinny_applicationId,
8832 "applicationId", "skinny.applicationId", FT_UINT32, BASE_DEC, NULL, 0x0,
8833 NULL, HFILL }},
8834 { &hf_skinny_areMessagesWaiting,
8836 "areMessagesWaiting", "skinny.areMessagesWaiting", FT_UINT32, BASE_DEC, NULL, 0x0,
8837 NULL, HFILL }},
8838 { &hf_skinny_associatedStreamId,
8840 "associatedStreamId", "skinny.associatedStreamId", FT_UINT32, BASE_DEC, NULL, 0x0,
8841 NULL, HFILL }},
8842 { &hf_skinny_audioCapCount,
8844 "audioCapCount", "skinny.audioCapCount", FT_UINT32, BASE_DEC, NULL, 0x0,
8845 NULL, HFILL }},
8846 { &hf_skinny_audioLevelAdjustment,
8848 "audioLevelAdjustment", "skinny.audioLevelAdjustment", FT_UINT32, BASE_DEC, NULL, 0x0,
8849 NULL, HFILL }},
8850 { &hf_skinny_averageBitRate,
8852 "averageBitRate", "skinny.averageBitRate", FT_UINT32, BASE_DEC, NULL, 0x0,
8853 NULL, HFILL }},
8854 { &hf_skinny_bandwidth,
8856 "bandwidth", "skinny.bandwidth", FT_UINT32, BASE_DEC, NULL, 0x0,
8857 NULL, HFILL }},
8858 { &hf_skinny_bitRate,
8860 "bitRate", "skinny.bitRate", FT_UINT32, BASE_DEC, NULL, 0x0,
8861 NULL, HFILL }},
8862 { &hf_skinny_burstSize,
8864 "burstSize", "skinny.burstSize", FT_UINT32, BASE_DEC, NULL, 0x0,
8865 NULL, HFILL }},
8866 { &hf_skinny_busyTrigger,
8868 "busyTrigger", "skinny.busyTrigger", FT_UINT16, BASE_DEC, NULL, 0x0,
8869 NULL, HFILL }},
8870 { &hf_skinny_buttonCount,
8872 "buttonCount", "skinny.buttonCount", FT_UINT32, BASE_DEC, NULL, 0x0,
8873 NULL, HFILL }},
8874 { &hf_skinny_buttonOffset,
8876 "buttonOffset", "skinny.buttonOffset", FT_UINT32, BASE_DEC, NULL, 0x0,
8877 NULL, HFILL }},
8878 { &hf_skinny_callInstance,
8880 "callInstance", "skinny.callInstance", FT_UINT32, BASE_DEC, NULL, 0x0,
8881 "CallId", HFILL }},
8882 { &hf_skinny_callReference,
8884 "callReference", "skinny.callReference", FT_UINT32, BASE_DEC, NULL, 0x0,
8885 "CallId", HFILL }},
8886 { &hf_skinny_callSelectStat,
8888 "callSelectStat", "skinny.callSelectStat", FT_UINT32, BASE_DEC, NULL, 0x0,
8889 NULL, HFILL }},
8890 { &hf_skinny_capAndVer,
8892 "capAndVer", "skinny.capAndVer", FT_UINT32, BASE_DEC, NULL, 0x0,
8893 NULL, HFILL }},
8894 { &hf_skinny_capCount,
8896 "capCount", "skinny.capCount", FT_UINT32, BASE_DEC, NULL, 0x0,
8897 NULL, HFILL }},
8898 { &hf_skinny_chan0MaxPayload,
8900 "chan0MaxPayload", "skinny.chan0MaxPayload", FT_UINT16, BASE_DEC, NULL, 0x0,
8901 NULL, HFILL }},
8902 { &hf_skinny_chan2MaxPayload,
8904 "chan2MaxPayload", "skinny.chan2MaxPayload", FT_UINT16, BASE_DEC, NULL, 0x0,
8905 NULL, HFILL }},
8906 { &hf_skinny_chan2MaxWindow,
8908 "chan2MaxWindow", "skinny.chan2MaxWindow", FT_UINT16, BASE_DEC, NULL, 0x0,
8909 NULL, HFILL }},
8910 { &hf_skinny_chan3MaxPayload,
8912 "chan3MaxPayload", "skinny.chan3MaxPayload", FT_UINT16, BASE_DEC, NULL, 0x0,
8913 NULL, HFILL }},
8914 { &hf_skinny_clockConversionCode,
8916 "clockConversionCode", "skinny.clockConversionCode", FT_UINT32, BASE_DEC, NULL, 0x0,
8917 NULL, HFILL }},
8918 { &hf_skinny_clockDivisor,
8920 "clockDivisor", "skinny.clockDivisor", FT_UINT32, BASE_DEC, NULL, 0x0,
8921 NULL, HFILL }},
8922 { &hf_skinny_codecMode,
8924 "codecMode", "skinny.codecMode", FT_UINT8, BASE_DEC, NULL, 0x0,
8925 NULL, HFILL }},
8926 { &hf_skinny_codecParam1,
8928 "codecParam1", "skinny.codecParam1", FT_UINT8, BASE_DEC, NULL, 0x0,
8929 NULL, HFILL }},
8930 { &hf_skinny_codecParam2,
8932 "codecParam2", "skinny.codecParam2", FT_UINT8, BASE_DEC, NULL, 0x0,
8933 NULL, HFILL }},
8934 { &hf_skinny_confServiceNum,
8936 "confServiceNum", "skinny.confServiceNum", FT_UINT32, BASE_DEC, NULL, 0x0,
8937 NULL, HFILL }},
8938 { &hf_skinny_conferenceId,
8940 "conferenceId", "skinny.conferenceId", FT_UINT32, BASE_DEC, NULL, 0x0,
8941 "Conference ID", HFILL }},
8942 { &hf_skinny_confirmRequired,
8944 "confirmRequired", "skinny.confirmRequired", FT_UINT32, BASE_DEC, NULL, 0x0,
8945 NULL, HFILL }},
8946 { &hf_skinny_country,
8948 "country", "skinny.country", FT_UINT32, BASE_DEC, NULL, 0x0,
8949 NULL, HFILL }},
8950 { &hf_skinny_customMaxBRandCPB,
8952 "customMaxBRandCPB", "skinny.customMaxBRandCPB", FT_UINT32, BASE_DEC, NULL, 0x0,
8953 NULL, HFILL }},
8954 { &hf_skinny_customMaxDPB,
8956 "customMaxDPB", "skinny.customMaxDPB", FT_UINT32, BASE_DEC, NULL, 0x0,
8957 NULL, HFILL }},
8958 { &hf_skinny_customMaxFS,
8960 "customMaxFS", "skinny.customMaxFS", FT_UINT32, BASE_DEC, NULL, 0x0,
8961 NULL, HFILL }},
8962 { &hf_skinny_customMaxMBPS,
8964 "customMaxMBPS", "skinny.customMaxMBPS", FT_UINT32, BASE_DEC, NULL, 0x0,
8965 NULL, HFILL }},
8966 { &hf_skinny_customPictureFormatCount,
8968 "customPictureFormatCount", "skinny.customPictureFormatCount", FT_UINT32, BASE_DEC, NULL, 0x0,
8969 NULL, HFILL }},
8970 { &hf_skinny_dataCapCount,
8972 "dataCapCount", "skinny.dataCapCount", FT_UINT32, BASE_DEC, NULL, 0x0,
8973 NULL, HFILL }},
8974 { &hf_skinny_dataLength,
8976 "dataLength", "skinny.dataLength", FT_UINT32, BASE_DEC, NULL, 0x0,
8977 NULL, HFILL }},
8978 { &hf_skinny_dataSize,
8980 "dataSize", "skinny.dataSize", FT_UINT32, BASE_DEC, NULL, 0x0,
8981 "Data Size", HFILL }},
8982 { &hf_skinny_defendingPriority,
8984 "defendingPriority", "skinny.defendingPriority", FT_UINT32, BASE_DEC, NULL, 0x0,
8985 NULL, HFILL }},
8986 { &hf_skinny_displayPriority,
8988 "displayPriority", "skinny.displayPriority", FT_UINT32, BASE_DEC, NULL, 0x0,
8989 NULL, HFILL }},
8990 { &hf_skinny_dtmfType,
8992 "dtmfType", "skinny.dtmfType", FT_UINT32, BASE_DEC, NULL, 0x0,
8993 NULL, HFILL }},
8994 { &hf_skinny_dynamicPayload,
8996 "dynamicPayload", "skinny.dynamicPayload", FT_UINT8, BASE_DEC, NULL, 0x0,
8997 NULL, HFILL }},
8998 { &hf_skinny_failureNodeIpAddr,
9000 "failureNodeIpAddr", "skinny.failureNodeIpAddr", FT_UINT32, BASE_DEC, NULL, 0x0,
9001 NULL, HFILL }},
9002 { &hf_skinny_featureCapabilities,
9004 "featureCapabilities", "skinny.featureCapabilities", FT_UINT32, BASE_DEC, NULL, 0x0,
9005 NULL, HFILL }},
9006 { &hf_skinny_featureIndex,
9008 "featureIndex", "skinny.featureIndex", FT_UINT32, BASE_DEC, NULL, 0x0,
9009 NULL, HFILL }},
9010 { &hf_skinny_featureStatus,
9012 "featureStatus", "skinny.featureStatus", FT_UINT32, BASE_DEC, NULL, 0x0,
9013 NULL, HFILL }},
9014 { &hf_skinny_features,
9016 "features", "skinny.features", FT_UINT32, BASE_DEC, NULL, 0x0,
9017 NULL, HFILL }},
9018 { &hf_skinny_firstGOB,
9020 "firstGOB", "skinny.firstGOB", FT_UINT32, BASE_DEC, NULL, 0x0,
9021 NULL, HFILL }},
9022 { &hf_skinny_firstMB,
9024 "firstMB", "skinny.firstMB", FT_UINT32, BASE_DEC, NULL, 0x0,
9025 NULL, HFILL }},
9026 { &hf_skinny_format,
9028 "format", "skinny.format", FT_UINT32, BASE_DEC, NULL, 0x0,
9029 NULL, HFILL }},
9030 { &hf_skinny_forwardAllActive,
9032 "forwardAllActive", "skinny.forwardAllActive", FT_UINT32, BASE_DEC, NULL, 0x0,
9033 NULL, HFILL }},
9034 { &hf_skinny_forwardBusyActive,
9036 "forwardBusyActive", "skinny.forwardBusyActive", FT_UINT32, BASE_DEC, NULL, 0x0,
9037 NULL, HFILL }},
9038 { &hf_skinny_forwardNoAnswerActive,
9040 "forwardNoAnswerActive", "skinny.forwardNoAnswerActive", FT_UINT32, BASE_DEC, NULL, 0x0,
9041 NULL, HFILL }},
9042 { &hf_skinny_hearingConfPartyMask,
9044 "hearingConfPartyMask", "skinny.hearingConfPartyMask", FT_UINT32, BASE_DEC, NULL, 0x0,
9045 NULL, HFILL }},
9046 { &hf_skinny_instance,
9048 "instance", "skinny.instance", FT_UINT32, BASE_DEC, NULL, 0x0,
9049 "Device Instance", HFILL }},
9050 { &hf_skinny_instanceNumber,
9052 "instanceNumber", "skinny.instanceNumber", FT_UINT8, BASE_DEC, NULL, 0x0,
9053 NULL, HFILL }},
9054 { &hf_skinny_ipAddr_ipv4,
9056 "ipAddr IPv4 Address", "skinny.ipAddr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
9057 NULL, HFILL }},
9058 { &hf_skinny_ipAddr_ipv6,
9060 "ipAddr IPv6 Address", "skinny.ipAddr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
9061 NULL, HFILL }},
9062 { &hf_skinny_ipV4AddressScope,
9064 "ipV4AddressScope", "skinny.ipV4AddressScope", FT_UINT32, BASE_DEC, NULL, 0x0,
9065 "IPv4 Address Scope", HFILL }},
9066 { &hf_skinny_ipV6AddressScope,
9068 "ipV6AddressScope", "skinny.ipV6AddressScope", FT_UINT32, BASE_DEC, NULL, 0x0,
9069 "IPv6 Address Scope", HFILL }},
9070 { &hf_skinny_isConferenceCreator,
9072 "isConferenceCreator", "skinny.isConferenceCreator", FT_UINT32, BASE_DEC, NULL, 0x0,
9073 NULL, HFILL }},
9074 { &hf_skinny_isMKIPresent,
9076 "isMKIPresent", "skinny.isMKIPresent", FT_UINT32, BASE_DEC, NULL, 0x0,
9077 NULL, HFILL }},
9078 { &hf_skinny_jitter,
9080 "jitter", "skinny.jitter", FT_UINT32, BASE_DEC, NULL, 0x0,
9081 "Amount of Jitter", HFILL }},
9082 { &hf_skinny_keepAliveInterval,
9084 "keepAliveInterval", "skinny.keepAliveInterval", FT_UINT32, BASE_DEC, NULL, 0x0,
9085 NULL, HFILL }},
9086 { &hf_skinny_key,
9088 "key", "skinny.key", FT_UINT8, BASE_DEC, NULL, 0x0,
9089 NULL, HFILL }},
9090 { &hf_skinny_keyDerivationRate,
9092 "keyDerivationRate", "skinny.keyDerivationRate", FT_UINT32, BASE_DEC, NULL, 0x0,
9093 NULL, HFILL }},
9094 { &hf_skinny_keylen,
9096 "keylen", "skinny.keylen", FT_UINT16, BASE_DEC, NULL, 0x0,
9097 NULL, HFILL }},
9098 { &hf_skinny_last,
9100 "last", "skinny.last", FT_UINT32, BASE_DEC, NULL, 0x0,
9101 NULL, HFILL }},
9102 { &hf_skinny_lastRedirectingReason,
9104 "lastRedirectingReason", "skinny.lastRedirectingReason", FT_UINT32, BASE_DEC, NULL, 0x0,
9105 "Last Redirecting Reason", HFILL }},
9106 { &hf_skinny_latency,
9108 "latency", "skinny.latency", FT_UINT32, BASE_DEC, NULL, 0x0,
9109 "Amount of Latency", HFILL }},
9110 { &hf_skinny_layoutCount,
9112 "layoutCount", "skinny.layoutCount", FT_UINT32, BASE_DEC, NULL, 0x0,
9113 NULL, HFILL }},
9114 { &hf_skinny_layoutID,
9116 "layoutID", "skinny.layoutID", FT_UINT32, BASE_DEC, NULL, 0x0,
9117 NULL, HFILL }},
9118 { &hf_skinny_level,
9120 "level", "skinny.level", FT_UINT32, BASE_DEC, NULL, 0x0,
9121 NULL, HFILL }},
9122 { &hf_skinny_levelPreferenceCount,
9124 "levelPreferenceCount", "skinny.levelPreferenceCount", FT_UINT32, BASE_DEC, NULL, 0x0,
9125 NULL, HFILL }},
9126 { &hf_skinny_lineDataEntries,
9128 "lineDataEntries", "skinny.lineDataEntries", FT_UINT32, BASE_DEC, NULL, 0x0,
9129 "Number of Line Data Entries", HFILL }},
9130 { &hf_skinny_lineDisplayOptions,
9132 "lineDisplayOptions", "skinny.lineDisplayOptions", FT_UINT32, BASE_DEC, NULL, 0x0,
9133 NULL, HFILL }},
9134 { &hf_skinny_lineInstance,
9136 "lineInstance", "skinny.lineInstance", FT_UINT32, BASE_DEC, NULL, 0x0,
9137 "LineId", HFILL }},
9138 { &hf_skinny_lineNumber,
9140 "lineNumber", "skinny.lineNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
9141 NULL, HFILL }},
9142 { &hf_skinny_locale,
9144 "locale", "skinny.locale", FT_UINT32, BASE_DEC, NULL, 0x0,
9145 NULL, HFILL }},
9146 { &hf_skinny_longTermPictureIndex,
9148 "longTermPictureIndex", "skinny.longTermPictureIndex", FT_UINT32, BASE_DEC, NULL, 0x0,
9149 NULL, HFILL }},
9150 { &hf_skinny_macAddress,
9152 "Mac Address", "skinny.macAddress", FT_ETHER, BASE_NONE, NULL, 0x0,
9153 "Ethernet/Mac Address", HFILL }},
9154 { &hf_skinny_matrixConfPartyID,
9156 "matrixConfPartyID", "skinny.matrixConfPartyID", FT_UINT32, BASE_DEC, NULL, 0x0,
9157 NULL, HFILL }},
9158 { &hf_skinny_maxBW,
9160 "maxBW", "skinny.maxBW", FT_UINT32, BASE_DEC, NULL, 0x0,
9161 NULL, HFILL }},
9162 { &hf_skinny_maxBitRate,
9164 "maxBitRate", "skinny.maxBitRate", FT_UINT32, BASE_DEC, NULL, 0x0,
9165 NULL, HFILL }},
9166 { &hf_skinny_maxConferences,
9168 "Maximum Number of Concurrent Conferences", "skinny.maxConferences", FT_UINT32, BASE_DEC, NULL, 0x0,
9169 "Indicates the maximum number of simultaneous Conferences, which this client/appliance can handle", HFILL }},
9170 { &hf_skinny_maxFramesPerPacket,
9172 "maxFramesPerPacket", "skinny.maxFramesPerPacket", FT_UINT32, BASE_DEC, NULL, 0x0,
9173 NULL, HFILL }},
9174 { &hf_skinny_maxNumCalls,
9176 "maxNumCalls", "skinny.maxNumCalls", FT_UINT16, BASE_DEC, NULL, 0x0,
9177 NULL, HFILL }},
9178 { &hf_skinny_maxNumOfAvailLines,
9180 "maxNumOfAvailLines", "skinny.maxNumOfAvailLines", FT_UINT32, BASE_DEC, NULL, 0x0,
9181 NULL, HFILL }},
9182 { &hf_skinny_maxNumberOfLines,
9184 "maxNumberOfLines", "skinny.maxNumberOfLines", FT_UINT32, BASE_DEC, NULL, 0x0,
9185 "Maximum number of lines", HFILL }},
9186 { &hf_skinny_maxProtocolVer,
9188 "maxProtocolVer", "skinny.maxProtocolVer", FT_UINT8, BASE_DEC, NULL, 0x0,
9189 NULL, HFILL }},
9190 { &hf_skinny_maxRetryNumber,
9192 "maxRetryNumber", "skinny.maxRetryNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
9193 NULL, HFILL }},
9194 { &hf_skinny_maxStreams,
9196 "Maximum Number of Concurrent RTP Streams", "skinny.maxStreams", FT_UINT32, BASE_DEC, NULL, 0x0,
9197 "Indicates the maximum number of simultaneous RTP duplex streams, which this client/appliance can handle.", HFILL }},
9198 { &hf_skinny_maxStreamsPerConf,
9200 "maxStreamsPerConf", "skinny.maxStreamsPerConf", FT_UINT32, BASE_DEC, NULL, 0x0,
9201 NULL, HFILL }},
9202 { &hf_skinny_maximumBitRate,
9204 "maximumBitRate", "skinny.maximumBitRate", FT_UINT32, BASE_DEC, NULL, 0x0,
9205 NULL, HFILL }},
9206 { &hf_skinny_milliSecondPacketSize,
9208 "milliSecondPacketSize", "skinny.milliSecondPacketSize", FT_UINT32, BASE_DEC, NULL, 0x0,
9209 NULL, HFILL }},
9210 { &hf_skinny_minBitRate,
9212 "minBitRate", "skinny.minBitRate", FT_UINT32, BASE_DEC, NULL, 0x0,
9213 NULL, HFILL }},
9214 { &hf_skinny_mixingMode,
9216 "mixingMode", "skinny.mixingMode", FT_UINT32, BASE_DEC, NULL, 0x0,
9217 NULL, HFILL }},
9218 { &hf_skinny_modAnd2833,
9220 "modAnd2833", "skinny.modAnd2833", FT_UINT32, BASE_DEC, NULL, 0x0,
9221 NULL, HFILL }},
9222 { &hf_skinny_modelNumber,
9224 "modelNumber", "skinny.modelNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
9225 NULL, HFILL }},
9226 { &hf_skinny_multicastIpAddr_ipv4,
9228 "multicastIpAddr IPv4 Address", "skinny.multicastIpAddr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
9229 "ipaddress in big endian", HFILL }},
9230 { &hf_skinny_multicastIpAddr_ipv6,
9232 "multicastIpAddr IPv6 Address", "skinny.multicastIpAddr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
9233 "ipaddress in big endian", HFILL }},
9234 { &hf_skinny_multicastPortNumber,
9236 "multicastPortNumber", "skinny.multicastPortNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
9237 NULL, HFILL }},
9238 { &hf_skinny_noaudio,
9240 "noaudio", "skinny.noaudio", FT_UINT8, BASE_DEC, NULL, 0x0,
9241 NULL, HFILL }},
9242 { &hf_skinny_none,
9244 "none", "skinny.none", FT_UINT32, BASE_DEC, NULL, 0x0,
9245 NULL, HFILL }},
9246 { &hf_skinny_notificationStatus,
9248 "notificationStatus", "skinny.notificationStatus", FT_UINT32, BASE_DEC, NULL, 0x0,
9249 NULL, HFILL }},
9250 { &hf_skinny_nse,
9252 "nse", "skinny.nse", FT_UINT8, BASE_DEC, NULL, 0x0,
9253 NULL, HFILL }},
9254 { &hf_skinny_numNewMsgs,
9256 "numNewMsgs", "skinny.numNewMsgs", FT_UINT32, BASE_DEC, NULL, 0x0,
9257 NULL, HFILL }},
9258 { &hf_skinny_numOldMsgs,
9260 "numOldMsgs", "skinny.numOldMsgs", FT_UINT32, BASE_DEC, NULL, 0x0,
9261 NULL, HFILL }},
9262 { &hf_skinny_numberOctetsReceived,
9264 "numberOctetsReceived", "skinny.numberOctetsReceived", FT_UINT32, BASE_DEC, NULL, 0x0,
9265 "Number of Octets Received", HFILL }},
9266 { &hf_skinny_numberOctetsSent,
9268 "numberOctetsSent", "skinny.numberOctetsSent", FT_UINT32, BASE_DEC, NULL, 0x0,
9269 "Number of Octets Sent", HFILL }},
9270 { &hf_skinny_numberOfActiveParticipants,
9272 "numberOfActiveParticipants", "skinny.numberOfActiveParticipants", FT_UINT32, BASE_DEC, NULL, 0x0,
9273 NULL, HFILL }},
9274 { &hf_skinny_numberOfEntries,
9276 "numberOfEntries", "skinny.numberOfEntries", FT_UINT32, BASE_DEC, NULL, 0x0,
9277 NULL, HFILL }},
9278 { &hf_skinny_numberOfGOBs,
9280 "numberOfGOBs", "skinny.numberOfGOBs", FT_UINT32, BASE_DEC, NULL, 0x0,
9281 NULL, HFILL }},
9282 { &hf_skinny_numberOfInServiceStreams,
9284 "numberOfInServiceStreams", "skinny.numberOfInServiceStreams", FT_UINT32, BASE_DEC, NULL, 0x0,
9285 NULL, HFILL }},
9286 { &hf_skinny_numberOfLines,
9288 "numberOfLines", "skinny.numberOfLines", FT_UINT32, BASE_DEC, NULL, 0x0,
9289 NULL, HFILL }},
9290 { &hf_skinny_numberOfMBs,
9292 "numberOfMBs", "skinny.numberOfMBs", FT_UINT32, BASE_DEC, NULL, 0x0,
9293 NULL, HFILL }},
9294 { &hf_skinny_numberOfOutOfServiceStreams,
9296 "numberOfOutOfServiceStreams", "skinny.numberOfOutOfServiceStreams", FT_UINT32, BASE_DEC, NULL, 0x0,
9297 NULL, HFILL }},
9298 { &hf_skinny_numberOfReservedParticipants,
9300 "numberOfReservedParticipants", "skinny.numberOfReservedParticipants", FT_UINT32, BASE_DEC, NULL, 0x0,
9301 NULL, HFILL }},
9302 { &hf_skinny_numberOfSpeedDials,
9304 "numberOfSpeedDials", "skinny.numberOfSpeedDials", FT_UINT32, BASE_DEC, NULL, 0x0,
9305 NULL, HFILL }},
9306 { &hf_skinny_numberPacketsLost,
9308 "numberPacketsLost", "skinny.numberPacketsLost", FT_UINT32, BASE_DEC, NULL, 0x0,
9309 "Number of Packets Lost", HFILL }},
9310 { &hf_skinny_numberPacketsReceived,
9312 "numberPacketsReceived", "skinny.numberPacketsReceived", FT_UINT32, BASE_DEC, NULL, 0x0,
9313 "Number of Packets Received", HFILL }},
9314 { &hf_skinny_numberPacketsSent,
9316 "numberPacketsSent", "skinny.numberPacketsSent", FT_UINT32, BASE_DEC, NULL, 0x0,
9317 "Number of Packets Sent", HFILL }},
9318 { &hf_skinny_originalCdpnRedirectReason,
9320 "originalCdpnRedirectReason", "skinny.originalCdpnRedirectReason", FT_UINT32, BASE_DEC, NULL, 0x0,
9321 "Original Called Party Redirect Reason", HFILL }},
9322 { &hf_skinny_padding,
9324 "padding", "skinny.padding", FT_UINT16, BASE_DEC, NULL, 0x0,
9325 "Unused/Padding", HFILL }},
9326 { &hf_skinny_parm1,
9328 "parm1", "skinny.parm1", FT_UINT32, BASE_DEC, NULL, 0x0,
9329 NULL, HFILL }},
9330 { &hf_skinny_parm2,
9332 "parm2", "skinny.parm2", FT_UINT32, BASE_DEC, NULL, 0x0,
9333 NULL, HFILL }},
9334 { &hf_skinny_participantEntry,
9336 "participantEntry", "skinny.participantEntry", FT_UINT32, BASE_DEC, NULL, 0x0,
9337 NULL, HFILL }},
9338 { &hf_skinny_partyDirection,
9340 "partyDirection", "skinny.partyDirection", FT_UINT32, BASE_DEC, NULL, 0x0,
9341 NULL, HFILL }},
9342 { &hf_skinny_passThroughPartyId,
9344 "passThroughPartyId", "skinny.passThroughPartyId", FT_UINT32, BASE_DEC, NULL, 0x0,
9345 "PassThrough PartyId", HFILL }},
9346 { &hf_skinny_passthruPartyID,
9348 "passthruPartyID", "skinny.passthruPartyID", FT_UINT32, BASE_DEC, NULL, 0x0,
9349 NULL, HFILL }},
9350 { &hf_skinny_payloadDtmf,
9352 "payloadDtmf", "skinny.payloadDtmf", FT_UINT32, BASE_DEC, NULL, 0x0,
9353 NULL, HFILL }},
9354 { &hf_skinny_payloadType,
9356 "payloadType", "skinny.payloadType", FT_UINT32, BASE_DEC, NULL, 0x0,
9357 NULL, HFILL }},
9358 { &hf_skinny_payload_rfc_number,
9360 "payload_rfc_number", "skinny.payload.rfc.number", FT_UINT32, BASE_DEC, NULL, 0x0,
9361 NULL, HFILL }},
9362 { &hf_skinny_peakRate,
9364 "peakRate", "skinny.peakRate", FT_UINT32, BASE_DEC, NULL, 0x0,
9365 NULL, HFILL }},
9366 { &hf_skinny_pictureFormatCount,
9368 "pictureFormatCount", "skinny.pictureFormatCount", FT_UINT32, BASE_DEC, NULL, 0x0,
9369 NULL, HFILL }},
9370 { &hf_skinny_pictureHeight,
9372 "pictureHeight", "skinny.pictureHeight", FT_UINT32, BASE_DEC, NULL, 0x0,
9373 NULL, HFILL }},
9374 { &hf_skinny_pictureNumber,
9376 "pictureNumber", "skinny.pictureNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
9377 NULL, HFILL }},
9378 { &hf_skinny_pictureWidth,
9380 "pictureWidth", "skinny.pictureWidth", FT_UINT32, BASE_DEC, NULL, 0x0,
9381 NULL, HFILL }},
9382 { &hf_skinny_pixelAspectRatio,
9384 "pixelAspectRatio", "skinny.pixelAspectRatio", FT_UINT32, BASE_DEC, NULL, 0x0,
9385 NULL, HFILL }},
9386 { &hf_skinny_portNumber,
9388 "portNumber", "skinny.portNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
9389 NULL, HFILL }},
9390 { &hf_skinny_precedenceDomain,
9392 "precedenceDomain", "skinny.precedenceDomain", FT_UINT32, BASE_DEC, NULL, 0x0,
9393 "Precedence Domain", HFILL }},
9394 { &hf_skinny_precedenceLevel,
9396 "precedenceLevel", "skinny.precedenceLevel", FT_UINT32, BASE_DEC, NULL, 0x0,
9397 "Precedence Level, MLPP priorities", HFILL }},
9398 { &hf_skinny_precedenceValue,
9400 "precedenceValue", "skinny.precedenceValue", FT_UINT32, BASE_DEC, NULL, 0x0,
9401 NULL, HFILL }},
9402 { &hf_skinny_preemptionPriority,
9404 "preemptionPriority", "skinny.preemptionPriority", FT_UINT32, BASE_DEC, NULL, 0x0,
9405 NULL, HFILL }},
9406 { &hf_skinny_priority,
9408 "priority", "skinny.priority", FT_UINT32, BASE_DEC, NULL, 0x0,
9409 NULL, HFILL }},
9410 { &hf_skinny_profile,
9412 "profile", "skinny.profile", FT_UINT32, BASE_DEC, NULL, 0x0,
9413 NULL, HFILL }},
9414 { &hf_skinny_protocolDependentData,
9416 "protocolDependentData", "skinny.protocolDependentData", FT_UINT32, BASE_DEC, NULL, 0x0,
9417 NULL, HFILL }},
9418 { &hf_skinny_protocolVer,
9420 "Protocol Version", "skinny.protocolVer", FT_UINT8, BASE_DEC, NULL, 0x0,
9421 "Maximum Supported Protocol Version", HFILL }},
9422 { &hf_skinny_recoveryReferencePictureCount,
9424 "recoveryReferencePictureCount", "skinny.recoveryReferencePictureCount", FT_UINT32, BASE_DEC, NULL, 0x0,
9425 NULL, HFILL }},
9426 { &hf_skinny_remoteIpAddr_ipv4,
9428 "remoteIpAddr IPv4 Address", "skinny.remoteIpAddr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
9429 "ipaddress in big endian", HFILL }},
9430 { &hf_skinny_remoteIpAddr_ipv6,
9432 "remoteIpAddr IPv6 Address", "skinny.remoteIpAddr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
9433 "ipaddress in big endian", HFILL }},
9434 { &hf_skinny_remotePortNumber,
9436 "remotePortNumber", "skinny.remotePortNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
9437 NULL, HFILL }},
9438 { &hf_skinny_reserved_for_future_use,
9440 "reserved_for_future_use", "skinny.reserved.for.future.use", FT_UINT32, BASE_DEC, NULL, 0x0,
9441 "User Id", HFILL }},
9442 { &hf_skinny_retryTimer,
9444 "retryTimer", "skinny.retryTimer", FT_UINT32, BASE_DEC, NULL, 0x0,
9445 NULL, HFILL }},
9446 { &hf_skinny_rfc2833,
9448 "rfc2833", "skinny.rfc2833", FT_UINT8, BASE_DEC, NULL, 0x0,
9449 NULL, HFILL }},
9450 { &hf_skinny_routingID,
9452 "routingID", "skinny.routingID", FT_UINT32, BASE_DEC, NULL, 0x0,
9453 NULL, HFILL }},
9454 { &hf_skinny_rsvpErrorFlag,
9456 "rsvpErrorFlag", "skinny.rsvpErrorFlag", FT_UINT32, BASE_DEC, NULL, 0x0,
9457 NULL, HFILL }},
9458 { &hf_skinny_rsvpErrorSubCodeVal,
9460 "rsvpErrorSubCodeVal", "skinny.rsvpErrorSubCodeVal", FT_UINT32, BASE_DEC, NULL, 0x0,
9461 NULL, HFILL }},
9462 { &hf_skinny_rtpMediaPort,
9464 "rtpMediaPort", "skinny.rtpMediaPort", FT_UINT32, BASE_DEC, NULL, 0x0,
9465 "RTP Media Port", HFILL }},
9466 { &hf_skinny_rtpPayloadFormat,
9468 "rtpPayloadFormat", "skinny.rtpPayloadFormat", FT_UINT32, BASE_DEC, NULL, 0x0,
9469 NULL, HFILL }},
9470 { &hf_skinny_salt,
9472 "salt", "skinny.salt", FT_UINT8, BASE_DEC, NULL, 0x0,
9473 NULL, HFILL }},
9474 { &hf_skinny_saltlen,
9476 "saltlen", "skinny.saltlen", FT_UINT16, BASE_DEC, NULL, 0x0,
9477 NULL, HFILL }},
9478 { &hf_skinny_secondaryKeepAliveInterval,
9480 "secondaryKeepAliveInterval", "skinny.secondaryKeepAliveInterval", FT_UINT32, BASE_DEC, NULL, 0x0,
9481 NULL, HFILL }},
9482 { &hf_skinny_serverTcpListenPort,
9484 "serverTcpListenPort", "skinny.serverTcpListenPort", FT_UINT32, BASE_DEC, NULL, 0x0,
9485 NULL, HFILL }},
9486 { &hf_skinny_serviceNum,
9488 "serviceNum", "skinny.serviceNum", FT_UINT32, BASE_DEC, NULL, 0x0,
9489 NULL, HFILL }},
9490 { &hf_skinny_serviceNumber,
9492 "serviceNumber", "skinny.serviceNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
9493 NULL, HFILL }},
9494 { &hf_skinny_serviceResourceCount,
9496 "serviceResourceCount", "skinny.serviceResourceCount", FT_UINT32, BASE_DEC, NULL, 0x0,
9497 NULL, HFILL }},
9498 { &hf_skinny_serviceURLIndex,
9500 "serviceURLIndex", "skinny.serviceURLIndex", FT_UINT32, BASE_DEC, NULL, 0x0,
9501 NULL, HFILL }},
9502 { &hf_skinny_softKeyCount,
9504 "softKeyCount", "skinny.softKeyCount", FT_UINT32, BASE_DEC, NULL, 0x0,
9505 NULL, HFILL }},
9506 { &hf_skinny_softKeyOffset,
9508 "softKeyOffset", "skinny.softKeyOffset", FT_UINT32, BASE_DEC, NULL, 0x0,
9509 NULL, HFILL }},
9510 { &hf_skinny_softKeySetCount,
9512 "softKeySetCount", "skinny.softKeySetCount", FT_UINT32, BASE_DEC, NULL, 0x0,
9513 NULL, HFILL }},
9514 { &hf_skinny_softKeySetOffset,
9516 "softKeySetOffset", "skinny.softKeySetOffset", FT_UINT32, BASE_DEC, NULL, 0x0,
9517 NULL, HFILL }},
9518 { &hf_skinny_sourceIpAddr_ipv4,
9520 "sourceIpAddr IPv4 Address", "skinny.sourceIpAddr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
9521 NULL, HFILL }},
9522 { &hf_skinny_sourceIpAddr_ipv6,
9524 "sourceIpAddr IPv6 Address", "skinny.sourceIpAddr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
9525 NULL, HFILL }},
9526 { &hf_skinny_sourcePortNumber,
9528 "sourcePortNumber", "skinny.sourcePortNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
9529 NULL, HFILL }},
9530 { &hf_skinny_speedDialNumber,
9532 "speedDialNumber", "skinny.speedDialNumber", FT_UINT32, BASE_DEC, NULL, 0x0,
9533 NULL, HFILL }},
9534 { &hf_skinny_sse,
9536 "sse", "skinny.sse", FT_UINT8, BASE_DEC, NULL, 0x0,
9537 NULL, HFILL }},
9538 { &hf_skinny_standard,
9540 "standard", "skinny.standard", FT_UINT32, BASE_DEC, NULL, 0x0,
9541 NULL, HFILL }},
9542 { &hf_skinny_startingLineInstance,
9544 "startingLineInstance", "skinny.startingLineInstance", FT_UINT32, BASE_DEC, NULL, 0x0,
9545 "Starting Line Instance", HFILL }},
9546 { &hf_skinny_stationIpAddr,
9548 "stationIpAddr", "skinny.stationIpAddr", FT_IPv4, BASE_NONE, NULL, 0x0,
9549 "IPv4 Address", HFILL }},
9550 { &hf_skinny_stationIpAddr_ipv4,
9552 "stationIpAddr IPv4 Address", "skinny.stationIpAddr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
9553 "ipaddress in big endian", HFILL }},
9554 { &hf_skinny_stationIpAddr_ipv6,
9556 "stationIpAddr IPv6 Address", "skinny.stationIpAddr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
9557 "ipaddress in big endian", HFILL }},
9558 { &hf_skinny_stationIpV6Addr,
9560 "stationIpV6Addr", "skinny.stationIpV6Addr", FT_IPv6, BASE_NONE, NULL, 0x0,
9561 "IPv6 Address", HFILL }},
9562 { &hf_skinny_stationIpV6Addr_ipv4,
9564 "stationIpV6Addr IPv4 Address", "skinny.stationIpV6Addr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
9565 NULL, HFILL }},
9566 { &hf_skinny_stationIpV6Addr_ipv6,
9568 "stationIpV6Addr IPv6 Address", "skinny.stationIpV6Addr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
9569 NULL, HFILL }},
9570 { &hf_skinny_stillImageTransmission,
9572 "stillImageTransmission", "skinny.stillImageTransmission", FT_UINT32, BASE_DEC, NULL, 0x0,
9573 "Still Image Transmission", HFILL }},
9574 { &hf_skinny_stimulusInstance,
9576 "stimulusInstance", "skinny.stimulusInstance", FT_UINT32, BASE_DEC, NULL, 0x0,
9577 NULL, HFILL }},
9578 { &hf_skinny_stimulusStatus,
9580 "stimulusStatus", "skinny.stimulusStatus", FT_UINT32, BASE_DEC, NULL, 0x0,
9581 "Stimulus Status", HFILL }},
9582 { &hf_skinny_streamPassThroughId,
9584 "streamPassThroughId", "skinny.streamPassThroughId", FT_UINT32, BASE_DEC, NULL, 0x0,
9585 NULL, HFILL }},
9586 { &hf_skinny_systemTime,
9588 "systemTime", "skinny.systemTime", FT_UINT32, BASE_DEC, NULL, 0x0,
9589 NULL, HFILL }},
9590 { &hf_skinny_temporalSpatialTradeOff,
9592 "temporalSpatialTradeOff", "skinny.temporalSpatialTradeOff", FT_UINT32, BASE_DEC, NULL, 0x0,
9593 NULL, HFILL }},
9594 { &hf_skinny_temporalSpatialTradeOffCapability,
9596 "temporalSpatialTradeOffCapability", "skinny.temporalSpatialTradeOffCapability", FT_UINT32, BASE_DEC, NULL, 0x0,
9597 "Temporal spatial trade off capability", HFILL }},
9598 { &hf_skinny_timeOutValue,
9600 "timeOutValue", "skinny.timeOutValue", FT_UINT32, BASE_DEC, NULL, 0x0,
9601 NULL, HFILL }},
9602 { &hf_skinny_timer,
9604 "timer", "skinny.timer", FT_UINT32, BASE_DEC, NULL, 0x0,
9605 NULL, HFILL }},
9606 { &hf_skinny_totalButtonCount,
9608 "totalButtonCount", "skinny.totalButtonCount", FT_UINT32, BASE_DEC, NULL, 0x0,
9609 NULL, HFILL }},
9610 { &hf_skinny_totalNumOfConfiguredLines,
9612 "totalNumOfConfiguredLines", "skinny.totalNumOfConfiguredLines", FT_UINT32, BASE_DEC, NULL, 0x0,
9613 "Total Number of Configured Lines", HFILL }},
9614 { &hf_skinny_totalSoftKeyCount,
9616 "totalSoftKeyCount", "skinny.totalSoftKeyCount", FT_UINT32, BASE_DEC, NULL, 0x0,
9617 NULL, HFILL }},
9618 { &hf_skinny_totalSoftKeySetCount,
9620 "totalSoftKeySetCount", "skinny.totalSoftKeySetCount", FT_UINT32, BASE_DEC, NULL, 0x0,
9621 NULL, HFILL }},
9622 { &hf_skinny_transactionId,
9624 "transactionId", "skinny.transactionId", FT_UINT32, BASE_DEC, NULL, 0x0,
9625 NULL, HFILL }},
9626 { &hf_skinny_transmitIpAddr_ipv4,
9628 "transmitIpAddr IPv4 Address", "skinny.transmitIpAddr.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0,
9629 "ipaddress in big endian", HFILL }},
9630 { &hf_skinny_transmitIpAddr_ipv6,
9632 "transmitIpAddr IPv6 Address", "skinny.transmitIpAddr.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0,
9633 "ipaddress in big endian", HFILL }},
9634 { &hf_skinny_transmitPreference,
9636 "transmitPreference", "skinny.transmitPreference", FT_UINT32, BASE_DEC, NULL, 0x0,
9637 NULL, HFILL }},
9638 { &hf_skinny_unknown,
9640 "unknown", "skinny.unknown", FT_UINT8, BASE_DEC, NULL, 0x0,
9641 "unknown (Part of ProtocolVer)", HFILL }},
9642 { &hf_skinny_unknown1_0159,
9644 "unknown1_0159", "skinny.unknown1.0159", FT_UINT32, BASE_DEC, NULL, 0x0,
9645 NULL, HFILL }},
9646 { &hf_skinny_unknown2_0159,
9648 "unknown2_0159", "skinny.unknown2.0159", FT_UINT32, BASE_DEC, NULL, 0x0,
9649 NULL, HFILL }},
9650 { &hf_skinny_unknown3_0159,
9652 "unknown3_0159", "skinny.unknown3.0159", FT_UINT32, BASE_DEC, NULL, 0x0,
9653 NULL, HFILL }},
9654 { &hf_skinny_v150sprt,
9656 "v150sprt", "skinny.v150sprt", FT_UINT8, BASE_DEC, NULL, 0x0,
9657 NULL, HFILL }},
9658 { &hf_skinny_vendor,
9660 "vendor", "skinny.vendor", FT_UINT32, BASE_DEC, NULL, 0x0,
9661 NULL, HFILL }},
9662 { &hf_skinny_videoCapCount,
9664 "videoCapCount", "skinny.videoCapCount", FT_UINT32, BASE_DEC, NULL, 0x0,
9665 NULL, HFILL }},
9666 { &hf_skinny_wDay,
9668 "wDay", "skinny.wDay", FT_UINT32, BASE_DEC, NULL, 0x0,
9669 NULL, HFILL }},
9670 { &hf_skinny_wDayOfWeek,
9672 "wDayOfWeek", "skinny.wDayOfWeek", FT_UINT32, BASE_DEC, NULL, 0x0,
9673 NULL, HFILL }},
9674 { &hf_skinny_wHour,
9676 "wHour", "skinny.wHour", FT_UINT32, BASE_DEC, NULL, 0x0,
9677 NULL, HFILL }},
9678 { &hf_skinny_wMilliseconds,
9680 "wMilliseconds", "skinny.wMilliseconds", FT_UINT32, BASE_DEC, NULL, 0x0,
9681 NULL, HFILL }},
9682 { &hf_skinny_wMinute,
9684 "wMinute", "skinny.wMinute", FT_UINT32, BASE_DEC, NULL, 0x0,
9685 NULL, HFILL }},
9686 { &hf_skinny_wMonth,
9688 "wMonth", "skinny.wMonth", FT_UINT32, BASE_DEC, NULL, 0x0,
9689 NULL, HFILL }},
9690 { &hf_skinny_wSecond,
9692 "wSecond", "skinny.wSecond", FT_UINT32, BASE_DEC, NULL, 0x0,
9693 NULL, HFILL }},
9694 { &hf_skinny_wYear,
9696 "wYear", "skinny.wYear", FT_UINT32, BASE_DEC, NULL, 0x0,
9697 NULL, HFILL }},
9698 { &hf_skinny_waitTimeBeforeNextReq,
9700 "waitTimeBeforeNextReq", "skinny.waitTimeBeforeNextReq", FT_UINT32, BASE_DEC, NULL, 0x0,
9701 NULL, HFILL }},
9702 { &hf_skinny_xmldata,
9704 "xmldata", "skinny.xmldata", FT_STRING, BASE_NONE, NULL, 0x0,
9705 NULL, HFILL }},
9706 {&hf_skinny_AlternateCallingParty,
9708 "AlternateCallingParty", "skinny.AlternateCallingParty", FT_STRING, BASE_NONE, NULL, 0x0,
9709 "Alternate Calling Party Number", HFILL }},
9710 {&hf_skinny_DeviceName,
9712 "DeviceName", "skinny.DeviceName", FT_STRING, BASE_NONE, NULL, 0x0,
9713 "Device Name", HFILL }},
9714 {&hf_skinny_HuntPilotName,
9716 "HuntPilotName", "skinny.HuntPilotName", FT_STRING, BASE_NONE, NULL, 0x0,
9717 NULL, HFILL }},
9718 {&hf_skinny_HuntPilotNumber,
9720 "HuntPilotNumber", "skinny.HuntPilotNumber", FT_STRING, BASE_NONE, NULL, 0x0,
9721 NULL, HFILL }},
9722 {&hf_skinny_ServerName,
9724 "ServerName", "skinny.ServerName", FT_STRING, BASE_NONE, NULL, 0x0,
9725 NULL, HFILL }},
9726 {&hf_skinny_add_participant_result,
9728 "add_participant_result", "skinny.add.participant.result", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &AddParticipantResult_ext, 0x0,
9729 NULL, HFILL }},
9730 {&hf_skinny_alarmSeverity,
9732 "alarmSeverity", "skinny.alarmSeverity", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceAlarmSeverity_ext, 0x0,
9733 NULL, HFILL }},
9734 {&hf_skinny_algorithmID,
9736 "algorithmID", "skinny.algorithmID", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaEncryptionAlgorithmType_ext, 0x0,
9737 NULL, HFILL }},
9738 {&hf_skinny_annAckReq,
9740 "annAckReq", "skinny.annAckReq", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &EndOfAnnAck_ext, 0x0,
9741 NULL, HFILL }},
9742 {&hf_skinny_annPlayMode,
9744 "annPlayMode", "skinny.annPlayMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &AnnPlayMode_ext, 0x0,
9745 NULL, HFILL }},
9746 {&hf_skinny_annStatus,
9748 "annStatus", "skinny.annStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &PlayAnnStatus_ext, 0x0,
9749 NULL, HFILL }},
9750 {&hf_skinny_appConfID,
9752 "appConfID", "skinny.appConfID", FT_STRING, BASE_NONE, NULL, 0x0,
9753 NULL, HFILL }},
9754 {&hf_skinny_appData,
9756 "appData", "skinny.appData", FT_STRING, BASE_NONE, NULL, 0x0,
9757 NULL, HFILL }},
9758 {&hf_skinny_appName,
9760 "appName", "skinny.appName", FT_STRING, BASE_NONE, NULL, 0x0,
9761 NULL, HFILL }},
9762 {&hf_skinny_audit_participant_result,
9764 "audit_participant_result", "skinny.audit.participant.result", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &AuditParticipantResult_ext, 0x0,
9765 NULL, HFILL }},
9766 {&hf_skinny_bridgeParticipantId,
9768 "bridgeParticipantId", "skinny.bridgeParticipantId", FT_STRING, BASE_NONE, NULL, 0x0,
9769 NULL, HFILL }},
9770 {&hf_skinny_buttonDefinition,
9772 "buttonDefinition", "skinny.buttonDefinition", FT_UINT8, BASE_HEX | BASE_EXT_STRING, &ButtonType_ext, 0x0,
9773 NULL, HFILL }},
9774 {&hf_skinny_callHistoryDisposition,
9776 "callHistoryDisposition", "skinny.callHistoryDisposition", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &CallHistoryDisposition_ext, 0x0,
9777 NULL, HFILL }},
9778 {&hf_skinny_callSecurityStatus,
9780 "callSecurityStatus", "skinny.callSecurityStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &CallSecurityStatusType_ext, 0x0,
9781 NULL, HFILL }},
9782 {&hf_skinny_callState,
9784 "callState", "skinny.callState", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DCallState_ext, 0x0,
9785 NULL, HFILL }},
9786 {&hf_skinny_callType,
9788 "callType", "skinny.callType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &CallType_ext, 0x0,
9789 NULL, HFILL }},
9790 {&hf_skinny_calledParty,
9792 "calledParty", "skinny.calledParty", FT_STRING, BASE_NONE, NULL, 0x0,
9793 "CalledPartyNumber", HFILL }},
9794 {&hf_skinny_calledPartyName,
9796 "calledPartyName", "skinny.calledPartyName", FT_STRING, BASE_NONE, NULL, 0x0,
9797 "Called Party Name", HFILL }},
9798 {&hf_skinny_callingParty,
9800 "callingParty", "skinny.callingParty", FT_STRING, BASE_NONE, NULL, 0x0,
9801 "Calling Party Number", HFILL }},
9802 {&hf_skinny_callingPartyName,
9804 "callingPartyName", "skinny.callingPartyName", FT_STRING, BASE_NONE, NULL, 0x0,
9805 "Calling Party Name", HFILL }},
9806 {&hf_skinny_callingPartyNumber,
9808 "callingPartyNumber", "skinny.callingPartyNumber", FT_STRING, BASE_NONE, NULL, 0x0,
9809 "Calling Party Number", HFILL }},
9810 {&hf_skinny_cause,
9812 "cause", "skinny.cause", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SubscribeCause_ext, 0x0,
9813 NULL, HFILL }},
9814 {&hf_skinny_cdpnVoiceMailbox,
9816 "cdpnVoiceMailbox", "skinny.cdpnVoiceMailbox", FT_STRING, BASE_NONE, NULL, 0x0,
9817 "Called Party Voicemail Box Number", HFILL }},
9818 {&hf_skinny_cgpnVoiceMailbox,
9820 "cgpnVoiceMailbox", "skinny.cgpnVoiceMailbox", FT_STRING, BASE_NONE, NULL, 0x0,
9821 "Calling Party Voicemail Box Number", HFILL }},
9822 {&hf_skinny_command,
9824 "command", "skinny.command", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MiscCommandType_ext, 0x0,
9825 NULL, HFILL }},
9826 {&hf_skinny_compressionType,
9828 "compressionType", "skinny.compressionType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Media_PayloadType_ext, 0x0,
9829 NULL, HFILL }},
9830 {&hf_skinny_conferenceName,
9832 "conferenceName", "skinny.conferenceName", FT_STRING, BASE_NONE, NULL, 0x0,
9833 NULL, HFILL }},
9834 {&hf_skinny_configVersionStamp,
9836 "configVersionStamp", "skinny.configVersionStamp", FT_STRING, BASE_NONE, NULL, 0x0,
9837 NULL, HFILL }},
9838 {&hf_skinny_data,
9840 "Statistics", "skinny.data", FT_STRING, BASE_NONE, NULL, 0x0,
9841 "variable field size (max: 600]", HFILL }},
9842 {&hf_skinny_dataCapabilityDirection,
9844 "dataCapabilityDirection", "skinny.dataCapabilityDirection", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &TransmitOrReceive_ext, 0x0,
9845 NULL, HFILL }},
9846 {&hf_skinny_dateTemplate,
9848 "dateTemplate", "skinny.dateTemplate", FT_STRING, BASE_NONE, NULL, 0x0,
9849 NULL, HFILL }},
9850 {&hf_skinny_delete_conf_result,
9852 "delete_conf_result", "skinny.delete.conf.result", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeleteConfResult_ext, 0x0,
9853 NULL, HFILL }},
9854 {&hf_skinny_deviceType,
9856 "Device Type", "skinny.deviceType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceType_ext, 0x0,
9857 "Device Type of this phone / appliance", HFILL }},
9858 {&hf_skinny_dialedNumber,
9860 "dialedNumber", "skinny.dialedNumber", FT_STRING, BASE_NONE, NULL, 0x0,
9861 NULL, HFILL }},
9862 {&hf_skinny_direction,
9864 "direction", "skinny.direction", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &RSVPDirection_ext, 0x0,
9865 NULL, HFILL }},
9866 {&hf_skinny_directoryNum,
9868 "directoryNum", "skinny.directoryNum", FT_STRING, BASE_NONE, NULL, 0x0,
9869 NULL, HFILL }},
9870 {&hf_skinny_ecValue,
9872 "ecValue", "skinny.ecValue", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Media_EchoCancellation_ext, 0x0,
9873 NULL, HFILL }},
9874 {&hf_skinny_encryptionCapability,
9876 "encryptionCapability", "skinny.encryptionCapability", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Media_Encryption_Capability_ext, 0x0,
9877 NULL, HFILL }},
9878 {&hf_skinny_errorCode,
9880 "errorCode", "skinny.errorCode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &QoSErrorCode_ext, 0x0,
9881 NULL, HFILL }},
9882 {&hf_skinny_featureID,
9884 "featureID", "skinny.featureID", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &ButtonType_ext, 0x0,
9885 NULL, HFILL }},
9886 {&hf_skinny_featureTextLabel,
9888 "featureTextLabel", "skinny.featureTextLabel", FT_STRING, BASE_NONE, NULL, 0x0,
9889 NULL, HFILL }},
9890 {&hf_skinny_firmwareLoadName,
9892 "firmwareLoadName", "skinny.firmwareLoadName", FT_STRING, BASE_NONE, NULL, 0x0,
9893 "Firmware Load Name", HFILL }},
9894 {&hf_skinny_forwardAllDirnum,
9896 "forwardAllDirnum", "skinny.forwardAllDirnum", FT_STRING, BASE_NONE, NULL, 0x0,
9897 NULL, HFILL }},
9898 {&hf_skinny_forwardBusyDirnum,
9900 "forwardBusyDirnum", "skinny.forwardBusyDirnum", FT_STRING, BASE_NONE, NULL, 0x0,
9901 NULL, HFILL }},
9902 {&hf_skinny_forwardNoAnswerlDirnum,
9904 "forwardNoAnswerlDirnum", "skinny.forwardNoAnswerlDirnum", FT_STRING, BASE_NONE, NULL, 0x0,
9905 NULL, HFILL }},
9906 {&hf_skinny_g723BitRate,
9908 "g723BitRate", "skinny.g723BitRate", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Media_G723BitRate_ext, 0x0,
9909 NULL, HFILL }},
9910 {&hf_skinny_headsetStatus,
9912 "headsetStatus", "skinny.headsetStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &HeadsetMode_ext, 0x0,
9913 NULL, HFILL }},
9914 {&hf_skinny_ipAddressType,
9916 "ipAddressType", "skinny.ipAddressType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &IpAddrType_ext, 0x0,
9917 NULL, HFILL }},
9918 {&hf_skinny_ipAddressingMode,
9920 "ipAddressingMode", "skinny.ipAddressingMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &IpAddrMode_ext, 0x0,
9921 NULL, HFILL }},
9922 {&hf_skinny_kpButton,
9924 "kpButton", "skinny.kpButton", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &KeyPadButton_ext, 0x0,
9925 "KeyPad Button which was Pressed", HFILL }},
9926 {&hf_skinny_lampMode,
9928 "lampMode", "skinny.lampMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &LampMode_ext, 0x0,
9929 NULL, HFILL }},
9930 {&hf_skinny_lastRedirectingParty,
9932 "lastRedirectingParty", "skinny.lastRedirectingParty", FT_STRING, BASE_NONE, NULL, 0x0,
9933 "Last Redirecting Party Number", HFILL }},
9934 {&hf_skinny_lastRedirectingPartyName,
9936 "lastRedirectingPartyName", "skinny.lastRedirectingPartyName", FT_STRING, BASE_NONE, NULL, 0x0,
9937 "Last Redirecting Party Name", HFILL }},
9938 {&hf_skinny_lastRedirectingVoiceMailbox,
9940 "lastRedirectingVoiceMailbox", "skinny.lastRedirectingVoiceMailbox", FT_STRING, BASE_NONE, NULL, 0x0,
9941 "Last Redirecting Parties Voicemail Box Number", HFILL }},
9942 {&hf_skinny_layouts,
9944 "layouts", "skinny.layouts", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Layout_ext, 0x0,
9945 NULL, HFILL }},
9946 {&hf_skinny_lineDirNumber,
9948 "lineDirNumber", "skinny.lineDirNumber", FT_STRING, BASE_NONE, NULL, 0x0,
9949 NULL, HFILL }},
9950 {&hf_skinny_lineFullyQualifiedDisplayName,
9952 "lineFullyQualifiedDisplayName", "skinny.lineFullyQualifiedDisplayName", FT_STRING, BASE_NONE, NULL, 0x0,
9953 NULL, HFILL }},
9954 {&hf_skinny_lineTextLabel,
9956 "lineTextLabel", "skinny.lineTextLabel", FT_STRING, BASE_NONE, NULL, 0x0,
9957 NULL, HFILL }},
9958 {&hf_skinny_locationInfo,
9960 "locationInfo", "skinny.locationInfo", FT_STRING, BASE_NONE, NULL, 0x0,
9961 NULL, HFILL }},
9962 {&hf_skinny_mediaPathCapabilities,
9964 "mediaPathCapabilities", "skinny.mediaPathCapabilities", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaPathCapabilities_ext, 0x0,
9965 NULL, HFILL }},
9966 {&hf_skinny_mediaPathEvent,
9968 "mediaPathEvent", "skinny.mediaPathEvent", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaPathEvent_ext, 0x0,
9969 NULL, HFILL }},
9970 {&hf_skinny_mediaPathID,
9972 "mediaPathID", "skinny.mediaPathID", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaPathID_ext, 0x0,
9973 NULL, HFILL }},
9974 {&hf_skinny_mediaReceptionStatus,
9976 "mediaReceptionStatus", "skinny.mediaReceptionStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaStatus_ext, 0x0,
9977 NULL, HFILL }},
9978 {&hf_skinny_mediaTransmissionStatus,
9980 "mediaTransmissionStatus", "skinny.mediaTransmissionStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaStatus_ext, 0x0,
9981 NULL, HFILL }},
9982 {&hf_skinny_mediaTransportType,
9984 "mediaTransportType", "skinny.mediaTransportType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaTransportType_ext, 0x0,
9985 NULL, HFILL }},
9986 {&hf_skinny_mediaType,
9988 "mediaType", "skinny.mediaType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaType_ext, 0x0,
9989 NULL, HFILL }},
9990 {&hf_skinny_micMode,
9992 "micMode", "skinny.micMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MicrophoneMode_ext, 0x0,
9993 NULL, HFILL }},
9994 {&hf_skinny_modify_conf_result,
9996 "modify_conf_result", "skinny.modify.conf.result", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &ModifyConfResult_ext, 0x0,
9997 NULL, HFILL }},
9998 {&hf_skinny_multicastReceptionStatus,
10000 "multicastReceptionStatus", "skinny.multicastReceptionStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MulticastMediaReceptionStatus_ext, 0x0,
10001 NULL, HFILL }},
10002 {&hf_skinny_multimediaReceptionStatus,
10004 "multimediaReceptionStatus", "skinny.multimediaReceptionStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &OpenReceiveChanStatus_ext, 0x0,
10005 NULL, HFILL }},
10006 {&hf_skinny_multimediaTransmissionStatus,
10008 "multimediaTransmissionStatus", "skinny.multimediaTransmissionStatus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MediaStatus_ext, 0x0,
10009 NULL, HFILL }},
10010 {&hf_skinny_mwiControlNumber,
10012 "mwiControlNumber", "skinny.mwiControlNumber", FT_STRING, BASE_NONE, NULL, 0x0,
10013 NULL, HFILL }},
10014 {&hf_skinny_mwiTargetNumber,
10016 "mwiTargetNumber", "skinny.mwiTargetNumber", FT_STRING, BASE_NONE, NULL, 0x0,
10017 NULL, HFILL }},
10018 {&hf_skinny_mwi_notification_result,
10020 "mwi_notification_result", "skinny.mwi.notification.result", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &MwiNotificationResult_ext, 0x0,
10021 NULL, HFILL }},
10022 {&hf_skinny_notify,
10024 "notify", "skinny.notify", FT_STRING, BASE_NONE, NULL, 0x0,
10025 NULL, HFILL }},
10026 {&hf_skinny_originalCalledParty,
10028 "originalCalledParty", "skinny.originalCalledParty", FT_STRING, BASE_NONE, NULL, 0x0,
10029 "Original Called Party Number", HFILL }},
10030 {&hf_skinny_originalCalledPartyName,
10032 "originalCalledPartyName", "skinny.originalCalledPartyName", FT_STRING, BASE_NONE, NULL, 0x0,
10033 "Original Called Party Name", HFILL }},
10034 {&hf_skinny_originalCdpnVoiceMailbox,
10036 "originalCdpnVoiceMailbox", "skinny.originalCdpnVoiceMailbox", FT_STRING, BASE_NONE, NULL, 0x0,
10037 "Original Called Party Voicemail Box Number", HFILL }},
10038 {&hf_skinny_participantName,
10040 "participantName", "skinny.participantName", FT_STRING, BASE_NONE, NULL, 0x0,
10041 NULL, HFILL }},
10042 {&hf_skinny_participantNumber,
10044 "participantNumber", "skinny.participantNumber", FT_STRING, BASE_NONE, NULL, 0x0,
10045 NULL, HFILL }},
10046 {&hf_skinny_passThruData,
10048 "passThruData", "skinny.passThruData", FT_STRING, BASE_NONE, NULL, 0x0,
10049 "variable field size (max: 2000]", HFILL }},
10050 {&hf_skinny_payloadCapability,
10052 "payloadCapability", "skinny.payloadCapability", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Media_PayloadType_ext, 0x0,
10053 NULL, HFILL }},
10054 {&hf_skinny_portHandlingFlag,
10056 "portHandlingFlag", "skinny.portHandlingFlag", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &PortHandling_ext, 0x0,
10057 NULL, HFILL }},
10058 {&hf_skinny_privacy,
10060 "privacy", "skinny.privacy", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &CallPrivacy_ext, 0x0,
10061 NULL, HFILL }},
10062 {&hf_skinny_promptStatus,
10064 "promptStatus", "skinny.promptStatus", FT_STRING, BASE_NONE, NULL, 0x0,
10065 NULL, HFILL }},
10066 {&hf_skinny_recording_status,
10068 "recording_status", "skinny.recording.status", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &RecordingStatus_ext, 0x0,
10069 NULL, HFILL }},
10070 {&hf_skinny_requestedIpAddrType,
10072 "requestedIpAddrType", "skinny.requestedIpAddrType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &IpAddrType_ext, 0x0,
10073 NULL, HFILL }},
10074 {&hf_skinny_resetType,
10076 "resetType", "skinny.resetType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceResetType_ext, 0x0,
10077 NULL, HFILL }},
10078 {&hf_skinny_resourceType,
10080 "resourceType", "skinny.resourceType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &ResourceType_ext, 0x0,
10081 NULL, HFILL }},
10082 {&hf_skinny_result,
10084 "result", "skinny.result", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &CreateConfResult_ext, 0x0,
10085 NULL, HFILL }},
10086 {&hf_skinny_resvStyle,
10088 "resvStyle", "skinny.resvStyle", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &ResvStyle_ext, 0x0,
10089 NULL, HFILL }},
10090 {&hf_skinny_ringDuration,
10092 "ringDuration", "skinny.ringDuration", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &RingDuration_ext, 0x0,
10093 NULL, HFILL }},
10094 {&hf_skinny_ringMode,
10096 "ringMode", "skinny.ringMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &RingMode_ext, 0x0,
10097 NULL, HFILL }},
10098 {&hf_skinny_rsvpErrorCode,
10100 "rsvpErrorCode", "skinny.rsvpErrorCode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &RSVPErrorCode_ext, 0x0,
10101 NULL, HFILL }},
10102 {&hf_skinny_sequenceFlag,
10104 "sequenceFlag", "skinny.sequenceFlag", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SequenceFlag_ext, 0x0,
10105 NULL, HFILL }},
10106 {&hf_skinny_serverName,
10108 "serverName", "skinny.serverName", FT_STRING, BASE_NONE, NULL, 0x0,
10109 NULL, HFILL }},
10110 {&hf_skinny_serviceURL,
10112 "serviceURL", "skinny.serviceURL", FT_STRING, BASE_NONE, NULL, 0x0,
10113 NULL, HFILL }},
10114 {&hf_skinny_serviceURLDisplayName,
10116 "serviceURLDisplayName", "skinny.serviceURLDisplayName", FT_STRING, BASE_NONE, NULL, 0x0,
10117 NULL, HFILL }},
10118 {&hf_skinny_sessionType,
10120 "sessionType", "skinny.sessionType", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SessionType_ext, 0x0,
10121 NULL, HFILL }},
10122 {&hf_skinny_softKeyEvent,
10124 "softKeyEvent", "skinny.softKeyEvent", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SoftKeyEvent_ext, 0x0,
10125 "SoftKey Event", HFILL }},
10126 {&hf_skinny_softKeyInfoIndex,
10128 "softKeyInfoIndex", "skinny.softKeyInfoIndex", FT_UINT16, BASE_HEX | BASE_EXT_STRING, &SoftKeyInfoIndex_ext, 0x0,
10129 NULL, HFILL }},
10130 {&hf_skinny_softKeyLabel,
10132 "softKeyLabel", "skinny.softKeyLabel", FT_STRING, BASE_NONE, NULL, 0x0,
10133 NULL, HFILL }},
10134 {&hf_skinny_softKeySetIndex,
10136 "softKeySetIndex", "skinny.softKeySetIndex", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SoftKeySet_ext, 0x0,
10137 NULL, HFILL }},
10138 {&hf_skinny_softKeyTemplateIndex,
10140 "softKeyTemplateIndex", "skinny.softKeyTemplateIndex", FT_UINT8, BASE_HEX | BASE_EXT_STRING, &SoftKeyTemplateIndex_ext, 0x0,
10141 NULL, HFILL }},
10142 {&hf_skinny_speakerMode,
10144 "speakerMode", "skinny.speakerMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SpeakerMode_ext, 0x0,
10145 NULL, HFILL }},
10146 {&hf_skinny_speedDialDirNumber,
10148 "speedDialDirNumber", "skinny.speedDialDirNumber", FT_STRING, BASE_NONE, NULL, 0x0,
10149 NULL, HFILL }},
10150 {&hf_skinny_speedDialDisplayName,
10152 "speedDialDisplayName", "skinny.speedDialDisplayName", FT_STRING, BASE_NONE, NULL, 0x0,
10153 NULL, HFILL }},
10154 {&hf_skinny_ssValue,
10156 "ssValue", "skinny.ssValue", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &Media_SilenceSuppression_ext, 0x0,
10157 NULL, HFILL }},
10158 {&hf_skinny_statsProcessingMode,
10160 "Stats Processing Mode", "skinny.statsProcessingMode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &StatsProcessingType_ext, 0x0,
10161 "What to do after you send the stats", HFILL }},
10162 {&hf_skinny_status,
10164 "status", "skinny.status", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceUnregisterStatus_ext, 0x0,
10165 NULL, HFILL }},
10166 {&hf_skinny_stimulus,
10168 "stimulus", "skinny.stimulus", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceStimulus_ext, 0x0,
10169 "Device Stimulus", HFILL }},
10170 {&hf_skinny_subAppID,
10172 "subAppID", "skinny.subAppID", FT_STRING, BASE_NONE, NULL, 0x0,
10173 NULL, HFILL }},
10174 {&hf_skinny_subscriptionFeatureID,
10176 "subscriptionFeatureID", "skinny.subscriptionFeatureID", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &SubscriptionFeatureID_ext, 0x0,
10177 NULL, HFILL }},
10178 {&hf_skinny_subscriptionID,
10180 "subscriptionID", "skinny.subscriptionID", FT_STRING, BASE_NONE, NULL, 0x0,
10181 NULL, HFILL }},
10182 {&hf_skinny_text,
10184 "text", "skinny.text", FT_STRING, BASE_NONE, NULL, 0x0,
10185 NULL, HFILL }},
10186 {&hf_skinny_tone,
10188 "tone", "skinny.tone", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceTone_ext, 0x0,
10189 NULL, HFILL }},
10190 {&hf_skinny_toneAnnouncement,
10192 "toneAnnouncement", "skinny.toneAnnouncement", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &DeviceTone_ext, 0x0,
10193 NULL, HFILL }},
10194 {&hf_skinny_tone_output_direction,
10196 "tone_output_direction", "skinny.tone.output.direction", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &ToneOutputDirection_ext, 0x0,
10197 NULL, HFILL }},
10198 {&hf_skinny_unRegReasonCode,
10200 "unRegReasonCode", "skinny.unRegReasonCode", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &UnRegReasonCode_ext, 0x0,
10201 NULL, HFILL }},
10202 {&hf_skinny_unknownString_0159,
10204 "unknownString_0159", "skinny.unknownString.0159", FT_STRING, BASE_NONE, NULL, 0x0,
10205 NULL, HFILL }},
10206 {&hf_skinny_userName,
10208 "userName", "skinny.userName", FT_STRING, BASE_NONE, NULL, 0x0,
10209 NULL, HFILL }},
10210 {&hf_skinny_vendorID,
10212 "vendorID", "skinny.vendorID", FT_STRING, BASE_NONE, NULL, 0x0,
10213 NULL, HFILL }},
10214 {&hf_skinny_version,
10216 "version", "skinny.version", FT_STRING, BASE_NONE, NULL, 0x0,
10217 NULL, HFILL }},
10218 {&hf_skinny_versionStr,
10220 "versionStr", "skinny.versionStr", FT_STRING, BASE_NONE, NULL, 0x0,
10221 NULL, HFILL }},
10222 {&hf_skinny_videoCapabilityDirection,
10224 "videoCapabilityDirection", "skinny.videoCapabilityDirection", FT_UINT32, BASE_HEX | BASE_EXT_STRING, &TransmitOrReceive_ext, 0x0,
10225 NULL, HFILL }},
10228 /* Setup protocol subtree array */
10229 static int *ett[] = {
10230 &ett_skinny,
10231 &ett_skinny_tree,
10234 module_t *skinny_module;
10236 /* Register the protocol name and description */
10237 proto_skinny = proto_register_protocol("Skinny Client Control Protocol",
10238 "SKINNY", "skinny");
10240 /* Required function calls to register the header fields and subtrees used */
10241 proto_register_field_array(proto_skinny, hf, array_length(hf));
10242 proto_register_subtree_array(ett, array_length(ett));
10244 skinny_module = prefs_register_protocol(proto_skinny, NULL);
10245 prefs_register_bool_preference(skinny_module, "desegment",
10246 "Reassemble SKINNY messages spanning multiple TCP segments",
10247 "Whether the SKINNY dissector should reassemble messages spanning multiple TCP segments."
10248 " To use this option, you must also enable"
10249 " \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
10250 &global_skinny_desegment);
10252 skinny_handle = register_dissector("skinny", dissect_skinny, proto_skinny);
10254 skinny_tap = register_tap("skinny");
10257 void
10258 proto_reg_handoff_skinny(void)
10260 /* Skinny content type and internet media type used by other dissectors are the same */
10261 xml_handle = find_dissector_add_dependency("xml", proto_skinny);
10262 dissector_add_uint_with_preference("tcp.port", TCP_PORT_SKINNY, skinny_handle);
10263 ssl_dissector_add(SSL_PORT_SKINNY, skinny_handle);
10267 * Editor modelines - https://www.wireshark.org/tools/modelines.html
10269 * Local variables:
10270 * c-basic-offset: 2
10271 * tab-width: 8
10272 * indent-tabs-mode: nil
10273 * End:
10275 * vi: set shiftwidth=2 tabstop=8 expandtab:
10276 * :indentSize=2:tabSize=8:noTabs=true: