1 /* Do not modify this file. Changes will be overwritten */
2 /* Generated Automatically */
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:
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>
42 #include <epan/ptvcursor.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" },
87 /* Declare MessageId */
88 static const value_string message_id
[] = {
89 { 0x0000, "KeepAliveReq" },
90 { 0x0001, "RegisterReq" },
92 { 0x0003, "KeypadButton" },
93 { 0x0004, "EnblocCall" },
94 { 0x0005, "Stimulus" },
95 { 0x0006, "OffHook" },
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" },
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" },
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" },
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" },
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" },
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" },
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" },
346 { 0x00004, "Transfer" },
347 { 0x00005, "Cfwdall" },
348 { 0x00006, "Cfwdbusy" },
349 { 0x00007, "Cfwdnoanswer" },
350 { 0x00008, "Backspace" },
351 { 0x00009, "Endcall" },
352 { 0x0000a, "Resume" },
353 { 0x0000b, "Answer" },
355 { 0x0000d, "Confrn" },
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" },
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" },
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" },
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" },
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" },
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" },
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" },
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" },
548 { 0x00134, "Cisco 7961 GE" },
549 { 0x00135, "7961G_GE" },
550 { 0x0014f, "MotorolaCN622" },
551 { 0x00150, "3rdPartySipBasic" },
552 { 0x0015c, "Cisco 7931" },
553 { 0x00166, "UnifiedCommunicator" },
556 { 0x00176, "3rdPartySipAdv" },
557 { 0x00177, "Telepresence" },
558 { 0x00178, "Nokia ICC client" },
566 { 0x001d4, "UnifiedMobileCommunicator" },
567 { 0x001e4, "Cisco 7925" },
568 { 0x001ed, "9971_CE" },
569 { 0x001ef, "Cisco 6921" },
570 { 0x001f0, "Cisco 6941" },
571 { 0x001f1, "Cisco 6961" },
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" },
588 { 0x07540, "Cisco IP Communicator" },
589 { 0x07542, "7961G" },
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" },
606 static value_string_ext DeviceType_ext
= VALUE_STRING_EXT_INIT(DeviceType
);
608 static const value_string KeyPadButton
[] = {
612 { 0x00003, "Three" },
616 { 0x00007, "Seven" },
617 { 0x00008, "Eight" },
624 { 0x0000f, "Pound" },
628 static value_string_ext KeyPadButton_ext
= VALUE_STRING_EXT_INIT(KeyPadButton
);
630 static const value_string KeyPadButton_short
[] = {
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" },
656 { 0x00004, "Transfer" },
657 { 0x00005, "ForwardAll" },
658 { 0x00006, "ForwardBusy" },
659 { 0x00007, "ForwardNoAnswer" },
660 { 0x00008, "Display" },
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" },
692 { 0x00086, "CallBack" },
693 { 0x00087, "OtherPickup" },
694 { 0x00088, "VideoMode" },
695 { 0x00089, "NewCall" },
696 { 0x0008a, "EndCall" },
698 { 0x0008f, "Queuing" },
699 { 0x000ff, "MaxStimulusValue" },
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" },
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" },
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" },
862 static value_string_ext DeviceAlarmSeverity_ext
= VALUE_STRING_EXT_INIT(DeviceAlarmSeverity
);
864 static const value_string MulticastMediaReceptionStatus
[] = {
866 { 0x00001, "Error" },
869 static value_string_ext MulticastMediaReceptionStatus_ext
= VALUE_STRING_EXT_INIT(MulticastMediaReceptionStatus
);
871 static const value_string MediaStatus
[] = {
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" },
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" },
901 static value_string_ext IpAddrType_ext
= VALUE_STRING_EXT_INIT(IpAddrType
);
903 static const value_string StatsProcessingType
[] = {
904 { 0x00000, "clearStats" },
905 { 0x00001, "doNotClearStats" },
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" },
925 static value_string_ext SoftKeySet_ext
= VALUE_STRING_EXT_INIT(SoftKeySet
);
927 static const value_string SoftKeyEvent
[] = {
928 { 0x00001, "Redial" },
929 { 0x00002, "NewCall" },
931 { 0x00004, "Transfer" },
932 { 0x00005, "CfwdAll" },
933 { 0x00006, "CfwdBusy" },
934 { 0x00007, "CfwdNoAnswer" },
935 { 0x00008, "BackSpace" },
936 { 0x00009, "EndCall" },
937 { 0x0000a, "Resume" },
938 { 0x0000b, "Answer" },
940 { 0x0000d, "Confrn" },
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" },
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" },
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" },
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" },
1020 static value_string_ext SoftKeyEvent_ext
= VALUE_STRING_EXT_INIT(SoftKeyEvent
);
1022 static const value_string UnRegReasonCode
[] = {
1023 { 0x00000, "Unknown" },
1024 { 0x00001, "PowerSaveMode" },
1027 static value_string_ext UnRegReasonCode_ext
= VALUE_STRING_EXT_INIT(UnRegReasonCode
);
1029 static const value_string HeadsetMode
[] = {
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" },
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" },
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" },
1067 static value_string_ext TransmitOrReceive_ext
= VALUE_STRING_EXT_INIT(TransmitOrReceive
);
1069 static const value_string OpenReceiveChanStatus
[] = {
1071 { 0x00001, "Error" },
1074 static value_string_ext OpenReceiveChanStatus_ext
= VALUE_STRING_EXT_INIT(OpenReceiveChanStatus
);
1076 static const value_string CreateConfResult
[] = {
1078 { 0x00001, "ResourceNotAvailable" },
1079 { 0x00002, "ConferenceAlreadyExist" },
1080 { 0x00003, "SystemErr" },
1083 static value_string_ext CreateConfResult_ext
= VALUE_STRING_EXT_INIT(CreateConfResult
);
1085 static const value_string DeleteConfResult
[] = {
1087 { 0x00001, "ConferenceNotExist" },
1088 { 0x00002, "SystemErr" },
1091 static value_string_ext DeleteConfResult_ext
= VALUE_STRING_EXT_INIT(DeleteConfResult
);
1093 static const value_string ModifyConfResult
[] = {
1095 { 0x00001, "ResourceNotAvailable" },
1096 { 0x00002, "ConferenceNotExist" },
1097 { 0x00003, "InvalidParameter" },
1098 { 0x00004, "MoreActiveCallsThanReserved" },
1099 { 0x00005, "InvalidResourceType" },
1100 { 0x00006, "SystemErr" },
1103 static value_string_ext ModifyConfResult_ext
= VALUE_STRING_EXT_INIT(ModifyConfResult
);
1105 static const value_string AddParticipantResult
[] = {
1107 { 0x00001, "ResourceNotAvailable" },
1108 { 0x00002, "ConferenceNotExist" },
1109 { 0x00003, "DuplicateCallRef" },
1110 { 0x00004, "SystemErr" },
1113 static value_string_ext AddParticipantResult_ext
= VALUE_STRING_EXT_INIT(AddParticipantResult
);
1115 static const value_string ResourceType
[] = {
1116 { 0x00000, "Conference" },
1120 static value_string_ext ResourceType_ext
= VALUE_STRING_EXT_INIT(ResourceType
);
1122 static const value_string AuditParticipantResult
[] = {
1124 { 0x00001, "ConferenceNotExist" },
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" },
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" },
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" },
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" },
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" },
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" },
1198 { 0x00015, "TRAFFIC" },
1199 { 0x00016, "TRAFFIC_SYSTEM" },
1200 { 0x00017, "SYSTEM" },
1201 { 0x00018, "ROUTING_PROBLEM" },
1204 static value_string_ext RSVPErrorCode_ext
= VALUE_STRING_EXT_INIT(RSVPErrorCode
);
1206 static const value_string SubscriptionFeatureID
[] = {
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" },
1218 static value_string_ext MediaPathID_ext
= VALUE_STRING_EXT_INIT(MediaPathID
);
1220 static const value_string MediaPathEvent
[] = {
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" },
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" },
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" },
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" },
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" },
1345 static value_string_ext DeviceTone_ext
= VALUE_STRING_EXT_INIT(DeviceTone
);
1347 static const value_string ToneOutputDirection
[] = {
1348 { 0x00000, "User" },
1349 { 0x00001, "Network" },
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" },
1364 static value_string_ext RingMode_ext
= VALUE_STRING_EXT_INIT(RingMode
);
1366 static const value_string RingDuration
[] = {
1367 { 0x00001, "NormalRing" },
1368 { 0x00002, "SingleRing" },
1371 static value_string_ext RingDuration_ext
= VALUE_STRING_EXT_INIT(RingDuration
);
1373 static const value_string LampMode
[] = {
1376 { 0x00003, "Wink" },
1377 { 0x00004, "Flash" },
1378 { 0x00005, "Blink" },
1381 static value_string_ext LampMode_ext
= VALUE_STRING_EXT_INIT(LampMode
);
1383 static const value_string SpeakerMode
[] = {
1388 static value_string_ext SpeakerMode_ext
= VALUE_STRING_EXT_INIT(SpeakerMode
);
1390 static const value_string MicrophoneMode
[] = {
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" },
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" },
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" },
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" },
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" },
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" },
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" },
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" },
1507 { 0x000ff, "Undefined" },
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" },
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" },
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" },
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" },
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" },
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" },
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" },
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" },
1633 static value_string_ext CallPrivacy_ext
= VALUE_STRING_EXT_INIT(CallPrivacy
);
1635 static const value_string DeviceUnregisterStatus
[] = {
1637 { 0x00001, "Error" },
1641 static value_string_ext DeviceUnregisterStatus_ext
= VALUE_STRING_EXT_INIT(DeviceUnregisterStatus
);
1643 static const value_string EndOfAnnAck
[] = {
1644 { 0x00000, "NoAnnAckRequired" },
1645 { 0x00001, "AnnAckRequired" },
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" },
1656 static value_string_ext AnnPlayMode_ext
= VALUE_STRING_EXT_INIT(AnnPlayMode
);
1658 static const value_string PlayAnnStatus
[] = {
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" },
1685 static value_string_ext MiscCommandType_ext
= VALUE_STRING_EXT_INIT(MiscCommandType
);
1687 static const value_string MediaTransportType
[] = {
1693 static value_string_ext MediaTransportType_ext
= VALUE_STRING_EXT_INIT(MediaTransportType
);
1695 static const value_string ResvStyle
[] = {
1701 static value_string_ext ResvStyle_ext
= VALUE_STRING_EXT_INIT(ResvStyle
);
1703 static const value_string SubscribeCause
[] = {
1705 { 0x00001, "RouteFail" },
1706 { 0x00002, "AuthFail" },
1707 { 0x00003, "Timeout" },
1708 { 0x00004, "TrunkTerm" },
1709 { 0x00005, "TrunkForbidden" },
1710 { 0x00006, "Throttle" },
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" },
1723 static value_string_ext CallHistoryDisposition_ext
= VALUE_STRING_EXT_INIT(CallHistoryDisposition
);
1725 static const value_string MwiNotificationResult
[] = {
1727 { 0x00001, "GeneralError" },
1728 { 0x00002, "RequestRejected" },
1729 { 0x00003, "VmCountOutOfBounds" },
1730 { 0x00004, "FaxCountOutOfBounds" },
1731 { 0x00005, "InvalidPriorityVmCount" },
1732 { 0x00006, "InvalidPriorityFaxCount" },
1735 static value_string_ext MwiNotificationResult_ext
= VALUE_STRING_EXT_INIT(MwiNotificationResult
);
1737 static const value_string RecordingStatus
[] = {
1738 { 0x00000, "_OFF" },
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 */
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;
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
);
2248 length
= tvb_strnlen(tvb
, offset
, -1);
2250 if (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
);
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
);
2287 /* Invalid : skip over ipv6 space completely */
2288 ptvcursor_advance(cursor
, 16);
2292 /* Reads address to provided variable */
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
);
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
);
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
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;
2333 length
= tvb_strnlen(tvb
, offset
, -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
++) {
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
);
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
);
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
));
2393 it
= proto_tree_add_uint(tree
, hf_skinny_response_in
, tvb
, 0, 0, req_resp
->response_frame
);
2394 proto_item_set_generated(it
);
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
));
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
);
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
));
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
);
2431 DPRINT(("SKINNY: no response found for frame/key=%d\n", pinfo
->num
));
2435 /*** Messages Handlers ***/
2437 * Message: RegisterReqMessage
2439 * Type: RegistrationAndManagement
2440 * Direction: dev2pbx
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
2504 * Direction: dev2pbx
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
2518 * Direction: dev2pbx
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\"",
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
2546 * Direction: dev2pbx
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
2569 * Direction: dev2pbx
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
2588 * Direction: dev2pbx
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
2609 * Direction: dev2pbx
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
2630 * Direction: dev2pbx
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
2646 * Type: RegistrationAndManagement
2647 * Direction: dev2pbx
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
2663 * Type: RegistrationAndManagement
2664 * Direction: dev2pbx
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
2680 * Type: RegistrationAndManagement
2681 * Direction: dev2pbx
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
2697 * Type: RegistrationAndManagement
2698 * Direction: dev2pbx
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
);
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);
2767 ptvcursor_advance(cursor
, 16);
2769 ptvcursor_pop_subtree(cursor
);
2772 ptvcursor_pop_subtree(cursor
);
2774 ptvcursor_advance(cursor
, (capCount
* 16));
2776 skinny_reqrep_add_response(cursor
, pinfo
, skinny_conv
, 0x009b);
2780 * Message: AlarmMessage
2782 * Type: RegistrationAndManagement
2783 * Direction: dev2pbx
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
2799 * Type: MediaControl
2800 * Direction: dev2pbx
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
2821 * Type: MediaControl
2822 * Direction: dev2pbx
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);
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
2859 * Direction: dev2pbx
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
2904 * Direction: dev2pbx
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
2922 * Type: RegistrationAndManagement
2923 * Direction: dev2pbx
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
2940 * Type: RegistrationAndManagement
2941 * Direction: dev2pbx
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
2959 * Type: RegistrationAndManagement
2960 * Direction: dev2pbx
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
2983 * Type: MediaControl
2984 * Direction: dev2pbx
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
3016 * Direction: dev2pbx
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
3029 * Type: MediaControl
3030 * Direction: dev2pbx
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
3046 * Type: RegistrationAndManagement
3047 * Direction: dev2pbx
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
3060 * Type: RegistrationAndManagement
3061 * Direction: dev2pbx
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
3088 * Type: RegistrationAndManagement
3089 * Direction: dev2pbx
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
3116 * Type: RegistrationAndManagement
3117 * Direction: dev2pbx
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
);
3154 ptvcursor_advance(cursor
, 20);
3156 ptvcursor_pop_subtree(cursor
);
3159 ptvcursor_pop_subtree(cursor
);
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
);
3185 ptvcursor_advance(cursor
, 4);
3188 ptvcursor_pop_subtree(cursor
);
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
);
3197 ptvcursor_advance(cursor
, 24);
3199 ptvcursor_pop_subtree(cursor
);
3202 ptvcursor_pop_subtree(cursor
);
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
);
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);
3266 ptvcursor_advance(cursor
, 16);
3268 ptvcursor_pop_subtree(cursor
);
3271 ptvcursor_pop_subtree(cursor
);
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
);
3301 ptvcursor_advance(cursor
, 24);
3303 ptvcursor_pop_subtree(cursor
);
3306 ptvcursor_pop_subtree(cursor
);
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
);
3373 ptvcursor_advance(cursor
, 44);
3375 ptvcursor_pop_subtree(cursor
);
3378 ptvcursor_pop_subtree(cursor
);
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
);
3394 ptvcursor_advance(cursor
, 16);
3396 ptvcursor_pop_subtree(cursor
);
3399 ptvcursor_pop_subtree(cursor
);
3401 ptvcursor_advance(cursor
, (dataCapCount
* 16));
3406 * Message: OpenMultiMediaReceiveChannelAckMessage
3408 * Type: MediaControl
3409 * Direction: dev2pbx
3414 handle_OpenMultiMediaReceiveChannelAckMessage(ptvcursor_t
*cursor
, packet_info
* pinfo _U_
, skinny_conv_info_t
* skinny_conv _U_
)
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
3442 * Direction: dev2pbx
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
3456 * Type: RegistrationAndManagement
3457 * Direction: dev2pbx
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
3473 * Type: RegistrationAndManagement
3474 * Direction: dev2pbx
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
3496 * Direction: pbx2pbx
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
3518 * Direction: pbx2pbx
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
3536 * Direction: pbx2pbx
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
3558 * Direction: pbx2pbx
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
3579 * Direction: pbx2pbx
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
);
3605 ptvcursor_advance(cursor
, 76);
3607 ptvcursor_pop_subtree(cursor
);
3610 ptvcursor_pop_subtree(cursor
);
3612 ptvcursor_advance(cursor
, (numberOfEntries
* 76));
3614 skinny_reqrep_add_response(cursor
, pinfo
, skinny_conv
, 0x013c);
3618 * Message: AuditParticipantResMessage
3621 * Direction: pbx2pbx
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
);
3643 ptvcursor_advance(cursor
, 4);
3646 ptvcursor_pop_subtree(cursor
);
3648 ptvcursor_advance(cursor
, (256 * 4));
3650 skinny_reqrep_add_response(cursor
, pinfo
, skinny_conv
, 0x013d ^ conferenceId
);
3654 * Message: DeviceToUserDataMessageVersion1
3656 * Type: RegistrationAndManagement
3657 * Direction: dev2pbx
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
3689 * Type: RegistrationAndManagement
3690 * Direction: dev2pbx
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
3722 * Type: RegistrationAndManagement
3723 * Direction: dev2pbx
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
);
3760 ptvcursor_advance(cursor
, 20);
3762 ptvcursor_pop_subtree(cursor
);
3765 ptvcursor_pop_subtree(cursor
);
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
);
3791 ptvcursor_advance(cursor
, 4);
3794 ptvcursor_pop_subtree(cursor
);
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
);
3803 ptvcursor_advance(cursor
, 24);
3805 ptvcursor_pop_subtree(cursor
);
3808 ptvcursor_pop_subtree(cursor
);
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
);
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);
3872 ptvcursor_advance(cursor
, 16);
3874 ptvcursor_pop_subtree(cursor
);
3877 ptvcursor_pop_subtree(cursor
);
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
);
3907 ptvcursor_advance(cursor
, 24);
3909 ptvcursor_pop_subtree(cursor
);
3912 ptvcursor_pop_subtree(cursor
);
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);
3995 ptvcursor_advance(cursor
, 60);
3997 ptvcursor_pop_subtree(cursor
);
4000 ptvcursor_pop_subtree(cursor
);
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
);
4016 ptvcursor_advance(cursor
, 16);
4018 ptvcursor_pop_subtree(cursor
);
4021 ptvcursor_pop_subtree(cursor
);
4023 ptvcursor_advance(cursor
, (dataCapCount
* 16));
4025 skinny_reqrep_add_response(cursor
, pinfo
, skinny_conv
, 0x009b);
4029 * Message: CapabilitiesV3ResMessage
4031 * Type: RegistrationAndManagement
4032 * Direction: dev2pbx
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
4311 ptvcursor_advance(cursor
, (dataCapCount
* 20));
4313 skinny_reqrep_add_response(cursor
, pinfo
, skinny_conv
, 0x009b);
4317 * Message: PortResMessage
4319 * Type: MediaControl
4320 * Direction: dev2pbx
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;
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
4358 * Direction: pbx2pbx
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
4388 * Direction: pbx2pbx
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
4423 * Direction: dev2pbx
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
4443 * Direction: dev2pbx
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
4458 * Direction: dev2pbx
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
4472 * Type: RegistrationAndManagement
4473 * Direction: pbx2pbx
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
4513 * Type: RegistrationAndManagement
4514 * Direction: pbx2dev
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
4552 * Type: MediaControl
4553 * Direction: pbx2dev
4558 handle_StartToneMessage(ptvcursor_t
*cursor
, packet_info
* pinfo _U_
, skinny_conv_info_t
* skinny_conv _U_
)
4560 si
->additionalInfo
= ws_strdup_printf("\"%s\"",
4562 tvb_get_letohl(ptvcursor_tvbuff(cursor
), ptvcursor_current_offset(cursor
)),
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
4577 * Type: MediaControl
4578 * Direction: pbx2dev
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
4600 * Direction: pbx2dev
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
4619 * Direction: pbx2dev
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
4635 * Direction: pbx2dev
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
4649 * Direction: pbx2dev
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
4662 * Type: MediaControl
4663 * Direction: pbx2dev
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
);
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
);
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
);
4739 ptvcursor_advance(cursor
, 1);
4742 ptvcursor_pop_subtree(cursor
);
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
);
4753 ptvcursor_advance(cursor
, 1);
4756 ptvcursor_pop_subtree(cursor
);
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
4817 * Type: MediaControl
4818 * Direction: pbx2dev
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
4837 * Direction: pbx2dev
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
4891 * Type: RegistrationAndManagement
4892 * Direction: pbx2dev
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
4917 * Type: RegistrationAndManagement
4918 * Direction: pbx2dev
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
4936 * Type: RegistrationAndManagement
4937 * Direction: pbx2dev
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
4957 * Type: RegistrationAndManagement
4958 * Direction: pbx2dev
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
4982 * Type: RegistrationAndManagement
4983 * Direction: pbx2dev
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
5010 * Direction: pbx2pbx
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
5025 * Direction: pbx2pbx
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
5039 * Type: RegistrationAndManagement
5040 * Direction: pbx2dev
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
);
5064 ptvcursor_advance(cursor
, 2);
5066 ptvcursor_pop_subtree(cursor
);
5069 ptvcursor_pop_subtree(cursor
);
5071 ptvcursor_advance(cursor
, (totalButtonCount
* 2));
5073 ptvcursor_pop_subtree(cursor
);
5075 skinny_reqrep_add_response(cursor
, pinfo
, skinny_conv
, 0x000e);
5079 * Message: VersionResMessage
5081 * Type: RegistrationAndManagement
5082 * Direction: pbx2dev
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
5097 * Direction: pbx2dev
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
5110 * Type: RegistrationAndManagement
5111 * Direction: pbx2dev
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
5124 * Type: RegistrationAndManagement
5125 * Direction: pbx2dev
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);
5182 * Type: RegistrationAndManagement
5183 * Direction: pbx2dev
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
5196 * Type: MediaControl
5197 * Direction: pbx2dev
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
);
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
5259 * Type: MediaControl
5260 * Direction: pbx2dev
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
);
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
5325 * Type: MediaControl
5326 * Direction: pbx2dev
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
5343 * Type: MediaControl
5344 * Direction: pbx2dev
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
5361 * Type: MediaControl
5362 * Direction: pbx2dev
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
);
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
);
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
);
5428 ptvcursor_advance(cursor
, 1);
5431 ptvcursor_pop_subtree(cursor
);
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
);
5442 ptvcursor_advance(cursor
, 1);
5445 ptvcursor_pop_subtree(cursor
);
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
5524 * Type: MediaControl
5525 * Direction: pbx2dev
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
5544 * Direction: pbx2dev
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
5570 * Type: RegistrationAndManagement
5571 * Direction: pbx2dev
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
);
5595 ptvcursor_advance(cursor
, 20);
5597 ptvcursor_pop_subtree(cursor
);
5600 ptvcursor_pop_subtree(cursor
);
5602 ptvcursor_advance(cursor
, (totalSoftKeyCount
* 20));
5604 ptvcursor_pop_subtree(cursor
);
5606 skinny_reqrep_add_response(cursor
, pinfo
, skinny_conv
, 0x0028);
5610 * Message: SoftKeySetResMessage
5612 * Type: RegistrationAndManagement
5613 * Direction: pbx2dev
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
);
5651 ptvcursor_advance(cursor
, 3);
5653 ptvcursor_pop_subtree(cursor
);
5656 ptvcursor_pop_subtree(cursor
);
5658 ptvcursor_advance(cursor
, (totalSoftKeySetCount
* 3));
5660 ptvcursor_pop_subtree(cursor
);
5662 skinny_reqrep_add_response(cursor
, pinfo
, skinny_conv
, 0x0025);
5666 * Message: SelectSoftKeysMessage
5668 * Type: RegistrationAndManagement
5669 * Direction: pbx2dev
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
5706 * Direction: pbx2dev
5711 handle_CallStateMessage(ptvcursor_t
*cursor
, packet_info
* pinfo _U_
, skinny_conv_info_t
* skinny_conv _U_
)
5713 si
->additionalInfo
= ws_strdup_printf("\"%s\"",
5715 tvb_get_letohl(ptvcursor_tvbuff(cursor
), ptvcursor_current_offset(cursor
)),
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
5738 * Direction: pbx2dev
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
5757 * Direction: pbx2dev
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
5774 * Direction: pbx2dev
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
5789 * Direction: pbx2dev
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
5803 * Type: RegistrationAndManagement
5804 * Direction: pbx2dev
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
5819 * Direction: pbx2dev
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
5835 * Type: RegistrationAndManagement
5836 * Direction: pbx2dev
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
5850 * Type: MediaControl
5851 * Direction: pbx2dev
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
);
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
5900 * Direction: pbx2dev
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
5939 * Type: RegistrationAndManagement
5940 * Direction: pbx2dev
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
5966 * Type: RegistrationAndManagement
5967 * Direction: pbx2dev
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
5986 * Type: RegistrationAndManagement
5987 * Direction: pbx2dev
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
6002 * Type: RegistrationAndManagement
6003 * Direction: pbx2dev
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
6017 * Direction: pbx2pbx
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
6054 * Direction: pbx2pbx
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
6068 * Direction: pbx2pbx
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
6083 * Direction: pbx2dev
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
6099 * Direction: pbx2dev
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
6115 * Direction: pbx2dev
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
6133 * Direction: pbx2dev
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
6152 * Direction: pbx2dev
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
6171 * Direction: pbx2dev
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
6191 * Direction: pbx2dev
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
6210 * Direction: pbx2dev
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
6228 * Type: RegistrationAndManagement
6229 * Direction: pbx2dev
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
6248 * Direction: pbx2dev
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
6265 * Type: MediaControl
6266 * Direction: pbx2dev
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
);
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
);
6354 ptvcursor_advance(cursor
, 8);
6356 ptvcursor_pop_subtree(cursor
);
6359 ptvcursor_pop_subtree(cursor
);
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
);
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
);
6470 ptvcursor_advance(cursor
, 1);
6473 ptvcursor_pop_subtree(cursor
);
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
);
6484 ptvcursor_advance(cursor
, 1);
6487 ptvcursor_pop_subtree(cursor
);
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
6516 * Type: MediaControl
6517 * Direction: pbx2dev
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
);
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
);
6600 ptvcursor_advance(cursor
, 8);
6602 ptvcursor_pop_subtree(cursor
);
6605 ptvcursor_pop_subtree(cursor
);
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
);
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
);
6716 ptvcursor_advance(cursor
, 1);
6719 ptvcursor_pop_subtree(cursor
);
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
);
6730 ptvcursor_advance(cursor
, 1);
6733 ptvcursor_pop_subtree(cursor
);
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
6749 * Type: MediaControl
6750 * Direction: pbx2dev
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
6769 * Direction: pbx2dev
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
);
6856 ptvcursor_advance(cursor
, 8);
6858 ptvcursor_pop_subtree(cursor
);
6861 ptvcursor_pop_subtree(cursor
);
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);
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
6886 * Direction: pbx2dev
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
6903 * Type: MediaControl
6904 * Direction: pbx2dev
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
6923 * Direction: pbx2pbx
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
6949 * Direction: pbx2pbx
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
6966 * Direction: pbx2pbx
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
6991 * Direction: pbx2pbx
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
7029 * Direction: pbx2pbx
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
7048 * Direction: pbx2pbx
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
7065 * Direction: pbx2pbx
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
7102 * Type: RegistrationAndManagement
7103 * Direction: pbx2dev
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
7134 * Type: MediaControl
7135 * Direction: pbx2dev
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
7152 * Direction: pbx2dev
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
7169 * Type: RegistrationAndManagement
7170 * Direction: pbx2dev
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
);
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
);
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
);
7204 ptvcursor_advance(cursor
, 1);
7206 skinny_reqrep_add_response(cursor
, pinfo
, skinny_conv
, 0x000c);
7210 * Message: DisplayNotifyV2Message
7212 * Type: RegistrationAndManagement
7213 * Direction: pbx2dev
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
7227 * Type: RegistrationAndManagement
7228 * Direction: pbx2dev
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
7244 * Direction: pbx2dev
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
7262 * Type: RegistrationAndManagement
7263 * Direction: pbx2dev
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
);
7278 ptvcursor_advance(cursor
, 1);
7280 skinny_reqrep_add_response(cursor
, pinfo
, skinny_conv
, 0x0034);
7284 * Message: LineStatV2ResMessage
7286 * Type: RegistrationAndManagement
7287 * Direction: pbx2dev
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
);
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
);
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
);
7323 ptvcursor_advance(cursor
, 1);
7325 skinny_reqrep_add_response(cursor
, pinfo
, skinny_conv
, 0x000b ^ lineNumber
);
7329 * Message: ServiceURLStatV2ResMessage
7331 * Type: RegistrationAndManagement
7332 * Direction: pbx2dev
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
7348 * Type: RegistrationAndManagement
7349 * Direction: pbx2dev
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
);
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
);
7371 ptvcursor_advance(cursor
, 1);
7373 skinny_reqrep_add_response(cursor
, pinfo
, skinny_conv
, 0x000a ^ speedDialNumber
);
7377 * Message: CallInfoV2Message
7380 * Direction: pbx2dev
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
7531 * Type: MediaControl
7532 * Direction: pbx2dev
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
7553 * Type: MediaControl
7554 * Direction: pbx2dev
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
7573 * Direction: pbx2pbx
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
7620 * Direction: pbx2pbx
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
7666 * Direction: pbx2pbx
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
7696 * Direction: pbx2pbx
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
7726 * Direction: pbx2pbx
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
7767 * Type: RegistrationAndManagement
7768 * Direction: pbx2dev
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
7787 * Type: RegistrationAndManagement
7788 * Direction: pbx2dev
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
7804 * Type: MediaControl
7805 * Direction: pbx2dev
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
7838 * Type: MediaControl
7839 * Direction: pbx2dev
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
7873 * Direction: pbx2dev
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
7890 * Type: RegistrationAndManagement
7891 * Direction: pbx2dev
7894 * Comment: Sent by wifi devices, contains xml information about connected SSID
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
7905 * Type: RegistrationAndManagement
7906 * Direction: pbx2pbx
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
7921 * Type: RegistrationAndManagement
7922 * Direction: dev2pbx
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
7938 * Type: RegistrationAndManagement
7939 * Direction: pbx2dev
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
7953 * Direction: pbx2pbx
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
);
7975 ptvcursor_advance(cursor
, 4);
7977 ptvcursor_pop_subtree(cursor
);
7980 ptvcursor_pop_subtree(cursor
);
7982 ptvcursor_advance(cursor
, (lineDataEntries
* 4));
7984 skinny_reqrep_add_response(cursor
, pinfo
, skinny_conv
, 0x015e);
7988 * Message: RecordingStatusMessage
7991 * Direction: pbx2dev
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
8006 * Type: RegistrationAndManagement
8007 * Direction: dev2pbx
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
8030 * Type: RegistrationAndManagement
8031 * Direction: pbx2dev
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
8045 * Type: RegistrationAndManagement
8046 * Direction: pbx2dev
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
{
8062 message_handler handler
;
8063 skinny_message_type_t type
;
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
;
8253 uint32_t hdr_data_length
;
8254 uint32_t hdr_version
;
8255 uint32_t hdr_opcode
;
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
);
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 */
8289 if (pi_current
== MAX_SKINNY_MESSAGES_IN_PACKET
)
8291 /* Overwrite info in first struct if run out of space... */
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)");
8299 si
->passThroughPartyId
= 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
);
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");
8326 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "SKINNY/RESP");
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
);
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 */
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)}
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)
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; */
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 */
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 */
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,
8414 { &hf_skinny_messageId
,
8416 "Message ID", "skinny.messageId", FT_UINT32
, BASE_DEC
|BASE_EXT_STRING
, &message_id_ext
, 0x0,
8418 { &hf_skinny_xmlData
,
8420 "XML data", "skinny.xmlData", FT_STRING
, BASE_NONE
, NULL
, 0x0,
8422 { &hf_skinny_ipv4or6
,
8424 "IPv4or6", "skinny.ipv4or6", FT_UINT32
, BASE_DEC
|BASE_EXT_STRING
, &IpAddrType_ext
, 0x0,
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,
8442 { &hf_skinny_CallingPartyNumber
,
8444 "CallingNum", "skinny.CallingPartyNumber", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000004,
8446 { &hf_skinny_DSCPValue
,
8448 "DSCPValue", "skinny.DSCPValue", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8450 { &hf_skinny_FutureUse1
,
8452 "FutureUse1", "skinny.FutureUse1", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8454 { &hf_skinny_FutureUse2
,
8456 "FutureUse2", "skinny.FutureUse2", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8458 { &hf_skinny_FutureUse3
,
8460 "FutureUse3", "skinny.FutureUse3", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
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
}},
8592 "MPI", "skinny.MPI", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8594 { &hf_skinny_OrigDialed
,
8596 "Originally Dialed", "skinny.OrigDialed", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000001,
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,
8666 { &hf_skinny_RTCPPortNumber
,
8668 "RTCPPortNumber", "skinny.RTCPPortNumber", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8670 { &hf_skinny_RedirDialed
,
8672 "Redirected Dialed", "skinny.RedirDialed", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000002,
8674 { &hf_skinny_RestrictInformationType_BitsReserved
,
8676 "BitsReserved", "skinny.RestrictInformationType.BitsReserved", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0xffffff00,
8678 { &hf_skinny_RestrictInformationType_CalledParty
,
8680 "CalledParty", "skinny.RestrictInformationType.CalledParty", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x0000000c,
8682 { &hf_skinny_RestrictInformationType_CalledPartyName
,
8684 "CalledPartyName", "skinny.RestrictInformationType.CalledPartyName", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000004,
8686 { &hf_skinny_RestrictInformationType_CalledPartyNumber
,
8688 "CalledPartyNumber", "skinny.RestrictInformationType.CalledPartyNumber", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000008,
8690 { &hf_skinny_RestrictInformationType_CallingParty
,
8692 "CallingParty", "skinny.RestrictInformationType.CallingParty", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000003,
8694 { &hf_skinny_RestrictInformationType_CallingPartyName
,
8696 "CallingPartyName", "skinny.RestrictInformationType.CallingPartyName", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000001,
8698 { &hf_skinny_RestrictInformationType_CallingPartyNumber
,
8700 "CallingPartyNumber", "skinny.RestrictInformationType.CallingPartyNumber", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000002,
8702 { &hf_skinny_RestrictInformationType_LastRedirectParty
,
8704 "LastRedirectParty", "skinny.RestrictInformationType.LastRedirectParty", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x000000c0,
8706 { &hf_skinny_RestrictInformationType_LastRedirectPartyName
,
8708 "LastRedirectPartyName", "skinny.RestrictInformationType.LastRedirectPartyName", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000040,
8710 { &hf_skinny_RestrictInformationType_LastRedirectPartyNumber
,
8712 "LastRedirectPartyNumber", "skinny.RestrictInformationType.LastRedirectPartyNumber", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000080,
8714 { &hf_skinny_RestrictInformationType_OriginalCalledParty
,
8716 "OriginalCalledParty", "skinny.RestrictInformationType.OriginalCalledParty", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000030,
8718 { &hf_skinny_RestrictInformationType_OriginalCalledPartyName
,
8720 "OriginalCalledPartyName", "skinny.RestrictInformationType.OriginalCalledPartyName", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000010,
8722 { &hf_skinny_RestrictInformationType_OriginalCalledPartyNumber
,
8724 "OriginalCalledPartyNumber", "skinny.RestrictInformationType.OriginalCalledPartyNumber", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000020,
8726 { &hf_skinny_SoftKeyMask_SoftKey1
,
8728 "SoftKey1", "skinny.SoftKeyMask.SoftKey1", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000001,
8730 { &hf_skinny_SoftKeyMask_SoftKey10
,
8732 "SoftKey10", "skinny.SoftKeyMask.SoftKey10", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000200,
8734 { &hf_skinny_SoftKeyMask_SoftKey11
,
8736 "SoftKey11", "skinny.SoftKeyMask.SoftKey11", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000400,
8738 { &hf_skinny_SoftKeyMask_SoftKey12
,
8740 "SoftKey12", "skinny.SoftKeyMask.SoftKey12", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000800,
8742 { &hf_skinny_SoftKeyMask_SoftKey13
,
8744 "SoftKey13", "skinny.SoftKeyMask.SoftKey13", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00001000,
8746 { &hf_skinny_SoftKeyMask_SoftKey14
,
8748 "SoftKey14", "skinny.SoftKeyMask.SoftKey14", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00002000,
8750 { &hf_skinny_SoftKeyMask_SoftKey15
,
8752 "SoftKey15", "skinny.SoftKeyMask.SoftKey15", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00004000,
8754 { &hf_skinny_SoftKeyMask_SoftKey16
,
8756 "SoftKey16", "skinny.SoftKeyMask.SoftKey16", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00008000,
8758 { &hf_skinny_SoftKeyMask_SoftKey2
,
8760 "SoftKey2", "skinny.SoftKeyMask.SoftKey2", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000002,
8762 { &hf_skinny_SoftKeyMask_SoftKey3
,
8764 "SoftKey3", "skinny.SoftKeyMask.SoftKey3", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000004,
8766 { &hf_skinny_SoftKeyMask_SoftKey4
,
8768 "SoftKey4", "skinny.SoftKeyMask.SoftKey4", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000008,
8770 { &hf_skinny_SoftKeyMask_SoftKey5
,
8772 "SoftKey5", "skinny.SoftKeyMask.SoftKey5", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000010,
8774 { &hf_skinny_SoftKeyMask_SoftKey6
,
8776 "SoftKey6", "skinny.SoftKeyMask.SoftKey6", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000020,
8778 { &hf_skinny_SoftKeyMask_SoftKey7
,
8780 "SoftKey7", "skinny.SoftKeyMask.SoftKey7", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000040,
8782 { &hf_skinny_SoftKeyMask_SoftKey8
,
8784 "SoftKey8", "skinny.SoftKeyMask.SoftKey8", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000080,
8786 { &hf_skinny_SoftKeyMask_SoftKey9
,
8788 "SoftKey9", "skinny.SoftKeyMask.SoftKey9", FT_BOOLEAN
, 32, TFS(&tfs_yes_no
), 0x00000100,
8790 { &hf_skinny_active
,
8792 "active", "skinny.active", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
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,
8814 { &hf_skinny_alarmInfo
,
8816 "alarmInfo", "skinny.alarmInfo", FT_STRING
, BASE_NONE
, NULL
, 0x0,
8818 { &hf_skinny_alignmentPadding
,
8820 "alignmentPadding", "skinny.alignmentPadding", FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8822 { &hf_skinny_annexNandWFutureUse
,
8824 "annexNandWFutureUse", "skinny.annexNandWFutureUse", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8826 { &hf_skinny_appInstanceID
,
8828 "appInstanceID", "skinny.appInstanceID", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8830 { &hf_skinny_applicationId
,
8832 "applicationId", "skinny.applicationId", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8834 { &hf_skinny_areMessagesWaiting
,
8836 "areMessagesWaiting", "skinny.areMessagesWaiting", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8838 { &hf_skinny_associatedStreamId
,
8840 "associatedStreamId", "skinny.associatedStreamId", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8842 { &hf_skinny_audioCapCount
,
8844 "audioCapCount", "skinny.audioCapCount", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8846 { &hf_skinny_audioLevelAdjustment
,
8848 "audioLevelAdjustment", "skinny.audioLevelAdjustment", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8850 { &hf_skinny_averageBitRate
,
8852 "averageBitRate", "skinny.averageBitRate", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8854 { &hf_skinny_bandwidth
,
8856 "bandwidth", "skinny.bandwidth", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8858 { &hf_skinny_bitRate
,
8860 "bitRate", "skinny.bitRate", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8862 { &hf_skinny_burstSize
,
8864 "burstSize", "skinny.burstSize", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8866 { &hf_skinny_busyTrigger
,
8868 "busyTrigger", "skinny.busyTrigger", FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8870 { &hf_skinny_buttonCount
,
8872 "buttonCount", "skinny.buttonCount", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8874 { &hf_skinny_buttonOffset
,
8876 "buttonOffset", "skinny.buttonOffset", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8878 { &hf_skinny_callInstance
,
8880 "callInstance", "skinny.callInstance", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8882 { &hf_skinny_callReference
,
8884 "callReference", "skinny.callReference", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8886 { &hf_skinny_callSelectStat
,
8888 "callSelectStat", "skinny.callSelectStat", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8890 { &hf_skinny_capAndVer
,
8892 "capAndVer", "skinny.capAndVer", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8894 { &hf_skinny_capCount
,
8896 "capCount", "skinny.capCount", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8898 { &hf_skinny_chan0MaxPayload
,
8900 "chan0MaxPayload", "skinny.chan0MaxPayload", FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8902 { &hf_skinny_chan2MaxPayload
,
8904 "chan2MaxPayload", "skinny.chan2MaxPayload", FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8906 { &hf_skinny_chan2MaxWindow
,
8908 "chan2MaxWindow", "skinny.chan2MaxWindow", FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8910 { &hf_skinny_chan3MaxPayload
,
8912 "chan3MaxPayload", "skinny.chan3MaxPayload", FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8914 { &hf_skinny_clockConversionCode
,
8916 "clockConversionCode", "skinny.clockConversionCode", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8918 { &hf_skinny_clockDivisor
,
8920 "clockDivisor", "skinny.clockDivisor", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8922 { &hf_skinny_codecMode
,
8924 "codecMode", "skinny.codecMode", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8926 { &hf_skinny_codecParam1
,
8928 "codecParam1", "skinny.codecParam1", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8930 { &hf_skinny_codecParam2
,
8932 "codecParam2", "skinny.codecParam2", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8934 { &hf_skinny_confServiceNum
,
8936 "confServiceNum", "skinny.confServiceNum", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
8946 { &hf_skinny_country
,
8948 "country", "skinny.country", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8950 { &hf_skinny_customMaxBRandCPB
,
8952 "customMaxBRandCPB", "skinny.customMaxBRandCPB", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8954 { &hf_skinny_customMaxDPB
,
8956 "customMaxDPB", "skinny.customMaxDPB", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8958 { &hf_skinny_customMaxFS
,
8960 "customMaxFS", "skinny.customMaxFS", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8962 { &hf_skinny_customMaxMBPS
,
8964 "customMaxMBPS", "skinny.customMaxMBPS", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8966 { &hf_skinny_customPictureFormatCount
,
8968 "customPictureFormatCount", "skinny.customPictureFormatCount", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8970 { &hf_skinny_dataCapCount
,
8972 "dataCapCount", "skinny.dataCapCount", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8974 { &hf_skinny_dataLength
,
8976 "dataLength", "skinny.dataLength", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
8986 { &hf_skinny_displayPriority
,
8988 "displayPriority", "skinny.displayPriority", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8990 { &hf_skinny_dtmfType
,
8992 "dtmfType", "skinny.dtmfType", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8994 { &hf_skinny_dynamicPayload
,
8996 "dynamicPayload", "skinny.dynamicPayload", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8998 { &hf_skinny_failureNodeIpAddr
,
9000 "failureNodeIpAddr", "skinny.failureNodeIpAddr", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9002 { &hf_skinny_featureCapabilities
,
9004 "featureCapabilities", "skinny.featureCapabilities", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9006 { &hf_skinny_featureIndex
,
9008 "featureIndex", "skinny.featureIndex", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9010 { &hf_skinny_featureStatus
,
9012 "featureStatus", "skinny.featureStatus", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9014 { &hf_skinny_features
,
9016 "features", "skinny.features", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9018 { &hf_skinny_firstGOB
,
9020 "firstGOB", "skinny.firstGOB", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9022 { &hf_skinny_firstMB
,
9024 "firstMB", "skinny.firstMB", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9026 { &hf_skinny_format
,
9028 "format", "skinny.format", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9030 { &hf_skinny_forwardAllActive
,
9032 "forwardAllActive", "skinny.forwardAllActive", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9034 { &hf_skinny_forwardBusyActive
,
9036 "forwardBusyActive", "skinny.forwardBusyActive", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9038 { &hf_skinny_forwardNoAnswerActive
,
9040 "forwardNoAnswerActive", "skinny.forwardNoAnswerActive", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9042 { &hf_skinny_hearingConfPartyMask
,
9044 "hearingConfPartyMask", "skinny.hearingConfPartyMask", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9054 { &hf_skinny_ipAddr_ipv4
,
9056 "ipAddr IPv4 Address", "skinny.ipAddr.ipv4", FT_IPv4
, BASE_NONE
, NULL
, 0x0,
9058 { &hf_skinny_ipAddr_ipv6
,
9060 "ipAddr IPv6 Address", "skinny.ipAddr.ipv6", FT_IPv6
, BASE_NONE
, NULL
, 0x0,
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,
9074 { &hf_skinny_isMKIPresent
,
9076 "isMKIPresent", "skinny.isMKIPresent", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9088 "key", "skinny.key", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9090 { &hf_skinny_keyDerivationRate
,
9092 "keyDerivationRate", "skinny.keyDerivationRate", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9094 { &hf_skinny_keylen
,
9096 "keylen", "skinny.keylen", FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9100 "last", "skinny.last", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9114 { &hf_skinny_layoutID
,
9116 "layoutID", "skinny.layoutID", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9120 "level", "skinny.level", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9122 { &hf_skinny_levelPreferenceCount
,
9124 "levelPreferenceCount", "skinny.levelPreferenceCount", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9134 { &hf_skinny_lineInstance
,
9136 "lineInstance", "skinny.lineInstance", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9138 { &hf_skinny_lineNumber
,
9140 "lineNumber", "skinny.lineNumber", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9142 { &hf_skinny_locale
,
9144 "locale", "skinny.locale", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9146 { &hf_skinny_longTermPictureIndex
,
9148 "longTermPictureIndex", "skinny.longTermPictureIndex", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9160 "maxBW", "skinny.maxBW", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9162 { &hf_skinny_maxBitRate
,
9164 "maxBitRate", "skinny.maxBitRate", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9174 { &hf_skinny_maxNumCalls
,
9176 "maxNumCalls", "skinny.maxNumCalls", FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9178 { &hf_skinny_maxNumOfAvailLines
,
9180 "maxNumOfAvailLines", "skinny.maxNumOfAvailLines", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9190 { &hf_skinny_maxRetryNumber
,
9192 "maxRetryNumber", "skinny.maxRetryNumber", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9202 { &hf_skinny_maximumBitRate
,
9204 "maximumBitRate", "skinny.maximumBitRate", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9206 { &hf_skinny_milliSecondPacketSize
,
9208 "milliSecondPacketSize", "skinny.milliSecondPacketSize", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9210 { &hf_skinny_minBitRate
,
9212 "minBitRate", "skinny.minBitRate", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9214 { &hf_skinny_mixingMode
,
9216 "mixingMode", "skinny.mixingMode", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9218 { &hf_skinny_modAnd2833
,
9220 "modAnd2833", "skinny.modAnd2833", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9222 { &hf_skinny_modelNumber
,
9224 "modelNumber", "skinny.modelNumber", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9238 { &hf_skinny_noaudio
,
9240 "noaudio", "skinny.noaudio", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9244 "none", "skinny.none", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9246 { &hf_skinny_notificationStatus
,
9248 "notificationStatus", "skinny.notificationStatus", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9252 "nse", "skinny.nse", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9254 { &hf_skinny_numNewMsgs
,
9256 "numNewMsgs", "skinny.numNewMsgs", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9258 { &hf_skinny_numOldMsgs
,
9260 "numOldMsgs", "skinny.numOldMsgs", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9274 { &hf_skinny_numberOfEntries
,
9276 "numberOfEntries", "skinny.numberOfEntries", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9278 { &hf_skinny_numberOfGOBs
,
9280 "numberOfGOBs", "skinny.numberOfGOBs", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9282 { &hf_skinny_numberOfInServiceStreams
,
9284 "numberOfInServiceStreams", "skinny.numberOfInServiceStreams", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9286 { &hf_skinny_numberOfLines
,
9288 "numberOfLines", "skinny.numberOfLines", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9290 { &hf_skinny_numberOfMBs
,
9292 "numberOfMBs", "skinny.numberOfMBs", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9294 { &hf_skinny_numberOfOutOfServiceStreams
,
9296 "numberOfOutOfServiceStreams", "skinny.numberOfOutOfServiceStreams", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9298 { &hf_skinny_numberOfReservedParticipants
,
9300 "numberOfReservedParticipants", "skinny.numberOfReservedParticipants", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9302 { &hf_skinny_numberOfSpeedDials
,
9304 "numberOfSpeedDials", "skinny.numberOfSpeedDials", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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
}},
9328 "parm1", "skinny.parm1", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9332 "parm2", "skinny.parm2", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9334 { &hf_skinny_participantEntry
,
9336 "participantEntry", "skinny.participantEntry", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9338 { &hf_skinny_partyDirection
,
9340 "partyDirection", "skinny.partyDirection", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9350 { &hf_skinny_payloadDtmf
,
9352 "payloadDtmf", "skinny.payloadDtmf", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9354 { &hf_skinny_payloadType
,
9356 "payloadType", "skinny.payloadType", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9358 { &hf_skinny_payload_rfc_number
,
9360 "payload_rfc_number", "skinny.payload.rfc.number", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9362 { &hf_skinny_peakRate
,
9364 "peakRate", "skinny.peakRate", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9366 { &hf_skinny_pictureFormatCount
,
9368 "pictureFormatCount", "skinny.pictureFormatCount", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9370 { &hf_skinny_pictureHeight
,
9372 "pictureHeight", "skinny.pictureHeight", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9374 { &hf_skinny_pictureNumber
,
9376 "pictureNumber", "skinny.pictureNumber", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9378 { &hf_skinny_pictureWidth
,
9380 "pictureWidth", "skinny.pictureWidth", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9382 { &hf_skinny_pixelAspectRatio
,
9384 "pixelAspectRatio", "skinny.pixelAspectRatio", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9386 { &hf_skinny_portNumber
,
9388 "portNumber", "skinny.portNumber", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9402 { &hf_skinny_preemptionPriority
,
9404 "preemptionPriority", "skinny.preemptionPriority", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9406 { &hf_skinny_priority
,
9408 "priority", "skinny.priority", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9410 { &hf_skinny_profile
,
9412 "profile", "skinny.profile", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9414 { &hf_skinny_protocolDependentData
,
9416 "protocolDependentData", "skinny.protocolDependentData", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
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,
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,
9446 { &hf_skinny_rfc2833
,
9448 "rfc2833", "skinny.rfc2833", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9450 { &hf_skinny_routingID
,
9452 "routingID", "skinny.routingID", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9454 { &hf_skinny_rsvpErrorFlag
,
9456 "rsvpErrorFlag", "skinny.rsvpErrorFlag", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9458 { &hf_skinny_rsvpErrorSubCodeVal
,
9460 "rsvpErrorSubCodeVal", "skinny.rsvpErrorSubCodeVal", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9472 "salt", "skinny.salt", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9474 { &hf_skinny_saltlen
,
9476 "saltlen", "skinny.saltlen", FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9478 { &hf_skinny_secondaryKeepAliveInterval
,
9480 "secondaryKeepAliveInterval", "skinny.secondaryKeepAliveInterval", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9482 { &hf_skinny_serverTcpListenPort
,
9484 "serverTcpListenPort", "skinny.serverTcpListenPort", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9486 { &hf_skinny_serviceNum
,
9488 "serviceNum", "skinny.serviceNum", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9490 { &hf_skinny_serviceNumber
,
9492 "serviceNumber", "skinny.serviceNumber", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9494 { &hf_skinny_serviceResourceCount
,
9496 "serviceResourceCount", "skinny.serviceResourceCount", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9498 { &hf_skinny_serviceURLIndex
,
9500 "serviceURLIndex", "skinny.serviceURLIndex", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9502 { &hf_skinny_softKeyCount
,
9504 "softKeyCount", "skinny.softKeyCount", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9506 { &hf_skinny_softKeyOffset
,
9508 "softKeyOffset", "skinny.softKeyOffset", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9510 { &hf_skinny_softKeySetCount
,
9512 "softKeySetCount", "skinny.softKeySetCount", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9514 { &hf_skinny_softKeySetOffset
,
9516 "softKeySetOffset", "skinny.softKeySetOffset", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9518 { &hf_skinny_sourceIpAddr_ipv4
,
9520 "sourceIpAddr IPv4 Address", "skinny.sourceIpAddr.ipv4", FT_IPv4
, BASE_NONE
, NULL
, 0x0,
9522 { &hf_skinny_sourceIpAddr_ipv6
,
9524 "sourceIpAddr IPv6 Address", "skinny.sourceIpAddr.ipv6", FT_IPv6
, BASE_NONE
, NULL
, 0x0,
9526 { &hf_skinny_sourcePortNumber
,
9528 "sourcePortNumber", "skinny.sourcePortNumber", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9530 { &hf_skinny_speedDialNumber
,
9532 "speedDialNumber", "skinny.speedDialNumber", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9536 "sse", "skinny.sse", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9538 { &hf_skinny_standard
,
9540 "standard", "skinny.standard", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9566 { &hf_skinny_stationIpV6Addr_ipv6
,
9568 "stationIpV6Addr IPv6 Address", "skinny.stationIpV6Addr.ipv6", FT_IPv6
, BASE_NONE
, NULL
, 0x0,
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,
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,
9586 { &hf_skinny_systemTime
,
9588 "systemTime", "skinny.systemTime", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9590 { &hf_skinny_temporalSpatialTradeOff
,
9592 "temporalSpatialTradeOff", "skinny.temporalSpatialTradeOff", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9604 "timer", "skinny.timer", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9606 { &hf_skinny_totalButtonCount
,
9608 "totalButtonCount", "skinny.totalButtonCount", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
9618 { &hf_skinny_totalSoftKeySetCount
,
9620 "totalSoftKeySetCount", "skinny.totalSoftKeySetCount", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9622 { &hf_skinny_transactionId
,
9624 "transactionId", "skinny.transactionId", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
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,
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,
9646 { &hf_skinny_unknown2_0159
,
9648 "unknown2_0159", "skinny.unknown2.0159", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9650 { &hf_skinny_unknown3_0159
,
9652 "unknown3_0159", "skinny.unknown3.0159", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9654 { &hf_skinny_v150sprt
,
9656 "v150sprt", "skinny.v150sprt", FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9658 { &hf_skinny_vendor
,
9660 "vendor", "skinny.vendor", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9662 { &hf_skinny_videoCapCount
,
9664 "videoCapCount", "skinny.videoCapCount", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9668 "wDay", "skinny.wDay", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9670 { &hf_skinny_wDayOfWeek
,
9672 "wDayOfWeek", "skinny.wDayOfWeek", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9676 "wHour", "skinny.wHour", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9678 { &hf_skinny_wMilliseconds
,
9680 "wMilliseconds", "skinny.wMilliseconds", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9682 { &hf_skinny_wMinute
,
9684 "wMinute", "skinny.wMinute", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9686 { &hf_skinny_wMonth
,
9688 "wMonth", "skinny.wMonth", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9690 { &hf_skinny_wSecond
,
9692 "wSecond", "skinny.wSecond", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9696 "wYear", "skinny.wYear", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9698 { &hf_skinny_waitTimeBeforeNextReq
,
9700 "waitTimeBeforeNextReq", "skinny.waitTimeBeforeNextReq", FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9702 { &hf_skinny_xmldata
,
9704 "xmldata", "skinny.xmldata", FT_STRING
, BASE_NONE
, NULL
, 0x0,
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,
9718 {&hf_skinny_HuntPilotNumber
,
9720 "HuntPilotNumber", "skinny.HuntPilotNumber", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9722 {&hf_skinny_ServerName
,
9724 "ServerName", "skinny.ServerName", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9726 {&hf_skinny_add_participant_result
,
9728 "add_participant_result", "skinny.add.participant.result", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &AddParticipantResult_ext
, 0x0,
9730 {&hf_skinny_alarmSeverity
,
9732 "alarmSeverity", "skinny.alarmSeverity", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &DeviceAlarmSeverity_ext
, 0x0,
9734 {&hf_skinny_algorithmID
,
9736 "algorithmID", "skinny.algorithmID", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &MediaEncryptionAlgorithmType_ext
, 0x0,
9738 {&hf_skinny_annAckReq
,
9740 "annAckReq", "skinny.annAckReq", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &EndOfAnnAck_ext
, 0x0,
9742 {&hf_skinny_annPlayMode
,
9744 "annPlayMode", "skinny.annPlayMode", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &AnnPlayMode_ext
, 0x0,
9746 {&hf_skinny_annStatus
,
9748 "annStatus", "skinny.annStatus", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &PlayAnnStatus_ext
, 0x0,
9750 {&hf_skinny_appConfID
,
9752 "appConfID", "skinny.appConfID", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9754 {&hf_skinny_appData
,
9756 "appData", "skinny.appData", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9758 {&hf_skinny_appName
,
9760 "appName", "skinny.appName", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9762 {&hf_skinny_audit_participant_result
,
9764 "audit_participant_result", "skinny.audit.participant.result", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &AuditParticipantResult_ext
, 0x0,
9766 {&hf_skinny_bridgeParticipantId
,
9768 "bridgeParticipantId", "skinny.bridgeParticipantId", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9770 {&hf_skinny_buttonDefinition
,
9772 "buttonDefinition", "skinny.buttonDefinition", FT_UINT8
, BASE_HEX
| BASE_EXT_STRING
, &ButtonType_ext
, 0x0,
9774 {&hf_skinny_callHistoryDisposition
,
9776 "callHistoryDisposition", "skinny.callHistoryDisposition", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &CallHistoryDisposition_ext
, 0x0,
9778 {&hf_skinny_callSecurityStatus
,
9780 "callSecurityStatus", "skinny.callSecurityStatus", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &CallSecurityStatusType_ext
, 0x0,
9782 {&hf_skinny_callState
,
9784 "callState", "skinny.callState", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &DCallState_ext
, 0x0,
9786 {&hf_skinny_callType
,
9788 "callType", "skinny.callType", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &CallType_ext
, 0x0,
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
}},
9812 "cause", "skinny.cause", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &SubscribeCause_ext
, 0x0,
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,
9826 {&hf_skinny_compressionType
,
9828 "compressionType", "skinny.compressionType", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &Media_PayloadType_ext
, 0x0,
9830 {&hf_skinny_conferenceName
,
9832 "conferenceName", "skinny.conferenceName", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9834 {&hf_skinny_configVersionStamp
,
9836 "configVersionStamp", "skinny.configVersionStamp", FT_STRING
, BASE_NONE
, NULL
, 0x0,
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,
9846 {&hf_skinny_dateTemplate
,
9848 "dateTemplate", "skinny.dateTemplate", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9850 {&hf_skinny_delete_conf_result
,
9852 "delete_conf_result", "skinny.delete.conf.result", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &DeleteConfResult_ext
, 0x0,
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,
9862 {&hf_skinny_direction
,
9864 "direction", "skinny.direction", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &RSVPDirection_ext
, 0x0,
9866 {&hf_skinny_directoryNum
,
9868 "directoryNum", "skinny.directoryNum", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9870 {&hf_skinny_ecValue
,
9872 "ecValue", "skinny.ecValue", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &Media_EchoCancellation_ext
, 0x0,
9874 {&hf_skinny_encryptionCapability
,
9876 "encryptionCapability", "skinny.encryptionCapability", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &Media_Encryption_Capability_ext
, 0x0,
9878 {&hf_skinny_errorCode
,
9880 "errorCode", "skinny.errorCode", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &QoSErrorCode_ext
, 0x0,
9882 {&hf_skinny_featureID
,
9884 "featureID", "skinny.featureID", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &ButtonType_ext
, 0x0,
9886 {&hf_skinny_featureTextLabel
,
9888 "featureTextLabel", "skinny.featureTextLabel", FT_STRING
, BASE_NONE
, NULL
, 0x0,
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,
9898 {&hf_skinny_forwardBusyDirnum
,
9900 "forwardBusyDirnum", "skinny.forwardBusyDirnum", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9902 {&hf_skinny_forwardNoAnswerlDirnum
,
9904 "forwardNoAnswerlDirnum", "skinny.forwardNoAnswerlDirnum", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9906 {&hf_skinny_g723BitRate
,
9908 "g723BitRate", "skinny.g723BitRate", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &Media_G723BitRate_ext
, 0x0,
9910 {&hf_skinny_headsetStatus
,
9912 "headsetStatus", "skinny.headsetStatus", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &HeadsetMode_ext
, 0x0,
9914 {&hf_skinny_ipAddressType
,
9916 "ipAddressType", "skinny.ipAddressType", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &IpAddrType_ext
, 0x0,
9918 {&hf_skinny_ipAddressingMode
,
9920 "ipAddressingMode", "skinny.ipAddressingMode", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &IpAddrMode_ext
, 0x0,
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,
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,
9946 {&hf_skinny_lineDirNumber
,
9948 "lineDirNumber", "skinny.lineDirNumber", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9950 {&hf_skinny_lineFullyQualifiedDisplayName
,
9952 "lineFullyQualifiedDisplayName", "skinny.lineFullyQualifiedDisplayName", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9954 {&hf_skinny_lineTextLabel
,
9956 "lineTextLabel", "skinny.lineTextLabel", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9958 {&hf_skinny_locationInfo
,
9960 "locationInfo", "skinny.locationInfo", FT_STRING
, BASE_NONE
, NULL
, 0x0,
9962 {&hf_skinny_mediaPathCapabilities
,
9964 "mediaPathCapabilities", "skinny.mediaPathCapabilities", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &MediaPathCapabilities_ext
, 0x0,
9966 {&hf_skinny_mediaPathEvent
,
9968 "mediaPathEvent", "skinny.mediaPathEvent", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &MediaPathEvent_ext
, 0x0,
9970 {&hf_skinny_mediaPathID
,
9972 "mediaPathID", "skinny.mediaPathID", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &MediaPathID_ext
, 0x0,
9974 {&hf_skinny_mediaReceptionStatus
,
9976 "mediaReceptionStatus", "skinny.mediaReceptionStatus", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &MediaStatus_ext
, 0x0,
9978 {&hf_skinny_mediaTransmissionStatus
,
9980 "mediaTransmissionStatus", "skinny.mediaTransmissionStatus", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &MediaStatus_ext
, 0x0,
9982 {&hf_skinny_mediaTransportType
,
9984 "mediaTransportType", "skinny.mediaTransportType", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &MediaTransportType_ext
, 0x0,
9986 {&hf_skinny_mediaType
,
9988 "mediaType", "skinny.mediaType", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &MediaType_ext
, 0x0,
9990 {&hf_skinny_micMode
,
9992 "micMode", "skinny.micMode", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &MicrophoneMode_ext
, 0x0,
9994 {&hf_skinny_modify_conf_result
,
9996 "modify_conf_result", "skinny.modify.conf.result", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &ModifyConfResult_ext
, 0x0,
9998 {&hf_skinny_multicastReceptionStatus
,
10000 "multicastReceptionStatus", "skinny.multicastReceptionStatus", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &MulticastMediaReceptionStatus_ext
, 0x0,
10002 {&hf_skinny_multimediaReceptionStatus
,
10004 "multimediaReceptionStatus", "skinny.multimediaReceptionStatus", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &OpenReceiveChanStatus_ext
, 0x0,
10006 {&hf_skinny_multimediaTransmissionStatus
,
10008 "multimediaTransmissionStatus", "skinny.multimediaTransmissionStatus", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &MediaStatus_ext
, 0x0,
10010 {&hf_skinny_mwiControlNumber
,
10012 "mwiControlNumber", "skinny.mwiControlNumber", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10014 {&hf_skinny_mwiTargetNumber
,
10016 "mwiTargetNumber", "skinny.mwiTargetNumber", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10018 {&hf_skinny_mwi_notification_result
,
10020 "mwi_notification_result", "skinny.mwi.notification.result", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &MwiNotificationResult_ext
, 0x0,
10022 {&hf_skinny_notify
,
10024 "notify", "skinny.notify", FT_STRING
, BASE_NONE
, NULL
, 0x0,
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,
10042 {&hf_skinny_participantNumber
,
10044 "participantNumber", "skinny.participantNumber", FT_STRING
, BASE_NONE
, NULL
, 0x0,
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,
10054 {&hf_skinny_portHandlingFlag
,
10056 "portHandlingFlag", "skinny.portHandlingFlag", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &PortHandling_ext
, 0x0,
10058 {&hf_skinny_privacy
,
10060 "privacy", "skinny.privacy", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &CallPrivacy_ext
, 0x0,
10062 {&hf_skinny_promptStatus
,
10064 "promptStatus", "skinny.promptStatus", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10066 {&hf_skinny_recording_status
,
10068 "recording_status", "skinny.recording.status", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &RecordingStatus_ext
, 0x0,
10070 {&hf_skinny_requestedIpAddrType
,
10072 "requestedIpAddrType", "skinny.requestedIpAddrType", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &IpAddrType_ext
, 0x0,
10074 {&hf_skinny_resetType
,
10076 "resetType", "skinny.resetType", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &DeviceResetType_ext
, 0x0,
10078 {&hf_skinny_resourceType
,
10080 "resourceType", "skinny.resourceType", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &ResourceType_ext
, 0x0,
10082 {&hf_skinny_result
,
10084 "result", "skinny.result", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &CreateConfResult_ext
, 0x0,
10086 {&hf_skinny_resvStyle
,
10088 "resvStyle", "skinny.resvStyle", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &ResvStyle_ext
, 0x0,
10090 {&hf_skinny_ringDuration
,
10092 "ringDuration", "skinny.ringDuration", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &RingDuration_ext
, 0x0,
10094 {&hf_skinny_ringMode
,
10096 "ringMode", "skinny.ringMode", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &RingMode_ext
, 0x0,
10098 {&hf_skinny_rsvpErrorCode
,
10100 "rsvpErrorCode", "skinny.rsvpErrorCode", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &RSVPErrorCode_ext
, 0x0,
10102 {&hf_skinny_sequenceFlag
,
10104 "sequenceFlag", "skinny.sequenceFlag", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &SequenceFlag_ext
, 0x0,
10106 {&hf_skinny_serverName
,
10108 "serverName", "skinny.serverName", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10110 {&hf_skinny_serviceURL
,
10112 "serviceURL", "skinny.serviceURL", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10114 {&hf_skinny_serviceURLDisplayName
,
10116 "serviceURLDisplayName", "skinny.serviceURLDisplayName", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10118 {&hf_skinny_sessionType
,
10120 "sessionType", "skinny.sessionType", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &SessionType_ext
, 0x0,
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,
10130 {&hf_skinny_softKeyLabel
,
10132 "softKeyLabel", "skinny.softKeyLabel", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10134 {&hf_skinny_softKeySetIndex
,
10136 "softKeySetIndex", "skinny.softKeySetIndex", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &SoftKeySet_ext
, 0x0,
10138 {&hf_skinny_softKeyTemplateIndex
,
10140 "softKeyTemplateIndex", "skinny.softKeyTemplateIndex", FT_UINT8
, BASE_HEX
| BASE_EXT_STRING
, &SoftKeyTemplateIndex_ext
, 0x0,
10142 {&hf_skinny_speakerMode
,
10144 "speakerMode", "skinny.speakerMode", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &SpeakerMode_ext
, 0x0,
10146 {&hf_skinny_speedDialDirNumber
,
10148 "speedDialDirNumber", "skinny.speedDialDirNumber", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10150 {&hf_skinny_speedDialDisplayName
,
10152 "speedDialDisplayName", "skinny.speedDialDisplayName", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10154 {&hf_skinny_ssValue
,
10156 "ssValue", "skinny.ssValue", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &Media_SilenceSuppression_ext
, 0x0,
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,
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,
10174 {&hf_skinny_subscriptionFeatureID
,
10176 "subscriptionFeatureID", "skinny.subscriptionFeatureID", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &SubscriptionFeatureID_ext
, 0x0,
10178 {&hf_skinny_subscriptionID
,
10180 "subscriptionID", "skinny.subscriptionID", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10184 "text", "skinny.text", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10188 "tone", "skinny.tone", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &DeviceTone_ext
, 0x0,
10190 {&hf_skinny_toneAnnouncement
,
10192 "toneAnnouncement", "skinny.toneAnnouncement", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &DeviceTone_ext
, 0x0,
10194 {&hf_skinny_tone_output_direction
,
10196 "tone_output_direction", "skinny.tone.output.direction", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &ToneOutputDirection_ext
, 0x0,
10198 {&hf_skinny_unRegReasonCode
,
10200 "unRegReasonCode", "skinny.unRegReasonCode", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &UnRegReasonCode_ext
, 0x0,
10202 {&hf_skinny_unknownString_0159
,
10204 "unknownString_0159", "skinny.unknownString.0159", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10206 {&hf_skinny_userName
,
10208 "userName", "skinny.userName", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10210 {&hf_skinny_vendorID
,
10212 "vendorID", "skinny.vendorID", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10214 {&hf_skinny_version
,
10216 "version", "skinny.version", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10218 {&hf_skinny_versionStr
,
10220 "versionStr", "skinny.versionStr", FT_STRING
, BASE_NONE
, NULL
, 0x0,
10222 {&hf_skinny_videoCapabilityDirection
,
10224 "videoCapabilityDirection", "skinny.videoCapabilityDirection", FT_UINT32
, BASE_HEX
| BASE_EXT_STRING
, &TransmitOrReceive_ext
, 0x0,
10228 /* Setup protocol subtree array */
10229 static int *ett
[] = {
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");
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
10270 * c-basic-offset: 2
10272 * indent-tabs-mode: nil
10275 * vi: set shiftwidth=2 tabstop=8 expandtab:
10276 * :indentSize=2:tabSize=8:noTabs=true: