Skinny: fix dissector registration for SSL
[metze/wireshark/wip.git] / epan / dissectors / packet-skinny.c
1 /* Do not modify this file. Changes will be overwritten */
2 /* Generated Automatically                              */
3 /* packet-skinny.c                                      */
4
5 /* packet-skinny.c
6  * Dissector for the Skinny Client Control Protocol
7  *   (The "D-Channel"-Protocol for Cisco Systems' IP-Phones)
8  *
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
19  *
20  * This program is free software; you can redistribute it and/or
21  * modify it under the terms of the GNU General Public License
22  * as published by the Free Software Foundation; either version 2
23  * of the License, or (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
28  * GNU General Public License for more details.
29  *
30  * You should have received a copy of the GNU General Public License
31  * along with this program; if not, write to the Free Software
32  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
33  */
34
35 /*
36  * Generated Automatically Using (from wireshark base directory):
37  *   cog.py -D xmlfile=tools/SkinnyProtocolOptimized.xml -d -c -o epan/dissectors/packet-skinny.c epan/dissectors/packet-skinny.c.in
38  */
39
40 /* c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil
41  * vi: set shiftwidth=2 tabstop=2 expandtab:
42  * :indentSize=2:tabSize=2:noTabs=true:
43  */
44
45 #include "config.h"
46
47 #include <epan/packet.h>
48 #include <epan/prefs.h>
49 #include <epan/tap.h>
50 #include <epan/ptvcursor.h>
51
52 #include "packet-rtp.h"
53 #include "packet-tcp.h"
54 #include "packet-ssl.h"
55 #include "packet-skinny.h"
56
57 void proto_register_skinny(void);
58 void proto_reg_handoff_skinny(void);
59
60
61 #define TCP_PORT_SKINNY 2000
62 #define SSL_PORT_SKINNY 2443 /* IANA assigned to PowerClient Central Storage Facility */
63
64 #define BASIC_MSG_TYPE 0x00
65 #define V10_MSG_TYPE 0x0A
66 #define V11_MSG_TYPE 0x0B
67 #define V15_MSG_TYPE 0x0F
68 #define V16_MSG_TYPE 0x10
69 #define V17_MSG_TYPE 0x11
70 #define V18_MSG_TYPE 0x12
71 #define V19_MSG_TYPE 0x13
72 #define V20_MSG_TYPE 0x14
73 #define V21_MSG_TYPE 0x15
74 #define V22_MSG_TYPE 0x16
75
76 static const value_string header_version[] = {
77   { BASIC_MSG_TYPE, "Basic" },
78   { V10_MSG_TYPE,   "V10" },
79   { V11_MSG_TYPE,   "V11" },
80   { V15_MSG_TYPE,   "V15" },
81   { V16_MSG_TYPE,   "V16" },
82   { V17_MSG_TYPE,   "V17" },
83   { V18_MSG_TYPE,   "V18" },
84   { V19_MSG_TYPE,   "V19" },
85   { V20_MSG_TYPE,   "V20" },
86   { V21_MSG_TYPE,   "V21" },
87   { V22_MSG_TYPE,   "V22" },
88   { 0             , NULL }
89 };
90
91 /* Declare MessageId */
92 static const value_string  message_id[] = {
93   { 0x0000, "KeepAlive" },
94   { 0x0001, "Register" },
95   { 0x0002, "IpPort" },
96   { 0x0003, "KeypadButton" },
97   { 0x0004, "EnblocCall" },
98   { 0x0005, "Stimulus" },
99   { 0x0006, "OffHook" },
100   { 0x0007, "OnHook" },
101   { 0x0008, "HookFlash" },
102   { 0x0009, "ForwardStatReq" },
103   { 0x000a, "SpeedDialStatReq" },
104   { 0x000b, "LineStatReq" },
105   { 0x000c, "ConfigStatReq" },
106   { 0x000d, "TimeDateReq" },
107   { 0x000e, "ButtonTemplateReq" },
108   { 0x000f, "VersionReq" },
109   { 0x0010, "CapabilitiesRes" },
110   { 0x0012, "ServerReq" },
111   { 0x0020, "Alarm" },
112   { 0x0021, "MulticastMediaReceptionAck" },
113   { 0x0022, "OpenReceiveChannelAck" },
114   { 0x0023, "ConnectionStatisticsRes" },
115   { 0x0024, "OffHookWithCgpn" },
116   { 0x0025, "SoftKeySetReq" },
117   { 0x0026, "SoftKeyEvent" },
118   { 0x0027, "Unregister" },
119   { 0x0028, "SoftKeyTemplateReq" },
120   { 0x0029, "RegisterTokenReq" },
121   { 0x002a, "MediaTransmissionFailure" },
122   { 0x002b, "HeadsetStatus" },
123   { 0x002c, "MediaResourceNotification" },
124   { 0x002d, "RegisterAvailableLines" },
125   { 0x002e, "DeviceToUserData" },
126   { 0x002f, "DeviceToUserDataResponse" },
127   { 0x0030, "UpdateCapabilities" },
128   { 0x0031, "OpenMultiMediaReceiveChannelAck" },
129   { 0x0032, "ClearConference" },
130   { 0x0033, "ServiceURLStatReq" },
131   { 0x0034, "FeatureStatReq" },
132   { 0x0035, "CreateConferenceRes" },
133   { 0x0036, "DeleteConferenceRes" },
134   { 0x0037, "ModifyConferenceRes" },
135   { 0x0038, "AddParticipantRes" },
136   { 0x0039, "AuditConferenceRes" },
137   { 0x0040, "AuditParticipantRes" },
138   { 0x0041, "DeviceToUserDataVersion1" },
139   { 0x0042, "DeviceToUserDataResponseVersion1" },
140   { 0x0043, "UpdateCapabilitiesV2" },
141   { 0x0044, "UpdateCapabilitiesV3" },
142   { 0x0045, "PortRes" },
143   { 0x0046, "QoSResvNotify" },
144   { 0x0047, "QoSErrorNotify" },
145   { 0x0048, "SubscriptionStatReq" },
146   { 0x0049, "MediaPathEvent" },
147   { 0x004a, "MediaPathCapability" },
148   { 0x004c, "MwiNotification" },
149   { 0x0081, "RegisterAck" },
150   { 0x0082, "StartTone" },
151   { 0x0083, "StopTone" },
152   { 0x0085, "SetRinger" },
153   { 0x0086, "SetLamp" },
154   { 0x0088, "SetSpeakerMode" },
155   { 0x0089, "SetMicroMode" },
156   { 0x008a, "StartMediaTransmission" },
157   { 0x008b, "StopMediaTransmission" },
158   { 0x008f, "CallInfo" },
159   { 0x0090, "ForwardStat" },
160   { 0x0091, "SpeedDialStat" },
161   { 0x0092, "LineStat" },
162   { 0x0093, "ConfigStat" },
163   { 0x0094, "DefineTimeDate" },
164   { 0x0095, "StartSessionTransmission" },
165   { 0x0096, "StopSessionTransmission" },
166   { 0x0097, "ButtonTemplate" },
167   { 0x0098, "Version" },
168   { 0x0099, "DisplayText" },
169   { 0x009a, "ClearDisplay" },
170   { 0x009b, "CapabilitiesReq" },
171   { 0x009d, "RegisterReject" },
172   { 0x009e, "ServerRes" },
173   { 0x009f, "Reset" },
174   { 0x0100, "KeepAliveAck" },
175   { 0x0101, "StartMulticastMediaReception" },
176   { 0x0102, "StartMulticastMediaTransmission" },
177   { 0x0103, "StopMulticastMediaReception" },
178   { 0x0104, "StopMulticastMediaTransmission" },
179   { 0x0105, "OpenReceiveChannel" },
180   { 0x0106, "CloseReceiveChannel" },
181   { 0x0107, "ConnectionStatisticsReq" },
182   { 0x0108, "SoftKeyTemplateRes" },
183   { 0x0109, "SoftKeySetRes" },
184   { 0x0110, "SelectSoftKeys" },
185   { 0x0111, "CallState" },
186   { 0x0112, "DisplayPromptStatus" },
187   { 0x0113, "ClearPromptStatus" },
188   { 0x0114, "DisplayNotify" },
189   { 0x0115, "ClearNotify" },
190   { 0x0116, "ActivateCallPlane" },
191   { 0x0117, "DeactivateCallPlane" },
192   { 0x0118, "UnregisterAck" },
193   { 0x0119, "BackSpaceReq" },
194   { 0x011a, "RegisterTokenAck" },
195   { 0x011b, "RegisterTokenReject" },
196   { 0x011c, "StartMediaFailureDetection" },
197   { 0x011d, "DialedNumber" },
198   { 0x011e, "UserToDeviceData" },
199   { 0x011f, "FeatureStat" },
200   { 0x0120, "DisplayPriNotify" },
201   { 0x0121, "ClearPriNotify" },
202   { 0x0122, "StartAnnouncement" },
203   { 0x0123, "StopAnnouncement" },
204   { 0x0124, "AnnouncementFinish" },
205   { 0x0127, "NotifyDtmfTone" },
206   { 0x0128, "SendDtmfTone" },
207   { 0x0129, "SubscribeDtmfPayloadReq" },
208   { 0x012a, "SubscribeDtmfPayloadRes" },
209   { 0x012b, "SubscribeDtmfPayloadErr" },
210   { 0x012c, "UnSubscribeDtmfPayloadReq" },
211   { 0x012d, "UnSubscribeDtmfPayloadRes" },
212   { 0x012e, "UnSubscribeDtmfPayloadErr" },
213   { 0x012f, "ServiceURLStat" },
214   { 0x0130, "CallSelectStat" },
215   { 0x0131, "OpenMultiMediaReceiveChannel" },
216   { 0x0132, "StartMultiMediaTransmission" },
217   { 0x0133, "StopMultiMediaTransmission" },
218   { 0x0134, "MiscellaneousCommand" },
219   { 0x0135, "FlowControlCommand" },
220   { 0x0136, "CloseMultiMediaReceiveChannel" },
221   { 0x0137, "CreateConferenceReq" },
222   { 0x0138, "DeleteConferenceReq" },
223   { 0x0139, "ModifyConferenceReq" },
224   { 0x013a, "AddParticipantReq" },
225   { 0x013b, "DropParticipantReq" },
226   { 0x013c, "AuditConferenceReq" },
227   { 0x013d, "AuditParticipantReq" },
228   { 0x013e, "ChangeParticipantReq" },
229   { 0x013f, "UserToDeviceDataVersion1" },
230   { 0x0140, "VideoDisplayCommand" },
231   { 0x0141, "FlowControlNotify" },
232   { 0x0142, "ConfigStatV2" },
233   { 0x0143, "DisplayNotifyV2" },
234   { 0x0144, "DisplayPriNotifyV2" },
235   { 0x0145, "DisplayPromptStatusV2" },
236   { 0x0146, "FeatureStatV2" },
237   { 0x0147, "LineStatV2" },
238   { 0x0148, "ServiceURLStatV2" },
239   { 0x0149, "SpeedDialStatV2" },
240   { 0x014a, "CallInfoV2" },
241   { 0x014b, "PortReq" },
242   { 0x014c, "PortClose" },
243   { 0x014d, "QoSListen" },
244   { 0x014e, "QoSPath" },
245   { 0x014f, "QoSTeardown" },
246   { 0x0150, "UpdateDSCP" },
247   { 0x0151, "QoSModify" },
248   { 0x0152, "SubscriptionStat" },
249   { 0x0153, "Notification" },
250   { 0x0154, "StartMediaTransmissionAck" },
251   { 0x0155, "StartMultiMediaTransmissionAck" },
252   { 0x0156, "CallHistoryInfo" },
253   { 0x0156, "LocationInfo" },
254   { 0x0158, "MwiResponse" },
255   { 0x015a, "EnhancedAlarm" },
256   { 0x015e, "CallCountReq" },
257   { 0x015f, "CallCountResp" },
258   { 0x0160, "RecordingStatus" },
259   { 0x8000, "SPCPRegisterTokenReq" },
260   { 0x8100, "SPCPRegisterTokenAck" },
261   { 0x8101, "SPCPRegisterTokenReject" },
262   {0     , NULL}
263 };
264 static value_string_ext message_id_ext = VALUE_STRING_EXT_INIT(message_id);
265
266
267 /* Declare Enums and Defines */
268 static const value_string DisplayLabels_36[] = {
269   { 0x00000, "Empty" },
270   { 0x00002, "Acct" },
271   { 0x00003, "Flash" },
272   { 0x00004, "Login" },
273   { 0x00005, "Device In Home Location" },
274   { 0x00006, "Device In Roaming Location" },
275   { 0x00007, "Enter Authorization Code" },
276   { 0x00008, "Enter Client Matter Code" },
277   { 0x00009, "Calls Available For Pickup" },
278   { 0x0000a, "Cm Fallback Service Operating" },
279   { 0x0000b, "Max Phones Exceeded" },
280   { 0x0000c, "Waiting To Rehome" },
281   { 0x0000d, "Please End Call" },
282   { 0x0000e, "Paging" },
283   { 0x0000f, "Select Line" },
284   { 0x00010, "Transfer Destination Is Busy" },
285   { 0x00011, "Select A Service" },
286   { 0x00012, "Local Services" },
287   { 0x00013, "Enter Search Criteria" },
288   { 0x00014, "Night Service" },
289   { 0x00015, "Night Service Active" },
290   { 0x00016, "Night Service Disabled" },
291   { 0x00017, "Login Successful" },
292   { 0x00018, "Wrong Pin" },
293   { 0x00019, "Please Enter Pin" },
294   { 0x0001a, "Of" },
295   { 0x0001b, "Records 1 To" },
296   { 0x0001c, "No Record Found" },
297   { 0x0001d, "Search Results" },
298   { 0x0001e, "Calls In Queue" },
299   { 0x0001f, "Join To Hunt Group" },
300   { 0x00020, "Ready" },
301   { 0x00021, "Notready" },
302   { 0x00022, "Call On Hold" },
303   { 0x00023, "Hold Reversion" },
304   { 0x00024, "Setup Failed" },
305   { 0x00025, "No Resources" },
306   { 0x00026, "Device Not Authorized" },
307   { 0x00027, "Monitoring" },
308   { 0x00028, "Recording Awaiting Call To Be Active" },
309   { 0x00029, "Recording Already In Progress" },
310   { 0x0002a, "Inactive Recording Session" },
311   { 0x0002b, "Mobility" },
312   { 0x0002c, "Whisper" },
313   { 0x0002d, "Forward All" },
314   { 0x0002e, "Malicious Call Id" },
315   { 0x0002f, "Group Pickup" },
316   { 0x00030, "Remove Last Participant" },
317   { 0x00031, "Other Pickup" },
318   { 0x00032, "Video" },
319   { 0x00033, "End Call" },
320   { 0x00034, "Conference List" },
321   { 0x00035, "Quality Reporting Tool" },
322   { 0x00036, "Hunt Group" },
323   { 0x00037, "Use Line Or Join To Complete" },
324   { 0x00038, "Do Not Disturb" },
325   { 0x00039, "Do Not Disturb Is Active" },
326   { 0x0003a, "Cfwdall Loop Detected" },
327   { 0x0003b, "Cfwdall Hops Exceeded" },
328   { 0x0003c, "Abbrdial" },
329   { 0x0003d, "Pickup Is Unavailable" },
330   { 0x0003e, "Conference Is Unavailable" },
331   { 0x0003f, "Meetme Is Unavailable" },
332   { 0x00040, "Cannot Retrieve Parked Call" },
333   { 0x00041, "Cannot Send Call To Mobile" },
334   { 0x00043, "Record" },
335   { 0x00044, "Cannot Move Conversation" },
336   { 0x00045, "Cw Off" },
337   { 0x00046, "Coaching" },
338   { 0x0004f, "Recording" },
339   { 0x00050, "Recording Failed" },
340   { 0x00051, "Connecting" },
341   { 0x00000, NULL }
342 };
343 static value_string_ext DisplayLabels_36_ext = VALUE_STRING_EXT_INIT(DisplayLabels_36);
344
345 static const value_string DisplayLabels_200[] = {
346   { 0x00001, "Redial" },
347   { 0x00002, "Newcall" },
348   { 0x00003, "Hold" },
349   { 0x00004, "Transfer" },
350   { 0x00005, "Cfwdall" },
351   { 0x00006, "Cfwdbusy" },
352   { 0x00007, "Cfwdnoanswer" },
353   { 0x00008, "Backspace" },
354   { 0x00009, "Endcall" },
355   { 0x0000a, "Resume" },
356   { 0x0000b, "Answer" },
357   { 0x0000c, "Info" },
358   { 0x0000d, "Confrn" },
359   { 0x0000e, "Park" },
360   { 0x0000f, "Join" },
361   { 0x00010, "Meetme" },
362   { 0x00011, "Pickup" },
363   { 0x00012, "Gpickup" },
364   { 0x00013, "Your Current Options" },
365   { 0x00014, "Off Hook" },
366   { 0x00015, "On Hook" },
367   { 0x00016, "Ring Out" },
368   { 0x00017, "From" },
369   { 0x00018, "Connected" },
370   { 0x00019, "Busy" },
371   { 0x0001a, "Line In Use" },
372   { 0x0001b, "Call Waiting" },
373   { 0x0001c, "Call Transfer" },
374   { 0x0001d, "Call Park" },
375   { 0x0001e, "Call Proceed" },
376   { 0x0001f, "In Use Remote" },
377   { 0x00020, "Enter Number" },
378   { 0x00021, "Call Park At" },
379   { 0x00022, "Primary Only" },
380   { 0x00023, "Temp Fail" },
381   { 0x00024, "You Have Voicemail" },
382   { 0x00025, "Forwarded To" },
383   { 0x00026, "Can Not Complete Conference" },
384   { 0x00027, "No Conference Bridge" },
385   { 0x00028, "Can Not Hold Primary Control" },
386   { 0x00029, "Invalid Conference Participant" },
387   { 0x0002a, "In Conference Already" },
388   { 0x0002b, "No Participant Info" },
389   { 0x0002c, "Exceed Maximum Parties" },
390   { 0x0002d, "Key Is Not Active" },
391   { 0x0002e, "Error No License" },
392   { 0x0002f, "Error Dbconfig" },
393   { 0x00030, "Error Database" },
394   { 0x00031, "Error Pass Limit" },
395   { 0x00032, "Error Unknown" },
396   { 0x00033, "Error Mismatch" },
397   { 0x00034, "Conference" },
398   { 0x00035, "Park Number" },
399   { 0x00036, "Private" },
400   { 0x00037, "Not Enough Bandwidth" },
401   { 0x00038, "Unknown Number" },
402   { 0x00039, "Rmlstc" },
403   { 0x0003a, "Voicemail" },
404   { 0x0003b, "Immdiv" },
405   { 0x0003c, "Intrcpt" },
406   { 0x0003d, "Setwtch" },
407   { 0x0003e, "Trnsfvm" },
408   { 0x0003f, "Dnd" },
409   { 0x00040, "Divall" },
410   { 0x00041, "Callback" },
411   { 0x00042, "Network Congestion Rerouting" },
412   { 0x00043, "Barge" },
413   { 0x00044, "Failed To Setup Barge" },
414   { 0x00045, "Another Barge Exists" },
415   { 0x00046, "Incompatible Device Type" },
416   { 0x00047, "No Park Number Available" },
417   { 0x00048, "Callpark Reversion" },
418   { 0x00049, "Service Is Not Active" },
419   { 0x0004a, "High Traffic Try Again Later" },
420   { 0x0004b, "Qrt" },
421   { 0x0004c, "Mcid" },
422   { 0x0004d, "Dirtrfr" },
423   { 0x0004e, "Select" },
424   { 0x0004f, "Conflist" },
425   { 0x00050, "Idivert" },
426   { 0x00051, "Cbarge" },
427   { 0x00052, "Can Not Complete Transfer" },
428   { 0x00053, "Can Not Join Calls" },
429   { 0x00054, "Mcid Successful" },
430   { 0x00055, "Number Not Configured" },
431   { 0x00056, "Security Error" },
432   { 0x00057, "Video Bandwidth Unavailable" },
433   { 0x00058, "Vidmode" },
434   { 0x00059, "Max Call Duration Timeout" },
435   { 0x0005a, "Max Hold Duration Timeout" },
436   { 0x0005b, "Opickup" },
437   { 0x0005c, "Hlog" },
438   { 0x0005d, "Logged Out Of Hunt Group" },
439   { 0x0005e, "Park Slot Unavailable" },
440   { 0x0005f, "No Call Available For Pickup" },
441   { 0x00061, "External Transfer Restricted" },
442   { 0x00062, "No Line Available For Pickup" },
443   { 0x00063, "Path Replacement In Progress" },
444   { 0x00064, "Unknown 2" },
445   { 0x00065, "Mac Address" },
446   { 0x00066, "Host Name" },
447   { 0x00067, "Domain Name" },
448   { 0x00068, "Ip Address" },
449   { 0x00069, "Subnet Mask" },
450   { 0x0006a, "Tftp Server 1" },
451   { 0x0006b, "Default Router 1" },
452   { 0x0006c, "Default Router 2" },
453   { 0x0006d, "Default Router 3" },
454   { 0x0006e, "Default Router 4" },
455   { 0x0006f, "Default Router 5" },
456   { 0x00070, "Dns Server 1" },
457   { 0x00071, "Dns Server 2" },
458   { 0x00072, "Dns Server 3" },
459   { 0x00073, "Dns Server 4" },
460   { 0x00074, "Dns Server 5" },
461   { 0x00075, "Operational Vlan Id" },
462   { 0x00076, "Admin Vlan Id" },
463   { 0x00077, "Call Manager 1" },
464   { 0x00078, "Call Manager 2" },
465   { 0x00079, "Call Manager 3" },
466   { 0x0007a, "Call Manager 4" },
467   { 0x0007b, "Call Manager 5" },
468   { 0x0007c, "Information Url" },
469   { 0x0007d, "Directories Url" },
470   { 0x0007e, "Messages Url" },
471   { 0x0007f, "Services Url" },
472   { 0x00000, NULL }
473 };
474 static value_string_ext DisplayLabels_200_ext = VALUE_STRING_EXT_INIT(DisplayLabels_200);
475
476 static const value_string DeviceType[] = {
477   { 0x00001, "Station30SPplus" },
478   { 0x00002, "Station12SPplus" },
479   { 0x00003, "Station12SP" },
480   { 0x00004, "Station12" },
481   { 0x00005, "Station30VIP" },
482   { 0x00006, "StationTelecaster" },
483   { 0x00006, "Cisco 7910" },
484   { 0x00007, "StationTelecasterMgr" },
485   { 0x00008, "StationTelecasterBus" },
486   { 0x00008, "Cisco 7940" },
487   { 0x00009, "StationPolycom" },
488   { 0x00009, "Cisco 7935" },
489   { 0x0000a, "StationVGC" },
490   { 0x0000b, "VGCVirtualPhone" },
491   { 0x0000c, "StationATA186" },
492   { 0x0000d, "StationATA188" },
493   { 0x0000f, "EmccBase" },
494   { 0x00014, "Virtual30SPplus" },
495   { 0x00015, "StationPhoneApplication" },
496   { 0x0001e, "AnalogAccess" },
497   { 0x00028, "DigitalAccessTitan1" },
498   { 0x00029, "Digital Access T1" },
499   { 0x0002a, "DigitalAccessTitan2" },
500   { 0x0002b, "DigitalAccessLennon" },
501   { 0x0002f, "AnalogAccessElvis" },
502   { 0x00030, "VGCGateway" },
503   { 0x00032, "ConferenceBridge" },
504   { 0x00033, "ConferenceBridgeYoko" },
505   { 0x00034, "ConferenceBridgeDixieLand" },
506   { 0x00035, "ConferenceBridgeSummit" },
507   { 0x0003c, "H225" },
508   { 0x0003d, "H323Phone" },
509   { 0x0003e, "H323Gateway" },
510   { 0x00046, "MusicOnHold" },
511   { 0x00047, "Pilot" },
512   { 0x00048, "TapiPort" },
513   { 0x00049, "TapiRoutePoint" },
514   { 0x00050, "VoiceInBox" },
515   { 0x00051, "VoiceInboxAdmin" },
516   { 0x00052, "LineAnnunciator" },
517   { 0x00053, "SoftwareMtpDixieLand" },
518   { 0x00054, "CiscoMediaServer" },
519   { 0x00055, "ConferenceBridgeFlint" },
520   { 0x00056, "ConferenceBridgeHetroGen" },
521   { 0x00057, "ConferenceBridgeAudVid" },
522   { 0x00058, "ConferenceHVideoBridge" },
523   { 0x0005a, "RouteList" },
524   { 0x00064, "LoadSimulator" },
525   { 0x0006e, "MediaTerminationPoint" },
526   { 0x0006f, "MediaTerminationPointYoko" },
527   { 0x00070, "MediaTerminationPointDixieLand" },
528   { 0x00071, "MediaTerminationPointSummit" },
529   { 0x00073, "7941G" },
530   { 0x00077, "7971" },
531   { 0x00078, "MGCPStation" },
532   { 0x00079, "MGCPTrunk" },
533   { 0x0007a, "RASProxy" },
534   { 0x0007c, "Cisco 7914 AddOn" },
535   { 0x0007d, "Trunk" },
536   { 0x0007e, "Annunciator" },
537   { 0x0007f, "MonitorBridge" },
538   { 0x00080, "Recorder" },
539   { 0x00081, "MonitorBridgeYoko" },
540   { 0x00083, "SipTrunk" },
541   { 0x00084, "SipGateway" },
542   { 0x00085, "WsmTrunk" },
543   { 0x00086, "RemoteDestination" },
544   { 0x000e3, "Cisco 7915 AddOn" },
545   { 0x000e4, "Cisco 7915 AddOn" },
546   { 0x000e5, "Cisco 7916 AddOn" },
547   { 0x000e6, "Cisco 7916 AddOn" },
548   { 0x000fd, "GenericDevice" },
549   { 0x000fe, "UnknownMGCPGateway" },
550   { 0x000ff, "NotDefined" },
551   { 0x00113, "Nokia E Series" },
552   { 0x0012e, "7989" },
553   { 0x0012e, "Cisco 7985" },
554   { 0x00133, "7911" },
555   { 0x00134, "7941G_GE" },
556   { 0x00134, "Cisco 7961 GE" },
557   { 0x00135, "7961G_GE" },
558   { 0x0014f, "MotorolaCN622" },
559   { 0x00150, "3rdPartySipBasic" },
560   { 0x0015c, "StationGoPed" },
561   { 0x0015c, "Cisco 7931" },
562   { 0x00166, "UnifiedCommunicator" },
563   { 0x0016d, "7921" },
564   { 0x00171, "7906" },
565   { 0x00176, "3rdPartySipAdv" },
566   { 0x00177, "Telepresence" },
567   { 0x00178, "Nokia ICC client" },
568   { 0x00194, "7962" },
569   { 0x0019c, "3951" },
570   { 0x001af, "7937" },
571   { 0x001b2, "7942" },
572   { 0x001b3, "7945" },
573   { 0x001b4, "7965" },
574   { 0x001b5, "7975" },
575   { 0x001d4, "UnifiedMobileCommunicator" },
576   { 0x001e4, "Cisco 7925" },
577   { 0x001ed, "9971_CE" },
578   { 0x001ef, "Cisco 6921" },
579   { 0x001f0, "Cisco 6941" },
580   { 0x001f1, "Cisco 6961" },
581   { 0x001f7, "CSF" },
582   { 0x00223, "Cisco 6901" },
583   { 0x00224, "Cisco 6911" },
584   { 0x00234, "Cisco 6945" },
585   { 0x00249, "Cisco 8945" },
586   { 0x0024a, "Cisco 8941" },
587   { 0x00255, "CiscoTelepresenceMcu" },
588   { 0x00257, "CiscoTelePresenceExchange" },
589   { 0x00258, "CiscoTelePresenceSoftwareConferenceBridge" },
590   { 0x00277, "ASSip" },
591   { 0x0027b, "CtiRemoteDevice" },
592   { 0x04e20, "7905" },
593   { 0x07532, "7920" },
594   { 0x07536, "7970" },
595   { 0x07537, "7912" },
596   { 0x07538, "7902" },
597   { 0x07540, "SoftPhone" },
598   { 0x07540, "Cisco IP Communicator" },
599   { 0x07542, "7961G" },
600   { 0x07543, "7936" },
601   { 0x0754b, "AnalogPhone" },
602   { 0x0754c, "ISDNBRIPhone" },
603   { 0x07550, "SCCPGwVirtualPhone" },
604   { 0x07553, "IP_STE" },
605   { 0x08cc9, "CiscoTelePresenceConductor" },
606   { 0x08d7b, "InteractiveVoiceResponse" },
607   { 0x13880, "Cisco SPA 521S" },
608   { 0x13883, "Cisco SPA 502G" },
609   { 0x13884, "Cisco SPA 504G" },
610   { 0x13885, "Cisco SPA 525G" },
611   { 0x13887, "Cisco SPA 509G" },
612   { 0x13889, "Cisco SPA 525G2" },
613   { 0x1388b, "Cisco SPA 303G" },
614   { 0x00000, NULL }
615 };
616 static value_string_ext DeviceType_ext = VALUE_STRING_EXT_INIT(DeviceType);
617
618 static const value_string KeyPadButton[] = {
619   { 0x00000, "Zero" },
620   { 0x00001, "One" },
621   { 0x00002, "Two" },
622   { 0x00003, "Three" },
623   { 0x00004, "Four" },
624   { 0x00005, "Five" },
625   { 0x00006, "Six" },
626   { 0x00007, "Seven" },
627   { 0x00008, "Eight" },
628   { 0x00009, "Nine" },
629   { 0x0000a, "A" },
630   { 0x0000b, "B" },
631   { 0x0000c, "C" },
632   { 0x0000d, "D" },
633   { 0x0000e, "Star" },
634   { 0x0000f, "Pound" },
635   { 0x00010, "Plus" },
636   { 0x00000, NULL }
637 };
638 static value_string_ext KeyPadButton_ext = VALUE_STRING_EXT_INIT(KeyPadButton);
639
640 static const value_string DeviceStimulus[] = {
641   { 0x00001, "LastNumberRedial" },
642   { 0x00002, "SpeedDial" },
643   { 0x00003, "Hold" },
644   { 0x00004, "Transfer" },
645   { 0x00005, "ForwardAll" },
646   { 0x00006, "ForwardBusy" },
647   { 0x00007, "ForwardNoAnswer" },
648   { 0x00008, "Display" },
649   { 0x00009, "Line" },
650   { 0x0000a, "T120Chat" },
651   { 0x0000b, "T120Whiteboard" },
652   { 0x0000c, "T120ApplicationSharing" },
653   { 0x0000d, "T120FileTransfer" },
654   { 0x0000e, "Video" },
655   { 0x0000f, "VoiceMail" },
656   { 0x00010, "AnswerRelease" },
657   { 0x00011, "AutoAnswer" },
658   { 0x00012, "Select" },
659   { 0x00013, "Privacy" },
660   { 0x00014, "ServiceURL" },
661   { 0x00015, "BLFSpeedDial" },
662   { 0x00016, "DPark" },
663   { 0x00017, "Intercom" },
664   { 0x0001b, "MaliciousCall" },
665   { 0x00021, "GenericAppB1" },
666   { 0x00022, "GenericAppB2" },
667   { 0x00023, "GenericAppB3" },
668   { 0x00024, "GenericAppB4" },
669   { 0x00025, "GenericAppB5" },
670   { 0x0007b, "MeetMeConference" },
671   { 0x0007d, "Conference" },
672   { 0x0007e, "CallPark" },
673   { 0x0007f, "CallPickUp" },
674   { 0x00080, "GroupCallPickUp" },
675   { 0x00081, "Mobility" },
676   { 0x00082, "DoNotDisturb" },
677   { 0x00083, "ConfList" },
678   { 0x00084, "RemoveLastParticipant" },
679   { 0x00085, "QRT" },
680   { 0x00086, "CallBack" },
681   { 0x00087, "OtherPickup" },
682   { 0x00088, "VideoMode" },
683   { 0x00089, "NewCall" },
684   { 0x0008a, "EndCall" },
685   { 0x0008b, "HLog" },
686   { 0x0008f, "Queuing" },
687   { 0x0008f, "MaxStimulusValue" },
688   { 0x00000, NULL }
689 };
690 static value_string_ext DeviceStimulus_ext = VALUE_STRING_EXT_INIT(DeviceStimulus);
691
692 #define MEDIA_PAYLOAD_G711ALAW64K              0x00002 /* audio */
693 #define MEDIA_PAYLOAD_G711ALAW56K              0x00003 /* audio */
694 #define MEDIA_PAYLOAD_G711ULAW64K              0x00004 /* audio */
695 #define MEDIA_PAYLOAD_G711ULAW56K              0x00005 /* audio */
696 #define MEDIA_PAYLOAD_G722_64K                 0x00006 /* audio */
697 #define MEDIA_PAYLOAD_G722_56K                 0x00007 /* audio */
698 #define MEDIA_PAYLOAD_G722_48K                 0x00008 /* audio */
699 #define MEDIA_PAYLOAD_G7231                    0x00009 /* audio */
700 #define MEDIA_PAYLOAD_G728                     0x0000a /* audio */
701 #define MEDIA_PAYLOAD_G729                     0x0000b /* audio */
702 #define MEDIA_PAYLOAD_G729ANNEXA               0x0000c /* audio */
703 #define MEDIA_PAYLOAD_G729ANNEXB               0x0000f /* audio */
704 #define MEDIA_PAYLOAD_G729ANNEXAWANNEXB        0x00010 /* audio */
705 #define MEDIA_PAYLOAD_GSM_FULL_RATE            0x00012 /* audio */
706 #define MEDIA_PAYLOAD_GSM_HALF_RATE            0x00013 /* audio */
707 #define MEDIA_PAYLOAD_GSM_ENHANCED_FULL_RATE   0x00014 /* audio */
708 #define MEDIA_PAYLOAD_WIDE_BAND_256K           0x00019 /* audio */
709 #define MEDIA_PAYLOAD_DATA64                   0x00020 /* audio */
710 #define MEDIA_PAYLOAD_DATA56                   0x00021 /* audio */
711 #define MEDIA_PAYLOAD_G7221_32K                0x00028 /* audio */
712 #define MEDIA_PAYLOAD_G7221_24K                0x00029 /* audio */
713 #define MEDIA_PAYLOAD_AAC                      0x0002a /* audio */
714 #define MEDIA_PAYLOAD_MP4ALATM_128             0x0002b /* audio */
715 #define MEDIA_PAYLOAD_MP4ALATM_64              0x0002c /* audio */
716 #define MEDIA_PAYLOAD_MP4ALATM_56              0x0002d /* audio */
717 #define MEDIA_PAYLOAD_MP4ALATM_48              0x0002e /* audio */
718 #define MEDIA_PAYLOAD_MP4ALATM_32              0x0002f /* audio */
719 #define MEDIA_PAYLOAD_MP4ALATM_24              0x00030 /* audio */
720 #define MEDIA_PAYLOAD_MP4ALATM_NA              0x00031 /* audio */
721 #define MEDIA_PAYLOAD_GSM                      0x00050 /* audio */
722 #define MEDIA_PAYLOAD_G726_32K                 0x00052 /* audio */
723 #define MEDIA_PAYLOAD_G726_24K                 0x00053 /* audio */
724 #define MEDIA_PAYLOAD_G726_16K                 0x00054 /* audio */
725 #define MEDIA_PAYLOAD_ILBC                     0x00056 /* audio */
726 #define MEDIA_PAYLOAD_ISAC                     0x00059 /* audio */
727 #define MEDIA_PAYLOAD_OPUS                     0x0005a /* audio */
728 #define MEDIA_PAYLOAD_AMR                      0x00061 /* audio */
729 #define MEDIA_PAYLOAD_AMR_WB                   0x00062 /* audio */
730 #define MEDIA_PAYLOAD_H261                     0x00064 /* video */
731 #define MEDIA_PAYLOAD_H263                     0x00065 /* video */
732 #define MEDIA_PAYLOAD_VIEO                     0x00066 /* video */
733 #define MEDIA_PAYLOAD_H264                     0x00067 /* video */
734 #define MEDIA_PAYLOAD_H264_SVC                 0x00068 /* video */
735 #define MEDIA_PAYLOAD_T120                     0x00069 /* video */
736 #define MEDIA_PAYLOAD_H224                     0x0006a /* video */
737 #define MEDIA_PAYLOAD_T38FAX                   0x0006b /* video */
738 #define MEDIA_PAYLOAD_TOTE                     0x0006c /* video */
739 #define MEDIA_PAYLOAD_H265                     0x0006d /* video */
740 #define MEDIA_PAYLOAD_H264_UC                  0x0006e /* video */
741 #define MEDIA_PAYLOAD_XV150_MR_711U            0x0006f /* video */
742 #define MEDIA_PAYLOAD_NSE_VBD_711U             0x00070 /* video */
743 #define MEDIA_PAYLOAD_XV150_MR_729A            0x00071 /* video */
744 #define MEDIA_PAYLOAD_NSE_VBD_729A             0x00072 /* video */
745 #define MEDIA_PAYLOAD_H264_FEC                 0x00073 /* video */
746 #define MEDIA_PAYLOAD_CLEAR_CHAN               0x00078 /* data */
747 #define MEDIA_PAYLOAD_UNIVERSAL_XCODER         0x000de /* data */
748 #define MEDIA_PAYLOAD_RFC2833_DYNPAYLOAD       0x00101 /* data */
749 #define MEDIA_PAYLOAD_PASSTHROUGH              0x00102 /* data */
750 #define MEDIA_PAYLOAD_DYNAMIC_PAYLOAD_PASSTHRU 0x00103 /* data */
751 #define MEDIA_PAYLOAD_DTMF_OOB                 0x00104 /* data */
752 #define MEDIA_PAYLOAD_INBAND_DTMF_RFC2833      0x00105 /* data */
753 #define MEDIA_PAYLOAD_CFB_TONES                0x00106 /* data */
754 #define MEDIA_PAYLOAD_NOAUDIO                  0x0012b /* data */
755 #define MEDIA_PAYLOAD_V150_LC_MODEMRELAY       0x0012c /* data */
756 #define MEDIA_PAYLOAD_V150_LC_SPRT             0x0012d /* data */
757 #define MEDIA_PAYLOAD_V150_LC_SSE              0x0012e /* data */
758 #define MEDIA_PAYLOAD_MAX                      0x0012f /* data */
759
760 static const value_string Media_PayloadType[] = {
761   { MEDIA_PAYLOAD_G711ALAW64K, "Media_Payload_G711Alaw64k" },
762   { MEDIA_PAYLOAD_G711ALAW56K, "Media_Payload_G711Alaw56k" },
763   { MEDIA_PAYLOAD_G711ULAW64K, "Media_Payload_G711Ulaw64k" },
764   { MEDIA_PAYLOAD_G711ULAW56K, "Media_Payload_G711Ulaw56k" },
765   { MEDIA_PAYLOAD_G722_64K, "Media_Payload_G722_64k" },
766   { MEDIA_PAYLOAD_G722_56K, "Media_Payload_G722_56k" },
767   { MEDIA_PAYLOAD_G722_48K, "Media_Payload_G722_48k" },
768   { MEDIA_PAYLOAD_G7231, "Media_Payload_G7231" },
769   { MEDIA_PAYLOAD_G728, "Media_Payload_G728" },
770   { MEDIA_PAYLOAD_G729, "Media_Payload_G729" },
771   { MEDIA_PAYLOAD_G729ANNEXA, "Media_Payload_G729AnnexA" },
772   { MEDIA_PAYLOAD_G729ANNEXB, "Media_Payload_G729AnnexB" },
773   { MEDIA_PAYLOAD_G729ANNEXAWANNEXB, "Media_Payload_G729AnnexAwAnnexB" },
774   { MEDIA_PAYLOAD_GSM_FULL_RATE, "Media_Payload_GSM_Full_Rate" },
775   { MEDIA_PAYLOAD_GSM_HALF_RATE, "Media_Payload_GSM_Half_Rate" },
776   { MEDIA_PAYLOAD_GSM_ENHANCED_FULL_RATE, "Media_Payload_GSM_Enhanced_Full_Rate" },
777   { MEDIA_PAYLOAD_WIDE_BAND_256K, "Media_Payload_Wide_Band_256k" },
778   { MEDIA_PAYLOAD_DATA64, "Media_Payload_Data64" },
779   { MEDIA_PAYLOAD_DATA56, "Media_Payload_Data56" },
780   { MEDIA_PAYLOAD_G7221_32K, "Media_Payload_G7221_32K" },
781   { MEDIA_PAYLOAD_G7221_24K, "Media_Payload_G7221_24K" },
782   { MEDIA_PAYLOAD_AAC, "Media_Payload_AAC" },
783   { MEDIA_PAYLOAD_MP4ALATM_128, "Media_Payload_MP4ALATM_128" },
784   { MEDIA_PAYLOAD_MP4ALATM_64, "Media_Payload_MP4ALATM_64" },
785   { MEDIA_PAYLOAD_MP4ALATM_56, "Media_Payload_MP4ALATM_56" },
786   { MEDIA_PAYLOAD_MP4ALATM_48, "Media_Payload_MP4ALATM_48" },
787   { MEDIA_PAYLOAD_MP4ALATM_32, "Media_Payload_MP4ALATM_32" },
788   { MEDIA_PAYLOAD_MP4ALATM_24, "Media_Payload_MP4ALATM_24" },
789   { MEDIA_PAYLOAD_MP4ALATM_NA, "Media_Payload_MP4ALATM_NA" },
790   { MEDIA_PAYLOAD_GSM, "Media_Payload_GSM" },
791   { MEDIA_PAYLOAD_G726_32K, "Media_Payload_G726_32K" },
792   { MEDIA_PAYLOAD_G726_24K, "Media_Payload_G726_24K" },
793   { MEDIA_PAYLOAD_G726_16K, "Media_Payload_G726_16K" },
794   { MEDIA_PAYLOAD_ILBC, "Media_Payload_ILBC" },
795   { MEDIA_PAYLOAD_ISAC, "Media_Payload_ISAC" },
796   { MEDIA_PAYLOAD_OPUS, "Media_Payload_OPUS" },
797   { MEDIA_PAYLOAD_AMR, "Media_Payload_AMR" },
798   { MEDIA_PAYLOAD_AMR_WB, "Media_Payload_AMR_WB" },
799   { MEDIA_PAYLOAD_H261, "Media_Payload_H261" },
800   { MEDIA_PAYLOAD_H263, "Media_Payload_H263" },
801   { MEDIA_PAYLOAD_VIEO, "Media_Payload_Vieo" },
802   { MEDIA_PAYLOAD_H264, "Media_Payload_H264" },
803   { MEDIA_PAYLOAD_H264_SVC, "Media_Payload_H264_SVC" },
804   { MEDIA_PAYLOAD_T120, "Media_Payload_T120" },
805   { MEDIA_PAYLOAD_H224, "Media_Payload_H224" },
806   { MEDIA_PAYLOAD_T38FAX, "Media_Payload_T38Fax" },
807   { MEDIA_PAYLOAD_TOTE, "Media_Payload_TOTE" },
808   { MEDIA_PAYLOAD_H265, "Media_Payload_H265" },
809   { MEDIA_PAYLOAD_H264_UC, "Media_Payload_H264_UC" },
810   { MEDIA_PAYLOAD_XV150_MR_711U, "Media_Payload_XV150_MR_711U" },
811   { MEDIA_PAYLOAD_NSE_VBD_711U, "Media_Payload_NSE_VBD_711U" },
812   { MEDIA_PAYLOAD_XV150_MR_729A, "Media_Payload_XV150_MR_729A" },
813   { MEDIA_PAYLOAD_NSE_VBD_729A, "Media_Payload_NSE_VBD_729A" },
814   { MEDIA_PAYLOAD_H264_FEC, "Media_Payload_H264_FEC" },
815   { MEDIA_PAYLOAD_CLEAR_CHAN, "Media_Payload_Clear_Chan" },
816   { MEDIA_PAYLOAD_UNIVERSAL_XCODER, "Media_Payload_Universal_Xcoder" },
817   { MEDIA_PAYLOAD_RFC2833_DYNPAYLOAD, "Media_Payload_RFC2833_DynPayload" },
818   { MEDIA_PAYLOAD_PASSTHROUGH, "Media_Payload_PassThrough" },
819   { MEDIA_PAYLOAD_DYNAMIC_PAYLOAD_PASSTHRU, "Media_Payload_Dynamic_Payload_PassThru" },
820   { MEDIA_PAYLOAD_DTMF_OOB, "Media_Payload_DTMF_OOB" },
821   { MEDIA_PAYLOAD_INBAND_DTMF_RFC2833, "Media_Payload_Inband_DTMF_RFC2833" },
822   { MEDIA_PAYLOAD_CFB_TONES, "Media_Payload_CFB_Tones" },
823   { MEDIA_PAYLOAD_NOAUDIO, "Media_Payload_NoAudio" },
824   { MEDIA_PAYLOAD_V150_LC_MODEMRELAY, "Media_Payload_v150_LC_ModemRelay" },
825   { MEDIA_PAYLOAD_V150_LC_SPRT, "Media_Payload_v150_LC_SPRT" },
826   { MEDIA_PAYLOAD_V150_LC_SSE, "Media_Payload_v150_LC_SSE" },
827   { MEDIA_PAYLOAD_MAX, "Media_Payload_Max" },
828   { 0x00000, NULL }
829 };
830 static value_string_ext Media_PayloadType_ext = VALUE_STRING_EXT_INIT(Media_PayloadType);
831
832 static const value_string Media_G723BitRate[] = {
833   { 0x00001, "Media_G723BRate_5_3" },
834   { 0x00002, "Media_G723BRate_6_3" },
835   { 0x00000, NULL }
836 };
837 static value_string_ext Media_G723BitRate_ext = VALUE_STRING_EXT_INIT(Media_G723BitRate);
838
839 static const value_string DeviceAlarmSeverity[] = {
840   { 0x00000, "Critical" },
841   { 0x00001, "Warning" },
842   { 0x00002, "Informational" },
843   { 0x00004, "Unknown" },
844   { 0x00007, "Major" },
845   { 0x00008, "Minor" },
846   { 0x0000a, "Marginal" },
847   { 0x00014, "TraceInfo" },
848   { 0x00000, NULL }
849 };
850 static value_string_ext DeviceAlarmSeverity_ext = VALUE_STRING_EXT_INIT(DeviceAlarmSeverity);
851
852 static const value_string MulticastMediaReceptionStatus[] = {
853   { 0x00000, "Ok" },
854   { 0x00001, "Error" },
855   { 0x00000, NULL }
856 };
857 static value_string_ext MulticastMediaReceptionStatus_ext = VALUE_STRING_EXT_INIT(MulticastMediaReceptionStatus);
858
859 static const value_string MediaStatus[] = {
860   { 0x00000, "Ok" },
861   { 0x00001, "Unknown" },
862   { 0x00002, "NotEnoughChannels" },
863   { 0x00003, "CodecTooComplex" },
864   { 0x00004, "InvalidPartyID" },
865   { 0x00005, "InvalidCallRef" },
866   { 0x00006, "InvalidCodec" },
867   { 0x00007, "InvalidPacketSize" },
868   { 0x00008, "OutOfSockets" },
869   { 0x00009, "EncoderOrDecoderFailed" },
870   { 0x0000a, "InvalidDynamicPayloadType" },
871   { 0x0000b, "RequestedIpAddrTypeUnAvailable" },
872   { 0x000ff, "DeviceOnHook" },
873   { 0x00000, NULL }
874 };
875 static value_string_ext MediaStatus_ext = VALUE_STRING_EXT_INIT(MediaStatus);
876
877 #define IPADDRTYPE_IPV4                        0x00000
878 #define IPADDRTYPE_IPV6                        0x00001
879 #define IPADDRTYPE_IPV4_V6                     0x00002
880 #define IPADDRTYPE_IP_INVALID                  0x00003
881
882 static const value_string IpAddrType[] = {
883   { IPADDRTYPE_IPV4, "v4" },
884   { IPADDRTYPE_IPV6, "v6" },
885   { IPADDRTYPE_IPV4_V6, "v4_v6" },
886   { IPADDRTYPE_IP_INVALID, "_Invalid" },
887   { 0x00000, NULL }
888 };
889 static value_string_ext IpAddrType_ext = VALUE_STRING_EXT_INIT(IpAddrType);
890
891 static const value_string StatsProcessingType[] = {
892   { 0x00000, "clearStats" },
893   { 0x00001, "doNotClearStats" },
894   { 0x00000, NULL }
895 };
896 static value_string_ext StatsProcessingType_ext = VALUE_STRING_EXT_INIT(StatsProcessingType);
897
898 static const value_string SoftKeySet[] = {
899   { 0x00000, "On Hook" },
900   { 0x00001, "Connected" },
901   { 0x00002, "On Hold" },
902   { 0x00003, "Ring In" },
903   { 0x00004, "Off Hook" },
904   { 0x00005, "Connected Transfeable" },
905   { 0x00006, "Digits Following" },
906   { 0x00007, "Connected Conference" },
907   { 0x00008, "Ring Out" },
908   { 0x00009, "OffHook with Features" },
909   { 0x0000a, "In Use Hint" },
910   { 0x0000b, "On Hook with Stealable Call" },
911   { 0x00000, NULL }
912 };
913 static value_string_ext SoftKeySet_ext = VALUE_STRING_EXT_INIT(SoftKeySet);
914
915 static const value_string SoftKeyEvent[] = {
916   { 0x00001, "Redial" },
917   { 0x00002, "NewCall" },
918   { 0x00003, "Hold" },
919   { 0x00004, "Transfer" },
920   { 0x00005, "CfwdAll" },
921   { 0x00006, "CfwdBusy" },
922   { 0x00007, "CfwdNoAnswer" },
923   { 0x00008, "BackSpace" },
924   { 0x00009, "EndCall" },
925   { 0x0000a, "Resume" },
926   { 0x0000b, "Answer" },
927   { 0x0000c, "Info" },
928   { 0x0000d, "Confrn" },
929   { 0x0000e, "Park" },
930   { 0x0000f, "Join" },
931   { 0x00010, "MeetMe" },
932   { 0x00011, "PickUp" },
933   { 0x00012, "GrpPickup" },
934   { 0x00013, "Your current options" },
935   { 0x00014, "Off Hook" },
936   { 0x00015, "On Hook" },
937   { 0x00016, "Ring out" },
938   { 0x00017, "From " },
939   { 0x00018, "Connected" },
940   { 0x00019, "Busy" },
941   { 0x0001a, "Line In Use" },
942   { 0x0001b, "Call Waiting" },
943   { 0x0001c, "Call Transfer" },
944   { 0x0001d, "Call Park" },
945   { 0x0001e, "Call Proceed" },
946   { 0x0001f, "In Use Remote" },
947   { 0x00020, "Enter number" },
948   { 0x00021, "Call park At" },
949   { 0x00022, "Primary Only" },
950   { 0x00023, "Temp Fail" },
951   { 0x00024, "You Have a VoiceMail" },
952   { 0x00025, "Forwarded to" },
953   { 0x00026, "Can Not Complete Conference" },
954   { 0x00027, "No Conference Bridge" },
955   { 0x00028, "Can Not Hold Primary Control" },
956   { 0x00029, "Invalid Conference Participant" },
957   { 0x0002a, "In Conference Already" },
958   { 0x0002b, "No Participant Info" },
959   { 0x0002c, "Exceed Maximum Parties" },
960   { 0x0002d, "Key Is Not Active" },
961   { 0x0002e, "Error No License" },
962   { 0x0002f, "Error DBConfig" },
963   { 0x00030, "Error Database" },
964   { 0x00031, "Error Pass Limit" },
965   { 0x00032, "Error Unknown" },
966   { 0x00033, "Error Mismatch" },
967   { 0x00034, "Conference" },
968   { 0x00035, "Park Number" },
969   { 0x00036, "Private" },
970   { 0x00037, "Not Enough Bandwidth" },
971   { 0x00038, "Unknown Number" },
972   { 0x00039, "RmLstC" },
973   { 0x0003a, "Voicemail" },
974   { 0x0003b, "ImmDiv" },
975   { 0x0003c, "Intrcpt" },
976   { 0x0003d, "SetWtch" },
977   { 0x0003e, "TrnsfVM" },
978   { 0x0003f, "DND" },
979   { 0x00040, "DivAll" },
980   { 0x00041, "CallBack" },
981   { 0x00042, "Network congestion,rerouting" },
982   { 0x00043, "Barge" },
983   { 0x00044, "Failed to setup Barge" },
984   { 0x00045, "Another Barge exists" },
985   { 0x00046, "Incompatible device type" },
986   { 0x00047, "No Park Number Available" },
987   { 0x00048, "CallPark Reversion" },
988   { 0x00049, "Service is not Active" },
989   { 0x0004a, "High Traffic Try Again Later" },
990   { 0x0004b, "QRT" },
991   { 0x0004c, "MCID" },
992   { 0x0004d, "DirTrfr" },
993   { 0x0004e, "Select" },
994   { 0x0004f, "ConfList" },
995   { 0x00050, "iDivert" },
996   { 0x00051, "cBarge" },
997   { 0x00052, "Can Not Complete Transfer" },
998   { 0x00053, "Can Not Join Calls" },
999   { 0x00054, "Mcid Successful" },
1000   { 0x00055, "Number Not Configured" },
1001   { 0x00056, "Security Error" },
1002   { 0x00057, "Video Bandwidth Unavailable" },
1003   { 0x00058, "Video Mode" },
1004   { 0x000c9, "Dial" },
1005   { 0x000ca, "Record" },
1006   { 0x00000, NULL }
1007 };
1008 static value_string_ext SoftKeyEvent_ext = VALUE_STRING_EXT_INIT(SoftKeyEvent);
1009
1010 static const value_string UnRegReasonCode[] = {
1011   { 0x00000, "Unknown" },
1012   { 0x00001, "PowerSaveMode" },
1013   { 0x00000, NULL }
1014 };
1015 static value_string_ext UnRegReasonCode_ext = VALUE_STRING_EXT_INIT(UnRegReasonCode);
1016
1017 static const value_string HeadsetMode[] = {
1018   { 0x00001, "On" },
1019   { 0x00002, "Off" },
1020   { 0x00000, NULL }
1021 };
1022 static value_string_ext HeadsetMode_ext = VALUE_STRING_EXT_INIT(HeadsetMode);
1023
1024 static const value_string SequenceFlag[] = {
1025   { 0x00000, "First" },
1026   { 0x00001, "More" },
1027   { 0x00002, "Last" },
1028   { 0x00000, NULL }
1029 };
1030 static value_string_ext SequenceFlag_ext = VALUE_STRING_EXT_INIT(SequenceFlag);
1031
1032 static const value_string Layout[] = {
1033   { 0x00000, "NoLayout" },
1034   { 0x00001, "OneByOne" },
1035   { 0x00002, "OneByTwo" },
1036   { 0x00003, "TwoByTwo" },
1037   { 0x00004, "TwoByTwo3Alt1" },
1038   { 0x00005, "TwoByTwo3Alt2" },
1039   { 0x00006, "ThreeByThree" },
1040   { 0x00007, "ThreeByThree6Alt1" },
1041   { 0x00008, "ThreeByThree6Alt2" },
1042   { 0x00009, "ThreeByThree4Alt1" },
1043   { 0x0000a, "ThreeByThree4Alt2" },
1044   { 0x00000, NULL }
1045 };
1046 static value_string_ext Layout_ext = VALUE_STRING_EXT_INIT(Layout);
1047
1048 static const value_string TransmitOrReceive[] = {
1049   { 0x00000, "None" },
1050   { 0x00001, "ReceiveOnly" },
1051   { 0x00002, "TransmitOnly" },
1052   { 0x00003, "Both" },
1053   { 0x00000, NULL }
1054 };
1055 static value_string_ext TransmitOrReceive_ext = VALUE_STRING_EXT_INIT(TransmitOrReceive);
1056
1057 static const value_string OpenReceiveChanStatus[] = {
1058   { 0x00000, "Ok" },
1059   { 0x00001, "Error" },
1060   { 0x00000, NULL }
1061 };
1062 static value_string_ext OpenReceiveChanStatus_ext = VALUE_STRING_EXT_INIT(OpenReceiveChanStatus);
1063
1064 static const value_string CreateConfResult[] = {
1065   { 0x00000, "OK" },
1066   { 0x00001, "ResourceNotAvailable" },
1067   { 0x00002, "ConferenceAlreadyExist" },
1068   { 0x00003, "SystemErr" },
1069   { 0x00000, NULL }
1070 };
1071 static value_string_ext CreateConfResult_ext = VALUE_STRING_EXT_INIT(CreateConfResult);
1072
1073 static const value_string DeleteConfResult[] = {
1074   { 0x00000, "OK" },
1075   { 0x00001, "ConferenceNotExist" },
1076   { 0x00002, "SystemErr" },
1077   { 0x00000, NULL }
1078 };
1079 static value_string_ext DeleteConfResult_ext = VALUE_STRING_EXT_INIT(DeleteConfResult);
1080
1081 static const value_string ModifyConfResult[] = {
1082   { 0x00000, "OK" },
1083   { 0x00001, "ResourceNotAvailable" },
1084   { 0x00002, "ConferenceNotExist" },
1085   { 0x00003, "InvalidParameter" },
1086   { 0x00004, "MoreActiveCallsThanReserved" },
1087   { 0x00005, "InvalidResourceType" },
1088   { 0x00006, "SystemErr" },
1089   { 0x00000, NULL }
1090 };
1091 static value_string_ext ModifyConfResult_ext = VALUE_STRING_EXT_INIT(ModifyConfResult);
1092
1093 static const value_string AddParticipantResult[] = {
1094   { 0x00000, "OK" },
1095   { 0x00001, "ResourceNotAvailable" },
1096   { 0x00002, "ConferenceNotExist" },
1097   { 0x00003, "DuplicateCallRef" },
1098   { 0x00004, "SystemErr" },
1099   { 0x00000, NULL }
1100 };
1101 static value_string_ext AddParticipantResult_ext = VALUE_STRING_EXT_INIT(AddParticipantResult);
1102
1103 static const value_string ResourceType[] = {
1104   { 0x00000, "Conference" },
1105   { 0x00001, "IVR" },
1106   { 0x00000, NULL }
1107 };
1108 static value_string_ext ResourceType_ext = VALUE_STRING_EXT_INIT(ResourceType);
1109
1110 static const value_string AuditParticipantResult[] = {
1111   { 0x00000, "OK" },
1112   { 0x00001, "ConferenceNotExist" },
1113   { 0x00000, NULL }
1114 };
1115 static value_string_ext AuditParticipantResult_ext = VALUE_STRING_EXT_INIT(AuditParticipantResult);
1116
1117 static const value_string Media_Encryption_Capability[] = {
1118   { 0x00000, "NotEncryptionCapable" },
1119   { 0x00001, "EncryptionCapable" },
1120   { 0x00000, NULL }
1121 };
1122 static value_string_ext Media_Encryption_Capability_ext = VALUE_STRING_EXT_INIT(Media_Encryption_Capability);
1123
1124 static const value_string IpAddrMode[] = {
1125   { 0x00000, "ModeIpv4" },
1126   { 0x00001, "ModeIpv6" },
1127   { 0x00002, "ModeIpv4AndIpv6" },
1128   { 0x00000, NULL }
1129 };
1130 static value_string_ext IpAddrMode_ext = VALUE_STRING_EXT_INIT(IpAddrMode);
1131
1132 static const value_string MediaType[] = {
1133   { 0x00000, "MediaType_Invalid" },
1134   { 0x00001, "MediaType_Audio" },
1135   { 0x00002, "MediaType_Main_Video" },
1136   { 0x00003, "MediaType_FECC" },
1137   { 0x00004, "MediaType_Presentation_Video" },
1138   { 0x00005, "MediaType_DataApp_BFCP" },
1139   { 0x00006, "MediaType_DataApp_IXChannel" },
1140   { 0x00007, "MediaType_T38" },
1141   { 0x00008, "MediaType_Max" },
1142   { 0x00000, NULL }
1143 };
1144 static value_string_ext MediaType_ext = VALUE_STRING_EXT_INIT(MediaType);
1145
1146 static const value_string RSVPDirection[] = {
1147   { 0x00001, "SEND" },
1148   { 0x00002, "RECV" },
1149   { 0x00003, "SENDRECV" },
1150   { 0x00000, NULL }
1151 };
1152 static value_string_ext RSVPDirection_ext = VALUE_STRING_EXT_INIT(RSVPDirection);
1153
1154 static const value_string QoSErrorCode[] = {
1155   { 0x00000, "QOS_CAUSE_RESERVATION_TIMEOUT" },
1156   { 0x00001, "QOS_CAUSE_PATH_FAIL" },
1157   { 0x00002, "QOS_CAUSE_RESV_FAIL" },
1158   { 0x00003, "QOS_CAUSE_LISTEN_FAIL" },
1159   { 0x00004, "QOS_CAUSE_RESOURCE_UNAVAILABLE" },
1160   { 0x00005, "QOS_CAUSE_LISTEN_TIMEOUT" },
1161   { 0x00006, "QOS_CAUSE_RESV_RETRIES_FAIL" },
1162   { 0x00007, "QOS_CAUSE_PATH_RETRIES_FAIL" },
1163   { 0x00008, "QOS_CAUSE_RESV_PREEMPTION" },
1164   { 0x00009, "QOS_CAUSE_PATH_PREEMPTION" },
1165   { 0x0000a, "QOS_CAUSE_RESV_MODIFY_FAIL" },
1166   { 0x0000b, "QOS_CAUSE_PATH_MODIFY_FAIL" },
1167   { 0x0000c, "QOS_CAUSE_RESV_TEAR" },
1168   { 0x00000, NULL }
1169 };
1170 static value_string_ext QoSErrorCode_ext = VALUE_STRING_EXT_INIT(QoSErrorCode);
1171
1172 static const value_string RSVPErrorCode[] = {
1173   { 0x00000, "CONFIRM" },
1174   { 0x00001, "ADMISSION" },
1175   { 0x00002, "ADMINISTRATIVE" },
1176   { 0x00003, "NO_PATH_INFORMATION" },
1177   { 0x00004, "NO_SENDER_INFORMATION" },
1178   { 0x00005, "CONFLICTING_STYLE" },
1179   { 0x00006, "UNKNOWN_STYLE" },
1180   { 0x00007, "CONFLICTING_DST_PORTS" },
1181   { 0x00008, "CONFLICTING_SRC_PORTS" },
1182   { 0x0000c, "SERVICE_PREEMPTED" },
1183   { 0x0000d, "UNKNOWN_OBJECT_CLASS" },
1184   { 0x0000e, "UNKNOWN_CLASS_TYPE" },
1185   { 0x00014, "API" },
1186   { 0x00015, "TRAFFIC" },
1187   { 0x00016, "TRAFFIC_SYSTEM" },
1188   { 0x00017, "SYSTEM" },
1189   { 0x00018, "ROUTING_PROBLEM" },
1190   { 0x00000, NULL }
1191 };
1192 static value_string_ext RSVPErrorCode_ext = VALUE_STRING_EXT_INIT(RSVPErrorCode);
1193
1194 static const value_string SubscriptionFeatureID[] = {
1195   { 0x00001, "BLF" },
1196   { 0x00000, NULL }
1197 };
1198 static value_string_ext SubscriptionFeatureID_ext = VALUE_STRING_EXT_INIT(SubscriptionFeatureID);
1199
1200 static const value_string MediaPathID[] = {
1201   { 0x00001, "Headset" },
1202   { 0x00002, "Handset" },
1203   { 0x00003, "Speaker" },
1204   { 0x00000, NULL }
1205 };
1206 static value_string_ext MediaPathID_ext = VALUE_STRING_EXT_INIT(MediaPathID);
1207
1208 static const value_string MediaPathEvent[] = {
1209   { 0x00001, "On" },
1210   { 0x00002, "Off" },
1211   { 0x00000, NULL }
1212 };
1213 static value_string_ext MediaPathEvent_ext = VALUE_STRING_EXT_INIT(MediaPathEvent);
1214
1215 static const value_string MediaPathCapabilities[] = {
1216   { 0x00001, "Enable" },
1217   { 0x00002, "Disable" },
1218   { 0x00003, "Monitor" },
1219   { 0x00000, NULL }
1220 };
1221 static value_string_ext MediaPathCapabilities_ext = VALUE_STRING_EXT_INIT(MediaPathCapabilities);
1222
1223 static const value_string DeviceTone[] = {
1224   { 0x00000, "Silence" },
1225   { 0x00001, "Dtmf1" },
1226   { 0x00002, "Dtmf2" },
1227   { 0x00003, "Dtmf3" },
1228   { 0x00004, "Dtmf4" },
1229   { 0x00005, "Dtmf5" },
1230   { 0x00006, "Dtmf6" },
1231   { 0x00007, "Dtmf7" },
1232   { 0x00008, "Dtmf8" },
1233   { 0x00009, "Dtmf9" },
1234   { 0x0000a, "Dtmf0" },
1235   { 0x0000e, "DtmfStar" },
1236   { 0x0000f, "DtmfPound" },
1237   { 0x00010, "DtmfA" },
1238   { 0x00011, "DtmfB" },
1239   { 0x00012, "DtmfC" },
1240   { 0x00013, "DtmfD" },
1241   { 0x00021, "InsideDialTone" },
1242   { 0x00022, "OutsideDialTone" },
1243   { 0x00023, "LineBusyTone" },
1244   { 0x00024, "AlertingTone" },
1245   { 0x00025, "ReorderTone" },
1246   { 0x00026, "RecorderWarningTone" },
1247   { 0x00027, "RecorderDetectedTone" },
1248   { 0x00028, "RevertingTone" },
1249   { 0x00029, "ReceiverOffHookTone" },
1250   { 0x0002a, "MessageWaitingIndicatorTone" },
1251   { 0x0002b, "NoSuchNumberTone" },
1252   { 0x0002c, "BusyVerificationTone" },
1253   { 0x0002d, "CallWaitingTone" },
1254   { 0x0002e, "ConfirmationTone" },
1255   { 0x0002f, "CampOnIndicationTone" },
1256   { 0x00030, "RecallDialTone" },
1257   { 0x00031, "ZipZip" },
1258   { 0x00032, "Zip" },
1259   { 0x00033, "BeepBonk" },
1260   { 0x00034, "MusicTone" },
1261   { 0x00035, "HoldTone" },
1262   { 0x00036, "TestTone" },
1263   { 0x00038, "MonitorWarningTone" },
1264   { 0x00039, "SecureWarningTone" },
1265   { 0x00040, "AddCallWaiting" },
1266   { 0x00041, "PriorityCallWait" },
1267   { 0x00042, "RecallDial" },
1268   { 0x00043, "BargIn" },
1269   { 0x00044, "DistinctAlert" },
1270   { 0x00045, "PriorityAlert" },
1271   { 0x00046, "ReminderRing" },
1272   { 0x00047, "PrecedenceRingBack" },
1273   { 0x00048, "PreemptionTone" },
1274   { 0x00049, "NonSecureWarningTone" },
1275   { 0x00050, "MF1" },
1276   { 0x00051, "MF2" },
1277   { 0x00052, "MF3" },
1278   { 0x00053, "MF4" },
1279   { 0x00054, "MF5" },
1280   { 0x00055, "MF6" },
1281   { 0x00056, "MF7" },
1282   { 0x00057, "MF8" },
1283   { 0x00058, "MF9" },
1284   { 0x00059, "MF0" },
1285   { 0x0005a, "MFKP1" },
1286   { 0x0005b, "MFST" },
1287   { 0x0005c, "MFKP2" },
1288   { 0x0005d, "MFSTP" },
1289   { 0x0005e, "MFST3P" },
1290   { 0x0005f, "MILLIWATT" },
1291   { 0x00060, "MILLIWATTTEST" },
1292   { 0x00061, "HIGHTONE" },
1293   { 0x00062, "FLASHOVERRIDE" },
1294   { 0x00063, "FLASH" },
1295   { 0x00064, "PRIORITY" },
1296   { 0x00065, "IMMEDIATE" },
1297   { 0x00066, "PREAMPWARN" },
1298   { 0x00067, "2105HZ" },
1299   { 0x00068, "2600HZ" },
1300   { 0x00069, "440HZ" },
1301   { 0x0006a, "300HZ" },
1302   { 0x0006b, "Mobility_WP" },
1303   { 0x0006c, "Mobility_UAC" },
1304   { 0x0006d, "Mobility_WTDN" },
1305   { 0x0006e, "Mobility_MON" },
1306   { 0x0006f, "Mobility_MOFF" },
1307   { 0x00070, "Mobility_UKC" },
1308   { 0x00071, "Mobility_VMA" },
1309   { 0x00072, "Mobility_FAC" },
1310   { 0x00073, "Mobility_CMC" },
1311   { 0x00077, "MLPP_PALA" },
1312   { 0x00078, "MLPP_ICA" },
1313   { 0x00079, "MLPP_VCA" },
1314   { 0x0007a, "MLPP_BPA" },
1315   { 0x0007b, "MLPP_BNEA" },
1316   { 0x0007c, "MLPP_UPA" },
1317   { 0x0007d, "TUA" },
1318   { 0x0007e, "GONE" },
1319   { 0x0007f, "NoTone" },
1320   { 0x00080, "MeetMe_Greeting" },
1321   { 0x00081, "MeetMe_NumberInvalid" },
1322   { 0x00082, "MeetMe_NumberFailed" },
1323   { 0x00083, "MeetMe_EnterPIN" },
1324   { 0x00084, "MeetMe_InvalidPIN" },
1325   { 0x00085, "MeetMe_FailedPIN" },
1326   { 0x00086, "MeetMe_CFB_Failed" },
1327   { 0x00087, "MeetMe_EnterAccessCode" },
1328   { 0x00088, "MeetMe_AccessCodeInvalid" },
1329   { 0x00089, "MeetMe_AccessCodeFailed" },
1330   { 0x0008a, "MAX" },
1331   { 0x00000, NULL }
1332 };
1333 static value_string_ext DeviceTone_ext = VALUE_STRING_EXT_INIT(DeviceTone);
1334
1335 static const value_string ToneOutputDirection[] = {
1336   { 0x00000, "User" },
1337   { 0x00001, "Network" },
1338   { 0x00002, "All" },
1339   { 0x00000, NULL }
1340 };
1341 static value_string_ext ToneOutputDirection_ext = VALUE_STRING_EXT_INIT(ToneOutputDirection);
1342
1343 static const value_string RingMode[] = {
1344   { 0x00001, "RingOff" },
1345   { 0x00002, "InsideRing" },
1346   { 0x00003, "OutsideRing" },
1347   { 0x00004, "FeatureRing" },
1348   { 0x00005, "FlashOnly" },
1349   { 0x00006, "PrecedenceRing" },
1350   { 0x00000, NULL }
1351 };
1352 static value_string_ext RingMode_ext = VALUE_STRING_EXT_INIT(RingMode);
1353
1354 static const value_string RingDuration[] = {
1355   { 0x00001, "NormalRing" },
1356   { 0x00002, "SingleRing" },
1357   { 0x00000, NULL }
1358 };
1359 static value_string_ext RingDuration_ext = VALUE_STRING_EXT_INIT(RingDuration);
1360
1361 static const value_string LampMode[] = {
1362   { 0x00001, "Off" },
1363   { 0x00002, "On" },
1364   { 0x00003, "Wink" },
1365   { 0x00004, "Flash" },
1366   { 0x00005, "Blink" },
1367   { 0x00000, NULL }
1368 };
1369 static value_string_ext LampMode_ext = VALUE_STRING_EXT_INIT(LampMode);
1370
1371 static const value_string SpeakerMode[] = {
1372   { 0x00001, "On" },
1373   { 0x00002, "Off" },
1374   { 0x00000, NULL }
1375 };
1376 static value_string_ext SpeakerMode_ext = VALUE_STRING_EXT_INIT(SpeakerMode);
1377
1378 static const value_string MicrophoneMode[] = {
1379   { 0x00001, "On" },
1380   { 0x00002, "Off" },
1381   { 0x00000, NULL }
1382 };
1383 static value_string_ext MicrophoneMode_ext = VALUE_STRING_EXT_INIT(MicrophoneMode);
1384
1385 static const value_string Media_SilenceSuppression[] = {
1386   { 0x00000, "Media_SilenceSuppression_Off" },
1387   { 0x00001, "Media_SilenceSuppression_On" },
1388   { 0x00000, NULL }
1389 };
1390 static value_string_ext Media_SilenceSuppression_ext = VALUE_STRING_EXT_INIT(Media_SilenceSuppression);
1391
1392 static const value_string MediaEncryptionAlgorithmType[] = {
1393   { 0x00000, "NO_ENCRYPTION" },
1394   { 0x00001, "CCM_AES_CM_128_HMAC_SHA1_32" },
1395   { 0x00002, "CCM_AES_CM_128_HMAC_SHA1_80" },
1396   { 0x00003, "CCM_F8_128_HMAC_SHA1_32" },
1397   { 0x00004, "CCM_F8_128_HMAC_SHA1_80" },
1398   { 0x00005, "CCM_AEAD_AES_128_GCM" },
1399   { 0x00006, "CCM_AEAD_AES_256_GCM" },
1400   { 0x00000, NULL }
1401 };
1402 static value_string_ext MediaEncryptionAlgorithmType_ext = VALUE_STRING_EXT_INIT(MediaEncryptionAlgorithmType);
1403
1404 static const value_string PortHandling[] = {
1405   { 0x00000, "CLOSE_PORT" },
1406   { 0x00001, "KEEP_PORT" },
1407   { 0x00000, NULL }
1408 };
1409 static value_string_ext PortHandling_ext = VALUE_STRING_EXT_INIT(PortHandling);
1410
1411 static const value_string CallType[] = {
1412   { 0x00001, "InBoundCall" },
1413   { 0x00002, "OutBoundCall" },
1414   { 0x00003, "ForwardCall" },
1415   { 0x00000, NULL }
1416 };
1417 static value_string_ext CallType_ext = VALUE_STRING_EXT_INIT(CallType);
1418
1419 static const value_string CallSecurityStatusType[] = {
1420   { 0x00000, "Unknown" },
1421   { 0x00001, "NotAuthenticated" },
1422   { 0x00002, "Authenticated" },
1423   { 0x00003, "Encrypted" },
1424   { 0x00004, "Max" },
1425   { 0x00000, NULL }
1426 };
1427 static value_string_ext CallSecurityStatusType_ext = VALUE_STRING_EXT_INIT(CallSecurityStatusType);
1428
1429 static const value_string SessionType[] = {
1430   { 0x00001, "Chat" },
1431   { 0x00002, "Whiteboard" },
1432   { 0x00004, "ApplicationSharing" },
1433   { 0x00008, "FileTransfer" },
1434   { 0x00010, "Video" },
1435   { 0x00000, NULL }
1436 };
1437 static value_string_ext SessionType_ext = VALUE_STRING_EXT_INIT(SessionType);
1438
1439 static const value_string ButtonType[] = {
1440   { 0x00000, "Unused" },
1441   { 0x00001, "Last Number Redial" },
1442   { 0x00002, "SpeedDial" },
1443   { 0x00003, "Hold" },
1444   { 0x00004, "Transfer" },
1445   { 0x00005, "Forward All" },
1446   { 0x00006, "Forward Busy" },
1447   { 0x00007, "Forward No Answer" },
1448   { 0x00008, "Display" },
1449   { 0x00009, "Line" },
1450   { 0x0000a, "T120 Chat" },
1451   { 0x0000b, "T120 Whiteboard" },
1452   { 0x0000c, "T120 Application Sharing" },
1453   { 0x0000d, "T120 File Transfer" },
1454   { 0x0000e, "Video" },
1455   { 0x0000f, "Voicemail" },
1456   { 0x00010, "Answer Release" },
1457   { 0x00011, "Auto Answer" },
1458   { 0x00012, "Select" },
1459   { 0x00013, "Feature" },
1460   { 0x00014, "ServiceURL" },
1461   { 0x00015, "BusyLampField Speeddial" },
1462   { 0x0001b, "Malicious Call" },
1463   { 0x00021, "Generic App B1" },
1464   { 0x00022, "Generic App B2" },
1465   { 0x00023, "Generic App B3" },
1466   { 0x00024, "Generic App B4" },
1467   { 0x00025, "Generic App B5" },
1468   { 0x00026, "Monitor/Multiblink" },
1469   { 0x0007b, "Meet Me Conference" },
1470   { 0x0007d, "Conference" },
1471   { 0x0007e, "Call Park" },
1472   { 0x0007f, "Call Pickup" },
1473   { 0x00080, "Group Call Pickup" },
1474   { 0x00081, "Mobility" },
1475   { 0x00082, "DoNotDisturb" },
1476   { 0x00083, "ConfList" },
1477   { 0x00084, "RemoveLastParticipant" },
1478   { 0x00085, "QRT" },
1479   { 0x00086, "CallBack" },
1480   { 0x00087, "OtherPickup" },
1481   { 0x00088, "VideoMode" },
1482   { 0x00089, "NewCall" },
1483   { 0x0008a, "EndCall" },
1484   { 0x0008b, "HLog" },
1485   { 0x0008f, "Queuing" },
1486   { 0x000c0, "Test E" },
1487   { 0x000c1, "Test F" },
1488   { 0x000c2, "Messages" },
1489   { 0x000c3, "Directory" },
1490   { 0x000c4, "Test I" },
1491   { 0x000c5, "Application" },
1492   { 0x000c6, "Headset" },
1493   { 0x000f0, "Keypad" },
1494   { 0x000fd, "Aec" },
1495   { 0x000ff, "Undefined" },
1496   { 0x00000, NULL }
1497 };
1498 static value_string_ext ButtonType_ext = VALUE_STRING_EXT_INIT(ButtonType);
1499
1500 static const value_string DeviceResetType[] = {
1501   { 0x00001, "RESET" },
1502   { 0x00002, "RESTART" },
1503   { 0x00003, "APPLY_CONFIG" },
1504   { 0x00000, NULL }
1505 };
1506 static value_string_ext DeviceResetType_ext = VALUE_STRING_EXT_INIT(DeviceResetType);
1507
1508 static const value_string Media_EchoCancellation[] = {
1509   { 0x00000, "Media_EchoCancellation_Off" },
1510   { 0x00001, "Media_EchoCancellation_On" },
1511   { 0x00000, NULL }
1512 };
1513 static value_string_ext Media_EchoCancellation_ext = VALUE_STRING_EXT_INIT(Media_EchoCancellation);
1514
1515 static const value_string SoftKeyTemplateIndex[] = {
1516   { 0x00001, "Redial" },
1517   { 0x00002, "NewCall" },
1518   { 0x00003, "Hold" },
1519   { 0x00004, "Transfer" },
1520   { 0x00005, "CfwdAll" },
1521   { 0x00006, "CfwdBusy" },
1522   { 0x00007, "CfwdNoAnswer" },
1523   { 0x00008, "BackSpace" },
1524   { 0x00009, "EndCall" },
1525   { 0x0000a, "Resume" },
1526   { 0x0000b, "Answer" },
1527   { 0x0000c, "Info" },
1528   { 0x0000d, "Confrn" },
1529   { 0x0000e, "Park" },
1530   { 0x0000f, "Join" },
1531   { 0x00010, "MeetMe" },
1532   { 0x00011, "PickUp" },
1533   { 0x00012, "GrpPickup" },
1534   { 0x00013, "Monitor" },
1535   { 0x00014, "CallBack" },
1536   { 0x00015, "Barge" },
1537   { 0x00016, "DND" },
1538   { 0x00017, "ConfList" },
1539   { 0x00018, "Select" },
1540   { 0x00019, "Private" },
1541   { 0x0001a, "Transfer Voicemail" },
1542   { 0x0001b, "Direct Transfer" },
1543   { 0x0001c, "Immediate Divert" },
1544   { 0x0001d, "Video Mode" },
1545   { 0x0001e, "Intercept" },
1546   { 0x0001f, "Empty" },
1547   { 0x00020, "Dial" },
1548   { 0x00021, "Conference Barge" },
1549   { 0x00000, NULL }
1550 };
1551 static value_string_ext SoftKeyTemplateIndex_ext = VALUE_STRING_EXT_INIT(SoftKeyTemplateIndex);
1552
1553 static const value_string SoftKeyInfoIndex[] = {
1554   { 0x0012d, "Redial" },
1555   { 0x0012e, "NewCall" },
1556   { 0x0012f, "Hold" },
1557   { 0x00130, "Transfer" },
1558   { 0x00131, "CfwdAll" },
1559   { 0x00132, "CfwdBusy" },
1560   { 0x00133, "CfwdNoAnswer" },
1561   { 0x00134, "BackSpace" },
1562   { 0x00135, "EndCall" },
1563   { 0x00136, "Resume" },
1564   { 0x00137, "Answer" },
1565   { 0x00138, "Info" },
1566   { 0x00139, "Confrn" },
1567   { 0x0013a, "Park" },
1568   { 0x0013b, "Join" },
1569   { 0x0013c, "MeetMe" },
1570   { 0x0013d, "PickUp" },
1571   { 0x0013e, "GrpPickup" },
1572   { 0x0013f, "Monitor" },
1573   { 0x00140, "CallBack" },
1574   { 0x00141, "Barge" },
1575   { 0x00142, "DND" },
1576   { 0x00143, "ConfList" },
1577   { 0x00144, "Select" },
1578   { 0x00145, "Private" },
1579   { 0x00146, "Transfer Voicemail" },
1580   { 0x00147, "Direct Transfer" },
1581   { 0x00148, "Immediate Divert" },
1582   { 0x00149, "Video Mode" },
1583   { 0x0014a, "Intercept" },
1584   { 0x0014b, "Empty" },
1585   { 0x0014c, "Dial" },
1586   { 0x0014d, "Conference Barge" },
1587   { 0x00000, NULL }
1588 };
1589 static value_string_ext SoftKeyInfoIndex_ext = VALUE_STRING_EXT_INIT(SoftKeyInfoIndex);
1590
1591 static const value_string DCallState[] = {
1592   { 0x00000, "Idle" },
1593   { 0x00001, "OffHook" },
1594   { 0x00002, "OnHook" },
1595   { 0x00003, "RingOut" },
1596   { 0x00004, "RingIn" },
1597   { 0x00005, "Connected" },
1598   { 0x00006, "Busy" },
1599   { 0x00007, "Congestion" },
1600   { 0x00008, "Hold" },
1601   { 0x00009, "CallWaiting" },
1602   { 0x0000a, "CallTransfer" },
1603   { 0x0000b, "CallPark" },
1604   { 0x0000c, "Proceed" },
1605   { 0x0000d, "CallRemoteMultiline" },
1606   { 0x0000e, "InvalidNumber" },
1607   { 0x0000f, "HoldRevert" },
1608   { 0x00010, "Whisper" },
1609   { 0x00011, "RemoteHold" },
1610   { 0x00012, "MaxState" },
1611   { 0x00000, NULL }
1612 };
1613 static value_string_ext DCallState_ext = VALUE_STRING_EXT_INIT(DCallState);
1614
1615 static const value_string CallPrivacy[] = {
1616   { 0x00000, "None" },
1617   { 0x00001, "Limited" },
1618   { 0x00002, "Full" },
1619   { 0x00000, NULL }
1620 };
1621 static value_string_ext CallPrivacy_ext = VALUE_STRING_EXT_INIT(CallPrivacy);
1622
1623 static const value_string DeviceUnregisterStatus[] = {
1624   { 0x00000, "Ok" },
1625   { 0x00001, "Error" },
1626   { 0x00002, "NAK" },
1627   { 0x00000, NULL }
1628 };
1629 static value_string_ext DeviceUnregisterStatus_ext = VALUE_STRING_EXT_INIT(DeviceUnregisterStatus);
1630
1631 static const value_string EndOfAnnAck[] = {
1632   { 0x00000, "NoAnnAckRequired" },
1633   { 0x00001, "AnnAckRequired" },
1634   { 0x00000, NULL }
1635 };
1636 static value_string_ext EndOfAnnAck_ext = VALUE_STRING_EXT_INIT(EndOfAnnAck);
1637
1638 static const value_string AnnPlayMode[] = {
1639   { 0x00000, "XmlConfigMode" },
1640   { 0x00001, "OneShotMode" },
1641   { 0x00002, "ContinuousMode" },
1642   { 0x00000, NULL }
1643 };
1644 static value_string_ext AnnPlayMode_ext = VALUE_STRING_EXT_INIT(AnnPlayMode);
1645
1646 static const value_string PlayAnnStatus[] = {
1647   { 0x00000, "OK" },
1648   { 0x00001, "Err" },
1649   { 0x00000, NULL }
1650 };
1651 static value_string_ext PlayAnnStatus_ext = VALUE_STRING_EXT_INIT(PlayAnnStatus);
1652
1653 #define MISCCOMMANDTYPE_VIDEOFREEZEPICTURE     0x00000
1654 #define MISCCOMMANDTYPE_VIDEOFASTUPDATEPICTURE 0x00001
1655 #define MISCCOMMANDTYPE_VIDEOFASTUPDATEGOB     0x00002
1656 #define MISCCOMMANDTYPE_VIDEOFASTUPDATEMB      0x00003
1657 #define MISCCOMMANDTYPE_LOSTPICTURE            0x00004
1658 #define MISCCOMMANDTYPE_LOSTPARTIALPICTURE     0x00005
1659 #define MISCCOMMANDTYPE_RECOVERYREFERENCEPICTURE 0x00006
1660 #define MISCCOMMANDTYPE_TEMPORALSPATIALTRADEOFF 0x00007
1661
1662 static const value_string MiscCommandType[] = {
1663   { MISCCOMMANDTYPE_VIDEOFREEZEPICTURE, "videoFreezePicture" },
1664   { MISCCOMMANDTYPE_VIDEOFASTUPDATEPICTURE, "videoFastUpdatePicture" },
1665   { MISCCOMMANDTYPE_VIDEOFASTUPDATEGOB, "videoFastUpdateGOB" },
1666   { MISCCOMMANDTYPE_VIDEOFASTUPDATEMB, "videoFastUpdateMB" },
1667   { MISCCOMMANDTYPE_LOSTPICTURE, "lostPicture" },
1668   { MISCCOMMANDTYPE_LOSTPARTIALPICTURE, "lostPartialPicture" },
1669   { MISCCOMMANDTYPE_RECOVERYREFERENCEPICTURE, "recoveryReferencePicture" },
1670   { MISCCOMMANDTYPE_TEMPORALSPATIALTRADEOFF, "temporalSpatialTradeOff" },
1671   { 0x00000, NULL }
1672 };
1673 static value_string_ext MiscCommandType_ext = VALUE_STRING_EXT_INIT(MiscCommandType);
1674
1675 static const value_string MediaTransportType[] = {
1676   { 0x00001, "RTP" },
1677   { 0x00002, "UDP" },
1678   { 0x00003, "TCP" },
1679   { 0x00000, NULL }
1680 };
1681 static value_string_ext MediaTransportType_ext = VALUE_STRING_EXT_INIT(MediaTransportType);
1682
1683 static const value_string ResvStyle[] = {
1684   { 0x00001, "FF" },
1685   { 0x00002, "SE" },
1686   { 0x00003, "WF" },
1687   { 0x00000, NULL }
1688 };
1689 static value_string_ext ResvStyle_ext = VALUE_STRING_EXT_INIT(ResvStyle);
1690
1691 static const value_string SubscribeCause[] = {
1692   { 0x00000, "OK" },
1693   { 0x00001, "RouteFail" },
1694   { 0x00002, "AuthFail" },
1695   { 0x00003, "Timeout" },
1696   { 0x00004, "TrunkTerm" },
1697   { 0x00005, "TrunkForbidden" },
1698   { 0x00006, "Throttle" },
1699   { 0x00000, NULL }
1700 };
1701 static value_string_ext SubscribeCause_ext = VALUE_STRING_EXT_INIT(SubscribeCause);
1702
1703 static const value_string CallHistoryDisposition[] = {
1704   { 0x00000, "Ignore" },
1705   { 0x00001, "PlacedCalls" },
1706   { 0x00002, "ReceivedCalls" },
1707   { 0x00003, "MissedCalls" },
1708   { 0xffffffff, "UnknownDisp" },
1709   { 0x00000, NULL }
1710 };
1711 static value_string_ext CallHistoryDisposition_ext = VALUE_STRING_EXT_INIT(CallHistoryDisposition);
1712
1713 static const value_string MwiNotificationResult[] = {
1714   { 0x00000, "Ok" },
1715   { 0x00001, "GeneralError" },
1716   { 0x00002, "RequestRejected" },
1717   { 0x00003, "VmCountOutOfBounds" },
1718   { 0x00004, "FaxCountOutOfBounds" },
1719   { 0x00005, "InvalidPriorityVmCount" },
1720   { 0x00006, "InvalidPriorityFaxCount" },
1721   { 0x00000, NULL }
1722 };
1723 static value_string_ext MwiNotificationResult_ext = VALUE_STRING_EXT_INIT(MwiNotificationResult);
1724
1725 static const value_string RecordingStatus[] = {
1726   { 0x00000, "_OFF" },
1727   { 0x00001, "_ON" },
1728   { 0x00000, NULL }
1729 };
1730 static value_string_ext RecordingStatus_ext = VALUE_STRING_EXT_INIT(RecordingStatus);
1731
1732
1733 /* Staticly Declared Variables */
1734 static int proto_skinny                 = -1;
1735 static int hf_skinny_messageId          = -1;
1736 static int hf_skinny_data_length        = -1;
1737 static int hf_skinny_hdr_version        = -1;
1738 static int hf_skinny_xmlData            = -1;
1739 static int hf_skinny_ipv4or6            = -1;
1740
1741 static int hf_skinny_AlternateCallingParty = -1;
1742 static int hf_skinny_CallingPartyName = -1;
1743 static int hf_skinny_CallingPartyNumber = -1;
1744 static int hf_skinny_DSCPValue = -1;
1745 static int hf_skinny_DeviceName = -1;
1746 static int hf_skinny_FutureUse1 = -1;
1747 static int hf_skinny_FutureUse2 = -1;
1748 static int hf_skinny_FutureUse3 = -1;
1749 static int hf_skinny_Generic_Bitfield_Bit1 = -1;
1750 static int hf_skinny_Generic_Bitfield_Bit10 = -1;
1751 static int hf_skinny_Generic_Bitfield_Bit11 = -1;
1752 static int hf_skinny_Generic_Bitfield_Bit12 = -1;
1753 static int hf_skinny_Generic_Bitfield_Bit13 = -1;
1754 static int hf_skinny_Generic_Bitfield_Bit14 = -1;
1755 static int hf_skinny_Generic_Bitfield_Bit15 = -1;
1756 static int hf_skinny_Generic_Bitfield_Bit16 = -1;
1757 static int hf_skinny_Generic_Bitfield_Bit17 = -1;
1758 static int hf_skinny_Generic_Bitfield_Bit18 = -1;
1759 static int hf_skinny_Generic_Bitfield_Bit19 = -1;
1760 static int hf_skinny_Generic_Bitfield_Bit2 = -1;
1761 static int hf_skinny_Generic_Bitfield_Bit20 = -1;
1762 static int hf_skinny_Generic_Bitfield_Bit21 = -1;
1763 static int hf_skinny_Generic_Bitfield_Bit22 = -1;
1764 static int hf_skinny_Generic_Bitfield_Bit23 = -1;
1765 static int hf_skinny_Generic_Bitfield_Bit24 = -1;
1766 static int hf_skinny_Generic_Bitfield_Bit25 = -1;
1767 static int hf_skinny_Generic_Bitfield_Bit26 = -1;
1768 static int hf_skinny_Generic_Bitfield_Bit27 = -1;
1769 static int hf_skinny_Generic_Bitfield_Bit28 = -1;
1770 static int hf_skinny_Generic_Bitfield_Bit29 = -1;
1771 static int hf_skinny_Generic_Bitfield_Bit3 = -1;
1772 static int hf_skinny_Generic_Bitfield_Bit30 = -1;
1773 static int hf_skinny_Generic_Bitfield_Bit31 = -1;
1774 static int hf_skinny_Generic_Bitfield_Bit32 = -1;
1775 static int hf_skinny_Generic_Bitfield_Bit4 = -1;
1776 static int hf_skinny_Generic_Bitfield_Bit5 = -1;
1777 static int hf_skinny_Generic_Bitfield_Bit6 = -1;
1778 static int hf_skinny_Generic_Bitfield_Bit7 = -1;
1779 static int hf_skinny_Generic_Bitfield_Bit8 = -1;
1780 static int hf_skinny_Generic_Bitfield_Bit9 = -1;
1781 static int hf_skinny_HuntPilotName = -1;
1782 static int hf_skinny_HuntPilotNumber = -1;
1783 static int hf_skinny_MPI = -1;
1784 static int hf_skinny_OrigDialed = -1;
1785 static int hf_skinny_PhoneFeatures_Abbreviated_Dial = -1;
1786 static int hf_skinny_PhoneFeatures_Bit1 = -1;
1787 static int hf_skinny_PhoneFeatures_Bit11 = -1;
1788 static int hf_skinny_PhoneFeatures_Bit12 = -1;
1789 static int hf_skinny_PhoneFeatures_Bit13 = -1;
1790 static int hf_skinny_PhoneFeatures_Bit14 = -1;
1791 static int hf_skinny_PhoneFeatures_Bit15 = -1;
1792 static int hf_skinny_PhoneFeatures_Bit2 = -1;
1793 static int hf_skinny_PhoneFeatures_Bit3 = -1;
1794 static int hf_skinny_PhoneFeatures_Bit4 = -1;
1795 static int hf_skinny_PhoneFeatures_Bit6 = -1;
1796 static int hf_skinny_PhoneFeatures_Bit7 = -1;
1797 static int hf_skinny_PhoneFeatures_Bit9 = -1;
1798 static int hf_skinny_PhoneFeatures_DynamicMessages = -1;
1799 static int hf_skinny_PhoneFeatures_RFC2833 = -1;
1800 static int hf_skinny_PhoneFeatures_UTF8 = -1;
1801 static int hf_skinny_RFC2833PayloadType = -1;
1802 static int hf_skinny_RTCPPortNumber = -1;
1803 static int hf_skinny_RTPPayloadFormat = -1;
1804 static int hf_skinny_RedirDialed = -1;
1805 static int hf_skinny_RestrictInformationType_BitsReserved = -1;
1806 static int hf_skinny_RestrictInformationType_CalledParty = -1;
1807 static int hf_skinny_RestrictInformationType_CalledPartyName = -1;
1808 static int hf_skinny_RestrictInformationType_CalledPartyNumber = -1;
1809 static int hf_skinny_RestrictInformationType_CallingParty = -1;
1810 static int hf_skinny_RestrictInformationType_CallingPartyName = -1;
1811 static int hf_skinny_RestrictInformationType_CallingPartyNumber = -1;
1812 static int hf_skinny_RestrictInformationType_LastRedirectParty = -1;
1813 static int hf_skinny_RestrictInformationType_LastRedirectPartyName = -1;
1814 static int hf_skinny_RestrictInformationType_LastRedirectPartyNumber = -1;
1815 static int hf_skinny_RestrictInformationType_OriginalCalledParty = -1;
1816 static int hf_skinny_RestrictInformationType_OriginalCalledPartyName = -1;
1817 static int hf_skinny_RestrictInformationType_OriginalCalledPartyNumber = -1;
1818 static int hf_skinny_ServerName = -1;
1819 static int hf_skinny_SoftKeyMask_SoftKey1 = -1;
1820 static int hf_skinny_SoftKeyMask_SoftKey10 = -1;
1821 static int hf_skinny_SoftKeyMask_SoftKey11 = -1;
1822 static int hf_skinny_SoftKeyMask_SoftKey12 = -1;
1823 static int hf_skinny_SoftKeyMask_SoftKey13 = -1;
1824 static int hf_skinny_SoftKeyMask_SoftKey14 = -1;
1825 static int hf_skinny_SoftKeyMask_SoftKey15 = -1;
1826 static int hf_skinny_SoftKeyMask_SoftKey16 = -1;
1827 static int hf_skinny_SoftKeyMask_SoftKey2 = -1;
1828 static int hf_skinny_SoftKeyMask_SoftKey3 = -1;
1829 static int hf_skinny_SoftKeyMask_SoftKey4 = -1;
1830 static int hf_skinny_SoftKeyMask_SoftKey5 = -1;
1831 static int hf_skinny_SoftKeyMask_SoftKey6 = -1;
1832 static int hf_skinny_SoftKeyMask_SoftKey7 = -1;
1833 static int hf_skinny_SoftKeyMask_SoftKey8 = -1;
1834 static int hf_skinny_SoftKeyMask_SoftKey9 = -1;
1835 static int hf_skinny_active = -1;
1836 static int hf_skinny_activeConferenceOnRegistration = -1;
1837 static int hf_skinny_activeConferences = -1;
1838 static int hf_skinny_activeForward = -1;
1839 static int hf_skinny_activeStreams = -1;
1840 static int hf_skinny_activeStreamsOnRegistration = -1;
1841 static int hf_skinny_add_participant_result = -1;
1842 static int hf_skinny_alarmInfo = -1;
1843 static int hf_skinny_alarmSeverity = -1;
1844 static int hf_skinny_algorithmID = -1;
1845 static int hf_skinny_alignmentPadding = -1;
1846 static int hf_skinny_annAckReq = -1;
1847 static int hf_skinny_annPlayMode = -1;
1848 static int hf_skinny_annStatus = -1;
1849 static int hf_skinny_annexNandWFutureUse = -1;
1850 static int hf_skinny_appConfID = -1;
1851 static int hf_skinny_appData = -1;
1852 static int hf_skinny_appID = -1;
1853 static int hf_skinny_appInstanceID = -1;
1854 static int hf_skinny_appName = -1;
1855 static int hf_skinny_applicationID = -1;
1856 static int hf_skinny_areMessagesWaiting = -1;
1857 static int hf_skinny_associatedStreamID = -1;
1858 static int hf_skinny_audioCapCount = -1;
1859 static int hf_skinny_audioLevelAdjustment = -1;
1860 static int hf_skinny_audit_participant_result = -1;
1861 static int hf_skinny_averageBitRate = -1;
1862 static int hf_skinny_bandwidth = -1;
1863 static int hf_skinny_bitRate = -1;
1864 static int hf_skinny_bridgeParticipantId = -1;
1865 static int hf_skinny_burstSize = -1;
1866 static int hf_skinny_busyTrigger = -1;
1867 static int hf_skinny_buttonCount = -1;
1868 static int hf_skinny_buttonDefinition = -1;
1869 static int hf_skinny_buttonOffset = -1;
1870 static int hf_skinny_callHistoryDisposition = -1;
1871 static int hf_skinny_callInstance = -1;
1872 static int hf_skinny_callReference = -1;
1873 static int hf_skinny_callSecurityStatus = -1;
1874 static int hf_skinny_callSelectStat = -1;
1875 static int hf_skinny_callState = -1;
1876 static int hf_skinny_callType = -1;
1877 static int hf_skinny_calledParty = -1;
1878 static int hf_skinny_calledPartyName = -1;
1879 static int hf_skinny_callingParty = -1;
1880 static int hf_skinny_callingPartyName = -1;
1881 static int hf_skinny_callingPartyNumber = -1;
1882 static int hf_skinny_capAndVer = -1;
1883 static int hf_skinny_capCount = -1;
1884 static int hf_skinny_cause = -1;
1885 static int hf_skinny_cdpnVoiceMailbox = -1;
1886 static int hf_skinny_cgpnVoiceMailbox = -1;
1887 static int hf_skinny_chan0MaxPayload = -1;
1888 static int hf_skinny_chan2MaxPayload = -1;
1889 static int hf_skinny_chan2MaxWindow = -1;
1890 static int hf_skinny_chan3MaxPayload = -1;
1891 static int hf_skinny_clockConversionCode = -1;
1892 static int hf_skinny_clockDivisor = -1;
1893 static int hf_skinny_codecMode = -1;
1894 static int hf_skinny_codecParam1 = -1;
1895 static int hf_skinny_codecParam2 = -1;
1896 static int hf_skinny_command = -1;
1897 static int hf_skinny_compressionType = -1;
1898 static int hf_skinny_confServiceNum = -1;
1899 static int hf_skinny_conferenceID = -1;
1900 static int hf_skinny_conferenceName = -1;
1901 static int hf_skinny_configVersionStamp = -1;
1902 static int hf_skinny_confirmRequired = -1;
1903 static int hf_skinny_country = -1;
1904 static int hf_skinny_customMaxBRandCPB = -1;
1905 static int hf_skinny_customMaxDPB = -1;
1906 static int hf_skinny_customMaxFS = -1;
1907 static int hf_skinny_customMaxMBPS = -1;
1908 static int hf_skinny_customPictureFormatCount = -1;
1909 static int hf_skinny_data = -1;
1910 static int hf_skinny_dataCapCount = -1;
1911 static int hf_skinny_dataCapabilityDirection = -1;
1912 static int hf_skinny_dataLength = -1;
1913 static int hf_skinny_dataSize = -1;
1914 static int hf_skinny_dateTemplate = -1;
1915 static int hf_skinny_defendingPriority = -1;
1916 static int hf_skinny_delete_conf_result = -1;
1917 static int hf_skinny_deviceType = -1;
1918 static int hf_skinny_dialedNumber = -1;
1919 static int hf_skinny_direction = -1;
1920 static int hf_skinny_directoryNum = -1;
1921 static int hf_skinny_displayPriority = -1;
1922 static int hf_skinny_dtmfType = -1;
1923 static int hf_skinny_dynamicPayload = -1;
1924 static int hf_skinny_ecValue = -1;
1925 static int hf_skinny_encryptionCapability = -1;
1926 static int hf_skinny_errorCode = -1;
1927 static int hf_skinny_failureNodeIpAddr = -1;
1928 static int hf_skinny_featureCapabilities = -1;
1929 static int hf_skinny_featureID = -1;
1930 static int hf_skinny_featureIndex = -1;
1931 static int hf_skinny_featureStatus = -1;
1932 static int hf_skinny_featureTextLabel = -1;
1933 static int hf_skinny_features = -1;
1934 static int hf_skinny_firmwareLoadName = -1;
1935 static int hf_skinny_firstGOB = -1;
1936 static int hf_skinny_firstMB = -1;
1937 static int hf_skinny_format = -1;
1938 static int hf_skinny_forwardAllActive = -1;
1939 static int hf_skinny_forwardAllDirnum = -1;
1940 static int hf_skinny_forwardBusyActive = -1;
1941 static int hf_skinny_forwardBusyDirnum = -1;
1942 static int hf_skinny_forwardNoAnswerActive = -1;
1943 static int hf_skinny_forwardNoAnswerlDirnum = -1;
1944 static int hf_skinny_g723BitRate = -1;
1945 static int hf_skinny_headsetStatus = -1;
1946 static int hf_skinny_hearingConfPartyMask = -1;
1947 static int hf_skinny_instance = -1;
1948 static int hf_skinny_instanceNumber = -1;
1949 static int hf_skinny_ipAddr_ipv4 = -1;
1950 static int hf_skinny_ipAddr_ipv6 = -1;
1951 static int hf_skinny_ipAddressType = -1;
1952 static int hf_skinny_ipAddressingMode = -1;
1953 static int hf_skinny_ipV4AddressScope = -1;
1954 static int hf_skinny_ipV6AddressScope = -1;
1955 static int hf_skinny_isConferenceCreator = -1;
1956 static int hf_skinny_isMKIPresent = -1;
1957 static int hf_skinny_jitter = -1;
1958 static int hf_skinny_keepAliveInterval = -1;
1959 static int hf_skinny_key = -1;
1960 static int hf_skinny_keyDerivationRate = -1;
1961 static int hf_skinny_keylen = -1;
1962 static int hf_skinny_kpButton = -1;
1963 static int hf_skinny_lampMode = -1;
1964 static int hf_skinny_last = -1;
1965 static int hf_skinny_lastRedirectingParty = -1;
1966 static int hf_skinny_lastRedirectingPartyName = -1;
1967 static int hf_skinny_lastRedirectingReason = -1;
1968 static int hf_skinny_lastRedirectingVoiceMailbox = -1;
1969 static int hf_skinny_latency = -1;
1970 static int hf_skinny_layoutCount = -1;
1971 static int hf_skinny_layoutID = -1;
1972 static int hf_skinny_layouts = -1;
1973 static int hf_skinny_level = -1;
1974 static int hf_skinny_levelPreferenceCount = -1;
1975 static int hf_skinny_lineDataEntries = -1;
1976 static int hf_skinny_lineDirNumber = -1;
1977 static int hf_skinny_lineDisplayOptions = -1;
1978 static int hf_skinny_lineFullyQualifiedDisplayName = -1;
1979 static int hf_skinny_lineInstance = -1;
1980 static int hf_skinny_lineNumber = -1;
1981 static int hf_skinny_lineTextLabel = -1;
1982 static int hf_skinny_locale = -1;
1983 static int hf_skinny_locationInfo = -1;
1984 static int hf_skinny_longTermPictureIndex = -1;
1985 static int hf_skinny_macAddress = -1;
1986 static int hf_skinny_matrixConfPartyID = -1;
1987 static int hf_skinny_maxBW = -1;
1988 static int hf_skinny_maxBitRate = -1;
1989 static int hf_skinny_maxConferences = -1;
1990 static int hf_skinny_maxFramesPerPacket = -1;
1991 static int hf_skinny_maxNumCalls = -1;
1992 static int hf_skinny_maxNumOfAvailLines = -1;
1993 static int hf_skinny_maxNumberOfLines = -1;
1994 static int hf_skinny_maxProtocolVer = -1;
1995 static int hf_skinny_maxRetryNumber = -1;
1996 static int hf_skinny_maxStreams = -1;
1997 static int hf_skinny_maxStreamsPerConf = -1;
1998 static int hf_skinny_maximumBitRate = -1;
1999 static int hf_skinny_mediaPathCapabilities = -1;
2000 static int hf_skinny_mediaPathEvent = -1;
2001 static int hf_skinny_mediaPathID = -1;
2002 static int hf_skinny_mediaTransportType = -1;
2003 static int hf_skinny_mediaType = -1;
2004 static int hf_skinny_micMode = -1;
2005 static int hf_skinny_millisecondPacketSize = -1;
2006 static int hf_skinny_minBitRate = -1;
2007 static int hf_skinny_mixingMode = -1;
2008 static int hf_skinny_modAnd2833 = -1;
2009 static int hf_skinny_modelNumber = -1;
2010 static int hf_skinny_modify_conf_result = -1;
2011 static int hf_skinny_multicastIpAddr_ipv4 = -1;
2012 static int hf_skinny_multicastIpAddr_ipv6 = -1;
2013 static int hf_skinny_multicastPortNumber = -1;
2014 static int hf_skinny_multimediaOpenReceiveChannelStatus = -1;
2015 static int hf_skinny_mwiControlNumber = -1;
2016 static int hf_skinny_mwiTargetNumber = -1;
2017 static int hf_skinny_mwi_notification_result = -1;
2018 static int hf_skinny_noaudio = -1;
2019 static int hf_skinny_none = -1;
2020 static int hf_skinny_notify = -1;
2021 static int hf_skinny_nse = -1;
2022 static int hf_skinny_numNewMsgs = -1;
2023 static int hf_skinny_numOldMsgs = -1;
2024 static int hf_skinny_numberOctetsReceived = -1;
2025 static int hf_skinny_numberOctetsSent = -1;
2026 static int hf_skinny_numberOfActiveParticipants = -1;
2027 static int hf_skinny_numberOfEntries = -1;
2028 static int hf_skinny_numberOfGOBs = -1;
2029 static int hf_skinny_numberOfInServiceStreams = -1;
2030 static int hf_skinny_numberOfLines = -1;
2031 static int hf_skinny_numberOfMBs = -1;
2032 static int hf_skinny_numberOfOutOfServiceStreams = -1;
2033 static int hf_skinny_numberOfReservedParticipants = -1;
2034 static int hf_skinny_numberOfSpeedDials = -1;
2035 static int hf_skinny_numberPacketsLost = -1;
2036 static int hf_skinny_numberPacketsReceived = -1;
2037 static int hf_skinny_numberPacketsSent = -1;
2038 static int hf_skinny_openReceiveChannelStatus = -1;
2039 static int hf_skinny_originalCalledParty = -1;
2040 static int hf_skinny_originalCalledPartyName = -1;
2041 static int hf_skinny_originalCdpnRedirectReason = -1;
2042 static int hf_skinny_originalCdpnVoiceMailbox = -1;
2043 static int hf_skinny_padding = -1;
2044 static int hf_skinny_parm1 = -1;
2045 static int hf_skinny_parm2 = -1;
2046 static int hf_skinny_participantEntry = -1;
2047 static int hf_skinny_participantName = -1;
2048 static int hf_skinny_participantNumber = -1;
2049 static int hf_skinny_partyDirection = -1;
2050 static int hf_skinny_passThruData = -1;
2051 static int hf_skinny_passThruPartyID = -1;
2052 static int hf_skinny_passthruPartyID = -1;
2053 static int hf_skinny_payloadCapability = -1;
2054 static int hf_skinny_payloadDtmf = -1;
2055 static int hf_skinny_payloadType = -1;
2056 static int hf_skinny_payload_rfc_number = -1;
2057 static int hf_skinny_peakRate = -1;
2058 static int hf_skinny_pictureFormatCount = -1;
2059 static int hf_skinny_pictureHeight = -1;
2060 static int hf_skinny_pictureNumber = -1;
2061 static int hf_skinny_pictureWidth = -1;
2062 static int hf_skinny_pixelAspectRatio = -1;
2063 static int hf_skinny_portHandlingFlag = -1;
2064 static int hf_skinny_portNumber = -1;
2065 static int hf_skinny_precedenceDomain = -1;
2066 static int hf_skinny_precedenceLevel = -1;
2067 static int hf_skinny_precedenceValue = -1;
2068 static int hf_skinny_preemptionPriority = -1;
2069 static int hf_skinny_priority = -1;
2070 static int hf_skinny_privacy = -1;
2071 static int hf_skinny_profile = -1;
2072 static int hf_skinny_promptStatus = -1;
2073 static int hf_skinny_protocolDependentData = -1;
2074 static int hf_skinny_protocolVer = -1;
2075 static int hf_skinny_receptionStatus = -1;
2076 static int hf_skinny_recording_status = -1;
2077 static int hf_skinny_recoveryReferencePictureCount = -1;
2078 static int hf_skinny_remoteIpAddr_ipv4 = -1;
2079 static int hf_skinny_remoteIpAddr_ipv6 = -1;
2080 static int hf_skinny_remotePortNumber = -1;
2081 static int hf_skinny_requestedIpAddrType = -1;
2082 static int hf_skinny_reserved_for_future_use = -1;
2083 static int hf_skinny_resetType = -1;
2084 static int hf_skinny_resourceType = -1;
2085 static int hf_skinny_result = -1;
2086 static int hf_skinny_resultCode = -1;
2087 static int hf_skinny_resvStyle = -1;
2088 static int hf_skinny_retryTimer = -1;
2089 static int hf_skinny_rfc2833 = -1;
2090 static int hf_skinny_ringDuration = -1;
2091 static int hf_skinny_ringMode = -1;
2092 static int hf_skinny_routingID = -1;
2093 static int hf_skinny_rsvpErrorCode = -1;
2094 static int hf_skinny_rsvpErrorFlag = -1;
2095 static int hf_skinny_rsvpErrorSubCodeVal = -1;
2096 static int hf_skinny_rtpMediaPort = -1;
2097 static int hf_skinny_salt = -1;
2098 static int hf_skinny_saltlen = -1;
2099 static int hf_skinny_secondaryKeepAliveInterval = -1;
2100 static int hf_skinny_sequenceFlag = -1;
2101 static int hf_skinny_serverName = -1;
2102 static int hf_skinny_serverTcpListenPort = -1;
2103 static int hf_skinny_serviceNum = -1;
2104 static int hf_skinny_serviceNumber = -1;
2105 static int hf_skinny_serviceResourceCount = -1;
2106 static int hf_skinny_serviceURL = -1;
2107 static int hf_skinny_serviceURLDisplayName = -1;
2108 static int hf_skinny_serviceURLIndex = -1;
2109 static int hf_skinny_sessionType = -1;
2110 static int hf_skinny_softKeyCount = -1;
2111 static int hf_skinny_softKeyEvent = -1;
2112 static int hf_skinny_softKeyInfoIndex = -1;
2113 static int hf_skinny_softKeyLabel = -1;
2114 static int hf_skinny_softKeyOffset = -1;
2115 static int hf_skinny_softKeySetCount = -1;
2116 static int hf_skinny_softKeySetIndex = -1;
2117 static int hf_skinny_softKeySetOffset = -1;
2118 static int hf_skinny_softKeyTemplateIndex = -1;
2119 static int hf_skinny_sourceIpAddr_ipv4 = -1;
2120 static int hf_skinny_sourceIpAddr_ipv6 = -1;
2121 static int hf_skinny_sourcePortNumber = -1;
2122 static int hf_skinny_speakerMode = -1;
2123 static int hf_skinny_speedDialDirNumber = -1;
2124 static int hf_skinny_speedDialDisplayName = -1;
2125 static int hf_skinny_speedDialNumber = -1;
2126 static int hf_skinny_ssValue = -1;
2127 static int hf_skinny_sse = -1;
2128 static int hf_skinny_standard = -1;
2129 static int hf_skinny_startMediaTransmissionStatus = -1;
2130 static int hf_skinny_startingLineInstance = -1;
2131 static int hf_skinny_stationIpAddr = -1;
2132 static int hf_skinny_stationIpAddr_ipv4 = -1;
2133 static int hf_skinny_stationIpAddr_ipv6 = -1;
2134 static int hf_skinny_stationIpV6Addr = -1;
2135 static int hf_skinny_stationIpV6Addr_ipv4 = -1;
2136 static int hf_skinny_stationIpV6Addr_ipv6 = -1;
2137 static int hf_skinny_statsProcessingMode = -1;
2138 static int hf_skinny_status = -1;
2139 static int hf_skinny_stillImageTransmission = -1;
2140 static int hf_skinny_stimulus = -1;
2141 static int hf_skinny_stimulusInstance = -1;
2142 static int hf_skinny_stimulusStatus = -1;
2143 static int hf_skinny_streamPassThroughID = -1;
2144 static int hf_skinny_subAppID = -1;
2145 static int hf_skinny_subscriptionID = -1;
2146 static int hf_skinny_systemTime = -1;
2147 static int hf_skinny_temporalSpatialTradeOff = -1;
2148 static int hf_skinny_temporalSpatialTradeOffCapability = -1;
2149 static int hf_skinny_text = -1;
2150 static int hf_skinny_timeOutValue = -1;
2151 static int hf_skinny_timer = -1;
2152 static int hf_skinny_tone = -1;
2153 static int hf_skinny_toneAnnouncement = -1;
2154 static int hf_skinny_tone_output_direction = -1;
2155 static int hf_skinny_totalButtonCount = -1;
2156 static int hf_skinny_totalNumOfConfiguredLines = -1;
2157 static int hf_skinny_totalSoftKeyCount = -1;
2158 static int hf_skinny_totalSoftKeySetCount = -1;
2159 static int hf_skinny_transactionID = -1;
2160 static int hf_skinny_transmitIpAddr_ipv4 = -1;
2161 static int hf_skinny_transmitIpAddr_ipv6 = -1;
2162 static int hf_skinny_transmitPort = -1;
2163 static int hf_skinny_transmitPreference = -1;
2164 static int hf_skinny_unRegReasonCode = -1;
2165 static int hf_skinny_unknown = -1;
2166 static int hf_skinny_userName = -1;
2167 static int hf_skinny_v150sprt = -1;
2168 static int hf_skinny_vendor = -1;
2169 static int hf_skinny_vendorID = -1;
2170 static int hf_skinny_version = -1;
2171 static int hf_skinny_videoCapCount = -1;
2172 static int hf_skinny_videoCapabilityDirection = -1;
2173 static int hf_skinny_wDay = -1;
2174 static int hf_skinny_wDayOfWeek = -1;
2175 static int hf_skinny_wHour = -1;
2176 static int hf_skinny_wMilliseconds = -1;
2177 static int hf_skinny_wMinute = -1;
2178 static int hf_skinny_wMonth = -1;
2179 static int hf_skinny_wSecond = -1;
2180 static int hf_skinny_wYear = -1;
2181 static int hf_skinny_waitTimeBeforeNextReq = -1;
2182 static int hf_skinny_xmldata = -1;
2183
2184 static dissector_table_t media_type_dissector_table;
2185
2186 /* Initialize the subtree pointers */
2187 static gint ett_skinny          = -1;
2188 static gint ett_skinny_tree     = -1;
2189
2190 /* desegmentation of SCCP */
2191 static gboolean skinny_desegment = TRUE;
2192
2193 /* tap register id */
2194 static int skinny_tap = -1;
2195
2196 /* skinny protocol tap info */
2197 #define MAX_SKINNY_MESSAGES_IN_PACKET 10
2198 static skinny_info_t pi_arr[MAX_SKINNY_MESSAGES_IN_PACKET];
2199 static int pi_current = 0;
2200 static skinny_info_t *si;
2201
2202 dissector_handle_t skinny_handle;
2203
2204 /* Get the length of a single SCCP PDU */
2205 static guint
2206 get_skinny_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *data _U_)
2207 {
2208   guint32 hdr_data_length;
2209
2210   /* Get the length of the SCCP packet. */
2211   hdr_data_length = tvb_get_letohl(tvb, offset);
2212
2213   /* That length doesn't include the length of the header itself. */
2214   return hdr_data_length + 8;
2215 }
2216
2217 static void
2218 dissect_skinny_xml(ptvcursor_t *cursor, int hfindex, packet_info *pinfo, guint32 length, guint32 maxlength)
2219 {
2220   proto_item         *item       = NULL;
2221   proto_tree         *subtree    = NULL;
2222   dissector_handle_t handle      = NULL;
2223   proto_tree         *tree       = ptvcursor_tree(cursor);
2224   guint32            offset      = ptvcursor_current_offset(cursor);
2225   tvbuff_t           *tvb        = ptvcursor_tvbuff(cursor);
2226   tvbuff_t           *next_tvb;
2227
2228   if (length == 0) {
2229     length = tvb_strnlen(tvb, offset, -1);
2230   }
2231   if (length >= maxlength) {
2232     length = maxlength;
2233   }
2234
2235   ptvcursor_add_no_advance(cursor, hfindex, length, ENC_ASCII|ENC_NA);
2236
2237   item = proto_tree_add_item(tree, hf_skinny_xmlData, tvb, offset, length, ENC_ASCII|ENC_NA);
2238   subtree = proto_item_add_subtree(item, 0);
2239   next_tvb = tvb_new_subset(tvb, offset, length, -1);
2240   handle = dissector_get_string_handle(media_type_dissector_table, "text/xml");
2241   if (handle != NULL) {
2242     call_dissector(handle, next_tvb, pinfo, subtree);
2243   }
2244   ptvcursor_advance(cursor, maxlength);
2245 }
2246
2247 static void
2248 dissect_skinny_ipv4or6(ptvcursor_t *cursor, int hfindex_ipv4, int hfindex_ipv6, packet_info *pinfo)
2249 {
2250   address            src_addr;
2251   guint32            ipversion   = 0;
2252   guint32            offset      = ptvcursor_current_offset(cursor);
2253   tvbuff_t           *tvb        = ptvcursor_tvbuff(cursor);
2254   guint32            hdr_version = tvb_get_letohl(tvb, 4);
2255   gboolean           is_video    = FALSE;
2256
2257   /* ProtocolVersion > 18 include and extra field to declare IPv4 (0) / IPv6 (1) */
2258   if (hdr_version >= V17_MSG_TYPE) {
2259     ipversion = tvb_get_letohl(tvb, offset);
2260     ptvcursor_add(cursor, hf_skinny_ipv4or6, 4, ENC_LITTLE_ENDIAN);
2261   }
2262   if (ipversion == IPADDRTYPE_IPV4) {
2263     guint32 ip_address;
2264     src_addr.type = AT_IPv4;
2265     src_addr.len = 4;
2266     src_addr.data = (guint8 *)&ip_address;
2267     ip_address = tvb_get_ipv4(tvb, offset);
2268     rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset), 0, "Skinny", pinfo->fd->num, is_video, NULL);
2269     ptvcursor_add(cursor, hfindex_ipv4, 4, ENC_BIG_ENDIAN);
2270     if (hdr_version >= V17_MSG_TYPE) {
2271       /* skip over the extra room for ipv6 addresses */
2272       ptvcursor_advance(cursor, 12);
2273     }
2274   } else if (ipversion == IPADDRTYPE_IPV6 || ipversion == IPADDRTYPE_IPV4_V6) {
2275     struct e_in6_addr IPv6;
2276     src_addr.type = AT_IPv6;
2277     src_addr.len = 16;
2278     src_addr.data = (guint8 *)&IPv6;
2279     tvb_get_ipv6(tvb, offset, &IPv6);
2280     rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset), 0, "Skinny", pinfo->fd->num, is_video, NULL);
2281     ptvcursor_add(cursor, hfindex_ipv6, 16, ENC_NA);
2282   } else {
2283     /* Invalid : skip over ipv6 space completely */
2284     ptvcursor_advance(cursor, 16);
2285   }
2286 }
2287
2288 /**
2289  * 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
2290  */
2291 static void
2292 dissect_skinny_displayLabel(ptvcursor_t *cursor, int hfindex, gint length)
2293 {
2294   proto_item    *item             = NULL;
2295   proto_tree    *tree             = ptvcursor_tree(cursor);
2296   guint32       offset            = ptvcursor_current_offset(cursor);
2297   tvbuff_t      *tvb              = ptvcursor_tvbuff(cursor);
2298   wmem_strbuf_t *wmem_new         = NULL;
2299   gchar         *disp_string      = NULL;
2300   const gchar   *replacestr       = NULL;
2301   gboolean      show_replaced_str = FALSE;
2302   gint          x                 = 0;
2303
2304   if (length == 0) {
2305     length = tvb_strnlen(tvb, offset, -1);
2306     if (length == -1) {
2307       /* did not find end of string */
2308       length = tvb_captured_length_remaining(tvb, offset);
2309     }
2310   }
2311
2312   item = proto_tree_add_item(tree, hfindex, tvb, offset, length, ENC_ASCII | ENC_NA);
2313
2314   wmem_new = wmem_strbuf_sized_new(wmem_packet_scope(), length + 1, 0);
2315   disp_string = (gchar*) wmem_alloc(wmem_packet_scope(), length + 1);
2316   disp_string[length] = '\0';
2317   tvb_memcpy(tvb, (void*)disp_string, offset, length);
2318
2319   for (x = 0; x < length && disp_string[x] != '\0'; x++) {
2320     replacestr = NULL;
2321     if (x + 1 < length) {
2322       if (disp_string[x] == '\36') {
2323         replacestr = try_val_to_str_ext(disp_string[x + 1], &DisplayLabels_36_ext);
2324       } else if (disp_string[x] == '\200') {
2325         replacestr = try_val_to_str_ext(disp_string[x + 1], &DisplayLabels_200_ext);
2326       }
2327     }
2328     if (replacestr) {
2329       x++;        /* swallow replaced characters */
2330       wmem_strbuf_append(wmem_new, replacestr);
2331       show_replaced_str = TRUE;
2332     } else {
2333       wmem_strbuf_append_c(wmem_new, disp_string[x]);
2334     }
2335   }
2336   if (show_replaced_str) {
2337     proto_item_append_text(item, " => \"%s\"" , wmem_strbuf_get_str(wmem_new));
2338   }
2339   ptvcursor_advance(cursor, length);
2340 }
2341
2342 /*** Messages Handlers ***/
2343
2344 /*
2345  * Message:   RegisterMessage
2346  * Opcode:    0x0001
2347  * Type:      RegistrationAndManagement
2348  * Direction: dev2pbx
2349  * VarLength: no
2350  */
2351 static void
2352 handle_RegisterMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2353 {
2354   guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2355
2356   {
2357     /* start struct : sid / size: 24 */
2358     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
2359     ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII|ENC_NA);
2360     ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
2361     ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
2362     ptvcursor_pop_subtree(cursor);
2363     /* end struct: sid */
2364   }
2365   ptvcursor_add(cursor, hf_skinny_stationIpAddr, 4, ENC_BIG_ENDIAN);
2366   ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN);
2367   ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
2368   if (hdr_data_length > 52) {
2369     ptvcursor_add(cursor, hf_skinny_activeStreams, 4, ENC_LITTLE_ENDIAN);
2370     ptvcursor_add(cursor, hf_skinny_protocolVer, 1, ENC_LITTLE_ENDIAN);
2371     ptvcursor_add(cursor, hf_skinny_unknown, 1, ENC_LITTLE_ENDIAN);
2372     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "PhoneFeatures");
2373     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit1, 2, ENC_LITTLE_ENDIAN);
2374     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit2, 2, ENC_LITTLE_ENDIAN);
2375     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit3, 2, ENC_LITTLE_ENDIAN);
2376     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit4, 2, ENC_LITTLE_ENDIAN);
2377     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_UTF8, 2, ENC_LITTLE_ENDIAN);
2378     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit6, 2, ENC_LITTLE_ENDIAN);
2379     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit7, 2, ENC_LITTLE_ENDIAN);
2380     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_DynamicMessages, 2, ENC_LITTLE_ENDIAN);
2381     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit9, 2, ENC_LITTLE_ENDIAN);
2382     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_RFC2833, 2, ENC_LITTLE_ENDIAN);
2383     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit11, 2, ENC_LITTLE_ENDIAN);
2384     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit12, 2, ENC_LITTLE_ENDIAN);
2385     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit13, 2, ENC_LITTLE_ENDIAN);
2386     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit14, 2, ENC_LITTLE_ENDIAN);
2387     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Bit15, 2, ENC_LITTLE_ENDIAN);
2388     ptvcursor_add_no_advance(cursor, hf_skinny_PhoneFeatures_Abbreviated_Dial, 2, ENC_LITTLE_ENDIAN);
2389     ptvcursor_advance(cursor, 2);
2390     ptvcursor_pop_subtree(cursor); /* end bitfield: PhoneFeatures */
2391     ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
2392   }
2393   if (hdr_data_length > 100) {
2394     ptvcursor_add(cursor, hf_skinny_activeConferences, 4, ENC_LITTLE_ENDIAN);
2395     ptvcursor_add(cursor, hf_skinny_macAddress, 6, ENC_NA);
2396     ptvcursor_advance(cursor, 12 - 6);
2397     ptvcursor_add(cursor, hf_skinny_ipV4AddressScope, 4, ENC_LITTLE_ENDIAN);
2398     ptvcursor_add(cursor, hf_skinny_maxNumberOfLines, 4, ENC_LITTLE_ENDIAN);
2399     ptvcursor_add(cursor, hf_skinny_stationIpV6Addr, 16, ENC_NA);
2400     ptvcursor_add(cursor, hf_skinny_ipV6AddressScope, 4, ENC_LITTLE_ENDIAN);
2401     ptvcursor_add(cursor, hf_skinny_firmwareLoadName, 32, ENC_ASCII|ENC_NA);
2402   }
2403   if (hdr_data_length > 190) {
2404     ptvcursor_add(cursor, hf_skinny_configVersionStamp, 48, ENC_ASCII|ENC_NA);
2405   }
2406 }
2407
2408 /*
2409  * Message:   IpPortMessage
2410  * Opcode:    0x0002
2411  * Type:      CallControl
2412  * Direction: dev2pbx
2413  * VarLength: no
2414  */
2415 static void
2416 handle_IpPortMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2417 {
2418   ptvcursor_add(cursor, hf_skinny_rtpMediaPort, 4, ENC_LITTLE_ENDIAN);
2419 }
2420
2421 /*
2422  * Message:   KeypadButtonMessage
2423  * Opcode:    0x0003
2424  * Type:      CallControl
2425  * Direction: dev2pbx
2426  * VarLength: no
2427  */
2428 static void
2429 handle_KeypadButtonMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2430 {
2431   guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2432
2433   ptvcursor_add(cursor, hf_skinny_kpButton, 4, ENC_LITTLE_ENDIAN);
2434   if (hdr_data_length > 8) {
2435     si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2436     ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2437     si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2438     ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2439   }
2440 }
2441
2442 /*
2443  * Message:   EnblocCallMessage
2444  * Opcode:    0x0004
2445  * Type:      CallControl
2446  * Direction: dev2pbx
2447  * VarLength: no
2448  */
2449 static void
2450 handle_EnblocCallMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2451 {
2452   guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
2453   guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;
2454   si->calledParty = g_strdup(tvb_format_stringzpad(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), VariableDirnumSize));
2455   ptvcursor_add(cursor, hf_skinny_calledParty, VariableDirnumSize, ENC_ASCII|ENC_NA);
2456   si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2457   ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2458 }
2459
2460 /*
2461  * Message:   StimulusMessage
2462  * Opcode:    0x0005
2463  * Type:      CallControl
2464  * Direction: dev2pbx
2465  * VarLength: no
2466  */
2467 static void
2468 handle_StimulusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2469 {
2470   ptvcursor_add(cursor, hf_skinny_stimulus, 4, ENC_LITTLE_ENDIAN);
2471   si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2472   ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2473   si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2474   ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2475   ptvcursor_add(cursor, hf_skinny_stimulusStatus, 4, ENC_LITTLE_ENDIAN);
2476 }
2477
2478 /*
2479  * Message:   OffHookMessage
2480  * Opcode:    0x0006
2481  * Type:      CallControl
2482  * Direction: dev2pbx
2483  * VarLength: no
2484  */
2485 static void
2486 handle_OffHookMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2487 {
2488   guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2489
2490   if (hdr_data_length > 4) {
2491     si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2492     ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2493     si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2494     ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2495   }
2496 }
2497
2498 /*
2499  * Message:   OnHookMessage
2500  * Opcode:    0x0007
2501  * Type:      CallControl
2502  * Direction: dev2pbx
2503  * VarLength: no
2504  */
2505 static void
2506 handle_OnHookMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2507 {
2508   guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2509
2510   if (hdr_data_length > 4) {
2511     si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2512     ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2513     si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2514     ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2515   }
2516 }
2517
2518 /*
2519  * Message:   HookFlashMessage
2520  * Opcode:    0x0008
2521  * Type:      CallControl
2522  * Direction: dev2pbx
2523  * VarLength: no
2524  */
2525 static void
2526 handle_HookFlashMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2527 {
2528   si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2529   ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2530   si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2531   ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2532 }
2533
2534 /*
2535  * Message:   ForwardStatReqMessage
2536  * Opcode:    0x0009
2537  * Type:      RegistrationAndManagement
2538  * Direction: dev2pbx
2539  * VarLength: no
2540  */
2541 static void
2542 handle_ForwardStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2543 {
2544   ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN);
2545 }
2546
2547 /*
2548  * Message:   SpeedDialStatReqMessage
2549  * Opcode:    0x000a
2550  * Type:      RegistrationAndManagement
2551  * Direction: dev2pbx
2552  * VarLength: no
2553  */
2554 static void
2555 handle_SpeedDialStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2556 {
2557   ptvcursor_add(cursor, hf_skinny_speedDialNumber, 4, ENC_LITTLE_ENDIAN);
2558 }
2559
2560 /*
2561  * Message:   LineStatReqMessage
2562  * Opcode:    0x000b
2563  * Type:      RegistrationAndManagement
2564  * Direction: dev2pbx
2565  * VarLength: no
2566  */
2567 static void
2568 handle_LineStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2569 {
2570   ptvcursor_add(cursor, hf_skinny_lineNumber, 4, ENC_LITTLE_ENDIAN);
2571 }
2572
2573 /*
2574  * Message:   CapabilitiesRes
2575  * Opcode:    0x0010
2576  * Type:      RegistrationAndManagement
2577  * Direction: dev2pbx
2578  * VarLength: no
2579  */
2580 static void
2581 handle_CapabilitiesRes(ptvcursor_t *cursor, packet_info * pinfo _U_)
2582 {
2583   guint32 capCount = 0;
2584   guint32 payloadCapability = 0;
2585   capCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2586   ptvcursor_add(cursor, hf_skinny_capCount, 4, ENC_LITTLE_ENDIAN);
2587   {
2588     /* start struct : caps / size: 16 */
2589     guint32 counter_1 = 0;
2590     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "caps [ref: capCount = %d, max:18]", capCount);
2591     for (counter_1 = 0; counter_1 < 18; counter_1++) {
2592       if (counter_1 < capCount) {
2593         ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "caps [%d / %d]", counter_1 + 1, capCount);
2594         payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2595         ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
2596         ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
2597         if (payloadCapability == MEDIA_PAYLOAD_G7231)         {
2598           /* start union : PAYLOADS / maxsize: 8 */
2599           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
2600           ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
2601           ptvcursor_pop_subtree(cursor);
2602           ptvcursor_advance(cursor, 4);
2603         } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY)         {
2604           /* start union : PAYLOADS / maxsize: 8 */
2605           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
2606           {
2607             /* start struct : modemRelay / size: 8 */
2608             ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
2609             ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
2610             ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
2611             ptvcursor_pop_subtree(cursor);
2612             /* end struct: modemRelay */
2613           }
2614           ptvcursor_pop_subtree(cursor);
2615         } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT)         {
2616           /* start union : PAYLOADS / maxsize: 8 */
2617           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
2618           {
2619             /* start struct : sprtPayload / size: 8 */
2620             ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
2621             ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
2622             ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
2623             ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
2624             ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
2625             ptvcursor_pop_subtree(cursor);
2626             /* end struct: sprtPayload */
2627           }
2628           ptvcursor_pop_subtree(cursor);
2629         } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE)         {
2630           /* start union : PAYLOADS / maxsize: 8 */
2631           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
2632           {
2633             /* start struct : sse / size: 8 */
2634             ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
2635             ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
2636             ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
2637             ptvcursor_pop_subtree(cursor);
2638             /* end struct: sse */
2639           }
2640           ptvcursor_pop_subtree(cursor);
2641         } else         {
2642           /* start union : PAYLOADS / maxsize: 8 */
2643           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
2644           {
2645             /* start struct : codecParams / size: 4 */
2646             ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
2647             ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
2648             ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
2649             ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
2650             ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
2651             ptvcursor_pop_subtree(cursor);
2652             /* end struct: codecParams */
2653           }
2654           ptvcursor_pop_subtree(cursor);
2655           ptvcursor_advance(cursor, 4);
2656         }
2657       } else {
2658         ptvcursor_advance(cursor, 16);
2659       }
2660       ptvcursor_pop_subtree(cursor);
2661       /* end for loop tree: caps */
2662     }
2663     ptvcursor_pop_subtree(cursor);
2664     /* end struct: caps */
2665   }
2666 }
2667
2668 /*
2669  * Message:   AlarmMessage
2670  * Opcode:    0x0020
2671  * Type:      RegistrationAndManagement
2672  * Direction: dev2pbx
2673  * VarLength: no
2674  */
2675 static void
2676 handle_AlarmMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2677 {
2678   ptvcursor_add(cursor, hf_skinny_alarmSeverity, 4, ENC_LITTLE_ENDIAN);
2679   ptvcursor_add(cursor, hf_skinny_text, 80, ENC_ASCII|ENC_NA);
2680   ptvcursor_add(cursor, hf_skinny_parm1, 4, ENC_LITTLE_ENDIAN);
2681   ptvcursor_add(cursor, hf_skinny_parm2, 4, ENC_LITTLE_ENDIAN);
2682 }
2683
2684 /*
2685  * Message:   MulticastMediaReceptionAckMessage
2686  * Opcode:    0x0021
2687  * Type:      MediaControl
2688  * Direction: dev2pbx
2689  * VarLength: no
2690  */
2691 static void
2692 handle_MulticastMediaReceptionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2693 {
2694   ptvcursor_add(cursor, hf_skinny_receptionStatus, 4, ENC_LITTLE_ENDIAN);
2695   ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN);
2696   si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2697   ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2698 }
2699
2700 /*
2701  * Message:   OpenReceiveChannelAckMessage
2702  * Opcode:    0x0022
2703  * Type:      MediaControl
2704  * Direction: dev2pbx
2705  * VarLength: no
2706  */
2707 static void
2708 handle_OpenReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2709 {
2710   guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2711
2712   si->openreceiveStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2713   ptvcursor_add(cursor, hf_skinny_openReceiveChannelStatus, 4, ENC_LITTLE_ENDIAN);
2714   dissect_skinny_ipv4or6(cursor, hf_skinny_ipAddr_ipv4, hf_skinny_ipAddr_ipv6, pinfo);
2715   ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN);
2716   ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN);
2717   if (hdr_data_length > 20) {
2718     si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2719     ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2720   }
2721 }
2722
2723 /*
2724  * Message:   ConnectionStatisticsResMessage
2725  * Opcode:    0x0023
2726  * Type:      CallControl
2727  * Direction: dev2pbx
2728  * VarLength: no
2729  */
2730 static void
2731 handle_ConnectionStatisticsResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2732 {
2733   guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
2734   guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
2735   guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;
2736   guint32 dataSize = 0;
2737
2738   ptvcursor_add(cursor, hf_skinny_directoryNum, VariableDirnumSize, ENC_ASCII|ENC_NA);
2739   si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2740   ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2741   ptvcursor_add(cursor, hf_skinny_statsProcessingMode, 4, ENC_LITTLE_ENDIAN);
2742   ptvcursor_add(cursor, hf_skinny_numberPacketsSent, 4, ENC_LITTLE_ENDIAN);
2743   ptvcursor_add(cursor, hf_skinny_numberOctetsSent, 4, ENC_LITTLE_ENDIAN);
2744   ptvcursor_add(cursor, hf_skinny_numberPacketsReceived, 4, ENC_LITTLE_ENDIAN);
2745   ptvcursor_add(cursor, hf_skinny_numberOctetsReceived, 4, ENC_LITTLE_ENDIAN);
2746   ptvcursor_add(cursor, hf_skinny_numberPacketsLost, 4, ENC_LITTLE_ENDIAN);
2747   ptvcursor_add(cursor, hf_skinny_jitter, 4, ENC_LITTLE_ENDIAN);
2748   ptvcursor_add(cursor, hf_skinny_latency, 4, ENC_LITTLE_ENDIAN);
2749   if (hdr_data_length > 64) {
2750     dataSize = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2751     ptvcursor_add(cursor, hf_skinny_dataSize, 4, ENC_LITTLE_ENDIAN);
2752     ptvcursor_add(cursor, hf_skinny_data, dataSize, ENC_ASCII|ENC_NA);
2753   }
2754 }
2755
2756 /*
2757  * Message:   OffHookWithCgpnMessage
2758  * Opcode:    0x0024
2759  * Type:      CallControl
2760  * Direction: dev2pbx
2761  * VarLength: no
2762  */
2763 static void
2764 handle_OffHookWithCgpnMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2765 {
2766   guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
2767   guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24;
2768   ptvcursor_add(cursor, hf_skinny_callingPartyNumber, VariableDirnumSize, ENC_ASCII|ENC_NA);
2769   ptvcursor_add(cursor, hf_skinny_cgpnVoiceMailbox, VariableDirnumSize, ENC_ASCII|ENC_NA);
2770   si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2771   ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2772 }
2773
2774 /*
2775  * Message:   SoftKeyEventMessage
2776  * Opcode:    0x0026
2777  * Type:      RegistrationAndManagement
2778  * Direction: dev2pbx
2779  * VarLength: no
2780  */
2781 static void
2782 handle_SoftKeyEventMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2783 {
2784   ptvcursor_add(cursor, hf_skinny_softKeyEvent, 4, ENC_LITTLE_ENDIAN);
2785   si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2786   ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2787   si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2788   ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2789 }
2790
2791 /*
2792  * Message:   UnregisterMessage
2793  * Opcode:    0x0027
2794  * Type:      RegistrationAndManagement
2795  * Direction: dev2pbx
2796  * VarLength: no
2797  */
2798 static void
2799 handle_UnregisterMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2800 {
2801   ptvcursor_add(cursor, hf_skinny_unRegReasonCode, 4, ENC_LITTLE_ENDIAN);
2802 }
2803
2804 /*
2805  * Message:   RegisterTokenReq
2806  * Opcode:    0x0029
2807  * Type:      RegistrationAndManagement
2808  * Direction: dev2pbx
2809  * VarLength: no
2810  */
2811 static void
2812 handle_RegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_)
2813 {
2814   {
2815     /* start struct : sid / size: 24 */
2816     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
2817     ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII|ENC_NA);
2818     ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
2819     ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
2820     ptvcursor_pop_subtree(cursor);
2821     /* end struct: sid */
2822   }
2823   ptvcursor_add(cursor, hf_skinny_stationIpAddr, 4, ENC_LITTLE_ENDIAN);
2824   ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN);
2825   dissect_skinny_ipv4or6(cursor, hf_skinny_stationIpV6Addr_ipv4, hf_skinny_stationIpV6Addr_ipv6, pinfo);
2826 }
2827
2828 /*
2829  * Message:   MediaTransmissionFailureMessage
2830  * Opcode:    0x002a
2831  * Type:      MediaControl
2832  * Direction: dev2pbx
2833  * VarLength: no
2834  */
2835 static void
2836 handle_MediaTransmissionFailureMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2837 {
2838   ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
2839   ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN);
2840   dissect_skinny_ipv4or6(cursor, hf_skinny_remoteIpAddr_ipv4, hf_skinny_remoteIpAddr_ipv6, pinfo);
2841   ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN);
2842   si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2843   ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2844 }
2845
2846 /*
2847  * Message:   HeadsetStatusMessage
2848  * Opcode:    0x002b
2849  * Type:      CallControl
2850  * Direction: dev2pbx
2851  * VarLength: no
2852  */
2853 static void
2854 handle_HeadsetStatusMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2855 {
2856   ptvcursor_add(cursor, hf_skinny_headsetStatus, 4, ENC_LITTLE_ENDIAN);
2857 }
2858
2859 /*
2860  * Message:   MediaResourceNotificationMessage
2861  * Opcode:    0x002c
2862  * Type:      MediaControl
2863  * Direction: dev2pbx
2864  * VarLength: no
2865  */
2866 static void
2867 handle_MediaResourceNotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2868 {
2869   ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN);
2870   ptvcursor_add(cursor, hf_skinny_numberOfInServiceStreams, 4, ENC_LITTLE_ENDIAN);
2871   ptvcursor_add(cursor, hf_skinny_maxStreamsPerConf, 4, ENC_LITTLE_ENDIAN);
2872   ptvcursor_add(cursor, hf_skinny_numberOfOutOfServiceStreams, 4, ENC_LITTLE_ENDIAN);
2873 }
2874
2875 /*
2876  * Message:   RegisterAvailableLinesMessage
2877  * Opcode:    0x002d
2878  * Type:      RegistrationAndManagement
2879  * Direction: dev2pbx
2880  * VarLength: no
2881  */
2882 static void
2883 handle_RegisterAvailableLinesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2884 {
2885   ptvcursor_add(cursor, hf_skinny_maxNumOfAvailLines, 4, ENC_LITTLE_ENDIAN);
2886 }
2887
2888 /*
2889  * Message:   DeviceToUserDataMessage
2890  * Opcode:    0x002e
2891  * Type:      RegistrationAndManagement
2892  * Direction: dev2pbx
2893  * VarLength: no
2894  */
2895 static void
2896 handle_DeviceToUserDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2897 {
2898   guint32 dataLength = 0;
2899   {
2900     /* start struct : deviceToUserData / size: 2020 */
2901     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserData");
2902     ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
2903     si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2904     ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
2905     si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2906     ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
2907     ptvcursor_add(cursor, hf_skinny_transactionID, 4, ENC_LITTLE_ENDIAN);
2908     dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2909     ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
2910     dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
2911     ptvcursor_pop_subtree(cursor);
2912     /* end struct: deviceToUserData */
2913   }
2914 }
2915
2916 /*
2917  * Message:   DeviceToUserDataResponseMessage
2918  * Opcode:    0x002f
2919  * Type:      RegistrationAndManagement
2920  * Direction: dev2pbx
2921  * VarLength: no
2922  */
2923 static void
2924 handle_DeviceToUserDataResponseMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2925 {
2926   guint32 dataLength = 0;
2927   {
2928     /* start struct : deviceToUserData / size: 2020 */
2929     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserData");
2930     ptvcursor_add(cursor, hf_skinny_applicationID, 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);
2935     ptvcursor_add(cursor, hf_skinny_transactionID, 4, ENC_LITTLE_ENDIAN);
2936     dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2937     ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
2938     dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
2939     ptvcursor_pop_subtree(cursor);
2940     /* end struct: deviceToUserData */
2941   }
2942 }
2943
2944 /*
2945  * Message:   UpdateCapabilitiesMessage
2946  * Opcode:    0x0030
2947  * Type:      RegistrationAndManagement
2948  * Direction: dev2pbx
2949  * VarLength: no
2950  */
2951 static void
2952 handle_UpdateCapabilitiesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
2953 {
2954   guint32 audioCapCount = 0;
2955   guint32 videoCapCount = 0;
2956   guint32 dataCapCount = 0;
2957   guint32 customPictureFormatCount = 0;
2958   guint32 serviceResourceCount = 0;
2959   guint32 layoutCount = 0;
2960   guint32 payloadCapability = 0;
2961   guint32 levelPreferenceCount = 0;
2962   audioCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2963   ptvcursor_add(cursor, hf_skinny_audioCapCount, 4, ENC_LITTLE_ENDIAN);
2964   videoCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2965   ptvcursor_add(cursor, hf_skinny_videoCapCount, 4, ENC_LITTLE_ENDIAN);
2966   dataCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2967   ptvcursor_add(cursor, hf_skinny_dataCapCount, 4, ENC_LITTLE_ENDIAN);
2968   ptvcursor_add(cursor, hf_skinny_RTPPayloadFormat, 4, ENC_LITTLE_ENDIAN);
2969   customPictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2970   ptvcursor_add(cursor, hf_skinny_customPictureFormatCount, 4, ENC_LITTLE_ENDIAN);
2971   {
2972     /* start struct : customPictureFormat / size: 20 */
2973     guint32 counter_1 = 0;
2974     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [ref: customPictureFormatCount = %d, max:6]", customPictureFormatCount);
2975     for (counter_1 = 0; counter_1 < 6; counter_1++) {
2976       if (counter_1 < customPictureFormatCount) {
2977         ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [%d / %d]", counter_1 + 1, customPictureFormatCount);
2978         ptvcursor_add(cursor, hf_skinny_pictureWidth, 4, ENC_LITTLE_ENDIAN);
2979         ptvcursor_add(cursor, hf_skinny_pictureHeight, 4, ENC_LITTLE_ENDIAN);
2980         ptvcursor_add(cursor, hf_skinny_pixelAspectRatio, 4, ENC_LITTLE_ENDIAN);
2981         ptvcursor_add(cursor, hf_skinny_clockConversionCode, 4, ENC_LITTLE_ENDIAN);
2982         ptvcursor_add(cursor, hf_skinny_clockDivisor, 4, ENC_LITTLE_ENDIAN);
2983       } else {
2984         ptvcursor_advance(cursor, 20);
2985       }
2986       ptvcursor_pop_subtree(cursor);
2987       /* end for loop tree: customPictureFormat */
2988     }
2989     ptvcursor_pop_subtree(cursor);
2990     /* end struct: customPictureFormat */
2991   }
2992   {
2993     /* start struct : confResources / size: 36 */
2994     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "confResources");
2995     ptvcursor_add(cursor, hf_skinny_activeStreamsOnRegistration, 4, ENC_LITTLE_ENDIAN);
2996     ptvcursor_add(cursor, hf_skinny_maxBW, 4, ENC_LITTLE_ENDIAN);
2997     serviceResourceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
2998     ptvcursor_add(cursor, hf_skinny_serviceResourceCount, 4, ENC_LITTLE_ENDIAN);
2999     {
3000       /* start struct : serviceResource / size: 24 */
3001       guint32 counter_2 = 0;
3002       ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [ref: serviceResourceCount = %d, max:4]", serviceResourceCount);
3003       for (counter_2 = 0; counter_2 < 4; counter_2++) {
3004         if (counter_2 < serviceResourceCount) {
3005           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [%d / %d]", counter_2 + 1, serviceResourceCount);
3006           layoutCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3007           ptvcursor_add(cursor, hf_skinny_layoutCount, 4, ENC_LITTLE_ENDIAN);
3008           {
3009             guint32 counter_5 = 0;
3010             ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "layouts [ref: layoutCount = %d, max:5]", layoutCount);
3011             for (counter_5 = 0; counter_5 < 5; counter_5++) {
3012               if (counter_5 < layoutCount) {
3013                 ptvcursor_add(cursor, hf_skinny_layouts, 4, ENC_LITTLE_ENDIAN);
3014               } else {
3015                 ptvcursor_advance(cursor, 4);
3016               }
3017             }
3018             ptvcursor_pop_subtree(cursor); /* end for loop tree: layouts */
3019           }
3020           ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
3021           ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
3022           ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
3023           ptvcursor_add(cursor, hf_skinny_activeConferenceOnRegistration, 4, ENC_LITTLE_ENDIAN);
3024         } else {
3025           ptvcursor_advance(cursor, 24);
3026         }
3027         ptvcursor_pop_subtree(cursor);
3028         /* end for loop tree: serviceResource */
3029       }
3030       ptvcursor_pop_subtree(cursor);
3031       /* end struct: serviceResource */
3032     }
3033     ptvcursor_pop_subtree(cursor);
3034     /* end struct: confResources */
3035   }
3036   {
3037     /* start struct : audiocaps / size: 16 */
3038     guint32 counter_1 = 0;
3039     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [ref: audioCapCount = %d, max:18]", audioCapCount);
3040     for (counter_1 = 0; counter_1 < 18; counter_1++) {
3041       if (counter_1 < audioCapCount) {
3042         ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [%d / %d]", counter_1 + 1, audioCapCount);
3043         payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3044         ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
3045         ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
3046         if (payloadCapability == MEDIA_PAYLOAD_G7231)         {
3047           /* start union : PAYLOADS / maxsize: 8 */
3048           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
3049           ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
3050           ptvcursor_pop_subtree(cursor);
3051           ptvcursor_advance(cursor, 4);
3052         } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY)         {
3053           /* start union : PAYLOADS / maxsize: 8 */
3054           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
3055           {
3056             /* start struct : modemRelay / size: 8 */
3057             ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
3058             ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
3059             ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
3060             ptvcursor_pop_subtree(cursor);
3061             /* end struct: modemRelay */
3062           }
3063           ptvcursor_pop_subtree(cursor);
3064         } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT)         {
3065           /* start union : PAYLOADS / maxsize: 8 */
3066           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
3067           {
3068             /* start struct : sprtPayload / size: 8 */
3069             ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
3070             ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
3071             ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
3072             ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
3073             ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
3074             ptvcursor_pop_subtree(cursor);
3075             /* end struct: sprtPayload */
3076           }
3077           ptvcursor_pop_subtree(cursor);
3078         } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE)         {
3079           /* start union : PAYLOADS / maxsize: 8 */
3080           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
3081           {
3082             /* start struct : sse / size: 8 */
3083             ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
3084             ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
3085             ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
3086             ptvcursor_pop_subtree(cursor);
3087             /* end struct: sse */
3088           }
3089           ptvcursor_pop_subtree(cursor);
3090         } else         {
3091           /* start union : PAYLOADS / maxsize: 8 */
3092           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
3093           {
3094             /* start struct : codecParams / size: 4 */
3095             ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
3096             ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
3097             ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
3098             ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
3099             ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
3100             ptvcursor_pop_subtree(cursor);
3101             /* end struct: codecParams */
3102           }
3103           ptvcursor_pop_subtree(cursor);
3104           ptvcursor_advance(cursor, 4);
3105         }
3106       } else {
3107         ptvcursor_advance(cursor, 16);
3108       }
3109       ptvcursor_pop_subtree(cursor);
3110       /* end for loop tree: audiocaps */
3111     }
3112     ptvcursor_pop_subtree(cursor);
3113     /* end struct: audiocaps */
3114   }
3115   {
3116     /* start struct : vidCaps / size: 44 */
3117     guint32 counter_1 = 0;
3118     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [ref: videoCapCount = %d, max:10]", videoCapCount);
3119     for (counter_1 = 0; counter_1 < 10; counter_1++) {
3120       if (counter_1 < videoCapCount) {
3121         ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [%d / %d]", counter_1 + 1, videoCapCount);
3122         payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3123         ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
3124         ptvcursor_add(cursor, hf_skinny_videoCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
3125         levelPreferenceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3126         ptvcursor_add(cursor, hf_skinny_levelPreferenceCount, 4, ENC_LITTLE_ENDIAN);
3127         {
3128           /* start struct : levelPreference / size: 24 */
3129           guint32 counter_4 = 0;
3130           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [ref: levelPreferenceCount = %d, max:4]", levelPreferenceCount);
3131           for (counter_4 = 0; counter_4 < 4; counter_4++) {
3132             if (counter_4 < levelPreferenceCount) {
3133               ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [%d / %d]", counter_4 + 1, levelPreferenceCount);
3134               ptvcursor_add(cursor, hf_skinny_transmitPreference, 4, ENC_LITTLE_ENDIAN);
3135               ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
3136               ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
3137               ptvcursor_add(cursor, hf_skinny_minBitRate, 4, ENC_LITTLE_ENDIAN);
3138               ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
3139               ptvcursor_add(cursor, hf_skinny_serviceNumber, 4, ENC_LITTLE_ENDIAN);
3140             } else {
3141               ptvcursor_advance(cursor, 24);
3142             }
3143             ptvcursor_pop_subtree(cursor);
3144             /* end for loop tree: levelPreference */
3145           }
3146           ptvcursor_pop_subtree(cursor);
3147           /* end struct: levelPreference */
3148         }
3149         if (payloadCapability == MEDIA_PAYLOAD_H261)         {
3150           /* start union : capability / maxsize: 8 */
3151           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H261");
3152           {
3153             /* start struct : h261VideoCapability / size: 8 */
3154             ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
3155             ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
3156             ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
3157             ptvcursor_pop_subtree(cursor);
3158             /* end struct: h261VideoCapability */
3159           }
3160           ptvcursor_pop_subtree(cursor);
3161         } else if (payloadCapability == MEDIA_PAYLOAD_H263)         {
3162           /* start union : capability / maxsize: 8 */
3163           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H263");
3164           {
3165             /* start struct : h263VideoCapability / size: 8 */
3166             ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
3167             ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
3168             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
3169             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
3170             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
3171             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
3172             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
3173             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
3174             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
3175             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
3176             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
3177             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
3178             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
3179             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
3180             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
3181             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
3182             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
3183             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
3184             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
3185             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
3186             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
3187             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
3188             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
3189             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
3190             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
3191             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
3192             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
3193             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
3194             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
3195             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
3196             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
3197             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
3198             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
3199             ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
3200             ptvcursor_advance(cursor, 4);
3201             ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
3202             ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
3203             ptvcursor_pop_subtree(cursor);
3204             /* end struct: h263VideoCapability */
3205           }
3206           ptvcursor_pop_subtree(cursor);
3207         } else if (payloadCapability == MEDIA_PAYLOAD_VIEO)         {
3208           /* start union : capability / maxsize: 8 */
3209           ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_Vieo");
3210           {
3211             /* start struct : vieoVideoCapability / size: 8 */
3212             ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
3213             ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
3214             ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
3215             ptvcursor_pop_subtree(cursor);
3216             /* end struct: vieoVideoCapability */
3217           }
3218           ptvcursor_pop_subtree(cursor);
3219         }
3220       } else {
3221         ptvcursor_advance(cursor, 44);
3222       }
3223       ptvcursor_pop_subtree(cursor);
3224       /* end for loop tree: vidCaps */
3225     }
3226     ptvcursor_pop_subtree(cursor);
3227     /* end struct: vidCaps */
3228   }
3229   {
3230     /* start struct : dataCaps / size: 16 */
3231     guint32 counter_1 = 0;
3232     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [ref: dataCapCount = %d, max:5]", dataCapCount);
3233     for (counter_1 = 0; counter_1 < 5; counter_1++) {
3234       if (counter_1 < dataCapCount) {
3235         ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [%d / %d]", counter_1 + 1, dataCapCount);
3236         ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
3237         ptvcursor_add(cursor, hf_skinny_dataCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
3238         ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
3239         ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
3240       } else {
3241         ptvcursor_advance(cursor, 16);
3242       }
3243       ptvcursor_pop_subtree(cursor);
3244       /* end for loop tree: dataCaps */
3245     }
3246     ptvcursor_pop_subtree(cursor);
3247     /* end struct: dataCaps */
3248   }
3249 }
3250
3251 /*
3252  * Message:   OpenMultiMediaReceiveChannelAckMessage
3253  * Opcode:    0x0031
3254  * Type:      MediaControl
3255  * Direction: dev2pbx
3256  * VarLength: no
3257  */
3258 static void
3259 handle_OpenMultiMediaReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
3260 {
3261   ptvcursor_add(cursor, hf_skinny_multimediaOpenReceiveChannelStatus, 4, ENC_LITTLE_ENDIAN);
3262   dissect_skinny_ipv4or6(cursor, hf_skinny_ipAddr_ipv4, hf_skinny_ipAddr_ipv6, pinfo);
3263   ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN);
3264   ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN);
3265   si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3266   ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
3267 }
3268
3269 /*
3270  * Message:   ClearConferenceMessage
3271  * Opcode:    0x0032
3272  * Type:      Conference
3273  * Direction: dev2pbx
3274  * VarLength: no
3275  */
3276 static void
3277 handle_ClearConferenceMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
3278 {
3279   ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
3280   ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
3281 }
3282
3283 /*
3284  * Message:   ServiceURLStatReqMessage
3285  * Opcode:    0x0033
3286  * Type:      RegistrationAndManagement
3287  * Direction: dev2pbx
3288  * VarLength: no
3289  */
3290 static void
3291 handle_ServiceURLStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
3292 {
3293   ptvcursor_add(cursor, hf_skinny_serviceURLIndex, 4, ENC_LITTLE_ENDIAN);
3294 }
3295
3296 /*
3297  * Message:   FeatureStatReqMessage
3298  * Opcode:    0x0034
3299  * Type:      RegistrationAndManagement
3300  * Direction: dev2pbx
3301  * VarLength: no
3302  */
3303 static void
3304 handle_FeatureStatReqMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
3305 {
3306   ptvcursor_add(cursor, hf_skinny_featureIndex, 4, ENC_LITTLE_ENDIAN);
3307   ptvcursor_add(cursor, hf_skinny_featureCapabilities, 4, ENC_LITTLE_ENDIAN);
3308 }
3309
3310 /*
3311  * Message:   CreateConferenceResMessage
3312  * Opcode:    0x0035
3313  * Type:      IntraCCM
3314  * Direction: pbx2pbx
3315  * VarLength: no
3316  */
3317 static void
3318 handle_CreateConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
3319 {
3320   guint32 dataLength = 0;
3321   ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
3322   ptvcursor_add(cursor, hf_skinny_result, 4, ENC_LITTLE_ENDIAN);
3323   dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3324   ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
3325   ptvcursor_add(cursor, hf_skinny_passThruData, dataLength, ENC_ASCII|ENC_NA);
3326 }
3327
3328 /*
3329  * Message:   DeleteConferenceResMessage
3330  * Opcode:    0x0036
3331  * Type:      IntraCCM
3332  * Direction: pbx2pbx
3333  * VarLength: no
3334  */
3335 static void
3336 handle_DeleteConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
3337 {
3338   ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
3339   ptvcursor_add(cursor, hf_skinny_delete_conf_result, 4, ENC_LITTLE_ENDIAN);
3340 }
3341
3342 /*
3343  * Message:   ModifyConferenceResMessage
3344  * Opcode:    0x0037
3345  * Type:      IntraCCM
3346  * Direction: pbx2pbx
3347  * VarLength: no
3348  */
3349 static void
3350 handle_ModifyConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
3351 {
3352   guint32 dataLength = 0;
3353   ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
3354   ptvcursor_add(cursor, hf_skinny_modify_conf_result, 4, ENC_LITTLE_ENDIAN);
3355   dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3356   ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
3357   ptvcursor_add(cursor, hf_skinny_passThruData, dataLength, ENC_ASCII|ENC_NA);
3358 }
3359
3360 /*
3361  * Message:   AddParticipantResMessage
3362  * Opcode:    0x0038
3363  * Type:      IntraCCM
3364  * Direction: pbx2pbx
3365  * VarLength: no
3366  */
3367 static void
3368 handle_AddParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
3369 {
3370   ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
3371   si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3372   ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
3373   ptvcursor_add(cursor, hf_skinny_add_participant_result, 4, ENC_LITTLE_ENDIAN);
3374   ptvcursor_add(cursor, hf_skinny_bridgeParticipantId, 257, ENC_ASCII|ENC_NA);
3375 }
3376
3377 /*
3378  * Message:   AuditConferenceResMessage
3379  * Opcode:    0x0039
3380  * Type:      IntraCCM
3381  * Direction: pbx2pbx
3382  * VarLength: no
3383  */
3384 static void
3385 handle_AuditConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
3386 {
3387   guint32 numberOfEntries = 0;
3388   ptvcursor_add(cursor, hf_skinny_last, 4, ENC_LITTLE_ENDIAN);
3389   numberOfEntries = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3390   ptvcursor_add(cursor, hf_skinny_numberOfEntries, 4, ENC_LITTLE_ENDIAN);
3391   {
3392     /* start struct : conferenceEntry / size: 76 */
3393     guint32 counter_1 = 0;
3394     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "conferenceEntry [ref: numberOfEntries = %d, max:32]", numberOfEntries);
3395     for (counter_1 = 0; counter_1 < 32; counter_1++) {
3396       if (counter_1 < numberOfEntries) {
3397         ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "conferenceEntry [%d / %d]", counter_1 + 1, numberOfEntries);
3398         ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
3399         ptvcursor_add(cursor, hf_skinny_resourceType, 4, ENC_LITTLE_ENDIAN);
3400         ptvcursor_add(cursor, hf_skinny_numberOfReservedParticipants, 4, ENC_LITTLE_ENDIAN);
3401         ptvcursor_add(cursor, hf_skinny_numberOfActiveParticipants, 4, ENC_LITTLE_ENDIAN);
3402         ptvcursor_add(cursor, hf_skinny_appID, 4, ENC_LITTLE_ENDIAN);
3403         ptvcursor_add(cursor, hf_skinny_appConfID, 32, ENC_ASCII|ENC_NA);
3404         ptvcursor_add(cursor, hf_skinny_appData, 24, ENC_ASCII|ENC_NA);
3405       } else {
3406         ptvcursor_advance(cursor, 76);
3407       }
3408       ptvcursor_pop_subtree(cursor);
3409       /* end for loop tree: conferenceEntry */
3410     }
3411     ptvcursor_pop_subtree(cursor);
3412     /* end struct: conferenceEntry */
3413   }
3414 }
3415
3416 /*
3417  * Message:   AuditParticipantResMessage
3418  * Opcode:    0x0040
3419  * Type:      IntraCCM
3420  * Direction: pbx2pbx
3421  * VarLength: no
3422  */
3423 static void
3424 handle_AuditParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
3425 {
3426   guint32 numberOfEntries = 0;
3427   ptvcursor_add(cursor, hf_skinny_audit_participant_result, 4, ENC_LITTLE_ENDIAN);
3428   ptvcursor_add(cursor, hf_skinny_last, 4, ENC_LITTLE_ENDIAN);
3429   ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
3430   numberOfEntries = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3431   ptvcursor_add(cursor, hf_skinny_numberOfEntries, 4, ENC_LITTLE_ENDIAN);
3432   {
3433     guint32 counter_1 = 0;
3434     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "participantEntry [ref: numberOfEntries = %d, max:256]", numberOfEntries);
3435     for (counter_1 = 0; counter_1 < 256; counter_1++) {
3436       if (counter_1 < numberOfEntries) {
3437         ptvcursor_add(cursor, hf_skinny_participantEntry, 4, ENC_LITTLE_ENDIAN);
3438       } else {
3439         ptvcursor_advance(cursor, 4);
3440       }
3441     }
3442     ptvcursor_pop_subtree(cursor); /* end for loop tree: participantEntry */
3443   }
3444 }
3445
3446 /*
3447  * Message:   DeviceToUserDataMessageVersion1
3448  * Opcode:    0x0041
3449  * Type:      RegistrationAndManagement
3450  * Direction: dev2pbx
3451  * VarLength: no
3452  */
3453 static void
3454 handle_DeviceToUserDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo _U_)
3455 {
3456   guint32 dataLength = 0;
3457   {
3458     /* start struct : deviceToUserDataVersion1 / size: 2040 */
3459     ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserDataVersion1");
3460     ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
3461     si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3462     ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN);
3463     si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
3464     ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
3465     ptvcursor_add(cursor, hf_skinny_transactionID, 4, ENC_LITTLE_ENDIAN);
3466     dataLength = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));