0abcee200e0819cd57cbeed121c29f4ddc2233a0
[obnox/wireshark/wip.git] / epan / dissectors / packet-h460.c
1 /* Do not modify this file.                                                   */
2 /* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
3 /* packet-h460.c                                                              */
4 /* ../../tools/asn2wrs.py -c ./h460.cnf -s ./packet-h460-template -D . NUMBER-PORTABILITY.asn CIRCUIT-STATUS-MAP.asn CALL-PRIORITY.asn QOS-MONITORING-REPORT.asn QOS-MONITORING-EXTENDED-VOIP-REPORT.asn CALL-PARTY-CATEGORY.asn MLPP.asn SIGNALLING-CHANNEL-SUSPEND-REDIRECT.asn SIGNALLING-TRAVERSAL.asn MEDIA-TRAVERSAL.asn MESSAGE-BROADCAST.asn */
5
6 /* Input file: packet-h460-template.c */
7
8 #line 1 "packet-h460-template.c"
9 /* packet-h460.c
10  * Routines for H.460.x packet dissection
11  * 2007  Tomas Kukosa
12  *
13  * $Id$
14  *
15  * Wireshark - Network traffic analyzer
16  * By Gerald Combs <gerald@wireshark.org>
17  * Copyright 1998 Gerald Combs
18  *
19  * This program is free software; you can redistribute it and/or
20  * modify it under the terms of the GNU General Public License
21  * as published by the Free Software Foundation; either version 2
22  * of the License, or (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program; if not, write to the Free Software
31  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
32  */
33
34 #ifdef HAVE_CONFIG_H
35 # include "config.h"
36 #endif
37
38 #include <glib.h>
39 #include <epan/packet.h>
40 #include <epan/oids.h>
41 #include <epan/asn1.h>
42
43 #include <stdio.h>
44 #include <string.h>
45
46 #include "packet-per.h"
47 #include "packet-h225.h"
48 #include "packet-h235.h"
49 #include "packet-h245.h"
50
51 #define PNAME  "H.460 Supplementary Services"
52 #define PSNAME "H.460"
53 #define PFNAME "h460"
54
55 /* Initialize the protocol and registered fields */
56 static int proto_h460 = -1;
57
58 /*--- Included file: packet-h460-hf.c ---*/
59 #line 1 "packet-h460-hf.c"
60
61 /* --- Module NUMBER-PORTABILITY --- --- ---                                  */
62
63 static int hf_h460_2_h460_2_NumberPortabilityInfo_PDU = -1;  /* NumberPortabilityInfo */
64 static int hf_h460_2_numberPortabilityRejectReason = -1;  /* NumberPortabilityRejectReason */
65 static int hf_h460_2_nUMBERPORTABILITYDATA = -1;  /* T_nUMBERPORTABILITYDATA */
66 static int hf_h460_2_addressTranslated = -1;      /* NULL */
67 static int hf_h460_2_portedAddress = -1;          /* PortabilityAddress */
68 static int hf_h460_2_routingAddress = -1;         /* PortabilityAddress */
69 static int hf_h460_2_regionalParams = -1;         /* RegionalParameters */
70 static int hf_h460_2_unspecified = -1;            /* NULL */
71 static int hf_h460_2_qorPortedNumber = -1;        /* NULL */
72 static int hf_h460_2_aliasAddress = -1;           /* AliasAddress */
73 static int hf_h460_2_typeOfAddress = -1;          /* NumberPortabilityTypeOfNumber */
74 static int hf_h460_2_publicTypeOfNumber = -1;     /* PublicTypeOfNumber */
75 static int hf_h460_2_privateTypeOfNumber = -1;    /* PrivateTypeOfNumber */
76 static int hf_h460_2_portabilityTypeOfNumber = -1;  /* PortabilityTypeOfNumber */
77 static int hf_h460_2_portedNumber = -1;           /* NULL */
78 static int hf_h460_2_routingNumber = -1;          /* NULL */
79 static int hf_h460_2_concatenatedNumber = -1;     /* NULL */
80 static int hf_h460_2_t35CountryCode = -1;         /* INTEGER_0_255 */
81 static int hf_h460_2_t35Extension = -1;           /* INTEGER_0_255 */
82 static int hf_h460_2_variantIdentifier = -1;      /* INTEGER_1_255 */
83 static int hf_h460_2_regionalData = -1;           /* OCTET_STRING */
84
85 /* --- Module CIRCUIT-STATUS-MAP --- --- ---                                  */
86
87 static int hf_h460_3_h460_3_CircuitStatus_PDU = -1;  /* CircuitStatus */
88 static int hf_h460_3_circuitStatusMap = -1;       /* SEQUENCE_OF_CircuitStatusMap */
89 static int hf_h460_3_circuitStatusMap_item = -1;  /* CircuitStatusMap */
90 static int hf_h460_3_statusType = -1;             /* CircuitStatusType */
91 static int hf_h460_3_baseCircuitID = -1;          /* CircuitIdentifier */
92 static int hf_h460_3_range = -1;                  /* INTEGER_0_4095 */
93 static int hf_h460_3_status = -1;                 /* OCTET_STRING */
94 static int hf_h460_3_serviceStatus = -1;          /* NULL */
95 static int hf_h460_3_busyStatus = -1;             /* NULL */
96
97 /* --- Module CALL-PRIORITY --- --- ---                                       */
98
99 static int hf_h460_4_h460_4_CallPriorityInfo_PDU = -1;  /* CallPriorityInfo */
100 static int hf_h460_4_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU = -1;  /* CountryInternationalNetworkCallOriginationIdentification */
101 static int hf_h460_4_priorityValue = -1;          /* T_priorityValue */
102 static int hf_h460_4_emergencyAuthorized = -1;    /* NULL */
103 static int hf_h460_4_emergencyPublic = -1;        /* NULL */
104 static int hf_h460_4_high = -1;                   /* NULL */
105 static int hf_h460_4_normal = -1;                 /* NULL */
106 static int hf_h460_4_priorityExtension = -1;      /* INTEGER_0_255 */
107 static int hf_h460_4_tokens = -1;                 /* SEQUENCE_OF_ClearToken */
108 static int hf_h460_4_tokens_item = -1;            /* ClearToken */
109 static int hf_h460_4_cryptoTokens = -1;           /* SEQUENCE_OF_CryptoToken */
110 static int hf_h460_4_cryptoTokens_item = -1;      /* CryptoToken */
111 static int hf_h460_4_rejectReason = -1;           /* T_rejectReason */
112 static int hf_h460_4_priorityUnavailable = -1;    /* NULL */
113 static int hf_h460_4_priorityUnauthorized = -1;   /* NULL */
114 static int hf_h460_4_priorityValueUnknown = -1;   /* NULL */
115 static int hf_h460_4_numberingPlan = -1;          /* T_numberingPlan */
116 static int hf_h460_4_x121 = -1;                   /* T_x121 */
117 static int hf_h460_4_x121CountryCode = -1;        /* X121CountryCode */
118 static int hf_h460_4_e164 = -1;                   /* T_e164 */
119 static int hf_h460_4_e164CountryCode = -1;        /* E164CountryCode */
120 static int hf_h460_4_identificationCode = -1;     /* T_identificationCode */
121
122 /* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */
123
124 static int hf_h460_9_h460_9_QosMonitoringReportData_PDU = -1;  /* QosMonitoringReportData */
125 static int hf_h460_9_h460_9_ExtendedRTPMetrics_PDU = -1;  /* ExtendedRTPMetrics */
126 static int hf_h460_9_extensionId = -1;            /* GenericIdentifier */
127 static int hf_h460_9_extensionContent = -1;       /* OCTET_STRING */
128 static int hf_h460_9_rtpAddress = -1;             /* TransportChannelInfo */
129 static int hf_h460_9_rtcpAddress = -1;            /* TransportChannelInfo */
130 static int hf_h460_9_sessionId = -1;              /* INTEGER_1_255 */
131 static int hf_h460_9_nonStandardData = -1;        /* NonStandardParameter */
132 static int hf_h460_9_mediaSenderMeasures = -1;    /* T_mediaSenderMeasures */
133 static int hf_h460_9_worstEstimatedEnd2EndDelay = -1;  /* EstimatedEnd2EndDelay */
134 static int hf_h460_9_meanEstimatedEnd2EndDelay = -1;  /* EstimatedEnd2EndDelay */
135 static int hf_h460_9_mediaReceiverMeasures = -1;  /* T_mediaReceiverMeasures */
136 static int hf_h460_9_cumulativeNumberOfPacketsLost = -1;  /* INTEGER_0_4294967295 */
137 static int hf_h460_9_packetLostRate = -1;         /* INTEGER_0_65535 */
138 static int hf_h460_9_worstJitter = -1;            /* CalculatedJitter */
139 static int hf_h460_9_estimatedThroughput = -1;    /* BandWidth */
140 static int hf_h460_9_fractionLostRate = -1;       /* INTEGER_0_65535 */
141 static int hf_h460_9_meanJitter = -1;             /* CalculatedJitter */
142 static int hf_h460_9_extensions = -1;             /* SEQUENCE_OF_Extension */
143 static int hf_h460_9_extensions_item = -1;        /* Extension */
144 static int hf_h460_9_callReferenceValue = -1;     /* CallReferenceValue */
145 static int hf_h460_9_conferenceID = -1;           /* ConferenceIdentifier */
146 static int hf_h460_9_callIdentifier = -1;         /* CallIdentifier */
147 static int hf_h460_9_mediaChannelsQoS = -1;       /* SEQUENCE_OF_RTCPMeasures */
148 static int hf_h460_9_mediaChannelsQoS_item = -1;  /* RTCPMeasures */
149 static int hf_h460_9_periodic = -1;               /* PeriodicQoSMonReport */
150 static int hf_h460_9_final = -1;                  /* FinalQosMonReport */
151 static int hf_h460_9_interGK = -1;                /* InterGKQosMonReport */
152 static int hf_h460_9_perCallInfo = -1;            /* SEQUENCE_OF_PerCallQoSReport */
153 static int hf_h460_9_perCallInfo_item = -1;       /* PerCallQoSReport */
154 static int hf_h460_9_mediaInfo = -1;              /* SEQUENCE_OF_RTCPMeasures */
155 static int hf_h460_9_mediaInfo_item = -1;         /* RTCPMeasures */
156 static int hf_h460_9_networkPacketLossRate = -1;  /* INTEGER_0_255 */
157 static int hf_h460_9_jitterBufferDiscardRate = -1;  /* INTEGER_0_255 */
158 static int hf_h460_9_burstMetrics = -1;           /* BurstMetrics */
159 static int hf_h460_9_rtcpRoundTripDelay = -1;     /* INTEGER_0_65535 */
160 static int hf_h460_9_endSystemDelay = -1;         /* INTEGER_0_65535 */
161 static int hf_h460_9_signalLevel = -1;            /* INTEGER_M127_10 */
162 static int hf_h460_9_noiseLevel = -1;             /* INTEGER_M127_0 */
163 static int hf_h460_9_residualEchoReturnLoss = -1;  /* INTEGER_0_127 */
164 static int hf_h460_9_rFactor = -1;                /* INTEGER_0_100 */
165 static int hf_h460_9_extRFactor = -1;             /* INTEGER_0_100 */
166 static int hf_h460_9_estimatedMOSLQ = -1;         /* INTEGER_10_50 */
167 static int hf_h460_9_estimatedMOSCQ = -1;         /* INTEGER_10_50 */
168 static int hf_h460_9_plcType = -1;                /* PLCtypes */
169 static int hf_h460_9_jitterBufferParms = -1;      /* JitterBufferParms */
170 static int hf_h460_9_gmin = -1;                   /* INTEGER_0_255 */
171 static int hf_h460_9_burstLossDensity = -1;       /* INTEGER_0_255 */
172 static int hf_h460_9_gapLossDensity = -1;         /* INTEGER_0_255 */
173 static int hf_h460_9_burstDuration = -1;          /* INTEGER_0_65535 */
174 static int hf_h460_9_gapDuration = -1;            /* INTEGER_0_65535 */
175 static int hf_h460_9_unspecified = -1;            /* NULL */
176 static int hf_h460_9_disabled = -1;               /* NULL */
177 static int hf_h460_9_enhanced = -1;               /* NULL */
178 static int hf_h460_9_standard = -1;               /* NULL */
179 static int hf_h460_9_jitterBufferType = -1;       /* JitterBufferTypes */
180 static int hf_h460_9_jitterBufferAdaptRate = -1;  /* INTEGER_0_15 */
181 static int hf_h460_9_jitterBufferNominalSize = -1;  /* INTEGER_0_65535 */
182 static int hf_h460_9_jitterBufferMaxSize = -1;    /* INTEGER_0_65535 */
183 static int hf_h460_9_jitterBufferAbsoluteMax = -1;  /* INTEGER_0_65535 */
184 static int hf_h460_9_unknown = -1;                /* NULL */
185 static int hf_h460_9_reserved = -1;               /* NULL */
186 static int hf_h460_9_nonadaptive = -1;            /* NULL */
187 static int hf_h460_9_adaptive = -1;               /* NULL */
188
189 /* --- Module CALL-PARTY-CATEGORY --- --- ---                                 */
190
191 static int hf_h460_10_h460_10_CallPartyCategoryInfo_PDU = -1;  /* CallPartyCategoryInfo */
192 static int hf_h460_10_callPartyCategory = -1;     /* CallPartyCategory */
193 static int hf_h460_10_originatingLineInfo = -1;   /* OriginatingLineInfo */
194
195 /* --- Module MLPP --- --- ---                                                */
196
197 static int hf_h460_14_h460_14_MLPPInfo_PDU = -1;  /* MLPPInfo */
198 static int hf_h460_14_precedence = -1;            /* MlppPrecedence */
199 static int hf_h460_14_mlppReason = -1;            /* MlppReason */
200 static int hf_h460_14_mlppNotification = -1;      /* MlppNotification */
201 static int hf_h460_14_alternateParty = -1;        /* AlternateParty */
202 static int hf_h460_14_releaseCall = -1;           /* ReleaseCall */
203 static int hf_h460_14_preemptionPending = -1;     /* NULL */
204 static int hf_h460_14_preemptionInProgress = -1;  /* NULL */
205 static int hf_h460_14_preemptionEnd = -1;         /* NULL */
206 static int hf_h460_14_preemptionComplete = -1;    /* NULL */
207 static int hf_h460_14_altID = -1;                 /* AliasAddress */
208 static int hf_h460_14_altTimer = -1;              /* INTEGER_0_255 */
209 static int hf_h460_14_preemptCallID = -1;         /* CallIdentifier */
210 static int hf_h460_14_releaseReason = -1;         /* MlppReason */
211 static int hf_h460_14_releaseDelay = -1;          /* INTEGER_0_255 */
212
213 /* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- ---                 */
214
215 static int hf_h460_15_h460_15_SignallingChannelData_PDU = -1;  /* SignallingChannelData */
216 static int hf_h460_15_signallingChannelData = -1;  /* T_signallingChannelData */
217 static int hf_h460_15_channelSuspendRequest = -1;  /* ChannelSuspendRequest */
218 static int hf_h460_15_channelSuspendResponse = -1;  /* ChannelSuspendResponse */
219 static int hf_h460_15_channelSuspendConfirm = -1;  /* ChannelSuspendConfirm */
220 static int hf_h460_15_channelSuspendCancel = -1;  /* ChannelSuspendCancel */
221 static int hf_h460_15_channelResumeRequest = -1;  /* ChannelResumeRequest */
222 static int hf_h460_15_channelResumeResponse = -1;  /* ChannelResumeResponse */
223 static int hf_h460_15_channelResumeAddress = -1;  /* SEQUENCE_OF_TransportAddress */
224 static int hf_h460_15_channelResumeAddress_item = -1;  /* TransportAddress */
225 static int hf_h460_15_immediateResume = -1;       /* BOOLEAN */
226 static int hf_h460_15_resetH245 = -1;             /* NULL */
227 static int hf_h460_15_okToSuspend = -1;           /* BOOLEAN */
228 static int hf_h460_15_randomNumber = -1;          /* INTEGER_0_4294967295 */
229
230 /* --- Module SIGNALLING-TRAVERSAL --- --- ---                                */
231
232 static int hf_h460_18_h460_18_IncomingCallIndication_PDU = -1;  /* IncomingCallIndication */
233 static int hf_h460_18_h460_18_LRQKeepAliveData_PDU = -1;  /* LRQKeepAliveData */
234 static int hf_h460_18_callSignallingAddress = -1;  /* TransportAddress */
235 static int hf_h460_18_callID = -1;                /* CallIdentifier */
236 static int hf_h460_18_lrqKeepAliveInterval = -1;  /* TimeToLive */
237
238 /* --- Module MEDIA-TRAVERSAL --- --- ---                                     */
239
240 static int hf_h460_19_h460_19_TraversalParameters_PDU = -1;  /* TraversalParameters */
241 static int hf_h460_19_multiplexedMediaChannel = -1;  /* TransportAddress */
242 static int hf_h460_19_multiplexedMediaControlChannel = -1;  /* TransportAddress */
243 static int hf_h460_19_multiplexID = -1;           /* INTEGER_0_4294967295 */
244 static int hf_h460_19_keepAliveChannel = -1;      /* TransportAddress */
245 static int hf_h460_19_keepAlivePayloadType = -1;  /* INTEGER_0_127 */
246 static int hf_h460_19_keepAliveInterval = -1;     /* TimeToLive */
247
248 /* --- Module MESSAGE-BROADCAST --- --- ---                                   */
249
250 static int hf_h460_21_h460_21_CapabilityAdvertisement_PDU = -1;  /* CapabilityAdvertisement */
251 static int hf_h460_21_receiveCapabilities = -1;   /* ReceiveCapabilities */
252 static int hf_h460_21_transmitCapabilities = -1;  /* SEQUENCE_SIZE_1_256_OF_TransmitCapabilities */
253 static int hf_h460_21_transmitCapabilities_item = -1;  /* TransmitCapabilities */
254 static int hf_h460_21_capabilities = -1;          /* SEQUENCE_SIZE_1_256_OF_Capability */
255 static int hf_h460_21_capabilities_item = -1;     /* Capability */
256 static int hf_h460_21_maxGroups = -1;             /* INTEGER_1_65535 */
257 static int hf_h460_21_groupIdentifer = -1;        /* GloballyUniqueID */
258 static int hf_h460_21_capability = -1;            /* Capability */
259 static int hf_h460_21_sourceAddress = -1;         /* UnicastAddress */
260
261 /*--- End of included file: packet-h460-hf.c ---*/
262 #line 50 "packet-h460-template.c"
263
264 /* Initialize the subtree pointers */
265
266 /*--- Included file: packet-h460-ett.c ---*/
267 #line 1 "packet-h460-ett.c"
268
269 /* --- Module NUMBER-PORTABILITY --- --- ---                                  */
270
271 static gint ett_h460_2_NumberPortabilityInfo = -1;
272 static gint ett_h460_2_T_nUMBERPORTABILITYDATA = -1;
273 static gint ett_h460_2_NumberPortabilityRejectReason = -1;
274 static gint ett_h460_2_PortabilityAddress = -1;
275 static gint ett_h460_2_NumberPortabilityTypeOfNumber = -1;
276 static gint ett_h460_2_PortabilityTypeOfNumber = -1;
277 static gint ett_h460_2_RegionalParameters = -1;
278
279 /* --- Module CIRCUIT-STATUS-MAP --- --- ---                                  */
280
281 static gint ett_h460_3_CircuitStatus = -1;
282 static gint ett_h460_3_SEQUENCE_OF_CircuitStatusMap = -1;
283 static gint ett_h460_3_CircuitStatusMap = -1;
284 static gint ett_h460_3_CircuitStatusType = -1;
285
286 /* --- Module CALL-PRIORITY --- --- ---                                       */
287
288 static gint ett_h460_4_CallPriorityInfo = -1;
289 static gint ett_h460_4_T_priorityValue = -1;
290 static gint ett_h460_4_SEQUENCE_OF_ClearToken = -1;
291 static gint ett_h460_4_SEQUENCE_OF_CryptoToken = -1;
292 static gint ett_h460_4_T_rejectReason = -1;
293 static gint ett_h460_4_CountryInternationalNetworkCallOriginationIdentification = -1;
294 static gint ett_h460_4_T_numberingPlan = -1;
295 static gint ett_h460_4_T_x121 = -1;
296 static gint ett_h460_4_T_e164 = -1;
297
298 /* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */
299
300 static gint ett_h460_9_Extension = -1;
301 static gint ett_h460_9_RTCPMeasures = -1;
302 static gint ett_h460_9_T_mediaSenderMeasures = -1;
303 static gint ett_h460_9_T_mediaReceiverMeasures = -1;
304 static gint ett_h460_9_SEQUENCE_OF_Extension = -1;
305 static gint ett_h460_9_PerCallQoSReport = -1;
306 static gint ett_h460_9_SEQUENCE_OF_RTCPMeasures = -1;
307 static gint ett_h460_9_QosMonitoringReportData = -1;
308 static gint ett_h460_9_PeriodicQoSMonReport = -1;
309 static gint ett_h460_9_SEQUENCE_OF_PerCallQoSReport = -1;
310 static gint ett_h460_9_FinalQosMonReport = -1;
311 static gint ett_h460_9_InterGKQosMonReport = -1;
312 static gint ett_h460_9_ExtendedRTPMetrics = -1;
313 static gint ett_h460_9_BurstMetrics = -1;
314 static gint ett_h460_9_PLCtypes = -1;
315 static gint ett_h460_9_JitterBufferParms = -1;
316 static gint ett_h460_9_JitterBufferTypes = -1;
317
318 /* --- Module CALL-PARTY-CATEGORY --- --- ---                                 */
319
320 static gint ett_h460_10_CallPartyCategoryInfo = -1;
321
322 /* --- Module MLPP --- --- ---                                                */
323
324 static gint ett_h460_14_MLPPInfo = -1;
325 static gint ett_h460_14_MlppNotification = -1;
326 static gint ett_h460_14_AlternateParty = -1;
327 static gint ett_h460_14_ReleaseCall = -1;
328
329 /* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- ---                 */
330
331 static gint ett_h460_15_SignallingChannelData = -1;
332 static gint ett_h460_15_T_signallingChannelData = -1;
333 static gint ett_h460_15_ChannelSuspendRequest = -1;
334 static gint ett_h460_15_SEQUENCE_OF_TransportAddress = -1;
335 static gint ett_h460_15_ChannelSuspendResponse = -1;
336 static gint ett_h460_15_ChannelSuspendConfirm = -1;
337 static gint ett_h460_15_ChannelSuspendCancel = -1;
338 static gint ett_h460_15_ChannelResumeRequest = -1;
339 static gint ett_h460_15_ChannelResumeResponse = -1;
340
341 /* --- Module SIGNALLING-TRAVERSAL --- --- ---                                */
342
343 static gint ett_h460_18_IncomingCallIndication = -1;
344 static gint ett_h460_18_LRQKeepAliveData = -1;
345
346 /* --- Module MEDIA-TRAVERSAL --- --- ---                                     */
347
348 static gint ett_h460_19_TraversalParameters = -1;
349
350 /* --- Module MESSAGE-BROADCAST --- --- ---                                   */
351
352 static gint ett_h460_21_CapabilityAdvertisement = -1;
353 static gint ett_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities = -1;
354 static gint ett_h460_21_ReceiveCapabilities = -1;
355 static gint ett_h460_21_SEQUENCE_SIZE_1_256_OF_Capability = -1;
356 static gint ett_h460_21_TransmitCapabilities = -1;
357
358 /*--- End of included file: packet-h460-ett.c ---*/
359 #line 53 "packet-h460-template.c"
360
361 /* Subdissectors */
362 static dissector_handle_t q931_ie_handle = NULL; 
363 static dissector_handle_t h225_ras_handle = NULL; 
364
365
366 /*--- Included file: packet-h460-fn.c ---*/
367 #line 1 "packet-h460-fn.c"
368
369 /* --- Module NUMBER-PORTABILITY --- --- ---                                  */
370
371
372
373 static int
374 dissect_h460_2_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
375   offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
376
377   return offset;
378 }
379
380
381 static const value_string h460_2_NumberPortabilityRejectReason_vals[] = {
382   {   0, "unspecified" },
383   {   1, "qorPortedNumber" },
384   { 0, NULL }
385 };
386
387 static const per_choice_t h460_2_NumberPortabilityRejectReason_choice[] = {
388   {   0, &hf_h460_2_unspecified  , ASN1_EXTENSION_ROOT    , dissect_h460_2_NULL },
389   {   1, &hf_h460_2_qorPortedNumber, ASN1_EXTENSION_ROOT    , dissect_h460_2_NULL },
390   { 0, NULL, 0, NULL }
391 };
392
393 static int
394 dissect_h460_2_NumberPortabilityRejectReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
395   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
396                                  ett_h460_2_NumberPortabilityRejectReason, h460_2_NumberPortabilityRejectReason_choice,
397                                  NULL);
398
399   return offset;
400 }
401
402
403 static const value_string h460_2_PortabilityTypeOfNumber_vals[] = {
404   {   0, "portedNumber" },
405   {   1, "routingNumber" },
406   {   2, "concatenatedNumber" },
407   { 0, NULL }
408 };
409
410 static const per_choice_t h460_2_PortabilityTypeOfNumber_choice[] = {
411   {   0, &hf_h460_2_portedNumber , ASN1_EXTENSION_ROOT    , dissect_h460_2_NULL },
412   {   1, &hf_h460_2_routingNumber, ASN1_EXTENSION_ROOT    , dissect_h460_2_NULL },
413   {   2, &hf_h460_2_concatenatedNumber, ASN1_EXTENSION_ROOT    , dissect_h460_2_NULL },
414   { 0, NULL, 0, NULL }
415 };
416
417 static int
418 dissect_h460_2_PortabilityTypeOfNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
419   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
420                                  ett_h460_2_PortabilityTypeOfNumber, h460_2_PortabilityTypeOfNumber_choice,
421                                  NULL);
422
423   return offset;
424 }
425
426
427 static const value_string h460_2_NumberPortabilityTypeOfNumber_vals[] = {
428   {   0, "publicTypeOfNumber" },
429   {   1, "privateTypeOfNumber" },
430   {   2, "portabilityTypeOfNumber" },
431   { 0, NULL }
432 };
433
434 static const per_choice_t h460_2_NumberPortabilityTypeOfNumber_choice[] = {
435   {   0, &hf_h460_2_publicTypeOfNumber, ASN1_EXTENSION_ROOT    , dissect_h225_PublicTypeOfNumber },
436   {   1, &hf_h460_2_privateTypeOfNumber, ASN1_EXTENSION_ROOT    , dissect_h225_PrivateTypeOfNumber },
437   {   2, &hf_h460_2_portabilityTypeOfNumber, ASN1_EXTENSION_ROOT    , dissect_h460_2_PortabilityTypeOfNumber },
438   { 0, NULL, 0, NULL }
439 };
440
441 static int
442 dissect_h460_2_NumberPortabilityTypeOfNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
443   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
444                                  ett_h460_2_NumberPortabilityTypeOfNumber, h460_2_NumberPortabilityTypeOfNumber_choice,
445                                  NULL);
446
447   return offset;
448 }
449
450
451 static const per_sequence_t h460_2_PortabilityAddress_sequence[] = {
452   { &hf_h460_2_aliasAddress , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_AliasAddress },
453   { &hf_h460_2_typeOfAddress, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_2_NumberPortabilityTypeOfNumber },
454   { NULL, 0, 0, NULL }
455 };
456
457 static int
458 dissect_h460_2_PortabilityAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
459   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
460                                    ett_h460_2_PortabilityAddress, h460_2_PortabilityAddress_sequence);
461
462   return offset;
463 }
464
465
466
467 static int
468 dissect_h460_2_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
469   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
470                                                             0U, 255U, NULL, FALSE);
471
472   return offset;
473 }
474
475
476
477 static int
478 dissect_h460_2_INTEGER_1_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
479   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
480                                                             1U, 255U, NULL, FALSE);
481
482   return offset;
483 }
484
485
486
487 static int
488 dissect_h460_2_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
489   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
490                                        NO_BOUND, NO_BOUND, FALSE, NULL);
491
492   return offset;
493 }
494
495
496 static const per_sequence_t h460_2_RegionalParameters_sequence[] = {
497   { &hf_h460_2_t35CountryCode, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_2_INTEGER_0_255 },
498   { &hf_h460_2_t35Extension , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_2_INTEGER_0_255 },
499   { &hf_h460_2_variantIdentifier, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_2_INTEGER_1_255 },
500   { &hf_h460_2_regionalData , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_2_OCTET_STRING },
501   { NULL, 0, 0, NULL }
502 };
503
504 static int
505 dissect_h460_2_RegionalParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
506   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
507                                    ett_h460_2_RegionalParameters, h460_2_RegionalParameters_sequence);
508
509   return offset;
510 }
511
512
513 static const per_sequence_t h460_2_T_nUMBERPORTABILITYDATA_sequence[] = {
514   { &hf_h460_2_addressTranslated, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_2_NULL },
515   { &hf_h460_2_portedAddress, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_2_PortabilityAddress },
516   { &hf_h460_2_routingAddress, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_2_PortabilityAddress },
517   { &hf_h460_2_regionalParams, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_2_RegionalParameters },
518   { NULL, 0, 0, NULL }
519 };
520
521 static int
522 dissect_h460_2_T_nUMBERPORTABILITYDATA(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
523   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
524                                    ett_h460_2_T_nUMBERPORTABILITYDATA, h460_2_T_nUMBERPORTABILITYDATA_sequence);
525
526   return offset;
527 }
528
529
530 static const value_string h460_2_NumberPortabilityInfo_vals[] = {
531   {   0, "numberPortabilityRejectReason" },
532   {   1, "nUMBERPORTABILITYDATA" },
533   { 0, NULL }
534 };
535
536 static const per_choice_t h460_2_NumberPortabilityInfo_choice[] = {
537   {   0, &hf_h460_2_numberPortabilityRejectReason, ASN1_EXTENSION_ROOT    , dissect_h460_2_NumberPortabilityRejectReason },
538   {   1, &hf_h460_2_nUMBERPORTABILITYDATA, ASN1_EXTENSION_ROOT    , dissect_h460_2_T_nUMBERPORTABILITYDATA },
539   { 0, NULL, 0, NULL }
540 };
541
542 static int
543 dissect_h460_2_NumberPortabilityInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
544   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
545                                  ett_h460_2_NumberPortabilityInfo, h460_2_NumberPortabilityInfo_choice,
546                                  NULL);
547
548   return offset;
549 }
550
551 /*--- PDUs ---*/
552
553 static int dissect_h460_2_NumberPortabilityInfo_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
554   int offset = 0;
555   asn1_ctx_t asn1_ctx;
556   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
557   offset = dissect_h460_2_NumberPortabilityInfo(tvb, offset, &asn1_ctx, tree, hf_h460_2_h460_2_NumberPortabilityInfo_PDU);
558   offset += 7; offset >>= 3;
559   return offset;
560 }
561
562
563 /* --- Module CIRCUIT-STATUS-MAP --- --- ---                                  */
564
565
566
567 static int
568 dissect_h460_3_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
569   offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
570
571   return offset;
572 }
573
574
575 static const value_string h460_3_CircuitStatusType_vals[] = {
576   {   0, "serviceStatus" },
577   {   1, "busyStatus" },
578   { 0, NULL }
579 };
580
581 static const per_choice_t h460_3_CircuitStatusType_choice[] = {
582   {   0, &hf_h460_3_serviceStatus, ASN1_EXTENSION_ROOT    , dissect_h460_3_NULL },
583   {   1, &hf_h460_3_busyStatus   , ASN1_EXTENSION_ROOT    , dissect_h460_3_NULL },
584   { 0, NULL, 0, NULL }
585 };
586
587 static int
588 dissect_h460_3_CircuitStatusType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
589   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
590                                  ett_h460_3_CircuitStatusType, h460_3_CircuitStatusType_choice,
591                                  NULL);
592
593   return offset;
594 }
595
596
597
598 static int
599 dissect_h460_3_INTEGER_0_4095(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
600   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
601                                                             0U, 4095U, NULL, FALSE);
602
603   return offset;
604 }
605
606
607
608 static int
609 dissect_h460_3_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
610   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
611                                        NO_BOUND, NO_BOUND, FALSE, NULL);
612
613   return offset;
614 }
615
616
617 static const per_sequence_t h460_3_CircuitStatusMap_sequence[] = {
618   { &hf_h460_3_statusType   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_3_CircuitStatusType },
619   { &hf_h460_3_baseCircuitID, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_CircuitIdentifier },
620   { &hf_h460_3_range        , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_3_INTEGER_0_4095 },
621   { &hf_h460_3_status       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_3_OCTET_STRING },
622   { NULL, 0, 0, NULL }
623 };
624
625 static int
626 dissect_h460_3_CircuitStatusMap(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
627   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
628                                    ett_h460_3_CircuitStatusMap, h460_3_CircuitStatusMap_sequence);
629
630   return offset;
631 }
632
633
634 static const per_sequence_t h460_3_SEQUENCE_OF_CircuitStatusMap_sequence_of[1] = {
635   { &hf_h460_3_circuitStatusMap_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h460_3_CircuitStatusMap },
636 };
637
638 static int
639 dissect_h460_3_SEQUENCE_OF_CircuitStatusMap(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
640   offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
641                                       ett_h460_3_SEQUENCE_OF_CircuitStatusMap, h460_3_SEQUENCE_OF_CircuitStatusMap_sequence_of);
642
643   return offset;
644 }
645
646
647 static const per_sequence_t h460_3_CircuitStatus_sequence[] = {
648   { &hf_h460_3_circuitStatusMap, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_3_SEQUENCE_OF_CircuitStatusMap },
649   { NULL, 0, 0, NULL }
650 };
651
652 static int
653 dissect_h460_3_CircuitStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
654   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
655                                    ett_h460_3_CircuitStatus, h460_3_CircuitStatus_sequence);
656
657   return offset;
658 }
659
660 /*--- PDUs ---*/
661
662 static int dissect_h460_3_CircuitStatus_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
663   int offset = 0;
664   asn1_ctx_t asn1_ctx;
665   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
666   offset = dissect_h460_3_CircuitStatus(tvb, offset, &asn1_ctx, tree, hf_h460_3_h460_3_CircuitStatus_PDU);
667   offset += 7; offset >>= 3;
668   return offset;
669 }
670
671
672 /* --- Module CALL-PRIORITY --- --- ---                                       */
673
674
675
676 static int
677 dissect_h460_4_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
678   offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
679
680   return offset;
681 }
682
683
684 static const value_string h460_4_T_priorityValue_vals[] = {
685   {   0, "emergencyAuthorized" },
686   {   1, "emergencyPublic" },
687   {   2, "high" },
688   {   3, "normal" },
689   { 0, NULL }
690 };
691
692 static const per_choice_t h460_4_T_priorityValue_choice[] = {
693   {   0, &hf_h460_4_emergencyAuthorized, ASN1_EXTENSION_ROOT    , dissect_h460_4_NULL },
694   {   1, &hf_h460_4_emergencyPublic, ASN1_EXTENSION_ROOT    , dissect_h460_4_NULL },
695   {   2, &hf_h460_4_high         , ASN1_EXTENSION_ROOT    , dissect_h460_4_NULL },
696   {   3, &hf_h460_4_normal       , ASN1_EXTENSION_ROOT    , dissect_h460_4_NULL },
697   { 0, NULL, 0, NULL }
698 };
699
700 static int
701 dissect_h460_4_T_priorityValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
702   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
703                                  ett_h460_4_T_priorityValue, h460_4_T_priorityValue_choice,
704                                  NULL);
705
706   return offset;
707 }
708
709
710
711 static int
712 dissect_h460_4_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
713   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
714                                                             0U, 255U, NULL, FALSE);
715
716   return offset;
717 }
718
719
720 static const per_sequence_t h460_4_SEQUENCE_OF_ClearToken_sequence_of[1] = {
721   { &hf_h460_4_tokens_item  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h235_ClearToken },
722 };
723
724 static int
725 dissect_h460_4_SEQUENCE_OF_ClearToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
726   offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
727                                       ett_h460_4_SEQUENCE_OF_ClearToken, h460_4_SEQUENCE_OF_ClearToken_sequence_of);
728
729   return offset;
730 }
731
732
733 static const per_sequence_t h460_4_SEQUENCE_OF_CryptoToken_sequence_of[1] = {
734   { &hf_h460_4_cryptoTokens_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h235_CryptoToken },
735 };
736
737 static int
738 dissect_h460_4_SEQUENCE_OF_CryptoToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
739   offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
740                                       ett_h460_4_SEQUENCE_OF_CryptoToken, h460_4_SEQUENCE_OF_CryptoToken_sequence_of);
741
742   return offset;
743 }
744
745
746 static const value_string h460_4_T_rejectReason_vals[] = {
747   {   0, "priorityUnavailable" },
748   {   1, "priorityUnauthorized" },
749   {   2, "priorityValueUnknown" },
750   { 0, NULL }
751 };
752
753 static const per_choice_t h460_4_T_rejectReason_choice[] = {
754   {   0, &hf_h460_4_priorityUnavailable, ASN1_EXTENSION_ROOT    , dissect_h460_4_NULL },
755   {   1, &hf_h460_4_priorityUnauthorized, ASN1_EXTENSION_ROOT    , dissect_h460_4_NULL },
756   {   2, &hf_h460_4_priorityValueUnknown, ASN1_EXTENSION_ROOT    , dissect_h460_4_NULL },
757   { 0, NULL, 0, NULL }
758 };
759
760 static int
761 dissect_h460_4_T_rejectReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
762   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
763                                  ett_h460_4_T_rejectReason, h460_4_T_rejectReason_choice,
764                                  NULL);
765
766   return offset;
767 }
768
769
770 static const per_sequence_t h460_4_CallPriorityInfo_sequence[] = {
771   { &hf_h460_4_priorityValue, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_4_T_priorityValue },
772   { &hf_h460_4_priorityExtension, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_4_INTEGER_0_255 },
773   { &hf_h460_4_tokens       , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_4_SEQUENCE_OF_ClearToken },
774   { &hf_h460_4_cryptoTokens , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_4_SEQUENCE_OF_CryptoToken },
775   { &hf_h460_4_rejectReason , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_4_T_rejectReason },
776   { NULL, 0, 0, NULL }
777 };
778
779 static int
780 dissect_h460_4_CallPriorityInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
781   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
782                                    ett_h460_4_CallPriorityInfo, h460_4_CallPriorityInfo_sequence);
783
784   return offset;
785 }
786
787
788
789 static int
790 dissect_h460_4_X121CountryCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
791   offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,
792                                                       3, 3, FALSE, "0123456789", 10,
793                                                       NULL);
794
795   return offset;
796 }
797
798
799 static const per_sequence_t h460_4_T_x121_sequence[] = {
800   { &hf_h460_4_x121CountryCode, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_4_X121CountryCode },
801   { NULL, 0, 0, NULL }
802 };
803
804 static int
805 dissect_h460_4_T_x121(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
806   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
807                                    ett_h460_4_T_x121, h460_4_T_x121_sequence);
808
809   return offset;
810 }
811
812
813
814 static int
815 dissect_h460_4_E164CountryCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
816   offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,
817                                                       3, 3, FALSE, "0123456789", 10,
818                                                       NULL);
819
820   return offset;
821 }
822
823
824
825 static int
826 dissect_h460_4_T_identificationCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
827   offset = dissect_per_restricted_character_string(tvb, offset, actx, tree, hf_index,
828                                                       1, 4, FALSE, "0123456789", 10,
829                                                       NULL);
830
831   return offset;
832 }
833
834
835 static const per_sequence_t h460_4_T_e164_sequence[] = {
836   { &hf_h460_4_e164CountryCode, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_4_E164CountryCode },
837   { &hf_h460_4_identificationCode, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_4_T_identificationCode },
838   { NULL, 0, 0, NULL }
839 };
840
841 static int
842 dissect_h460_4_T_e164(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
843   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
844                                    ett_h460_4_T_e164, h460_4_T_e164_sequence);
845
846   return offset;
847 }
848
849
850 static const value_string h460_4_T_numberingPlan_vals[] = {
851   {   0, "x121" },
852   {   1, "e164" },
853   { 0, NULL }
854 };
855
856 static const per_choice_t h460_4_T_numberingPlan_choice[] = {
857   {   0, &hf_h460_4_x121         , ASN1_EXTENSION_ROOT    , dissect_h460_4_T_x121 },
858   {   1, &hf_h460_4_e164         , ASN1_EXTENSION_ROOT    , dissect_h460_4_T_e164 },
859   { 0, NULL, 0, NULL }
860 };
861
862 static int
863 dissect_h460_4_T_numberingPlan(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
864   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
865                                  ett_h460_4_T_numberingPlan, h460_4_T_numberingPlan_choice,
866                                  NULL);
867
868   return offset;
869 }
870
871
872 static const per_sequence_t h460_4_CountryInternationalNetworkCallOriginationIdentification_sequence[] = {
873   { &hf_h460_4_numberingPlan, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_4_T_numberingPlan },
874   { NULL, 0, 0, NULL }
875 };
876
877 static int
878 dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
879   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
880                                    ett_h460_4_CountryInternationalNetworkCallOriginationIdentification, h460_4_CountryInternationalNetworkCallOriginationIdentification_sequence);
881
882   return offset;
883 }
884
885 /*--- PDUs ---*/
886
887 static int dissect_h460_4_CallPriorityInfo_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
888   int offset = 0;
889   asn1_ctx_t asn1_ctx;
890   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
891   offset = dissect_h460_4_CallPriorityInfo(tvb, offset, &asn1_ctx, tree, hf_h460_4_h460_4_CallPriorityInfo_PDU);
892   offset += 7; offset >>= 3;
893   return offset;
894 }
895 static int dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
896   int offset = 0;
897   asn1_ctx_t asn1_ctx;
898   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
899   offset = dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification(tvb, offset, &asn1_ctx, tree, hf_h460_4_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU);
900   offset += 7; offset >>= 3;
901   return offset;
902 }
903
904
905 /* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */
906
907
908
909 static int
910 dissect_h460_9_EstimatedEnd2EndDelay(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
911   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
912                                                             0U, 4294967295U, NULL, FALSE);
913
914   return offset;
915 }
916
917
918
919 static int
920 dissect_h460_9_CalculatedJitter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
921   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
922                                                             0U, 4294967295U, NULL, FALSE);
923
924   return offset;
925 }
926
927
928
929 static int
930 dissect_h460_9_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
931   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
932                                        NO_BOUND, NO_BOUND, FALSE, NULL);
933
934   return offset;
935 }
936
937
938 static const per_sequence_t h460_9_Extension_sequence[] = {
939   { &hf_h460_9_extensionId  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_GenericIdentifier },
940   { &hf_h460_9_extensionContent, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_OCTET_STRING },
941   { NULL, 0, 0, NULL }
942 };
943
944 static int
945 dissect_h460_9_Extension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
946   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
947                                    ett_h460_9_Extension, h460_9_Extension_sequence);
948
949   return offset;
950 }
951
952
953
954 static int
955 dissect_h460_9_INTEGER_1_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
956   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
957                                                             1U, 255U, NULL, FALSE);
958
959   return offset;
960 }
961
962
963 static const per_sequence_t h460_9_T_mediaSenderMeasures_sequence[] = {
964   { &hf_h460_9_worstEstimatedEnd2EndDelay, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_EstimatedEnd2EndDelay },
965   { &hf_h460_9_meanEstimatedEnd2EndDelay, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_EstimatedEnd2EndDelay },
966   { NULL, 0, 0, NULL }
967 };
968
969 static int
970 dissect_h460_9_T_mediaSenderMeasures(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
971   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
972                                    ett_h460_9_T_mediaSenderMeasures, h460_9_T_mediaSenderMeasures_sequence);
973
974   return offset;
975 }
976
977
978
979 static int
980 dissect_h460_9_INTEGER_0_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
981   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
982                                                             0U, 4294967295U, NULL, FALSE);
983
984   return offset;
985 }
986
987
988
989 static int
990 dissect_h460_9_INTEGER_0_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
991   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
992                                                             0U, 65535U, NULL, FALSE);
993
994   return offset;
995 }
996
997
998 static const per_sequence_t h460_9_T_mediaReceiverMeasures_sequence[] = {
999   { &hf_h460_9_cumulativeNumberOfPacketsLost, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_4294967295 },
1000   { &hf_h460_9_packetLostRate, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_65535 },
1001   { &hf_h460_9_worstJitter  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_CalculatedJitter },
1002   { &hf_h460_9_estimatedThroughput, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_BandWidth },
1003   { &hf_h460_9_fractionLostRate, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_65535 },
1004   { &hf_h460_9_meanJitter   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_CalculatedJitter },
1005   { NULL, 0, 0, NULL }
1006 };
1007
1008 static int
1009 dissect_h460_9_T_mediaReceiverMeasures(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1010   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1011                                    ett_h460_9_T_mediaReceiverMeasures, h460_9_T_mediaReceiverMeasures_sequence);
1012
1013   return offset;
1014 }
1015
1016
1017 static const per_sequence_t h460_9_SEQUENCE_OF_Extension_sequence_of[1] = {
1018   { &hf_h460_9_extensions_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h460_9_Extension },
1019 };
1020
1021 static int
1022 dissect_h460_9_SEQUENCE_OF_Extension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1023   offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
1024                                       ett_h460_9_SEQUENCE_OF_Extension, h460_9_SEQUENCE_OF_Extension_sequence_of);
1025
1026   return offset;
1027 }
1028
1029
1030 static const per_sequence_t h460_9_RTCPMeasures_sequence[] = {
1031   { &hf_h460_9_rtpAddress   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_TransportChannelInfo },
1032   { &hf_h460_9_rtcpAddress  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_TransportChannelInfo },
1033   { &hf_h460_9_sessionId    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_9_INTEGER_1_255 },
1034   { &hf_h460_9_nonStandardData, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_NonStandardParameter },
1035   { &hf_h460_9_mediaSenderMeasures, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_T_mediaSenderMeasures },
1036   { &hf_h460_9_mediaReceiverMeasures, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_T_mediaReceiverMeasures },
1037   { &hf_h460_9_extensions   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_SEQUENCE_OF_Extension },
1038   { NULL, 0, 0, NULL }
1039 };
1040
1041 static int
1042 dissect_h460_9_RTCPMeasures(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1043   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1044                                    ett_h460_9_RTCPMeasures, h460_9_RTCPMeasures_sequence);
1045
1046   return offset;
1047 }
1048
1049
1050 static const per_sequence_t h460_9_SEQUENCE_OF_RTCPMeasures_sequence_of[1] = {
1051   { &hf_h460_9_mediaChannelsQoS_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h460_9_RTCPMeasures },
1052 };
1053
1054 static int
1055 dissect_h460_9_SEQUENCE_OF_RTCPMeasures(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1056   offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
1057                                       ett_h460_9_SEQUENCE_OF_RTCPMeasures, h460_9_SEQUENCE_OF_RTCPMeasures_sequence_of);
1058
1059   return offset;
1060 }
1061
1062
1063 static const per_sequence_t h460_9_PerCallQoSReport_sequence[] = {
1064   { &hf_h460_9_nonStandardData, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_NonStandardParameter },
1065   { &hf_h460_9_callReferenceValue, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_CallReferenceValue },
1066   { &hf_h460_9_conferenceID , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_ConferenceIdentifier },
1067   { &hf_h460_9_callIdentifier, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_CallIdentifier },
1068   { &hf_h460_9_mediaChannelsQoS, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_SEQUENCE_OF_RTCPMeasures },
1069   { &hf_h460_9_extensions   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_SEQUENCE_OF_Extension },
1070   { NULL, 0, 0, NULL }
1071 };
1072
1073 static int
1074 dissect_h460_9_PerCallQoSReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1075   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1076                                    ett_h460_9_PerCallQoSReport, h460_9_PerCallQoSReport_sequence);
1077
1078   return offset;
1079 }
1080
1081
1082 static const per_sequence_t h460_9_SEQUENCE_OF_PerCallQoSReport_sequence_of[1] = {
1083   { &hf_h460_9_perCallInfo_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h460_9_PerCallQoSReport },
1084 };
1085
1086 static int
1087 dissect_h460_9_SEQUENCE_OF_PerCallQoSReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1088   offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
1089                                       ett_h460_9_SEQUENCE_OF_PerCallQoSReport, h460_9_SEQUENCE_OF_PerCallQoSReport_sequence_of);
1090
1091   return offset;
1092 }
1093
1094
1095 static const per_sequence_t h460_9_PeriodicQoSMonReport_sequence[] = {
1096   { &hf_h460_9_perCallInfo  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_9_SEQUENCE_OF_PerCallQoSReport },
1097   { &hf_h460_9_extensions   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_SEQUENCE_OF_Extension },
1098   { NULL, 0, 0, NULL }
1099 };
1100
1101 static int
1102 dissect_h460_9_PeriodicQoSMonReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1103   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1104                                    ett_h460_9_PeriodicQoSMonReport, h460_9_PeriodicQoSMonReport_sequence);
1105
1106   return offset;
1107 }
1108
1109
1110 static const per_sequence_t h460_9_FinalQosMonReport_sequence[] = {
1111   { &hf_h460_9_mediaInfo    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_9_SEQUENCE_OF_RTCPMeasures },
1112   { &hf_h460_9_nonStandardData, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_NonStandardParameter },
1113   { &hf_h460_9_extensions   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_SEQUENCE_OF_Extension },
1114   { NULL, 0, 0, NULL }
1115 };
1116
1117 static int
1118 dissect_h460_9_FinalQosMonReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1119   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1120                                    ett_h460_9_FinalQosMonReport, h460_9_FinalQosMonReport_sequence);
1121
1122   return offset;
1123 }
1124
1125
1126 static const per_sequence_t h460_9_InterGKQosMonReport_sequence[] = {
1127   { &hf_h460_9_mediaInfo    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_9_SEQUENCE_OF_RTCPMeasures },
1128   { &hf_h460_9_nonStandardData, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_NonStandardParameter },
1129   { &hf_h460_9_extensions   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_SEQUENCE_OF_Extension },
1130   { NULL, 0, 0, NULL }
1131 };
1132
1133 static int
1134 dissect_h460_9_InterGKQosMonReport(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1135   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1136                                    ett_h460_9_InterGKQosMonReport, h460_9_InterGKQosMonReport_sequence);
1137
1138   return offset;
1139 }
1140
1141
1142 static const value_string h460_9_QosMonitoringReportData_vals[] = {
1143   {   0, "periodic" },
1144   {   1, "final" },
1145   {   2, "interGK" },
1146   { 0, NULL }
1147 };
1148
1149 static const per_choice_t h460_9_QosMonitoringReportData_choice[] = {
1150   {   0, &hf_h460_9_periodic     , ASN1_EXTENSION_ROOT    , dissect_h460_9_PeriodicQoSMonReport },
1151   {   1, &hf_h460_9_final        , ASN1_EXTENSION_ROOT    , dissect_h460_9_FinalQosMonReport },
1152   {   2, &hf_h460_9_interGK      , ASN1_EXTENSION_ROOT    , dissect_h460_9_InterGKQosMonReport },
1153   { 0, NULL, 0, NULL }
1154 };
1155
1156 static int
1157 dissect_h460_9_QosMonitoringReportData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1158   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1159                                  ett_h460_9_QosMonitoringReportData, h460_9_QosMonitoringReportData_choice,
1160                                  NULL);
1161
1162   return offset;
1163 }
1164
1165
1166
1167 static int
1168 dissect_h460_9_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1169   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1170                                                             0U, 255U, NULL, FALSE);
1171
1172   return offset;
1173 }
1174
1175
1176 static const per_sequence_t h460_9_BurstMetrics_sequence[] = {
1177   { &hf_h460_9_gmin         , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_255 },
1178   { &hf_h460_9_burstLossDensity, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_255 },
1179   { &hf_h460_9_gapLossDensity, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_255 },
1180   { &hf_h460_9_burstDuration, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_65535 },
1181   { &hf_h460_9_gapDuration  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_65535 },
1182   { NULL, 0, 0, NULL }
1183 };
1184
1185 static int
1186 dissect_h460_9_BurstMetrics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1187   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1188                                    ett_h460_9_BurstMetrics, h460_9_BurstMetrics_sequence);
1189
1190   return offset;
1191 }
1192
1193
1194
1195 static int
1196 dissect_h460_9_INTEGER_M127_10(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1197   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1198                                                             -127, 10U, NULL, FALSE);
1199
1200   return offset;
1201 }
1202
1203
1204
1205 static int
1206 dissect_h460_9_INTEGER_M127_0(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1207   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1208                                                             -127, 0U, NULL, FALSE);
1209
1210   return offset;
1211 }
1212
1213
1214
1215 static int
1216 dissect_h460_9_INTEGER_0_127(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1217   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1218                                                             0U, 127U, NULL, FALSE);
1219
1220   return offset;
1221 }
1222
1223
1224
1225 static int
1226 dissect_h460_9_INTEGER_0_100(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1227   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1228                                                             0U, 100U, NULL, FALSE);
1229
1230   return offset;
1231 }
1232
1233
1234
1235 static int
1236 dissect_h460_9_INTEGER_10_50(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1237   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1238                                                             10U, 50U, NULL, FALSE);
1239
1240   return offset;
1241 }
1242
1243
1244
1245 static int
1246 dissect_h460_9_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1247   offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
1248
1249   return offset;
1250 }
1251
1252
1253 static const value_string h460_9_PLCtypes_vals[] = {
1254   {   0, "unspecified" },
1255   {   1, "disabled" },
1256   {   2, "enhanced" },
1257   {   3, "standard" },
1258   { 0, NULL }
1259 };
1260
1261 static const per_choice_t h460_9_PLCtypes_choice[] = {
1262   {   0, &hf_h460_9_unspecified  , ASN1_EXTENSION_ROOT    , dissect_h460_9_NULL },
1263   {   1, &hf_h460_9_disabled     , ASN1_EXTENSION_ROOT    , dissect_h460_9_NULL },
1264   {   2, &hf_h460_9_enhanced     , ASN1_EXTENSION_ROOT    , dissect_h460_9_NULL },
1265   {   3, &hf_h460_9_standard     , ASN1_EXTENSION_ROOT    , dissect_h460_9_NULL },
1266   { 0, NULL, 0, NULL }
1267 };
1268
1269 static int
1270 dissect_h460_9_PLCtypes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1271   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1272                                  ett_h460_9_PLCtypes, h460_9_PLCtypes_choice,
1273                                  NULL);
1274
1275   return offset;
1276 }
1277
1278
1279 static const value_string h460_9_JitterBufferTypes_vals[] = {
1280   {   0, "unknown" },
1281   {   1, "reserved" },
1282   {   2, "nonadaptive" },
1283   {   3, "adaptive" },
1284   { 0, NULL }
1285 };
1286
1287 static const per_choice_t h460_9_JitterBufferTypes_choice[] = {
1288   {   0, &hf_h460_9_unknown      , ASN1_EXTENSION_ROOT    , dissect_h460_9_NULL },
1289   {   1, &hf_h460_9_reserved     , ASN1_EXTENSION_ROOT    , dissect_h460_9_NULL },
1290   {   2, &hf_h460_9_nonadaptive  , ASN1_EXTENSION_ROOT    , dissect_h460_9_NULL },
1291   {   3, &hf_h460_9_adaptive     , ASN1_EXTENSION_ROOT    , dissect_h460_9_NULL },
1292   { 0, NULL, 0, NULL }
1293 };
1294
1295 static int
1296 dissect_h460_9_JitterBufferTypes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1297   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1298                                  ett_h460_9_JitterBufferTypes, h460_9_JitterBufferTypes_choice,
1299                                  NULL);
1300
1301   return offset;
1302 }
1303
1304
1305
1306 static int
1307 dissect_h460_9_INTEGER_0_15(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1308   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1309                                                             0U, 15U, NULL, FALSE);
1310
1311   return offset;
1312 }
1313
1314
1315 static const per_sequence_t h460_9_JitterBufferParms_sequence[] = {
1316   { &hf_h460_9_jitterBufferType, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_JitterBufferTypes },
1317   { &hf_h460_9_jitterBufferAdaptRate, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_15 },
1318   { &hf_h460_9_jitterBufferNominalSize, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_65535 },
1319   { &hf_h460_9_jitterBufferMaxSize, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_65535 },
1320   { &hf_h460_9_jitterBufferAbsoluteMax, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_65535 },
1321   { NULL, 0, 0, NULL }
1322 };
1323
1324 static int
1325 dissect_h460_9_JitterBufferParms(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1326   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1327                                    ett_h460_9_JitterBufferParms, h460_9_JitterBufferParms_sequence);
1328
1329   return offset;
1330 }
1331
1332
1333 static const per_sequence_t h460_9_ExtendedRTPMetrics_sequence[] = {
1334   { &hf_h460_9_networkPacketLossRate, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_255 },
1335   { &hf_h460_9_jitterBufferDiscardRate, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_255 },
1336   { &hf_h460_9_burstMetrics , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_BurstMetrics },
1337   { &hf_h460_9_rtcpRoundTripDelay, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_65535 },
1338   { &hf_h460_9_endSystemDelay, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_65535 },
1339   { &hf_h460_9_signalLevel  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_M127_10 },
1340   { &hf_h460_9_noiseLevel   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_M127_0 },
1341   { &hf_h460_9_residualEchoReturnLoss, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_127 },
1342   { &hf_h460_9_rFactor      , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_100 },
1343   { &hf_h460_9_extRFactor   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_0_100 },
1344   { &hf_h460_9_estimatedMOSLQ, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_10_50 },
1345   { &hf_h460_9_estimatedMOSCQ, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_INTEGER_10_50 },
1346   { &hf_h460_9_plcType      , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_PLCtypes },
1347   { &hf_h460_9_jitterBufferParms, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_9_JitterBufferParms },
1348   { NULL, 0, 0, NULL }
1349 };
1350
1351 static int
1352 dissect_h460_9_ExtendedRTPMetrics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1353   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1354                                    ett_h460_9_ExtendedRTPMetrics, h460_9_ExtendedRTPMetrics_sequence);
1355
1356   return offset;
1357 }
1358
1359 /*--- PDUs ---*/
1360
1361 static int dissect_h460_9_QosMonitoringReportData_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1362   int offset = 0;
1363   asn1_ctx_t asn1_ctx;
1364   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1365   offset = dissect_h460_9_QosMonitoringReportData(tvb, offset, &asn1_ctx, tree, hf_h460_9_h460_9_QosMonitoringReportData_PDU);
1366   offset += 7; offset >>= 3;
1367   return offset;
1368 }
1369 static int dissect_h460_9_ExtendedRTPMetrics_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1370   int offset = 0;
1371   asn1_ctx_t asn1_ctx;
1372   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1373   offset = dissect_h460_9_ExtendedRTPMetrics(tvb, offset, &asn1_ctx, tree, hf_h460_9_h460_9_ExtendedRTPMetrics_PDU);
1374   offset += 7; offset >>= 3;
1375   return offset;
1376 }
1377
1378
1379 /* --- Module CALL-PARTY-CATEGORY --- --- ---                                 */
1380
1381
1382
1383 static int
1384 dissect_h460_10_CallPartyCategory(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1385   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1386                                                             0U, 255U, NULL, FALSE);
1387
1388   return offset;
1389 }
1390
1391
1392
1393 static int
1394 dissect_h460_10_OriginatingLineInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1395   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1396                                                             0U, 255U, NULL, FALSE);
1397
1398   return offset;
1399 }
1400
1401
1402 static const per_sequence_t h460_10_CallPartyCategoryInfo_sequence[] = {
1403   { &hf_h460_10_callPartyCategory, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_10_CallPartyCategory },
1404   { &hf_h460_10_originatingLineInfo, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_10_OriginatingLineInfo },
1405   { NULL, 0, 0, NULL }
1406 };
1407
1408 static int
1409 dissect_h460_10_CallPartyCategoryInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1410   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1411                                    ett_h460_10_CallPartyCategoryInfo, h460_10_CallPartyCategoryInfo_sequence);
1412
1413   return offset;
1414 }
1415
1416 /*--- PDUs ---*/
1417
1418 static int dissect_h460_10_CallPartyCategoryInfo_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1419   int offset = 0;
1420   asn1_ctx_t asn1_ctx;
1421   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1422   offset = dissect_h460_10_CallPartyCategoryInfo(tvb, offset, &asn1_ctx, tree, hf_h460_10_h460_10_CallPartyCategoryInfo_PDU);
1423   offset += 7; offset >>= 3;
1424   return offset;
1425 }
1426
1427
1428 /* --- Module MLPP --- --- ---                                                */
1429
1430
1431 static const value_string h460_14_MlppPrecedence_vals[] = {
1432   {   0, "flashOveride" },
1433   {   1, "flash" },
1434   {   2, "immediate" },
1435   {   3, "priority" },
1436   {   4, "routine" },
1437   { 0, NULL }
1438 };
1439
1440
1441 static int
1442 dissect_h460_14_MlppPrecedence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1443   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1444                                      5, NULL, TRUE, 0, NULL);
1445
1446   return offset;
1447 }
1448
1449
1450 static const value_string h460_14_MlppReason_vals[] = {
1451   {   8, "preemptionNoReservation" },
1452   {   9, "preemptionReservation" },
1453   {  46, "callBlocked" },
1454   { 0, NULL }
1455 };
1456
1457 static guint32 h460_14_MlppReason_value_map[3+0] = {8, 9, 46};
1458
1459 static int
1460 dissect_h460_14_MlppReason(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1461   offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
1462                                      3, NULL, TRUE, 0, h460_14_MlppReason_value_map);
1463
1464   return offset;
1465 }
1466
1467
1468
1469 static int
1470 dissect_h460_14_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1471   offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
1472
1473   return offset;
1474 }
1475
1476
1477 static const value_string h460_14_MlppNotification_vals[] = {
1478   {   0, "preemptionPending" },
1479   {   1, "preemptionInProgress" },
1480   {   2, "preemptionEnd" },
1481   {   3, "preemptionComplete" },
1482   { 0, NULL }
1483 };
1484
1485 static const per_choice_t h460_14_MlppNotification_choice[] = {
1486   {   0, &hf_h460_14_preemptionPending, ASN1_EXTENSION_ROOT    , dissect_h460_14_NULL },
1487   {   1, &hf_h460_14_preemptionInProgress, ASN1_EXTENSION_ROOT    , dissect_h460_14_NULL },
1488   {   2, &hf_h460_14_preemptionEnd, ASN1_EXTENSION_ROOT    , dissect_h460_14_NULL },
1489   {   3, &hf_h460_14_preemptionComplete, ASN1_EXTENSION_ROOT    , dissect_h460_14_NULL },
1490   { 0, NULL, 0, NULL }
1491 };
1492
1493 static int
1494 dissect_h460_14_MlppNotification(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1495   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1496                                  ett_h460_14_MlppNotification, h460_14_MlppNotification_choice,
1497                                  NULL);
1498
1499   return offset;
1500 }
1501
1502
1503
1504 static int
1505 dissect_h460_14_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1506   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1507                                                             0U, 255U, NULL, FALSE);
1508
1509   return offset;
1510 }
1511
1512
1513 static const per_sequence_t h460_14_AlternateParty_sequence[] = {
1514   { &hf_h460_14_altID       , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_AliasAddress },
1515   { &hf_h460_14_altTimer    , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_14_INTEGER_0_255 },
1516   { NULL, 0, 0, NULL }
1517 };
1518
1519 static int
1520 dissect_h460_14_AlternateParty(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1521   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1522                                    ett_h460_14_AlternateParty, h460_14_AlternateParty_sequence);
1523
1524   return offset;
1525 }
1526
1527
1528 static const per_sequence_t h460_14_ReleaseCall_sequence[] = {
1529   { &hf_h460_14_preemptCallID, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_CallIdentifier },
1530   { &hf_h460_14_releaseReason, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_14_MlppReason },
1531   { &hf_h460_14_releaseDelay, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_14_INTEGER_0_255 },
1532   { NULL, 0, 0, NULL }
1533 };
1534
1535 static int
1536 dissect_h460_14_ReleaseCall(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1537   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1538                                    ett_h460_14_ReleaseCall, h460_14_ReleaseCall_sequence);
1539
1540   return offset;
1541 }
1542
1543
1544 static const per_sequence_t h460_14_MLPPInfo_sequence[] = {
1545   { &hf_h460_14_precedence  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_14_MlppPrecedence },
1546   { &hf_h460_14_mlppReason  , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_14_MlppReason },
1547   { &hf_h460_14_mlppNotification, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_14_MlppNotification },
1548   { &hf_h460_14_alternateParty, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_14_AlternateParty },
1549   { &hf_h460_14_releaseCall , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_14_ReleaseCall },
1550   { NULL, 0, 0, NULL }
1551 };
1552
1553 static int
1554 dissect_h460_14_MLPPInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1555   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1556                                    ett_h460_14_MLPPInfo, h460_14_MLPPInfo_sequence);
1557
1558   return offset;
1559 }
1560
1561 /*--- PDUs ---*/
1562
1563 static int dissect_h460_14_MLPPInfo_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1564   int offset = 0;
1565   asn1_ctx_t asn1_ctx;
1566   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1567   offset = dissect_h460_14_MLPPInfo(tvb, offset, &asn1_ctx, tree, hf_h460_14_h460_14_MLPPInfo_PDU);
1568   offset += 7; offset >>= 3;
1569   return offset;
1570 }
1571
1572
1573 /* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- ---                 */
1574
1575
1576 static const per_sequence_t h460_15_SEQUENCE_OF_TransportAddress_sequence_of[1] = {
1577   { &hf_h460_15_channelResumeAddress_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h225_TransportAddress },
1578 };
1579
1580 static int
1581 dissect_h460_15_SEQUENCE_OF_TransportAddress(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1582   offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
1583                                       ett_h460_15_SEQUENCE_OF_TransportAddress, h460_15_SEQUENCE_OF_TransportAddress_sequence_of);
1584
1585   return offset;
1586 }
1587
1588
1589
1590 static int
1591 dissect_h460_15_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1592   offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
1593
1594   return offset;
1595 }
1596
1597
1598
1599 static int
1600 dissect_h460_15_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1601   offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
1602
1603   return offset;
1604 }
1605
1606
1607 static const per_sequence_t h460_15_ChannelSuspendRequest_sequence[] = {
1608   { &hf_h460_15_channelResumeAddress, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_15_SEQUENCE_OF_TransportAddress },
1609   { &hf_h460_15_immediateResume, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_15_BOOLEAN },
1610   { &hf_h460_15_resetH245   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_15_NULL },
1611   { NULL, 0, 0, NULL }
1612 };
1613
1614 static int
1615 dissect_h460_15_ChannelSuspendRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1616   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1617                                    ett_h460_15_ChannelSuspendRequest, h460_15_ChannelSuspendRequest_sequence);
1618
1619   return offset;
1620 }
1621
1622
1623 static const per_sequence_t h460_15_ChannelSuspendResponse_sequence[] = {
1624   { &hf_h460_15_okToSuspend , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_15_BOOLEAN },
1625   { &hf_h460_15_channelResumeAddress, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_15_SEQUENCE_OF_TransportAddress },
1626   { NULL, 0, 0, NULL }
1627 };
1628
1629 static int
1630 dissect_h460_15_ChannelSuspendResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1631   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1632                                    ett_h460_15_ChannelSuspendResponse, h460_15_ChannelSuspendResponse_sequence);
1633
1634   return offset;
1635 }
1636
1637
1638 static const per_sequence_t h460_15_ChannelSuspendConfirm_sequence[] = {
1639   { NULL, 0, 0, NULL }
1640 };
1641
1642 static int
1643 dissect_h460_15_ChannelSuspendConfirm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1644   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1645                                    ett_h460_15_ChannelSuspendConfirm, h460_15_ChannelSuspendConfirm_sequence);
1646
1647   return offset;
1648 }
1649
1650
1651 static const per_sequence_t h460_15_ChannelSuspendCancel_sequence[] = {
1652   { NULL, 0, 0, NULL }
1653 };
1654
1655 static int
1656 dissect_h460_15_ChannelSuspendCancel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1657   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1658                                    ett_h460_15_ChannelSuspendCancel, h460_15_ChannelSuspendCancel_sequence);
1659
1660   return offset;
1661 }
1662
1663
1664
1665 static int
1666 dissect_h460_15_INTEGER_0_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1667   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1668                                                             0U, 4294967295U, NULL, FALSE);
1669
1670   return offset;
1671 }
1672
1673
1674 static const per_sequence_t h460_15_ChannelResumeRequest_sequence[] = {
1675   { &hf_h460_15_randomNumber, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_15_INTEGER_0_4294967295 },
1676   { &hf_h460_15_resetH245   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_15_NULL },
1677   { NULL, 0, 0, NULL }
1678 };
1679
1680 static int
1681 dissect_h460_15_ChannelResumeRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1682   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1683                                    ett_h460_15_ChannelResumeRequest, h460_15_ChannelResumeRequest_sequence);
1684
1685   return offset;
1686 }
1687
1688
1689 static const per_sequence_t h460_15_ChannelResumeResponse_sequence[] = {
1690   { NULL, 0, 0, NULL }
1691 };
1692
1693 static int
1694 dissect_h460_15_ChannelResumeResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1695   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1696                                    ett_h460_15_ChannelResumeResponse, h460_15_ChannelResumeResponse_sequence);
1697
1698   return offset;
1699 }
1700
1701
1702 static const value_string h460_15_T_signallingChannelData_vals[] = {
1703   {   0, "channelSuspendRequest" },
1704   {   1, "channelSuspendResponse" },
1705   {   2, "channelSuspendConfirm" },
1706   {   3, "channelSuspendCancel" },
1707   {   4, "channelResumeRequest" },
1708   {   5, "channelResumeResponse" },
1709   { 0, NULL }
1710 };
1711
1712 static const per_choice_t h460_15_T_signallingChannelData_choice[] = {
1713   {   0, &hf_h460_15_channelSuspendRequest, ASN1_EXTENSION_ROOT    , dissect_h460_15_ChannelSuspendRequest },
1714   {   1, &hf_h460_15_channelSuspendResponse, ASN1_EXTENSION_ROOT    , dissect_h460_15_ChannelSuspendResponse },
1715   {   2, &hf_h460_15_channelSuspendConfirm, ASN1_EXTENSION_ROOT    , dissect_h460_15_ChannelSuspendConfirm },
1716   {   3, &hf_h460_15_channelSuspendCancel, ASN1_EXTENSION_ROOT    , dissect_h460_15_ChannelSuspendCancel },
1717   {   4, &hf_h460_15_channelResumeRequest, ASN1_EXTENSION_ROOT    , dissect_h460_15_ChannelResumeRequest },
1718   {   5, &hf_h460_15_channelResumeResponse, ASN1_EXTENSION_ROOT    , dissect_h460_15_ChannelResumeResponse },
1719   { 0, NULL, 0, NULL }
1720 };
1721
1722 static int
1723 dissect_h460_15_T_signallingChannelData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1724   offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
1725                                  ett_h460_15_T_signallingChannelData, h460_15_T_signallingChannelData_choice,
1726                                  NULL);
1727
1728   return offset;
1729 }
1730
1731
1732 static const per_sequence_t h460_15_SignallingChannelData_sequence[] = {
1733   { &hf_h460_15_signallingChannelData, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_15_T_signallingChannelData },
1734   { NULL, 0, 0, NULL }
1735 };
1736
1737 static int
1738 dissect_h460_15_SignallingChannelData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1739   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1740                                    ett_h460_15_SignallingChannelData, h460_15_SignallingChannelData_sequence);
1741
1742   return offset;
1743 }
1744
1745 /*--- PDUs ---*/
1746
1747 static int dissect_h460_15_SignallingChannelData_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1748   int offset = 0;
1749   asn1_ctx_t asn1_ctx;
1750   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1751   offset = dissect_h460_15_SignallingChannelData(tvb, offset, &asn1_ctx, tree, hf_h460_15_h460_15_SignallingChannelData_PDU);
1752   offset += 7; offset >>= 3;
1753   return offset;
1754 }
1755
1756
1757 /* --- Module SIGNALLING-TRAVERSAL --- --- ---                                */
1758
1759
1760 static const per_sequence_t h460_18_IncomingCallIndication_sequence[] = {
1761   { &hf_h460_18_callSignallingAddress, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_TransportAddress },
1762   { &hf_h460_18_callID      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_CallIdentifier },
1763   { NULL, 0, 0, NULL }
1764 };
1765
1766 static int
1767 dissect_h460_18_IncomingCallIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1768   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1769                                    ett_h460_18_IncomingCallIndication, h460_18_IncomingCallIndication_sequence);
1770
1771   return offset;
1772 }
1773
1774
1775 static const per_sequence_t h460_18_LRQKeepAliveData_sequence[] = {
1776   { &hf_h460_18_lrqKeepAliveInterval, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h225_TimeToLive },
1777   { NULL, 0, 0, NULL }
1778 };
1779
1780 static int
1781 dissect_h460_18_LRQKeepAliveData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1782   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1783                                    ett_h460_18_LRQKeepAliveData, h460_18_LRQKeepAliveData_sequence);
1784
1785   return offset;
1786 }
1787
1788 /*--- PDUs ---*/
1789
1790 static int dissect_h460_18_IncomingCallIndication_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1791   int offset = 0;
1792   asn1_ctx_t asn1_ctx;
1793   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1794   offset = dissect_h460_18_IncomingCallIndication(tvb, offset, &asn1_ctx, tree, hf_h460_18_h460_18_IncomingCallIndication_PDU);
1795   offset += 7; offset >>= 3;
1796   return offset;
1797 }
1798 static int dissect_h460_18_LRQKeepAliveData_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1799   int offset = 0;
1800   asn1_ctx_t asn1_ctx;
1801   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1802   offset = dissect_h460_18_LRQKeepAliveData(tvb, offset, &asn1_ctx, tree, hf_h460_18_h460_18_LRQKeepAliveData_PDU);
1803   offset += 7; offset >>= 3;
1804   return offset;
1805 }
1806
1807
1808 /* --- Module MEDIA-TRAVERSAL --- --- ---                                     */
1809
1810
1811
1812 static int
1813 dissect_h460_19_INTEGER_0_4294967295(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1814   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1815                                                             0U, 4294967295U, NULL, FALSE);
1816
1817   return offset;
1818 }
1819
1820
1821
1822 static int
1823 dissect_h460_19_INTEGER_0_127(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1824   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1825                                                             0U, 127U, NULL, FALSE);
1826
1827   return offset;
1828 }
1829
1830
1831 static const per_sequence_t h460_19_TraversalParameters_sequence[] = {
1832   { &hf_h460_19_multiplexedMediaChannel, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h245_TransportAddress },
1833   { &hf_h460_19_multiplexedMediaControlChannel, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h245_TransportAddress },
1834   { &hf_h460_19_multiplexID , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_19_INTEGER_0_4294967295 },
1835   { &hf_h460_19_keepAliveChannel, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h245_TransportAddress },
1836   { &hf_h460_19_keepAlivePayloadType, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_19_INTEGER_0_127 },
1837   { &hf_h460_19_keepAliveInterval, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h225_TimeToLive },
1838   { NULL, 0, 0, NULL }
1839 };
1840
1841 static int
1842 dissect_h460_19_TraversalParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1843   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1844                                    ett_h460_19_TraversalParameters, h460_19_TraversalParameters_sequence);
1845
1846   return offset;
1847 }
1848
1849 /*--- PDUs ---*/
1850
1851 static int dissect_h460_19_TraversalParameters_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1852   int offset = 0;
1853   asn1_ctx_t asn1_ctx;
1854   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1855   offset = dissect_h460_19_TraversalParameters(tvb, offset, &asn1_ctx, tree, hf_h460_19_h460_19_TraversalParameters_PDU);
1856   offset += 7; offset >>= 3;
1857   return offset;
1858 }
1859
1860
1861 /* --- Module MESSAGE-BROADCAST --- --- ---                                   */
1862
1863
1864 static const per_sequence_t h460_21_SEQUENCE_SIZE_1_256_OF_Capability_sequence_of[1] = {
1865   { &hf_h460_21_capabilities_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h245_Capability },
1866 };
1867
1868 static int
1869 dissect_h460_21_SEQUENCE_SIZE_1_256_OF_Capability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1870   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1871                                                   ett_h460_21_SEQUENCE_SIZE_1_256_OF_Capability, h460_21_SEQUENCE_SIZE_1_256_OF_Capability_sequence_of,
1872                                                   1, 256, FALSE);
1873
1874   return offset;
1875 }
1876
1877
1878
1879 static int
1880 dissect_h460_21_INTEGER_1_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1881   offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
1882                                                             1U, 65535U, NULL, FALSE);
1883
1884   return offset;
1885 }
1886
1887
1888 static const per_sequence_t h460_21_ReceiveCapabilities_sequence[] = {
1889   { &hf_h460_21_capabilities, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_21_SEQUENCE_SIZE_1_256_OF_Capability },
1890   { &hf_h460_21_maxGroups   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_21_INTEGER_1_65535 },
1891   { NULL, 0, 0, NULL }
1892 };
1893
1894 static int
1895 dissect_h460_21_ReceiveCapabilities(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1896   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1897                                    ett_h460_21_ReceiveCapabilities, h460_21_ReceiveCapabilities_sequence);
1898
1899   return offset;
1900 }
1901
1902
1903
1904 static int
1905 dissect_h460_21_GloballyUniqueID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1906   offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
1907                                        16, 16, FALSE, NULL);
1908
1909   return offset;
1910 }
1911
1912
1913 static const per_sequence_t h460_21_TransmitCapabilities_sequence[] = {
1914   { &hf_h460_21_groupIdentifer, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h460_21_GloballyUniqueID },
1915   { &hf_h460_21_capability  , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h245_Capability },
1916   { &hf_h460_21_sourceAddress, ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_h245_UnicastAddress },
1917   { NULL, 0, 0, NULL }
1918 };
1919
1920 static int
1921 dissect_h460_21_TransmitCapabilities(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1922   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1923                                    ett_h460_21_TransmitCapabilities, h460_21_TransmitCapabilities_sequence);
1924
1925   return offset;
1926 }
1927
1928
1929 static const per_sequence_t h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities_sequence_of[1] = {
1930   { &hf_h460_21_transmitCapabilities_item, ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_h460_21_TransmitCapabilities },
1931 };
1932
1933 static int
1934 dissect_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1935   offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1936                                                   ett_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities, h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities_sequence_of,
1937                                                   1, 256, FALSE);
1938
1939   return offset;
1940 }
1941
1942
1943 static const per_sequence_t h460_21_CapabilityAdvertisement_sequence[] = {
1944   { &hf_h460_21_receiveCapabilities, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_21_ReceiveCapabilities },
1945   { &hf_h460_21_transmitCapabilities, ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities },
1946   { NULL, 0, 0, NULL }
1947 };
1948
1949 static int
1950 dissect_h460_21_CapabilityAdvertisement(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1951   offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
1952                                    ett_h460_21_CapabilityAdvertisement, h460_21_CapabilityAdvertisement_sequence);
1953
1954   return offset;
1955 }
1956
1957 /*--- PDUs ---*/
1958
1959 static int dissect_h460_21_CapabilityAdvertisement_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1960   int offset = 0;
1961   asn1_ctx_t asn1_ctx;
1962   asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, pinfo);
1963   offset = dissect_h460_21_CapabilityAdvertisement(tvb, offset, &asn1_ctx, tree, hf_h460_21_h460_21_CapabilityAdvertisement_PDU);
1964   offset += 7; offset >>= 3;
1965   return offset;
1966 }
1967
1968
1969 /*--- End of included file: packet-h460-fn.c ---*/
1970 #line 59 "packet-h460-template.c"
1971
1972 static int 
1973 dissect_ies(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1974   int offset = 0;
1975
1976   if (q931_ie_handle) {
1977     call_dissector(q931_ie_handle, tvb, pinfo, tree);
1978     offset += tvb_length_remaining(tvb, offset);
1979   }
1980   return offset;
1981 }
1982
1983 static int 
1984 dissect_ras(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1985   int offset = 0;
1986
1987   if (h225_ras_handle) {
1988     call_dissector(h225_ras_handle, tvb, pinfo, tree);
1989     offset += tvb_length_remaining(tvb, offset);
1990   }
1991   return offset;
1992 }
1993
1994 typedef struct _h460_feature_t {
1995   guint32 opt;
1996   const gchar *id;
1997   const gchar *name;
1998   new_dissector_t content_pdu;
1999   /*---*/
2000   const gchar *key_gd;
2001   const gchar *key_fd;
2002   const gchar *key_gm;
2003   const gchar *key_gi;
2004   dissector_handle_t content_hnd;
2005 } h460_feature_t;
2006
2007 /* Fill in the items after content_pdu */
2008 #define FFILL   NULL, NULL, NULL, NULL, NULL
2009
2010 /* options */
2011 #define GD 0x01  /* present in H.225 GenericData */
2012 #define FD 0x02  /* present in H.225 FeatureDescriptor */
2013 #define GM 0x04  /* present in H.245 GenericMessage */
2014 #define GI 0x08  /* present in H.245 GenericInformation */
2015
2016 static h460_feature_t h460_feature_tab[] = {
2017   /* H.460.3 */
2018   { GD|FD,  "2",   "Number Portability", NULL, FFILL },
2019   { GD|FD,  "2/1", "NumberPortabilityData", dissect_h460_2_NumberPortabilityInfo_PDU, FFILL },
2020   /* H.460.3 */
2021   { GD|FD,  "3",   "Circuit Status", NULL, FFILL },
2022   { GD|FD,  "3/1", "Circuit Status Map", dissect_h460_3_CircuitStatus_PDU, FFILL },
2023   /* H.460.4 */
2024   { GD|FD,  "4",   "CallPriorityDesignation", NULL, FFILL },
2025   { GD|FD,  "4/1", "CallPriorityRequest", dissect_h460_4_CallPriorityInfo_PDU, FFILL },
2026   { GD|FD,  "4/2", "CallPriorityConfirm", dissect_h460_4_CallPriorityInfo_PDU, FFILL },
2027   { GD|FD,  "4/3", "Country/InternationalNetworkCallOriginationRequest", dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU, FFILL },
2028   { GD|FD,  "4/4", "Country/InternationalNetworkCallOriginationConfirm", dissect_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU, FFILL },
2029   /* H.460.5 */
2030   { GD|FD,  "5",   "DuplicateIEs", NULL, FFILL },
2031   { GD|FD,  "5/1", "IEsString", dissect_ies, FFILL },
2032   /* H.460.6 */
2033   { GD|FD,  "6",   "Extended Fast Connect", NULL, FFILL },
2034   { GD|FD,  "6/1", "EFC Proposal", NULL, FFILL },
2035   { GD|FD,  "6/2", "EFC Close All Media Channels", NULL, FFILL },
2036   { GD|FD,  "6/3", "EFC Request New Proposals", NULL, FFILL },
2037   { GD|FD,  "6/4", "EFC Require Symmetric Operation", NULL, FFILL },
2038   /* H.460.7 */
2039   { GD|FD,  "7",   "Digit Maps", NULL, FFILL },
2040   {    FD,  "7/1", "Digit Maps Length", NULL, FFILL },
2041   {    FD,  "7/2", "Digit Map Length for Overlapped Sending", NULL, FFILL },
2042   {    FD,  "7/3", "HTTP Digit Maps Download Capability", NULL, FFILL },
2043   { GD   ,  "7/1", "Start Timer", NULL, FFILL },
2044   { GD   ,  "7/2", "Short Timer", NULL, FFILL },
2045   { GD   ,  "7/3", "Long Timer", NULL, FFILL },
2046   { GD   ,  "7/4", "Digit Map String", NULL, FFILL },
2047   { GD   ,  "7/5",   "ToN Associated Digit Map", NULL, FFILL },
2048   { GD   ,  "7/5/1", "Type of Number", NULL, FFILL },
2049   { GD   ,  "7/5/2", "Digit Map Strings for ToN", NULL, FFILL },
2050   { GD   ,  "7/6", "Digit Map URL", NULL, FFILL },
2051   /* H.460.8 */
2052   { GD|FD,  "8",   "Querying for Alternate Routes", NULL, FFILL },
2053   { GD|FD,  "8/1", "Query Count", NULL, FFILL },
2054   { GD|FD,  "8/2", "Call Termination Cause", NULL, FFILL },
2055   /* H.460.9 */
2056   { GD|FD,  "9",   "QoS-monitoring Reporting", NULL, FFILL },
2057   { GD|FD,  "9/1", "qosMonitoringFinalOnly", NULL, FFILL },
2058   { GD|FD,  "9/2", "qosMonitoringReportData", dissect_h460_9_QosMonitoringReportData_PDU, FFILL },
2059   { GD|FD,  "9/3", "qosMonitoringExtendedRTPMetrics", dissect_h460_9_ExtendedRTPMetrics_PDU, FFILL },
2060   /* H.460.10 */
2061   { GD|FD, "10",   "Call Party Category", NULL, FFILL },
2062   { GD|FD, "10/1", "Call party category info", dissect_h460_10_CallPartyCategoryInfo_PDU, FFILL },
2063   /* H.460.11 */
2064   { GD|FD, "11",   "Delayed Call Establishment", NULL, FFILL },
2065   { GD|FD, "11/1", "Delay Point Indicator", NULL, FFILL },
2066   { GD|FD, "11/2", "Implicit DCE Release", NULL, FFILL },
2067   { GD|FD, "11/3", "Delay Point Reached", NULL, FFILL },
2068   { GD|FD, "11/4", "DCE Release", NULL, FFILL },
2069   /* H.460.12 */
2070   { GD|FD, "12",   "Glare Control Indicator", NULL, FFILL },
2071   { GD|FD, "12/1", "Glare Control Indicator Parameter", NULL, FFILL },
2072   /* H.460.13 */
2073   { GD|FD, "13",   "Called User Release Control", NULL, FFILL },
2074   { GD|FD, "13/1", "Called User Release Control", NULL, FFILL },
2075   /* H.460.14 */
2076   { GD|FD, "14",   "Multi-Level Precedence and Preemption", NULL, FFILL },
2077   { GD|FD, "14/1", "MLPP Information", dissect_h460_14_MLPPInfo_PDU, FFILL },
2078   /* H.460.15 */
2079   { GD|FD, "15",   "Call signalling transport channel suspension and redirection", NULL, FFILL },
2080   { GD|FD, "15/1", "Signalling channel suspend and redirect", dissect_h460_15_SignallingChannelData_PDU, FFILL },
2081   /* H.460.16 */
2082   { GD|FD, "16",   "Multiple-message Release Sequence", NULL, FFILL },
2083   { GD|FD, "16/1", "MMRS use required", NULL, FFILL },
2084   { GD|FD, "16/2", "MMRS procedure", NULL, FFILL },
2085   { GD|FD, "16/3", "MMRS additional IEs", dissect_ies, FFILL },
2086   /* H.460.17 */
2087   { GD|FD, "17",   "RAS over H.225.0", NULL, FFILL },
2088   { GD|FD, "17/1", "RAS message", dissect_ras, FFILL },
2089   /* H.460.18 */
2090   { GD|FD|GM, "18",   "Signalling Traversal", NULL, FFILL },
2091   { GD|FD   , "18/1", "IncomingCallIndication", dissect_h460_18_IncomingCallIndication_PDU, FFILL },
2092   { GD|FD   , "18/2", "LRQKeepAliveData", dissect_h460_18_LRQKeepAliveData_PDU, FFILL },
2093   {       GM, "18-1",   "connectionCorrelation", NULL, FFILL },
2094   {       GM, "18-1/1", "callIdentifier", NULL, FFILL },
2095   {       GM, "18-1/2", "answerCall", NULL, FFILL },
2096   /* H.460.19 */
2097   { GD|FD|GI, "19", "mediaNATFWTraversal", NULL, FFILL },
2098   { GD|FD   , "19/1", "supportTransmitMultiplexedMedia", NULL, FFILL },
2099   { GD|FD   , "19/2", "mediaTraversalServer", NULL, FFILL },
2100   {       GI, "19/1", "Traversal Parameters", dissect_h460_19_TraversalParameters_PDU, FFILL },
2101   /* H.460.20 */
2102   { GD|FD, "20",   "LocationSourceAddress", NULL, FFILL },
2103   { GD|FD, "20/1", "LocationSourceAddress", dissect_h225_ExtendedAliasAddress_PDU, FFILL },
2104   /* H.460.21 */
2105   { GD|FD, "21",   "Message Broadcast", NULL, FFILL },
2106   { GD|FD, "21/1", "MessageBroadcastParameter", dissect_h460_21_CapabilityAdvertisement_PDU, FFILL },
2107   /* H.460.22 */
2108   { GD|FD, "22",     "securityProtocolNegotiation", NULL, FFILL },
2109   { GD|FD, "22/1",   "tlsSecurityProtocol", NULL, FFILL },
2110   { GD|FD, "22/1/1", "priority", NULL, FFILL },
2111   { GD|FD, "22/1/2", "connectionAddress", NULL, FFILL },
2112   { GD|FD, "22/2",   "ipsecSecurityProtocol", NULL, FFILL },
2113   { GD|FD, "22/2/1", "priority", NULL, FFILL },
2114   { 0, NULL, NULL, NULL, FFILL },
2115 };                                 
2116
2117 static h460_feature_t *find_ftr(const gchar *key) {
2118   h460_feature_t *ftr = NULL;
2119   h460_feature_t *f;
2120
2121   for (f=h460_feature_tab; f->id; f++) {
2122     if (f->key_gd && !strcmp(key, f->key_gd)) { ftr = f; break; }
2123     if (f->key_fd && !strcmp(key, f->key_fd)) { ftr = f; break; }
2124     if (f->key_gm && !strcmp(key, f->key_gm)) { ftr = f; break; }
2125     if (f->key_gi && !strcmp(key, f->key_gi)) { ftr = f; break; }
2126   }
2127   return ftr;
2128 }
2129
2130 /*--- dissect_h460_name -------------------------------------------*/
2131 static int
2132 dissect_h460_name(tvbuff_t *tvb _U_, packet_info *pinfo, proto_tree *tree) {
2133   int offset = 0;
2134   asn1_ctx_t *actx;
2135   h460_feature_t *ftr;
2136
2137   actx = get_asn1_ctx(pinfo->private_data);
2138   DISSECTOR_ASSERT(actx);
2139   if (tree) {
2140     /* DEBUG */ /*proto_tree_add_text(tree, tvb, 0, 0, "*** DEBUG dissect_h460_name: %s", pinfo->match_string);*/
2141     ftr = find_ftr(pinfo->match_string);
2142     /* DEBUG */ /*proto_tree_add_text(tree, tvb, 0, 0, "*** DEBUG dissect_h460_name: ftr %s", (ftr)?ftr->name:"-none-");*/
2143     if (ftr) {
2144       proto_item_append_text(actx->created_item, " - %s", ftr->name);
2145       proto_item_append_text(proto_item_get_parent(proto_tree_get_parent(tree)), ": %s", ftr->name);
2146     } else {
2147       proto_item_append_text(actx->created_item, " - unknown(%s)", pinfo->match_string);
2148     }
2149   }
2150
2151   return offset;
2152 }
2153
2154 /*--- proto_register_h460 ----------------------------------------------*/
2155 void proto_register_h460(void) {
2156   h460_feature_t *ftr;
2157
2158   /* List of fields */
2159   static hf_register_info hf[] = {
2160
2161 /*--- Included file: packet-h460-hfarr.c ---*/
2162 #line 1 "packet-h460-hfarr.c"
2163
2164 /* --- Module NUMBER-PORTABILITY --- --- ---                                  */
2165
2166     { &hf_h460_2_h460_2_NumberPortabilityInfo_PDU,
2167       { "NumberPortabilityInfo", "h460.2.NumberPortabilityInfo",
2168         FT_UINT32, BASE_DEC, VALS(h460_2_NumberPortabilityInfo_vals), 0,
2169         "h460_2.NumberPortabilityInfo", HFILL }},
2170     { &hf_h460_2_numberPortabilityRejectReason,
2171       { "numberPortabilityRejectReason", "h460.2.numberPortabilityRejectReason",
2172         FT_UINT32, BASE_DEC, VALS(h460_2_NumberPortabilityRejectReason_vals), 0,
2173         "h460_2.NumberPortabilityRejectReason", HFILL }},
2174     { &hf_h460_2_nUMBERPORTABILITYDATA,
2175       { "nUMBERPORTABILITYDATA", "h460.2.nUMBERPORTABILITYDATA",
2176         FT_NONE, BASE_NONE, NULL, 0,
2177         "h460_2.T_nUMBERPORTABILITYDATA", HFILL }},
2178     { &hf_h460_2_addressTranslated,
2179       { "addressTranslated", "h460.2.addressTranslated",
2180         FT_NONE, BASE_NONE, NULL, 0,
2181         "h460_2.NULL", HFILL }},
2182     { &hf_h460_2_portedAddress,
2183       { "portedAddress", "h460.2.portedAddress",
2184         FT_NONE, BASE_NONE, NULL, 0,
2185         "h460_2.PortabilityAddress", HFILL }},
2186     { &hf_h460_2_routingAddress,
2187       { "routingAddress", "h460.2.routingAddress",
2188         FT_NONE, BASE_NONE, NULL, 0,
2189         "h460_2.PortabilityAddress", HFILL }},
2190     { &hf_h460_2_regionalParams,
2191       { "regionalParams", "h460.2.regionalParams",
2192         FT_NONE, BASE_NONE, NULL, 0,
2193         "h460_2.RegionalParameters", HFILL }},
2194     { &hf_h460_2_unspecified,
2195       { "unspecified", "h460.2.unspecified",
2196         FT_NONE, BASE_NONE, NULL, 0,
2197         "h460_2.NULL", HFILL }},
2198     { &hf_h460_2_qorPortedNumber,
2199       { "qorPortedNumber", "h460.2.qorPortedNumber",
2200         FT_NONE, BASE_NONE, NULL, 0,
2201         "h460_2.NULL", HFILL }},
2202     { &hf_h460_2_aliasAddress,
2203       { "aliasAddress", "h460.2.aliasAddress",
2204         FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0,
2205         "h225.AliasAddress", HFILL }},
2206     { &hf_h460_2_typeOfAddress,
2207       { "typeOfAddress", "h460.2.typeOfAddress",
2208         FT_UINT32, BASE_DEC, VALS(h460_2_NumberPortabilityTypeOfNumber_vals), 0,
2209         "h460_2.NumberPortabilityTypeOfNumber", HFILL }},
2210     { &hf_h460_2_publicTypeOfNumber,
2211       { "publicTypeOfNumber", "h460.2.publicTypeOfNumber",
2212         FT_UINT32, BASE_DEC, VALS(h225_PublicTypeOfNumber_vals), 0,
2213         "h225.PublicTypeOfNumber", HFILL }},
2214     { &hf_h460_2_privateTypeOfNumber,
2215       { "privateTypeOfNumber", "h460.2.privateTypeOfNumber",
2216         FT_UINT32, BASE_DEC, VALS(h225_PrivateTypeOfNumber_vals), 0,
2217         "h225.PrivateTypeOfNumber", HFILL }},
2218     { &hf_h460_2_portabilityTypeOfNumber,
2219       { "portabilityTypeOfNumber", "h460.2.portabilityTypeOfNumber",
2220         FT_UINT32, BASE_DEC, VALS(h460_2_PortabilityTypeOfNumber_vals), 0,
2221         "h460_2.PortabilityTypeOfNumber", HFILL }},
2222     { &hf_h460_2_portedNumber,
2223       { "portedNumber", "h460.2.portedNumber",
2224         FT_NONE, BASE_NONE, NULL, 0,
2225         "h460_2.NULL", HFILL }},
2226     { &hf_h460_2_routingNumber,
2227       { "routingNumber", "h460.2.routingNumber",
2228         FT_NONE, BASE_NONE, NULL, 0,
2229         "h460_2.NULL", HFILL }},
2230     { &hf_h460_2_concatenatedNumber,
2231       { "concatenatedNumber", "h460.2.concatenatedNumber",
2232         FT_NONE, BASE_NONE, NULL, 0,
2233         "h460_2.NULL", HFILL }},
2234     { &hf_h460_2_t35CountryCode,
2235       { "t35CountryCode", "h460.2.t35CountryCode",
2236         FT_UINT32, BASE_DEC, NULL, 0,
2237         "h460_2.INTEGER_0_255", HFILL }},
2238     { &hf_h460_2_t35Extension,
2239       { "t35Extension", "h460.2.t35Extension",
2240         FT_UINT32, BASE_DEC, NULL, 0,
2241         "h460_2.INTEGER_0_255", HFILL }},
2242     { &hf_h460_2_variantIdentifier,
2243       { "variantIdentifier", "h460.2.variantIdentifier",
2244         FT_UINT32, BASE_DEC, NULL, 0,
2245         "h460_2.INTEGER_1_255", HFILL }},
2246     { &hf_h460_2_regionalData,
2247       { "regionalData", "h460.2.regionalData",
2248         FT_BYTES, BASE_NONE, NULL, 0,
2249         "h460_2.OCTET_STRING", HFILL }},
2250
2251 /* --- Module CIRCUIT-STATUS-MAP --- --- ---                                  */
2252
2253     { &hf_h460_3_h460_3_CircuitStatus_PDU,
2254       { "CircuitStatus", "h460.3.CircuitStatus",
2255         FT_NONE, BASE_NONE, NULL, 0,
2256         "h460_3.CircuitStatus", HFILL }},
2257     { &hf_h460_3_circuitStatusMap,
2258       { "circuitStatusMap", "h460.3.circuitStatusMap",
2259         FT_UINT32, BASE_DEC, NULL, 0,
2260         "h460_3.SEQUENCE_OF_CircuitStatusMap", HFILL }},
2261     { &hf_h460_3_circuitStatusMap_item,
2262       { "CircuitStatusMap", "h460.3.CircuitStatusMap",
2263         FT_NONE, BASE_NONE, NULL, 0,
2264         "h460_3.CircuitStatusMap", HFILL }},
2265     { &hf_h460_3_statusType,
2266       { "statusType", "h460.3.statusType",
2267         FT_UINT32, BASE_DEC, VALS(h460_3_CircuitStatusType_vals), 0,
2268         "h460_3.CircuitStatusType", HFILL }},
2269     { &hf_h460_3_baseCircuitID,
2270       { "baseCircuitID", "h460.3.baseCircuitID",
2271         FT_NONE, BASE_NONE, NULL, 0,
2272         "h225.CircuitIdentifier", HFILL }},
2273     { &hf_h460_3_range,
2274       { "range", "h460.3.range",
2275         FT_UINT32, BASE_DEC, NULL, 0,
2276         "h460_3.INTEGER_0_4095", HFILL }},
2277     { &hf_h460_3_status,
2278       { "status", "h460.3.status",
2279         FT_BYTES, BASE_NONE, NULL, 0,
2280         "h460_3.OCTET_STRING", HFILL }},
2281     { &hf_h460_3_serviceStatus,
2282       { "serviceStatus", "h460.3.serviceStatus",
2283         FT_NONE, BASE_NONE, NULL, 0,
2284         "h460_3.NULL", HFILL }},
2285     { &hf_h460_3_busyStatus,
2286       { "busyStatus", "h460.3.busyStatus",
2287         FT_NONE, BASE_NONE, NULL, 0,
2288         "h460_3.NULL", HFILL }},
2289
2290 /* --- Module CALL-PRIORITY --- --- ---                                       */
2291
2292     { &hf_h460_4_h460_4_CallPriorityInfo_PDU,
2293       { "CallPriorityInfo", "h460.4.CallPriorityInfo",
2294         FT_NONE, BASE_NONE, NULL, 0,
2295         "h460_4.CallPriorityInfo", HFILL }},
2296     { &hf_h460_4_h460_4_CountryInternationalNetworkCallOriginationIdentification_PDU,
2297       { "CountryInternationalNetworkCallOriginationIdentification", "h460.4.CountryInternationalNetworkCallOriginationIdentification",
2298         FT_NONE, BASE_NONE, NULL, 0,
2299         "h460_4.CountryInternationalNetworkCallOriginationIdentification", HFILL }},
2300     { &hf_h460_4_priorityValue,
2301       { "priorityValue", "h460.4.priorityValue",
2302         FT_UINT32, BASE_DEC, VALS(h460_4_T_priorityValue_vals), 0,
2303         "h460_4.T_priorityValue", HFILL }},
2304     { &hf_h460_4_emergencyAuthorized,
2305       { "emergencyAuthorized", "h460.4.emergencyAuthorized",
2306         FT_NONE, BASE_NONE, NULL, 0,
2307         "h460_4.NULL", HFILL }},
2308     { &hf_h460_4_emergencyPublic,
2309       { "emergencyPublic", "h460.4.emergencyPublic",
2310         FT_NONE, BASE_NONE, NULL, 0,
2311         "h460_4.NULL", HFILL }},
2312     { &hf_h460_4_high,
2313       { "high", "h460.4.high",
2314         FT_NONE, BASE_NONE, NULL, 0,
2315         "h460_4.NULL", HFILL }},
2316     { &hf_h460_4_normal,
2317       { "normal", "h460.4.normal",
2318         FT_NONE, BASE_NONE, NULL, 0,
2319         "h460_4.NULL", HFILL }},
2320     { &hf_h460_4_priorityExtension,
2321       { "priorityExtension", "h460.4.priorityExtension",
2322         FT_UINT32, BASE_DEC, NULL, 0,
2323         "h460_4.INTEGER_0_255", HFILL }},
2324     { &hf_h460_4_tokens,
2325       { "tokens", "h460.4.tokens",
2326         FT_UINT32, BASE_DEC, NULL, 0,
2327         "h460_4.SEQUENCE_OF_ClearToken", HFILL }},
2328     { &hf_h460_4_tokens_item,
2329       { "ClearToken", "h460.4.ClearToken",
2330         FT_NONE, BASE_NONE, NULL, 0,
2331         "h235.ClearToken", HFILL }},
2332     { &hf_h460_4_cryptoTokens,
2333       { "cryptoTokens", "h460.4.cryptoTokens",
2334         FT_UINT32, BASE_DEC, NULL, 0,
2335         "h460_4.SEQUENCE_OF_CryptoToken", HFILL }},
2336     { &hf_h460_4_cryptoTokens_item,
2337       { "CryptoToken", "h460.4.CryptoToken",
2338         FT_UINT32, BASE_DEC, VALS(h235_CryptoToken_vals), 0,
2339         "h235.CryptoToken", HFILL }},
2340     { &hf_h460_4_rejectReason,
2341       { "rejectReason", "h460.4.rejectReason",
2342         FT_UINT32, BASE_DEC, VALS(h460_4_T_rejectReason_vals), 0,
2343         "h460_4.T_rejectReason", HFILL }},
2344     { &hf_h460_4_priorityUnavailable,
2345       { "priorityUnavailable", "h460.4.priorityUnavailable",
2346         FT_NONE, BASE_NONE, NULL, 0,
2347         "h460_4.NULL", HFILL }},
2348     { &hf_h460_4_priorityUnauthorized,
2349       { "priorityUnauthorized", "h460.4.priorityUnauthorized",
2350         FT_NONE, BASE_NONE, NULL, 0,
2351         "h460_4.NULL", HFILL }},
2352     { &hf_h460_4_priorityValueUnknown,
2353       { "priorityValueUnknown", "h460.4.priorityValueUnknown",
2354         FT_NONE, BASE_NONE, NULL, 0,
2355         "h460_4.NULL", HFILL }},
2356     { &hf_h460_4_numberingPlan,
2357       { "numberingPlan", "h460.4.numberingPlan",
2358         FT_UINT32, BASE_DEC, VALS(h460_4_T_numberingPlan_vals), 0,
2359         "h460_4.T_numberingPlan", HFILL }},
2360     { &hf_h460_4_x121,
2361       { "x121", "h460.4.x121",
2362         FT_NONE, BASE_NONE, NULL, 0,
2363         "h460_4.T_x121", HFILL }},
2364     { &hf_h460_4_x121CountryCode,
2365       { "countryCode", "h460.4.countryCode",
2366         FT_STRING, BASE_NONE, NULL, 0,
2367         "h460_4.X121CountryCode", HFILL }},
2368     { &hf_h460_4_e164,
2369       { "e164", "h460.4.e164",
2370         FT_NONE, BASE_NONE, NULL, 0,
2371         "h460_4.T_e164", HFILL }},
2372     { &hf_h460_4_e164CountryCode,
2373       { "countryCode", "h460.4.countryCode",
2374         FT_STRING, BASE_NONE, NULL, 0,
2375         "h460_4.E164CountryCode", HFILL }},
2376     { &hf_h460_4_identificationCode,
2377       { "identificationCode", "h460.4.identificationCode",
2378         FT_STRING, BASE_NONE, NULL, 0,
2379         "h460_4.T_identificationCode", HFILL }},
2380
2381 /* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */
2382
2383     { &hf_h460_9_h460_9_QosMonitoringReportData_PDU,
2384       { "QosMonitoringReportData", "h460.9.QosMonitoringReportData",
2385         FT_UINT32, BASE_DEC, VALS(h460_9_QosMonitoringReportData_vals), 0,
2386         "h460_9.QosMonitoringReportData", HFILL }},
2387     { &hf_h460_9_h460_9_ExtendedRTPMetrics_PDU,
2388       { "ExtendedRTPMetrics", "h460.9.ExtendedRTPMetrics",
2389         FT_NONE, BASE_NONE, NULL, 0,
2390         "h460_9.ExtendedRTPMetrics", HFILL }},
2391     { &hf_h460_9_extensionId,
2392       { "extensionId", "h460.9.extensionId",
2393         FT_UINT32, BASE_DEC, VALS(h225_GenericIdentifier_vals), 0,
2394         "h225.GenericIdentifier", HFILL }},
2395     { &hf_h460_9_extensionContent,
2396       { "extensionContent", "h460.9.extensionContent",
2397         FT_BYTES, BASE_NONE, NULL, 0,
2398         "h460_9.OCTET_STRING", HFILL }},
2399     { &hf_h460_9_rtpAddress,
2400       { "rtpAddress", "h460.9.rtpAddress",
2401         FT_NONE, BASE_NONE, NULL, 0,
2402         "h225.TransportChannelInfo", HFILL }},
2403     { &hf_h460_9_rtcpAddress,
2404       { "rtcpAddress", "h460.9.rtcpAddress",
2405         FT_NONE, BASE_NONE, NULL, 0,
2406         "h225.TransportChannelInfo", HFILL }},
2407     { &hf_h460_9_sessionId,
2408       { "sessionId", "h460.9.sessionId",
2409         FT_UINT32, BASE_DEC, NULL, 0,
2410         "h460_9.INTEGER_1_255", HFILL }},
2411     { &hf_h460_9_nonStandardData,
2412       { "nonStandardData", "h460.9.nonStandardData",
2413         FT_NONE, BASE_NONE, NULL, 0,
2414         "h225.NonStandardParameter", HFILL }},
2415     { &hf_h460_9_mediaSenderMeasures,
2416       { "mediaSenderMeasures", "h460.9.mediaSenderMeasures",
2417         FT_NONE, BASE_NONE, NULL, 0,
2418         "h460_9.T_mediaSenderMeasures", HFILL }},
2419     { &hf_h460_9_worstEstimatedEnd2EndDelay,
2420       { "worstEstimatedEnd2EndDelay", "h460.9.worstEstimatedEnd2EndDelay",
2421         FT_UINT32, BASE_DEC, NULL, 0,
2422         "h460_9.EstimatedEnd2EndDelay", HFILL }},
2423     { &hf_h460_9_meanEstimatedEnd2EndDelay,
2424       { "meanEstimatedEnd2EndDelay", "h460.9.meanEstimatedEnd2EndDelay",
2425         FT_UINT32, BASE_DEC, NULL, 0,
2426         "h460_9.EstimatedEnd2EndDelay", HFILL }},
2427     { &hf_h460_9_mediaReceiverMeasures,
2428       { "mediaReceiverMeasures", "h460.9.mediaReceiverMeasures",
2429         FT_NONE, BASE_NONE, NULL, 0,
2430         "h460_9.T_mediaReceiverMeasures", HFILL }},
2431     { &hf_h460_9_cumulativeNumberOfPacketsLost,
2432       { "cumulativeNumberOfPacketsLost", "h460.9.cumulativeNumberOfPacketsLost",
2433         FT_UINT32, BASE_DEC, NULL, 0,
2434         "h460_9.INTEGER_0_4294967295", HFILL }},
2435     { &hf_h460_9_packetLostRate,
2436       { "packetLostRate", "h460.9.packetLostRate",
2437         FT_UINT32, BASE_DEC, NULL, 0,
2438         "h460_9.INTEGER_0_65535", HFILL }},
2439     { &hf_h460_9_worstJitter,
2440       { "worstJitter", "h460.9.worstJitter",
2441         FT_UINT32, BASE_DEC, NULL, 0,
2442         "h460_9.CalculatedJitter", HFILL }},
2443     { &hf_h460_9_estimatedThroughput,
2444       { "estimatedThroughput", "h460.9.estimatedThroughput",
2445         FT_UINT32, BASE_DEC, NULL, 0,
2446         "h225.BandWidth", HFILL }},
2447     { &hf_h460_9_fractionLostRate,
2448       { "fractionLostRate", "h460.9.fractionLostRate",
2449         FT_UINT32, BASE_DEC, NULL, 0,
2450         "h460_9.INTEGER_0_65535", HFILL }},
2451     { &hf_h460_9_meanJitter,
2452       { "meanJitter", "h460.9.meanJitter",
2453         FT_UINT32, BASE_DEC, NULL, 0,
2454         "h460_9.CalculatedJitter", HFILL }},
2455     { &hf_h460_9_extensions,
2456       { "extensions", "h460.9.extensions",
2457         FT_UINT32, BASE_DEC, NULL, 0,
2458         "h460_9.SEQUENCE_OF_Extension", HFILL }},
2459     { &hf_h460_9_extensions_item,
2460       { "Extension", "h460.9.Extension",
2461         FT_NONE, BASE_NONE, NULL, 0,
2462         "h460_9.Extension", HFILL }},
2463     { &hf_h460_9_callReferenceValue,
2464       { "callReferenceValue", "h460.9.callReferenceValue",
2465         FT_UINT32, BASE_DEC, NULL, 0,
2466         "h225.CallReferenceValue", HFILL }},
2467     { &hf_h460_9_conferenceID,
2468       { "conferenceID", "h460.9.conferenceID",
2469         FT_GUID, BASE_NONE, NULL, 0,
2470         "h225.ConferenceIdentifier", HFILL }},
2471     { &hf_h460_9_callIdentifier,
2472       { "callIdentifier", "h460.9.callIdentifier",
2473         FT_NONE, BASE_NONE, NULL, 0,
2474         "h225.CallIdentifier", HFILL }},
2475     { &hf_h460_9_mediaChannelsQoS,
2476       { "mediaChannelsQoS", "h460.9.mediaChannelsQoS",
2477         FT_UINT32, BASE_DEC, NULL, 0,
2478         "h460_9.SEQUENCE_OF_RTCPMeasures", HFILL }},
2479     { &hf_h460_9_mediaChannelsQoS_item,
2480       { "RTCPMeasures", "h460.9.RTCPMeasures",
2481         FT_NONE, BASE_NONE, NULL, 0,
2482         "h460_9.RTCPMeasures", HFILL }},
2483     { &hf_h460_9_periodic,
2484       { "periodic", "h460.9.periodic",
2485         FT_NONE, BASE_NONE, NULL, 0,
2486         "h460_9.PeriodicQoSMonReport", HFILL }},
2487     { &hf_h460_9_final,
2488       { "final", "h460.9.final",
2489         FT_NONE, BASE_NONE, NULL, 0,
2490         "h460_9.FinalQosMonReport", HFILL }},
2491     { &hf_h460_9_interGK,
2492       { "interGK", "h460.9.interGK",
2493         FT_NONE, BASE_NONE, NULL, 0,
2494         "h460_9.InterGKQosMonReport", HFILL }},
2495     { &hf_h460_9_perCallInfo,
2496       { "perCallInfo", "h460.9.perCallInfo",
2497         FT_UINT32, BASE_DEC, NULL, 0,
2498         "h460_9.SEQUENCE_OF_PerCallQoSReport", HFILL }},
2499     { &hf_h460_9_perCallInfo_item,
2500       { "PerCallQoSReport", "h460.9.PerCallQoSReport",
2501         FT_NONE, BASE_NONE, NULL, 0,
2502         "h460_9.PerCallQoSReport", HFILL }},
2503     { &hf_h460_9_mediaInfo,
2504       { "mediaInfo", "h460.9.mediaInfo",
2505         FT_UINT32, BASE_DEC, NULL, 0,
2506         "h460_9.SEQUENCE_OF_RTCPMeasures", HFILL }},
2507     { &hf_h460_9_mediaInfo_item,
2508       { "RTCPMeasures", "h460.9.RTCPMeasures",
2509         FT_NONE, BASE_NONE, NULL, 0,
2510         "h460_9.RTCPMeasures", HFILL }},
2511     { &hf_h460_9_networkPacketLossRate,
2512       { "networkPacketLossRate", "h460.9.networkPacketLossRate",
2513         FT_UINT32, BASE_DEC, NULL, 0,
2514         "h460_9.INTEGER_0_255", HFILL }},
2515     { &hf_h460_9_jitterBufferDiscardRate,
2516       { "jitterBufferDiscardRate", "h460.9.jitterBufferDiscardRate",
2517         FT_UINT32, BASE_DEC, NULL, 0,
2518         "h460_9.INTEGER_0_255", HFILL }},
2519     { &hf_h460_9_burstMetrics,
2520       { "burstMetrics", "h460.9.burstMetrics",
2521         FT_NONE, BASE_NONE, NULL, 0,
2522         "h460_9.BurstMetrics", HFILL }},
2523     { &hf_h460_9_rtcpRoundTripDelay,
2524       { "rtcpRoundTripDelay", "h460.9.rtcpRoundTripDelay",
2525         FT_UINT32, BASE_DEC, NULL, 0,
2526         "h460_9.INTEGER_0_65535", HFILL }},
2527     { &hf_h460_9_endSystemDelay,
2528       { "endSystemDelay", "h460.9.endSystemDelay",
2529         FT_UINT32, BASE_DEC, NULL, 0,
2530         "h460_9.INTEGER_0_65535", HFILL }},
2531     { &hf_h460_9_signalLevel,
2532       { "signalLevel", "h460.9.signalLevel",
2533         FT_INT32, BASE_DEC, NULL, 0,
2534         "h460_9.INTEGER_M127_10", HFILL }},
2535     { &hf_h460_9_noiseLevel,
2536       { "noiseLevel", "h460.9.noiseLevel",
2537         FT_INT32, BASE_DEC, NULL, 0,
2538         "h460_9.INTEGER_M127_0", HFILL }},
2539     { &hf_h460_9_residualEchoReturnLoss,
2540       { "residualEchoReturnLoss", "h460.9.residualEchoReturnLoss",
2541         FT_UINT32, BASE_DEC, NULL, 0,
2542         "h460_9.INTEGER_0_127", HFILL }},
2543     { &hf_h460_9_rFactor,
2544       { "rFactor", "h460.9.rFactor",
2545         FT_UINT32, BASE_DEC, NULL, 0,
2546         "h460_9.INTEGER_0_100", HFILL }},
2547     { &hf_h460_9_extRFactor,
2548       { "extRFactor", "h460.9.extRFactor",
2549         FT_UINT32, BASE_DEC, NULL, 0,
2550         "h460_9.INTEGER_0_100", HFILL }},
2551     { &hf_h460_9_estimatedMOSLQ,
2552       { "estimatedMOSLQ", "h460.9.estimatedMOSLQ",
2553         FT_UINT32, BASE_DEC, NULL, 0,
2554         "h460_9.INTEGER_10_50", HFILL }},
2555     { &hf_h460_9_estimatedMOSCQ,
2556       { "estimatedMOSCQ", "h460.9.estimatedMOSCQ",
2557         FT_UINT32, BASE_DEC, NULL, 0,
2558         "h460_9.INTEGER_10_50", HFILL }},
2559     { &hf_h460_9_plcType,
2560       { "plcType", "h460.9.plcType",
2561         FT_UINT32, BASE_DEC, VALS(h460_9_PLCtypes_vals), 0,
2562         "h460_9.PLCtypes", HFILL }},
2563     { &hf_h460_9_jitterBufferParms,
2564       { "jitterBufferParms", "h460.9.jitterBufferParms",
2565         FT_NONE, BASE_NONE, NULL, 0,
2566         "h460_9.JitterBufferParms", HFILL }},
2567     { &hf_h460_9_gmin,
2568       { "gmin", "h460.9.gmin",
2569         FT_UINT32, BASE_DEC, NULL, 0,
2570         "h460_9.INTEGER_0_255", HFILL }},
2571     { &hf_h460_9_burstLossDensity,
2572       { "burstLossDensity", "h460.9.burstLossDensity",
2573         FT_UINT32, BASE_DEC, NULL, 0,
2574         "h460_9.INTEGER_0_255", HFILL }},
2575     { &hf_h460_9_gapLossDensity,
2576       { "gapLossDensity", "h460.9.gapLossDensity",
2577         FT_UINT32, BASE_DEC, NULL, 0,
2578         "h460_9.INTEGER_0_255", HFILL }},
2579     { &hf_h460_9_burstDuration,
2580       { "burstDuration", "h460.9.burstDuration",
2581         FT_UINT32, BASE_DEC, NULL, 0,
2582         "h460_9.INTEGER_0_65535", HFILL }},
2583     { &hf_h460_9_gapDuration,
2584       { "gapDuration", "h460.9.gapDuration",
2585         FT_UINT32, BASE_DEC, NULL, 0,
2586         "h460_9.INTEGER_0_65535", HFILL }},
2587     { &hf_h460_9_unspecified,
2588       { "unspecified", "h460.9.unspecified",
2589         FT_NONE, BASE_NONE, NULL, 0,
2590         "h460_9.NULL", HFILL }},
2591     { &hf_h460_9_disabled,
2592       { "disabled", "h460.9.disabled",
2593         FT_NONE, BASE_NONE, NULL, 0,
2594         "h460_9.NULL", HFILL }},
2595     { &hf_h460_9_enhanced,
2596       { "enhanced", "h460.9.enhanced",
2597         FT_NONE, BASE_NONE, NULL, 0,
2598         "h460_9.NULL", HFILL }},
2599     { &hf_h460_9_standard,
2600       { "standard", "h460.9.standard",
2601         FT_NONE, BASE_NONE, NULL, 0,
2602         "h460_9.NULL", HFILL }},
2603     { &hf_h460_9_jitterBufferType,
2604       { "jitterBufferType", "h460.9.jitterBufferType",
2605         FT_UINT32, BASE_DEC, VALS(h460_9_JitterBufferTypes_vals), 0,
2606         "h460_9.JitterBufferTypes", HFILL }},
2607     { &hf_h460_9_jitterBufferAdaptRate,
2608       { "jitterBufferAdaptRate", "h460.9.jitterBufferAdaptRate",
2609         FT_UINT32, BASE_DEC, NULL, 0,
2610         "h460_9.INTEGER_0_15", HFILL }},
2611     { &hf_h460_9_jitterBufferNominalSize,
2612       { "jitterBufferNominalSize", "h460.9.jitterBufferNominalSize",
2613         FT_UINT32, BASE_DEC, NULL, 0,
2614         "h460_9.INTEGER_0_65535", HFILL }},
2615     { &hf_h460_9_jitterBufferMaxSize,
2616       { "jitterBufferMaxSize", "h460.9.jitterBufferMaxSize",
2617         FT_UINT32, BASE_DEC, NULL, 0,
2618         "h460_9.INTEGER_0_65535", HFILL }},
2619     { &hf_h460_9_jitterBufferAbsoluteMax,
2620       { "jitterBufferAbsoluteMax", "h460.9.jitterBufferAbsoluteMax",
2621         FT_UINT32, BASE_DEC, NULL, 0,
2622         "h460_9.INTEGER_0_65535", HFILL }},
2623     { &hf_h460_9_unknown,
2624       { "unknown", "h460.9.unknown",
2625         FT_NONE, BASE_NONE, NULL, 0,
2626         "h460_9.NULL", HFILL }},
2627     { &hf_h460_9_reserved,
2628       { "reserved", "h460.9.reserved",
2629         FT_NONE, BASE_NONE, NULL, 0,
2630         "h460_9.NULL", HFILL }},
2631     { &hf_h460_9_nonadaptive,
2632       { "nonadaptive", "h460.9.nonadaptive",
2633         FT_NONE, BASE_NONE, NULL, 0,
2634         "h460_9.NULL", HFILL }},
2635     { &hf_h460_9_adaptive,
2636       { "adaptive", "h460.9.adaptive",
2637         FT_NONE, BASE_NONE, NULL, 0,
2638         "h460_9.NULL", HFILL }},
2639
2640 /* --- Module CALL-PARTY-CATEGORY --- --- ---                                 */
2641
2642     { &hf_h460_10_h460_10_CallPartyCategoryInfo_PDU,
2643       { "CallPartyCategoryInfo", "h460.10.CallPartyCategoryInfo",
2644         FT_NONE, BASE_NONE, NULL, 0,
2645         "h460_10.CallPartyCategoryInfo", HFILL }},
2646     { &hf_h460_10_callPartyCategory,
2647       { "callPartyCategory", "h460.10.callPartyCategory",
2648         FT_UINT32, BASE_DEC, NULL, 0,
2649         "h460_10.CallPartyCategory", HFILL }},
2650     { &hf_h460_10_originatingLineInfo,
2651       { "originatingLineInfo", "h460.10.originatingLineInfo",
2652         FT_UINT32, BASE_DEC, NULL, 0,
2653         "h460_10.OriginatingLineInfo", HFILL }},
2654
2655 /* --- Module MLPP --- --- ---                                                */
2656
2657     { &hf_h460_14_h460_14_MLPPInfo_PDU,
2658       { "MLPPInfo", "h460.14.MLPPInfo",
2659         FT_NONE, BASE_NONE, NULL, 0,
2660         "h460_14.MLPPInfo", HFILL }},
2661     { &hf_h460_14_precedence,
2662       { "precedence", "h460.14.precedence",
2663         FT_UINT32, BASE_DEC, VALS(h460_14_MlppPrecedence_vals), 0,
2664         "h460_14.MlppPrecedence", HFILL }},
2665     { &hf_h460_14_mlppReason,
2666       { "mlppReason", "h460.14.mlppReason",
2667         FT_UINT32, BASE_DEC, VALS(h460_14_MlppReason_vals), 0,
2668         "h460_14.MlppReason", HFILL }},
2669     { &hf_h460_14_mlppNotification,
2670       { "mlppNotification", "h460.14.mlppNotification",
2671         FT_UINT32, BASE_DEC, VALS(h460_14_MlppNotification_vals), 0,
2672         "h460_14.MlppNotification", HFILL }},
2673     { &hf_h460_14_alternateParty,
2674       { "alternateParty", "h460.14.alternateParty",
2675         FT_NONE, BASE_NONE, NULL, 0,
2676         "h460_14.AlternateParty", HFILL }},
2677     { &hf_h460_14_releaseCall,
2678       { "releaseCall", "h460.14.releaseCall",
2679         FT_NONE, BASE_NONE, NULL, 0,
2680         "h460_14.ReleaseCall", HFILL }},
2681     { &hf_h460_14_preemptionPending,
2682       { "preemptionPending", "h460.14.preemptionPending",
2683         FT_NONE, BASE_NONE, NULL, 0,
2684         "h460_14.NULL", HFILL }},
2685     { &hf_h460_14_preemptionInProgress,
2686       { "preemptionInProgress", "h460.14.preemptionInProgress",
2687         FT_NONE, BASE_NONE, NULL, 0,
2688         "h460_14.NULL", HFILL }},
2689     { &hf_h460_14_preemptionEnd,
2690       { "preemptionEnd", "h460.14.preemptionEnd",
2691         FT_NONE, BASE_NONE, NULL, 0,
2692         "h460_14.NULL", HFILL }},
2693     { &hf_h460_14_preemptionComplete,
2694       { "preemptionComplete", "h460.14.preemptionComplete",
2695         FT_NONE, BASE_NONE, NULL, 0,
2696         "h460_14.NULL", HFILL }},
2697     { &hf_h460_14_altID,
2698       { "altID", "h460.14.altID",
2699         FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0,
2700         "h225.AliasAddress", HFILL }},
2701     { &hf_h460_14_altTimer,
2702       { "altTimer", "h460.14.altTimer",
2703         FT_UINT32, BASE_DEC, NULL, 0,
2704         "h460_14.INTEGER_0_255", HFILL }},
2705     { &hf_h460_14_preemptCallID,
2706       { "preemptCallID", "h460.14.preemptCallID",
2707         FT_NONE, BASE_NONE, NULL, 0,
2708         "h225.CallIdentifier", HFILL }},
2709     { &hf_h460_14_releaseReason,
2710       { "releaseReason", "h460.14.releaseReason",
2711         FT_UINT32, BASE_DEC, VALS(h460_14_MlppReason_vals), 0,
2712         "h460_14.MlppReason", HFILL }},
2713     { &hf_h460_14_releaseDelay,
2714       { "releaseDelay", "h460.14.releaseDelay",
2715         FT_UINT32, BASE_DEC, NULL, 0,
2716         "h460_14.INTEGER_0_255", HFILL }},
2717
2718 /* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- ---                 */
2719
2720     { &hf_h460_15_h460_15_SignallingChannelData_PDU,
2721       { "SignallingChannelData", "h460.15.SignallingChannelData",
2722         FT_NONE, BASE_NONE, NULL, 0,
2723         "h460_15.SignallingChannelData", HFILL }},
2724     { &hf_h460_15_signallingChannelData,
2725       { "signallingChannelData", "h460.15.signallingChannelData",
2726         FT_UINT32, BASE_DEC, VALS(h460_15_T_signallingChannelData_vals), 0,
2727         "h460_15.T_signallingChannelData", HFILL }},
2728     { &hf_h460_15_channelSuspendRequest,
2729       { "channelSuspendRequest", "h460.15.channelSuspendRequest",
2730         FT_NONE, BASE_NONE, NULL, 0,
2731         "h460_15.ChannelSuspendRequest", HFILL }},
2732     { &hf_h460_15_channelSuspendResponse,
2733       { "channelSuspendResponse", "h460.15.channelSuspendResponse",
2734         FT_NONE, BASE_NONE, NULL, 0,
2735         "h460_15.ChannelSuspendResponse", HFILL }},
2736     { &hf_h460_15_channelSuspendConfirm,
2737       { "channelSuspendConfirm", "h460.15.channelSuspendConfirm",
2738         FT_NONE, BASE_NONE, NULL, 0,
2739         "h460_15.ChannelSuspendConfirm", HFILL }},
2740     { &hf_h460_15_channelSuspendCancel,
2741       { "channelSuspendCancel", "h460.15.channelSuspendCancel",
2742         FT_NONE, BASE_NONE, NULL, 0,
2743         "h460_15.ChannelSuspendCancel", HFILL }},
2744     { &hf_h460_15_channelResumeRequest,
2745       { "channelResumeRequest", "h460.15.channelResumeRequest",
2746         FT_NONE, BASE_NONE, NULL, 0,
2747         "h460_15.ChannelResumeRequest", HFILL }},
2748     { &hf_h460_15_channelResumeResponse,
2749       { "channelResumeResponse", "h460.15.channelResumeResponse",
2750         FT_NONE, BASE_NONE, NULL, 0,
2751         "h460_15.ChannelResumeResponse", HFILL }},
2752     { &hf_h460_15_channelResumeAddress,
2753       { "channelResumeAddress", "h460.15.channelResumeAddress",
2754         FT_UINT32, BASE_DEC, NULL, 0,
2755         "h460_15.SEQUENCE_OF_TransportAddress", HFILL }},
2756     { &hf_h460_15_channelResumeAddress_item,
2757       { "TransportAddress", "h460.15.TransportAddress",
2758         FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
2759         "h225.TransportAddress", HFILL }},
2760     { &hf_h460_15_immediateResume,
2761       { "immediateResume", "h460.15.immediateResume",
2762         FT_BOOLEAN, BASE_NONE, NULL, 0,
2763         "h460_15.BOOLEAN", HFILL }},
2764     { &hf_h460_15_resetH245,
2765       { "resetH245", "h460.15.resetH245",
2766         FT_NONE, BASE_NONE, NULL, 0,
2767         "h460_15.NULL", HFILL }},
2768     { &hf_h460_15_okToSuspend,
2769       { "okToSuspend", "h460.15.okToSuspend",
2770         FT_BOOLEAN, BASE_NONE, NULL, 0,
2771         "h460_15.BOOLEAN", HFILL }},
2772     { &hf_h460_15_randomNumber,
2773       { "randomNumber", "h460.15.randomNumber",
2774         FT_UINT32, BASE_DEC, NULL, 0,
2775         "h460_15.INTEGER_0_4294967295", HFILL }},
2776
2777 /* --- Module SIGNALLING-TRAVERSAL --- --- ---                                */
2778
2779     { &hf_h460_18_h460_18_IncomingCallIndication_PDU,
2780       { "IncomingCallIndication", "h460.18.IncomingCallIndication",
2781         FT_NONE, BASE_NONE, NULL, 0,
2782         "h460_18.IncomingCallIndication", HFILL }},
2783     { &hf_h460_18_h460_18_LRQKeepAliveData_PDU,
2784       { "LRQKeepAliveData", "h460.18.LRQKeepAliveData",
2785         FT_NONE, BASE_NONE, NULL, 0,
2786         "h460_18.LRQKeepAliveData", HFILL }},
2787     { &hf_h460_18_callSignallingAddress,
2788       { "callSignallingAddress", "h460.18.callSignallingAddress",
2789         FT_UINT32, BASE_DEC, VALS(h225_TransportAddress_vals), 0,
2790         "h225.TransportAddress", HFILL }},
2791     { &hf_h460_18_callID,
2792       { "callID", "h460.18.callID",
2793         FT_NONE, BASE_NONE, NULL, 0,
2794         "h225.CallIdentifier", HFILL }},
2795     { &hf_h460_18_lrqKeepAliveInterval,
2796       { "lrqKeepAliveInterval", "h460.18.lrqKeepAliveInterval",
2797         FT_UINT32, BASE_DEC, NULL, 0,
2798         "h225.TimeToLive", HFILL }},
2799
2800 /* --- Module MEDIA-TRAVERSAL --- --- ---                                     */
2801
2802     { &hf_h460_19_h460_19_TraversalParameters_PDU,
2803       { "TraversalParameters", "h460.19.TraversalParameters",
2804         FT_NONE, BASE_NONE, NULL, 0,
2805         "h460_19.TraversalParameters", HFILL }},
2806     { &hf_h460_19_multiplexedMediaChannel,
2807       { "multiplexedMediaChannel", "h460.19.multiplexedMediaChannel",
2808         FT_UINT32, BASE_DEC, VALS(h245_TransportAddress_vals), 0,
2809         "h245.TransportAddress", HFILL }},
2810     { &hf_h460_19_multiplexedMediaControlChannel,
2811       { "multiplexedMediaControlChannel", "h460.19.multiplexedMediaControlChannel",
2812         FT_UINT32, BASE_DEC, VALS(h245_TransportAddress_vals), 0,
2813         "h245.TransportAddress", HFILL }},
2814     { &hf_h460_19_multiplexID,
2815       { "multiplexID", "h460.19.multiplexID",
2816         FT_UINT32, BASE_DEC, NULL, 0,
2817         "h460_19.INTEGER_0_4294967295", HFILL }},
2818     { &hf_h460_19_keepAliveChannel,
2819       { "keepAliveChannel", "h460.19.keepAliveChannel",
2820         FT_UINT32, BASE_DEC, VALS(h245_TransportAddress_vals), 0,
2821         "h245.TransportAddress", HFILL }},
2822     { &hf_h460_19_keepAlivePayloadType,
2823       { "keepAlivePayloadType", "h460.19.keepAlivePayloadType",
2824         FT_UINT32, BASE_DEC, NULL, 0,
2825         "h460_19.INTEGER_0_127", HFILL }},
2826     { &hf_h460_19_keepAliveInterval,
2827       { "keepAliveInterval", "h460.19.keepAliveInterval",
2828         FT_UINT32, BASE_DEC, NULL, 0,
2829         "h225.TimeToLive", HFILL }},
2830
2831 /* --- Module MESSAGE-BROADCAST --- --- ---                                   */
2832
2833     { &hf_h460_21_h460_21_CapabilityAdvertisement_PDU,
2834       { "CapabilityAdvertisement", "h460.21.CapabilityAdvertisement",
2835         FT_NONE, BASE_NONE, NULL, 0,
2836         "h460_21.CapabilityAdvertisement", HFILL }},
2837     { &hf_h460_21_receiveCapabilities,
2838       { "receiveCapabilities", "h460.21.receiveCapabilities",
2839         FT_NONE, BASE_NONE, NULL, 0,
2840         "h460_21.ReceiveCapabilities", HFILL }},
2841     { &hf_h460_21_transmitCapabilities,
2842       { "transmitCapabilities", "h460.21.transmitCapabilities",
2843         FT_UINT32, BASE_DEC, NULL, 0,
2844         "h460_21.SEQUENCE_SIZE_1_256_OF_TransmitCapabilities", HFILL }},
2845     { &hf_h460_21_transmitCapabilities_item,
2846       { "TransmitCapabilities", "h460.21.TransmitCapabilities",
2847         FT_NONE, BASE_NONE, NULL, 0,
2848         "h460_21.TransmitCapabilities", HFILL }},
2849     { &hf_h460_21_capabilities,
2850       { "capabilities", "h460.21.capabilities",
2851         FT_UINT32, BASE_DEC, NULL, 0,
2852         "h460_21.SEQUENCE_SIZE_1_256_OF_Capability", HFILL }},
2853     { &hf_h460_21_capabilities_item,
2854       { "Capability", "h460.21.Capability",
2855         FT_UINT32, BASE_DEC, VALS(h245_Capability_vals), 0,
2856         "h245.Capability", HFILL }},
2857     { &hf_h460_21_maxGroups,
2858       { "maxGroups", "h460.21.maxGroups",
2859         FT_UINT32, BASE_DEC, NULL, 0,
2860         "h460_21.INTEGER_1_65535", HFILL }},
2861     { &hf_h460_21_groupIdentifer,
2862       { "groupIdentifer", "h460.21.groupIdentifer",
2863         FT_BYTES, BASE_NONE, NULL, 0,
2864         "h460_21.GloballyUniqueID", HFILL }},
2865     { &hf_h460_21_capability,
2866       { "capability", "h460.21.capability",
2867         FT_UINT32, BASE_DEC, VALS(h245_Capability_vals), 0,
2868         "h245.Capability", HFILL }},
2869     { &hf_h460_21_sourceAddress,
2870       { "sourceAddress", "h460.21.sourceAddress",
2871         FT_UINT32, BASE_DEC, VALS(h245_UnicastAddress_vals), 0,
2872         "h245.UnicastAddress", HFILL }},
2873
2874 /*--- End of included file: packet-h460-hfarr.c ---*/
2875 #line 249 "packet-h460-template.c"
2876   };
2877
2878   /* List of subtrees */
2879   static gint *ett[] = {
2880
2881 /*--- Included file: packet-h460-ettarr.c ---*/
2882 #line 1 "packet-h460-ettarr.c"
2883
2884 /* --- Module NUMBER-PORTABILITY --- --- ---                                  */
2885
2886     &ett_h460_2_NumberPortabilityInfo,
2887     &ett_h460_2_T_nUMBERPORTABILITYDATA,
2888     &ett_h460_2_NumberPortabilityRejectReason,
2889     &ett_h460_2_PortabilityAddress,
2890     &ett_h460_2_NumberPortabilityTypeOfNumber,
2891     &ett_h460_2_PortabilityTypeOfNumber,
2892     &ett_h460_2_RegionalParameters,
2893
2894 /* --- Module CIRCUIT-STATUS-MAP --- --- ---                                  */
2895
2896     &ett_h460_3_CircuitStatus,
2897     &ett_h460_3_SEQUENCE_OF_CircuitStatusMap,
2898     &ett_h460_3_CircuitStatusMap,
2899     &ett_h460_3_CircuitStatusType,
2900
2901 /* --- Module CALL-PRIORITY --- --- ---                                       */
2902
2903     &ett_h460_4_CallPriorityInfo,
2904     &ett_h460_4_T_priorityValue,
2905     &ett_h460_4_SEQUENCE_OF_ClearToken,
2906     &ett_h460_4_SEQUENCE_OF_CryptoToken,
2907     &ett_h460_4_T_rejectReason,
2908     &ett_h460_4_CountryInternationalNetworkCallOriginationIdentification,
2909     &ett_h460_4_T_numberingPlan,
2910     &ett_h460_4_T_x121,
2911     &ett_h460_4_T_e164,
2912
2913 /* --- Modules QOS-MONITORING-REPORT QOS-MONITORING-EXTENDED-VOIP-REPORT --- --- --- */
2914
2915     &ett_h460_9_Extension,
2916     &ett_h460_9_RTCPMeasures,
2917     &ett_h460_9_T_mediaSenderMeasures,
2918     &ett_h460_9_T_mediaReceiverMeasures,
2919     &ett_h460_9_SEQUENCE_OF_Extension,
2920     &ett_h460_9_PerCallQoSReport,
2921     &ett_h460_9_SEQUENCE_OF_RTCPMeasures,
2922     &ett_h460_9_QosMonitoringReportData,
2923     &ett_h460_9_PeriodicQoSMonReport,
2924     &ett_h460_9_SEQUENCE_OF_PerCallQoSReport,
2925     &ett_h460_9_FinalQosMonReport,
2926     &ett_h460_9_InterGKQosMonReport,
2927     &ett_h460_9_ExtendedRTPMetrics,
2928     &ett_h460_9_BurstMetrics,
2929     &ett_h460_9_PLCtypes,
2930     &ett_h460_9_JitterBufferParms,
2931     &ett_h460_9_JitterBufferTypes,
2932
2933 /* --- Module CALL-PARTY-CATEGORY --- --- ---                                 */
2934
2935     &ett_h460_10_CallPartyCategoryInfo,
2936
2937 /* --- Module MLPP --- --- ---                                                */
2938
2939     &ett_h460_14_MLPPInfo,
2940     &ett_h460_14_MlppNotification,
2941     &ett_h460_14_AlternateParty,
2942     &ett_h460_14_ReleaseCall,
2943
2944 /* --- Module SIGNALLING-CHANNEL-SUSPEND-REDIRECT --- --- ---                 */
2945
2946     &ett_h460_15_SignallingChannelData,
2947     &ett_h460_15_T_signallingChannelData,
2948     &ett_h460_15_ChannelSuspendRequest,
2949     &ett_h460_15_SEQUENCE_OF_TransportAddress,
2950     &ett_h460_15_ChannelSuspendResponse,
2951     &ett_h460_15_ChannelSuspendConfirm,
2952     &ett_h460_15_ChannelSuspendCancel,
2953     &ett_h460_15_ChannelResumeRequest,
2954     &ett_h460_15_ChannelResumeResponse,
2955
2956 /* --- Module SIGNALLING-TRAVERSAL --- --- ---                                */
2957
2958     &ett_h460_18_IncomingCallIndication,
2959     &ett_h460_18_LRQKeepAliveData,
2960
2961 /* --- Module MEDIA-TRAVERSAL --- --- ---                                     */
2962
2963     &ett_h460_19_TraversalParameters,
2964
2965 /* --- Module MESSAGE-BROADCAST --- --- ---                                   */
2966
2967     &ett_h460_21_CapabilityAdvertisement,
2968     &ett_h460_21_SEQUENCE_SIZE_1_256_OF_TransmitCapabilities,
2969     &ett_h460_21_ReceiveCapabilities,
2970     &ett_h460_21_SEQUENCE_SIZE_1_256_OF_Capability,
2971     &ett_h460_21_TransmitCapabilities,
2972
2973 /*--- End of included file: packet-h460-ettarr.c ---*/
2974 #line 254 "packet-h460-template.c"
2975   };
2976
2977   /* Register protocol */
2978   proto_h460 = proto_register_protocol(PNAME, PSNAME, PFNAME);
2979
2980   /* Register fields and subtrees */
2981   proto_register_field_array(proto_h460, hf, array_length(hf));
2982   proto_register_subtree_array(ett, array_length(ett));
2983
2984   for (ftr=h460_feature_tab; ftr->id; ftr++) {
2985     if (ftr->opt & GD) ftr->key_gd = g_strdup_printf("GenericData/%s", ftr->id);
2986     if (ftr->opt & FD) ftr->key_fd = g_strdup_printf("FeatureDescriptor/%s", ftr->id);
2987     if (ftr->opt & GM) ftr->key_gm = g_strdup_printf("GenericMessage/%s", ftr->id);
2988     if (ftr->opt & GI) ftr->key_gi = g_strdup_printf("GenericInformation/%s", ftr->id);
2989     if (ftr->content_pdu) ftr->content_hnd = new_create_dissector_handle(ftr->content_pdu, proto_h460);
2990   }
2991 }
2992
2993 /*--- proto_reg_handoff_h460 -------------------------------------------*/
2994 void proto_reg_handoff_h460(void) 
2995 {
2996   h460_feature_t *ftr;
2997   dissector_handle_t h460_name_handle;
2998
2999   q931_ie_handle = find_dissector("q931.ie");
3000   h225_ras_handle = find_dissector("h225.ras");
3001
3002   h460_name_handle = new_create_dissector_handle(dissect_h460_name, proto_h460);
3003   for (ftr=h460_feature_tab; ftr->id; ftr++) {
3004     if (ftr->key_gd) dissector_add_string("h225.gef.name", ftr->key_gd, h460_name_handle);
3005     if (ftr->key_fd) dissector_add_string("h225.gef.name", ftr->key_fd, h460_name_handle);
3006     if (ftr->key_gm) dissector_add_string("h245.gef.name", ftr->key_gm, h460_name_handle);
3007     if (ftr->key_gi) dissector_add_string("h245.gef.name", ftr->key_gi, h460_name_handle);
3008     if (ftr->content_hnd) {
3009       if (ftr->key_gd) dissector_add_string("h225.gef.content", ftr->key_gd, ftr->content_hnd);
3010       if (ftr->key_fd) dissector_add_string("h225.gef.content", ftr->key_fd, ftr->content_hnd);
3011       if (ftr->key_gm) dissector_add_string("h245.gef.content", ftr->key_gm, ftr->content_hnd);
3012       if (ftr->key_gi) dissector_add_string("h245.gef.content", ftr->key_gi, ftr->content_hnd);
3013     }
3014   }
3015
3016 }