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