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