Regenerate asn.1 dissectors.
[metze/wireshark/wip.git] / epan / dissectors / packet-h248.c
1 /* Do not modify this file.                                                   */
2 /* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
3 /* packet-h248.c                                                              */
4 /* ../../tools/asn2wrs.py -b -p h248 -c ./h248.cnf -s ./packet-h248-template -D . -O ../../epan/dissectors h248v3.asn h248v1support.asn */
5
6 /* Input file: packet-h248-template.c */
7
8 #line 1 "../../asn1/h248/packet-h248-template.c"
9 /* packet-h248.c
10  * Routines for H.248/MEGACO packet dissection
11  *
12  * Ronnie Sahlberg 2004
13  *
14  * Luis Ontanon 2005 - Context and Transaction Tracing
15  *
16  * $Id$
17  *
18  * Wireshark - Network traffic analyzer
19  * By Gerald Combs <gerald@wireshark.org>
20  * Copyright 1998 Gerald Combs
21  *
22  * This program is free software; you can redistribute it and/or
23  * modify it under the terms of the GNU General Public License
24  * as published by the Free Software Foundation; either version 2
25  * of the License, or (at your option) any later version.
26  *
27  * This program is distributed in the hope that it will be useful,
28  * but WITHOUT ANY WARRANTY; without even the implied warranty of
29  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
30  * GNU General Public License for more details.
31  *
32  * You should have received a copy of the GNU General Public License
33  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
34  */
35
36 #include "config.h"
37
38 #include "packet-h248.h"
39 #include <epan/tap.h>
40 #include "packet-tpkt.h"
41 #include <ctype.h>
42 #include "packet-mtp3.h"
43
44 #define PNAME  "H.248 MEGACO"
45 #define PSNAME "H248"
46 #define PFNAME "h248"
47
48 /* Initialize the protocol and registered fields */
49 static int proto_h248                   = -1;
50 static int hf_248_magic_num             = -1;
51 static int hf_h248_mtpaddress_ni        = -1;
52 static int hf_h248_mtpaddress_pc        = -1;
53 static int hf_h248_pkg_name             = -1;
54 static int hf_248_pkg_param             = -1;
55 static int hf_h248_event_name           = -1;
56 static int hf_h248_signal_name          = -1;
57 static int hf_h248_signal_code          = -1;
58 static int hf_h248_event_code           = -1;
59 static int hf_h248_pkg_bcp_BNCChar_PDU  = -1;
60
61
62
63 static int hf_h248_context_id = -1;
64 static int hf_h248_error_code = -1;
65 static int hf_h248_term_wild_type = -1;
66 static int hf_h248_term_wild_level = -1;
67 static int hf_h248_term_wild_position = -1;
68
69 static int hf_h248_no_pkg = -1;
70 static int hf_h248_no_sig = -1;
71 static int hf_h248_no_evt = -1;
72 static int hf_h248_param = -1;
73
74 static int hf_h248_serviceChangeReasonStr = -1;
75
76 /* h248v1 support */
77 static int hf_h248_auditValueReplyV1 = -1;
78
79
80 /*--- Included file: packet-h248-hf.c ---*/
81 #line 1 "../../asn1/h248/packet-h248-hf.c"
82 static int hf_h248_authHeader = -1;               /* AuthenticationHeader */
83 static int hf_h248_mess = -1;                     /* Message */
84 static int hf_h248_secParmIndex = -1;             /* SecurityParmIndex */
85 static int hf_h248_seqNum = -1;                   /* SequenceNum */
86 static int hf_h248_ad = -1;                       /* AuthData */
87 static int hf_h248_version = -1;                  /* T_version */
88 static int hf_h248_mId = -1;                      /* MId */
89 static int hf_h248_messageBody = -1;              /* T_messageBody */
90 static int hf_h248_messageError = -1;             /* ErrorDescriptor */
91 static int hf_h248_transactions = -1;             /* SEQUENCE_OF_Transaction */
92 static int hf_h248_transactions_item = -1;        /* Transaction */
93 static int hf_h248_ip4Address = -1;               /* IP4Address */
94 static int hf_h248_ip6Address = -1;               /* IP6Address */
95 static int hf_h248_domainName = -1;               /* DomainName */
96 static int hf_h248_deviceName = -1;               /* PathName */
97 static int hf_h248_mtpAddress = -1;               /* MtpAddress */
98 static int hf_h248_domName = -1;                  /* IA5String */
99 static int hf_h248_portNumber = -1;               /* INTEGER_0_65535 */
100 static int hf_h248_iP4Address = -1;               /* OCTET_STRING_SIZE_4 */
101 static int hf_h248_iP6Address = -1;               /* OCTET_STRING_SIZE_16 */
102 static int hf_h248_transactionRequest = -1;       /* TransactionRequest */
103 static int hf_h248_transactionPending = -1;       /* TransactionPending */
104 static int hf_h248_transactionReply = -1;         /* TransactionReply */
105 static int hf_h248_transactionResponseAck = -1;   /* TransactionResponseAck */
106 static int hf_h248_segmentReply = -1;             /* SegmentReply */
107 static int hf_h248_transactionId = -1;            /* T_transactionId */
108 static int hf_h248_actions = -1;                  /* SEQUENCE_OF_ActionRequest */
109 static int hf_h248_actions_item = -1;             /* ActionRequest */
110 static int hf_h248_tpend_transactionId = -1;      /* T_tpend_transactionId */
111 static int hf_h248_trep_transactionId = -1;       /* T_trep_transactionId */
112 static int hf_h248_immAckRequired = -1;           /* NULL */
113 static int hf_h248_transactionResult = -1;        /* T_transactionResult */
114 static int hf_h248_transactionError = -1;         /* ErrorDescriptor */
115 static int hf_h248_actionReplies = -1;            /* SEQUENCE_OF_ActionReply */
116 static int hf_h248_actionReplies_item = -1;       /* ActionReply */
117 static int hf_h248_segmentNumber = -1;            /* SegmentNumber */
118 static int hf_h248_segmentationComplete = -1;     /* NULL */
119 static int hf_h248_seg_rep_transactionId = -1;    /* T_seg_rep_transactionId */
120 static int hf_h248_TransactionResponseAck_item = -1;  /* TransactionAck */
121 static int hf_h248_firstAck = -1;                 /* TransactionId */
122 static int hf_h248_lastAck = -1;                  /* TransactionId */
123 static int hf_h248_errorCode = -1;                /* T_errorCode */
124 static int hf_h248_errorText = -1;                /* ErrorText */
125 static int hf_h248_contextId = -1;                /* ContextId */
126 static int hf_h248_contextRequest = -1;           /* ContextRequest */
127 static int hf_h248_contextAttrAuditReq = -1;      /* T_contextAttrAuditReq */
128 static int hf_h248_commandRequests = -1;          /* SEQUENCE_OF_CommandRequest */
129 static int hf_h248_commandRequests_item = -1;     /* CommandRequest */
130 static int hf_h248_errorDescriptor = -1;          /* ErrorDescriptor */
131 static int hf_h248_contextReply = -1;             /* ContextRequest */
132 static int hf_h248_commandReply = -1;             /* SEQUENCE_OF_CommandReply */
133 static int hf_h248_commandReply_item = -1;        /* CommandReply */
134 static int hf_h248_priority = -1;                 /* INTEGER_0_15 */
135 static int hf_h248_emergency = -1;                /* BOOLEAN */
136 static int hf_h248_topologyReq = -1;              /* T_topologyReq */
137 static int hf_h248_topologyReq_item = -1;         /* TopologyRequest */
138 static int hf_h248_iepscallind_BOOL = -1;         /* Iepscallind_BOOL */
139 static int hf_h248_contextProp = -1;              /* SEQUENCE_OF_PropertyParm */
140 static int hf_h248_contextProp_item = -1;         /* PropertyParm */
141 static int hf_h248_contextList = -1;              /* SEQUENCE_OF_ContextIDinList */
142 static int hf_h248_contextList_item = -1;         /* ContextIDinList */
143 static int hf_h248_topology = -1;                 /* NULL */
144 static int hf_h248_cAAREmergency = -1;            /* NULL */
145 static int hf_h248_cAARPriority = -1;             /* NULL */
146 static int hf_h248_iepscallind = -1;              /* NULL */
147 static int hf_h248_contextPropAud = -1;           /* SEQUENCE_OF_IndAudPropertyParm */
148 static int hf_h248_contextPropAud_item = -1;      /* IndAudPropertyParm */
149 static int hf_h248_selectpriority = -1;           /* INTEGER_0_15 */
150 static int hf_h248_selectemergency = -1;          /* BOOLEAN */
151 static int hf_h248_selectiepscallind = -1;        /* BOOLEAN */
152 static int hf_h248_selectLogic = -1;              /* SelectLogic */
153 static int hf_h248_andAUDITSelect = -1;           /* NULL */
154 static int hf_h248_orAUDITSelect = -1;            /* NULL */
155 static int hf_h248_command = -1;                  /* Command */
156 static int hf_h248_optional = -1;                 /* NULL */
157 static int hf_h248_wildcardReturn = -1;           /* NULL */
158 static int hf_h248_addReq = -1;                   /* T_addReq */
159 static int hf_h248_moveReq = -1;                  /* T_moveReq */
160 static int hf_h248_modReq = -1;                   /* T_modReq */
161 static int hf_h248_subtractReq = -1;              /* T_subtractReq */
162 static int hf_h248_auditCapRequest = -1;          /* T_auditCapRequest */
163 static int hf_h248_auditValueRequest = -1;        /* T_auditValueRequest */
164 static int hf_h248_notifyReq = -1;                /* T_notifyReq */
165 static int hf_h248_serviceChangeReq = -1;         /* ServiceChangeRequest */
166 static int hf_h248_addReply = -1;                 /* T_addReply */
167 static int hf_h248_moveReply = -1;                /* T_moveReply */
168 static int hf_h248_modReply = -1;                 /* T_modReply */
169 static int hf_h248_subtractReply = -1;            /* T_subtractReply */
170 static int hf_h248_auditCapReply = -1;            /* T_auditCapReply */
171 static int hf_h248_auditValueReply = -1;          /* T_auditValueReply */
172 static int hf_h248_notifyReply = -1;              /* T_notifyReply */
173 static int hf_h248_serviceChangeReply = -1;       /* ServiceChangeReply */
174 static int hf_h248_terminationFrom = -1;          /* TerminationID */
175 static int hf_h248_terminationTo = -1;            /* TerminationID */
176 static int hf_h248_topologyDirection = -1;        /* T_topologyDirection */
177 static int hf_h248_streamID = -1;                 /* StreamID */
178 static int hf_h248_topologyDirectionExtension = -1;  /* T_topologyDirectionExtension */
179 static int hf_h248_terminationIDList = -1;        /* TerminationIDList */
180 static int hf_h248_descriptors = -1;              /* SEQUENCE_OF_AmmDescriptor */
181 static int hf_h248_descriptors_item = -1;         /* AmmDescriptor */
182 static int hf_h248_mediaDescriptor = -1;          /* MediaDescriptor */
183 static int hf_h248_modemDescriptor = -1;          /* ModemDescriptor */
184 static int hf_h248_muxDescriptor = -1;            /* MuxDescriptor */
185 static int hf_h248_eventsDescriptor = -1;         /* EventsDescriptor */
186 static int hf_h248_eventBufferDescriptor = -1;    /* EventBufferDescriptor */
187 static int hf_h248_signalsDescriptor = -1;        /* SignalsDescriptor */
188 static int hf_h248_digitMapDescriptor = -1;       /* DigitMapDescriptor */
189 static int hf_h248_auditDescriptor = -1;          /* AuditDescriptor */
190 static int hf_h248_aDstatisticsDescriptor = -1;   /* StatisticsDescriptor */
191 static int hf_h248_terminationAudit = -1;         /* TerminationAudit */
192 static int hf_h248_terminationID = -1;            /* TerminationID */
193 static int hf_h248_contextAuditResult = -1;       /* TerminationIDList */
194 static int hf_h248_error = -1;                    /* ErrorDescriptor */
195 static int hf_h248_auditResult = -1;              /* AuditResult */
196 static int hf_h248_auditResultTermList = -1;      /* TermListAuditResult */
197 static int hf_h248_terminationAuditResult = -1;   /* TerminationAudit */
198 static int hf_h248_TerminationAudit_item = -1;    /* AuditReturnParameter */
199 static int hf_h248_observedEventsDescriptor = -1;  /* ObservedEventsDescriptor */
200 static int hf_h248_aRPstatisticsDescriptor = -1;  /* StatisticsDescriptor */
201 static int hf_h248_packagesDescriptor = -1;       /* PackagesDescriptor */
202 static int hf_h248_emptyDescriptors = -1;         /* AuditDescriptor */
203 static int hf_h248_auditToken = -1;               /* T_auditToken */
204 static int hf_h248_auditPropertyToken = -1;       /* SEQUENCE_OF_IndAuditParameter */
205 static int hf_h248_auditPropertyToken_item = -1;  /* IndAuditParameter */
206 static int hf_h248_indaudmediaDescriptor = -1;    /* IndAudMediaDescriptor */
207 static int hf_h248_indaudeventsDescriptor = -1;   /* IndAudEventsDescriptor */
208 static int hf_h248_indaudeventBufferDescriptor = -1;  /* IndAudEventBufferDescriptor */
209 static int hf_h248_indaudsignalsDescriptor = -1;  /* IndAudSignalsDescriptor */
210 static int hf_h248_indauddigitMapDescriptor = -1;  /* IndAudDigitMapDescriptor */
211 static int hf_h248_indaudstatisticsDescriptor = -1;  /* IndAudStatisticsDescriptor */
212 static int hf_h248_indaudpackagesDescriptor = -1;  /* IndAudPackagesDescriptor */
213 static int hf_h248_indAudTerminationStateDescriptor = -1;  /* IndAudTerminationStateDescriptor */
214 static int hf_h248_indAudMediaDescriptorStreams = -1;  /* IndAudMediaDescriptorStreams */
215 static int hf_h248_oneStream = -1;                /* IndAudStreamParms */
216 static int hf_h248_multiStream = -1;              /* SEQUENCE_OF_IndAudStreamDescriptor */
217 static int hf_h248_multiStream_item = -1;         /* IndAudStreamDescriptor */
218 static int hf_h248_indAudStreamParms = -1;        /* IndAudStreamParms */
219 static int hf_h248_iASPLocalControlDescriptor = -1;  /* IndAudLocalControlDescriptor */
220 static int hf_h248_iASPLocalDescriptor = -1;      /* IndAudLocalRemoteDescriptor */
221 static int hf_h248_iASPRemoteDescriptor = -1;     /* IndAudLocalRemoteDescriptor */
222 static int hf_h248_statisticsDescriptor = -1;     /* IndAudStatisticsDescriptor */
223 static int hf_h248_iALCDStreamMode = -1;          /* NULL */
224 static int hf_h248_iALCDReserveValue = -1;        /* NULL */
225 static int hf_h248_iALCDReserveGroup = -1;        /* NULL */
226 static int hf_h248_indAudPropertyParms = -1;      /* SEQUENCE_OF_IndAudPropertyParm */
227 static int hf_h248_indAudPropertyParms_item = -1;  /* IndAudPropertyParm */
228 static int hf_h248_streamModeSel = -1;            /* StreamMode */
229 static int hf_h248_name = -1;                     /* PkgdName */
230 static int hf_h248_propertyParms = -1;            /* PropertyParm */
231 static int hf_h248_propGroupID = -1;              /* INTEGER_0_65535 */
232 static int hf_h248_iAPropertyGroup = -1;          /* IndAudPropertyGroup */
233 static int hf_h248_IndAudPropertyGroup_item = -1;  /* IndAudPropertyParm */
234 static int hf_h248_eventBufferControl = -1;       /* NULL */
235 static int hf_h248_iATSDServiceState = -1;        /* NULL */
236 static int hf_h248_serviceStateSel = -1;          /* ServiceState */
237 static int hf_h248_requestID = -1;                /* RequestID */
238 static int hf_h248_iAEDPkgdName = -1;             /* PkgdName */
239 static int hf_h248_iAEBDEventName = -1;           /* PkgdName */
240 static int hf_h248_indAudSignal = -1;             /* IndAudSignal */
241 static int hf_h248_indAudSeqSigList = -1;         /* IndAudSeqSigList */
242 static int hf_h248_id = -1;                       /* INTEGER_0_65535 */
243 static int hf_h248_iASignalList = -1;             /* IndAudSignal */
244 static int hf_h248_iASignalName = -1;             /* PkgdName */
245 static int hf_h248_signalRequestID = -1;          /* RequestID */
246 static int hf_h248_digitMapName = -1;             /* DigitMapName */
247 static int hf_h248_iAStatName = -1;               /* PkgdName */
248 static int hf_h248_packageName = -1;              /* Name */
249 static int hf_h248_packageVersion = -1;           /* INTEGER_0_99 */
250 static int hf_h248_requestId = -1;                /* RequestID */
251 static int hf_h248_observedEventLst = -1;         /* SEQUENCE_OF_ObservedEvent */
252 static int hf_h248_observedEventLst_item = -1;    /* ObservedEvent */
253 static int hf_h248_eventName = -1;                /* EventName */
254 static int hf_h248_eventParList = -1;             /* SEQUENCE_OF_EventParameter */
255 static int hf_h248_eventParList_item = -1;        /* EventParameter */
256 static int hf_h248_timeNotation = -1;             /* TimeNotation */
257 static int hf_h248_eventParameterName = -1;       /* EventParameterName */
258 static int hf_h248_eventParamValue = -1;          /* EventParamValues */
259 static int hf_h248_eventPar_extraInfo = -1;       /* EventPar_extraInfo */
260 static int hf_h248_relation = -1;                 /* Relation */
261 static int hf_h248_range = -1;                    /* BOOLEAN */
262 static int hf_h248_sublist = -1;                  /* BOOLEAN */
263 static int hf_h248_EventParamValues_item = -1;    /* EventParamValue */
264 static int hf_h248_serviceChangeParms = -1;       /* ServiceChangeParm */
265 static int hf_h248_serviceChangeResult = -1;      /* ServiceChangeResult */
266 static int hf_h248_serviceChangeResParms = -1;    /* ServiceChangeResParm */
267 static int hf_h248_wildcard = -1;                 /* SEQUENCE_OF_WildcardField */
268 static int hf_h248_wildcard_item = -1;            /* WildcardField */
269 static int hf_h248_terminationId = -1;            /* T_terminationId */
270 static int hf_h248_TerminationIDList_item = -1;   /* TerminationID */
271 static int hf_h248_termStateDescr = -1;           /* TerminationStateDescriptor */
272 static int hf_h248_streams = -1;                  /* T_streams */
273 static int hf_h248_mediaDescriptorOneStream = -1;  /* StreamParms */
274 static int hf_h248_mediaDescriptorMultiStream = -1;  /* SEQUENCE_OF_StreamDescriptor */
275 static int hf_h248_mediaDescriptorMultiStream_item = -1;  /* StreamDescriptor */
276 static int hf_h248_streamParms = -1;              /* StreamParms */
277 static int hf_h248_localControlDescriptor = -1;   /* LocalControlDescriptor */
278 static int hf_h248_localDescriptor = -1;          /* LocalRemoteDescriptor */
279 static int hf_h248_remoteDescriptor = -1;         /* LocalRemoteDescriptor */
280 static int hf_h248_sPstatisticsDescriptor = -1;   /* StatisticsDescriptor */
281 static int hf_h248_streamMode = -1;               /* StreamMode */
282 static int hf_h248_reserveValue = -1;             /* BOOLEAN */
283 static int hf_h248_reserveGroup = -1;             /* BOOLEAN */
284 static int hf_h248_lCDpropertyParms = -1;         /* SEQUENCE_OF_PropertyParm */
285 static int hf_h248_lCDpropertyParms_item = -1;    /* PropertyParm */
286 static int hf_h248_propertyName = -1;             /* PropertyName */
287 static int hf_h248_propertyParamValue = -1;       /* SEQUENCE_OF_PropertyID */
288 static int hf_h248_propertyParamValue_item = -1;  /* PropertyID */
289 static int hf_h248_propParm_extraInfo = -1;       /* PropParm_extraInfo */
290 static int hf_h248_propGrps = -1;                 /* SEQUENCE_OF_PropertyGroup */
291 static int hf_h248_propGrps_item = -1;            /* PropertyGroup */
292 static int hf_h248_PropertyGroup_item = -1;       /* PropertyParm */
293 static int hf_h248_tSDpropertyParms = -1;         /* SEQUENCE_OF_PropertyParm */
294 static int hf_h248_tSDpropertyParms_item = -1;    /* PropertyParm */
295 static int hf_h248_tSEventBufferControl = -1;     /* EventBufferControl */
296 static int hf_h248_serviceState = -1;             /* ServiceState */
297 static int hf_h248_muxType = -1;                  /* MuxType */
298 static int hf_h248_termList = -1;                 /* SEQUENCE_OF_TerminationID */
299 static int hf_h248_termList_item = -1;            /* TerminationID */
300 static int hf_h248_nonStandardData = -1;          /* NonStandardData */
301 static int hf_h248_eventList = -1;                /* SEQUENCE_OF_RequestedEvent */
302 static int hf_h248_eventList_item = -1;           /* RequestedEvent */
303 static int hf_h248_eventAction = -1;              /* RequestedActions */
304 static int hf_h248_evParList = -1;                /* SEQUENCE_OF_EventParameter */
305 static int hf_h248_evParList_item = -1;           /* EventParameter */
306 static int hf_h248_secondEvent = -1;              /* SecondEventsDescriptor */
307 static int hf_h248_notifyImmediate = -1;          /* NULL */
308 static int hf_h248_notifyRegulated = -1;          /* RegulatedEmbeddedDescriptor */
309 static int hf_h248_neverNotify = -1;              /* NULL */
310 static int hf_h248_keepActive = -1;               /* BOOLEAN */
311 static int hf_h248_eventDM = -1;                  /* EventDM */
312 static int hf_h248_notifyBehaviour = -1;          /* NotifyBehaviour */
313 static int hf_h248_resetEventsDescriptor = -1;    /* NULL */
314 static int hf_h248_digitMapValue = -1;            /* DigitMapValue */
315 static int hf_h248_secondaryEventList = -1;       /* SEQUENCE_OF_SecondRequestedEvent */
316 static int hf_h248_secondaryEventList_item = -1;  /* SecondRequestedEvent */
317 static int hf_h248_pkgdName = -1;                 /* PkgdName */
318 static int hf_h248_secondaryEventAction = -1;     /* SecondRequestedActions */
319 static int hf_h248_EventBufferDescriptor_item = -1;  /* EventSpec */
320 static int hf_h248_SignalsDescriptor_item = -1;   /* SignalRequest */
321 static int hf_h248_signal = -1;                   /* Signal */
322 static int hf_h248_seqSigList = -1;               /* SeqSigList */
323 static int hf_h248_signalList = -1;               /* SEQUENCE_OF_Signal */
324 static int hf_h248_signalList_item = -1;          /* Signal */
325 static int hf_h248_signalName = -1;               /* SignalName */
326 static int hf_h248_sigType = -1;                  /* SignalType */
327 static int hf_h248_duration = -1;                 /* INTEGER_0_65535 */
328 static int hf_h248_notifyCompletion = -1;         /* NotifyCompletion */
329 static int hf_h248_sigParList = -1;               /* SEQUENCE_OF_SigParameter */
330 static int hf_h248_sigParList_item = -1;          /* SigParameter */
331 static int hf_h248_direction = -1;                /* SignalDirection */
332 static int hf_h248_intersigDelay = -1;            /* INTEGER_0_65535 */
333 static int hf_h248_sigParameterName = -1;         /* SigParameterName */
334 static int hf_h248_value = -1;                    /* SigParamValues */
335 static int hf_h248_extraInfo = -1;                /* T_extraInfo */
336 static int hf_h248_SigParamValues_item = -1;      /* SigParamValue */
337 static int hf_h248_mtl = -1;                      /* SEQUENCE_OF_ModemType */
338 static int hf_h248_mtl_item = -1;                 /* ModemType */
339 static int hf_h248_mpl = -1;                      /* SEQUENCE_OF_PropertyParm */
340 static int hf_h248_mpl_item = -1;                 /* PropertyParm */
341 static int hf_h248_startTimer = -1;               /* INTEGER_0_99 */
342 static int hf_h248_shortTimer = -1;               /* INTEGER_0_99 */
343 static int hf_h248_longTimer = -1;                /* INTEGER_0_99 */
344 static int hf_h248_digitMapBody = -1;             /* IA5String */
345 static int hf_h248_durationTimer = -1;            /* INTEGER_0_99 */
346 static int hf_h248_serviceChangeMethod = -1;      /* ServiceChangeMethod */
347 static int hf_h248_serviceChangeAddress = -1;     /* ServiceChangeAddress */
348 static int hf_h248_serviceChangeVersion = -1;     /* INTEGER_0_99 */
349 static int hf_h248_serviceChangeProfile = -1;     /* ServiceChangeProfile */
350 static int hf_h248_serviceChangeReason = -1;      /* SCreasonValue */
351 static int hf_h248_serviceChangeDelay = -1;       /* INTEGER_0_4294967295 */
352 static int hf_h248_serviceChangeMgcId = -1;       /* MId */
353 static int hf_h248_timeStamp = -1;                /* TimeNotation */
354 static int hf_h248_serviceChangeInfo = -1;        /* AuditDescriptor */
355 static int hf_h248_serviceChangeIncompleteFlag = -1;  /* NULL */
356 static int hf_h248_SCreasonValue_item = -1;       /* SCreasonValueOctetStr */
357 static int hf_h248_timestamp = -1;                /* TimeNotation */
358 static int hf_h248_profileName = -1;              /* IA5String_SIZE_1_67 */
359 static int hf_h248_PackagesDescriptor_item = -1;  /* PackagesItem */
360 static int hf_h248_StatisticsDescriptor_item = -1;  /* StatisticsParameter */
361 static int hf_h248_statName = -1;                 /* StatName */
362 static int hf_h248_statValue = -1;                /* StatValue */
363 static int hf_h248_nonStandardIdentifier = -1;    /* NonStandardIdentifier */
364 static int hf_h248_data = -1;                     /* OCTET_STRING */
365 static int hf_h248_object = -1;                   /* OBJECT_IDENTIFIER */
366 static int hf_h248_h221NonStandard = -1;          /* H221NonStandard */
367 static int hf_h248_experimental = -1;             /* IA5String_SIZE_8 */
368 static int hf_h248_t35CountryCode1 = -1;          /* INTEGER_0_255 */
369 static int hf_h248_t35CountryCode2 = -1;          /* INTEGER_0_255 */
370 static int hf_h248_t35Extension = -1;             /* INTEGER_0_255 */
371 static int hf_h248_manufacturerCode = -1;         /* INTEGER_0_65535 */
372 static int hf_h248_date = -1;                     /* IA5String_SIZE_8 */
373 static int hf_h248_time = -1;                     /* IA5String_SIZE_8 */
374 static int hf_h248_Value_item = -1;               /* OCTET_STRING */
375 static int hf_h248_audit_result = -1;             /* AuditResultV1 */
376 static int hf_h248_contectAuditResult = -1;       /* TerminationID */
377 static int hf_h248_eventParamterName = -1;        /* EventParameterName */
378 static int hf_h248_event_param_value = -1;        /* EventParamValueV1 */
379 static int hf_h248_sig_param_value = -1;          /* SigParamValueV1 */
380 /* named bits */
381 static int hf_h248_T_auditToken_muxToken = -1;
382 static int hf_h248_T_auditToken_modemToken = -1;
383 static int hf_h248_T_auditToken_mediaToken = -1;
384 static int hf_h248_T_auditToken_eventsToken = -1;
385 static int hf_h248_T_auditToken_signalsToken = -1;
386 static int hf_h248_T_auditToken_digitMapToken = -1;
387 static int hf_h248_T_auditToken_statsToken = -1;
388 static int hf_h248_T_auditToken_observedEventsToken = -1;
389 static int hf_h248_T_auditToken_packagesToken = -1;
390 static int hf_h248_T_auditToken_eventBufferToken = -1;
391 static int hf_h248_NotifyCompletion_onTimeOut = -1;
392 static int hf_h248_NotifyCompletion_onInterruptByEvent = -1;
393 static int hf_h248_NotifyCompletion_onInterruptByNewSignalDescr = -1;
394 static int hf_h248_NotifyCompletion_otherReason = -1;
395 static int hf_h248_NotifyCompletion_onIteration = -1;
396
397 /*--- End of included file: packet-h248-hf.c ---*/
398 #line 72 "../../asn1/h248/packet-h248-template.c"
399
400 /* Initialize the subtree pointers */
401 static gint ett_h248 = -1;
402 static gint ett_mtpaddress = -1;
403 static gint ett_packagename = -1;
404 static gint ett_codec = -1;
405 static gint ett_wildcard = -1;
406
407 static gint ett_h248_no_pkg = -1;
408 static gint ett_h248_no_sig = -1;
409 static gint ett_h248_no_evt = -1;
410
411 static int h248_tap = -1;
412
413 static gcp_hf_ett_t h248_arrel = {{-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1}};
414
415
416 /*--- Included file: packet-h248-ett.c ---*/
417 #line 1 "../../asn1/h248/packet-h248-ett.c"
418 static gint ett_h248_MegacoMessage = -1;
419 static gint ett_h248_AuthenticationHeader = -1;
420 static gint ett_h248_Message = -1;
421 static gint ett_h248_T_messageBody = -1;
422 static gint ett_h248_SEQUENCE_OF_Transaction = -1;
423 static gint ett_h248_MId = -1;
424 static gint ett_h248_DomainName = -1;
425 static gint ett_h248_IP4Address = -1;
426 static gint ett_h248_IP6Address = -1;
427 static gint ett_h248_Transaction = -1;
428 static gint ett_h248_TransactionRequest = -1;
429 static gint ett_h248_SEQUENCE_OF_ActionRequest = -1;
430 static gint ett_h248_TransactionPending = -1;
431 static gint ett_h248_TransactionReply = -1;
432 static gint ett_h248_T_transactionResult = -1;
433 static gint ett_h248_SEQUENCE_OF_ActionReply = -1;
434 static gint ett_h248_SegmentReply = -1;
435 static gint ett_h248_TransactionResponseAck = -1;
436 static gint ett_h248_TransactionAck = -1;
437 static gint ett_h248_ErrorDescriptor = -1;
438 static gint ett_h248_ActionRequest = -1;
439 static gint ett_h248_SEQUENCE_OF_CommandRequest = -1;
440 static gint ett_h248_ActionReply = -1;
441 static gint ett_h248_SEQUENCE_OF_CommandReply = -1;
442 static gint ett_h248_ContextRequest = -1;
443 static gint ett_h248_T_topologyReq = -1;
444 static gint ett_h248_SEQUENCE_OF_PropertyParm = -1;
445 static gint ett_h248_SEQUENCE_OF_ContextIDinList = -1;
446 static gint ett_h248_ContextAttrAuditRequest = -1;
447 static gint ett_h248_SEQUENCE_OF_IndAudPropertyParm = -1;
448 static gint ett_h248_SelectLogic = -1;
449 static gint ett_h248_CommandRequest = -1;
450 static gint ett_h248_Command = -1;
451 static gint ett_h248_CommandReply = -1;
452 static gint ett_h248_TopologyRequest = -1;
453 static gint ett_h248_AmmRequest = -1;
454 static gint ett_h248_SEQUENCE_OF_AmmDescriptor = -1;
455 static gint ett_h248_AmmDescriptor = -1;
456 static gint ett_h248_AmmsReply = -1;
457 static gint ett_h248_SubtractRequest = -1;
458 static gint ett_h248_AuditRequest = -1;
459 static gint ett_h248_AuditReply = -1;
460 static gint ett_h248_AuditResult = -1;
461 static gint ett_h248_TermListAuditResult = -1;
462 static gint ett_h248_TerminationAudit = -1;
463 static gint ett_h248_AuditReturnParameter = -1;
464 static gint ett_h248_AuditDescriptor = -1;
465 static gint ett_h248_T_auditToken = -1;
466 static gint ett_h248_SEQUENCE_OF_IndAuditParameter = -1;
467 static gint ett_h248_IndAuditParameter = -1;
468 static gint ett_h248_IndAudMediaDescriptor = -1;
469 static gint ett_h248_IndAudMediaDescriptorStreams = -1;
470 static gint ett_h248_SEQUENCE_OF_IndAudStreamDescriptor = -1;
471 static gint ett_h248_IndAudStreamDescriptor = -1;
472 static gint ett_h248_IndAudStreamParms = -1;
473 static gint ett_h248_IndAudLocalControlDescriptor = -1;
474 static gint ett_h248_IndAudPropertyParm = -1;
475 static gint ett_h248_IndAudLocalRemoteDescriptor = -1;
476 static gint ett_h248_IndAudPropertyGroup = -1;
477 static gint ett_h248_IndAudTerminationStateDescriptor = -1;
478 static gint ett_h248_IndAudEventsDescriptor = -1;
479 static gint ett_h248_IndAudEventBufferDescriptor = -1;
480 static gint ett_h248_IndAudSignalsDescriptor = -1;
481 static gint ett_h248_IndAudSeqSigList = -1;
482 static gint ett_h248_IndAudSignal = -1;
483 static gint ett_h248_IndAudDigitMapDescriptor = -1;
484 static gint ett_h248_IndAudStatisticsDescriptor = -1;
485 static gint ett_h248_IndAudPackagesDescriptor = -1;
486 static gint ett_h248_NotifyRequest = -1;
487 static gint ett_h248_NotifyReply = -1;
488 static gint ett_h248_ObservedEventsDescriptor = -1;
489 static gint ett_h248_SEQUENCE_OF_ObservedEvent = -1;
490 static gint ett_h248_ObservedEvent = -1;
491 static gint ett_h248_SEQUENCE_OF_EventParameter = -1;
492 static gint ett_h248_EventParameter = -1;
493 static gint ett_h248_EventPar_extraInfo = -1;
494 static gint ett_h248_EventParamValues = -1;
495 static gint ett_h248_ServiceChangeRequest = -1;
496 static gint ett_h248_ServiceChangeReply = -1;
497 static gint ett_h248_ServiceChangeResult = -1;
498 static gint ett_h248_TerminationID = -1;
499 static gint ett_h248_SEQUENCE_OF_WildcardField = -1;
500 static gint ett_h248_TerminationIDList = -1;
501 static gint ett_h248_MediaDescriptor = -1;
502 static gint ett_h248_T_streams = -1;
503 static gint ett_h248_SEQUENCE_OF_StreamDescriptor = -1;
504 static gint ett_h248_StreamDescriptor = -1;
505 static gint ett_h248_StreamParms = -1;
506 static gint ett_h248_LocalControlDescriptor = -1;
507 static gint ett_h248_PropertyParm = -1;
508 static gint ett_h248_SEQUENCE_OF_PropertyID = -1;
509 static gint ett_h248_PropParm_extraInfo = -1;
510 static gint ett_h248_LocalRemoteDescriptor = -1;
511 static gint ett_h248_SEQUENCE_OF_PropertyGroup = -1;
512 static gint ett_h248_PropertyGroup = -1;
513 static gint ett_h248_TerminationStateDescriptor = -1;
514 static gint ett_h248_MuxDescriptor = -1;
515 static gint ett_h248_SEQUENCE_OF_TerminationID = -1;
516 static gint ett_h248_EventsDescriptor = -1;
517 static gint ett_h248_SEQUENCE_OF_RequestedEvent = -1;
518 static gint ett_h248_RequestedEvent = -1;
519 static gint ett_h248_RegulatedEmbeddedDescriptor = -1;
520 static gint ett_h248_NotifyBehaviour = -1;
521 static gint ett_h248_RequestedActions = -1;
522 static gint ett_h248_EventDM = -1;
523 static gint ett_h248_SecondEventsDescriptor = -1;
524 static gint ett_h248_SEQUENCE_OF_SecondRequestedEvent = -1;
525 static gint ett_h248_SecondRequestedEvent = -1;
526 static gint ett_h248_SecondRequestedActions = -1;
527 static gint ett_h248_EventBufferDescriptor = -1;
528 static gint ett_h248_EventSpec = -1;
529 static gint ett_h248_SignalsDescriptor = -1;
530 static gint ett_h248_SignalRequest = -1;
531 static gint ett_h248_SeqSigList = -1;
532 static gint ett_h248_SEQUENCE_OF_Signal = -1;
533 static gint ett_h248_Signal = -1;
534 static gint ett_h248_SEQUENCE_OF_SigParameter = -1;
535 static gint ett_h248_NotifyCompletion = -1;
536 static gint ett_h248_SigParameter = -1;
537 static gint ett_h248_T_extraInfo = -1;
538 static gint ett_h248_SigParamValues = -1;
539 static gint ett_h248_ModemDescriptor = -1;
540 static gint ett_h248_SEQUENCE_OF_ModemType = -1;
541 static gint ett_h248_DigitMapDescriptor = -1;
542 static gint ett_h248_DigitMapValue = -1;
543 static gint ett_h248_ServiceChangeParm = -1;
544 static gint ett_h248_SCreasonValue = -1;
545 static gint ett_h248_ServiceChangeAddress = -1;
546 static gint ett_h248_ServiceChangeResParm = -1;
547 static gint ett_h248_ServiceChangeProfile = -1;
548 static gint ett_h248_PackagesDescriptor = -1;
549 static gint ett_h248_PackagesItem = -1;
550 static gint ett_h248_StatisticsDescriptor = -1;
551 static gint ett_h248_StatisticsParameter = -1;
552 static gint ett_h248_NonStandardData = -1;
553 static gint ett_h248_NonStandardIdentifier = -1;
554 static gint ett_h248_H221NonStandard = -1;
555 static gint ett_h248_TimeNotation = -1;
556 static gint ett_h248_Value = -1;
557 static gint ett_h248_AuditReplyV1 = -1;
558 static gint ett_h248_AuditResultV1 = -1;
559 static gint ett_h248_EventParameterV1 = -1;
560 static gint ett_h248_SigParameterV1 = -1;
561
562 /*--- End of included file: packet-h248-ett.c ---*/
563 #line 89 "../../asn1/h248/packet-h248-template.c"
564
565 static dissector_handle_t h248_term_handle;
566 static dissector_table_t subdissector_table;
567
568 static emem_tree_t* msgs = NULL;
569 static emem_tree_t* trxs = NULL;
570 static emem_tree_t* ctxs_by_trx = NULL;
571 static emem_tree_t* ctxs = NULL;
572
573 static gboolean keep_persistent_data = FALSE;
574 static guint    global_udp_port = 2945;
575 static guint    global_tcp_port = 2945;
576 static gboolean h248_desegment = TRUE;
577
578
579
580 static proto_tree *h248_tree;
581 static tvbuff_t* h248_tvb;
582
583 static dissector_handle_t h248_handle;
584 static dissector_handle_t h248_term_handle;
585 static dissector_handle_t h248_tpkt_handle;
586
587 /* Forward declarations */
588 static int dissect_h248_ServiceChangeReasonStr(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
589
590 /* h248v1 support */
591 static int dissect_h248_AuditReplyV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
592
593 static int dissect_h248_EventParameterV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
594 static int dissect_h248_SigParameterV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
595 static int dissect_h248_SigParamValueV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
596 static int dissect_h248_ValueV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
597 #if 0
598 static const value_string context_id_type[] = {
599     {NULL_CONTEXT,"0 (Null Context)"},
600     {CHOOSE_CONTEXT,"$ (Choose Context)"},
601     {ALL_CONTEXTS,"* (All Contexts)"},
602     {0,NULL}
603 };
604 #endif
605
606 /* the following value_strings are used to build defalut packages.
607    To add additional detail to a package, build a register a h248_package_t structure
608  */
609
610 static const value_string base_package_name_vals[] = {
611     {   0x0000, "Media stream properties H.248.1 Annex C" },
612     {   0x0001, "Generic H.248.1 Annex E" },
613     {   0x0002, "root H.248.1 Annex E" },
614     {   0x0003, "tonegen H.248.1 Annex E" },
615     {   0x0004, "tonedet H.248.1 Annex E" },
616     {   0x0005, "dg H.248.1 Annex E" },
617     {   0x0006, "dd H.248.1 Annex E" },
618     {   0x0007, "cg H.248.1 Annex E" },
619     {   0x0008, "cd H.248.1 Annex E" },
620     {   0x0009, "al H.248.1 Annex E" },
621     {   0x000a, "ct H.248.1 Annex E" },
622     {   0x000b, "nt H.248.1 Annex E" },
623     {   0x000c, "rtp H.248.1 Annex E" },
624     {   0x000d, "tdmc H.248.1 Annex E" },
625     {   0x000e, "ftmd H.248.1 Annex E" },
626     {   0x000f, "txc H.248.2" },                                          /* H.248.2 */
627     {   0x0010, "txp H.248.2" },
628     {   0x0011, "ctyp H.248.2" },
629     {   0x0012, "fax H.248.2" },
630     {   0x0013, "ipfax H.248.2" },
631     {   0x0014, "dis H.248.3" },                                          /* H.248.3 */
632     {   0x0015, "key H.248.3" },
633     {   0x0016, "kp H.248.3" },
634     {   0x0017, "labelkey H.248.3" },
635     {   0x0018, "kf H.248.3" },
636     {   0x0019, "ind H.248.3" },
637     {   0x001a, "ks H.248.3" },
638     {   0x001b, "anci H.248.3" },
639     {   0x001c, "dtd H.248.6" },                                              /* H.248.6 */
640     {   0x001d, "an H.248.7" },                                               /* H.248.7 */
641     {   0x001e, "Bearer Characteristics Q.1950 Annex A" },                    /* Q.1950 Annex A */
642     {   0x001f, "Bearer Network Connection Cut Q.1950 Annex A" },
643     {   0x0020, "Reuse Idle Q.1950 Annex A" },
644     {   0x0021, "Generic Bearer Connection Q.1950 Annex A" },
645     {   0x0022, "Bearer Control Tunnelling Q.1950 Annex A" },
646     {   0x0023, "Basic Call Progress Tones Q.1950 Annex A" },
647     {   0x0024, "Expanded Call Progress Tones Q.1950 Annex A" },
648     {   0x0025, "Basic Services Tones Q.1950 Annex A" },
649     {   0x0026, "Expanded Services Tones Q.1950 Annex A" },
650     {   0x0027, "Intrusion Tones Q.1950 Annex A" },
651     {   0x0028, "Business Tones Q.1950 Annex A" },
652     {   0x0029, "Media Gateway Resource Congestion Handling H.248.10" },      /* H.248.10 */
653     {   0x002a, "H245 package H248.12" },                                     /* H.248.12 */
654     {   0x002b, "H323 bearer control package H.248.12" },                     /* H.248.12 */
655     {   0x002c, "H324 package H.248.12" },                                    /* H.248.12 */
656     {   0x002d, "H245 command package H.248.12" },                            /* H.248.12 */
657     {   0x002e, "H245 indication package H.248.12" },                         /* H.248.12 */
658     {   0x002f, "3G User Plane" },                                            /* 3GPP TS 29.232 v4.1.0 */
659     {   0x0030, "3G Circuit Switched Data" },
660     {   0x0031, "3G TFO Control" },
661     {   0x0032, "3G Expanded Call Progress Tones" },
662     {   0x0033, "Advanced Audio Server (AAS Base)" },                         /* H.248.9 */
663     {   0x0034, "AAS Digit Collection" },                                     /* H.248.9 */
664     {   0x0035, "AAS Recording" },                                            /* H.248.9 */
665     {   0x0036, "AAS Segment Management" },                                   /* H.248.9 */
666     {   0x0037, "Quality Alert Ceasing" },                                    /* H.248.13 */
667     {   0x0038, "Conferencing Tones Generation" },                            /* H.248.27 */
668     {   0x0039, "Diagnostic Tones Generation" },                              /* H.248.27 */
669     {   0x003a, "Carrier Tones Generation Package H.248.23" },                /* H.248.27 */
670     {   0x003b, "Enhanced Alerting Package H.248.23" },                       /* H.248.23 */
671     {   0x003c, "Analog Display Signalling Package H.248.23" },               /* H.248.23 */
672     {   0x003d, "Multi-Frequency Tone Generation Package H.248.24" },         /* H.248.24 */
673     {   0x003e, "H.248.23Multi-Frequency Tone Detection Package H.248.24" },  /* H.248.24 */
674     {   0x003f, "Basic CAS Package H.248.25" },                               /* H.248.25 */
675     {   0x0040, "Robbed Bit Signalling Package H.248.25" },                   /* H.248.25 */
676     {   0x0041, "Operator Services and Emergency Services Package H.248.25" },
677     {   0x0042, "Operator Services Extension Package H.248.25" },
678     {   0x0043, "Extended Analog Line Supervision Package H.248.26" },
679     {   0x0044, "Automatic Metering Package H.248.26" },
680     {   0x0045, "Inactivity Timer Package H.248.14" },
681     {   0x0046, "3G Modification of Link Characteristics Bearer Capability" }, /* 3GPP TS 29.232 v4.4.0 */
682     {   0x0047, "Base Announcement Syntax H.248.9" },
683     {   0x0048, "Voice Variable Syntax H.248.9" },
684     {   0x0049, "Announcement Set Syntax H.248.9" },
685     {   0x004a, "Phrase Variable Syntax H.248.9" },
686     {   0x004b, "Basic NAS package" },
687     {   0x004c, "NAS incoming package" },
688     {   0x004d, "NAS outgoing package" },
689     {   0x004e, "NAS control package" },
690     {   0x004f, "NAS root package" },
691     {   0x0050, "Profile Handling Package H.248.18" },
692     {   0x0051, "Media Gateway Overload Control Package H.248.11" },
693     {   0x0052, "Extended DTMF Detection Package H.248.16" },
694     {   0x0053, "Quiet Termination Line Test" },
695     {   0x0054, "Loopback Line Test Response" },                              /* H.248.17 */
696     {   0x0055, "ITU 404Hz Line Test" },                                      /* H.248.17 */
697     {   0x0056, "ITU 816Hz Line Test" },                                      /* H.248.17 */
698     {   0x0057, "ITU 1020Hz Line Test" },                                     /* H.248.17 */
699     {   0x0058, "ITU 2100Hz Disable Tone Line Test" },                        /* H.248.17 */
700     {   0x0059, "ITU 2100Hz Disable Echo Canceller Tone Line Test" },         /* H.248.17 */
701     {   0x005a, "ITU 2804Hz Tone Line Test" },                                /* H.248.17 */
702     {   0x005b, "ITU Noise Test Tone Line Test" },                            /* H.248.17 */
703     {   0x005c, "ITU Digital Pseudo Random Test Line Test" },                 /* H.248.17 */
704     {   0x005d, "ITU ATME No.2 Test Line Response" },                         /* H.248.17 */
705     {   0x005e, "ANSI 1004Hz Test Tone Line Test" },                          /* H.248.17 */
706     {   0x005f, "ANSI Test Responder Line Test" },                            /* H.248.17 */
707     {   0x0060, "ANSI 2225Hz Test Progress Tone Line Test" },                 /* H.248.17 */
708     {   0x0061, "ANSI Digital Test Signal Line Test" },                       /* H.248.17 */
709     {   0x0062, "ANSI Inverting Loopback Line Test Response" },               /* H.248.17 */
710     {   0x0063, "Extended H.324 Packages H.248.12 Annex A" },
711     {   0x0064, "Extended H.245 Command Package H.248.12 Annex A" },
712     {   0x0065, "Extended H.245 Indication Package H.248.12 Annex A" },
713     {   0x0066, "Enhanced DTMF Detection Package H.248.16" },
714     {   0x0067, "Connection Group Identity Package Q.1950 Annex E" },
715     {   0x0068, "CTM Text Transport 3GPP TS 29.232 v5.2.0" },
716     {   0x0069, "SPNE Control Package Q.115.0" },
717     {   0x006a, "Semi-permanent Connection Package H.248.21" },
718     {   0x006b, "Shared Risk Group Package H.248.22" },
719     {   0x006c, "isuptn Annex B of ITU-T Rec. J.171" },
720     {   0x006d, "Basic CAS Addressing Package H.248.25" },
721     {   0x006e, "Floor Control Package H.248.19" },
722     {   0x006f, "Indication of Being Viewed Package H.248.19" },
723     {   0x0070, "Volume Control Package H.248.19" },
724     {   0x0071, "UNASSIGNED" },
725     {   0x0072, "Volume Detection Package H.248.19" },
726     {   0x0073, "Volume Level Mixing Package H.248.19" },
727     {   0x0074, "Mixing Volume Level Control Package H.248.19" },
728     {   0x0075, "Voice Activated Video Switch Package H.248.19" },
729     {   0x0076, "Lecture Video Mode Package H.248.19" },
730     {   0x0077, "Contributing Video Source Package H.248.19" },
731     {   0x0078, "Video Window Package H.248.19" },
732     {   0x0079, "Tiled Window Package H.248.19" },
733     {   0x007a, "Adaptive Jitter Buffer Package H.248.31" },
734     {   0x007b, "International CAS Package H.248.28" },
735     {   0x007c, "CAS Blocking Package H.248.28" },
736     {   0x007d, "International CAS Compelled Package H.248.29" },
737     {   0x007e, "International CAS Compelled with Overlap Package H.248.29" },
738     {   0x007f, "International CAS Compelled with End-to-end Package H.248.29" },
739     {   0x0080, "RTCP XR Package H.248.30" },
740     {   0x0081, "RTCP XR Burst Metrics Package H.248.30" },
741     {   0x0082, "threegcsden 3G Circuit Switched Data" },                     /* 3GPP TS 29.232 v5.6.0 */
742     {   0x0083, "threegiptra 3G Circuit Switched Data" },                     /* 3GPP TS 29.232 v5.6.0 */
743     {   0x0084, "threegflex 3G Circuit Switched Data" },                      /* 3GPP TS 29.232 v5.6.0 */
744     {   0x0085, "H.248 PCMSB" },
745     {   0x008a, "TIPHON Extended H.248/MEGACO Package" },                     /* ETSI specification TS 101 3 */
746     {   0x008b, "Differentiated Services Package" },                          /* Annex A of ETSI TS 102 333 */
747     {   0x008c, "Gate Management Package" },                                  /* Annex B of ETSI TS 102 333 */
748     {   0x008d, "Traffic Management Package" },                               /* Annex C of ETSI TS 102 333 */
749     {   0x008e, "Gate Recovery Information Package" },                        /* Annex D of ETSI TS 102 333 */
750     {   0x008f, "NAT Traversal Package" },                                    /* Annex E of ETSI TS 102 333 */
751     {   0x0090, "MPLS Package" },                                             /* Annex F of ETSI TS 102 333 */
752     {   0x0091, "VLAN Package" },                                             /* Annex G of ETSI TS 102 333 */
753     {   0x0092, "Detailed Congestion Reporting Package" },                    /* H.248.32 */
754     {   0x0093, "Stimulus Analogue Lines Package" },                          /* H.248.34 */
755     {   0x0094, "icascgen" },                                                 /* H.248.29 Annex B */
756     {   0x0095, "Coin Operated Phone Control Package" },                      /* H.248.35 */
757     {   0x0096, "Metering Pulse Detection Package" },                         /* H.248.26 Amendment 1 */
758     {   0x0097, "Trace Package" },                                            /* 3GPP TS 29.232 v6.3.0 */
759     {   0x0098, "Hanging Termination Package" },                              /* H.248.36 */
760     {   0x0099, "IP NAPT Traversal Package" },                                /* H.248.37 */
761     {   0x009a, "Notification Behaviour Package" },                           /* H.248.1v3 */
762     {   0x009b, "Base Context Package" },                                     /* H.248.38 */
763     {   0x009c, "Application Data Inactivity Detection Package" },            /* H.248.40 */
764     {   0x009d, "Domain Connection Package " },                               /* H.248.41 */
765     {   0x009e, "Digital Circuit Multiplication Equipment Package" },         /* H.248.42 */
766     {   0x009f, "Multi-level Precedence and Pre-emption Package" },           /* H.248.44 */
767     {   0x00a0, "MGC Information Package" },                                  /* H.248.45 */
768     {   0x00a1, "Text Overlay Package" },                                     /* H.248.19 Amendment 1 */
769     {   0x00a2, "Border and Background Package" },                            /* H.248.19 Amendment 1 */
770     {   0x00a3, "Segmentation Package" },                                     /* H.248.1v3 */
771     {   0x00a4, "ETSI notification behaviour package" },                      /* ETSI ES 283 039-3 */
772     {   0x00a5, "ETSI notification rate package" },                           /* ETSI ES 283 039-4 */
773     {   0x00a6, "Automatic Speech Recognition Package" },                     /* H.248.9 Amendment 1 */
774     {   0x00a7, "Set extension to basic syntax for TTS enhancement Package" },/* H.248.9 Amendment 1 */
775     {   0x00a8, "Advanced audio server base package for TTS enhancement" },   /* H.248.9 Amendment 1 */
776     {   0x00a9, "Multimedia Play Package" },                                  /* H.248.9 Amendment 1 */
777     {   0x00aa, "Floor Status Detection Package" },                           /* H.248.19 Amendment 2 */
778     {   0x00ab, "Floor Control Policy Package" },                             /* H.248.19 Amendment 2 */
779     {   0x00ac, "Address Reporting Package" },                                /* H.248.37 Amendment 1 */
780     {   0x00ad, "Connection Capability Control Package" },                    /* H.248.46 */
781     {   0x00ae, "Statistic Conditional Reporting Package" },                  /* H.248.47 Amendment 1 */
782     {   0x00af, "RTCP HR QoS Statistics Package" },                           /* H.248.48 */
783     {   0x00b0, "Received RTCP XR Package" },                                 /* H.248.30 (01/2007) */
784     {   0x00b1, "Received RTCP XR Burst Metrics Package" },                   /* H.248.30 (01/2007) */
785     {   0x00b2, "ASCI Group call package" },                                  /* 3GPP TS 29.232 v7.4.0 */
786     {   0x00b3, "Multimedia Recording Package" },                             /* H.248.9 Amendment 1 */
787     {   0x00b4, "H.245 Transport Package" },                                  /* H.248.12 Amendment 2 */
788     {   0x00b5, "RTCP Handling package" },                                    /* H.248.57 */
789     {   0x00b6, "Gate Management - Outgoing Destination Address/Port Filtering Package" },/* H.248.43 */
790     {   0x00b7, "Gate Management - Incoming Protocol Filtering Package" },    /* H.248.43 */
791     {   0x00b8, "Gate Management - Outgoing Protocol Filtering Package" },    /* H.248.43 */
792     {   0x00b9, "Gate Management - Incoming Filtering Behaviour Package" },   /* H.248.43 */
793     {   0x00ba, "Gate Management - Outgoing Filtering Behaviour Package" },   /* H.248.43 */
794     {   0x00bb, "Session Description Protocol RFC Package" },                 /* H.248.49 */
795     {   0x00bc, "Session Description Protocol Capabilities Package" },        /* H.248.49 */
796     {   0x00bd, "NAT Traversal Toolkit - STUN Base Package" },                /* H.248.50 */
797     {   0x00be, "NAT Traversal Toolkit - MG STUN Client Package" },           /* H.248.50 */
798     {   0x00bf, "NAT Traversal Toolkit - MG TURN Client Package" },           /* H.248.50 */
799     {   0x00c0, "NAT Traversal Toolkit - MGC STUN Client Package" },          /* H.248.50 */
800     {   0x00c1, "NAT Traversal Toolkit - STUN Information Package" },         /* H.248.50 */
801     {   0x00c2, "NAT Traversal Toolkit - MG Act-as STUN Server Package" },    /* H.248.50 */
802     {   0x00c3, "NAT Traversal Toolkit - Originate STUN Continuity Check Package" },  /* H.248.50 */
803     {   0x00c4, "NAT Traversal Toolkit - MGC Originated STUN Request Package" },      /* H.248.50 */
804     {   0x00c5, "NAT Traversal Toolkit - RTP NOOP Request Package" },         /* H.248.50 */
805     {   0x00c6, "Termination Connection Model Package" },                     /* H.248.51 */
806     {   0x00c7, "QoS Class Package" },                                        /* H.248.52 */
807     {   0x00c8, "Traffic Policing Statistics Package" },                      /* H.248.53 */
808     {   0x00c9, "Packet Size Package" },                                      /* H.248.53 */
809     {   0x00ca, "Pull Mode Package" },                                        /* H.248.55 */
810     {   0x00cb, "RTP Application Data Package" },                             /* H.248.58 */
811     {   0x00cc, "Event Timestamp Notification Package" },                     /* H.248.59 */
812     {   0x00cd, "Resource Management Rules Package" },                        /* H.248.63 */
813     {   0x00ce, "Resource Management Configuration Package" },                /* H.248.63 */
814     {   0x00cf, "Abstract Resource Management Packages" },                    /* H.248.63 */
815     {   0x00d0, "IP layer octets count statistics Package" },                 /* H.248.61 */
816     {   0x00d1, "Content of Communication Identity Package" },                /* H.248.60 */
817     {   0x00d2, "RSVP extension package" },                                   /* H.248.65 */
818     {   0x00d3, "GCP Transport Mode Indication Package" },                    /* H.248.67 */
819     {   0x00d4, "IP Router Package" },                                        /* H.248.64 */
820     {   0x00d5, "Media Resource Identification Package" },                    /* H.248.66 */
821     {   0x00d6, "Range Format Support Package" },                             /* H.248.66 */
822     {   0x00d7, "Media Resource Description Expiry Package" },                /* H.248.66 */
823     {   0x00d8, "Media Block Size Package" },                                 /* H.248.66 */
824     {   0x00d9, "RTSP Media Resource Syntax Package" },                       /* H.248.66 */
825     {   0x00da, "RTSP Play Package" },                                        /* H.248.66 */
826     {   0x00db, "Signal Pause Package" },                                     /* H.248.66 */
827     {   0x00dc, "Data Delivery Speed Adjustme Package" },                     /* H.248.66 */
828     {   0x00dd, "Playback Relative Scale Adjustment Package" },               /* H.248.66 */
829     {   0x00de, "RTP Information Package" },                                  /* H.248.66 */
830     {   0x00df, "RTP Interleaving Package" },                                 /* H.248.66 */
831     {   0x00e0, "IP Realm Availability Package" },                            /* H.248.41 Amendment 1 */
832     {   0x00e1, "General IP Header QoS Octet Package" },                      /* H.248.52  */
833     {   0x00e2, "Re-answer Package" },                                        /* H.248.62  */
834     {   0x00e3, "3G Interface Type package" },                                /* 3GPP TS 29.232 v8.4.0 */
835     {   0x00e4, "Latch Statistics Package" },                                 /* H.248.37 */
836     {   0x00e5, "Floor Control Signalling Package" },                         /* H.248.19 Amendment 2 */
837     {   0x00e6, "Include Participant in Mix Package" },                       /* H.248.19 Amendment 2 */
838     {   0x00e7, "Speaker Reporting Package" },                                /* H.248.19 Amendment 2 */
839     {   0x00e8, "IP Layer Packet Count Statistics Package" },                 /* H.248.61 */
840     {   0x00e9, "Removal of Digits and Tones Package" },                      /* H.248.68 */
841     {   0x00ea, "MSRP Statistics Package" },                                  /* H.248.69 */
842     {   0x00eb, "MSRP Connection Status Package" },                           /* H.248.69 */
843     {   0x00ec, "Play Message Package" },                                     /* H.248.69 */
844     {   0x00ed, "Delete Stored Message Package" },                            /* H.248.69 */
845     {   0x00ee, "Message Session Information Package" },                      /* H.248.69 */
846     {   0x00ef, "Message Filtering Package" },                                /* H.248.69 */
847     {   0x00f0, "Stored Message Information Package" },                       /* H.248.69 */
848     {   0x00f1, "Record Message Package" },                                   /* H.248.69 */
849     {   0x00f2, "Digit Dialling Method Information Package" },                /* H.248.70 */
850     {   0x00f3, "Digit Dialling Method Information for Extended Digitmap Detection Package" }, /* H.248.70 */
851     {   0x00f4, "Digit Dialling Method Information for Enhanced Digitmap Detection Package" }, /* H.248.70 */
852     {   0x00f5, "Received RTCP Package " },                                   /* H.248.71 */
853     {   0x00f6, "RTP Cumulative Loss Package" },                              /* H.248.71 */
854     {   0x00f7, "H.245 Transport Package for SPC use" },                      /* H.248.72 */
855     {   0x00f8, "MONA Preference Package" },                                  /* H.248.72 */
856     {   0x00f9, "TDM Gain Control Package" },                                 /* H.248.73 */
857     {   0x00fa, "Media Start Package" },                                      /* H.248.74 */
858     {   0x00fb, "Trim Package" },                                             /* H.248.74 */
859     {   0x00fc, "Enhanced Recording Package" },                               /* H.248.74 */
860     {   0x00fd, "Enhanced ASR Package" },                                     /* H.248.74      */
861     {   0x00fe, "Enhanced TTS Package" },                                     /* H.248.74 */
862     {   0x00ff, "Play Offset Control Package" },                              /* H.248.74 */
863     {   0x0100, "Enhanced DTMF Detection Package" },                          /* H.248.9 Revised 2009 */
864     {   0x0101, "IP Router NAT Package" },                                    /* H.248.64 */
865     {   0x0102, "Voice Enrolled Grammar Package" },                           /* H.248.74 */
866     {   0x0103, "Filter Group Package" },                                     /* H.248.76 */
867     {   0x0104, "RTCP Source Description Package" },                          /* H.248.71 */
868     {   0x0105, "Speaker Verification and Identification Package" },          /* H.248.74 */
869     {   0x0106, "Package Identifier Publishing and Application Package" },    /* H.248 */
870     {   0x0107, "Secure RTP Package " },                                      /* H.248.77 */
871     {   0x0108, "MGC Controlled Bearer Level ALG Package" },                  /* H.248.78 */
872     {   0x0109, "Enhanced Revised Offer/Answer SDP Support Package" },        /* H.248.80 */
873     {   0x010a, "Enhanced SDP Media Capabilities Negotiation Support Package" }, /* H.248.80 */
874     {   0x8000, "Ericsson IU" },
875     {   0x8001, "Ericsson UMTS and GSM Circuit" },
876     {   0x8002, "Ericsson Tone Generator Package" },
877     {   0x8003, "Ericsson Line Test Package" },
878     {   0x8004, "Nokia Advanced TFO Package" },
879     {   0x8005, "Nokia IWF Package" },
880     {   0x8006, "Nokia Root Package" },
881     {   0x8007, "Nokia Trace Package" },
882     {   0x8008, "Ericsson  V5.2 Layer" },
883     {   0x8009, "Ericsson Detailed Termination Information Package" },
884     {   0x800a, "Nokia Bearer Characteristics Package" },
885     {   0x800b, "Nokia Test Call Package" },
886     {   0x800c, "Nokia Extended Continuity Package" },
887     {   0x800d, "Nokia IPnwR Package" },
888     {   0x800e, "Ericsson Tracing Enhancements Package" },
889     {   0x800f, "Ericsson Partially Wildcarded TerminationID Package" },
890     {   0x8010, "SCTP Stream Handling Package" },
891     {0,     NULL}
892 };
893
894 /*
895  * This table consist of PackageName + EventName and its's corresponding string
896  *
897  */
898 static const value_string base_event_name_vals[] = {
899     {   0x00000000, "Media stream properties H.248.1 Annex C" },
900     {   0x00010000, "g H.248.1 Annex E" },
901     {   0x00010001, "g/Cause" },
902     {   0x00010002, "g/Signal Completion" },
903     {   0x00040000, "tonedet H.248.1 Annex E" },
904     {   0x00040001, "tonedet/std(Start tone detected)" },
905     {   0x00040002, "tonedet/etd(End tone detected)" },
906     {   0x00040003, "tonedet/ltd(Long tone detected)" },
907     {   0x00060000, "dd H.248.1 Annex E" },
908     {   0x00060001, "dd/std" },
909     {   0x00060002, "dd/etd" },
910     {   0x00060003, "dd/ltd" },
911     {   0x00060004, "dd, DigitMap Completion Event" },
912     {   0x00060010, "dd/d0, DTMF character 0" },
913     {   0x00060011, "dd/d1, DTMF character 1" },
914     {   0x00060012, "dd/d2, DTMF character 2" },
915     {   0x00060013, "dd/d3, DTMF character 3" },
916     {   0x00060014, "dd/d4, DTMF character 4" },
917     {   0x00060015, "dd/d5, DTMF character 5" },
918     {   0x00060016, "dd/d6, DTMF character 6" },
919     {   0x00060017, "dd/d7, DTMF character 7" },
920     {   0x00060018, "dd/d8, DTMF character 8" },
921     {   0x00060019, "dd/d9, DTMF character 9" },
922     {   0x0006001a, "dd/a, DTMF character A" },
923     {   0x0006001b, "dd/b, DTMF character B" },
924     {   0x0006001c, "dd/c, DTMF character C" },
925     {   0x0006001d, "dd/d, DTMF character D" },
926     {   0x00060020, "dd/*, DTMF character *" },
927     {   0x00060021, "dd/#, DTMF character #" },
928     {   0x00080030, "cd, Dial Tone" },
929     {   0x00080031, "cd, Ringing Tone" },
930     {   0x00080032, "cd, Busy Tone" },
931     {   0x00080033, "cd, Congestion Tone" },
932     {   0x00080034, "cd, Special Information Tone" },
933     {   0x00080035, "cd, (Recording) Warning Tone" },
934     {   0x00080036, "cd, Payphone Recognition Tone" },
935     {   0x00080037, "cd, Call Waiting Tone" },
936     {   0x00080038, "cd, Caller Waiting Tone" },
937     {   0x00090004, "al, onhook" },
938     {   0x00090005, "al, offhook" },
939     {   0x00090006, "al, flashhook" },
940     {   0x0009ffff, "al, *" },
941     {   0x000a0005, "ct, Completion of Continuity test" },
942     {   0x000b0005, "nt, network failure" },
943     {   0x000b0006, "nt, quality alert" },
944     {   0x000c0001, "rtp, Payload Transition" },
945     {   0x00210000, "Generic Bearer Connection Q.1950 Annex A" },
946     {   0x00210001, "GB/BNCChange" },
947     {   0x00220001, "BT/TIND (Tunnel Indication)" },
948     {   0x002a0001, "H.245/h245msg (Incoming H.245 Message)" },
949     {   0x002a0004, "H.245/h245ChC (H.245 Channel Closed)" },
950     {   0x00450000, "Inactivity Timer H.248.14" },
951     {   0x00450001, "it/ito" },
952     {   0x00450002, "it/ito" },
953     {   0x00460001, "threegmlc/mod_link_supp (Bearer Modification Support Event)" },
954     {   0x00980000, "Hanging Termination Package" },
955     {   0x00980001, "Termination Heartbeat" },
956     {   0x800a0000, "Nokia Bearer Characteristics Package" },
957     {0,     NULL}
958 };
959
960 /*
961  * This table consist of PackageName + SignalName and its's corresponding string
962  */
963 static const value_string base_signal_name_vals[] = {
964     {   0x00000000, "Media stream properties H.248.1 Annex C" },
965     {   0x00010000, "g H.248.1 Annex E" },
966     {   0x00030001, "tonegen/pt(Play tone)" },
967     {   0x00050010, "dg, DTMF character 0" },
968     {   0x00050011, "dg, DTMF character 1" },
969     {   0x00050012, "dg, DTMF character 2" },
970     {   0x00050013, "dg, DTMF character 3" },
971     {   0x00050014, "dg, DTMF character 4" },
972     {   0x00050015, "dg, DTMF character 5" },
973     {   0x00050016, "dg, DTMF character 6" },
974     {   0x00050017, "dg, DTMF character 7" },
975     {   0x00050018, "dg, DTMF character 8" },
976     {   0x00050019, "dg, DTMF character 9" },
977     {   0x0005001a, "dg, DTMF character A" },
978     {   0x0005001b, "dg, DTMF character B" },
979     {   0x0005001c, "dg, DTMF character C" },
980     {   0x0005001d, "dg, DTMF character D" },
981     {   0x00050020, "dg, DTMF character *" },
982     {   0x00050021, "dg, DTMF character #" },
983     {   0x00070030, "cg, Dial Tone" },
984     {   0x00070031, "cg/rt (Ringing Tone)" },
985     {   0x00070032, "cg, Busy Tone" },
986     {   0x00070033, "cg, Congestion Tone" },
987     {   0x00070034, "cg, Special Information Tone" },
988     {   0x00070035, "cg, (Recording) Warning Tone" },
989     {   0x00070036, "cg, Payphone Recognition Tone" },
990     {   0x00070037, "cg, Call Waiting Tone" },
991     {   0x00070038, "cg, Caller Waiting Tone" },
992     {   0x00090002, "al, ring" },
993     {   0x0009ffff, "al, *" },
994     {   0x000a0003, "ct, Continuity test" },
995     {   0x000a0004, "ct, Continuity respond" },
996     {   0x00210000, "GB Generic Bearer Connection Q.1950 Annex A" },
997     {   0x00210001, "GB/EstBNC(Establish BNC)" },
998     {   0x00210002, "GB/ModBNC (Modify BNC)" },
999     {   0x00210003, "GB/RelBNC(Release BNC)" },
1000     {   0x002a0001, "H.245/cs (channel state)" },
1001     {   0x002a0002, "H.245/termtype (Terminal Type)" },
1002     {   0x002c0001, "H.324/cmod (Communication mode)" },
1003     {   0x002c0002, "H.324/muxlv (Highest Multiplexing level)" },
1004     {   0x002c0003, "H.324/demux (Demultiplex)" },
1005     {   0x002c0004, "H.324/h223capr (Remote H.223 capability)" },
1006     {   0x002c0005, "H.324/muxtbl_in (Incoming Multiplex Table)" },
1007     {   0x002c0006, "H.324/muxtbl_out (Outgoing Multiplex Table)" },
1008     {   0x800a0000, "Nokia Bearer Characteristics Package" },
1009     {0,     NULL}
1010 };
1011
1012
1013 static const value_string h248_reasons[] = {
1014     { 400, "Syntax error in message"},
1015     { 401, "Protocol Error"},
1016     { 402, "Unauthorized"},
1017     { 403, "Syntax error in transaction request"},
1018     { 406, "Version Not Supported"},
1019     { 410, "Incorrect identifier"},
1020     { 411, "The transaction refers to an unknown ContextId"},
1021     { 412, "No ContextIDs available"},
1022     { 413, "Number of transactions in message exceeds maximum"},    /* [H.248.8 (08/07)] */
1023     { 421, "Unknown action or illegal combination of actions"},
1024     { 422, "Syntax Error in Action"},
1025     { 430, "Unknown TerminationID"},
1026     { 431, "No TerminationID matched a wildcard"},
1027     { 432, "Out of TerminationIDs or No TerminationID available"},
1028     { 433, "TerminationID is already in a Context"},
1029     { 434, "Max number of Terminations in a Context exceeded"},
1030     { 435, "Termination ID is not in specified Context"},
1031     { 440, "Unsupported or unknown Package"},
1032     { 441, "Missing Remote or Local Descriptor"},
1033     { 442, "Syntax Error in Command"},
1034     { 443, "Unsupported or Unknown Command"},
1035     { 444, "Unsupported or Unknown Descriptor"},
1036     { 445, "Unsupported or Unknown Property"},
1037     { 446, "Unsupported or Unknown Parameter"},
1038     { 447, "Descriptor not legal in this command"},
1039     { 448, "Descriptor appears twice in a command"},
1040     { 449, "Unsupported or Unknown Parameter or Property Value"},
1041     { 450, "No such property in this package"},
1042     { 451, "No such event in this package"},
1043     { 452, "No such signal in this package"},
1044     { 453, "No such statistic in this package"},
1045     { 454, "No such parameter value in this package"},
1046     { 455, "Property illegal in this Descriptor"},
1047     { 456, "Property appears twice in this Descriptor"},
1048     { 457, "Missing parameter in signal or event"},
1049     { 458, "Unexpected Event/Request ID"},
1050     { 459, "Unsupported or Unknown Profile"},
1051     { 460, "Unable to set statistic on stream"},
1052     { 461, "Unsupported or Unknown Profile"},                               /*[H.248.18] */
1053
1054     { 471, "Implied Add for Multiplex failure"},
1055     { 472, "Required Information Missing"},                                 /*[H.248.8 (08/07)] */
1056     { 473, "Conflicting Property Values"},                                  /*[H.248.8 (08/07)] */
1057     { 474, "Invalid SDP Syntax"},                                           /*[H.248.49] */
1058     { 475, "Unable to pause the playout of the signal"},                    /*[H.248.66] */
1059     { 476, "Unable to adjust the data delivery speed of the Signal"},       /*[H.248.66] */
1060
1061     { 477, "Unable to adjust the playback relative scale of the signal"},   /*[H.248.66] */
1062
1063     { 478, "Behaviour Contradicts Resource Rule"},                          /*[H.248.63] */
1064
1065     { 500, "Internal software Failure in MG"},
1066     { 501, "Not Implemented"},
1067     { 502, "Not ready"},
1068     { 503, "Service Unavailable"},
1069     { 504, "Command Received from unauthorized entity"},
1070     { 505, "Transaction Request Received before a Service Change Reply has been received"},
1071     { 506, "Number of Transaction Pendings Exceeded"},
1072     { 510, "Insufficient resources"},
1073     { 511, "Temporarily Busy"},                                     /* [H.248.8 (08/07)] */
1074     { 512, "Media Gateway unequipped to detect requested Event"},
1075     { 513, "Media Gateway unequipped to generate requested Signals"},
1076     { 514, "Media Gateway cannot send the specified announcement"},
1077     { 515, "Unsupported Media Type"},
1078     { 517, "Unsupported or invalid mode"},
1079     { 518, "Event buffer full"},
1080     { 519, "Out of space to store digit map"},
1081     { 520, "Digit Map undefined in the MG"},
1082     { 521, "Termination is ServiceChangeing"},
1083     { 522, "Functionality Requested in Topology Triple Not Supported"},
1084     { 526, "Insufficient bandwidth"},
1085     { 529, "Internal hardware failure in MG"},
1086     { 530, "Temporary Network failure"},
1087     { 531, "Permanent Network failure"},
1088     { 532, "Audited Property, Statistic, Event or Signal does not exist"},
1089     { 533, "Response exceeds maximum transport PDU size"},
1090     { 534, "Illegal write or read only property"},
1091     { 540, "Unexpected initial hook state"},
1092     { 541, "Unexpected Spare Bit State"},                               /* [H.248.33] */
1093     { 542, "Command is not allowed on this termination"},
1094     { 543, "MGC requested event detection timestamp not supported"},    /* [H.248.8 (08/07)] */
1095     { 581, "Does Not Exist"},
1096     { 600, "Illegal syntax within an announcement specification"},
1097     { 601, "Variable type not supported"},
1098     { 602, "Variable value out of range"},
1099     { 603, "Category not supported"},
1100     { 604, "Selector type not supported"},
1101     { 605, "Selector value not supported"},
1102     { 606, "Unknown segment ID"},
1103     { 607, "Mismatch between play specification and provisioned data"},
1104     { 608, "Provisioning error"},
1105     { 609, "Invalid offset"},
1106     { 610, "No free segment IDs"},
1107     { 611, "Temporary segment not found"},
1108     { 612, "Segment in use"},
1109     { 613, "ISP port limit overrun"},
1110     { 614, "No modems available"},
1111     { 615, "Calling number unacceptable"},
1112     { 616, "Called number unacceptable"},
1113     { 617, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1114     { 618, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1115     { 622, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1116     { 623, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1117     { 624, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1118     { 625, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1119     { 626, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1120     { 627, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1121     { 628, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1122     { 629, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1123     { 700, "Sieve Script Syntax Error"},            /* [H.248.69] */
1124     { 701, "Unsupported Sieve Require Error"},      /* [H.248.69] */
1125     { 702, "Sieve Actions Exceeded Error"},         /* [H.248.69] */
1126
1127     { 900, "Service Restored"},
1128     { 901, "Cold Boot"},
1129     { 902, "Warm Boot"},
1130     { 903, "MGC Directed Change"},
1131     { 904, "Termination malfunctioning"},
1132     { 905, "Termination taken out of service"},
1133     { 906, "Loss of lower layer connectivity (e.g. downstream sync)"},
1134     { 907, "Transmission Failure"},
1135     { 908, "MG Impending Failure"},
1136     { 909, "MGC Impending Failure"},
1137     { 910, "Media Capability Failure"},
1138     { 911, "Modem Capability Failure"},
1139     { 912, "Mux Capability Failure"},
1140     { 913, "Signal Capability Failure"},
1141     { 914, "Event Capability Failure"},
1142     { 915, "State Loss"},
1143     { 916, "Packages Change"},
1144     { 917, "Capabilities Change"},
1145     { 918, "Cancel Graceful"},
1146     { 919, "Warm Failover"},
1147     { 920, "Cold Failover"},
1148     {0,NULL}
1149 };
1150 static value_string_ext h248_reasons_ext = VALUE_STRING_EXT_INIT(h248_reasons);
1151
1152 static const value_string wildcard_modes[] = {
1153     { 0, "Choose" },
1154     { 1, "All" },
1155     { 0, NULL }
1156 };
1157
1158 static const value_string wildcard_levels[] = {
1159     { 0, "This One Level" },
1160     { 1, "This Level and those below" },
1161     { 0, NULL }
1162 };
1163
1164 static h248_curr_info_t curr_info = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
1165 static guint32 error_code;
1166 static guint32 h248_version = 0; /* h248v1 support */
1167 static gcp_wildcard_t wild_term;
1168 static guint8 wild_card = 0xFF; /* place to store wildcardField */
1169
1170 extern void h248_param_ber_integer(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo, int hfid, h248_curr_info_t* u _U_, void* implicit) {
1171     asn1_ctx_t asn1_ctx;
1172     asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1173     dissect_ber_integer(implicit ? *((gboolean*)implicit) : FALSE, &asn1_ctx, tree, tvb, 0, hfid, NULL);
1174 }
1175
1176 extern void h248_param_ber_octetstring(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo, int hfid, h248_curr_info_t* u _U_, void* implicit) {
1177     asn1_ctx_t asn1_ctx;
1178     asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1179         dissect_ber_octet_string(implicit ? *((gboolean*)implicit) : FALSE, &asn1_ctx, tree, tvb, 0, hfid, NULL);
1180 }
1181
1182 extern void h248_param_ber_boolean(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo, int hfid, h248_curr_info_t* u _U_, void* implicit) {
1183     asn1_ctx_t asn1_ctx;
1184     asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1185         dissect_ber_boolean(implicit ? *((gboolean*)implicit) : FALSE, &asn1_ctx, tree, tvb, 0, hfid, NULL);
1186 }
1187
1188 extern void h248_param_bytes_item(proto_tree* tree,
1189                              tvbuff_t* tvb,
1190                              packet_info* pinfo _U_,
1191                              int hfid,
1192                              h248_curr_info_t* h248_info _U_,
1193                              void* lenp ) {
1194     int len = lenp ? *((int*)lenp) : -1;
1195     proto_tree_add_item(tree,hfid,tvb,0,len,ENC_NA);
1196 }
1197
1198 extern void h248_param_uint_item(proto_tree* tree,
1199                                  tvbuff_t* tvb,
1200                                  packet_info* pinfo _U_,
1201                                  int hfid,
1202                                  h248_curr_info_t* h248_info _U_,
1203                                  void* lenp ) {
1204     int len = lenp ? *((int*)lenp) : -1;
1205     proto_tree_add_item(tree,hfid,tvb,0,len,ENC_BIG_ENDIAN);
1206 }
1207
1208 extern void h248_param_external_dissector(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo , int hfid _U_, h248_curr_info_t* u _U_, void* dissector_hdl) {
1209     call_dissector((dissector_handle_t) dissector_hdl,tvb,pinfo,tree);
1210 }
1211
1212
1213 static const h248_package_t no_package = { 0xffff, &hf_h248_no_pkg, &ett_h248_no_pkg, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
1214 static const h248_pkg_sig_t no_signal = { 0, &hf_h248_no_sig, &ett_h248_no_sig, NULL, NULL };
1215 static const h248_pkg_param_t no_param = { 0, &hf_h248_param, h248_param_uint_item,  NULL };
1216 static const h248_pkg_evt_t no_event = { 0, &hf_h248_no_evt, &ett_h248_no_evt, NULL, NULL };
1217
1218 const h248_package_t *find_package_id(guint16 pkgid);
1219 static GTree* packages = NULL;
1220
1221 extern void h248_param_PkgdName(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo , int hfid _U_, h248_curr_info_t* u1 _U_, void* u2 _U_) {
1222     tvbuff_t *new_tvb = NULL;
1223     proto_tree *package_tree=NULL;
1224     guint16 name_major, name_minor;
1225     const h248_package_t* pkg = NULL;
1226     int offset = 0;
1227     asn1_ctx_t asn1_ctx;
1228     asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1229
1230     offset = dissect_ber_octet_string(FALSE, &asn1_ctx, tree, tvb, offset, hfid , &new_tvb);
1231
1232     if (new_tvb) {
1233         /* this field is always 4 bytes  so just read it into two integers */
1234         name_major=tvb_get_ntohs(new_tvb, 0);
1235         name_minor=tvb_get_ntohs(new_tvb, 2);
1236                 pkg = find_package_id(name_major);
1237         /* do the prettification */
1238         proto_item_append_text(asn1_ctx.created_item, "  %s (%04x)",
1239                                val_to_str(0, pkg->param_names, "Unknown Package"),
1240                                name_major);
1241
1242         if(tree){
1243             proto_item* pi;
1244             const gchar* strval;
1245
1246             package_tree = proto_item_add_subtree(asn1_ctx.created_item, ett_packagename);
1247                         proto_tree_add_uint_format(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major,
1248                                 "%s (0x%04x)", val_to_str(0, pkg->param_names, "Unknown Package"), name_major);
1249
1250             pi = proto_tree_add_uint(package_tree, hf_248_pkg_param, tvb, offset-2, 2, name_minor);
1251
1252             if (pkg->signal_names && ( strval = match_strval(name_minor, pkg->signal_names) )) {
1253                 strval = ep_strdup_printf("%s (%d)",strval,name_minor);
1254             } else {
1255                 strval = ep_strdup_printf("Unknown (%d)",name_minor);
1256             }
1257
1258             proto_item_set_text(pi,"Signal ID: %s", strval);
1259         }
1260
1261     }
1262 }
1263
1264
1265 static int dissect_h248_trx_id(gboolean implicit_tag, packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, guint32* trx_id_p) {
1266     guint64 trx_id = 0;
1267     gint8 ber_class;
1268     gboolean pc;
1269     gint32 tag;
1270     guint32 len;
1271     guint32 i;
1272
1273     if(!implicit_tag){
1274         offset=dissect_ber_identifier(pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
1275         offset=dissect_ber_length(pinfo, tree, tvb, offset, &len, NULL);
1276     } else {
1277         len=tvb_length_remaining(tvb, offset);
1278     }
1279
1280
1281     if (len > 8 || len < 1) {
1282         THROW(BoundsError);
1283     } else {
1284         for(i=1;i<=len;i++){
1285             trx_id=(trx_id<<8)|tvb_get_guint8(tvb, offset);
1286             offset++;
1287         }
1288         if (trx_id > 0xffffffff) {
1289             proto_item* pi = proto_tree_add_text(tree, tvb, offset-len, len,"transactionId %" G_GINT64_MODIFIER "u", trx_id);
1290             proto_item_set_expert_flags(pi, PI_MALFORMED, PI_WARN);
1291
1292             *trx_id_p = 0;
1293
1294         } else {
1295             proto_tree_add_uint(tree, hf_h248_transactionId, tvb, offset-len, len, (guint32)trx_id);
1296             *trx_id_p = (guint32)trx_id;
1297         }
1298     }
1299
1300     return offset;
1301 }
1302
1303 static int dissect_h248_ctx_id(gboolean implicit_tag, packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, guint32* ctx_id_p) {
1304     gint8 ber_class;
1305     gboolean pc;
1306     gint32 tag;
1307     guint32 len;
1308     guint64 ctx_id = 0;
1309     guint32 i;
1310
1311     if(!implicit_tag){
1312         offset=dissect_ber_identifier(pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
1313         offset=dissect_ber_length(pinfo, tree, tvb, offset, &len, NULL);
1314     } else {
1315         len=tvb_length_remaining(tvb, offset);
1316     }
1317
1318
1319     if (len > 8 || len < 1) {
1320         THROW(BoundsError);
1321     } else {
1322         for(i=1;i<=len;i++){
1323             ctx_id=(ctx_id<<8)|tvb_get_guint8(tvb, offset);
1324             offset++;
1325         }
1326
1327         if (ctx_id > 0xffffffff) {
1328             proto_item* pi = proto_tree_add_text(tree, tvb, offset-len, len,
1329                                                  "contextId: %" G_GINT64_MODIFIER "u", ctx_id);
1330             proto_item_set_expert_flags(pi, PI_MALFORMED, PI_WARN);
1331
1332             *ctx_id_p = 0xfffffffd;
1333
1334         } else {
1335             proto_item* pi = proto_tree_add_uint(tree, hf_h248_context_id, tvb, offset-len, len, (guint32)ctx_id);
1336
1337             if ( ctx_id ==  NULL_CONTEXT ) {
1338                 proto_item_set_text(pi,"contextId: Null Context(0)");
1339             } else if ( ctx_id ==  CHOOSE_CONTEXT ) {
1340                 proto_item_set_text(pi,"contextId: $ (Choose Context = 0xfffffffe)");
1341             } else if ( ctx_id ==  ALL_CONTEXTS ) {
1342                 proto_item_set_text(pi,"contextId: * (All Contexts = 0xffffffff)");
1343             }
1344
1345             *ctx_id_p = (guint32) ctx_id;
1346         }
1347     }
1348
1349     return offset;
1350 }
1351
1352 s_h248_package_t *s_find_package_id(guint16 pkgid) {
1353         s_h248_package_t *s_pkg = NULL;
1354         s_pkg = g_tree_lookup(packages, GUINT_TO_POINTER((guint32)(pkgid)));
1355         return s_pkg;
1356 }
1357
1358 const h248_package_t *find_package_id(guint16 pkgid) {
1359         s_h248_package_t *s_pkg = NULL;
1360         s_pkg = s_find_package_id(pkgid); /*(packages, GUINT_TO_POINTER((guint32)(pkgid))); */
1361         if (! s_pkg ) return &no_package;
1362         return s_pkg->pkg;
1363 }
1364
1365 static gint32 comparePkgID(gconstpointer a, gconstpointer b) {
1366         return GPOINTER_TO_UINT(b) - GPOINTER_TO_UINT(a);
1367 }
1368
1369 gboolean is_pkg_default(guint16 pkgid) {
1370         s_h248_package_t *s_pkg = NULL;
1371         s_pkg = g_tree_lookup(packages, GUINT_TO_POINTER((guint32)(pkgid)));
1372         if(! s_pkg ) return TRUE;
1373         return s_pkg->is_default;
1374 }
1375
1376 void h248_register_package(const h248_package_t* pkg, pkg_reg_action reg_action) {
1377         h248_package_t *pkg_found = NULL, *pkg_high = NULL, *pkg_low = NULL;
1378         s_h248_package_t *s_pkg = NULL;
1379         value_string *vst; 
1380         gboolean pkg_default = FALSE;
1381         gint j = 0, idx = 0, i = 0, k = 0;
1382     if (! packages) {
1383                 /* no packaegs are yet registerd so create tree and add default packages to tree
1384                  */
1385                 packages = g_tree_new(comparePkgID); /* init tree if no entries */
1386                 while (base_package_name_vals[i].strptr != NULL) {
1387                         pkg_found = g_new0(h248_package_t, 1); /* create a h248 package structure */
1388                         pkg_found->id = base_package_name_vals[i].value;
1389                         vst = g_new0(value_string,2);
1390                         vst[0].strptr = base_package_name_vals[i].strptr;
1391                         pkg_found->param_names = vst;
1392                         pkg_found->hfid = &hf_h248_pkg_name;
1393                         pkg_found->ett = &ett_packagename;
1394                         match_strval_idx((pkg_found->id)<<16,base_event_name_vals, &j);
1395                         /* now look for events and signals that may be defined for package.  If found, create value_strings */
1396                         if (j != -1) {
1397                                 j++; idx=j;
1398                                 while((base_event_name_vals[j].strptr!=NULL) && (((base_event_name_vals[j].value)>>16) == (pkg_found->id))) {
1399                                         j++; 
1400                                 };
1401                                 if (idx < j) {
1402                                         vst = g_new0(value_string,j-idx+1);
1403                                         for (k=0;idx<j;k++) {
1404                                                 vst[k].strptr = base_event_name_vals[idx].strptr;
1405                                                 vst[k].value = (base_event_name_vals[idx].value & 0xffff);
1406                                                 idx++;
1407                                         };
1408                                         pkg_found->event_names = vst;
1409                                 }
1410                         }
1411                         /* now look at signals */
1412                         if (!match_strval_idx((pkg_found->id)<<16, base_signal_name_vals, &j)) {
1413                                 j++; idx=j;
1414                                 while((base_signal_name_vals[j].strptr != NULL) && ((base_signal_name_vals[j].value>>16) == (pkg_found->id))) {
1415                                 };
1416                                 if (idx < j) {
1417                                         vst = g_new0(value_string,j-idx+1);
1418                                         for (k=0;idx<i;k++) {
1419                                                 vst[k].strptr = base_signal_name_vals[idx].strptr;
1420                                                 vst[k].value = (base_signal_name_vals[idx].value &0xffff);
1421                                                 idx++;
1422                                         };
1423                                         pkg_found->signal_names = vst;
1424                                 }
1425                         };
1426                         s_pkg = g_new0(s_h248_package_t,1);
1427                         s_pkg->is_default = TRUE;
1428                         s_pkg->pkg = pkg_found;
1429                         g_tree_insert(packages, GINT_TO_POINTER(pkg_found->id), (gpointer)s_pkg);
1430                         i++;
1431                 };
1432                 pkg_found = NULL; /* reset pointer */
1433         };
1434         pkg_default = is_pkg_default(pkg->id);
1435         if (((reg_action==REPLACE_PKG) || (reg_action==ADD_PKG)) && pkg_default) {
1436                 /* add/replace in tree */
1437                 s_pkg = g_new0(s_h248_package_t,1);
1438                 s_pkg->is_default = FALSE;
1439                 s_pkg->pkg = (h248_package_t *)pkg;
1440                 g_tree_replace(packages, GINT_TO_POINTER(pkg->id), (gpointer)s_pkg);
1441                 return;
1442         };
1443         if(pkg_default) reg_action = MERGE_PKG_HIGH; /* always make new package overide default */
1444         s_pkg = s_find_package_id(pkg->id);
1445         if (s_pkg == NULL) { /* no need to merge - package not in tree */
1446                 s_pkg = g_new0(s_h248_package_t,1);
1447                 s_pkg->is_default = FALSE;
1448                 s_pkg->pkg = (h248_package_t *)pkg;
1449                 g_tree_insert(packages, GINT_TO_POINTER(pkg->id), (gpointer)s_pkg);
1450                 return;
1451         }
1452         pkg_found = s_pkg->pkg;
1453         if (reg_action==MERGE_PKG_HIGH) {
1454                         pkg_high = (h248_package_t *)pkg;
1455                         pkg_low = pkg_found;
1456         };
1457         if (reg_action==MERGE_PKG_LOW) {
1458                         pkg_high = pkg_found;
1459                         pkg_low = (h248_package_t *)pkg;
1460         };
1461         /* if h248_package_t High Priority value !NULL, replace it in the found tree entry else use current entry */
1462         (pkg_high->hfid ? (pkg_found->hfid=pkg_high->hfid) : (pkg_found->hfid=pkg_low->hfid));
1463         (pkg_high->ett ? (pkg_found->ett=pkg_high->ett ):( pkg_found->ett=pkg_low->ett));
1464         (pkg_high->param_names ? (pkg_found->param_names=pkg_high->param_names ):( pkg_found->param_names=pkg_low->param_names));
1465         (pkg_high->signal_names ? (pkg_found->signal_names=pkg_high->signal_names ):( pkg_found->signal_names=pkg_low->signal_names));
1466         (pkg_high->event_names ? (pkg_found->event_names=pkg_high->event_names ):( pkg_found->event_names=pkg_low->event_names));
1467         (pkg_high->stats_names ? (pkg_found->stats_names=pkg_high->stats_names ):( pkg_found->stats_names=pkg_low->stats_names));
1468         (pkg_high->properties ? (pkg_found->properties=pkg_high->properties ):( pkg_found->properties=pkg_low->properties));
1469         (pkg_high->signals ? (pkg_found->signals=pkg_high->signals ):( pkg_found->signals=pkg_low->signals));
1470         (pkg_high->events ? (pkg_found->events=pkg_high->events ):( pkg_found->events=pkg_low->events));
1471         (pkg_high->statistics ? (pkg_found->statistics=pkg_high->statistics ):( pkg_found->statistics=pkg_low->statistics));
1472         s_pkg->pkg = pkg_found;
1473         s_pkg->is_default = FALSE;
1474 }
1475
1476
1477 static guint32 packageandid;
1478
1479 static int dissect_h248_PkgdName(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
1480     tvbuff_t *new_tvb = NULL;
1481     proto_tree *package_tree=NULL;
1482     guint16 name_major, name_minor;
1483     const h248_package_t* pkg = NULL;
1484     
1485     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
1486
1487     if (new_tvb) {
1488         /* this field is always 4 bytes  so just read it into two integers */
1489         name_major=tvb_get_ntohs(new_tvb, 0);
1490         name_minor=tvb_get_ntohs(new_tvb, 2);
1491         packageandid=(name_major<<16)|name_minor;
1492
1493                 pkg = find_package_id(name_major);
1494         /* do the prettification */
1495         proto_item_append_text(actx->created_item, "  %s (%04x)",
1496                                val_to_str(0, pkg->param_names, "Unknown Package"),
1497                                name_major);
1498
1499         if(tree){
1500             package_tree = proto_item_add_subtree(actx->created_item, ett_packagename);
1501                         proto_tree_add_uint_format(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major,
1502                                 "PkgName%s (0x%04x)", val_to_str(0, pkg->param_names, "Unknown Package"), name_major);
1503         }
1504
1505         {
1506             proto_item* pi = proto_tree_add_uint(package_tree, hf_248_pkg_param, tvb, offset-2, 2, name_minor);
1507             const gchar* strval;
1508
1509             if (pkg->param_names && ( strval = match_strval(name_minor, pkg->param_names) )) {
1510                 strval = ep_strdup_printf("%s (%d)",strval,name_minor);
1511             } else {
1512                 strval = ep_strdup_printf("Unknown (%d)",name_minor);
1513             }
1514
1515             proto_item_set_text(pi,"Parameter: %s", strval);
1516         }
1517     } else {
1518         pkg = &no_package;
1519     }
1520
1521     curr_info.pkg = pkg;
1522
1523     return offset;
1524 }
1525
1526 static int dissect_h248_EventName(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
1527     tvbuff_t *new_tvb;
1528     proto_tree *package_tree=NULL;
1529     guint16 name_major, name_minor;
1530     const h248_package_t* pkg = NULL;
1531     const h248_pkg_evt_t* evt = NULL;
1532
1533     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
1534
1535     if (new_tvb) {
1536         /* this field is always 4 bytes  so just read it into two integers */
1537         name_major=tvb_get_ntohs(new_tvb, 0);
1538         name_minor=tvb_get_ntohs(new_tvb, 2);
1539         packageandid=(name_major<<16)|name_minor;
1540
1541                 pkg = find_package_id(name_major);
1542         /* do the prettification */
1543         proto_item_append_text(actx->created_item, "  %s (%04x)",
1544                                val_to_str(0, pkg->param_names, "Unknown Package"),
1545                                name_major);
1546         if(tree){
1547             package_tree = proto_item_add_subtree(actx->created_item, ett_packagename);
1548         }
1549                 proto_tree_add_uint_format(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major,
1550                         "%s (0x%04x)", val_to_str(0, pkg->param_names, "Unknown Package"), name_major);
1551
1552         curr_info.pkg = pkg;
1553
1554         if (pkg->events) {
1555             for (evt = pkg->events; evt->hfid; evt++) {
1556                 if (name_minor == evt->id) {
1557                     break;
1558                 }
1559             }
1560
1561             if (! evt->hfid) evt = &no_event;
1562         } else {
1563             evt = &no_event;
1564         }
1565
1566         curr_info.evt = evt;
1567
1568         {
1569             proto_item* pi = proto_tree_add_uint(package_tree, hf_h248_event_code, tvb, offset-2, 2, name_minor);
1570             const gchar* strval;
1571
1572             if (pkg->event_names && ( strval = match_strval(name_minor, pkg->event_names) )) {
1573                 strval = ep_strdup_printf("%s (%d)",strval,name_minor);
1574             } else {
1575                 strval = ep_strdup_printf("Unknown (%d)",name_minor);
1576             }
1577
1578             proto_item_set_text(pi,"Event ID: %s", strval);
1579         }
1580
1581     } else {
1582         curr_info.pkg = &no_package;
1583         curr_info.evt = &no_event;
1584     }
1585
1586     return offset;
1587 }
1588
1589
1590
1591 static int dissect_h248_SignalName(gboolean implicit_tag , tvbuff_t *tvb, int offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
1592     tvbuff_t *new_tvb;
1593     proto_tree *package_tree=NULL;
1594     guint16 name_major, name_minor;
1595     const h248_package_t* pkg = NULL;
1596     const h248_pkg_sig_t* sig;
1597
1598     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
1599
1600     if (new_tvb) {
1601         /* this field is always 4 bytes so just read it into two integers */
1602         name_major=tvb_get_ntohs(new_tvb, 0);
1603         name_minor=tvb_get_ntohs(new_tvb, 2);
1604         packageandid=(name_major<<16)|name_minor;
1605
1606                 pkg = find_package_id(name_major);
1607         /* do the prettification */
1608         proto_item_append_text(actx->created_item, "  %s (%04x)",
1609                                val_to_str(0, pkg->param_names, "Unknown Package"),
1610                                name_major);
1611         if(tree){
1612             package_tree = proto_item_add_subtree(actx->created_item, ett_packagename);
1613         }
1614                 proto_tree_add_uint_format(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major,
1615                         "%s (0x%04x)", val_to_str(0, pkg->param_names, "Unknown Package"), name_major);
1616
1617         if (pkg->signals) {
1618             for (sig = pkg->signals; sig->hfid; sig++) {
1619                 if (name_minor == sig->id) {
1620                     break;
1621                 }
1622             }
1623
1624             if (! sig->hfid) sig = &no_signal;
1625
1626             curr_info.pkg = pkg;
1627             curr_info.sig = sig;
1628         } else {
1629             curr_info.pkg = &no_package;
1630             curr_info.sig = &no_signal;
1631         }
1632
1633         {
1634             proto_item* pi = proto_tree_add_uint(package_tree, hf_h248_signal_code, tvb, offset-2, 2, name_minor);
1635             const gchar* strval;
1636
1637             if (pkg->signal_names && ( strval = match_strval(name_minor, pkg->signal_names) )) {
1638                 strval = ep_strdup_printf("%s (%d)",strval,name_minor);
1639             } else {
1640                 strval = ep_strdup_printf("Unknown (%d)",name_minor);
1641             }
1642
1643             proto_item_set_text(pi,"Signal ID: %s", strval);
1644         }
1645
1646     } else {
1647         curr_info.pkg = &no_package;
1648         curr_info.sig = &no_signal;
1649     }
1650
1651     return offset;
1652 }
1653
1654 static int dissect_h248_PropertyID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
1655
1656     gint8 ber_class;
1657     gboolean pc, ind;
1658     gint32 tag;
1659     guint32 len;
1660     guint16 name_minor;
1661     int end_offset;
1662     const h248_package_t* pkg;
1663     const h248_pkg_param_t* prop;
1664     tvbuff_t *next_tvb = NULL;
1665
1666     offset=dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
1667     offset=dissect_ber_length(actx->pinfo, tree, tvb, offset, &len, &ind);
1668     end_offset=offset+len;
1669
1670     if( (ber_class!=BER_CLASS_UNI)
1671       ||(tag!=BER_UNI_TAG_OCTETSTRING) ){
1672         proto_tree_add_text(tree, tvb, offset-2, 2, "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag);
1673         return end_offset;
1674     }
1675
1676     next_tvb = tvb_new_subset(tvb,offset,len,len);
1677
1678     name_minor = packageandid & 0xffff;
1679
1680     pkg = (curr_info.pkg) ? curr_info.pkg : &no_package;
1681
1682     if (pkg->properties) {
1683         for (prop = pkg->properties; prop && prop->hfid; prop++) {
1684             if (name_minor == prop->id) {
1685                 break;
1686             }
1687         }
1688     } else {
1689         prop = &no_param;
1690     }
1691     if (prop && prop->hfid ) {
1692         if (!prop->dissector) prop = &no_param;
1693         prop->dissector(tree, next_tvb, actx->pinfo, *(prop->hfid), &curr_info, prop->data);
1694     }
1695
1696     return end_offset;
1697 }
1698
1699
1700
1701 static int dissect_h248_SigParameterName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
1702     tvbuff_t *next_tvb;
1703     guint32 param_id = 0xffffffff;
1704     const h248_pkg_param_t* sigpar;
1705     const gchar* strval;
1706     proto_item* pi;
1707
1708     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset,  hf_index, &next_tvb);
1709     pi = actx->created_item;
1710
1711     switch(tvb_length(next_tvb)) {
1712         case 4: param_id = tvb_get_ntohl(next_tvb,0); break;
1713         case 3: param_id = tvb_get_ntoh24(next_tvb,0); break;
1714         case 2: param_id = tvb_get_ntohs(next_tvb,0); break;
1715         case 1: param_id = tvb_get_guint8(next_tvb,0); break;
1716         default: break;
1717     }
1718
1719     curr_info.par = &no_param;
1720
1721     if (curr_info.sig && curr_info.sig->parameters) {
1722         for(sigpar = curr_info.sig->parameters; sigpar->hfid; sigpar++) {
1723             if (sigpar->id == param_id) {
1724                 curr_info.par = sigpar;
1725                 break;
1726             }
1727         }
1728     }
1729
1730     if (curr_info.sig && curr_info.sig->param_names && ( strval = match_strval(param_id, curr_info.sig->param_names) )) {
1731         strval = ep_strdup_printf("%s (%d)",strval,param_id);
1732     } else {
1733         strval = ep_strdup_printf("Unknown (%d)",param_id);
1734     }
1735
1736     proto_item_set_text(pi,"Parameter: %s", strval);
1737
1738     return offset;
1739 }
1740
1741 static int dissect_h248_SigParamValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
1742     int end_offset;
1743     gint8 ber_class;
1744     gboolean pc, ind;
1745     gint32 tag;
1746     guint32 len;
1747     tvbuff_t *next_tvb = NULL;
1748
1749     offset=dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
1750     offset=dissect_ber_length(actx->pinfo, tree, tvb, offset, &len, &ind);
1751     end_offset=offset+len;
1752
1753     if( (ber_class!=BER_CLASS_UNI)
1754         ||(tag!=BER_UNI_TAG_OCTETSTRING) ){
1755         proto_tree_add_text(tree, tvb, offset-2, 2, "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag);
1756         return end_offset;
1757     }
1758
1759     next_tvb = tvb_new_subset(tvb,offset,len,len);
1760
1761     if ( curr_info.par && curr_info.par->dissector) {
1762         curr_info.par->dissector(tree, next_tvb, actx->pinfo, *(curr_info.par->hfid), &curr_info, curr_info.par->data);
1763     }
1764
1765     return end_offset;
1766 }
1767
1768 static int dissect_h248_SigParamValueV1(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset _U_,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
1769         return dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
1770 }
1771
1772
1773 static int dissect_h248_EventParameterName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
1774     tvbuff_t *next_tvb;
1775     guint32 param_id = 0xffffffff;
1776     const h248_pkg_param_t* evtpar;
1777     const gchar* strval;
1778     proto_item* pi;
1779
1780     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &next_tvb);
1781     pi = actx->created_item;
1782
1783     if (next_tvb) {
1784         switch(tvb_length(next_tvb)) {
1785             case 4: param_id = tvb_get_ntohl(next_tvb,0); break;
1786             case 3: param_id = tvb_get_ntoh24(next_tvb,0); break;
1787             case 2: param_id = tvb_get_ntohs(next_tvb,0); break;
1788             case 1: param_id = tvb_get_guint8(next_tvb,0); break;
1789             default: break;
1790         }
1791     }
1792
1793
1794     curr_info.par = &no_param;
1795
1796     if (curr_info.evt && curr_info.evt->parameters) {
1797         for(evtpar = curr_info.evt->parameters; evtpar->hfid; evtpar++) {
1798             if (evtpar->id == param_id) {
1799                 curr_info.par = evtpar;
1800                 break;
1801             }
1802         }
1803     } else {
1804         curr_info.par = &no_param;
1805     }
1806
1807     if (curr_info.evt && curr_info.evt->param_names && ( strval = match_strval(param_id, curr_info.evt->param_names) )) {
1808         strval = ep_strdup_printf("%s (%d)",strval,param_id);
1809     } else {
1810         strval = ep_strdup_printf("Unknown (%d)",param_id);
1811     }
1812
1813     proto_item_set_text(pi,"Parameter: %s", strval);
1814
1815
1816     return offset;
1817 }
1818
1819 static int dissect_h248_EventParamValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
1820     tvbuff_t *next_tvb;
1821     int end_offset;
1822     gint8 ber_class;
1823     gboolean pc, ind;
1824     gint32 tag;
1825     guint32 len;
1826
1827         offset=dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
1828         offset=dissect_ber_length(actx->pinfo, tree, tvb, offset, &len, &ind);
1829         end_offset=offset+len;
1830
1831         if( (ber_class!=BER_CLASS_UNI)
1832         ||(tag!=BER_UNI_TAG_OCTETSTRING) ){
1833         proto_tree_add_text(tree, tvb, offset-2, 2, "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag);
1834         return end_offset;
1835     }
1836
1837     next_tvb = tvb_new_subset(tvb,offset,len,len);
1838
1839         if ( curr_info.par && curr_info.par->dissector) {
1840         curr_info.par->dissector(tree, next_tvb, actx->pinfo, *(curr_info.par->hfid), &curr_info, curr_info.par->data);
1841     }
1842
1843     return end_offset;
1844 }
1845
1846 static int dissect_h248_EventParamValueV1(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset _U_,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
1847         return dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &tvb);
1848 }
1849
1850
1851 static int dissect_h248_MtpAddress(gboolean implicit_tag, tvbuff_t *tvb, int offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
1852     tvbuff_t *new_tvb;
1853     proto_tree *mtp_tree=NULL;
1854     guint32 val;
1855     int i, len, old_offset;
1856
1857     old_offset=offset;
1858     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
1859
1860     if (new_tvb) {
1861         /* this field is either 2 or 4 bytes  so just read it into an integer */
1862         val=0;
1863         len=tvb_length(new_tvb);
1864         for(i=0;i<len;i++){
1865             val= (val<<8)|tvb_get_guint8(new_tvb, i);
1866         }
1867
1868         /* do the prettification */
1869         proto_item_append_text(actx->created_item, "  NI = %d, PC = %d ( %d-%d )", val&0x03,val>>2,val&0x03,val>>2);
1870         if(tree){
1871             mtp_tree = proto_item_add_subtree(actx->created_item, ett_mtpaddress);
1872         }
1873         proto_tree_add_uint(mtp_tree, hf_h248_mtpaddress_ni, tvb, old_offset, offset-old_offset, val&0x03);
1874         proto_tree_add_uint(mtp_tree, hf_h248_mtpaddress_pc, tvb, old_offset, offset-old_offset, val>>2);
1875     }
1876
1877     return offset;
1878 }
1879
1880 #define H248_TAP() do { if (keep_persistent_data && curr_info.cmd) tap_queue_packet(h248_tap, actx->pinfo, curr_info.cmd); } while(0)
1881
1882
1883 /*--- Included file: packet-h248-fn.c ---*/
1884 #line 1 "../../asn1/h248/packet-h248-fn.c"
1885 /*--- Cyclic dependencies ---*/
1886
1887 /* SecondEventsDescriptor -> SecondEventsDescriptor/eventList -> SecondRequestedEvent -> SecondRequestedActions -> NotifyBehaviour -> RegulatedEmbeddedDescriptor -> SecondEventsDescriptor */
1888 static int dissect_h248_SecondEventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
1889
1890
1891
1892
1893 static int
1894 dissect_h248_SecurityParmIndex(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1895   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1896                                        NULL);
1897
1898   return offset;
1899 }
1900
1901
1902
1903 static int
1904 dissect_h248_SequenceNum(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1905   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1906                                        NULL);
1907
1908   return offset;
1909 }
1910
1911
1912
1913 static int
1914 dissect_h248_AuthData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1915   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1916                                        NULL);
1917
1918   return offset;
1919 }
1920
1921
1922 static const ber_sequence_t AuthenticationHeader_sequence[] = {
1923   { &hf_h248_secParmIndex   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SecurityParmIndex },
1924   { &hf_h248_seqNum         , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SequenceNum },
1925   { &hf_h248_ad             , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_AuthData },
1926   { NULL, 0, 0, 0, NULL }
1927 };
1928
1929 static int
1930 dissect_h248_AuthenticationHeader(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1931   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1932                                    AuthenticationHeader_sequence, hf_index, ett_h248_AuthenticationHeader);
1933
1934   return offset;
1935 }
1936
1937
1938
1939 static int
1940 dissect_h248_T_version(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1941 #line 108 "../../asn1/h248/h248.cnf"
1942           offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1943                                                 &h248_version);
1944
1945
1946
1947   return offset;
1948 }
1949
1950
1951
1952 static int
1953 dissect_h248_OCTET_STRING_SIZE_4(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1954   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1955                                        NULL);
1956
1957   return offset;
1958 }
1959
1960
1961
1962 static int
1963 dissect_h248_INTEGER_0_65535(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1964   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1965                                                 NULL);
1966
1967   return offset;
1968 }
1969
1970
1971 static const ber_sequence_t IP4Address_sequence[] = {
1972   { &hf_h248_iP4Address     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_OCTET_STRING_SIZE_4 },
1973   { &hf_h248_portNumber     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
1974   { NULL, 0, 0, 0, NULL }
1975 };
1976
1977 static int
1978 dissect_h248_IP4Address(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1979   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1980                                    IP4Address_sequence, hf_index, ett_h248_IP4Address);
1981
1982   return offset;
1983 }
1984
1985
1986
1987 static int
1988 dissect_h248_OCTET_STRING_SIZE_16(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1989   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1990                                        NULL);
1991
1992   return offset;
1993 }
1994
1995
1996 static const ber_sequence_t IP6Address_sequence[] = {
1997   { &hf_h248_iP6Address     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_OCTET_STRING_SIZE_16 },
1998   { &hf_h248_portNumber     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
1999   { NULL, 0, 0, 0, NULL }
2000 };
2001
2002 static int
2003 dissect_h248_IP6Address(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2004   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2005                                    IP6Address_sequence, hf_index, ett_h248_IP6Address);
2006
2007   return offset;
2008 }
2009
2010
2011
2012 static int
2013 dissect_h248_IA5String(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2014   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
2015                                             actx, tree, tvb, offset, hf_index,
2016                                             NULL);
2017
2018   return offset;
2019 }
2020
2021
2022 static const ber_sequence_t DomainName_sequence[] = {
2023   { &hf_h248_domName        , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IA5String },
2024   { &hf_h248_portNumber     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
2025   { NULL, 0, 0, 0, NULL }
2026 };
2027
2028 static int
2029 dissect_h248_DomainName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2030   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2031                                    DomainName_sequence, hf_index, ett_h248_DomainName);
2032
2033   return offset;
2034 }
2035
2036
2037
2038 static int
2039 dissect_h248_PathName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2040   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
2041                                             actx, tree, tvb, offset, hf_index,
2042                                             NULL);
2043
2044   return offset;
2045 }
2046
2047
2048
2049 static const value_string h248_MId_vals[] = {
2050   {   0, "ip4Address" },
2051   {   1, "ip6Address" },
2052   {   2, "domainName" },
2053   {   3, "deviceName" },
2054   {   4, "mtpAddress" },
2055   { 0, NULL }
2056 };
2057
2058 static const ber_choice_t MId_choice[] = {
2059   {   0, &hf_h248_ip4Address     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IP4Address },
2060   {   1, &hf_h248_ip6Address     , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IP6Address },
2061   {   2, &hf_h248_domainName     , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_DomainName },
2062   {   3, &hf_h248_deviceName     , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_PathName },
2063   {   4, &hf_h248_mtpAddress     , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_MtpAddress },
2064   { 0, NULL, 0, 0, 0, NULL }
2065 };
2066
2067 static int
2068 dissect_h248_MId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2069   offset = dissect_ber_choice(actx, tree, tvb, offset,
2070                                  MId_choice, hf_index, ett_h248_MId,
2071                                  NULL);
2072
2073   return offset;
2074 }
2075
2076
2077
2078
2079 static int
2080 dissect_h248_T_errorCode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2081 #line 302 "../../asn1/h248/h248.cnf"
2082     offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_h248_error_code, &error_code);
2083     expert_add_info_format(actx->pinfo, actx->created_item, PI_RESPONSE_CODE, PI_WARN, "Errored Command");
2084     
2085     if (curr_info.cmd) {
2086         gcp_cmd_set_error(curr_info.cmd,error_code);
2087     } else if (curr_info.trx) {
2088         gcp_trx_set_error(curr_info.trx,error_code);
2089     }
2090     
2091     return offset;
2092
2093
2094   return offset;
2095 }
2096
2097
2098
2099 static int
2100 dissect_h248_ErrorText(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2101   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
2102                                             actx, tree, tvb, offset, hf_index,
2103                                             NULL);
2104
2105   return offset;
2106 }
2107
2108
2109 static const ber_sequence_t ErrorDescriptor_sequence[] = {
2110   { &hf_h248_errorCode      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_errorCode },
2111   { &hf_h248_errorText      , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ErrorText },
2112   { NULL, 0, 0, 0, NULL }
2113 };
2114
2115 static int
2116 dissect_h248_ErrorDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2117   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2118                                    ErrorDescriptor_sequence, hf_index, ett_h248_ErrorDescriptor);
2119
2120   return offset;
2121 }
2122
2123
2124
2125 static int
2126 dissect_h248_TransactionId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2127   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2128                                                 NULL);
2129
2130   return offset;
2131 }
2132
2133
2134
2135 static int
2136 dissect_h248_T_transactionId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2137 #line 112 "../../asn1/h248/h248.cnf"
2138     guint32 trx_id = 0;
2139         offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
2140     curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_REQUEST, keep_persistent_data);
2141     error_code = 0;
2142
2143
2144   return offset;
2145 }
2146
2147
2148
2149
2150 static int
2151 dissect_h248_ContextId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2152 #line 137 "../../asn1/h248/h248.cnf"
2153     guint32 ctx_id = 0;
2154         offset = dissect_h248_ctx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &ctx_id);
2155     curr_info.ctx = gcp_ctx(curr_info.msg,curr_info.trx,ctx_id,keep_persistent_data);
2156     curr_info.cmd = NULL;
2157     curr_info.term = NULL;
2158
2159
2160   return offset;
2161 }
2162
2163
2164
2165 static int
2166 dissect_h248_INTEGER_0_15(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2167   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2168                                                 NULL);
2169
2170   return offset;
2171 }
2172
2173
2174
2175 static int
2176 dissect_h248_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2177   offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
2178
2179   return offset;
2180 }
2181
2182
2183
2184 static int
2185 dissect_h248_WildcardField(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2186 #line 320 "../../asn1/h248/h248.cnf"
2187     tvbuff_t* new_tvb;
2188     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
2189     tree = proto_item_add_subtree(actx->created_item,ett_wildcard);
2190     proto_tree_add_item(tree,hf_h248_term_wild_type,new_tvb,0,1,ENC_BIG_ENDIAN);
2191     proto_tree_add_item(tree,hf_h248_term_wild_level,new_tvb,0,1,ENC_BIG_ENDIAN);
2192     proto_tree_add_item(tree,hf_h248_term_wild_position,new_tvb,0,1,ENC_BIG_ENDIAN);
2193
2194     wild_term = tvb_get_guint8(new_tvb,0) & 0x80 ? GCP_WILDCARD_CHOOSE : GCP_WILDCARD_ALL;
2195     /* limitation: assume only one wildcard is used */
2196     wild_card = tvb_get_guint8(new_tvb,0);
2197     
2198
2199
2200   return offset;
2201 }
2202
2203
2204 static const ber_sequence_t SEQUENCE_OF_WildcardField_sequence_of[1] = {
2205   { &hf_h248_wildcard_item  , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_WildcardField },
2206 };
2207
2208 static int
2209 dissect_h248_SEQUENCE_OF_WildcardField(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2210   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2211                                       SEQUENCE_OF_WildcardField_sequence_of, hf_index, ett_h248_SEQUENCE_OF_WildcardField);
2212
2213   return offset;
2214 }
2215
2216
2217
2218 static int
2219 dissect_h248_T_terminationId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2220 #line 334 "../../asn1/h248/h248.cnf"
2221         tvbuff_t* new_tvb;
2222         offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
2223         
2224         if (new_tvb) {
2225                 curr_info.term->len = tvb_length(new_tvb);
2226                 curr_info.term->type = 0; /* unknown */
2227
2228                 if (curr_info.term->len) {
2229                         curr_info.term->buffer = ep_tvb_memdup(new_tvb,0,curr_info.term->len);
2230                         curr_info.term->str = bytes_to_str(curr_info.term->buffer,curr_info.term->len);
2231                 }
2232
2233                 curr_info.term = gcp_cmd_add_term(curr_info.msg, curr_info.trx, curr_info.cmd, curr_info.term, wild_term, keep_persistent_data);
2234
2235                 if (h248_term_handle) {
2236                     actx->pinfo->private_data = &wild_card;                 
2237                         call_dissector(h248_term_handle, new_tvb, actx->pinfo, tree);
2238                         wild_card = 0xFF;               
2239                 }
2240         } else {
2241                 curr_info.term->len = 0;
2242                 curr_info.term->buffer = (guint8*)ep_strdup("");
2243                 curr_info.term->str = ep_strdup("?");
2244         }
2245
2246
2247   return offset;
2248 }
2249
2250
2251 static const ber_sequence_t TerminationID_sequence[] = {
2252   { &hf_h248_wildcard       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_WildcardField },
2253   { &hf_h248_terminationId  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_T_terminationId },
2254   { NULL, 0, 0, 0, NULL }
2255 };
2256
2257 static int
2258 dissect_h248_TerminationID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2259 #line 315 "../../asn1/h248/h248.cnf"
2260     curr_info.term = ep_new0(gcp_term_t);
2261     wild_term = GCP_WILDCARD_NONE;
2262
2263   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2264                                    TerminationID_sequence, hf_index, ett_h248_TerminationID);
2265
2266   return offset;
2267 }
2268
2269
2270 static const value_string h248_T_topologyDirection_vals[] = {
2271   {   0, "bothway" },
2272   {   1, "isolate" },
2273   {   2, "oneway" },
2274   { 0, NULL }
2275 };
2276
2277
2278 static int
2279 dissect_h248_T_topologyDirection(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2280   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2281                                   NULL);
2282
2283   return offset;
2284 }
2285
2286
2287
2288 static int
2289 dissect_h248_StreamID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2290   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2291                                                 NULL);
2292
2293   return offset;
2294 }
2295
2296
2297 static const value_string h248_T_topologyDirectionExtension_vals[] = {
2298   {   0, "onewayexternal" },
2299   {   1, "onewayboth" },
2300   { 0, NULL }
2301 };
2302
2303
2304 static int
2305 dissect_h248_T_topologyDirectionExtension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2306   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2307                                   NULL);
2308
2309   return offset;
2310 }
2311
2312
2313 static const ber_sequence_t TopologyRequest_sequence[] = {
2314   { &hf_h248_terminationFrom, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
2315   { &hf_h248_terminationTo  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
2316   { &hf_h248_topologyDirection, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_topologyDirection },
2317   { &hf_h248_streamID       , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
2318   { &hf_h248_topologyDirectionExtension, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_topologyDirectionExtension },
2319   { NULL, 0, 0, 0, NULL }
2320 };
2321
2322 static int
2323 dissect_h248_TopologyRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2324   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2325                                    TopologyRequest_sequence, hf_index, ett_h248_TopologyRequest);
2326
2327   return offset;
2328 }
2329
2330
2331 static const ber_sequence_t T_topologyReq_sequence_of[1] = {
2332   { &hf_h248_topologyReq_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TopologyRequest },
2333 };
2334
2335 static int
2336 dissect_h248_T_topologyReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2337 #line 220 "../../asn1/h248/h248.cnf"
2338       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_TOPOLOGY_REQ,offset,keep_persistent_data);
2339       H248_TAP();
2340
2341   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2342                                       T_topologyReq_sequence_of, hf_index, ett_h248_T_topologyReq);
2343
2344 #line 224 "../../asn1/h248/h248.cnf"
2345       curr_info.cmd = NULL;
2346
2347   return offset;
2348 }
2349
2350
2351
2352 static int
2353 dissect_h248_Iepscallind_BOOL(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2354   offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
2355
2356   return offset;
2357 }
2358
2359
2360
2361
2362 static int
2363 dissect_h248_PropertyName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2364   offset = dissect_h248_PkgdName(implicit_tag, tvb, offset, actx, tree, hf_index);
2365
2366   return offset;
2367 }
2368
2369
2370
2371 static const ber_sequence_t SEQUENCE_OF_PropertyID_sequence_of[1] = {
2372   { &hf_h248_propertyParamValue_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyID },
2373 };
2374
2375 static int
2376 dissect_h248_SEQUENCE_OF_PropertyID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2377   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2378                                       SEQUENCE_OF_PropertyID_sequence_of, hf_index, ett_h248_SEQUENCE_OF_PropertyID);
2379
2380   return offset;
2381 }
2382
2383
2384 static const value_string h248_Relation_vals[] = {
2385   {   0, "greaterThan" },
2386   {   1, "smallerThan" },
2387   {   2, "unequalTo" },
2388   { 0, NULL }
2389 };
2390
2391
2392 static int
2393 dissect_h248_Relation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2394   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2395                                   NULL);
2396
2397   return offset;
2398 }
2399
2400
2401 static const value_string h248_PropParm_extraInfo_vals[] = {
2402   {   0, "relation" },
2403   {   1, "range" },
2404   {   2, "sublist" },
2405   { 0, NULL }
2406 };
2407
2408 static const ber_choice_t PropParm_extraInfo_choice[] = {
2409   {   0, &hf_h248_relation       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Relation },
2410   {   1, &hf_h248_range          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2411   {   2, &hf_h248_sublist        , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2412   { 0, NULL, 0, 0, 0, NULL }
2413 };
2414
2415 static int
2416 dissect_h248_PropParm_extraInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2417   offset = dissect_ber_choice(actx, tree, tvb, offset,
2418                                  PropParm_extraInfo_choice, hf_index, ett_h248_PropParm_extraInfo,
2419                                  NULL);
2420
2421   return offset;
2422 }
2423
2424
2425 static const ber_sequence_t PropertyParm_sequence[] = {
2426   { &hf_h248_propertyName   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PropertyName },
2427   { &hf_h248_propertyParamValue, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyID },
2428   { &hf_h248_propParm_extraInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_PropParm_extraInfo },
2429   { NULL, 0, 0, 0, NULL }
2430 };
2431
2432 static int
2433 dissect_h248_PropertyParm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2434   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2435                                    PropertyParm_sequence, hf_index, ett_h248_PropertyParm);
2436
2437   return offset;
2438 }
2439
2440
2441 static const ber_sequence_t SEQUENCE_OF_PropertyParm_sequence_of[1] = {
2442   { &hf_h248_contextProp_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyParm },
2443 };
2444
2445 static int
2446 dissect_h248_SEQUENCE_OF_PropertyParm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2447   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2448                                       SEQUENCE_OF_PropertyParm_sequence_of, hf_index, ett_h248_SEQUENCE_OF_PropertyParm);
2449
2450   return offset;
2451 }
2452
2453
2454
2455 static int
2456 dissect_h248_ContextIDinList(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2457   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2458                                                 NULL);
2459
2460   return offset;
2461 }
2462
2463
2464 static const ber_sequence_t SEQUENCE_OF_ContextIDinList_sequence_of[1] = {
2465   { &hf_h248_contextList_item, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_h248_ContextIDinList },
2466 };
2467
2468 static int
2469 dissect_h248_SEQUENCE_OF_ContextIDinList(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2470   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2471                                       SEQUENCE_OF_ContextIDinList_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ContextIDinList);
2472
2473   return offset;
2474 }
2475
2476
2477 static const ber_sequence_t ContextRequest_sequence[] = {
2478   { &hf_h248_priority       , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_15 },
2479   { &hf_h248_emergency      , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2480   { &hf_h248_topologyReq    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_topologyReq },
2481   { &hf_h248_iepscallind_BOOL, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_Iepscallind_BOOL },
2482   { &hf_h248_contextProp    , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
2483   { &hf_h248_contextList    , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ContextIDinList },
2484   { NULL, 0, 0, 0, NULL }
2485 };
2486
2487 static int
2488 dissect_h248_ContextRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2489   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2490                                    ContextRequest_sequence, hf_index, ett_h248_ContextRequest);
2491
2492   return offset;
2493 }
2494
2495
2496
2497 static int
2498 dissect_h248_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2499   offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
2500
2501   return offset;
2502 }
2503
2504
2505 static const ber_sequence_t IndAudPropertyParm_sequence[] = {
2506   { &hf_h248_name           , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
2507   { &hf_h248_propertyParms  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_PropertyParm },
2508   { NULL, 0, 0, 0, NULL }
2509 };
2510
2511 static int
2512 dissect_h248_IndAudPropertyParm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2513   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2514                                    IndAudPropertyParm_sequence, hf_index, ett_h248_IndAudPropertyParm);
2515
2516   return offset;
2517 }
2518
2519
2520 static const ber_sequence_t SEQUENCE_OF_IndAudPropertyParm_sequence_of[1] = {
2521   { &hf_h248_contextPropAud_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_IndAudPropertyParm },
2522 };
2523
2524 static int
2525 dissect_h248_SEQUENCE_OF_IndAudPropertyParm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2526   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2527                                       SEQUENCE_OF_IndAudPropertyParm_sequence_of, hf_index, ett_h248_SEQUENCE_OF_IndAudPropertyParm);
2528
2529   return offset;
2530 }
2531
2532
2533 static const value_string h248_SelectLogic_vals[] = {
2534   {   0, "andAUDITSelect" },
2535   {   1, "orAUDITSelect" },
2536   { 0, NULL }
2537 };
2538
2539 static const ber_choice_t SelectLogic_choice[] = {
2540   {   0, &hf_h248_andAUDITSelect , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
2541   {   1, &hf_h248_orAUDITSelect  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
2542   { 0, NULL, 0, 0, 0, NULL }
2543 };
2544
2545 static int
2546 dissect_h248_SelectLogic(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2547   offset = dissect_ber_choice(actx, tree, tvb, offset,
2548                                  SelectLogic_choice, hf_index, ett_h248_SelectLogic,
2549                                  NULL);
2550
2551   return offset;
2552 }
2553
2554
2555 static const ber_sequence_t ContextAttrAuditRequest_sequence[] = {
2556   { &hf_h248_topology       , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
2557   { &hf_h248_cAAREmergency  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
2558   { &hf_h248_cAARPriority   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
2559   { &hf_h248_iepscallind    , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
2560   { &hf_h248_contextPropAud , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAudPropertyParm },
2561   { &hf_h248_selectpriority , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_15 },
2562   { &hf_h248_selectemergency, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2563   { &hf_h248_selectiepscallind, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2564   { &hf_h248_selectLogic    , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_SelectLogic },
2565   { NULL, 0, 0, 0, NULL }
2566 };
2567
2568 static int
2569 dissect_h248_ContextAttrAuditRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2570   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2571                                    ContextAttrAuditRequest_sequence, hf_index, ett_h248_ContextAttrAuditRequest);
2572
2573   return offset;
2574 }
2575
2576
2577
2578 static int
2579 dissect_h248_T_contextAttrAuditReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2580 #line 228 "../../asn1/h248/h248.cnf"
2581       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_CTX_ATTR_AUDIT_REQ,offset,keep_persistent_data);
2582       H248_TAP();
2583
2584   offset = dissect_h248_ContextAttrAuditRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
2585
2586 #line 232 "../../asn1/h248/h248.cnf"
2587       curr_info.cmd = NULL;
2588
2589   return offset;
2590 }
2591
2592
2593 static const ber_sequence_t TerminationIDList_sequence_of[1] = {
2594   { &hf_h248_TerminationIDList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TerminationID },
2595 };
2596
2597 static int
2598 dissect_h248_TerminationIDList(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2599   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2600                                       TerminationIDList_sequence_of, hf_index, ett_h248_TerminationIDList);
2601
2602   return offset;
2603 }
2604
2605
2606 static const value_string h248_EventBufferControl_vals[] = {
2607   {   0, "off" },
2608   {   1, "lockStep" },
2609   { 0, NULL }
2610 };
2611
2612
2613 static int
2614 dissect_h248_EventBufferControl(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2615   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2616                                   NULL);
2617
2618   return offset;
2619 }
2620
2621
2622 static const value_string h248_ServiceState_vals[] = {
2623   {   0, "test" },
2624   {   1, "outOfSvc" },
2625   {   2, "inSvc" },
2626   { 0, NULL }
2627 };
2628
2629
2630 static int
2631 dissect_h248_ServiceState(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2632   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2633                                   NULL);
2634
2635   return offset;
2636 }
2637
2638
2639 static const ber_sequence_t TerminationStateDescriptor_sequence[] = {
2640   { &hf_h248_tSDpropertyParms, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
2641   { &hf_h248_tSEventBufferControl, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_EventBufferControl },
2642   { &hf_h248_serviceState   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ServiceState },
2643   { NULL, 0, 0, 0, NULL }
2644 };
2645
2646 static int
2647 dissect_h248_TerminationStateDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2648   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2649                                    TerminationStateDescriptor_sequence, hf_index, ett_h248_TerminationStateDescriptor);
2650
2651   return offset;
2652 }
2653
2654
2655 static const value_string h248_StreamMode_vals[] = {
2656   {   0, "sendOnly" },
2657   {   1, "recvOnly" },
2658   {   2, "sendRecv" },
2659   {   3, "inactive" },
2660   {   4, "loopBack" },
2661   { 0, NULL }
2662 };
2663
2664
2665 static int
2666 dissect_h248_StreamMode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2667   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2668                                   NULL);
2669
2670   return offset;
2671 }
2672
2673
2674 static const ber_sequence_t LocalControlDescriptor_sequence[] = {
2675   { &hf_h248_streamMode     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamMode },
2676   { &hf_h248_reserveValue   , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2677   { &hf_h248_reserveGroup   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2678   { &hf_h248_lCDpropertyParms, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
2679   { NULL, 0, 0, 0, NULL }
2680 };
2681
2682 static int
2683 dissect_h248_LocalControlDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2684   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2685                                    LocalControlDescriptor_sequence, hf_index, ett_h248_LocalControlDescriptor);
2686
2687   return offset;
2688 }
2689
2690
2691 static const ber_sequence_t PropertyGroup_sequence_of[1] = {
2692   { &hf_h248_PropertyGroup_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyParm },
2693 };
2694
2695 static int
2696 dissect_h248_PropertyGroup(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2697   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2698                                       PropertyGroup_sequence_of, hf_index, ett_h248_PropertyGroup);
2699
2700   return offset;
2701 }
2702
2703
2704 static const ber_sequence_t SEQUENCE_OF_PropertyGroup_sequence_of[1] = {
2705   { &hf_h248_propGrps_item  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyGroup },
2706 };
2707
2708 static int
2709 dissect_h248_SEQUENCE_OF_PropertyGroup(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2710   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2711                                       SEQUENCE_OF_PropertyGroup_sequence_of, hf_index, ett_h248_SEQUENCE_OF_PropertyGroup);
2712
2713   return offset;
2714 }
2715
2716
2717 static const ber_sequence_t LocalRemoteDescriptor_sequence[] = {
2718   { &hf_h248_propGrps       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyGroup },
2719   { NULL, 0, 0, 0, NULL }
2720 };
2721
2722 static int
2723 dissect_h248_LocalRemoteDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2724   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2725                                    LocalRemoteDescriptor_sequence, hf_index, ett_h248_LocalRemoteDescriptor);
2726
2727   return offset;
2728 }
2729
2730
2731
2732 static int
2733 dissect_h248_StatName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2734   offset = dissect_h248_PkgdName(implicit_tag, tvb, offset, actx, tree, hf_index);
2735
2736   return offset;
2737 }
2738
2739
2740
2741 static int
2742 dissect_h248_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2743   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2744                                        NULL);
2745
2746   return offset;
2747 }
2748
2749
2750 static const ber_sequence_t Value_sequence_of[1] = {
2751   { &hf_h248_Value_item     , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_OCTET_STRING },
2752 };
2753
2754 static int
2755 dissect_h248_Value(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2756   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2757                                       Value_sequence_of, hf_index, ett_h248_Value);
2758
2759   return offset;
2760 }
2761
2762
2763
2764 static int
2765 dissect_h248_StatValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2766   offset = dissect_h248_Value(implicit_tag, tvb, offset, actx, tree, hf_index);
2767
2768   return offset;
2769 }
2770
2771
2772 static const ber_sequence_t StatisticsParameter_sequence[] = {
2773   { &hf_h248_statName       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StatName },
2774   { &hf_h248_statValue      , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StatValue },
2775   { NULL, 0, 0, 0, NULL }
2776 };
2777
2778 static int
2779 dissect_h248_StatisticsParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2780   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2781                                    StatisticsParameter_sequence, hf_index, ett_h248_StatisticsParameter);
2782
2783   return offset;
2784 }
2785
2786
2787 static const ber_sequence_t StatisticsDescriptor_sequence_of[1] = {
2788   { &hf_h248_StatisticsDescriptor_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_StatisticsParameter },
2789 };
2790
2791 static int
2792 dissect_h248_StatisticsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2793   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2794                                       StatisticsDescriptor_sequence_of, hf_index, ett_h248_StatisticsDescriptor);
2795
2796   return offset;
2797 }
2798
2799
2800 static const ber_sequence_t StreamParms_sequence[] = {
2801   { &hf_h248_localControlDescriptor, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_LocalControlDescriptor },
2802   { &hf_h248_localDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_LocalRemoteDescriptor },
2803   { &hf_h248_remoteDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_LocalRemoteDescriptor },
2804   { &hf_h248_sPstatisticsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StatisticsDescriptor },
2805   { NULL, 0, 0, 0, NULL }
2806 };
2807
2808 static int
2809 dissect_h248_StreamParms(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2810   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2811                                    StreamParms_sequence, hf_index, ett_h248_StreamParms);
2812
2813   return offset;
2814 }
2815
2816
2817 static const ber_sequence_t StreamDescriptor_sequence[] = {
2818   { &hf_h248_streamID       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
2819   { &hf_h248_streamParms    , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_StreamParms },
2820   { NULL, 0, 0, 0, NULL }
2821 };
2822
2823 static int
2824 dissect_h248_StreamDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2825   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2826                                    StreamDescriptor_sequence, hf_index, ett_h248_StreamDescriptor);
2827
2828   return offset;
2829 }
2830
2831
2832 static const ber_sequence_t SEQUENCE_OF_StreamDescriptor_sequence_of[1] = {
2833   { &hf_h248_mediaDescriptorMultiStream_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_StreamDescriptor },
2834 };
2835
2836 static int
2837 dissect_h248_SEQUENCE_OF_StreamDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2838   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2839                                       SEQUENCE_OF_StreamDescriptor_sequence_of, hf_index, ett_h248_SEQUENCE_OF_StreamDescriptor);
2840
2841   return offset;
2842 }
2843
2844
2845 static const value_string h248_T_streams_vals[] = {
2846   {   0, "oneStream" },
2847   {   1, "multiStream" },
2848   { 0, NULL }
2849 };
2850
2851 static const ber_choice_t T_streams_choice[] = {
2852   {   0, &hf_h248_mediaDescriptorOneStream, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StreamParms },
2853   {   1, &hf_h248_mediaDescriptorMultiStream, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_StreamDescriptor },
2854   { 0, NULL, 0, 0, 0, NULL }
2855 };
2856
2857 static int
2858 dissect_h248_T_streams(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2859   offset = dissect_ber_choice(actx, tree, tvb, offset,
2860                                  T_streams_choice, hf_index, ett_h248_T_streams,
2861                                  NULL);
2862
2863   return offset;
2864 }
2865
2866
2867 static const ber_sequence_t MediaDescriptor_sequence[] = {
2868   { &hf_h248_termStateDescr , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TerminationStateDescriptor },
2869   { &hf_h248_streams        , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_streams },
2870   { NULL, 0, 0, 0, NULL }
2871 };
2872
2873 static int
2874 dissect_h248_MediaDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2875   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2876                                    MediaDescriptor_sequence, hf_index, ett_h248_MediaDescriptor);
2877
2878   return offset;
2879 }
2880
2881
2882 static const value_string h248_ModemType_vals[] = {
2883   {   0, "v18" },
2884   {   1, "v22" },
2885   {   2, "v22bis" },
2886   {   3, "v32" },
2887   {   4, "v32bis" },
2888   {   5, "v34" },
2889   {   6, "v90" },
2890   {   7, "v91" },
2891   {   8, "synchISDN" },
2892   { 0, NULL }
2893 };
2894
2895
2896 static int
2897 dissect_h248_ModemType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2898   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2899                                   NULL);
2900
2901   return offset;
2902 }
2903
2904
2905 static const ber_sequence_t SEQUENCE_OF_ModemType_sequence_of[1] = {
2906   { &hf_h248_mtl_item       , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_h248_ModemType },
2907 };
2908
2909 static int
2910 dissect_h248_SEQUENCE_OF_ModemType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2911   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2912                                       SEQUENCE_OF_ModemType_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ModemType);
2913
2914   return offset;
2915 }
2916
2917
2918
2919 static int
2920 dissect_h248_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2921   offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
2922
2923   return offset;
2924 }
2925
2926
2927
2928 static int
2929 dissect_h248_INTEGER_0_255(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2930   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2931                                                 NULL);
2932
2933   return offset;
2934 }
2935
2936
2937 static const ber_sequence_t H221NonStandard_sequence[] = {
2938   { &hf_h248_t35CountryCode1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_255 },
2939   { &hf_h248_t35CountryCode2, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_255 },
2940   { &hf_h248_t35Extension   , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_255 },
2941   { &hf_h248_manufacturerCode, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
2942   { NULL, 0, 0, 0, NULL }
2943 };
2944
2945 static int
2946 dissect_h248_H221NonStandard(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2947   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2948                                    H221NonStandard_sequence, hf_index, ett_h248_H221NonStandard);
2949
2950   return offset;
2951 }
2952
2953
2954
2955 static int
2956 dissect_h248_IA5String_SIZE_8(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2957   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
2958                                             actx, tree, tvb, offset, hf_index,
2959                                             NULL);
2960
2961   return offset;
2962 }
2963
2964
2965 static const value_string h248_NonStandardIdentifier_vals[] = {
2966   {   0, "object" },
2967   {   1, "h221NonStandard" },
2968   {   2, "experimental" },
2969   { 0, NULL }
2970 };
2971
2972 static const ber_choice_t NonStandardIdentifier_choice[] = {
2973   {   0, &hf_h248_object         , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_OBJECT_IDENTIFIER },
2974   {   1, &hf_h248_h221NonStandard, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_H221NonStandard },
2975   {   2, &hf_h248_experimental   , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_IA5String_SIZE_8 },
2976   { 0, NULL, 0, 0, 0, NULL }
2977 };
2978
2979 static int
2980 dissect_h248_NonStandardIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2981   offset = dissect_ber_choice(actx, tree, tvb, offset,
2982                                  NonStandardIdentifier_choice, hf_index, ett_h248_NonStandardIdentifier,
2983                                  NULL);
2984
2985   return offset;
2986 }
2987
2988
2989 static const ber_sequence_t NonStandardData_sequence[] = {
2990   { &hf_h248_nonStandardIdentifier, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_NonStandardIdentifier },
2991   { &hf_h248_data           , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_OCTET_STRING },
2992   { NULL, 0, 0, 0, NULL }
2993 };
2994
2995 static int
2996 dissect_h248_NonStandardData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2997   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2998                                    NonStandardData_sequence, hf_index, ett_h248_NonStandardData);
2999
3000   return offset;
3001 }
3002
3003
3004 static const ber_sequence_t ModemDescriptor_sequence[] = {
3005   { &hf_h248_mtl            , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ModemType },
3006   { &hf_h248_mpl            , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
3007   { &hf_h248_nonStandardData, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NonStandardData },
3008   { NULL, 0, 0, 0, NULL }
3009 };
3010
3011 static int
3012 dissect_h248_ModemDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3013   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3014                                    ModemDescriptor_sequence, hf_index, ett_h248_ModemDescriptor);
3015
3016   return offset;
3017 }
3018
3019
3020 static const value_string h248_MuxType_vals[] = {
3021   {   0, "h221" },
3022   {   1, "h223" },
3023   {   2, "h226" },
3024   {   3, "v76" },
3025   {   4, "nx64k" },
3026   { 0, NULL }
3027 };
3028
3029
3030 static int
3031 dissect_h248_MuxType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3032   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3033                                   NULL);
3034
3035   return offset;
3036 }
3037
3038
3039 static const ber_sequence_t SEQUENCE_OF_TerminationID_sequence_of[1] = {
3040   { &hf_h248_termList_item  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TerminationID },
3041 };
3042
3043 static int
3044 dissect_h248_SEQUENCE_OF_TerminationID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3045   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3046                                       SEQUENCE_OF_TerminationID_sequence_of, hf_index, ett_h248_SEQUENCE_OF_TerminationID);
3047
3048   return offset;
3049 }
3050
3051
3052 static const ber_sequence_t MuxDescriptor_sequence[] = {
3053   { &hf_h248_muxType        , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_MuxType },
3054   { &hf_h248_termList       , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_TerminationID },
3055   { &hf_h248_nonStandardData, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NonStandardData },
3056   { NULL, 0, 0, 0, NULL }
3057 };
3058
3059 static int
3060 dissect_h248_MuxDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3061   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3062                                    MuxDescriptor_sequence, hf_index, ett_h248_MuxDescriptor);
3063
3064   return offset;
3065 }
3066
3067
3068
3069 static int
3070 dissect_h248_RequestID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3071   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3072                                                 NULL);
3073
3074   return offset;
3075 }
3076
3077
3078
3079
3080 static int
3081 dissect_h248_Name(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3082   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
3083                                        NULL);
3084
3085   return offset;
3086 }
3087
3088
3089
3090 static int
3091 dissect_h248_DigitMapName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3092   offset = dissect_h248_Name(implicit_tag, tvb, offset, actx, tree, hf_index);
3093
3094   return offset;
3095 }
3096
3097
3098
3099 static int
3100 dissect_h248_INTEGER_0_99(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3101   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3102                                                 NULL);
3103
3104   return offset;
3105 }
3106
3107
3108 static const ber_sequence_t DigitMapValue_sequence[] = {
3109   { &hf_h248_startTimer     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
3110   { &hf_h248_shortTimer     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
3111   { &hf_h248_longTimer      , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
3112   { &hf_h248_digitMapBody   , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_IA5String },
3113   { &hf_h248_durationTimer  , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
3114   { NULL, 0, 0, 0, NULL }
3115 };
3116
3117 static int
3118 dissect_h248_DigitMapValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3119   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3120                                    DigitMapValue_sequence, hf_index, ett_h248_DigitMapValue);
3121
3122   return offset;
3123 }
3124
3125
3126 static const value_string h248_EventDM_vals[] = {
3127   {   0, "digitMapName" },
3128   {   1, "digitMapValue" },
3129   { 0, NULL }
3130 };
3131
3132 static const ber_choice_t EventDM_choice[] = {
3133   {   0, &hf_h248_digitMapName   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapName },
3134   {   1, &hf_h248_digitMapValue  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapValue },
3135   { 0, NULL, 0, 0, 0, NULL }
3136 };
3137
3138 static int
3139 dissect_h248_EventDM(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3140   offset = dissect_ber_choice(actx, tree, tvb, offset,
3141                                  EventDM_choice, hf_index, ett_h248_EventDM,
3142                                  NULL);
3143
3144   return offset;
3145 }
3146
3147
3148
3149 static const value_string h248_SignalType_vals[] = {
3150   {   0, "brief" },
3151   {   1, "onOff" },
3152   {   2, "timeOut" },
3153   { 0, NULL }
3154 };
3155
3156
3157 static int
3158 dissect_h248_SignalType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3159   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3160                                   NULL);
3161
3162   return offset;
3163 }
3164
3165
3166 static const asn_namedbit NotifyCompletion_bits[] = {
3167   {  0, &hf_h248_NotifyCompletion_onTimeOut, -1, -1, "onTimeOut", NULL },
3168   {  1, &hf_h248_NotifyCompletion_onInterruptByEvent, -1, -1, "onInterruptByEvent", NULL },
3169   {  2, &hf_h248_NotifyCompletion_onInterruptByNewSignalDescr, -1, -1, "onInterruptByNewSignalDescr", NULL },
3170   {  3, &hf_h248_NotifyCompletion_otherReason, -1, -1, "otherReason", NULL },
3171   {  4, &hf_h248_NotifyCompletion_onIteration, -1, -1, "onIteration", NULL },
3172   { 0, NULL, 0, 0, NULL, NULL }
3173 };
3174
3175 static int
3176 dissect_h248_NotifyCompletion(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3177   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
3178                                     NotifyCompletion_bits, hf_index, ett_h248_NotifyCompletion,
3179                                     NULL);
3180
3181   return offset;
3182 }
3183
3184
3185
3186
3187 static const ber_sequence_t SigParamValues_sequence_of[1] = {
3188   { &hf_h248_SigParamValues_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_SigParamValue },
3189 };
3190
3191 static int
3192 dissect_h248_SigParamValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3193   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3194                                       SigParamValues_sequence_of, hf_index, ett_h248_SigParamValues);
3195
3196   return offset;
3197 }
3198
3199
3200 static const value_string h248_T_extraInfo_vals[] = {
3201   {   0, "relation" },
3202   {   1, "range" },
3203   {   2, "sublist" },
3204   { 0, NULL }
3205 };
3206
3207 static const ber_choice_t T_extraInfo_choice[] = {
3208   {   0, &hf_h248_relation       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Relation },
3209   {   1, &hf_h248_range          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3210   {   2, &hf_h248_sublist        , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3211   { 0, NULL, 0, 0, 0, NULL }
3212 };
3213
3214 static int
3215 dissect_h248_T_extraInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3216   offset = dissect_ber_choice(actx, tree, tvb, offset,
3217                                  T_extraInfo_choice, hf_index, ett_h248_T_extraInfo,
3218                                  NULL);
3219
3220   return offset;
3221 }
3222
3223
3224 static const ber_sequence_t SigParameter_sequence[] = {
3225   { &hf_h248_sigParameterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SigParameterName },
3226   { &hf_h248_value          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SigParamValues },
3227   { &hf_h248_extraInfo      , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_extraInfo },
3228   { NULL, 0, 0, 0, NULL }
3229 };
3230
3231 static int
3232 dissect_h248_SigParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3233 #line 423 "../../asn1/h248/h248.cnf"
3234 /* H248 v1 support */
3235         if (h248_version > 1) {
3236                   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3237                                    SigParameter_sequence, hf_index, ett_h248_SigParameter);
3238
3239 } else {
3240         offset = dissect_h248_SigParameterV1( implicit_tag, tvb, offset, actx, tree, hf_index);
3241 }
3242
3243
3244   return offset;
3245 }
3246
3247
3248 static const ber_sequence_t SEQUENCE_OF_SigParameter_sequence_of[1] = {
3249   { &hf_h248_sigParList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_SigParameter },
3250 };
3251
3252 static int
3253 dissect_h248_SEQUENCE_OF_SigParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3254   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3255                                       SEQUENCE_OF_SigParameter_sequence_of, hf_index, ett_h248_SEQUENCE_OF_SigParameter);
3256
3257   return offset;
3258 }
3259
3260
3261 static const value_string h248_SignalDirection_vals[] = {
3262   {   0, "internal" },
3263   {   1, "external" },
3264   {   2, "both" },
3265   { 0, NULL }
3266 };
3267
3268
3269 static int
3270 dissect_h248_SignalDirection(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3271   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3272                                   NULL);
3273
3274   return offset;
3275 }
3276
3277
3278 static const ber_sequence_t Signal_sequence[] = {
3279   { &hf_h248_signalName     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SignalName },
3280   { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3281   { &hf_h248_sigType        , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalType },
3282   { &hf_h248_duration       , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
3283   { &hf_h248_notifyCompletion, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NotifyCompletion },
3284   { &hf_h248_keepActive     , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3285   { &hf_h248_sigParList     , BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_SigParameter },
3286   { &hf_h248_direction      , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalDirection },
3287   { &hf_h248_requestID      , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
3288   { &hf_h248_intersigDelay  , BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
3289   { NULL, 0, 0, 0, NULL }
3290 };
3291
3292 static int
3293 dissect_h248_Signal(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3294   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3295                                    Signal_sequence, hf_index, ett_h248_Signal);
3296
3297   return offset;
3298 }
3299
3300
3301 static const ber_sequence_t SEQUENCE_OF_Signal_sequence_of[1] = {
3302   { &hf_h248_signalList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_Signal },
3303 };
3304
3305 static int
3306 dissect_h248_SEQUENCE_OF_Signal(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3307   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3308                                       SEQUENCE_OF_Signal_sequence_of, hf_index, ett_h248_SEQUENCE_OF_Signal);
3309
3310   return offset;
3311 }
3312
3313
3314 static const ber_sequence_t SeqSigList_sequence[] = {
3315   { &hf_h248_id             , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
3316   { &hf_h248_signalList     , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_Signal },
3317   { NULL, 0, 0, 0, NULL }
3318 };
3319
3320 static int
3321 dissect_h248_SeqSigList(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3322   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3323                                    SeqSigList_sequence, hf_index, ett_h248_SeqSigList);
3324
3325   return offset;
3326 }
3327
3328
3329 static const value_string h248_SignalRequest_vals[] = {
3330   {   0, "signal" },
3331   {   1, "seqSigList" },
3332   { 0, NULL }
3333 };
3334
3335 static const ber_choice_t SignalRequest_choice[] = {
3336   {   0, &hf_h248_signal         , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Signal },
3337   {   1, &hf_h248_seqSigList     , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SeqSigList },
3338   { 0, NULL, 0, 0, 0, NULL }
3339 };
3340
3341 static int
3342 dissect_h248_SignalRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3343   offset = dissect_ber_choice(actx, tree, tvb, offset,
3344                                  SignalRequest_choice, hf_index, ett_h248_SignalRequest,
3345                                  NULL);
3346
3347   return offset;
3348 }
3349
3350
3351 static const ber_sequence_t SignalsDescriptor_sequence_of[1] = {
3352   { &hf_h248_SignalsDescriptor_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_SignalRequest },
3353 };
3354
3355 static int
3356 dissect_h248_SignalsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3357   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3358                                       SignalsDescriptor_sequence_of, hf_index, ett_h248_SignalsDescriptor);
3359
3360   return offset;
3361 }
3362
3363
3364 static const ber_sequence_t RegulatedEmbeddedDescriptor_sequence[] = {
3365   { &hf_h248_secondEvent    , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SecondEventsDescriptor },
3366   { &hf_h248_signalsDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
3367   { NULL, 0, 0, 0, NULL }
3368 };
3369
3370 static int
3371 dissect_h248_RegulatedEmbeddedDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3372   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3373                                    RegulatedEmbeddedDescriptor_sequence, hf_index, ett_h248_RegulatedEmbeddedDescriptor);
3374
3375   return offset;
3376 }
3377
3378
3379 static const value_string h248_NotifyBehaviour_vals[] = {
3380   {   0, "notifyImmediate" },
3381   {   1, "notifyRegulated" },
3382   {   2, "neverNotify" },
3383   { 0, NULL }
3384 };
3385
3386 static const ber_choice_t NotifyBehaviour_choice[] = {
3387   {   0, &hf_h248_notifyImmediate, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3388   {   1, &hf_h248_notifyRegulated, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_RegulatedEmbeddedDescriptor },
3389   {   2, &hf_h248_neverNotify    , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3390   { 0, NULL, 0, 0, 0, NULL }
3391 };
3392
3393 static int
3394 dissect_h248_NotifyBehaviour(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3395   offset = dissect_ber_choice(actx, tree, tvb, offset,
3396                                  NotifyBehaviour_choice, hf_index, ett_h248_NotifyBehaviour,
3397                                  NULL);
3398
3399   return offset;
3400 }
3401
3402
3403 static const ber_sequence_t SecondRequestedActions_sequence[] = {
3404   { &hf_h248_keepActive     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3405   { &hf_h248_eventDM        , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_EventDM },
3406   { &hf_h248_signalsDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
3407   { &hf_h248_notifyBehaviour, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_NotifyBehaviour },
3408   { &hf_h248_resetEventsDescriptor, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3409   { NULL, 0, 0, 0, NULL }
3410 };
3411
3412 static int
3413 dissect_h248_SecondRequestedActions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3414   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3415                                    SecondRequestedActions_sequence, hf_index, ett_h248_SecondRequestedActions);
3416
3417   return offset;
3418 }
3419
3420
3421
3422
3423 static const ber_sequence_t EventParamValues_sequence_of[1] = {
3424   { &hf_h248_EventParamValues_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_EventParamValue },
3425 };
3426
3427 static int
3428 dissect_h248_EventParamValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3429   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3430                                       EventParamValues_sequence_of, hf_index, ett_h248_EventParamValues);
3431
3432   return offset;
3433 }
3434
3435
3436 static const value_string h248_EventPar_extraInfo_vals[] = {
3437   {   0, "relation" },
3438   {   1, "range" },
3439   {   2, "sublist" },
3440   { 0, NULL }
3441 };
3442
3443 static const ber_choice_t EventPar_extraInfo_choice[] = {
3444   {   0, &hf_h248_relation       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Relation },
3445   {   1, &hf_h248_range          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3446   {   2, &hf_h248_sublist        , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3447   { 0, NULL, 0, 0, 0, NULL }
3448 };
3449
3450 static int
3451 dissect_h248_EventPar_extraInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3452   offset = dissect_ber_choice(actx, tree, tvb, offset,
3453                                  EventPar_extraInfo_choice, hf_index, ett_h248_EventPar_extraInfo,
3454                                  NULL);
3455
3456   return offset;
3457 }
3458
3459
3460 static const ber_sequence_t EventParameter_sequence[] = {
3461   { &hf_h248_eventParameterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventParameterName },
3462   { &hf_h248_eventParamValue, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_EventParamValues },
3463   { &hf_h248_eventPar_extraInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_EventPar_extraInfo },
3464   { NULL, 0, 0, 0, NULL }
3465 };
3466
3467 static int
3468 dissect_h248_EventParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3469 #line 414 "../../asn1/h248/h248.cnf"
3470 /* H248 v1 support */
3471         if (h248_version > 1) {
3472                   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3473                                    EventParameter_sequence, hf_index, ett_h248_EventParameter);
3474
3475 } else {
3476         offset = dissect_h248_EventParameterV1( implicit_tag, tvb, offset, actx, tree, hf_index);
3477 }
3478
3479
3480   return offset;
3481 }
3482
3483
3484 static const ber_sequence_t SEQUENCE_OF_EventParameter_sequence_of[1] = {
3485   { &hf_h248_eventParList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_EventParameter },
3486 };
3487
3488 static int
3489 dissect_h248_SEQUENCE_OF_EventParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3490   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3491                                       SEQUENCE_OF_EventParameter_sequence_of, hf_index, ett_h248_SEQUENCE_OF_EventParameter);
3492
3493   return offset;
3494 }
3495
3496
3497 static const ber_sequence_t SecondRequestedEvent_sequence[] = {
3498   { &hf_h248_pkgdName       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
3499   { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3500   { &hf_h248_secondaryEventAction, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SecondRequestedActions },
3501   { &hf_h248_evParList      , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
3502   { NULL, 0, 0, 0, NULL }
3503 };
3504
3505 static int
3506 dissect_h248_SecondRequestedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3507   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3508                                    SecondRequestedEvent_sequence, hf_index, ett_h248_SecondRequestedEvent);
3509
3510   return offset;
3511 }
3512
3513
3514 static const ber_sequence_t SEQUENCE_OF_SecondRequestedEvent_sequence_of[1] = {
3515   { &hf_h248_secondaryEventList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_SecondRequestedEvent },
3516 };
3517
3518 static int
3519 dissect_h248_SEQUENCE_OF_SecondRequestedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3520   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3521                                       SEQUENCE_OF_SecondRequestedEvent_sequence_of, hf_index, ett_h248_SEQUENCE_OF_SecondRequestedEvent);
3522
3523   return offset;
3524 }
3525
3526
3527 static const ber_sequence_t SecondEventsDescriptor_sequence[] = {
3528   { &hf_h248_requestID      , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
3529   { &hf_h248_secondaryEventList, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_SecondRequestedEvent },
3530   { NULL, 0, 0, 0, NULL }
3531 };
3532
3533 static int
3534 dissect_h248_SecondEventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3535   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3536                                    SecondEventsDescriptor_sequence, hf_index, ett_h248_SecondEventsDescriptor);
3537
3538   return offset;
3539 }
3540
3541
3542 static const ber_sequence_t RequestedActions_sequence[] = {
3543   { &hf_h248_keepActive     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3544   { &hf_h248_eventDM        , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_EventDM },
3545   { &hf_h248_secondEvent    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SecondEventsDescriptor },
3546   { &hf_h248_signalsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
3547   { &hf_h248_notifyBehaviour, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_NotifyBehaviour },
3548   { &hf_h248_resetEventsDescriptor, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3549   { NULL, 0, 0, 0, NULL }
3550 };
3551
3552 static int
3553 dissect_h248_RequestedActions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3554   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3555                                    RequestedActions_sequence, hf_index, ett_h248_RequestedActions);
3556
3557   return offset;
3558 }
3559
3560
3561 static const ber_sequence_t RequestedEvent_sequence[] = {
3562   { &hf_h248_eventName      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventName },
3563   { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3564   { &hf_h248_eventAction    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestedActions },
3565   { &hf_h248_evParList      , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
3566   { NULL, 0, 0, 0, NULL }
3567 };
3568
3569 static int
3570 dissect_h248_RequestedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3571   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3572                                    RequestedEvent_sequence, hf_index, ett_h248_RequestedEvent);
3573
3574   return offset;
3575 }
3576
3577
3578 static const ber_sequence_t SEQUENCE_OF_RequestedEvent_sequence_of[1] = {
3579   { &hf_h248_eventList_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_RequestedEvent },
3580 };
3581
3582 static int
3583 dissect_h248_SEQUENCE_OF_RequestedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3584   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3585                                       SEQUENCE_OF_RequestedEvent_sequence_of, hf_index, ett_h248_SEQUENCE_OF_RequestedEvent);
3586
3587   return offset;
3588 }
3589
3590
3591 static const ber_sequence_t EventsDescriptor_sequence[] = {
3592   { &hf_h248_requestID      , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
3593   { &hf_h248_eventList      , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_RequestedEvent },
3594   { NULL, 0, 0, 0, NULL }
3595 };
3596
3597 static int
3598 dissect_h248_EventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3599   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3600                                    EventsDescriptor_sequence, hf_index, ett_h248_EventsDescriptor);
3601
3602   return offset;
3603 }
3604
3605
3606 static const ber_sequence_t EventSpec_sequence[] = {
3607   { &hf_h248_eventName      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventName },
3608   { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3609   { &hf_h248_eventParList   , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
3610   { NULL, 0, 0, 0, NULL }
3611 };
3612
3613 static int
3614 dissect_h248_EventSpec(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3615   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3616                                    EventSpec_sequence, hf_index, ett_h248_EventSpec);
3617
3618   return offset;
3619 }
3620
3621
3622 static const ber_sequence_t EventBufferDescriptor_sequence_of[1] = {
3623   { &hf_h248_EventBufferDescriptor_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_EventSpec },
3624 };
3625
3626 static int
3627 dissect_h248_EventBufferDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3628   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3629                                       EventBufferDescriptor_sequence_of, hf_index, ett_h248_EventBufferDescriptor);
3630
3631   return offset;
3632 }
3633
3634
3635 static const ber_sequence_t DigitMapDescriptor_sequence[] = {
3636   { &hf_h248_digitMapName   , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_DigitMapName },
3637   { &hf_h248_digitMapValue  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_DigitMapValue },
3638   { NULL, 0, 0, 0, NULL }
3639 };
3640
3641 static int
3642 dissect_h248_DigitMapDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3643   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3644                                    DigitMapDescriptor_sequence, hf_index, ett_h248_DigitMapDescriptor);
3645
3646   return offset;
3647 }
3648
3649
3650 static const asn_namedbit T_auditToken_bits[] = {
3651   {  0, &hf_h248_T_auditToken_muxToken, -1, -1, "muxToken", NULL },
3652   {  1, &hf_h248_T_auditToken_modemToken, -1, -1, "modemToken", NULL },
3653   {  2, &hf_h248_T_auditToken_mediaToken, -1, -1, "mediaToken", NULL },
3654   {  3, &hf_h248_T_auditToken_eventsToken, -1, -1, "eventsToken", NULL },
3655   {  4, &hf_h248_T_auditToken_signalsToken, -1, -1, "signalsToken", NULL },
3656   {  5, &hf_h248_T_auditToken_digitMapToken, -1, -1, "digitMapToken", NULL },
3657   {  6, &hf_h248_T_auditToken_statsToken, -1, -1, "statsToken", NULL },
3658   {  7, &hf_h248_T_auditToken_observedEventsToken, -1, -1, "observedEventsToken", NULL },
3659   {  8, &hf_h248_T_auditToken_packagesToken, -1, -1, "packagesToken", NULL },
3660   {  9, &hf_h248_T_auditToken_eventBufferToken, -1, -1, "eventBufferToken", NULL },
3661   { 0, NULL, 0, 0, NULL, NULL }
3662 };
3663
3664 static int
3665 dissect_h248_T_auditToken(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3666   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
3667                                     T_auditToken_bits, hf_index, ett_h248_T_auditToken,
3668                                     NULL);
3669
3670   return offset;
3671 }
3672
3673
3674 static const ber_sequence_t IndAudTerminationStateDescriptor_sequence[] = {
3675   { &hf_h248_indAudPropertyParms, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAudPropertyParm },
3676   { &hf_h248_eventBufferControl, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3677   { &hf_h248_iATSDServiceState, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3678   { &hf_h248_serviceStateSel, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ServiceState },
3679   { NULL, 0, 0, 0, NULL }
3680 };
3681
3682 static int
3683 dissect_h248_IndAudTerminationStateDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3684   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3685                                    IndAudTerminationStateDescriptor_sequence, hf_index, ett_h248_IndAudTerminationStateDescriptor);
3686
3687   return offset;
3688 }
3689
3690
3691 static const ber_sequence_t IndAudLocalControlDescriptor_sequence[] = {
3692   { &hf_h248_iALCDStreamMode, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3693   { &hf_h248_iALCDReserveValue, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3694   { &hf_h248_iALCDReserveGroup, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3695   { &hf_h248_indAudPropertyParms, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAudPropertyParm },
3696   { &hf_h248_streamModeSel  , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamMode },
3697   { NULL, 0, 0, 0, NULL }
3698 };
3699
3700 static int
3701 dissect_h248_IndAudLocalControlDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3702   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3703                                    IndAudLocalControlDescriptor_sequence, hf_index, ett_h248_IndAudLocalControlDescriptor);
3704
3705   return offset;
3706 }
3707
3708
3709 static const ber_sequence_t IndAudPropertyGroup_sequence_of[1] = {
3710   { &hf_h248_IndAudPropertyGroup_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_IndAudPropertyParm },
3711 };
3712
3713 static int
3714 dissect_h248_IndAudPropertyGroup(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3715   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3716                                       IndAudPropertyGroup_sequence_of, hf_index, ett_h248_IndAudPropertyGroup);
3717
3718   return offset;
3719 }
3720
3721
3722 static const ber_sequence_t IndAudLocalRemoteDescriptor_sequence[] = {
3723   { &hf_h248_propGroupID    , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
3724   { &hf_h248_iAPropertyGroup, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IndAudPropertyGroup },
3725   { NULL, 0, 0, 0, NULL }
3726 };
3727
3728 static int
3729 dissect_h248_IndAudLocalRemoteDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3730   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3731                                    IndAudLocalRemoteDescriptor_sequence, hf_index, ett_h248_IndAudLocalRemoteDescriptor);
3732
3733   return offset;
3734 }
3735
3736
3737 static const ber_sequence_t IndAudStatisticsDescriptor_sequence[] = {
3738   { &hf_h248_iAStatName     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
3739   { NULL, 0, 0, 0, NULL }
3740 };
3741
3742 static int
3743 dissect_h248_IndAudStatisticsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3744   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3745                                    IndAudStatisticsDescriptor_sequence, hf_index, ett_h248_IndAudStatisticsDescriptor);
3746
3747   return offset;
3748 }
3749
3750
3751 static const ber_sequence_t IndAudStreamParms_sequence[] = {
3752   { &hf_h248_iASPLocalControlDescriptor, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudLocalControlDescriptor },
3753   { &hf_h248_iASPLocalDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudLocalRemoteDescriptor },
3754   { &hf_h248_iASPRemoteDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudLocalRemoteDescriptor },
3755   { &hf_h248_statisticsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudStatisticsDescriptor },
3756   { NULL, 0, 0, 0, NULL }
3757 };
3758
3759 static int
3760 dissect_h248_IndAudStreamParms(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3761   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3762                                    IndAudStreamParms_sequence, hf_index, ett_h248_IndAudStreamParms);
3763
3764   return offset;
3765 }
3766
3767
3768 static const ber_sequence_t IndAudStreamDescriptor_sequence[] = {
3769   { &hf_h248_streamID       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3770   { &hf_h248_indAudStreamParms, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IndAudStreamParms },
3771   { NULL, 0, 0, 0, NULL }
3772 };
3773
3774 static int
3775 dissect_h248_IndAudStreamDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3776   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3777                                    IndAudStreamDescriptor_sequence, hf_index, ett_h248_IndAudStreamDescriptor);
3778
3779   return offset;
3780 }
3781
3782
3783 static const ber_sequence_t SEQUENCE_OF_IndAudStreamDescriptor_sequence_of[1] = {
3784   { &hf_h248_multiStream_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_IndAudStreamDescriptor },
3785 };
3786
3787 static int
3788 dissect_h248_SEQUENCE_OF_IndAudStreamDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3789   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3790                                       SEQUENCE_OF_IndAudStreamDescriptor_sequence_of, hf_index, ett_h248_SEQUENCE_OF_IndAudStreamDescriptor);
3791
3792   return offset;
3793 }
3794
3795
3796 static const value_string h248_IndAudMediaDescriptorStreams_vals[] = {
3797   {   0, "oneStream" },
3798   {   1, "multiStream" },
3799   { 0, NULL }
3800 };
3801
3802 static const ber_choice_t IndAudMediaDescriptorStreams_choice[] = {
3803   {   0, &hf_h248_oneStream      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IndAudStreamParms },
3804   {   1, &hf_h248_multiStream    , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAudStreamDescriptor },
3805   { 0, NULL, 0, 0, 0, NULL }
3806 };
3807
3808 static int
3809 dissect_h248_IndAudMediaDescriptorStreams(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3810   offset = dissect_ber_choice(actx, tree, tvb, offset,
3811                                  IndAudMediaDescriptorStreams_choice, hf_index, ett_h248_IndAudMediaDescriptorStreams,
3812                                  NULL);
3813
3814   return offset;
3815 }
3816
3817
3818 static const ber_sequence_t IndAudMediaDescriptor_sequence[] = {
3819   { &hf_h248_indAudTerminationStateDescriptor, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudTerminationStateDescriptor },
3820   { &hf_h248_indAudMediaDescriptorStreams, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudMediaDescriptorStreams },
3821   { NULL, 0, 0, 0, NULL }
3822 };
3823
3824 static int
3825 dissect_h248_IndAudMediaDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3826   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3827                                    IndAudMediaDescriptor_sequence, hf_index, ett_h248_IndAudMediaDescriptor);
3828
3829   return offset;
3830 }
3831
3832
3833 static const ber_sequence_t IndAudEventsDescriptor_sequence[] = {
3834   { &hf_h248_requestID      , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
3835   { &hf_h248_iAEDPkgdName   , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
3836   { &hf_h248_streamID       , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3837   { NULL, 0, 0, 0, NULL }
3838 };
3839
3840 static int
3841 dissect_h248_IndAudEventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3842   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3843                                    IndAudEventsDescriptor_sequence, hf_index, ett_h248_IndAudEventsDescriptor);
3844
3845   return offset;
3846 }
3847
3848
3849 static const ber_sequence_t IndAudEventBufferDescriptor_sequence[] = {
3850   { &hf_h248_iAEBDEventName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
3851   { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3852   { NULL, 0, 0, 0, NULL }
3853 };
3854
3855 static int
3856 dissect_h248_IndAudEventBufferDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3857   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3858                                    IndAudEventBufferDescriptor_sequence, hf_index, ett_h248_IndAudEventBufferDescriptor);
3859
3860   return offset;
3861 }
3862
3863
3864 static const ber_sequence_t IndAudSignal_sequence[] = {
3865   { &hf_h248_iASignalName   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
3866   { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3867   { &hf_h248_signalRequestID, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
3868   { NULL, 0, 0, 0, NULL }
3869 };
3870
3871 static int
3872 dissect_h248_IndAudSignal(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3873   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3874                                    IndAudSignal_sequence, hf_index, ett_h248_IndAudSignal);
3875
3876   return offset;
3877 }
3878
3879
3880 static const ber_sequence_t IndAudSeqSigList_sequence[] = {
3881   { &hf_h248_id             , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
3882   { &hf_h248_iASignalList   , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudSignal },
3883   { NULL, 0, 0, 0, NULL }
3884 };
3885
3886 static int
3887 dissect_h248_IndAudSeqSigList(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3888   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3889                                    IndAudSeqSigList_sequence, hf_index, ett_h248_IndAudSeqSigList);
3890
3891   return offset;
3892 }
3893
3894
3895 static const value_string h248_IndAudSignalsDescriptor_vals[] = {
3896   {   0, "signal" },
3897   {   1, "seqSigList" },
3898   { 0, NULL }
3899 };
3900
3901 static const ber_choice_t IndAudSignalsDescriptor_choice[] = {
3902   {   0, &hf_h248_indAudSignal   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IndAudSignal },
3903   {   1, &hf_h248_indAudSeqSigList, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IndAudSeqSigList },
3904   { 0, NULL, 0, 0, 0, NULL }
3905 };
3906
3907 static int
3908 dissect_h248_IndAudSignalsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3909   offset = dissect_ber_choice(actx, tree, tvb, offset,
3910                                  IndAudSignalsDescriptor_choice, hf_index, ett_h248_IndAudSignalsDescriptor,
3911                                  NULL);
3912
3913   return offset;
3914 }
3915
3916
3917 static const ber_sequence_t IndAudDigitMapDescriptor_sequence[] = {
3918   { &hf_h248_digitMapName   , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_DigitMapName },
3919   { NULL, 0, 0, 0, NULL }
3920 };
3921
3922 static int
3923 dissect_h248_IndAudDigitMapDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3924   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3925                                    IndAudDigitMapDescriptor_sequence, hf_index, ett_h248_IndAudDigitMapDescriptor);
3926
3927   return offset;
3928 }
3929
3930
3931 static const ber_sequence_t IndAudPackagesDescriptor_sequence[] = {
3932   { &hf_h248_packageName    , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Name },
3933   { &hf_h248_packageVersion , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
3934   { NULL, 0, 0, 0, NULL }
3935 };
3936
3937 static int
3938 dissect_h248_IndAudPackagesDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3939   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3940                                    IndAudPackagesDescriptor_sequence, hf_index, ett_h248_IndAudPackagesDescriptor);
3941
3942   return offset;
3943 }
3944
3945
3946 static const value_string h248_IndAuditParameter_vals[] = {
3947   {   0, "indaudmediaDescriptor" },
3948   {   1, "indaudeventsDescriptor" },
3949   {   2, "indaudeventBufferDescriptor" },
3950   {   3, "indaudsignalsDescriptor" },
3951   {   4, "indauddigitMapDescriptor" },
3952   {   5, "indaudstatisticsDescriptor" },
3953   {   6, "indaudpackagesDescriptor" },
3954   { 0, NULL }
3955 };
3956
3957 static const ber_choice_t IndAuditParameter_choice[] = {
3958   {   0, &hf_h248_indaudmediaDescriptor, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IndAudMediaDescriptor },
3959   {   1, &hf_h248_indaudeventsDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IndAudEventsDescriptor },
3960   {   2, &hf_h248_indaudeventBufferDescriptor, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_IndAudEventBufferDescriptor },
3961   {   3, &hf_h248_indaudsignalsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_IndAudSignalsDescriptor },
3962   {   4, &hf_h248_indauddigitMapDescriptor, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_IndAudDigitMapDescriptor },
3963   {   5, &hf_h248_indaudstatisticsDescriptor, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_IndAudStatisticsDescriptor },
3964   {   6, &hf_h248_indaudpackagesDescriptor, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_IndAudPackagesDescriptor },
3965   { 0, NULL, 0, 0, 0, NULL }
3966 };
3967
3968 static int
3969 dissect_h248_IndAuditParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3970   offset = dissect_ber_choice(actx, tree, tvb, offset,
3971                                  IndAuditParameter_choice, hf_index, ett_h248_IndAuditParameter,
3972                                  NULL);
3973
3974   return offset;
3975 }
3976
3977
3978 static const ber_sequence_t SEQUENCE_OF_IndAuditParameter_sequence_of[1] = {
3979   { &hf_h248_auditPropertyToken_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_IndAuditParameter },
3980 };
3981
3982 static int
3983 dissect_h248_SEQUENCE_OF_IndAuditParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3984   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3985                                       SEQUENCE_OF_IndAuditParameter_sequence_of, hf_index, ett_h248_SEQUENCE_OF_IndAuditParameter);
3986
3987   return offset;
3988 }
3989
3990
3991 static const ber_sequence_t AuditDescriptor_sequence[] = {
3992   { &hf_h248_auditToken     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_auditToken },
3993   { &hf_h248_auditPropertyToken, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAuditParameter },
3994   { NULL, 0, 0, 0, NULL }
3995 };
3996
3997 static int
3998 dissect_h248_AuditDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3999   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4000                                    AuditDescriptor_sequence, hf_index, ett_h248_AuditDescriptor);
4001
4002   return offset;
4003 }
4004
4005
4006 static const value_string h248_AmmDescriptor_vals[] = {
4007   {   0, "mediaDescriptor" },
4008   {   1, "modemDescriptor" },
4009   {   2, "muxDescriptor" },
4010   {   3, "eventsDescriptor" },
4011   {   4, "eventBufferDescriptor" },
4012   {   5, "signalsDescriptor" },
4013   {   6, "digitMapDescriptor" },
4014   {   7, "auditDescriptor" },
4015   {   8, "statisticsDescriptor" },
4016   { 0, NULL }
4017 };
4018
4019 static const ber_choice_t AmmDescriptor_choice[] = {
4020   {   0, &hf_h248_mediaDescriptor, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_MediaDescriptor },
4021   {   1, &hf_h248_modemDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ModemDescriptor },
4022   {   2, &hf_h248_muxDescriptor  , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_MuxDescriptor },
4023   {   3, &hf_h248_eventsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_EventsDescriptor },
4024   {   4, &hf_h248_eventBufferDescriptor, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_EventBufferDescriptor },
4025   {   5, &hf_h248_signalsDescriptor, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
4026   {   6, &hf_h248_digitMapDescriptor, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapDescriptor },
4027   {   7, &hf_h248_auditDescriptor, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
4028   {   8, &hf_h248_aDstatisticsDescriptor, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_h248_StatisticsDescriptor },
4029   { 0, NULL, 0, 0, 0, NULL }
4030 };
4031
4032 static int
4033 dissect_h248_AmmDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4034   offset = dissect_ber_choice(actx, tree, tvb, offset,
4035                                  AmmDescriptor_choice, hf_index, ett_h248_AmmDescriptor,
4036                                  NULL);
4037
4038   return offset;
4039 }
4040
4041
4042 static const ber_sequence_t SEQUENCE_OF_AmmDescriptor_sequence_of[1] = {
4043   { &hf_h248_descriptors_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_AmmDescriptor },
4044 };
4045
4046 static int
4047 dissect_h248_SEQUENCE_OF_AmmDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4048   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4049                                       SEQUENCE_OF_AmmDescriptor_sequence_of, hf_index, ett_h248_SEQUENCE_OF_AmmDescriptor);
4050
4051   return offset;
4052 }
4053
4054
4055 static const ber_sequence_t AmmRequest_sequence[] = {
4056   { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4057   { &hf_h248_descriptors    , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_AmmDescriptor },
4058   { NULL, 0, 0, 0, NULL }
4059 };
4060
4061 static int
4062 dissect_h248_AmmRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4063   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4064                                    AmmRequest_sequence, hf_index, ett_h248_AmmRequest);
4065
4066   return offset;
4067 }
4068
4069
4070
4071 static int
4072 dissect_h248_T_addReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4073 #line 153 "../../asn1/h248/h248.cnf"
4074           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_ADD_REQ,offset,keep_persistent_data);
4075       H248_TAP();
4076
4077   offset = dissect_h248_AmmRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4078
4079 #line 158 "../../asn1/h248/h248.cnf"
4080       curr_info.cmd = NULL;
4081
4082   return offset;
4083 }
4084
4085
4086
4087 static int
4088 dissect_h248_T_moveReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4089 #line 162 "../../asn1/h248/h248.cnf"
4090           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOVE_REQ,offset,keep_persistent_data);
4091       H248_TAP();
4092
4093
4094   offset = dissect_h248_AmmRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4095
4096 #line 168 "../../asn1/h248/h248.cnf"
4097       curr_info.cmd = NULL;
4098
4099   return offset;
4100 }
4101
4102
4103
4104 static int
4105 dissect_h248_T_modReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4106 #line 172 "../../asn1/h248/h248.cnf"
4107           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOD_REQ,offset,keep_persistent_data);
4108       H248_TAP();
4109
4110   offset = dissect_h248_AmmRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4111
4112 #line 176 "../../asn1/h248/h248.cnf"
4113       curr_info.cmd = NULL;
4114
4115   return offset;
4116 }
4117
4118
4119 static const ber_sequence_t SubtractRequest_sequence[] = {
4120   { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4121   { &hf_h248_auditDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
4122   { NULL, 0, 0, 0, NULL }
4123 };
4124
4125 static int
4126 dissect_h248_SubtractRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4127   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4128                                    SubtractRequest_sequence, hf_index, ett_h248_SubtractRequest);
4129
4130   return offset;
4131 }
4132
4133
4134
4135 static int
4136 dissect_h248_T_subtractReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4137 #line 180 "../../asn1/h248/h248.cnf"
4138           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SUB_REQ,offset,keep_persistent_data);
4139       H248_TAP();
4140
4141   offset = dissect_h248_SubtractRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4142
4143 #line 184 "../../asn1/h248/h248.cnf"
4144       curr_info.cmd = NULL;
4145
4146   return offset;
4147 }
4148
4149
4150 static const ber_sequence_t AuditRequest_sequence[] = {
4151   { &hf_h248_terminationID  , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
4152   { &hf_h248_auditDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
4153   { &hf_h248_terminationIDList, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4154   { NULL, 0, 0, 0, NULL }
4155 };
4156
4157 static int
4158 dissect_h248_AuditRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4159   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4160                                    AuditRequest_sequence, hf_index, ett_h248_AuditRequest);
4161
4162   return offset;
4163 }
4164
4165
4166
4167 static int
4168 dissect_h248_T_auditCapRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4169 #line 188 "../../asn1/h248/h248.cnf"
4170           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITCAP_REQ,offset,keep_persistent_data);
4171       H248_TAP();
4172
4173   offset = dissect_h248_AuditRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4174
4175 #line 192 "../../asn1/h248/h248.cnf"
4176       curr_info.cmd = NULL;
4177
4178   return offset;
4179 }
4180
4181
4182
4183 static int
4184 dissect_h248_T_auditValueRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4185 #line 196 "../../asn1/h248/h248.cnf"
4186           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITVAL_REQ,offset,keep_persistent_data);
4187       H248_TAP();
4188
4189   offset = dissect_h248_AuditRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4190
4191 #line 200 "../../asn1/h248/h248.cnf"
4192       curr_info.cmd = NULL;
4193
4194   return offset;
4195 }
4196
4197
4198 static const ber_sequence_t TimeNotation_sequence[] = {
4199   { &hf_h248_date           , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IA5String_SIZE_8 },
4200   { &hf_h248_time           , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IA5String_SIZE_8 },
4201   { NULL, 0, 0, 0, NULL }
4202 };
4203
4204 static int
4205 dissect_h248_TimeNotation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4206   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4207                                    TimeNotation_sequence, hf_index, ett_h248_TimeNotation);
4208
4209   return offset;
4210 }
4211
4212
4213 static const ber_sequence_t ObservedEvent_sequence[] = {
4214   { &hf_h248_eventName      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventName },
4215   { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
4216   { &hf_h248_eventParList   , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
4217   { &hf_h248_timeNotation   , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TimeNotation },
4218   { NULL, 0, 0, 0, NULL }
4219 };
4220
4221 static int
4222 dissect_h248_ObservedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4223   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4224                                    ObservedEvent_sequence, hf_index, ett_h248_ObservedEvent);
4225
4226   return offset;
4227 }
4228
4229
4230 static const ber_sequence_t SEQUENCE_OF_ObservedEvent_sequence_of[1] = {
4231   { &hf_h248_observedEventLst_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_ObservedEvent },
4232 };
4233
4234 static int
4235 dissect_h248_SEQUENCE_OF_ObservedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4236   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4237                                       SEQUENCE_OF_ObservedEvent_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ObservedEvent);
4238
4239   return offset;
4240 }
4241
4242
4243 static const ber_sequence_t ObservedEventsDescriptor_sequence[] = {
4244   { &hf_h248_requestId      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
4245   { &hf_h248_observedEventLst, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ObservedEvent },
4246   { NULL, 0, 0, 0, NULL }
4247 };
4248
4249 static int
4250 dissect_h248_ObservedEventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4251   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4252                                    ObservedEventsDescriptor_sequence, hf_index, ett_h248_ObservedEventsDescriptor);
4253
4254   return offset;
4255 }
4256
4257
4258 static const ber_sequence_t NotifyRequest_sequence[] = {
4259   { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4260   { &hf_h248_observedEventsDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ObservedEventsDescriptor },
4261   { &hf_h248_errorDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
4262   { NULL, 0, 0, 0, NULL }
4263 };
4264
4265 static int
4266 dissect_h248_NotifyRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4267   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4268                                    NotifyRequest_sequence, hf_index, ett_h248_NotifyRequest);
4269
4270   return offset;
4271 }
4272
4273
4274
4275 static int
4276 dissect_h248_T_notifyReq(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4277 #line 204 "../../asn1/h248/h248.cnf"
4278           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_NOTIFY_REQ,offset,keep_persistent_data);
4279       H248_TAP();
4280
4281   offset = dissect_h248_NotifyRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4282
4283 #line 208 "../../asn1/h248/h248.cnf"
4284       curr_info.cmd = NULL;
4285
4286   return offset;
4287 }
4288
4289
4290 static const value_string h248_ServiceChangeMethod_vals[] = {
4291   {   0, "failover" },
4292   {   1, "forced" },
4293   {   2, "graceful" },
4294   {   3, "restart" },
4295   {   4, "disconnected" },
4296   {   5, "handOff" },
4297   { 0, NULL }
4298 };
4299
4300
4301 static int
4302 dissect_h248_ServiceChangeMethod(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4303   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
4304                                   NULL);
4305
4306   return offset;
4307 }
4308
4309
4310 static const value_string h248_ServiceChangeAddress_vals[] = {
4311   {   0, "portNumber" },
4312   {   1, "ip4Address" },
4313   {   2, "ip6Address" },
4314   {   3, "domainName" },
4315   {   4, "deviceName" },
4316   {   5, "mtpAddress" },
4317   { 0, NULL }
4318 };
4319
4320 static const ber_choice_t ServiceChangeAddress_choice[] = {
4321   {   0, &hf_h248_portNumber     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
4322   {   1, &hf_h248_ip4Address     , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IP4Address },
4323   {   2, &hf_h248_ip6Address     , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_IP6Address },
4324   {   3, &hf_h248_domainName     , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_DomainName },
4325   {   4, &hf_h248_deviceName     , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_PathName },
4326   {   5, &hf_h248_mtpAddress     , BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_MtpAddress },
4327   { 0, NULL, 0, 0, 0, NULL }
4328 };
4329
4330 static int
4331 dissect_h248_ServiceChangeAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4332   offset = dissect_ber_choice(actx, tree, tvb, offset,
4333                                  ServiceChangeAddress_choice, hf_index, ett_h248_ServiceChangeAddress,
4334                                  NULL);
4335
4336   return offset;
4337 }
4338
4339
4340
4341 static int
4342 dissect_h248_IA5String_SIZE_1_67(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4343   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
4344                                             actx, tree, tvb, offset, hf_index,
4345                                             NULL);
4346
4347   return offset;
4348 }
4349
4350
4351 static const ber_sequence_t ServiceChangeProfile_sequence[] = {
4352   { &hf_h248_profileName    , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IA5String_SIZE_1_67 },
4353   { NULL, 0, 0, 0, NULL }
4354 };
4355
4356 static int
4357 dissect_h248_ServiceChangeProfile(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4358   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4359                                    ServiceChangeProfile_sequence, hf_index, ett_h248_ServiceChangeProfile);
4360
4361   return offset;
4362 }
4363
4364
4365
4366 static int
4367 dissect_h248_SCreasonValueOctetStr(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4368 #line 373 "../../asn1/h248/h248.cnf"
4369  tvbuff_t       *parameter_tvb;
4370    offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4371                                        &parameter_tvb);
4372
4373
4374  if (!parameter_tvb)
4375         return offset;
4376
4377  dissect_h248_ServiceChangeReasonStr(FALSE, parameter_tvb, 0, actx, tree, hf_h248_serviceChangeReasonStr);
4378
4379
4380   return offset;
4381 }
4382
4383
4384 static const ber_sequence_t SCreasonValue_sequence_of[1] = {
4385   { &hf_h248_SCreasonValue_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_SCreasonValueOctetStr },
4386 };
4387
4388 static int
4389 dissect_h248_SCreasonValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4390 #line 361 "../../asn1/h248/h248.cnf"
4391 /* H248 v1 support */
4392         if ( h248_version > 1 ) {       
4393                 /* Not V1, so call "standard" function */
4394   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4395                                       SCreasonValue_sequence_of, hf_index, ett_h248_SCreasonValue);
4396         
4397 } else {
4398         /* V1 so Value == octet string */
4399         offset = dissect_h248_ValueV1( implicit_tag, tvb, offset, actx, tree, hf_index);
4400 };
4401         
4402
4403
4404   return offset;
4405 }
4406
4407
4408
4409 static int
4410 dissect_h248_INTEGER_0_4294967295(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4411   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
4412                                                 NULL);
4413
4414   return offset;
4415 }
4416
4417
4418 static const ber_sequence_t ServiceChangeParm_sequence[] = {
4419   { &hf_h248_serviceChangeMethod, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeMethod },
4420   { &hf_h248_serviceChangeAddress, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_ServiceChangeAddress },
4421   { &hf_h248_serviceChangeVersion, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
4422   { &hf_h248_serviceChangeProfile, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeProfile },
4423   { &hf_h248_serviceChangeReason, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_SCreasonValue },
4424   { &hf_h248_serviceChangeDelay, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_4294967295 },
4425   { &hf_h248_serviceChangeMgcId, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_MId },
4426   { &hf_h248_timeStamp      , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TimeNotation },
4427   { &hf_h248_nonStandardData, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NonStandardData },
4428   { &hf_h248_serviceChangeInfo, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
4429   { &hf_h248_serviceChangeIncompleteFlag, BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
4430   { NULL, 0, 0, 0, NULL }
4431 };
4432
4433 static int
4434 dissect_h248_ServiceChangeParm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4435   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4436                                    ServiceChangeParm_sequence, hf_index, ett_h248_ServiceChangeParm);
4437
4438   return offset;
4439 }
4440
4441
4442 static const ber_sequence_t ServiceChangeRequest_sequence[] = {
4443   { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4444   { &hf_h248_serviceChangeParms, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeParm },
4445   { NULL, 0, 0, 0, NULL }
4446 };
4447
4448 static int
4449 dissect_h248_ServiceChangeRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4450 #line 212 "../../asn1/h248/h248.cnf"
4451       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SVCCHG_REQ,offset,keep_persistent_data);
4452       H248_TAP();
4453
4454   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4455                                    ServiceChangeRequest_sequence, hf_index, ett_h248_ServiceChangeRequest);
4456
4457 #line 216 "../../asn1/h248/h248.cnf"
4458       curr_info.cmd = NULL;
4459
4460   return offset;
4461 }
4462
4463
4464 static const value_string h248_Command_vals[] = {
4465   {   0, "addReq" },
4466   {   1, "moveReq" },
4467   {   2, "modReq" },
4468   {   3, "subtractReq" },
4469   {   4, "auditCapRequest" },
4470   {   5, "auditValueRequest" },
4471   {   6, "notifyReq" },
4472   {   7, "serviceChangeReq" },
4473   { 0, NULL }
4474 };
4475
4476 static const ber_choice_t Command_choice[] = {
4477   {   0, &hf_h248_addReq         , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_addReq },
4478   {   1, &hf_h248_moveReq        , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_T_moveReq },
4479   {   2, &hf_h248_modReq         , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_modReq },
4480   {   3, &hf_h248_subtractReq    , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_T_subtractReq },
4481   {   4, &hf_h248_auditCapRequest, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_T_auditCapRequest },
4482   {   5, &hf_h248_auditValueRequest, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_T_auditValueRequest },
4483   {   6, &hf_h248_notifyReq      , BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_T_notifyReq },
4484   {   7, &hf_h248_serviceChangeReq, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeRequest },
4485   { 0, NULL, 0, 0, 0, NULL }
4486 };
4487
4488 static int
4489 dissect_h248_Command(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4490   offset = dissect_ber_choice(actx, tree, tvb, offset,
4491                                  Command_choice, hf_index, ett_h248_Command,
4492                                  NULL);
4493
4494   return offset;
4495 }
4496
4497
4498 static const ber_sequence_t CommandRequest_sequence[] = {
4499   { &hf_h248_command        , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_Command },
4500   { &hf_h248_optional       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
4501   { &hf_h248_wildcardReturn , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
4502   { NULL, 0, 0, 0, NULL }
4503 };
4504
4505 static int
4506 dissect_h248_CommandRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4507   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4508                                    CommandRequest_sequence, hf_index, ett_h248_CommandRequest);
4509
4510   return offset;
4511 }
4512
4513
4514 static const ber_sequence_t SEQUENCE_OF_CommandRequest_sequence_of[1] = {
4515   { &hf_h248_commandRequests_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_CommandRequest },
4516 };
4517
4518 static int
4519 dissect_h248_SEQUENCE_OF_CommandRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4520   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4521                                       SEQUENCE_OF_CommandRequest_sequence_of, hf_index, ett_h248_SEQUENCE_OF_CommandRequest);
4522
4523   return offset;
4524 }
4525
4526
4527 static const ber_sequence_t ActionRequest_sequence[] = {
4528   { &hf_h248_contextId      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ContextId },
4529   { &hf_h248_contextRequest , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ContextRequest },
4530   { &hf_h248_contextAttrAuditReq, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_contextAttrAuditReq },
4531   { &hf_h248_commandRequests, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_CommandRequest },
4532   { NULL, 0, 0, 0, NULL }
4533 };
4534
4535 static int
4536 dissect_h248_ActionRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4537   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4538                                    ActionRequest_sequence, hf_index, ett_h248_ActionRequest);
4539
4540   return offset;
4541 }
4542
4543
4544 static const ber_sequence_t SEQUENCE_OF_ActionRequest_sequence_of[1] = {
4545   { &hf_h248_actions_item   , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_ActionRequest },
4546 };
4547
4548 static int
4549 dissect_h248_SEQUENCE_OF_ActionRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4550   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4551                                       SEQUENCE_OF_ActionRequest_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ActionRequest);
4552
4553   return offset;
4554 }
4555
4556
4557 static const ber_sequence_t TransactionRequest_sequence[] = {
4558   { &hf_h248_transactionId  , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_transactionId },
4559   { &hf_h248_actions        , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ActionRequest },
4560   { NULL, 0, 0, 0, NULL }
4561 };
4562
4563 static int
4564 dissect_h248_TransactionRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4565   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4566                                    TransactionRequest_sequence, hf_index, ett_h248_TransactionRequest);
4567
4568   return offset;
4569 }
4570
4571
4572
4573 static int
4574 dissect_h248_T_tpend_transactionId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4575 #line 119 "../../asn1/h248/h248.cnf"
4576     guint32 trx_id = 0;
4577         offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
4578     curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_PENDING, keep_persistent_data);
4579     error_code = 0;
4580
4581
4582
4583   return offset;
4584 }
4585
4586
4587 static const ber_sequence_t TransactionPending_sequence[] = {
4588   { &hf_h248_tpend_transactionId, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_tpend_transactionId },
4589   { NULL, 0, 0, 0, NULL }
4590 };
4591
4592 static int
4593 dissect_h248_TransactionPending(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4594   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4595                                    TransactionPending_sequence, hf_index, ett_h248_TransactionPending);
4596
4597   return offset;
4598 }
4599
4600
4601
4602 static int
4603 dissect_h248_T_trep_transactionId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4604 #line 125 "../../asn1/h248/h248.cnf"
4605     guint32 trx_id = 0;
4606         offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
4607     curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_REPLY, keep_persistent_data);
4608     error_code = 0;
4609
4610
4611
4612   return offset;
4613 }
4614
4615
4616 static const ber_sequence_t PackagesItem_sequence[] = {
4617   { &hf_h248_packageName    , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Name },
4618   { &hf_h248_packageVersion , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
4619   { NULL, 0, 0, 0, NULL }
4620 };
4621
4622 static int
4623 dissect_h248_PackagesItem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4624   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4625                                    PackagesItem_sequence, hf_index, ett_h248_PackagesItem);
4626
4627   return offset;
4628 }
4629
4630
4631 static const ber_sequence_t PackagesDescriptor_sequence_of[1] = {
4632   { &hf_h248_PackagesDescriptor_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PackagesItem },
4633 };
4634
4635 static int
4636 dissect_h248_PackagesDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4637   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4638                                       PackagesDescriptor_sequence_of, hf_index, ett_h248_PackagesDescriptor);
4639
4640   return offset;
4641 }
4642
4643
4644 static const value_string h248_AuditReturnParameter_vals[] = {
4645   {   0, "errorDescriptor" },
4646   {   1, "mediaDescriptor" },
4647   {   2, "modemDescriptor" },
4648   {   3, "muxDescriptor" },
4649   {   4, "eventsDescriptor" },
4650   {   5, "eventBufferDescriptor" },
4651   {   6, "signalsDescriptor" },
4652   {   7, "digitMapDescriptor" },
4653   {   8, "observedEventsDescriptor" },
4654   {   9, "statisticsDescriptor" },
4655   {  10, "packagesDescriptor" },
4656   {  11, "emptyDescriptors" },
4657   { 0, NULL }
4658 };
4659
4660 static const ber_choice_t AuditReturnParameter_choice[] = {
4661   {   0, &hf_h248_errorDescriptor, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
4662   {   1, &hf_h248_mediaDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_MediaDescriptor },
4663   {   2, &hf_h248_modemDescriptor, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_ModemDescriptor },
4664   {   3, &hf_h248_muxDescriptor  , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_MuxDescriptor },
4665   {   4, &hf_h248_eventsDescriptor, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_EventsDescriptor },
4666   {   5, &hf_h248_eventBufferDescriptor, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_EventBufferDescriptor },
4667   {   6, &hf_h248_signalsDescriptor, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
4668   {   7, &hf_h248_digitMapDescriptor, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapDescriptor },
4669   {   8, &hf_h248_observedEventsDescriptor, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_h248_ObservedEventsDescriptor },
4670   {   9, &hf_h248_aRPstatisticsDescriptor, BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_h248_StatisticsDescriptor },
4671   {  10, &hf_h248_packagesDescriptor, BER_CLASS_CON, 10, BER_FLAGS_IMPLTAG, dissect_h248_PackagesDescriptor },
4672   {  11, &hf_h248_emptyDescriptors, BER_CLASS_CON, 11, BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
4673   { 0, NULL, 0, 0, 0, NULL }
4674 };
4675
4676 static int
4677 dissect_h248_AuditReturnParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4678   offset = dissect_ber_choice(actx, tree, tvb, offset,
4679                                  AuditReturnParameter_choice, hf_index, ett_h248_AuditReturnParameter,
4680                                  NULL);
4681
4682   return offset;
4683 }
4684
4685
4686 static const ber_sequence_t TerminationAudit_sequence_of[1] = {
4687   { &hf_h248_TerminationAudit_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_AuditReturnParameter },
4688 };
4689
4690 static int
4691 dissect_h248_TerminationAudit(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4692   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4693                                       TerminationAudit_sequence_of, hf_index, ett_h248_TerminationAudit);
4694
4695   return offset;
4696 }
4697
4698
4699 static const ber_sequence_t AmmsReply_sequence[] = {
4700   { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4701   { &hf_h248_terminationAudit, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TerminationAudit },
4702   { NULL, 0, 0, 0, NULL }
4703 };
4704
4705 static int
4706 dissect_h248_AmmsReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4707   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4708                                    AmmsReply_sequence, hf_index, ett_h248_AmmsReply);
4709
4710   return offset;
4711 }
4712
4713
4714
4715 static int
4716 dissect_h248_T_addReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4717 #line 236 "../../asn1/h248/h248.cnf"
4718       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_ADD_REPLY,offset,keep_persistent_data);
4719       H248_TAP();
4720
4721   offset = dissect_h248_AmmsReply(implicit_tag, tvb, offset, actx, tree, hf_index);
4722
4723   return offset;
4724 }
4725
4726
4727
4728 static int
4729 dissect_h248_T_moveReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4730 #line 241 "../../asn1/h248/h248.cnf"
4731       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOVE_REPLY,offset,keep_persistent_data);
4732       H248_TAP();
4733
4734   offset = dissect_h248_AmmsReply(implicit_tag, tvb, offset, actx, tree, hf_index);
4735
4736   return offset;
4737 }
4738
4739
4740
4741 static int
4742 dissect_h248_T_modReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4743 #line 246 "../../asn1/h248/h248.cnf"
4744       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOD_REPLY,offset,keep_persistent_data);
4745       H248_TAP();
4746
4747   offset = dissect_h248_AmmsReply(implicit_tag, tvb, offset, actx, tree, hf_index);
4748
4749   return offset;
4750 }
4751
4752
4753
4754 static int
4755 dissect_h248_T_subtractReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4756 #line 251 "../../asn1/h248/h248.cnf"
4757       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SUB_REPLY,offset,keep_persistent_data);
4758       H248_TAP();
4759
4760   offset = dissect_h248_AmmsReply(implicit_tag, tvb, offset, actx, tree, hf_index);
4761
4762   return offset;
4763 }
4764
4765
4766 static const ber_sequence_t AuditResult_sequence[] = {
4767   { &hf_h248_terminationID  , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
4768   { &hf_h248_terminationAuditResult, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TerminationAudit },
4769   { NULL, 0, 0, 0, NULL }
4770 };
4771
4772 static int
4773 dissect_h248_AuditResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4774   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4775                                    AuditResult_sequence, hf_index, ett_h248_AuditResult);
4776
4777   return offset;
4778 }
4779
4780
4781 static const ber_sequence_t TermListAuditResult_sequence[] = {
4782   { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4783   { &hf_h248_terminationAuditResult, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TerminationAudit },
4784   { NULL, 0, 0, 0, NULL }
4785 };
4786
4787 static int
4788 dissect_h248_TermListAuditResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4789   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4790                                    TermListAuditResult_sequence, hf_index, ett_h248_TermListAuditResult);
4791
4792   return offset;
4793 }
4794
4795
4796 static const value_string h248_AuditReply_vals[] = {
4797   {   0, "contextAuditResult" },
4798   {   1, "error" },
4799   {   2, "auditResult" },
4800   {   3, "auditResultTermList" },
4801   { 0, NULL }
4802 };
4803
4804 static const ber_choice_t AuditReply_choice[] = {
4805   {   0, &hf_h248_contextAuditResult, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4806   {   1, &hf_h248_error          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
4807   {   2, &hf_h248_auditResult    , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_AuditResult },
4808   {   3, &hf_h248_auditResultTermList, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_TermListAuditResult },
4809   { 0, NULL, 0, 0, 0, NULL }
4810 };
4811
4812 static int
4813 dissect_h248_AuditReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4814   offset = dissect_ber_choice(actx, tree, tvb, offset,
4815                                  AuditReply_choice, hf_index, ett_h248_AuditReply,
4816                                  NULL);
4817
4818   return offset;
4819 }
4820
4821
4822
4823 static int
4824 dissect_h248_T_auditCapReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4825 #line 266 "../../asn1/h248/h248.cnf"
4826       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITCAP_REPLY,offset,keep_persistent_data);
4827       H248_TAP();
4828
4829 #line 271 "../../asn1/h248/h248.cnf"
4830 /* h248v1 support */
4831         if(h248_version > 1) {
4832                   offset = dissect_h248_AuditReply(implicit_tag, tvb, offset, actx, tree, hf_index);
4833
4834 } else {
4835         /* call V1 of the dissector */
4836         offset = dissect_h248_AuditReplyV1(implicit_tag, tvb, offset, actx, tree, hf_index);
4837 }
4838
4839
4840   return offset;
4841 }
4842
4843
4844
4845 static int
4846 dissect_h248_T_auditValueReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4847 #line 281 "../../asn1/h248/h248.cnf"
4848       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITVAL_REPLY,offset,keep_persistent_data);
4849       H248_TAP();
4850
4851 #line 286 "../../asn1/h248/h248.cnf"
4852 /* h248v1 support */
4853         if(h248_version > 1) {
4854                   offset = dissect_h248_AuditReply(implicit_tag, tvb, offset, actx, tree, hf_index);
4855
4856 } else {
4857         /* call V1 of the dissector */
4858         offset = dissect_h248_AuditReplyV1(implicit_tag, tvb, offset, actx, tree, hf_index);
4859 }
4860
4861
4862   return offset;
4863 }
4864
4865
4866 static const ber_sequence_t NotifyReply_sequence[] = {
4867   { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4868   { &hf_h248_errorDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
4869   { NULL, 0, 0, 0, NULL }
4870 };
4871
4872 static int
4873 dissect_h248_NotifyReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4874   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4875                                    NotifyReply_sequence, hf_index, ett_h248_NotifyReply);
4876
4877   return offset;
4878 }
4879
4880
4881
4882 static int
4883 dissect_h248_T_notifyReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4884 #line 256 "../../asn1/h248/h248.cnf"
4885       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_NOTIFY_REPLY,offset,keep_persistent_data);
4886       H248_TAP();
4887
4888   offset = dissect_h248_NotifyReply(implicit_tag, tvb, offset, actx, tree, hf_index);
4889
4890   return offset;
4891 }
4892
4893
4894 static const ber_sequence_t ServiceChangeResParm_sequence[] = {
4895   { &hf_h248_serviceChangeMgcId, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_MId },
4896   { &hf_h248_serviceChangeAddress, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_ServiceChangeAddress },
4897   { &hf_h248_serviceChangeVersion, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
4898   { &hf_h248_serviceChangeProfile, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeProfile },
4899   { &hf_h248_timestamp      , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TimeNotation },
4900   { NULL, 0, 0, 0, NULL }
4901 };
4902
4903 static int
4904 dissect_h248_ServiceChangeResParm(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4905   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4906                                    ServiceChangeResParm_sequence, hf_index, ett_h248_ServiceChangeResParm);
4907
4908   return offset;
4909 }
4910
4911
4912 static const value_string h248_ServiceChangeResult_vals[] = {
4913   {   0, "errorDescriptor" },
4914   {   1, "serviceChangeResParms" },
4915   { 0, NULL }
4916 };
4917
4918 static const ber_choice_t ServiceChangeResult_choice[] = {
4919   {   0, &hf_h248_errorDescriptor, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
4920   {   1, &hf_h248_serviceChangeResParms, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeResParm },
4921   { 0, NULL, 0, 0, 0, NULL }
4922 };
4923
4924 static int
4925 dissect_h248_ServiceChangeResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4926   offset = dissect_ber_choice(actx, tree, tvb, offset,
4927                                  ServiceChangeResult_choice, hf_index, ett_h248_ServiceChangeResult,
4928                                  NULL);
4929
4930   return offset;
4931 }
4932
4933
4934 static const ber_sequence_t ServiceChangeReply_sequence[] = {
4935   { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4936   { &hf_h248_serviceChangeResult, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_ServiceChangeResult },
4937   { NULL, 0, 0, 0, NULL }
4938 };
4939
4940 static int
4941 dissect_h248_ServiceChangeReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4942 #line 261 "../../asn1/h248/h248.cnf"
4943       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SVCCHG_REPLY,offset,keep_persistent_data);
4944       H248_TAP();
4945
4946   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4947                                    ServiceChangeReply_sequence, hf_index, ett_h248_ServiceChangeReply);
4948
4949   return offset;
4950 }
4951
4952
4953 static const value_string h248_CommandReply_vals[] = {
4954   {   0, "addReply" },
4955   {   1, "moveReply" },
4956   {   2, "modReply" },
4957   {   3, "subtractReply" },
4958   {   4, "auditCapReply" },
4959   {   5, "auditValueReply" },
4960   {   6, "notifyReply" },
4961   {   7, "serviceChangeReply" },
4962   { 0, NULL }
4963 };
4964
4965 static const ber_choice_t CommandReply_choice[] = {
4966   {   0, &hf_h248_addReply       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_addReply },
4967   {   1, &hf_h248_moveReply      , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_T_moveReply },
4968   {   2, &hf_h248_modReply       , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_modReply },
4969   {   3, &hf_h248_subtractReply  , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_T_subtractReply },
4970   {   4, &hf_h248_auditCapReply  , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_T_auditCapReply },
4971   {   5, &hf_h248_auditValueReply, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_T_auditValueReply },
4972   {   6, &hf_h248_notifyReply    , BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_T_notifyReply },
4973   {   7, &hf_h248_serviceChangeReply, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeReply },
4974   { 0, NULL, 0, 0, 0, NULL }
4975 };
4976
4977 static int
4978 dissect_h248_CommandReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4979   offset = dissect_ber_choice(actx, tree, tvb, offset,
4980                                  CommandReply_choice, hf_index, ett_h248_CommandReply,
4981                                  NULL);
4982
4983   return offset;
4984 }
4985
4986
4987 static const ber_sequence_t SEQUENCE_OF_CommandReply_sequence_of[1] = {
4988   { &hf_h248_commandReply_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_CommandReply },
4989 };
4990
4991 static int
4992 dissect_h248_SEQUENCE_OF_CommandReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4993   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4994                                       SEQUENCE_OF_CommandReply_sequence_of, hf_index, ett_h248_SEQUENCE_OF_CommandReply);
4995
4996   return offset;
4997 }
4998
4999
5000 static const ber_sequence_t ActionReply_sequence[] = {
5001   { &hf_h248_contextId      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ContextId },
5002   { &hf_h248_errorDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
5003   { &hf_h248_contextReply   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ContextRequest },
5004   { &hf_h248_commandReply   , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_CommandReply },
5005   { NULL, 0, 0, 0, NULL }
5006 };
5007
5008 static int
5009 dissect_h248_ActionReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5010   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5011                                    ActionReply_sequence, hf_index, ett_h248_ActionReply);
5012
5013 #line 146 "../../asn1/h248/h248.cnf"
5014     if (!curr_info.cmd) {
5015           curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_REPLY,offset,keep_persistent_data);
5016       H248_TAP();
5017         }
5018
5019   return offset;
5020 }
5021
5022
5023 static const ber_sequence_t SEQUENCE_OF_ActionReply_sequence_of[1] = {
5024   { &hf_h248_actionReplies_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_ActionReply },
5025 };
5026
5027 static int
5028 dissect_h248_SEQUENCE_OF_ActionReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5029   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5030                                       SEQUENCE_OF_ActionReply_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ActionReply);
5031
5032   return offset;
5033 }
5034
5035
5036 static const value_string h248_T_transactionResult_vals[] = {
5037   {   0, "transactionError" },
5038   {   1, "actionReplies" },
5039   { 0, NULL }
5040 };
5041
5042 static const ber_choice_t T_transactionResult_choice[] = {
5043   {   0, &hf_h248_transactionError, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
5044   {   1, &hf_h248_actionReplies  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ActionReply },
5045   { 0, NULL, 0, 0, 0, NULL }
5046 };
5047
5048 static int
5049 dissect_h248_T_transactionResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5050   offset = dissect_ber_choice(actx, tree, tvb, offset,
5051                                  T_transactionResult_choice, hf_index, ett_h248_T_transactionResult,
5052                                  NULL);
5053
5054   return offset;
5055 }
5056
5057
5058
5059 static int
5060 dissect_h248_SegmentNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5061   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
5062                                                 NULL);
5063
5064   return offset;
5065 }
5066
5067
5068 static const ber_sequence_t TransactionReply_sequence[] = {
5069   { &hf_h248_trep_transactionId, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_trep_transactionId },
5070   { &hf_h248_immAckRequired , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
5071   { &hf_h248_transactionResult, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_transactionResult },
5072   { &hf_h248_segmentNumber  , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SegmentNumber },
5073   { &hf_h248_segmentationComplete, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
5074   { NULL, 0, 0, 0, NULL }
5075 };
5076
5077 static int
5078 dissect_h248_TransactionReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5079   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5080                                    TransactionReply_sequence, hf_index, ett_h248_TransactionReply);
5081
5082   return offset;
5083 }
5084
5085
5086 static const ber_sequence_t TransactionAck_sequence[] = {
5087   { &hf_h248_firstAck       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TransactionId },
5088   { &hf_h248_lastAck        , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TransactionId },
5089   { NULL, 0, 0, 0, NULL }
5090 };
5091
5092 static int
5093 dissect_h248_TransactionAck(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5094   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5095                                    TransactionAck_sequence, hf_index, ett_h248_TransactionAck);
5096
5097   return offset;
5098 }
5099
5100
5101 static const ber_sequence_t TransactionResponseAck_sequence_of[1] = {
5102   { &hf_h248_TransactionResponseAck_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TransactionAck },
5103 };
5104
5105 static int
5106 dissect_h248_TransactionResponseAck(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5107   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5108                                       TransactionResponseAck_sequence_of, hf_index, ett_h248_TransactionResponseAck);
5109
5110   return offset;
5111 }
5112
5113
5114
5115 static int
5116 dissect_h248_T_seg_rep_transactionId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5117 #line 131 "../../asn1/h248/h248.cnf"
5118     guint32 trx_id = 0;
5119         offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
5120     curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_ACK, keep_persistent_data);
5121     error_code = 0;
5122
5123
5124
5125   return offset;
5126 }
5127
5128
5129 static const ber_sequence_t SegmentReply_sequence[] = {
5130   { &hf_h248_seg_rep_transactionId, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_seg_rep_transactionId },
5131   { &hf_h248_segmentNumber  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SegmentNumber },
5132   { &hf_h248_segmentationComplete, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
5133   { NULL, 0, 0, 0, NULL }
5134 };
5135
5136 static int
5137 dissect_h248_SegmentReply(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5138   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5139                                    SegmentReply_sequence, hf_index, ett_h248_SegmentReply);
5140
5141   return offset;
5142 }
5143
5144
5145 static const value_string h248_Transaction_vals[] = {
5146   {   0, "transactionRequest" },
5147   {   1, "transactionPending" },
5148   {   2, "transactionReply" },
5149   {   3, "transactionResponseAck" },
5150   {   4, "segmentReply" },
5151   { 0, NULL }
5152 };
5153
5154 static const ber_choice_t Transaction_choice[] = {
5155   {   0, &hf_h248_transactionRequest, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TransactionRequest },
5156   {   1, &hf_h248_transactionPending, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TransactionPending },
5157   {   2, &hf_h248_transactionReply, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_TransactionReply },
5158   {   3, &hf_h248_transactionResponseAck, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_TransactionResponseAck },
5159   {   4, &hf_h248_segmentReply   , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_SegmentReply },
5160   { 0, NULL, 0, 0, 0, NULL }
5161 };
5162
5163 static int
5164 dissect_h248_Transaction(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5165   offset = dissect_ber_choice(actx, tree, tvb, offset,
5166                                  Transaction_choice, hf_index, ett_h248_Transaction,
5167                                  NULL);
5168
5169   return offset;
5170 }
5171
5172
5173 static const ber_sequence_t SEQUENCE_OF_Transaction_sequence_of[1] = {
5174   { &hf_h248_transactions_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_Transaction },
5175 };
5176
5177 static int
5178 dissect_h248_SEQUENCE_OF_Transaction(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5179   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5180                                       SEQUENCE_OF_Transaction_sequence_of, hf_index, ett_h248_SEQUENCE_OF_Transaction);
5181
5182   return offset;
5183 }
5184
5185
5186 static const value_string h248_T_messageBody_vals[] = {
5187   {   0, "messageError" },
5188   {   1, "transactions" },
5189   { 0, NULL }
5190 };
5191
5192 static const ber_choice_t T_messageBody_choice[] = {
5193   {   0, &hf_h248_messageError   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
5194   {   1, &hf_h248_transactions   , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_Transaction },
5195   { 0, NULL, 0, 0, 0, NULL }
5196 };
5197
5198 static int
5199 dissect_h248_T_messageBody(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5200   offset = dissect_ber_choice(actx, tree, tvb, offset,
5201                                  T_messageBody_choice, hf_index, ett_h248_T_messageBody,
5202                                  NULL);
5203
5204   return offset;
5205 }
5206
5207
5208 static const ber_sequence_t Message_sequence[] = {
5209   { &hf_h248_version        , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_version },
5210   { &hf_h248_mId            , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_MId },
5211   { &hf_h248_messageBody    , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_messageBody },
5212   { NULL, 0, 0, 0, NULL }
5213 };
5214
5215 static int
5216 dissect_h248_Message(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5217 #line 97 "../../asn1/h248/h248.cnf"
5218     curr_info.msg = gcp_msg(actx->pinfo,tvb_raw_offset(tvb),keep_persistent_data);
5219
5220   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5221                                    Message_sequence, hf_index, ett_h248_Message);
5222
5223 #line 101 "../../asn1/h248/h248.cnf"
5224     col_add_str(actx->pinfo->cinfo, COL_INFO, gcp_msg_to_str(curr_info.msg,keep_persistent_data));
5225         
5226     if (keep_persistent_data)
5227         gcp_analyze_msg(h248_tree, h248_tvb, curr_info.msg, &h248_arrel);
5228
5229   return offset;
5230 }
5231
5232
5233 static const ber_sequence_t MegacoMessage_sequence[] = {
5234   { &hf_h248_authHeader     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_AuthenticationHeader },
5235   { &hf_h248_mess           , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_Message },
5236   { NULL, 0, 0, 0, NULL }
5237 };
5238
5239 static int
5240 dissect_h248_MegacoMessage(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5241   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5242                                    MegacoMessage_sequence, hf_index, ett_h248_MegacoMessage);
5243
5244   return offset;
5245 }
5246
5247
5248
5249 static int
5250 dissect_h248_ServiceChangeReasonStr(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5251   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
5252                                             actx, tree, tvb, offset, hf_index,
5253                                             NULL);
5254
5255   return offset;
5256 }
5257
5258
5259 static const value_string h248_AuditResultV1_vals[] = {
5260   {   0, "contectAuditResult" },
5261   {   1, "terminationAuditResult" },
5262   { 0, NULL }
5263 };
5264
5265 static const ber_choice_t AuditResultV1_choice[] = {
5266   {   0, &hf_h248_contectAuditResult, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
5267   {   1, &hf_h248_terminationAuditResult, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TerminationAudit },
5268   { 0, NULL, 0, 0, 0, NULL }
5269 };
5270
5271 static int
5272 dissect_h248_AuditResultV1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5273   offset = dissect_ber_choice(actx, tree, tvb, offset,
5274                                  AuditResultV1_choice, hf_index, ett_h248_AuditResultV1,
5275                                  NULL);
5276
5277   return offset;
5278 }
5279
5280
5281 static const ber_sequence_t AuditReplyV1_sequence[] = {
5282   { &hf_h248_terminationID  , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
5283   { &hf_h248_audit_result   , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_AuditResultV1 },
5284   { NULL, 0, 0, 0, NULL }
5285 };
5286
5287 static int
5288 dissect_h248_AuditReplyV1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5289 #line 296 "../../asn1/h248/h248.cnf"
5290 /* h248v1 support */
5291         offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5292                 AuditReplyV1_sequence, hf_h248_auditValueReplyV1, ett_h248_AuditReplyV1);
5293
5294
5295   return offset;
5296 }
5297
5298
5299
5300 static const ber_sequence_t EventParameterV1_sequence[] = {
5301   { &hf_h248_eventParamterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventParameterName },
5302   { &hf_h248_event_param_value, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_EventParamValueV1 },
5303   { NULL, 0, 0, 0, NULL }
5304 };
5305
5306 static int
5307 dissect_h248_EventParameterV1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5308   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5309                                    EventParameterV1_sequence, hf_index, ett_h248_EventParameterV1);
5310
5311   return offset;
5312 }
5313
5314
5315
5316 static const ber_sequence_t SigParameterV1_sequence[] = {
5317   { &hf_h248_sigParameterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SigParameterName },
5318   { &hf_h248_sig_param_value, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SigParamValueV1 },
5319   { NULL, 0, 0, 0, NULL }
5320 };
5321
5322 static int
5323 dissect_h248_SigParameterV1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5324   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5325                                    SigParameterV1_sequence, hf_index, ett_h248_SigParameterV1);
5326
5327   return offset;
5328 }
5329
5330
5331
5332 static int
5333 dissect_h248_ValueV1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5334 #line 383 "../../asn1/h248/h248.cnf"
5335         guint8 i;
5336         guint32 len;
5337
5338 #line 388 "../../asn1/h248/h248.cnf"
5339 /* check tvb to verify all values ascii or not.  If so, output string, else hex */
5340         len=tvb_length_remaining(tvb, offset);
5341         if ( curr_info.par && curr_info.par->dissector) {
5342                 curr_info.par->dissector(tree, /*next_*/tvb, actx->pinfo, *(curr_info.par->hfid), &curr_info, curr_info.par->data);
5343         } else {
5344                 /* if no registered dissector create output */
5345                 for( i=0;i<len;i++) {
5346                         if(!isascii(tvb_get_guint8(tvb, offset+i)) || tvb_get_guint8(tvb, offset+i) == 0) {
5347                                 /* not ascii or NULL character so do string as hex string */
5348                                 proto_tree_add_text(tree, tvb, offset, len,"%s: 0x%s", 
5349                                         (proto_registrar_get_nth(hf_index))->name,
5350                                         tvb_bytes_to_str(tvb, 0, len));
5351                                 return len;
5352                         };
5353                 };
5354                 /* if here, then string is ascii */
5355                 proto_tree_add_text(tree, tvb, offset, len,"%s: %s", 
5356                                         (proto_registrar_get_nth(hf_index))->name,
5357                                         tvb_format_text(tvb, 0, len));
5358         }
5359         offset = len;
5360         
5361
5362
5363   return offset;
5364 }
5365
5366
5367 /*--- End of included file: packet-h248-fn.c ---*/
5368 #line 1408 "../../asn1/h248/packet-h248-template.c"
5369
5370 static void dissect_h248_tpkt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
5371     dissect_tpkt_encap(tvb, pinfo, tree, h248_desegment, h248_handle);
5372 }
5373
5374 static void
5375 dissect_h248(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5376 {
5377     proto_item *h248_item;
5378     asn1_ctx_t asn1_ctx;
5379     h248_tree = NULL;
5380     h248_tvb = NULL;
5381
5382     asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
5383
5384     curr_info.msg = NULL;
5385     curr_info.trx = NULL;
5386     curr_info.ctx = NULL;
5387     curr_info.cmd = NULL;
5388     curr_info.term = NULL;
5389     curr_info.pkg = NULL;
5390     curr_info.evt = NULL;
5391     curr_info.sig = NULL;
5392     curr_info.stat = NULL;
5393     curr_info.par = NULL;
5394
5395     /* Check if it is actually a text-based H.248 encoding, which we
5396        dissect with the "megaco" dissector in Wireshark.  (Both
5397        encodings are MEGACO (RFC 3015) and both are H.248.)
5398      */
5399     if(tvb_length(tvb)>=6){
5400         if(!tvb_strneql(tvb, 0, "MEGACO", 6)){
5401             static dissector_handle_t megaco_handle=NULL;
5402             if(!megaco_handle){
5403                 megaco_handle = find_dissector("megaco");
5404             }
5405             if(megaco_handle){
5406                 call_dissector(megaco_handle, tvb, pinfo, tree);
5407                 return;
5408             }
5409         }
5410         {
5411                         proto_item *hidden_item = NULL;
5412                         guint32 magic_num = 0, offset = 0;
5413                         magic_num = tvb_get_ntohl(tvb, offset);
5414                         hidden_item = proto_tree_add_uint(tree, hf_248_magic_num, tvb, offset, 4, magic_num);
5415                         PROTO_ITEM_SET_HIDDEN(hidden_item);
5416                         if( dissector_try_uint(subdissector_table, magic_num, tvb, pinfo, tree) ) {
5417                                 return;
5418                         }
5419                 }
5420     }
5421
5422     /* Make entry in the Protocol column on summary display */
5423     col_set_str(pinfo->cinfo, COL_PROTOCOL, "H.248");
5424
5425     if (tree) {
5426         h248_item = proto_tree_add_item(tree, proto_h248, tvb, 0, -1, ENC_NA);
5427         h248_tree = proto_item_add_subtree(h248_item, ett_h248);
5428     }
5429
5430     dissect_h248_MegacoMessage(FALSE, tvb, 0, &asn1_ctx, h248_tree, -1);
5431
5432 }
5433
5434 /*--- proto_register_h248 ----------------------------------------------*/
5435 void proto_reg_handoff_h248(void);
5436
5437 void proto_register_h248(void) {
5438
5439     /* List of fields */
5440     static hf_register_info hf[] = {
5441                 { &hf_248_magic_num, {
5442                         "Magic Number for Avaya H248", "h248.magic_num", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL}},
5443         { &hf_h248_mtpaddress_ni, {
5444                 "NI", "h248.mtpaddress.ni", FT_UINT32, BASE_DEC,
5445                 NULL, 0, NULL, HFILL }},
5446         { &hf_h248_mtpaddress_pc, {
5447                 "PC", "h248.mtpaddress.pc", FT_UINT32, BASE_DEC,
5448                 NULL, 0, NULL, HFILL }},
5449                 { &hf_h248_pkg_name, {
5450                 "Package", "h248.package_name", FT_UINT16, BASE_HEX,
5451                 NULL, 0, NULL, HFILL }},
5452         { &hf_248_pkg_param, {
5453                 "Parameter ID", "h248.package_paramid", FT_UINT16, BASE_HEX,
5454                 NULL, 0, NULL, HFILL }},
5455         { &hf_h248_signal_code, {
5456                 "Signal ID", "h248.package_signalid", FT_UINT16, BASE_HEX,
5457                 NULL, 0, "Parameter ID", HFILL }},
5458         { &hf_h248_event_code, {
5459                 "Event ID", "h248.package_eventid", FT_UINT16, BASE_HEX,
5460                 NULL, 0, "Parameter ID", HFILL }},
5461         { &hf_h248_event_name, {
5462                 "Package and Event name", "h248.event_name", FT_UINT32, BASE_HEX,
5463                 NULL, 0, "Package", HFILL }},
5464         { &hf_h248_signal_name, {
5465                 "Package and Signal name", "h248.signal_name", FT_UINT32, BASE_HEX,
5466                 NULL, 0, "Package", HFILL }},
5467         { &hf_h248_pkg_bcp_BNCChar_PDU,
5468           { "BNCChar", "h248.package_bcp.BNCChar",
5469             FT_UINT32, BASE_DEC, VALS(gcp_term_types), 0,
5470             NULL, HFILL }},
5471
5472         { &hf_h248_error_code,
5473           { "errorCode", "h248.errorCode",
5474             FT_UINT32, BASE_DEC|BASE_EXT_STRING, &h248_reasons_ext, 0,
5475             "ErrorDescriptor/errorCode", HFILL }},
5476         { &hf_h248_context_id,
5477           { "contextId", "h248.contextId",
5478             FT_UINT32, BASE_HEX, NULL, 0,
5479             "Context ID", HFILL }},
5480         { &hf_h248_term_wild_type,
5481           { "Wildcard Mode", "h248.term.wildcard.mode",
5482             FT_UINT8, BASE_DEC, VALS(wildcard_modes), 0x80,
5483             NULL, HFILL }},
5484         { &hf_h248_term_wild_level,
5485           { "Wildcarding Level", "h248.term.wildcard.level",
5486             FT_UINT8, BASE_DEC, VALS(wildcard_levels), 0x40,
5487             NULL, HFILL }},
5488         { &hf_h248_term_wild_position,
5489           { "Wildcarding Position", "h248.term.wildcard.pos",
5490             FT_UINT8, BASE_DEC, NULL, 0x3F,
5491             NULL, HFILL }},
5492
5493         { &hf_h248_no_pkg,
5494           { "Unknown Package", "h248.pkg.unknown",
5495             FT_BYTES, BASE_NONE, NULL, 0,
5496             NULL, HFILL }},
5497         { &hf_h248_no_sig,
5498           { "Unknown Signal", "h248.pkg.unknown.sig",
5499             FT_BYTES, BASE_NONE, NULL, 0,
5500             NULL, HFILL }},
5501         { &hf_h248_no_evt,
5502           { "Unknown Event", "h248.pkg.unknown.evt",
5503             FT_BYTES, BASE_NONE, NULL, 0,
5504             NULL, HFILL }},
5505         { &hf_h248_param,
5506           { "Parameter", "h248.pkg.unknown.param",
5507             FT_BYTES, BASE_NONE, NULL, 0,
5508             NULL, HFILL }},
5509         { &hf_h248_serviceChangeReasonStr,
5510           { "ServiceChangeReasonStr", "h248.serviceChangeReasonstr",
5511             FT_STRING, BASE_NONE, NULL, 0,
5512             "h248.IA5String", HFILL }},
5513
5514 /* h248v1 support */
5515         { &hf_h248_auditValueReplyV1,
5516           { "auditValueReplyV1", "h248.auditValueReplyV1",
5517             FT_NONE, BASE_NONE, NULL, 0,
5518             NULL, HFILL }},
5519
5520
5521 /*--- Included file: packet-h248-hfarr.c ---*/
5522 #line 1 "../../asn1/h248/packet-h248-hfarr.c"
5523     { &hf_h248_authHeader,
5524       { "authHeader", "h248.authHeader",
5525         FT_NONE, BASE_NONE, NULL, 0,
5526         "AuthenticationHeader", HFILL }},
5527     { &hf_h248_mess,
5528       { "mess", "h248.mess",
5529         FT_NONE, BASE_NONE, NULL, 0,
5530         "Message", HFILL }},
5531     { &hf_h248_secParmIndex,
5532       { "secParmIndex", "h248.secParmIndex",
5533         FT_BYTES, BASE_NONE, NULL, 0,
5534         "SecurityParmIndex", HFILL }},
5535     { &hf_h248_seqNum,
5536       { "seqNum", "h248.seqNum",
5537         FT_BYTES, BASE_NONE, NULL, 0,
5538         "SequenceNum", HFILL }},
5539     { &hf_h248_ad,
5540       { "ad", "h248.ad",
5541         FT_BYTES, BASE_NONE, NULL, 0,
5542         "AuthData", HFILL }},
5543     { &hf_h248_version,
5544       { "version", "h248.version",
5545         FT_UINT32, BASE_DEC, NULL, 0,
5546         NULL, HFILL }},
5547     { &hf_h248_mId,
5548       { "mId", "h248.mId",
5549         FT_UINT32, BASE_DEC, VALS(h248_MId_vals), 0,
5550         NULL, HFILL }},
5551     { &hf_h248_messageBody,
5552       { "messageBody", "h248.messageBody",
5553         FT_UINT32, BASE_DEC, VALS(h248_T_messageBody_vals), 0,
5554         NULL, HFILL }},
5555     { &hf_h248_messageError,
5556       { "messageError", "h248.messageError",
5557         FT_NONE, BASE_NONE, NULL, 0,
5558         "ErrorDescriptor", HFILL }},
5559     { &hf_h248_transactions,
5560       { "transactions", "h248.transactions",
5561         FT_UINT32, BASE_DEC, NULL, 0,
5562         "SEQUENCE_OF_Transaction", HFILL }},
5563     { &hf_h248_transactions_item,
5564       { "Transaction", "h248.Transaction",
5565         FT_UINT32, BASE_DEC, VALS(h248_Transaction_vals), 0,
5566         NULL, HFILL }},
5567     { &hf_h248_ip4Address,
5568       { "ip4Address", "h248.ip4Address",
5569         FT_NONE, BASE_NONE, NULL, 0,
5570         NULL, HFILL }},
5571     { &hf_h248_ip6Address,
5572       { "ip6Address", "h248.ip6Address",
5573         FT_NONE, BASE_NONE, NULL, 0,
5574         NULL, HFILL }},
5575     { &hf_h248_domainName,
5576       { "domainName", "h248.domainName",
5577         FT_NONE, BASE_NONE, NULL, 0,
5578         NULL, HFILL }},
5579     { &hf_h248_deviceName,
5580       { "deviceName", "h248.deviceName",
5581         FT_STRING, BASE_NONE, NULL, 0,
5582         "PathName", HFILL }},
5583     { &hf_h248_mtpAddress,
5584       { "mtpAddress", "h248.mtpAddress",
5585         FT_BYTES, BASE_NONE, NULL, 0,
5586         NULL, HFILL }},
5587     { &hf_h248_domName,
5588       { "name", "h248.name",
5589         FT_STRING, BASE_NONE, NULL, 0,
5590         "IA5String", HFILL }},
5591     { &hf_h248_portNumber,
5592       { "portNumber", "h248.portNumber",
5593         FT_UINT32, BASE_DEC, NULL, 0,
5594         "INTEGER_0_65535", HFILL }},
5595     { &hf_h248_iP4Address,
5596       { "address", "h248.address",
5597         FT_IPv4, BASE_NONE, NULL, 0,
5598         "OCTET_STRING_SIZE_4", HFILL }},
5599     { &hf_h248_iP6Address,
5600       { "address", "h248.address",
5601         FT_IPv6, BASE_NONE, NULL, 0,
5602         "OCTET_STRING_SIZE_16", HFILL }},
5603     { &hf_h248_transactionRequest,
5604       { "transactionRequest", "h248.transactionRequest",
5605         FT_NONE, BASE_NONE, NULL, 0,
5606         NULL, HFILL }},
5607     { &hf_h248_transactionPending,
5608       { "transactionPending", "h248.transactionPending",
5609         FT_NONE, BASE_NONE, NULL, 0,
5610         NULL, HFILL }},
5611     { &hf_h248_transactionReply,
5612       { "transactionReply", "h248.transactionReply",
5613         FT_NONE, BASE_NONE, NULL, 0,
5614         NULL, HFILL }},
5615     { &hf_h248_transactionResponseAck,
5616       { "transactionResponseAck", "h248.transactionResponseAck",
5617         FT_UINT32, BASE_DEC, NULL, 0,
5618         NULL, HFILL }},
5619     { &hf_h248_segmentReply,
5620       { "segmentReply", "h248.segmentReply",
5621         FT_NONE, BASE_NONE, NULL, 0,
5622         NULL, HFILL }},
5623     { &hf_h248_transactionId,
5624       { "transactionId", "h248.transactionId",
5625         FT_UINT32, BASE_DEC, NULL, 0,
5626         NULL, HFILL }},
5627     { &hf_h248_actions,
5628       { "actions", "h248.actions",
5629         FT_UINT32, BASE_DEC, NULL, 0,
5630         "SEQUENCE_OF_ActionRequest", HFILL }},
5631     { &hf_h248_actions_item,
5632       { "ActionRequest", "h248.ActionRequest",
5633         FT_NONE, BASE_NONE, NULL, 0,
5634         NULL, HFILL }},
5635     { &hf_h248_tpend_transactionId,
5636       { "transactionId", "h248.transactionId",
5637         FT_UINT32, BASE_DEC, NULL, 0,
5638         "T_tpend_transactionId", HFILL }},
5639     { &hf_h248_trep_transactionId,
5640       { "transactionId", "h248.transactionId",
5641         FT_UINT32, BASE_DEC, NULL, 0,
5642         "T_trep_transactionId", HFILL }},
5643     { &hf_h248_immAckRequired,
5644       { "immAckRequired", "h248.immAckRequired",
5645         FT_NONE, BASE_NONE, NULL, 0,
5646         NULL, HFILL }},
5647     { &hf_h248_transactionResult,
5648       { "transactionResult", "h248.transactionResult",
5649         FT_UINT32, BASE_DEC, VALS(h248_T_transactionResult_vals), 0,
5650         NULL, HFILL }},
5651     { &hf_h248_transactionError,
5652       { "transactionError", "h248.transactionError",
5653         FT_NONE, BASE_NONE, NULL, 0,
5654         "ErrorDescriptor", HFILL }},
5655     { &hf_h248_actionReplies,
5656       { "actionReplies", "h248.actionReplies",
5657         FT_UINT32, BASE_DEC, NULL, 0,
5658         "SEQUENCE_OF_ActionReply", HFILL }},
5659     { &hf_h248_actionReplies_item,
5660       { "ActionReply", "h248.ActionReply",
5661         FT_NONE, BASE_NONE, NULL, 0,
5662         NULL, HFILL }},
5663     { &hf_h248_segmentNumber,
5664       { "segmentNumber", "h248.segmentNumber",
5665         FT_UINT32, BASE_DEC, NULL, 0,
5666         NULL, HFILL }},
5667     { &hf_h248_segmentationComplete,
5668       { "segmentationComplete", "h248.segmentationComplete",
5669         FT_NONE, BASE_NONE, NULL, 0,
5670         NULL, HFILL }},
5671     { &hf_h248_seg_rep_transactionId,
5672       { "transactionId", "h248.transactionId",
5673         FT_UINT32, BASE_DEC, NULL, 0,
5674         "T_seg_rep_transactionId", HFILL }},
5675     { &hf_h248_TransactionResponseAck_item,
5676       { "TransactionAck", "h248.TransactionAck",
5677         FT_NONE, BASE_NONE, NULL, 0,
5678         NULL, HFILL }},
5679     { &hf_h248_firstAck,
5680       { "firstAck", "h248.firstAck",
5681         FT_UINT32, BASE_DEC, NULL, 0,
5682         "TransactionId", HFILL }},
5683     { &hf_h248_lastAck,
5684       { "lastAck", "h248.lastAck",
5685         FT_UINT32, BASE_DEC, NULL, 0,
5686         "TransactionId", HFILL }},
5687     { &hf_h248_errorCode,
5688       { "errorCode", "h248.errorCode",
5689         FT_UINT32, BASE_DEC, NULL, 0,
5690         NULL, HFILL }},
5691     { &hf_h248_errorText,
5692       { "errorText", "h248.errorText",
5693         FT_STRING, BASE_NONE, NULL, 0,
5694         NULL, HFILL }},
5695     { &hf_h248_contextId,
5696       { "contextId", "h248.contextId",
5697         FT_UINT32, BASE_HEX, NULL, 0,
5698         NULL, HFILL }},
5699     { &hf_h248_contextRequest,
5700       { "contextRequest", "h248.contextRequest",
5701         FT_NONE, BASE_NONE, NULL, 0,
5702         NULL, HFILL }},
5703     { &hf_h248_contextAttrAuditReq,
5704       { "contextAttrAuditReq", "h248.contextAttrAuditReq",
5705         FT_NONE, BASE_NONE, NULL, 0,
5706         NULL, HFILL }},
5707     { &hf_h248_commandRequests,
5708       { "commandRequests", "h248.commandRequests",
5709         FT_UINT32, BASE_DEC, NULL, 0,
5710         "SEQUENCE_OF_CommandRequest", HFILL }},
5711     { &hf_h248_commandRequests_item,
5712       { "CommandRequest", "h248.CommandRequest",
5713         FT_NONE, BASE_NONE, NULL, 0,
5714         NULL, HFILL }},
5715     { &hf_h248_errorDescriptor,
5716       { "errorDescriptor", "h248.errorDescriptor",
5717         FT_NONE, BASE_NONE, NULL, 0,
5718         NULL, HFILL }},
5719     { &hf_h248_contextReply,
5720       { "contextReply", "h248.contextReply",
5721         FT_NONE, BASE_NONE, NULL, 0,
5722         "ContextRequest", HFILL }},
5723     { &hf_h248_commandReply,
5724       { "commandReply", "h248.commandReply",
5725         FT_UINT32, BASE_DEC, NULL, 0,
5726         "SEQUENCE_OF_CommandReply", HFILL }},
5727     { &hf_h248_commandReply_item,
5728       { "CommandReply", "h248.CommandReply",
5729         FT_UINT32, BASE_DEC, VALS(h248_CommandReply_vals), 0,
5730         NULL, HFILL }},
5731     { &hf_h248_priority,
5732       { "priority", "h248.priority",
5733         FT_UINT32, BASE_DEC, NULL, 0,
5734         "INTEGER_0_15", HFILL }},
5735     { &hf_h248_emergency,
5736       { "emergency", "h248.emergency",
5737         FT_BOOLEAN, BASE_NONE, NULL, 0,
5738         "BOOLEAN", HFILL }},
5739     { &hf_h248_topologyReq,
5740       { "topologyReq", "h248.topologyReq",
5741         FT_UINT32, BASE_DEC, NULL, 0,
5742         NULL, HFILL }},
5743     { &hf_h248_topologyReq_item,
5744       { "TopologyRequest", "h248.TopologyRequest",
5745         FT_NONE, BASE_NONE, NULL, 0,
5746         NULL, HFILL }},
5747     { &hf_h248_iepscallind_BOOL,
5748       { "iepscallind", "h248.iepscallind",
5749         FT_BOOLEAN, BASE_NONE, NULL, 0,
5750         "Iepscallind_BOOL", HFILL }},
5751     { &hf_h248_contextProp,
5752       { "contextProp", "h248.contextProp",
5753         FT_UINT32, BASE_DEC, NULL, 0,
5754         "SEQUENCE_OF_PropertyParm", HFILL }},
5755     { &hf_h248_contextProp_item,
5756       { "PropertyParm", "h248.PropertyParm",
5757         FT_NONE, BASE_NONE, NULL, 0,
5758         NULL, HFILL }},
5759     { &hf_h248_contextList,
5760       { "contextList", "h248.contextList",
5761         FT_UINT32, BASE_DEC, NULL, 0,
5762         "SEQUENCE_OF_ContextIDinList", HFILL }},
5763     { &hf_h248_contextList_item,
5764       { "ContextIDinList", "h248.ContextIDinList",
5765         FT_UINT32, BASE_DEC, NULL, 0,
5766         NULL, HFILL }},
5767     { &hf_h248_topology,
5768       { "topology", "h248.topology",
5769         FT_NONE, BASE_NONE, NULL, 0,
5770         NULL, HFILL }},
5771     { &hf_h248_cAAREmergency,
5772       { "emergency", "h248.emergency",
5773         FT_NONE, BASE_NONE, NULL, 0,
5774         NULL, HFILL }},
5775     { &hf_h248_cAARPriority,
5776       { "priority", "h248.priority",
5777         FT_NONE, BASE_NONE, NULL, 0,
5778         NULL, HFILL }},
5779     { &hf_h248_iepscallind,
5780       { "iepscallind", "h248.iepscallind",
5781         FT_NONE, BASE_NONE, NULL, 0,
5782         NULL, HFILL }},
5783     { &hf_h248_contextPropAud,
5784       { "contextPropAud", "h248.contextPropAud",
5785         FT_UINT32, BASE_DEC, NULL, 0,
5786         "SEQUENCE_OF_IndAudPropertyParm", HFILL }},
5787     { &hf_h248_contextPropAud_item,
5788       { "IndAudPropertyParm", "h248.IndAudPropertyParm",
5789         FT_NONE, BASE_NONE, NULL, 0,
5790         NULL, HFILL }},
5791     { &hf_h248_selectpriority,
5792       { "selectpriority", "h248.selectpriority",
5793         FT_UINT32, BASE_DEC, NULL, 0,
5794         "INTEGER_0_15", HFILL }},
5795     { &hf_h248_selectemergency,
5796       { "selectemergency", "h248.selectemergency",
5797         FT_BOOLEAN, BASE_NONE, NULL, 0,
5798         "BOOLEAN", HFILL }},
5799     { &hf_h248_selectiepscallind,
5800       { "selectiepscallind", "h248.selectiepscallind",
5801         FT_BOOLEAN, BASE_NONE, NULL, 0,
5802         "BOOLEAN", HFILL }},
5803     { &hf_h248_selectLogic,
5804       { "selectLogic", "h248.selectLogic",
5805         FT_UINT32, BASE_DEC, VALS(h248_SelectLogic_vals), 0,
5806         NULL, HFILL }},
5807     { &hf_h248_andAUDITSelect,
5808       { "andAUDITSelect", "h248.andAUDITSelect",
5809         FT_NONE, BASE_NONE, NULL, 0,
5810         NULL, HFILL }},
5811     { &hf_h248_orAUDITSelect,
5812       { "orAUDITSelect", "h248.orAUDITSelect",
5813         FT_NONE, BASE_NONE, NULL, 0,
5814         NULL, HFILL }},
5815     { &hf_h248_command,
5816       { "command", "h248.command",
5817         FT_UINT32, BASE_DEC, VALS(h248_Command_vals), 0,
5818         NULL, HFILL }},
5819     { &hf_h248_optional,
5820       { "optional", "h248.optional",
5821         FT_NONE, BASE_NONE, NULL, 0,
5822         NULL, HFILL }},
5823     { &hf_h248_wildcardReturn,
5824       { "wildcardReturn", "h248.wildcardReturn",
5825         FT_NONE, BASE_NONE, NULL, 0,
5826         NULL, HFILL }},
5827     { &hf_h248_addReq,
5828       { "addReq", "h248.addReq",
5829         FT_NONE, BASE_NONE, NULL, 0,
5830         NULL, HFILL }},
5831     { &hf_h248_moveReq,
5832       { "moveReq", "h248.moveReq",
5833         FT_NONE, BASE_NONE, NULL, 0,
5834         NULL, HFILL }},
5835     { &hf_h248_modReq,
5836       { "modReq", "h248.modReq",
5837         FT_NONE, BASE_NONE, NULL, 0,
5838         NULL, HFILL }},
5839     { &hf_h248_subtractReq,
5840       { "subtractReq", "h248.subtractReq",
5841         FT_NONE, BASE_NONE, NULL, 0,
5842         NULL, HFILL }},
5843     { &hf_h248_auditCapRequest,
5844       { "auditCapRequest", "h248.auditCapRequest",
5845         FT_NONE, BASE_NONE, NULL, 0,
5846         NULL, HFILL }},
5847     { &hf_h248_auditValueRequest,
5848       { "auditValueRequest", "h248.auditValueRequest",
5849         FT_NONE, BASE_NONE, NULL, 0,
5850         NULL, HFILL }},
5851     { &hf_h248_notifyReq,
5852       { "notifyReq", "h248.notifyReq",
5853         FT_NONE, BASE_NONE, NULL, 0,
5854         NULL, HFILL }},
5855     { &hf_h248_serviceChangeReq,
5856       { "serviceChangeReq", "h248.serviceChangeReq",
5857         FT_NONE, BASE_NONE, NULL, 0,
5858         "ServiceChangeRequest", HFILL }},
5859     { &hf_h248_addReply,
5860       { "addReply", "h248.addReply",
5861         FT_NONE, BASE_NONE, NULL, 0,
5862         NULL, HFILL }},
5863     { &hf_h248_moveReply,
5864       { "moveReply", "h248.moveReply",
5865         FT_NONE, BASE_NONE, NULL, 0,
5866         NULL, HFILL }},
5867     { &hf_h248_modReply,
5868       { "modReply", "h248.modReply",
5869         FT_NONE, BASE_NONE, NULL, 0,
5870         NULL, HFILL }},
5871     { &hf_h248_subtractReply,
5872       { "subtractReply", "h248.subtractReply",
5873         FT_NONE, BASE_NONE, NULL, 0,
5874         NULL, HFILL }},
5875     { &hf_h248_auditCapReply,
5876       { "auditCapReply", "h248.auditCapReply",
5877         FT_UINT32, BASE_DEC, VALS(h248_AuditReply_vals), 0,
5878         NULL, HFILL }},
5879     { &hf_h248_auditValueReply,
5880       { "auditValueReply", "h248.auditValueReply",
5881         FT_UINT32, BASE_DEC, VALS(h248_AuditReply_vals), 0,
5882         NULL, HFILL }},
5883     { &hf_h248_notifyReply,
5884       { "notifyReply", "h248.notifyReply",
5885         FT_NONE, BASE_NONE, NULL, 0,
5886         NULL, HFILL }},
5887     { &hf_h248_serviceChangeReply,
5888       { "serviceChangeReply", "h248.serviceChangeReply",
5889         FT_NONE, BASE_NONE, NULL, 0,
5890         NULL, HFILL }},
5891     { &hf_h248_terminationFrom,
5892       { "terminationFrom", "h248.terminationFrom",
5893         FT_NONE, BASE_NONE, NULL, 0,
5894         "TerminationID", HFILL }},
5895     { &hf_h248_terminationTo,
5896       { "terminationTo", "h248.terminationTo",
5897         FT_NONE, BASE_NONE, NULL, 0,
5898         "TerminationID", HFILL }},
5899     { &hf_h248_topologyDirection,
5900       { "topologyDirection", "h248.topologyDirection",
5901         FT_UINT32, BASE_DEC, VALS(h248_T_topologyDirection_vals), 0,
5902         NULL, HFILL }},
5903     { &hf_h248_streamID,
5904       { "streamID", "h248.streamID",
5905         FT_UINT32, BASE_DEC, NULL, 0,
5906         NULL, HFILL }},
5907     { &hf_h248_topologyDirectionExtension,
5908       { "topologyDirectionExtension", "h248.topologyDirectionExtension",
5909         FT_UINT32, BASE_DEC, VALS(h248_T_topologyDirectionExtension_vals), 0,
5910         NULL, HFILL }},
5911     { &hf_h248_terminationIDList,
5912       { "terminationID", "h248.terminationID",
5913         FT_UINT32, BASE_DEC, NULL, 0,
5914         "TerminationIDList", HFILL }},
5915     { &hf_h248_descriptors,
5916       { "descriptors", "h248.descriptors",
5917         FT_UINT32, BASE_DEC, NULL, 0,
5918         "SEQUENCE_OF_AmmDescriptor", HFILL }},
5919     { &hf_h248_descriptors_item,
5920       { "AmmDescriptor", "h248.AmmDescriptor",
5921         FT_UINT32, BASE_DEC, VALS(h248_AmmDescriptor_vals), 0,
5922         NULL, HFILL }},
5923     { &hf_h248_mediaDescriptor,
5924       { "mediaDescriptor", "h248.mediaDescriptor",
5925         FT_NONE, BASE_NONE, NULL, 0,
5926         NULL, HFILL }},
5927     { &hf_h248_modemDescriptor,
5928       { "modemDescriptor", "h248.modemDescriptor",
5929         FT_NONE, BASE_NONE, NULL, 0,
5930         NULL, HFILL }},
5931     { &hf_h248_muxDescriptor,
5932       { "muxDescriptor", "h248.muxDescriptor",
5933         FT_NONE, BASE_NONE, NULL, 0,
5934         NULL, HFILL }},
5935     { &hf_h248_eventsDescriptor,
5936       { "eventsDescriptor", "h248.eventsDescriptor",
5937         FT_NONE, BASE_NONE, NULL, 0,
5938         NULL, HFILL }},
5939     { &hf_h248_eventBufferDescriptor,
5940       { "eventBufferDescriptor", "h248.eventBufferDescriptor",
5941         FT_UINT32, BASE_DEC, NULL, 0,
5942         NULL, HFILL }},
5943     { &hf_h248_signalsDescriptor,
5944       { "signalsDescriptor", "h248.signalsDescriptor",
5945         FT_UINT32, BASE_DEC, NULL, 0,
5946         NULL, HFILL }},
5947     { &hf_h248_digitMapDescriptor,
5948       { "digitMapDescriptor", "h248.digitMapDescriptor",
5949         FT_NONE, BASE_NONE, NULL, 0,
5950         NULL, HFILL }},
5951     { &hf_h248_auditDescriptor,
5952       { "auditDescriptor", "h248.auditDescriptor",
5953         FT_NONE, BASE_NONE, NULL, 0,
5954         NULL, HFILL }},
5955     { &hf_h248_aDstatisticsDescriptor,
5956       { "statisticsDescriptor", "h248.statisticsDescriptor",
5957         FT_UINT32, BASE_DEC, NULL, 0,
5958         NULL, HFILL }},
5959     { &hf_h248_terminationAudit,
5960       { "terminationAudit", "h248.terminationAudit",
5961         FT_UINT32, BASE_DEC, NULL, 0,
5962         NULL, HFILL }},
5963     { &hf_h248_terminationID,
5964       { "terminationID", "h248.terminationID",
5965         FT_NONE, BASE_NONE, NULL, 0,
5966         NULL, HFILL }},
5967     { &hf_h248_contextAuditResult,
5968       { "contextAuditResult", "h248.contextAuditResult",
5969         FT_UINT32, BASE_DEC, NULL, 0,
5970         "TerminationIDList", HFILL }},
5971     { &hf_h248_error,
5972       { "error", "h248.error",
5973         FT_NONE, BASE_NONE, NULL, 0,
5974         "ErrorDescriptor", HFILL }},
5975     { &hf_h248_auditResult,
5976       { "auditResult", "h248.auditResult",
5977         FT_NONE, BASE_NONE, NULL, 0,
5978         NULL, HFILL }},
5979     { &hf_h248_auditResultTermList,
5980       { "auditResultTermList", "h248.auditResultTermList",
5981         FT_NONE, BASE_NONE, NULL, 0,
5982         "TermListAuditResult", HFILL }},
5983     { &hf_h248_terminationAuditResult,
5984       { "terminationAuditResult", "h248.terminationAuditResult",
5985         FT_UINT32, BASE_DEC, NULL, 0,
5986         "TerminationAudit", HFILL }},
5987     { &hf_h248_TerminationAudit_item,
5988       { "AuditReturnParameter", "h248.AuditReturnParameter",
5989         FT_UINT32, BASE_DEC, VALS(h248_AuditReturnParameter_vals), 0,
5990         NULL, HFILL }},
5991     { &hf_h248_observedEventsDescriptor,
5992       { "observedEventsDescriptor", "h248.observedEventsDescriptor",
5993         FT_NONE, BASE_NONE, NULL, 0,
5994         NULL, HFILL }},
5995     { &hf_h248_aRPstatisticsDescriptor,
5996       { "statisticsDescriptor", "h248.statisticsDescriptor",
5997         FT_UINT32, BASE_DEC, NULL, 0,
5998         NULL, HFILL }},
5999     { &hf_h248_packagesDescriptor,
6000       { "packagesDescriptor", "h248.packagesDescriptor",
6001         FT_UINT32, BASE_DEC, NULL, 0,
6002         NULL, HFILL }},
6003     { &hf_h248_emptyDescriptors,
6004       { "emptyDescriptors", "h248.emptyDescriptors",
6005         FT_NONE, BASE_NONE, NULL, 0,
6006         "AuditDescriptor", HFILL }},
6007     { &hf_h248_auditToken,
6008       { "auditToken", "h248.auditToken",
6009         FT_BYTES, BASE_NONE, NULL, 0,
6010         NULL, HFILL }},
6011     { &hf_h248_auditPropertyToken,
6012       { "auditPropertyToken", "h248.auditPropertyToken",
6013         FT_UINT32, BASE_DEC, NULL, 0,
6014         "SEQUENCE_OF_IndAuditParameter", HFILL }},
6015     { &hf_h248_auditPropertyToken_item,
6016       { "IndAuditParameter", "h248.IndAuditParameter",
6017         FT_UINT32, BASE_DEC, VALS(h248_IndAuditParameter_vals), 0,
6018         NULL, HFILL }},
6019     { &hf_h248_indaudmediaDescriptor,
6020       { "indaudmediaDescriptor", "h248.indaudmediaDescriptor",
6021         FT_NONE, BASE_NONE, NULL, 0,
6022         NULL, HFILL }},
6023     { &hf_h248_indaudeventsDescriptor,
6024       { "indaudeventsDescriptor", "h248.indaudeventsDescriptor",
6025         FT_NONE, BASE_NONE, NULL, 0,
6026         NULL, HFILL }},
6027     { &hf_h248_indaudeventBufferDescriptor,
6028       { "indaudeventBufferDescriptor", "h248.indaudeventBufferDescriptor",
6029         FT_NONE, BASE_NONE, NULL, 0,
6030         NULL, HFILL }},
6031     { &hf_h248_indaudsignalsDescriptor,
6032       { "indaudsignalsDescriptor", "h248.indaudsignalsDescriptor",
6033         FT_UINT32, BASE_DEC, VALS(h248_IndAudSignalsDescriptor_vals), 0,
6034         NULL, HFILL }},
6035     { &hf_h248_indauddigitMapDescriptor,
6036       { "indauddigitMapDescriptor", "h248.indauddigitMapDescriptor",
6037         FT_NONE, BASE_NONE, NULL, 0,
6038         NULL, HFILL }},
6039     { &hf_h248_indaudstatisticsDescriptor,
6040       { "indaudstatisticsDescriptor", "h248.indaudstatisticsDescriptor",
6041         FT_NONE, BASE_NONE, NULL, 0,
6042         NULL, HFILL }},
6043     { &hf_h248_indaudpackagesDescriptor,
6044       { "indaudpackagesDescriptor", "h248.indaudpackagesDescriptor",
6045         FT_NONE, BASE_NONE, NULL, 0,
6046         NULL, HFILL }},
6047     { &hf_h248_indAudTerminationStateDescriptor,
6048       { "termStateDescr", "h248.termStateDescr",
6049         FT_NONE, BASE_NONE, NULL, 0,
6050         "IndAudTerminationStateDescriptor", HFILL }},
6051     { &hf_h248_indAudMediaDescriptorStreams,
6052       { "streams", "h248.streams",
6053         FT_UINT32, BASE_DEC, VALS(h248_IndAudMediaDescriptorStreams_vals), 0,
6054         "IndAudMediaDescriptorStreams", HFILL }},
6055     { &hf_h248_oneStream,
6056       { "oneStream", "h248.oneStream",
6057         FT_NONE, BASE_NONE, NULL, 0,
6058         "IndAudStreamParms", HFILL }},
6059     { &hf_h248_multiStream,
6060       { "multiStream", "h248.multiStream",
6061         FT_UINT32, BASE_DEC, NULL, 0,
6062         "SEQUENCE_OF_IndAudStreamDescriptor", HFILL }},
6063     { &hf_h248_multiStream_item,
6064       { "IndAudStreamDescriptor", "h248.IndAudStreamDescriptor",
6065         FT_NONE, BASE_NONE, NULL, 0,
6066         NULL, HFILL }},
6067     { &hf_h248_indAudStreamParms,
6068       { "streamParms", "h248.streamParms",
6069         FT_NONE, BASE_NONE, NULL, 0,
6070         "IndAudStreamParms", HFILL }},
6071     { &hf_h248_iASPLocalControlDescriptor,
6072       { "localControlDescriptor", "h248.localControlDescriptor",
6073         FT_NONE, BASE_NONE, NULL, 0,
6074         "IndAudLocalControlDescriptor", HFILL }},
6075     { &hf_h248_iASPLocalDescriptor,
6076       { "localDescriptor", "h248.localDescriptor",
6077         FT_NONE, BASE_NONE, NULL, 0,
6078         "IndAudLocalRemoteDescriptor", HFILL }},
6079     { &hf_h248_iASPRemoteDescriptor,
6080       { "remoteDescriptor", "h248.remoteDescriptor",
6081         FT_NONE, BASE_NONE, NULL, 0,
6082         "IndAudLocalRemoteDescriptor", HFILL }},
6083     { &hf_h248_statisticsDescriptor,
6084       { "statisticsDescriptor", "h248.statisticsDescriptor",
6085         FT_NONE, BASE_NONE, NULL, 0,
6086         "IndAudStatisticsDescriptor", HFILL }},
6087     { &hf_h248_iALCDStreamMode,
6088       { "streamMode", "h248.streamMode",
6089         FT_NONE, BASE_NONE, NULL, 0,
6090         NULL, HFILL }},
6091     { &hf_h248_iALCDReserveValue,
6092       { "reserveValue", "h248.reserveValue",
6093         FT_NONE, BASE_NONE, NULL, 0,
6094         NULL, HFILL }},
6095     { &hf_h248_iALCDReserveGroup,
6096       { "reserveGroup", "h248.reserveGroup",
6097         FT_NONE, BASE_NONE, NULL, 0,
6098         NULL, HFILL }},
6099     { &hf_h248_indAudPropertyParms,
6100       { "propertyParms", "h248.propertyParms",
6101         FT_UINT32, BASE_DEC, NULL, 0,
6102         "SEQUENCE_OF_IndAudPropertyParm", HFILL }},
6103     { &hf_h248_indAudPropertyParms_item,
6104       { "IndAudPropertyParm", "h248.IndAudPropertyParm",
6105         FT_NONE, BASE_NONE, NULL, 0,
6106         NULL, HFILL }},
6107     { &hf_h248_streamModeSel,
6108       { "streamModeSel", "h248.streamModeSel",
6109         FT_UINT32, BASE_DEC, VALS(h248_StreamMode_vals), 0,
6110         "StreamMode", HFILL }},
6111     { &hf_h248_name,
6112       { "name", "h248.name",
6113         FT_BYTES, BASE_NONE, NULL, 0,
6114         "PkgdName", HFILL }},
6115     { &hf_h248_propertyParms,
6116       { "propertyParms", "h248.propertyParms",
6117         FT_NONE, BASE_NONE, NULL, 0,
6118         "PropertyParm", HFILL }},
6119     { &hf_h248_propGroupID,
6120       { "propGroupID", "h248.propGroupID",
6121         FT_UINT32, BASE_DEC, NULL, 0,
6122         "INTEGER_0_65535", HFILL }},
6123     { &hf_h248_iAPropertyGroup,
6124       { "propGrps", "h248.propGrps",
6125         FT_UINT32, BASE_DEC, NULL, 0,
6126         "IndAudPropertyGroup", HFILL }},
6127     { &hf_h248_IndAudPropertyGroup_item,
6128       { "IndAudPropertyParm", "h248.IndAudPropertyParm",
6129         FT_NONE, BASE_NONE, NULL, 0,
6130         NULL, HFILL }},
6131     { &hf_h248_eventBufferControl,
6132       { "eventBufferControl", "h248.eventBufferControl",
6133         FT_NONE, BASE_NONE, NULL, 0,
6134         NULL, HFILL }},
6135     { &hf_h248_iATSDServiceState,
6136       { "serviceState", "h248.serviceState",
6137         FT_NONE, BASE_NONE, NULL, 0,
6138         NULL, HFILL }},
6139     { &hf_h248_serviceStateSel,
6140       { "serviceStateSel", "h248.serviceStateSel",
6141         FT_UINT32, BASE_DEC, VALS(h248_ServiceState_vals), 0,
6142         "ServiceState", HFILL }},
6143     { &hf_h248_requestID,
6144       { "requestID", "h248.requestID",
6145         FT_UINT32, BASE_DEC, NULL, 0,
6146         NULL, HFILL }},
6147     { &hf_h248_iAEDPkgdName,
6148       { "pkgdName", "h248.pkgdName",
6149         FT_BYTES, BASE_NONE, NULL, 0,
6150         NULL, HFILL }},
6151     { &hf_h248_iAEBDEventName,
6152       { "eventName", "h248.eventName",
6153         FT_BYTES, BASE_NONE, NULL, 0,
6154         "PkgdName", HFILL }},
6155     { &hf_h248_indAudSignal,
6156       { "signal", "h248.signal",
6157         FT_NONE, BASE_NONE, NULL, 0,
6158         "IndAudSignal", HFILL }},
6159     { &hf_h248_indAudSeqSigList,
6160       { "seqSigList", "h248.seqSigList",
6161         FT_NONE, BASE_NONE, NULL, 0,
6162         "IndAudSeqSigList", HFILL }},
6163     { &hf_h248_id,
6164       { "id", "h248.id",
6165         FT_UINT32, BASE_DEC, NULL, 0,
6166         "INTEGER_0_65535", HFILL }},
6167     { &hf_h248_iASignalList,
6168       { "signalList", "h248.signalList",
6169         FT_NONE, BASE_NONE, NULL, 0,
6170         "IndAudSignal", HFILL }},
6171     { &hf_h248_iASignalName,
6172       { "signalName", "h248.signalName",
6173         FT_BYTES, BASE_NONE, NULL, 0,
6174         "PkgdName", HFILL }},
6175     { &hf_h248_signalRequestID,
6176       { "signalRequestID", "h248.signalRequestID",
6177         FT_UINT32, BASE_DEC, NULL, 0,
6178         "RequestID", HFILL }},
6179     { &hf_h248_digitMapName,
6180       { "digitMapName", "h248.digitMapName",
6181         FT_BYTES, BASE_NONE, NULL, 0,
6182         NULL, HFILL }},
6183     { &hf_h248_iAStatName,
6184       { "statName", "h248.statName",
6185         FT_BYTES, BASE_NONE, NULL, 0,
6186         "PkgdName", HFILL }},
6187     { &hf_h248_packageName,
6188       { "packageName", "h248.packageName",
6189         FT_BYTES, BASE_NONE, NULL, 0,
6190         "Name", HFILL }},
6191     { &hf_h248_packageVersion,
6192       { "packageVersion", "h248.packageVersion",
6193         FT_UINT32, BASE_DEC, NULL, 0,
6194         "INTEGER_0_99", HFILL }},
6195     { &hf_h248_requestId,
6196       { "requestId", "h248.requestId",
6197         FT_UINT32, BASE_DEC, NULL, 0,
6198         NULL, HFILL }},
6199     { &hf_h248_observedEventLst,
6200       { "observedEventLst", "h248.observedEventLst",
6201         FT_UINT32, BASE_DEC, NULL, 0,
6202         "SEQUENCE_OF_ObservedEvent", HFILL }},
6203     { &hf_h248_observedEventLst_item,
6204       { "ObservedEvent", "h248.ObservedEvent",
6205         FT_NONE, BASE_NONE, NULL, 0,
6206         NULL, HFILL }},
6207     { &hf_h248_eventName,
6208       { "eventName", "h248.eventName",
6209         FT_BYTES, BASE_NONE, NULL, 0,
6210         NULL, HFILL }},
6211     { &hf_h248_eventParList,
6212       { "eventParList", "h248.eventParList",
6213         FT_UINT32, BASE_DEC, NULL, 0,
6214         "SEQUENCE_OF_EventParameter", HFILL }},
6215     { &hf_h248_eventParList_item,
6216       { "EventParameter", "h248.EventParameter",
6217         FT_NONE, BASE_NONE, NULL, 0,
6218         NULL, HFILL }},
6219     { &hf_h248_timeNotation,
6220       { "timeNotation", "h248.timeNotation",
6221         FT_NONE, BASE_NONE, NULL, 0,
6222         NULL, HFILL }},
6223     { &hf_h248_eventParameterName,
6224       { "eventParameterName", "h248.eventParameterName",
6225         FT_BYTES, BASE_NONE, NULL, 0,
6226         NULL, HFILL }},
6227     { &hf_h248_eventParamValue,
6228       { "eventParamValue", "h248.eventParamValue",
6229         FT_UINT32, BASE_DEC, NULL, 0,
6230         "EventParamValues", HFILL }},
6231     { &hf_h248_eventPar_extraInfo,
6232       { "extraInfo", "h248.extraInfo",
6233         FT_UINT32, BASE_DEC, VALS(h248_EventPar_extraInfo_vals), 0,
6234         "EventPar_extraInfo", HFILL }},
6235     { &hf_h248_relation,
6236       { "relation", "h248.relation",
6237         FT_UINT32, BASE_DEC, VALS(h248_Relation_vals), 0,
6238         NULL, HFILL }},
6239     { &hf_h248_range,
6240       { "range", "h248.range",
6241         FT_BOOLEAN, BASE_NONE, NULL, 0,
6242         "BOOLEAN", HFILL }},
6243     { &hf_h248_sublist,
6244       { "sublist", "h248.sublist",
6245         FT_BOOLEAN, BASE_NONE, NULL, 0,
6246         "BOOLEAN", HFILL }},
6247     { &hf_h248_EventParamValues_item,
6248       { "EventParamValue", "h248.EventParamValue",
6249         FT_BYTES, BASE_NONE, NULL, 0,
6250         NULL, HFILL }},
6251     { &hf_h248_serviceChangeParms,
6252       { "serviceChangeParms", "h248.serviceChangeParms",
6253         FT_NONE, BASE_NONE, NULL, 0,
6254         "ServiceChangeParm", HFILL }},
6255     { &hf_h248_serviceChangeResult,
6256       { "serviceChangeResult", "h248.serviceChangeResult",
6257         FT_UINT32, BASE_DEC, VALS(h248_ServiceChangeResult_vals), 0,
6258         NULL, HFILL }},
6259     { &hf_h248_serviceChangeResParms,
6260       { "serviceChangeResParms", "h248.serviceChangeResParms",
6261         FT_NONE, BASE_NONE, NULL, 0,
6262         "ServiceChangeResParm", HFILL }},
6263     { &hf_h248_wildcard,
6264       { "wildcard", "h248.wildcard",
6265         FT_UINT32, BASE_DEC, NULL, 0,
6266         "SEQUENCE_OF_WildcardField", HFILL }},
6267     { &hf_h248_wildcard_item,
6268       { "WildcardField", "h248.WildcardField",
6269         FT_BYTES, BASE_NONE, NULL, 0,
6270         NULL, HFILL }},
6271     { &hf_h248_terminationId,
6272       { "id", "h248.id",
6273         FT_BYTES, BASE_NONE, NULL, 0,
6274         "T_terminationId", HFILL }},
6275     { &hf_h248_TerminationIDList_item,
6276       { "TerminationID", "h248.TerminationID",
6277         FT_NONE, BASE_NONE, NULL, 0,
6278         NULL, HFILL }},
6279     { &hf_h248_termStateDescr,
6280       { "termStateDescr", "h248.termStateDescr",
6281         FT_NONE, BASE_NONE, NULL, 0,
6282         "TerminationStateDescriptor", HFILL }},
6283     { &hf_h248_streams,
6284       { "streams", "h248.streams",
6285         FT_UINT32, BASE_DEC, VALS(h248_T_streams_vals), 0,
6286         NULL, HFILL }},
6287     { &hf_h248_mediaDescriptorOneStream,
6288       { "oneStream", "h248.oneStream",
6289         FT_NONE, BASE_NONE, NULL, 0,
6290         "StreamParms", HFILL }},
6291     { &hf_h248_mediaDescriptorMultiStream,
6292       { "multiStream", "h248.multiStream",
6293         FT_UINT32, BASE_DEC, NULL, 0,
6294         "SEQUENCE_OF_StreamDescriptor", HFILL }},
6295     { &hf_h248_mediaDescriptorMultiStream_item,
6296       { "StreamDescriptor", "h248.StreamDescriptor",
6297         FT_NONE, BASE_NONE, NULL, 0,
6298         NULL, HFILL }},
6299     { &hf_h248_streamParms,
6300       { "streamParms", "h248.streamParms",
6301         FT_NONE, BASE_NONE, NULL, 0,
6302         NULL, HFILL }},
6303     { &hf_h248_localControlDescriptor,
6304       { "localControlDescriptor", "h248.localControlDescriptor",
6305         FT_NONE, BASE_NONE, NULL, 0,
6306         NULL, HFILL }},
6307     { &hf_h248_localDescriptor,
6308       { "localDescriptor", "h248.localDescriptor",
6309         FT_NONE, BASE_NONE, NULL, 0,
6310         "LocalRemoteDescriptor", HFILL }},
6311     { &hf_h248_remoteDescriptor,
6312       { "remoteDescriptor", "h248.remoteDescriptor",
6313         FT_NONE, BASE_NONE, NULL, 0,
6314         "LocalRemoteDescriptor", HFILL }},
6315     { &hf_h248_sPstatisticsDescriptor,
6316       { "statisticsDescriptor", "h248.statisticsDescriptor",
6317         FT_UINT32, BASE_DEC, NULL, 0,
6318         NULL, HFILL }},
6319     { &hf_h248_streamMode,
6320       { "streamMode", "h248.streamMode",
6321         FT_UINT32, BASE_DEC, VALS(h248_StreamMode_vals), 0,
6322         NULL, HFILL }},
6323     { &hf_h248_reserveValue,
6324       { "reserveValue", "h248.reserveValue",
6325         FT_BOOLEAN, BASE_NONE, NULL, 0,
6326         "BOOLEAN", HFILL }},
6327     { &hf_h248_reserveGroup,
6328       { "reserveGroup", "h248.reserveGroup",
6329         FT_BOOLEAN, BASE_NONE, NULL, 0,
6330         "BOOLEAN", HFILL }},
6331     { &hf_h248_lCDpropertyParms,
6332       { "propertyParms", "h248.propertyParms",
6333         FT_UINT32, BASE_DEC, NULL, 0,
6334         "SEQUENCE_OF_PropertyParm", HFILL }},
6335     { &hf_h248_lCDpropertyParms_item,
6336       { "PropertyParm", "h248.PropertyParm",
6337         FT_NONE, BASE_NONE, NULL, 0,
6338         NULL, HFILL }},
6339     { &hf_h248_propertyName,
6340       { "propertyName", "h248.propertyName",
6341         FT_BYTES, BASE_NONE, NULL, 0,
6342         NULL, HFILL }},
6343     { &hf_h248_propertyParamValue,
6344       { "value", "h248.value",
6345         FT_UINT32, BASE_DEC, NULL, 0,
6346         "SEQUENCE_OF_PropertyID", HFILL }},
6347     { &hf_h248_propertyParamValue_item,
6348       { "PropertyID", "h248.PropertyID",
6349         FT_BYTES, BASE_NONE, NULL, 0,
6350         NULL, HFILL }},
6351     { &hf_h248_propParm_extraInfo,
6352       { "extraInfo", "h248.extraInfo",
6353         FT_UINT32, BASE_DEC, VALS(h248_PropParm_extraInfo_vals), 0,
6354         "PropParm_extraInfo", HFILL }},
6355     { &hf_h248_propGrps,
6356       { "propGrps", "h248.propGrps",
6357         FT_UINT32, BASE_DEC, NULL, 0,
6358         "SEQUENCE_OF_PropertyGroup", HFILL }},
6359     { &hf_h248_propGrps_item,
6360       { "PropertyGroup", "h248.PropertyGroup",
6361         FT_UINT32, BASE_DEC, NULL, 0,
6362         NULL, HFILL }},
6363     { &hf_h248_PropertyGroup_item,
6364       { "PropertyParm", "h248.PropertyParm",
6365         FT_NONE, BASE_NONE, NULL, 0,
6366         NULL, HFILL }},
6367     { &hf_h248_tSDpropertyParms,
6368       { "propertyParms", "h248.propertyParms",
6369         FT_UINT32, BASE_DEC, NULL, 0,
6370         "SEQUENCE_OF_PropertyParm", HFILL }},
6371     { &hf_h248_tSDpropertyParms_item,
6372       { "PropertyParm", "h248.PropertyParm",
6373         FT_NONE, BASE_NONE, NULL, 0,
6374         NULL, HFILL }},
6375     { &hf_h248_tSEventBufferControl,
6376       { "eventBufferControl", "h248.eventBufferControl",
6377         FT_UINT32, BASE_DEC, VALS(h248_EventBufferControl_vals), 0,
6378         NULL, HFILL }},
6379     { &hf_h248_serviceState,
6380       { "serviceState", "h248.serviceState",
6381         FT_UINT32, BASE_DEC, VALS(h248_ServiceState_vals), 0,
6382         NULL, HFILL }},
6383     { &hf_h248_muxType,
6384       { "muxType", "h248.muxType",
6385         FT_UINT32, BASE_DEC, VALS(h248_MuxType_vals), 0,
6386         NULL, HFILL }},
6387     { &hf_h248_termList,
6388       { "termList", "h248.termList",
6389         FT_UINT32, BASE_DEC, NULL, 0,
6390         "SEQUENCE_OF_TerminationID", HFILL }},
6391     { &hf_h248_termList_item,
6392       { "TerminationID", "h248.TerminationID",
6393         FT_NONE, BASE_NONE, NULL, 0,
6394         NULL, HFILL }},
6395     { &hf_h248_nonStandardData,
6396       { "nonStandardData", "h248.nonStandardData",
6397         FT_NONE, BASE_NONE, NULL, 0,
6398         NULL, HFILL }},
6399     { &hf_h248_eventList,
6400       { "eventList", "h248.eventList",
6401         FT_UINT32, BASE_DEC, NULL, 0,
6402         "SEQUENCE_OF_RequestedEvent", HFILL }},
6403     { &hf_h248_eventList_item,
6404       { "RequestedEvent", "h248.RequestedEvent",
6405         FT_NONE, BASE_NONE, NULL, 0,
6406         NULL, HFILL }},
6407     { &hf_h248_eventAction,
6408       { "eventAction", "h248.eventAction",
6409         FT_NONE, BASE_NONE, NULL, 0,
6410         "RequestedActions", HFILL }},
6411     { &hf_h248_evParList,
6412       { "evParList", "h248.evParList",
6413         FT_UINT32, BASE_DEC, NULL, 0,
6414         "SEQUENCE_OF_EventParameter", HFILL }},
6415     { &hf_h248_evParList_item,
6416       { "EventParameter", "h248.EventParameter",
6417         FT_NONE, BASE_NONE, NULL, 0,
6418         NULL, HFILL }},
6419     { &hf_h248_secondEvent,
6420       { "secondEvent", "h248.secondEvent",
6421         FT_NONE, BASE_NONE, NULL, 0,
6422         "SecondEventsDescriptor", HFILL }},
6423     { &hf_h248_notifyImmediate,
6424       { "notifyImmediate", "h248.notifyImmediate",
6425         FT_NONE, BASE_NONE, NULL, 0,
6426         NULL, HFILL }},
6427     { &hf_h248_notifyRegulated,
6428       { "notifyRegulated", "h248.notifyRegulated",
6429         FT_NONE, BASE_NONE, NULL, 0,
6430         "RegulatedEmbeddedDescriptor", HFILL }},
6431     { &hf_h248_neverNotify,
6432       { "neverNotify", "h248.neverNotify",
6433         FT_NONE, BASE_NONE, NULL, 0,
6434         NULL, HFILL }},
6435     { &hf_h248_keepActive,
6436       { "keepActive", "h248.keepActive",
6437         FT_BOOLEAN, BASE_NONE, NULL, 0,
6438         "BOOLEAN", HFILL }},
6439     { &hf_h248_eventDM,
6440       { "eventDM", "h248.eventDM",
6441         FT_UINT32, BASE_DEC, VALS(h248_EventDM_vals), 0,
6442         NULL, HFILL }},
6443     { &hf_h248_notifyBehaviour,
6444       { "notifyBehaviour", "h248.notifyBehaviour",
6445         FT_UINT32, BASE_DEC, VALS(h248_NotifyBehaviour_vals), 0,
6446         NULL, HFILL }},
6447     { &hf_h248_resetEventsDescriptor,
6448       { "resetEventsDescriptor", "h248.resetEventsDescriptor",
6449         FT_NONE, BASE_NONE, NULL, 0,
6450         NULL, HFILL }},
6451     { &hf_h248_digitMapValue,
6452       { "digitMapValue", "h248.digitMapValue",
6453         FT_NONE, BASE_NONE, NULL, 0,
6454         NULL, HFILL }},
6455     { &hf_h248_secondaryEventList,
6456       { "eventList", "h248.eventList",
6457         FT_UINT32, BASE_DEC, NULL, 0,
6458         "SEQUENCE_OF_SecondRequestedEvent", HFILL }},
6459     { &hf_h248_secondaryEventList_item,
6460       { "SecondRequestedEvent", "h248.SecondRequestedEvent",
6461         FT_NONE, BASE_NONE, NULL, 0,
6462         NULL, HFILL }},
6463     { &hf_h248_pkgdName,
6464       { "pkgdName", "h248.pkgdName",
6465         FT_BYTES, BASE_NONE, NULL, 0,
6466         NULL, HFILL }},
6467     { &hf_h248_secondaryEventAction,
6468       { "eventAction", "h248.eventAction",
6469         FT_NONE, BASE_NONE, NULL, 0,
6470         "SecondRequestedActions", HFILL }},
6471     { &hf_h248_EventBufferDescriptor_item,
6472       { "EventSpec", "h248.EventSpec",
6473         FT_NONE, BASE_NONE, NULL, 0,
6474         NULL, HFILL }},
6475     { &hf_h248_SignalsDescriptor_item,
6476       { "SignalRequest", "h248.SignalRequest",
6477         FT_UINT32, BASE_DEC, VALS(h248_SignalRequest_vals), 0,
6478         NULL, HFILL }},
6479     { &hf_h248_signal,
6480       { "signal", "h248.signal",
6481         FT_NONE, BASE_NONE, NULL, 0,
6482         NULL, HFILL }},
6483     { &hf_h248_seqSigList,
6484       { "seqSigList", "h248.seqSigList",
6485         FT_NONE, BASE_NONE, NULL, 0,
6486         NULL, HFILL }},
6487     { &hf_h248_signalList,
6488       { "signalList", "h248.signalList",
6489         FT_UINT32, BASE_DEC, NULL, 0,
6490         "SEQUENCE_OF_Signal", HFILL }},
6491     { &hf_h248_signalList_item,
6492       { "Signal", "h248.Signal",
6493         FT_NONE, BASE_NONE, NULL, 0,
6494         NULL, HFILL }},
6495     { &hf_h248_signalName,
6496       { "signalName", "h248.signalName",
6497         FT_BYTES, BASE_NONE, NULL, 0,
6498         NULL, HFILL }},
6499     { &hf_h248_sigType,
6500       { "sigType", "h248.sigType",
6501         FT_UINT32, BASE_DEC, VALS(h248_SignalType_vals), 0,
6502         "SignalType", HFILL }},
6503     { &hf_h248_duration,
6504       { "duration", "h248.duration",
6505         FT_UINT32, BASE_DEC, NULL, 0,
6506         "INTEGER_0_65535", HFILL }},
6507     { &hf_h248_notifyCompletion,
6508       { "notifyCompletion", "h248.notifyCompletion",
6509         FT_BYTES, BASE_NONE, NULL, 0,
6510         NULL, HFILL }},
6511     { &hf_h248_sigParList,
6512       { "sigParList", "h248.sigParList",
6513         FT_UINT32, BASE_DEC, NULL, 0,
6514         "SEQUENCE_OF_SigParameter", HFILL }},
6515     { &hf_h248_sigParList_item,
6516       { "SigParameter", "h248.SigParameter",
6517         FT_NONE, BASE_NONE, NULL, 0,
6518         NULL, HFILL }},
6519     { &hf_h248_direction,
6520       { "direction", "h248.direction",
6521         FT_UINT32, BASE_DEC, VALS(h248_SignalDirection_vals), 0,
6522         "SignalDirection", HFILL }},
6523     { &hf_h248_intersigDelay,
6524       { "intersigDelay", "h248.intersigDelay",
6525         FT_UINT32, BASE_DEC, NULL, 0,
6526         "INTEGER_0_65535", HFILL }},
6527     { &hf_h248_sigParameterName,
6528       { "sigParameterName", "h248.sigParameterName",
6529         FT_BYTES, BASE_NONE, NULL, 0,
6530         NULL, HFILL }},
6531     { &hf_h248_value,
6532       { "value", "h248.value",
6533         FT_UINT32, BASE_DEC, NULL, 0,
6534         "SigParamValues", HFILL }},
6535     { &hf_h248_extraInfo,
6536       { "extraInfo", "h248.extraInfo",
6537         FT_UINT32, BASE_DEC, VALS(h248_T_extraInfo_vals), 0,
6538         NULL, HFILL }},
6539     { &hf_h248_SigParamValues_item,
6540       { "SigParamValue", "h248.SigParamValue",
6541         FT_BYTES, BASE_NONE, NULL, 0,
6542         NULL, HFILL }},
6543     { &hf_h248_mtl,
6544       { "mtl", "h248.mtl",
6545         FT_UINT32, BASE_DEC, NULL, 0,
6546         "SEQUENCE_OF_ModemType", HFILL }},
6547     { &hf_h248_mtl_item,
6548       { "ModemType", "h248.ModemType",
6549         FT_UINT32, BASE_DEC, VALS(h248_ModemType_vals), 0,
6550         NULL, HFILL }},
6551     { &hf_h248_mpl,
6552       { "mpl", "h248.mpl",
6553         FT_UINT32, BASE_DEC, NULL, 0,
6554         "SEQUENCE_OF_PropertyParm", HFILL }},
6555     { &hf_h248_mpl_item,
6556       { "PropertyParm", "h248.PropertyParm",
6557         FT_NONE, BASE_NONE, NULL, 0,
6558         NULL, HFILL }},
6559     { &hf_h248_startTimer,
6560       { "startTimer", "h248.startTimer",
6561         FT_UINT32, BASE_DEC, NULL, 0,
6562         "INTEGER_0_99", HFILL }},
6563     { &hf_h248_shortTimer,
6564       { "shortTimer", "h248.shortTimer",
6565         FT_UINT32, BASE_DEC, NULL, 0,
6566         "INTEGER_0_99", HFILL }},
6567     { &hf_h248_longTimer,
6568       { "longTimer", "h248.longTimer",
6569         FT_UINT32, BASE_DEC, NULL, 0,
6570         "INTEGER_0_99", HFILL }},
6571     { &hf_h248_digitMapBody,
6572       { "digitMapBody", "h248.digitMapBody",
6573         FT_STRING, BASE_NONE, NULL, 0,
6574         "IA5String", HFILL }},
6575     { &hf_h248_durationTimer,
6576       { "durationTimer", "h248.durationTimer",
6577         FT_UINT32, BASE_DEC, NULL, 0,
6578         "INTEGER_0_99", HFILL }},
6579     { &hf_h248_serviceChangeMethod,
6580       { "serviceChangeMethod", "h248.serviceChangeMethod",
6581         FT_UINT32, BASE_DEC, VALS(h248_ServiceChangeMethod_vals), 0,
6582         NULL, HFILL }},
6583     { &hf_h248_serviceChangeAddress,
6584       { "serviceChangeAddress", "h248.serviceChangeAddress",
6585         FT_UINT32, BASE_DEC, VALS(h248_ServiceChangeAddress_vals), 0,
6586         NULL, HFILL }},
6587     { &hf_h248_serviceChangeVersion,
6588       { "serviceChangeVersion", "h248.serviceChangeVersion",
6589         FT_UINT32, BASE_DEC, NULL, 0,
6590         "INTEGER_0_99", HFILL }},
6591     { &hf_h248_serviceChangeProfile,
6592       { "serviceChangeProfile", "h248.serviceChangeProfile",
6593         FT_NONE, BASE_NONE, NULL, 0,
6594         NULL, HFILL }},
6595     { &hf_h248_serviceChangeReason,
6596       { "serviceChangeReason", "h248.serviceChangeReason",
6597         FT_UINT32, BASE_DEC, NULL, 0,
6598         "SCreasonValue", HFILL }},
6599     { &hf_h248_serviceChangeDelay,
6600       { "serviceChangeDelay", "h248.serviceChangeDelay",
6601         FT_UINT32, BASE_DEC, NULL, 0,
6602         "INTEGER_0_4294967295", HFILL }},
6603     { &hf_h248_serviceChangeMgcId,
6604       { "serviceChangeMgcId", "h248.serviceChangeMgcId",
6605         FT_UINT32, BASE_DEC, VALS(h248_MId_vals), 0,
6606         "MId", HFILL }},
6607     { &hf_h248_timeStamp,
6608       { "timeStamp", "h248.timeStamp",
6609         FT_NONE, BASE_NONE, NULL, 0,
6610         "TimeNotation", HFILL }},
6611     { &hf_h248_serviceChangeInfo,
6612       { "serviceChangeInfo", "h248.serviceChangeInfo",
6613         FT_NONE, BASE_NONE, NULL, 0,
6614         "AuditDescriptor", HFILL }},
6615     { &hf_h248_serviceChangeIncompleteFlag,
6616       { "serviceChangeIncompleteFlag", "h248.serviceChangeIncompleteFlag",
6617         FT_NONE, BASE_NONE, NULL, 0,
6618         NULL, HFILL }},
6619     { &hf_h248_SCreasonValue_item,
6620       { "SCreasonValueOctetStr", "h248.SCreasonValueOctetStr",
6621         FT_BYTES, BASE_NONE, NULL, 0,
6622         NULL, HFILL }},
6623     { &hf_h248_timestamp,
6624       { "timestamp", "h248.timestamp",
6625         FT_NONE, BASE_NONE, NULL, 0,
6626         "TimeNotation", HFILL }},
6627     { &hf_h248_profileName,
6628       { "profileName", "h248.profileName",
6629         FT_STRING, BASE_NONE, NULL, 0,
6630         "IA5String_SIZE_1_67", HFILL }},
6631     { &hf_h248_PackagesDescriptor_item,
6632       { "PackagesItem", "h248.PackagesItem",
6633         FT_NONE, BASE_NONE, NULL, 0,
6634         NULL, HFILL }},
6635     { &hf_h248_StatisticsDescriptor_item,
6636       { "StatisticsParameter", "h248.StatisticsParameter",
6637         FT_NONE, BASE_NONE, NULL, 0,
6638         NULL, HFILL }},
6639     { &hf_h248_statName,
6640       { "statName", "h248.statName",
6641         FT_BYTES, BASE_NONE, NULL, 0,
6642         NULL, HFILL }},
6643     { &hf_h248_statValue,
6644       { "statValue", "h248.statValue",
6645         FT_UINT32, BASE_DEC, NULL, 0,
6646         NULL, HFILL }},
6647     { &hf_h248_nonStandardIdentifier,
6648       { "nonStandardIdentifier", "h248.nonStandardIdentifier",
6649         FT_UINT32, BASE_DEC, VALS(h248_NonStandardIdentifier_vals), 0,
6650         NULL, HFILL }},
6651     { &hf_h248_data,
6652       { "data", "h248.data",
6653         FT_BYTES, BASE_NONE, NULL, 0,
6654         "OCTET_STRING", HFILL }},
6655     { &hf_h248_object,
6656       { "object", "h248.object",
6657         FT_OID, BASE_NONE, NULL, 0,
6658         "OBJECT_IDENTIFIER", HFILL }},
6659     { &hf_h248_h221NonStandard,
6660       { "h221NonStandard", "h248.h221NonStandard",
6661         FT_NONE, BASE_NONE, NULL, 0,
6662         NULL, HFILL }},
6663     { &hf_h248_experimental,
6664       { "experimental", "h248.experimental",
6665         FT_STRING, BASE_NONE, NULL, 0,
6666         "IA5String_SIZE_8", HFILL }},
6667     { &hf_h248_t35CountryCode1,
6668       { "t35CountryCode1", "h248.t35CountryCode1",
6669         FT_UINT32, BASE_DEC, NULL, 0,
6670         "INTEGER_0_255", HFILL }},
6671     { &hf_h248_t35CountryCode2,
6672       { "t35CountryCode2", "h248.t35CountryCode2",
6673         FT_UINT32, BASE_DEC, NULL, 0,
6674         "INTEGER_0_255", HFILL }},
6675     { &hf_h248_t35Extension,
6676       { "t35Extension", "h248.t35Extension",
6677         FT_UINT32, BASE_DEC, NULL, 0,
6678         "INTEGER_0_255", HFILL }},
6679     { &hf_h248_manufacturerCode,
6680       { "manufacturerCode", "h248.manufacturerCode",
6681         FT_UINT32, BASE_DEC, NULL, 0,
6682         "INTEGER_0_65535", HFILL }},
6683     { &hf_h248_date,
6684       { "date", "h248.date",
6685         FT_STRING, BASE_NONE, NULL, 0,
6686         "IA5String_SIZE_8", HFILL }},
6687     { &hf_h248_time,
6688       { "time", "h248.time",
6689         FT_STRING, BASE_NONE, NULL, 0,
6690         "IA5String_SIZE_8", HFILL }},
6691     { &hf_h248_Value_item,
6692       { "Value item", "h248.Value_item",
6693         FT_BYTES, BASE_NONE, NULL, 0,
6694         "OCTET_STRING", HFILL }},
6695     { &hf_h248_audit_result,
6696       { "auditResult", "h248.auditResult",
6697         FT_UINT32, BASE_DEC, VALS(h248_AuditResultV1_vals), 0,
6698         "AuditResultV1", HFILL }},
6699     { &hf_h248_contectAuditResult,
6700       { "contectAuditResult", "h248.contectAuditResult",
6701         FT_NONE, BASE_NONE, NULL, 0,
6702         "TerminationID", HFILL }},
6703     { &hf_h248_eventParamterName,
6704       { "eventParamterName", "h248.eventParamterName",
6705         FT_BYTES, BASE_NONE, NULL, 0,
6706         "EventParameterName", HFILL }},
6707     { &hf_h248_event_param_value,
6708       { "value", "h248.value",
6709         FT_BYTES, BASE_NONE, NULL, 0,
6710         "EventParamValueV1", HFILL }},
6711     { &hf_h248_sig_param_value,
6712       { "value", "h248.value",
6713         FT_BYTES, BASE_NONE, NULL, 0,
6714         "SigParamValueV1", HFILL }},
6715     { &hf_h248_T_auditToken_muxToken,
6716       { "muxToken", "h248.muxToken",
6717         FT_BOOLEAN, 8, NULL, 0x80,
6718         NULL, HFILL }},
6719     { &hf_h248_T_auditToken_modemToken,
6720       { "modemToken", "h248.modemToken",
6721         FT_BOOLEAN, 8, NULL, 0x40,
6722         NULL, HFILL }},
6723     { &hf_h248_T_auditToken_mediaToken,
6724       { "mediaToken", "h248.mediaToken",
6725         FT_BOOLEAN, 8, NULL, 0x20,
6726         NULL, HFILL }},
6727     { &hf_h248_T_auditToken_eventsToken,
6728       { "eventsToken", "h248.eventsToken",
6729         FT_BOOLEAN, 8, NULL, 0x10,
6730         NULL, HFILL }},
6731     { &hf_h248_T_auditToken_signalsToken,
6732       { "signalsToken", "h248.signalsToken",
6733         FT_BOOLEAN, 8, NULL, 0x08,
6734         NULL, HFILL }},
6735     { &hf_h248_T_auditToken_digitMapToken,
6736       { "digitMapToken", "h248.digitMapToken",
6737         FT_BOOLEAN, 8, NULL, 0x04,
6738         NULL, HFILL }},
6739     { &hf_h248_T_auditToken_statsToken,
6740       { "statsToken", "h248.statsToken",
6741         FT_BOOLEAN, 8, NULL, 0x02,
6742         NULL, HFILL }},
6743     { &hf_h248_T_auditToken_observedEventsToken,
6744       { "observedEventsToken", "h248.observedEventsToken",
6745         FT_BOOLEAN, 8, NULL, 0x01,
6746         NULL, HFILL }},
6747     { &hf_h248_T_auditToken_packagesToken,
6748       { "packagesToken", "h248.packagesToken",
6749         FT_BOOLEAN, 8, NULL, 0x80,
6750         NULL, HFILL }},
6751     { &hf_h248_T_auditToken_eventBufferToken,
6752       { "eventBufferToken", "h248.eventBufferToken",
6753         FT_BOOLEAN, 8, NULL, 0x40,
6754         NULL, HFILL }},
6755     { &hf_h248_NotifyCompletion_onTimeOut,
6756       { "onTimeOut", "h248.onTimeOut",
6757         FT_BOOLEAN, 8, NULL, 0x80,
6758         NULL, HFILL }},
6759     { &hf_h248_NotifyCompletion_onInterruptByEvent,
6760       { "onInterruptByEvent", "h248.onInterruptByEvent",
6761         FT_BOOLEAN, 8, NULL, 0x40,
6762         NULL, HFILL }},
6763     { &hf_h248_NotifyCompletion_onInterruptByNewSignalDescr,
6764       { "onInterruptByNewSignalDescr", "h248.onInterruptByNewSignalDescr",
6765         FT_BOOLEAN, 8, NULL, 0x20,
6766         NULL, HFILL }},
6767     { &hf_h248_NotifyCompletion_otherReason,
6768       { "otherReason", "h248.otherReason",
6769         FT_BOOLEAN, 8, NULL, 0x10,
6770         NULL, HFILL }},
6771     { &hf_h248_NotifyCompletion_onIteration,
6772       { "onIteration", "h248.onIteration",
6773         FT_BOOLEAN, 8, NULL, 0x08,
6774         NULL, HFILL }},
6775
6776 /*--- End of included file: packet-h248-hfarr.c ---*/
6777 #line 1560 "../../asn1/h248/packet-h248-template.c"
6778
6779         GCP_HF_ARR_ELEMS("h248",h248_arrel)
6780
6781     };
6782
6783     /* List of subtrees */
6784     static gint *ett[] = {
6785         &ett_h248,
6786         &ett_mtpaddress,
6787         &ett_packagename,
6788         &ett_codec,
6789         &ett_wildcard,
6790         &ett_h248_no_pkg,
6791         &ett_h248_no_sig,
6792         &ett_h248_no_evt,
6793         GCP_ETT_ARR_ELEMS(h248_arrel),
6794
6795
6796 /*--- Included file: packet-h248-ettarr.c ---*/
6797 #line 1 "../../asn1/h248/packet-h248-ettarr.c"
6798     &ett_h248_MegacoMessage,
6799     &ett_h248_AuthenticationHeader,
6800     &ett_h248_Message,
6801     &ett_h248_T_messageBody,
6802     &ett_h248_SEQUENCE_OF_Transaction,
6803     &ett_h248_MId,
6804     &ett_h248_DomainName,
6805     &ett_h248_IP4Address,
6806     &ett_h248_IP6Address,
6807     &ett_h248_Transaction,
6808     &ett_h248_TransactionRequest,
6809     &ett_h248_SEQUENCE_OF_ActionRequest,
6810     &ett_h248_TransactionPending,
6811     &ett_h248_TransactionReply,
6812     &ett_h248_T_transactionResult,
6813     &ett_h248_SEQUENCE_OF_ActionReply,
6814     &ett_h248_SegmentReply,
6815     &ett_h248_TransactionResponseAck,
6816     &ett_h248_TransactionAck,
6817     &ett_h248_ErrorDescriptor,
6818     &ett_h248_ActionRequest,
6819     &ett_h248_SEQUENCE_OF_CommandRequest,
6820     &ett_h248_ActionReply,
6821     &ett_h248_SEQUENCE_OF_CommandReply,
6822     &ett_h248_ContextRequest,
6823     &ett_h248_T_topologyReq,
6824     &ett_h248_SEQUENCE_OF_PropertyParm,
6825     &ett_h248_SEQUENCE_OF_ContextIDinList,
6826     &ett_h248_ContextAttrAuditRequest,
6827     &ett_h248_SEQUENCE_OF_IndAudPropertyParm,
6828     &ett_h248_SelectLogic,
6829     &ett_h248_CommandRequest,
6830     &ett_h248_Command,
6831     &ett_h248_CommandReply,
6832     &ett_h248_TopologyRequest,
6833     &ett_h248_AmmRequest,
6834     &ett_h248_SEQUENCE_OF_AmmDescriptor,
6835     &ett_h248_AmmDescriptor,
6836     &ett_h248_AmmsReply,
6837     &ett_h248_SubtractRequest,
6838     &ett_h248_AuditRequest,
6839     &ett_h248_AuditReply,
6840     &ett_h248_AuditResult,
6841     &ett_h248_TermListAuditResult,
6842     &ett_h248_TerminationAudit,
6843     &ett_h248_AuditReturnParameter,
6844     &ett_h248_AuditDescriptor,
6845     &ett_h248_T_auditToken,
6846     &ett_h248_SEQUENCE_OF_IndAuditParameter,
6847     &ett_h248_IndAuditParameter,
6848     &ett_h248_IndAudMediaDescriptor,
6849     &ett_h248_IndAudMediaDescriptorStreams,
6850     &ett_h248_SEQUENCE_OF_IndAudStreamDescriptor,
6851     &ett_h248_IndAudStreamDescriptor,
6852     &ett_h248_IndAudStreamParms,
6853     &ett_h248_IndAudLocalControlDescriptor,
6854     &ett_h248_IndAudPropertyParm,
6855     &ett_h248_IndAudLocalRemoteDescriptor,
6856     &ett_h248_IndAudPropertyGroup,
6857     &ett_h248_IndAudTerminationStateDescriptor,
6858     &ett_h248_IndAudEventsDescriptor,
6859     &ett_h248_IndAudEventBufferDescriptor,
6860     &ett_h248_IndAudSignalsDescriptor,
6861     &ett_h248_IndAudSeqSigList,
6862     &ett_h248_IndAudSignal,
6863     &ett_h248_IndAudDigitMapDescriptor,
6864     &ett_h248_IndAudStatisticsDescriptor,
6865     &ett_h248_IndAudPackagesDescriptor,
6866     &ett_h248_NotifyRequest,
6867     &ett_h248_NotifyReply,
6868     &ett_h248_ObservedEventsDescriptor,
6869     &ett_h248_SEQUENCE_OF_ObservedEvent,
6870     &ett_h248_ObservedEvent,
6871     &ett_h248_SEQUENCE_OF_EventParameter,
6872     &ett_h248_EventParameter,
6873     &ett_h248_EventPar_extraInfo,
6874     &ett_h248_EventParamValues,
6875     &ett_h248_ServiceChangeRequest,
6876     &ett_h248_ServiceChangeReply,
6877     &ett_h248_ServiceChangeResult,
6878     &ett_h248_TerminationID,
6879     &ett_h248_SEQUENCE_OF_WildcardField,
6880     &ett_h248_TerminationIDList,
6881     &ett_h248_MediaDescriptor,
6882     &ett_h248_T_streams,
6883     &ett_h248_SEQUENCE_OF_StreamDescriptor,
6884     &ett_h248_StreamDescriptor,
6885     &ett_h248_StreamParms,
6886     &ett_h248_LocalControlDescriptor,
6887     &ett_h248_PropertyParm,
6888     &ett_h248_SEQUENCE_OF_PropertyID,
6889     &ett_h248_PropParm_extraInfo,
6890     &ett_h248_LocalRemoteDescriptor,
6891     &ett_h248_SEQUENCE_OF_PropertyGroup,
6892     &ett_h248_PropertyGroup,
6893     &ett_h248_TerminationStateDescriptor,
6894     &ett_h248_MuxDescriptor,
6895     &ett_h248_SEQUENCE_OF_TerminationID,
6896     &ett_h248_EventsDescriptor,
6897     &ett_h248_SEQUENCE_OF_RequestedEvent,
6898     &ett_h248_RequestedEvent,
6899     &ett_h248_RegulatedEmbeddedDescriptor,
6900     &ett_h248_NotifyBehaviour,
6901     &ett_h248_RequestedActions,
6902     &ett_h248_EventDM,
6903     &ett_h248_SecondEventsDescriptor,
6904     &ett_h248_SEQUENCE_OF_SecondRequestedEvent,
6905     &ett_h248_SecondRequestedEvent,
6906     &ett_h248_SecondRequestedActions,
6907     &ett_h248_EventBufferDescriptor,
6908     &ett_h248_EventSpec,
6909     &ett_h248_SignalsDescriptor,
6910     &ett_h248_SignalRequest,
6911     &ett_h248_SeqSigList,
6912     &ett_h248_SEQUENCE_OF_Signal,
6913     &ett_h248_Signal,
6914     &ett_h248_SEQUENCE_OF_SigParameter,
6915     &ett_h248_NotifyCompletion,
6916     &ett_h248_SigParameter,
6917     &ett_h248_T_extraInfo,
6918     &ett_h248_SigParamValues,
6919     &ett_h248_ModemDescriptor,
6920     &ett_h248_SEQUENCE_OF_ModemType,
6921     &ett_h248_DigitMapDescriptor,
6922     &ett_h248_DigitMapValue,
6923     &ett_h248_ServiceChangeParm,
6924     &ett_h248_SCreasonValue,
6925     &ett_h248_ServiceChangeAddress,
6926     &ett_h248_ServiceChangeResParm,
6927     &ett_h248_ServiceChangeProfile,
6928     &ett_h248_PackagesDescriptor,
6929     &ett_h248_PackagesItem,
6930     &ett_h248_StatisticsDescriptor,
6931     &ett_h248_StatisticsParameter,
6932     &ett_h248_NonStandardData,
6933     &ett_h248_NonStandardIdentifier,
6934     &ett_h248_H221NonStandard,
6935     &ett_h248_TimeNotation,
6936     &ett_h248_Value,
6937     &ett_h248_AuditReplyV1,
6938     &ett_h248_AuditResultV1,
6939     &ett_h248_EventParameterV1,
6940     &ett_h248_SigParameterV1,
6941
6942 /*--- End of included file: packet-h248-ettarr.c ---*/
6943 #line 1578 "../../asn1/h248/packet-h248-template.c"
6944     };
6945
6946     module_t *h248_module;
6947
6948
6949     /* Register protocol */
6950     proto_h248 = proto_register_protocol(PNAME, PSNAME, PFNAME);
6951     register_dissector("h248", dissect_h248, proto_h248);
6952     register_dissector("h248.tpkt", dissect_h248_tpkt, proto_h248);
6953
6954     /* Register fields and subtrees */
6955     proto_register_field_array(proto_h248, hf, array_length(hf));
6956     proto_register_subtree_array(ett, array_length(ett));
6957         
6958         subdissector_table = register_dissector_table("h248.magic_num", "H248 Magic Num", FT_UINT32, BASE_HEX);
6959
6960     h248_module = prefs_register_protocol(proto_h248, proto_reg_handoff_h248);
6961     prefs_register_bool_preference(h248_module, "ctx_info",
6962                                    "Track Context",
6963                                    "Mantain relationships between transactions and contexts and display an extra tree showing context data",
6964                                    &keep_persistent_data);
6965     prefs_register_uint_preference(h248_module, "udp_port",
6966                                    "UDP port",
6967                                    "Port to be decoded as h248",
6968                                    10,
6969                                    &global_udp_port);
6970     prefs_register_uint_preference(h248_module, "tcp_port",
6971                                    "TCP port",
6972                                    "Port to be decoded as h248",
6973                                    10,
6974                                    &global_tcp_port);
6975     prefs_register_bool_preference(h248_module, "desegment",
6976                                    "Desegment H.248 over TCP",
6977                                    "Desegment H.248 messages that span more TCP segments",
6978                                    &h248_desegment);
6979
6980     msgs = se_tree_create(EMEM_TREE_TYPE_RED_BLACK, "h248_msgs");
6981     trxs = se_tree_create(EMEM_TREE_TYPE_RED_BLACK, "h248_trxs");
6982     ctxs_by_trx = se_tree_create(EMEM_TREE_TYPE_RED_BLACK, "h248_ctxs_by_trx");
6983     ctxs = se_tree_create(EMEM_TREE_TYPE_RED_BLACK, "h248_ctxs");
6984
6985     h248_tap = register_tap("h248");
6986
6987     gcp_init();
6988 }
6989
6990 /*--- proto_reg_handoff_h248 -------------------------------------------*/
6991 void proto_reg_handoff_h248(void) {
6992
6993     static gboolean initialized = FALSE;
6994     static guint32 udp_port;
6995     static guint32 tcp_port;
6996
6997     if (!initialized) {
6998         h248_handle = find_dissector("h248");
6999         h248_tpkt_handle = find_dissector("h248.tpkt");
7000         dissector_add_uint("mtp3.service_indicator", MTP_SI_GCP, h248_handle);
7001         h248_term_handle = find_dissector("h248term");
7002         initialized = TRUE;
7003     } else {
7004         if (udp_port != 0)
7005             dissector_delete_uint("udp.port", udp_port, h248_handle);
7006
7007         if (tcp_port != 0)
7008             dissector_delete_uint("tcp.port", tcp_port, h248_tpkt_handle);
7009     }
7010
7011     udp_port = global_udp_port;
7012     tcp_port = global_tcp_port;
7013
7014     if (udp_port != 0) {
7015         dissector_add_uint("udp.port", udp_port, h248_handle);
7016     }
7017
7018     if (tcp_port != 0) {
7019         dissector_add_uint("tcp.port", tcp_port, h248_tpkt_handle);
7020     }
7021 }
7022