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