151a36af4025751768dab2f0dbd5abae704dd3db
[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 -D . -O ../../epan/dissectors h248v3.asn h248v1support.asn */
5
6 /* Input file: packet-h248-template.c */
7
8 #line 1 "../../asn1/h248/packet-h248-template.c"
9 /* packet-h248.c
10  * Routines for H.248/MEGACO packet dissection
11  *
12  * Ronnie Sahlberg 2004
13  *
14  * Luis Ontanon 2005 - Context and Transaction Tracing
15  *
16  * $Id$
17  *
18  * Wireshark - Network traffic analyzer
19  * By Gerald Combs <gerald@wireshark.org>
20  * Copyright 1998 Gerald Combs
21  *
22  * This program is free software; you can redistribute it and/or
23  * modify it under the terms of the GNU General Public License
24  * as published by the Free Software Foundation; either version 2
25  * of the License, or (at your option) any later version.
26  *
27  * This program is distributed in the hope that it will be useful,
28  * but WITHOUT ANY WARRANTY; without even the implied warranty of
29  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
30  * GNU General Public License for more details.
31  *
32  * You should have received a copy of the GNU General Public License
33  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
34  */
35
36 #ifdef HAVE_CONFIG_H
37 # include "config.h"
38 #endif
39
40 #include "packet-h248.h"
41 #include <epan/tap.h>
42 #include "packet-tpkt.h"
43 #include <ctype.h>
44
45 #define PNAME  "H.248 MEGACO"
46 #define PSNAME "H248"
47 #define PFNAME "h248"
48
49 #define GATEWAY_CONTROL_PROTOCOL_USER_ID 14
50
51
52 /* Initialize the protocol and registered fields */
53 static int proto_h248                   = -1;
54 static int hf_h248_mtpaddress_ni        = -1;
55 static int hf_h248_mtpaddress_pc        = -1;
56 static int hf_h248_pkg_name             = -1;
57 static int hf_248_pkg_param             = -1;
58 static int hf_h248_event_name           = -1;
59 static int hf_h248_signal_name          = -1;
60 static int hf_h248_signal_code          = -1;
61 static int hf_h248_event_code           = -1;
62 static int hf_h248_pkg_bcp_BNCChar_PDU  = -1;
63
64
65
66 static int hf_h248_context_id = -1;
67 static int hf_h248_error_code = -1;
68 static int hf_h248_term_wild_type = -1;
69 static int hf_h248_term_wild_level = -1;
70 static int hf_h248_term_wild_position = -1;
71
72 static int hf_h248_no_pkg = -1;
73 static int hf_h248_no_sig = -1;
74 static int hf_h248_no_evt = -1;
75 static int hf_h248_param = -1;
76
77 static int hf_h248_serviceChangeReasonStr = -1;
78
79 /* h248v1 support */
80 static int hf_h248_auditValueReplyV1 = -1;
81
82
83 /*--- Included file: packet-h248-hf.c ---*/
84 #line 1 "../../asn1/h248/packet-h248-hf.c"
85 static int hf_h248_authHeader = -1;               /* AuthenticationHeader */
86 static int hf_h248_mess = -1;                     /* Message */
87 static int hf_h248_secParmIndex = -1;             /* SecurityParmIndex */
88 static int hf_h248_seqNum = -1;                   /* SequenceNum */
89 static int hf_h248_ad = -1;                       /* AuthData */
90 static int hf_h248_version = -1;                  /* T_version */
91 static int hf_h248_mId = -1;                      /* MId */
92 static int hf_h248_messageBody = -1;              /* T_messageBody */
93 static int hf_h248_messageError = -1;             /* ErrorDescriptor */
94 static int hf_h248_transactions = -1;             /* SEQUENCE_OF_Transaction */
95 static int hf_h248_transactions_item = -1;        /* Transaction */
96 static int hf_h248_ip4Address = -1;               /* IP4Address */
97 static int hf_h248_ip6Address = -1;               /* IP6Address */
98 static int hf_h248_domainName = -1;               /* DomainName */
99 static int hf_h248_deviceName = -1;               /* PathName */
100 static int hf_h248_mtpAddress = -1;               /* MtpAddress */
101 static int hf_h248_domName = -1;                  /* IA5String */
102 static int hf_h248_portNumber = -1;               /* INTEGER_0_65535 */
103 static int hf_h248_iP4Address = -1;               /* OCTET_STRING_SIZE_4 */
104 static int hf_h248_iP6Address = -1;               /* OCTET_STRING_SIZE_16 */
105 static int hf_h248_transactionRequest = -1;       /* TransactionRequest */
106 static int hf_h248_transactionPending = -1;       /* TransactionPending */
107 static int hf_h248_transactionReply = -1;         /* TransactionReply */
108 static int hf_h248_transactionResponseAck = -1;   /* TransactionResponseAck */
109 static int hf_h248_segmentReply = -1;             /* SegmentReply */
110 static int hf_h248_transactionId = -1;            /* T_transactionId */
111 static int hf_h248_actions = -1;                  /* SEQUENCE_OF_ActionRequest */
112 static int hf_h248_actions_item = -1;             /* ActionRequest */
113 static int hf_h248_tpend_transactionId = -1;      /* T_tpend_transactionId */
114 static int hf_h248_trep_transactionId = -1;       /* T_trep_transactionId */
115 static int hf_h248_immAckRequired = -1;           /* NULL */
116 static int hf_h248_transactionResult = -1;        /* T_transactionResult */
117 static int hf_h248_transactionError = -1;         /* ErrorDescriptor */
118 static int hf_h248_actionReplies = -1;            /* SEQUENCE_OF_ActionReply */
119 static int hf_h248_actionReplies_item = -1;       /* ActionReply */
120 static int hf_h248_segmentNumber = -1;            /* SegmentNumber */
121 static int hf_h248_segmentationComplete = -1;     /* NULL */
122 static int hf_h248_seg_rep_transactionId = -1;    /* T_seg_rep_transactionId */
123 static int hf_h248_TransactionResponseAck_item = -1;  /* TransactionAck */
124 static int hf_h248_firstAck = -1;                 /* TransactionId */
125 static int hf_h248_lastAck = -1;                  /* TransactionId */
126 static int hf_h248_errorCode = -1;                /* T_errorCode */
127 static int hf_h248_errorText = -1;                /* ErrorText */
128 static int hf_h248_contextId = -1;                /* ContextId */
129 static int hf_h248_contextRequest = -1;           /* ContextRequest */
130 static int hf_h248_contextAttrAuditReq = -1;      /* T_contextAttrAuditReq */
131 static int hf_h248_commandRequests = -1;          /* SEQUENCE_OF_CommandRequest */
132 static int hf_h248_commandRequests_item = -1;     /* CommandRequest */
133 static int hf_h248_errorDescriptor = -1;          /* ErrorDescriptor */
134 static int hf_h248_contextReply = -1;             /* ContextRequest */
135 static int hf_h248_commandReply = -1;             /* SEQUENCE_OF_CommandReply */
136 static int hf_h248_commandReply_item = -1;        /* CommandReply */
137 static int hf_h248_priority = -1;                 /* INTEGER_0_15 */
138 static int hf_h248_emergency = -1;                /* BOOLEAN */
139 static int hf_h248_topologyReq = -1;              /* T_topologyReq */
140 static int hf_h248_topologyReq_item = -1;         /* TopologyRequest */
141 static int hf_h248_iepscallind_BOOL = -1;         /* Iepscallind_BOOL */
142 static int hf_h248_contextProp = -1;              /* SEQUENCE_OF_PropertyParm */
143 static int hf_h248_contextProp_item = -1;         /* PropertyParm */
144 static int hf_h248_contextList = -1;              /* SEQUENCE_OF_ContextIDinList */
145 static int hf_h248_contextList_item = -1;         /* ContextIDinList */
146 static int hf_h248_topology = -1;                 /* NULL */
147 static int hf_h248_cAAREmergency = -1;            /* NULL */
148 static int hf_h248_cAARPriority = -1;             /* NULL */
149 static int hf_h248_iepscallind = -1;              /* NULL */
150 static int hf_h248_contextPropAud = -1;           /* SEQUENCE_OF_IndAudPropertyParm */
151 static int hf_h248_contextPropAud_item = -1;      /* IndAudPropertyParm */
152 static int hf_h248_selectpriority = -1;           /* INTEGER_0_15 */
153 static int hf_h248_selectemergency = -1;          /* BOOLEAN */
154 static int hf_h248_selectiepscallind = -1;        /* BOOLEAN */
155 static int hf_h248_selectLogic = -1;              /* SelectLogic */
156 static int hf_h248_andAUDITSelect = -1;           /* NULL */
157 static int hf_h248_orAUDITSelect = -1;            /* NULL */
158 static int hf_h248_command = -1;                  /* Command */
159 static int hf_h248_optional = -1;                 /* NULL */
160 static int hf_h248_wildcardReturn = -1;           /* NULL */
161 static int hf_h248_addReq = -1;                   /* T_addReq */
162 static int hf_h248_moveReq = -1;                  /* T_moveReq */
163 static int hf_h248_modReq = -1;                   /* T_modReq */
164 static int hf_h248_subtractReq = -1;              /* T_subtractReq */
165 static int hf_h248_auditCapRequest = -1;          /* T_auditCapRequest */
166 static int hf_h248_auditValueRequest = -1;        /* T_auditValueRequest */
167 static int hf_h248_notifyReq = -1;                /* T_notifyReq */
168 static int hf_h248_serviceChangeReq = -1;         /* ServiceChangeRequest */
169 static int hf_h248_addReply = -1;                 /* T_addReply */
170 static int hf_h248_moveReply = -1;                /* T_moveReply */
171 static int hf_h248_modReply = -1;                 /* T_modReply */
172 static int hf_h248_subtractReply = -1;            /* T_subtractReply */
173 static int hf_h248_auditCapReply = -1;            /* T_auditCapReply */
174 static int hf_h248_auditValueReply = -1;          /* T_auditValueReply */
175 static int hf_h248_notifyReply = -1;              /* T_notifyReply */
176 static int hf_h248_serviceChangeReply = -1;       /* ServiceChangeReply */
177 static int hf_h248_terminationFrom = -1;          /* TerminationID */
178 static int hf_h248_terminationTo = -1;            /* TerminationID */
179 static int hf_h248_topologyDirection = -1;        /* T_topologyDirection */
180 static int hf_h248_streamID = -1;                 /* StreamID */
181 static int hf_h248_topologyDirectionExtension = -1;  /* T_topologyDirectionExtension */
182 static int hf_h248_terminationIDList = -1;        /* TerminationIDList */
183 static int hf_h248_descriptors = -1;              /* SEQUENCE_OF_AmmDescriptor */
184 static int hf_h248_descriptors_item = -1;         /* AmmDescriptor */
185 static int hf_h248_mediaDescriptor = -1;          /* MediaDescriptor */
186 static int hf_h248_modemDescriptor = -1;          /* ModemDescriptor */
187 static int hf_h248_muxDescriptor = -1;            /* MuxDescriptor */
188 static int hf_h248_eventsDescriptor = -1;         /* EventsDescriptor */
189 static int hf_h248_eventBufferDescriptor = -1;    /* EventBufferDescriptor */
190 static int hf_h248_signalsDescriptor = -1;        /* SignalsDescriptor */
191 static int hf_h248_digitMapDescriptor = -1;       /* DigitMapDescriptor */
192 static int hf_h248_auditDescriptor = -1;          /* AuditDescriptor */
193 static int hf_h248_statisticsDescriptor = -1;     /* StatisticsDescriptor */
194 static int hf_h248_terminationAudit = -1;         /* TerminationAudit */
195 static int hf_h248_terminationID = -1;            /* TerminationID */
196 static int hf_h248_contextAuditResult = -1;       /* TerminationIDList */
197 static int hf_h248_error = -1;                    /* ErrorDescriptor */
198 static int hf_h248_auditResult = -1;              /* AuditResult */
199 static int hf_h248_auditResultTermList = -1;      /* TermListAuditResult */
200 static int hf_h248_terminationAuditResult = -1;   /* TerminationAudit */
201 static int hf_h248_TerminationAudit_item = -1;    /* AuditReturnParameter */
202 static int hf_h248_observedEventsDescriptor = -1;  /* ObservedEventsDescriptor */
203 static int hf_h248_packagesDescriptor = -1;       /* PackagesDescriptor */
204 static int hf_h248_emptyDescriptors = -1;         /* AuditDescriptor */
205 static int hf_h248_auditToken = -1;               /* T_auditToken */
206 static int hf_h248_auditPropertyToken = -1;       /* SEQUENCE_OF_IndAuditParameter */
207 static int hf_h248_auditPropertyToken_item = -1;  /* IndAuditParameter */
208 static int hf_h248_indaudmediaDescriptor = -1;    /* IndAudMediaDescriptor */
209 static int hf_h248_indaudeventsDescriptor = -1;   /* IndAudEventsDescriptor */
210 static int hf_h248_indaudeventBufferDescriptor = -1;  /* IndAudEventBufferDescriptor */
211 static int hf_h248_indaudsignalsDescriptor = -1;  /* IndAudSignalsDescriptor */
212 static int hf_h248_indauddigitMapDescriptor = -1;  /* IndAudDigitMapDescriptor */
213 static int hf_h248_indaudstatisticsDescriptor = -1;  /* IndAudStatisticsDescriptor */
214 static int hf_h248_indaudpackagesDescriptor = -1;  /* IndAudPackagesDescriptor */
215 static int hf_h248_indAudTerminationStateDescriptor = -1;  /* IndAudTerminationStateDescriptor */
216 static int hf_h248_indAudMediaDescriptorStreams = -1;  /* IndAudMediaDescriptorStreams */
217 static int hf_h248_oneStream = -1;                /* IndAudStreamParms */
218 static int hf_h248_multiStream = -1;              /* SEQUENCE_OF_IndAudStreamDescriptor */
219 static int hf_h248_multiStream_item = -1;         /* IndAudStreamDescriptor */
220 static int hf_h248_indAudStreamParms = -1;        /* IndAudStreamParms */
221 static int hf_h248_iASPLocalControlDescriptor = -1;  /* IndAudLocalControlDescriptor */
222 static int hf_h248_iASPLocalDescriptor = -1;      /* IndAudLocalRemoteDescriptor */
223 static int hf_h248_iASPRemoteDescriptor = -1;     /* IndAudLocalRemoteDescriptor */
224 static int hf_h248_statisticsDescriptor_01 = -1;  /* IndAudStatisticsDescriptor */
225 static int hf_h248_iALCDStreamMode = -1;          /* NULL */
226 static int hf_h248_iALCDReserveValue = -1;        /* NULL */
227 static int hf_h248_iALCDReserveGroup = -1;        /* NULL */
228 static int hf_h248_indAudPropertyParms = -1;      /* SEQUENCE_OF_IndAudPropertyParm */
229 static int hf_h248_indAudPropertyParms_item = -1;  /* IndAudPropertyParm */
230 static int hf_h248_streamModeSel = -1;            /* StreamMode */
231 static int hf_h248_name = -1;                     /* PkgdName */
232 static int hf_h248_propertyParms = -1;            /* PropertyParm */
233 static int hf_h248_propGroupID = -1;              /* INTEGER_0_65535 */
234 static int hf_h248_iAPropertyGroup = -1;          /* IndAudPropertyGroup */
235 static int hf_h248_IndAudPropertyGroup_item = -1;  /* IndAudPropertyParm */
236 static int hf_h248_eventBufferControl = -1;       /* NULL */
237 static int hf_h248_iATSDServiceState = -1;        /* NULL */
238 static int hf_h248_serviceStateSel = -1;          /* ServiceState */
239 static int hf_h248_requestID = -1;                /* RequestID */
240 static int hf_h248_iAEDPkgdName = -1;             /* PkgdName */
241 static int hf_h248_iAEBDEventName = -1;           /* PkgdName */
242 static int hf_h248_indAudSignal = -1;             /* IndAudSignal */
243 static int hf_h248_indAudSeqSigList = -1;         /* IndAudSeqSigList */
244 static int hf_h248_id = -1;                       /* INTEGER_0_65535 */
245 static int hf_h248_iASignalList = -1;             /* IndAudSignal */
246 static int hf_h248_iASignalName = -1;             /* PkgdName */
247 static int hf_h248_signalRequestID = -1;          /* RequestID */
248 static int hf_h248_digitMapName = -1;             /* DigitMapName */
249 static int hf_h248_iAStatName = -1;               /* PkgdName */
250 static int hf_h248_packageName = -1;              /* Name */
251 static int hf_h248_packageVersion = -1;           /* INTEGER_0_99 */
252 static int hf_h248_requestId = -1;                /* RequestID */
253 static int hf_h248_observedEventLst = -1;         /* SEQUENCE_OF_ObservedEvent */
254 static int hf_h248_observedEventLst_item = -1;    /* ObservedEvent */
255 static int hf_h248_eventName = -1;                /* EventName */
256 static int hf_h248_eventParList = -1;             /* SEQUENCE_OF_EventParameter */
257 static int hf_h248_eventParList_item = -1;        /* EventParameter */
258 static int hf_h248_timeNotation = -1;             /* TimeNotation */
259 static int hf_h248_eventParameterName = -1;       /* EventParameterName */
260 static int hf_h248_eventParamValue = -1;          /* EventParamValues */
261 static int hf_h248_eventPar_extraInfo = -1;       /* EventPar_extraInfo */
262 static int hf_h248_relation = -1;                 /* Relation */
263 static int hf_h248_range = -1;                    /* BOOLEAN */
264 static int hf_h248_sublist = -1;                  /* BOOLEAN */
265 static int hf_h248_EventParamValues_item = -1;    /* EventParamValue */
266 static int hf_h248_serviceChangeParms = -1;       /* ServiceChangeParm */
267 static int hf_h248_serviceChangeResult = -1;      /* ServiceChangeResult */
268 static int hf_h248_serviceChangeResParms = -1;    /* ServiceChangeResParm */
269 static int hf_h248_wildcard = -1;                 /* SEQUENCE_OF_WildcardField */
270 static int hf_h248_wildcard_item = -1;            /* WildcardField */
271 static int hf_h248_terminationId = -1;            /* T_terminationId */
272 static int hf_h248_TerminationIDList_item = -1;   /* TerminationID */
273 static int hf_h248_termStateDescr = -1;           /* TerminationStateDescriptor */
274 static int hf_h248_streams = -1;                  /* T_streams */
275 static int hf_h248_mediaDescriptorOneStream = -1;  /* StreamParms */
276 static int hf_h248_mediaDescriptorMultiStream = -1;  /* SEQUENCE_OF_StreamDescriptor */
277 static int hf_h248_mediaDescriptorMultiStream_item = -1;  /* StreamDescriptor */
278 static int hf_h248_streamParms = -1;              /* StreamParms */
279 static int hf_h248_localControlDescriptor = -1;   /* LocalControlDescriptor */
280 static int hf_h248_localDescriptor = -1;          /* LocalRemoteDescriptor */
281 static int hf_h248_remoteDescriptor = -1;         /* LocalRemoteDescriptor */
282 static int hf_h248_streamMode = -1;               /* StreamMode */
283 static int hf_h248_reserveValue = -1;             /* BOOLEAN */
284 static int hf_h248_reserveGroup = -1;             /* BOOLEAN */
285 static int hf_h248_propertyParms_01 = -1;         /* SEQUENCE_OF_PropertyParm */
286 static int hf_h248_propertyParms_item = -1;       /* PropertyParm */
287 static int hf_h248_propertyName = -1;             /* PropertyName */
288 static int hf_h248_propertyParamValue = -1;       /* SEQUENCE_OF_PropertyID */
289 static int hf_h248_propertyParamValue_item = -1;  /* PropertyID */
290 static int hf_h248_propParm_extraInfo = -1;       /* PropParm_extraInfo */
291 static int hf_h248_propGrps = -1;                 /* SEQUENCE_OF_PropertyGroup */
292 static int hf_h248_propGrps_item = -1;            /* PropertyGroup */
293 static int hf_h248_PropertyGroup_item = -1;       /* PropertyParm */
294 static int hf_h248_tSEventBufferControl = -1;     /* EventBufferControl */
295 static int hf_h248_serviceState = -1;             /* ServiceState */
296 static int hf_h248_muxType = -1;                  /* MuxType */
297 static int hf_h248_termList = -1;                 /* SEQUENCE_OF_TerminationID */
298 static int hf_h248_termList_item = -1;            /* TerminationID */
299 static int hf_h248_nonStandardData = -1;          /* NonStandardData */
300 static int hf_h248_eventList = -1;                /* SEQUENCE_OF_RequestedEvent */
301 static int hf_h248_eventList_item = -1;           /* RequestedEvent */
302 static int hf_h248_eventAction = -1;              /* RequestedActions */
303 static int hf_h248_evParList = -1;                /* SEQUENCE_OF_EventParameter */
304 static int hf_h248_evParList_item = -1;           /* EventParameter */
305 static int hf_h248_secondEvent = -1;              /* SecondEventsDescriptor */
306 static int hf_h248_notifyImmediate = -1;          /* NULL */
307 static int hf_h248_notifyRegulated = -1;          /* RegulatedEmbeddedDescriptor */
308 static int hf_h248_neverNotify = -1;              /* NULL */
309 static int hf_h248_keepActive = -1;               /* BOOLEAN */
310 static int hf_h248_eventDM = -1;                  /* EventDM */
311 static int hf_h248_notifyBehaviour = -1;          /* NotifyBehaviour */
312 static int hf_h248_resetEventsDescriptor = -1;    /* NULL */
313 static int hf_h248_digitMapValue = -1;            /* DigitMapValue */
314 static int hf_h248_secondaryEventList = -1;       /* SEQUENCE_OF_SecondRequestedEvent */
315 static int hf_h248_secondaryEventList_item = -1;  /* SecondRequestedEvent */
316 static int hf_h248_pkgdName = -1;                 /* PkgdName */
317 static int hf_h248_secondaryEventAction = -1;     /* SecondRequestedActions */
318 static int hf_h248_EventBufferDescriptor_item = -1;  /* EventSpec */
319 static int hf_h248_SignalsDescriptor_item = -1;   /* SignalRequest */
320 static int hf_h248_signal = -1;                   /* Signal */
321 static int hf_h248_seqSigList = -1;               /* SeqSigList */
322 static int hf_h248_signalList = -1;               /* SEQUENCE_OF_Signal */
323 static int hf_h248_signalList_item = -1;          /* Signal */
324 static int hf_h248_signalName = -1;               /* SignalName */
325 static int hf_h248_sigType = -1;                  /* SignalType */
326 static int hf_h248_duration = -1;                 /* INTEGER_0_65535 */
327 static int hf_h248_notifyCompletion = -1;         /* NotifyCompletion */
328 static int hf_h248_sigParList = -1;               /* SEQUENCE_OF_SigParameter */
329 static int hf_h248_sigParList_item = -1;          /* SigParameter */
330 static int hf_h248_direction = -1;                /* SignalDirection */
331 static int hf_h248_intersigDelay = -1;            /* INTEGER_0_65535 */
332 static int hf_h248_sigParameterName = -1;         /* SigParameterName */
333 static int hf_h248_value = -1;                    /* SigParamValues */
334 static int hf_h248_extraInfo = -1;                /* T_extraInfo */
335 static int hf_h248_SigParamValues_item = -1;      /* SigParamValue */
336 static int hf_h248_mtl = -1;                      /* SEQUENCE_OF_ModemType */
337 static int hf_h248_mtl_item = -1;                 /* ModemType */
338 static int hf_h248_mpl = -1;                      /* SEQUENCE_OF_PropertyParm */
339 static int hf_h248_mpl_item = -1;                 /* PropertyParm */
340 static int hf_h248_startTimer = -1;               /* INTEGER_0_99 */
341 static int hf_h248_shortTimer = -1;               /* INTEGER_0_99 */
342 static int hf_h248_longTimer = -1;                /* INTEGER_0_99 */
343 static int hf_h248_digitMapBody = -1;             /* IA5String */
344 static int hf_h248_durationTimer = -1;            /* INTEGER_0_99 */
345 static int hf_h248_serviceChangeMethod = -1;      /* ServiceChangeMethod */
346 static int hf_h248_serviceChangeAddress = -1;     /* ServiceChangeAddress */
347 static int hf_h248_serviceChangeVersion = -1;     /* INTEGER_0_99 */
348 static int hf_h248_serviceChangeProfile = -1;     /* ServiceChangeProfile */
349 static int hf_h248_serviceChangeReason = -1;      /* SCreasonValue */
350 static int hf_h248_serviceChangeDelay = -1;       /* INTEGER_0_4294967295 */
351 static int hf_h248_serviceChangeMgcId = -1;       /* MId */
352 static int hf_h248_timeStamp = -1;                /* TimeNotation */
353 static int hf_h248_serviceChangeInfo = -1;        /* AuditDescriptor */
354 static int hf_h248_serviceChangeIncompleteFlag = -1;  /* NULL */
355 static int hf_h248_SCreasonValue_item = -1;       /* SCreasonValueOctetStr */
356 static int hf_h248_timestamp = -1;                /* TimeNotation */
357 static int hf_h248_profileName = -1;              /* IA5String_SIZE_1_67 */
358 static int hf_h248_PackagesDescriptor_item = -1;  /* PackagesItem */
359 static int hf_h248_StatisticsDescriptor_item = -1;  /* StatisticsParameter */
360 static int hf_h248_statName = -1;                 /* StatName */
361 static int hf_h248_statValue = -1;                /* StatValue */
362 static int hf_h248_nonStandardIdentifier = -1;    /* NonStandardIdentifier */
363 static int hf_h248_data = -1;                     /* OCTET_STRING */
364 static int hf_h248_object = -1;                   /* OBJECT_IDENTIFIER */
365 static int hf_h248_h221NonStandard = -1;          /* H221NonStandard */
366 static int hf_h248_experimental = -1;             /* IA5String_SIZE_8 */
367 static int hf_h248_t35CountryCode1 = -1;          /* INTEGER_0_255 */
368 static int hf_h248_t35CountryCode2 = -1;          /* INTEGER_0_255 */
369 static int hf_h248_t35Extension = -1;             /* INTEGER_0_255 */
370 static int hf_h248_manufacturerCode = -1;         /* INTEGER_0_65535 */
371 static int hf_h248_date = -1;                     /* IA5String_SIZE_8 */
372 static int hf_h248_time = -1;                     /* IA5String_SIZE_8 */
373 static int hf_h248_Value_item = -1;               /* OCTET_STRING */
374 static int hf_h248_auditResult_01 = -1;           /* AuditResultV1 */
375 static int hf_h248_contectAuditResult = -1;       /* TerminationID */
376 static int hf_h248_eventParamterName = -1;        /* Name */
377 static int hf_h248_value_01 = -1;                 /* ValueV1 */
378 static int hf_h248_value_02 = -1;                 /* T_value */
379 static int hf_h248_value_item = -1;               /* OCTET_STRING */
380 static int hf_h248_extraInfo_01 = -1;             /* T_extraInfo_01 */
381 static int hf_h248_sigParameterName_01 = -1;      /* Name */
382 /* named bits */
383 static int hf_h248_T_auditToken_muxToken = -1;
384 static int hf_h248_T_auditToken_modemToken = -1;
385 static int hf_h248_T_auditToken_mediaToken = -1;
386 static int hf_h248_T_auditToken_eventsToken = -1;
387 static int hf_h248_T_auditToken_signalsToken = -1;
388 static int hf_h248_T_auditToken_digitMapToken = -1;
389 static int hf_h248_T_auditToken_statsToken = -1;
390 static int hf_h248_T_auditToken_observedEventsToken = -1;
391 static int hf_h248_T_auditToken_packagesToken = -1;
392 static int hf_h248_T_auditToken_eventBufferToken = -1;
393 static int hf_h248_NotifyCompletion_onTimeOut = -1;
394 static int hf_h248_NotifyCompletion_onInterruptByEvent = -1;
395 static int hf_h248_NotifyCompletion_onInterruptByNewSignalDescr = -1;
396 static int hf_h248_NotifyCompletion_otherReason = -1;
397 static int hf_h248_NotifyCompletion_onIteration = -1;
398
399 /*--- End of included file: packet-h248-hf.c ---*/
400 #line 75 "../../asn1/h248/packet-h248-template.c"
401
402 /* Initialize the subtree pointers */
403 static gint ett_h248 = -1;
404 static gint ett_mtpaddress = -1;
405 static gint ett_packagename = -1;
406 static gint ett_codec = -1;
407 static gint ett_wildcard = -1;
408
409 static gint ett_h248_no_pkg = -1;
410 static gint ett_h248_no_sig = -1;
411 static gint ett_h248_no_evt = -1;
412
413 static int h248_tap = -1;
414
415 static gcp_hf_ett_t h248_arrel = {{-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1}};
416
417
418 /*--- Included file: packet-h248-ett.c ---*/
419 #line 1 "../../asn1/h248/packet-h248-ett.c"
420 static gint ett_h248_MegacoMessage = -1;
421 static gint ett_h248_AuthenticationHeader = -1;
422 static gint ett_h248_Message = -1;
423 static gint ett_h248_T_messageBody = -1;
424 static gint ett_h248_SEQUENCE_OF_Transaction = -1;
425 static gint ett_h248_MId = -1;
426 static gint ett_h248_DomainName = -1;
427 static gint ett_h248_IP4Address = -1;
428 static gint ett_h248_IP6Address = -1;
429 static gint ett_h248_Transaction = -1;
430 static gint ett_h248_TransactionRequest = -1;
431 static gint ett_h248_SEQUENCE_OF_ActionRequest = -1;
432 static gint ett_h248_TransactionPending = -1;
433 static gint ett_h248_TransactionReply = -1;
434 static gint ett_h248_T_transactionResult = -1;
435 static gint ett_h248_SEQUENCE_OF_ActionReply = -1;
436 static gint ett_h248_SegmentReply = -1;
437 static gint ett_h248_TransactionResponseAck = -1;
438 static gint ett_h248_TransactionAck = -1;
439 static gint ett_h248_ErrorDescriptor = -1;
440 static gint ett_h248_ActionRequest = -1;
441 static gint ett_h248_SEQUENCE_OF_CommandRequest = -1;
442 static gint ett_h248_ActionReply = -1;
443 static gint ett_h248_SEQUENCE_OF_CommandReply = -1;
444 static gint ett_h248_ContextRequest = -1;
445 static gint ett_h248_T_topologyReq = -1;
446 static gint ett_h248_SEQUENCE_OF_PropertyParm = -1;
447 static gint ett_h248_SEQUENCE_OF_ContextIDinList = -1;
448 static gint ett_h248_ContextAttrAuditRequest = -1;
449 static gint ett_h248_SEQUENCE_OF_IndAudPropertyParm = -1;
450 static gint ett_h248_SelectLogic = -1;
451 static gint ett_h248_CommandRequest = -1;
452 static gint ett_h248_Command = -1;
453 static gint ett_h248_CommandReply = -1;
454 static gint ett_h248_TopologyRequest = -1;
455 static gint ett_h248_AmmRequest = -1;
456 static gint ett_h248_SEQUENCE_OF_AmmDescriptor = -1;
457 static gint ett_h248_AmmDescriptor = -1;
458 static gint ett_h248_AmmsReply = -1;
459 static gint ett_h248_SubtractRequest = -1;
460 static gint ett_h248_AuditRequest = -1;
461 static gint ett_h248_AuditReply = -1;
462 static gint ett_h248_AuditResult = -1;
463 static gint ett_h248_TermListAuditResult = -1;
464 static gint ett_h248_TerminationAudit = -1;
465 static gint ett_h248_AuditReturnParameter = -1;
466 static gint ett_h248_AuditDescriptor = -1;
467 static gint ett_h248_T_auditToken = -1;
468 static gint ett_h248_SEQUENCE_OF_IndAuditParameter = -1;
469 static gint ett_h248_IndAuditParameter = -1;
470 static gint ett_h248_IndAudMediaDescriptor = -1;
471 static gint ett_h248_IndAudMediaDescriptorStreams = -1;
472 static gint ett_h248_SEQUENCE_OF_IndAudStreamDescriptor = -1;
473 static gint ett_h248_IndAudStreamDescriptor = -1;
474 static gint ett_h248_IndAudStreamParms = -1;
475 static gint ett_h248_IndAudLocalControlDescriptor = -1;
476 static gint ett_h248_IndAudPropertyParm = -1;
477 static gint ett_h248_IndAudLocalRemoteDescriptor = -1;
478 static gint ett_h248_IndAudPropertyGroup = -1;
479 static gint ett_h248_IndAudTerminationStateDescriptor = -1;
480 static gint ett_h248_IndAudEventsDescriptor = -1;
481 static gint ett_h248_IndAudEventBufferDescriptor = -1;
482 static gint ett_h248_IndAudSignalsDescriptor = -1;
483 static gint ett_h248_IndAudSeqSigList = -1;
484 static gint ett_h248_IndAudSignal = -1;
485 static gint ett_h248_IndAudDigitMapDescriptor = -1;
486 static gint ett_h248_IndAudStatisticsDescriptor = -1;
487 static gint ett_h248_IndAudPackagesDescriptor = -1;
488 static gint ett_h248_NotifyRequest = -1;
489 static gint ett_h248_NotifyReply = -1;
490 static gint ett_h248_ObservedEventsDescriptor = -1;
491 static gint ett_h248_SEQUENCE_OF_ObservedEvent = -1;
492 static gint ett_h248_ObservedEvent = -1;
493 static gint ett_h248_SEQUENCE_OF_EventParameter = -1;
494 static gint ett_h248_EventParameter = -1;
495 static gint ett_h248_EventPar_extraInfo = -1;
496 static gint ett_h248_EventParamValues = -1;
497 static gint ett_h248_ServiceChangeRequest = -1;
498 static gint ett_h248_ServiceChangeReply = -1;
499 static gint ett_h248_ServiceChangeResult = -1;
500 static gint ett_h248_TerminationID = -1;
501 static gint ett_h248_SEQUENCE_OF_WildcardField = -1;
502 static gint ett_h248_TerminationIDList = -1;
503 static gint ett_h248_MediaDescriptor = -1;
504 static gint ett_h248_T_streams = -1;
505 static gint ett_h248_SEQUENCE_OF_StreamDescriptor = -1;
506 static gint ett_h248_StreamDescriptor = -1;
507 static gint ett_h248_StreamParms = -1;
508 static gint ett_h248_LocalControlDescriptor = -1;
509 static gint ett_h248_PropertyParm = -1;
510 static gint ett_h248_SEQUENCE_OF_PropertyID = -1;
511 static gint ett_h248_PropParm_extraInfo = -1;
512 static gint ett_h248_LocalRemoteDescriptor = -1;
513 static gint ett_h248_SEQUENCE_OF_PropertyGroup = -1;
514 static gint ett_h248_PropertyGroup = -1;
515 static gint ett_h248_TerminationStateDescriptor = -1;
516 static gint ett_h248_MuxDescriptor = -1;
517 static gint ett_h248_SEQUENCE_OF_TerminationID = -1;
518 static gint ett_h248_EventsDescriptor = -1;
519 static gint ett_h248_SEQUENCE_OF_RequestedEvent = -1;
520 static gint ett_h248_RequestedEvent = -1;
521 static gint ett_h248_RegulatedEmbeddedDescriptor = -1;
522 static gint ett_h248_NotifyBehaviour = -1;
523 static gint ett_h248_RequestedActions = -1;
524 static gint ett_h248_EventDM = -1;
525 static gint ett_h248_SecondEventsDescriptor = -1;
526 static gint ett_h248_SEQUENCE_OF_SecondRequestedEvent = -1;
527 static gint ett_h248_SecondRequestedEvent = -1;
528 static gint ett_h248_SecondRequestedActions = -1;
529 static gint ett_h248_EventBufferDescriptor = -1;
530 static gint ett_h248_EventSpec = -1;
531 static gint ett_h248_SignalsDescriptor = -1;
532 static gint ett_h248_SignalRequest = -1;
533 static gint ett_h248_SeqSigList = -1;
534 static gint ett_h248_SEQUENCE_OF_Signal = -1;
535 static gint ett_h248_Signal = -1;
536 static gint ett_h248_SEQUENCE_OF_SigParameter = -1;
537 static gint ett_h248_NotifyCompletion = -1;
538 static gint ett_h248_SigParameter = -1;
539 static gint ett_h248_T_extraInfo = -1;
540 static gint ett_h248_SigParamValues = -1;
541 static gint ett_h248_ModemDescriptor = -1;
542 static gint ett_h248_SEQUENCE_OF_ModemType = -1;
543 static gint ett_h248_DigitMapDescriptor = -1;
544 static gint ett_h248_DigitMapValue = -1;
545 static gint ett_h248_ServiceChangeParm = -1;
546 static gint ett_h248_SCreasonValue = -1;
547 static gint ett_h248_ServiceChangeAddress = -1;
548 static gint ett_h248_ServiceChangeResParm = -1;
549 static gint ett_h248_ServiceChangeProfile = -1;
550 static gint ett_h248_PackagesDescriptor = -1;
551 static gint ett_h248_PackagesItem = -1;
552 static gint ett_h248_StatisticsDescriptor = -1;
553 static gint ett_h248_StatisticsParameter = -1;
554 static gint ett_h248_NonStandardData = -1;
555 static gint ett_h248_NonStandardIdentifier = -1;
556 static gint ett_h248_H221NonStandard = -1;
557 static gint ett_h248_TimeNotation = -1;
558 static gint ett_h248_Value = -1;
559 static gint ett_h248_AuditReplyV1 = -1;
560 static gint ett_h248_AuditResultV1 = -1;
561 static gint ett_h248_EventParameterV1 = -1;
562 static gint ett_h248_PropertyParmV1 = -1;
563 static gint ett_h248_T_value = -1;
564 static gint ett_h248_T_extraInfo_01 = -1;
565 static gint ett_h248_SigParameterV1 = -1;
566
567 /*--- End of included file: packet-h248-ett.c ---*/
568 #line 92 "../../asn1/h248/packet-h248-template.c"
569
570 static dissector_handle_t h248_term_handle;
571
572 static emem_tree_t* msgs = NULL;
573 static emem_tree_t* trxs = NULL;
574 static emem_tree_t* ctxs_by_trx = NULL;
575 static emem_tree_t* ctxs = NULL;
576
577 static gboolean keep_persistent_data = FALSE;
578 static guint    global_udp_port = 2945;
579 static guint    global_tcp_port = 2945;
580 static gboolean h248_desegment = TRUE;
581
582
583
584 static proto_tree *h248_tree;
585 static tvbuff_t* h248_tvb;
586
587 static dissector_handle_t h248_handle;
588 static dissector_handle_t h248_term_handle;
589 static dissector_handle_t h248_tpkt_handle;
590
591 /* Forward declarations */
592 static int dissect_h248_ServiceChangeReasonStr(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
593
594 /* h248v1 support */
595 static int dissect_h248_AuditReplyV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
596 static int dissect_h248_ValueV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
597 static int dissect_h248_EventParameterV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
598 static int dissect_h248_PropertyParmV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
599 static int dissect_h248_SigParameterV1(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
600
601 /* 2010-11-15: New entries added based on: http://www.iana.org/assignments/megaco-h248 last updated 2010-10-01 */
602 static const value_string package_name_vals[] = {
603     {   0x0000, "Media stream properties H.248.1 Annex C" },
604     {   0x0001, "Generic H.248.1 Annex E" },
605     {   0x0002, "root H.248.1 Annex E" },
606     {   0x0003, "tonegen H.248.1 Annex E" },
607     {   0x0004, "tonedet H.248.1 Annex E" },
608     {   0x0005, "dg H.248.1 Annex E" },
609     {   0x0006, "dd H.248.1 Annex E" },
610     {   0x0007, "cg H.248.1 Annex E" },
611     {   0x0008, "cd H.248.1 Annex E" },
612     {   0x0009, "al H.248.1 Annex E" },
613     {   0x000a, "ct H.248.1 Annex E" },
614     {   0x000b, "nt H.248.1 Annex E" },
615     {   0x000c, "rtp H.248.1 Annex E" },
616     {   0x000d, "tdmc H.248.1 Annex E" },
617     {   0x000e, "ftmd H.248.1 Annex E" },
618     {   0x000f, "txc H.248.2" },                                          /* H.248.2 */
619     {   0x0010, "txp H.248.2" },
620     {   0x0011, "ctyp H.248.2" },
621     {   0x0012, "fax H.248.2" },
622     {   0x0013, "ipfax H.248.2" },
623     {   0x0014, "dis H.248.3" },                                          /* H.248.3 */
624     {   0x0015, "key H.248.3" },
625     {   0x0016, "kp H.248.3" },
626     {   0x0017, "labelkey H.248.3" },
627     {   0x0018, "kf H.248.3" },
628     {   0x0019, "ind H.248.3" },
629     {   0x001a, "ks H.248.3" },
630     {   0x001b, "anci H.248.3" },
631     {   0x001c, "dtd H.248.6" },                                              /* H.248.6 */
632     {   0x001d, "an H.248.7" },                                               /* H.248.7 */
633     {   0x001e, "Bearer Characteristics Q.1950 Annex A" },                    /* Q.1950 Annex A */
634     {   0x001f, "Bearer Network Connection Cut Q.1950 Annex A" },
635     {   0x0020, "Reuse Idle Q.1950 Annex A" },
636     {   0x0021, "Generic Bearer Connection Q.1950 Annex A" },
637     {   0x0022, "Bearer Control Tunnelling Q.1950 Annex A" },
638     {   0x0023, "Basic Call Progress Tones Q.1950 Annex A" },
639     {   0x0024, "Expanded Call Progress Tones Q.1950 Annex A" },
640     {   0x0025, "Basic Services Tones Q.1950 Annex A" },
641     {   0x0026, "Expanded Services Tones Q.1950 Annex A" },
642     {   0x0027, "Intrusion Tones Q.1950 Annex A" },
643     {   0x0028, "Business Tones Q.1950 Annex A" },
644     {   0x0029, "Media Gateway Resource Congestion Handling H.248.10" },      /* H.248.10 */
645     {   0x002a, "H245 package H248.12" },                                     /* H.248.12 */
646     {   0x002b, "H323 bearer control package H.248.12" },                     /* H.248.12 */
647     {   0x002c, "H324 package H.248.12" },                                    /* H.248.12 */
648     {   0x002d, "H245 command package H.248.12" },                            /* H.248.12 */
649     {   0x002e, "H245 indication package H.248.12" },                         /* H.248.12 */
650     {   0x002f, "3G User Plane" },                                            /* 3GPP TS 29.232 v4.1.0 */
651     {   0x0030, "3G Circuit Switched Data" },
652     {   0x0031, "3G TFO Control" },
653     {   0x0032, "3G Expanded Call Progress Tones" },
654     {   0x0033, "Advanced Audio Server (AAS Base)" },                         /* H.248.9 */
655     {   0x0034, "AAS Digit Collection" },                                     /* H.248.9 */
656     {   0x0035, "AAS Recording" },                                            /* H.248.9 */
657     {   0x0036, "AAS Segment Management" },                                   /* H.248.9 */
658     {   0x0037, "Quality Alert Ceasing" },                                    /* H.248.13 */
659     {   0x0038, "Conferencing Tones Generation" },                            /* H.248.27 */
660     {   0x0039, "Diagnostic Tones Generation" },                              /* H.248.27 */
661     {   0x003a, "Carrier Tones Generation Package H.248.23" },                /* H.248.27 */
662     {   0x003b, "Enhanced Alerting Package H.248.23" },                       /* H.248.23 */
663     {   0x003c, "Analog Display Signalling Package H.248.23" },               /* H.248.23 */
664     {   0x003d, "Multi-Frequency Tone Generation Package H.248.24" },         /* H.248.24 */
665     {   0x003e, "H.248.23Multi-Frequency Tone Detection Package H.248.24" },  /* H.248.24 */
666     {   0x003f, "Basic CAS Package H.248.25" },                               /* H.248.25 */
667     {   0x0040, "Robbed Bit Signalling Package H.248.25" },                   /* H.248.25 */
668     {   0x0041, "Operator Services and Emergency Services Package H.248.25" },
669     {   0x0042, "Operator Services Extension Package H.248.25" },
670     {   0x0043, "Extended Analog Line Supervision Package H.248.26" },
671     {   0x0044, "Automatic Metering Package H.248.26" },
672     {   0x0045, "Inactivity Timer Package H.248.14" },
673     {   0x0046, "3G Modification of Link Characteristics Bearer Capability" }, /* 3GPP TS 29.232 v4.4.0 */
674     {   0x0047, "Base Announcement Syntax H.248.9" },
675     {   0x0048, "Voice Variable Syntax H.248.9" },
676     {   0x0049, "Announcement Set Syntax H.248.9" },
677     {   0x004a, "Phrase Variable Syntax H.248.9" },
678     {   0x004b, "Basic NAS package" },
679     {   0x004c, "NAS incoming package" },
680     {   0x004d, "NAS outgoing package" },
681     {   0x004e, "NAS control package" },
682     {   0x004f, "NAS root package" },
683     {   0x0050, "Profile Handling Package H.248.18" },
684     {   0x0051, "Media Gateway Overload Control Package H.248.11" },
685     {   0x0052, "Extended DTMF Detection Package H.248.16" },
686     {   0x0053, "Quiet Termination Line Test" },
687     {   0x0054, "Loopback Line Test Response" },                              /* H.248.17 */
688     {   0x0055, "ITU 404Hz Line Test" },                                      /* H.248.17 */
689     {   0x0056, "ITU 816Hz Line Test" },                                      /* H.248.17 */
690     {   0x0057, "ITU 1020Hz Line Test" },                                     /* H.248.17 */
691     {   0x0058, "ITU 2100Hz Disable Tone Line Test" },                        /* H.248.17 */
692     {   0x0059, "ITU 2100Hz Disable Echo Canceller Tone Line Test" },         /* H.248.17 */
693     {   0x005a, "ITU 2804Hz Tone Line Test" },                                /* H.248.17 */
694     {   0x005b, "ITU Noise Test Tone Line Test" },                            /* H.248.17 */
695     {   0x005c, "ITU Digital Pseudo Random Test Line Test" },                 /* H.248.17 */
696     {   0x005d, "ITU ATME No.2 Test Line Response" },                         /* H.248.17 */
697     {   0x005e, "ANSI 1004Hz Test Tone Line Test" },                          /* H.248.17 */
698     {   0x005f, "ANSI Test Responder Line Test" },                            /* H.248.17 */
699     {   0x0060, "ANSI 2225Hz Test Progress Tone Line Test" },                 /* H.248.17 */
700     {   0x0061, "ANSI Digital Test Signal Line Test" },                       /* H.248.17 */
701     {   0x0062, "ANSI Inverting Loopback Line Test Response" },               /* H.248.17 */
702     {   0x0063, "Extended H.324 Packages H.248.12 Annex A" },
703     {   0x0064, "Extended H.245 Command Package H.248.12 Annex A" },
704     {   0x0065, "Extended H.245 Indication Package H.248.12 Annex A" },
705     {   0x0066, "Enhanced DTMF Detection Package H.248.16" },
706     {   0x0067, "Connection Group Identity Package Q.1950 Annex E" },
707     {   0x0068, "CTM Text Transport 3GPP TS 29.232 v5.2.0" },
708     {   0x0069, "SPNE Control Package Q.115.0" },
709     {   0x006a, "Semi-permanent Connection Package H.248.21" },
710     {   0x006b, "Shared Risk Group Package H.248.22" },
711     {   0x006c, "isuptn Annex B of ITU-T Rec. J.171" },
712     {   0x006d, "Basic CAS Addressing Package H.248.25" },
713     {   0x006e, "Floor Control Package H.248.19" },
714     {   0x006f, "Indication of Being Viewed Package H.248.19" },
715     {   0x0070, "Volume Control Package H.248.19" },
716     {   0x0071, "UNASSIGNED" },
717     {   0x0072, "Volume Detection Package H.248.19" },
718     {   0x0073, "Volume Level Mixing Package H.248.19" },
719     {   0x0074, "Mixing Volume Level Control Package H.248.19" },
720     {   0x0075, "Voice Activated Video Switch Package H.248.19" },
721     {   0x0076, "Lecture Video Mode Package H.248.19" },
722     {   0x0077, "Contributing Video Source Package H.248.19" },
723     {   0x0078, "Video Window Package H.248.19" },
724     {   0x0079, "Tiled Window Package H.248.19" },
725     {   0x007a, "Adaptive Jitter Buffer Package H.248.31" },
726     {   0x007b, "International CAS Package H.248.28" },
727     {   0x007c, "CAS Blocking Package H.248.28" },
728     {   0x007d, "International CAS Compelled Package H.248.29" },
729     {   0x007e, "International CAS Compelled with Overlap Package H.248.29" },
730     {   0x007f, "International CAS Compelled with End-to-end Package H.248.29" },
731     {   0x0080, "RTCP XR Package H.248.30" },
732     {   0x0081, "RTCP XR Burst Metrics Package H.248.30" },
733     {   0x0082, "threegcsden 3G Circuit Switched Data" },                     /* 3GPP TS 29.232 v5.6.0 */
734     {   0x0083, "threegiptra 3G Circuit Switched Data" },                     /* 3GPP TS 29.232 v5.6.0 */
735     {   0x0084, "threegflex 3G Circuit Switched Data" },                      /* 3GPP TS 29.232 v5.6.0 */
736     {   0x0085, "H.248 PCMSB" },
737     {   0x008a, "TIPHON Extended H.248/MEGACO Package" },                     /* ETSI specification TS 101 3 */
738     {   0x008b, "Differentiated Services Package" },                          /* Annex A of ETSI TS 102 333 */
739     {   0x008c, "Gate Management Package" },                                  /* Annex B of ETSI TS 102 333 */
740     {   0x008d, "Traffic Management Package" },                               /* Annex C of ETSI TS 102 333 */
741     {   0x008e, "Gate Recovery Information Package" },                        /* Annex D of ETSI TS 102 333 */
742     {   0x008f, "NAT Traversal Package" },                                    /* Annex E of ETSI TS 102 333 */
743     {   0x0090, "MPLS Package" },                                             /* Annex F of ETSI TS 102 333 */
744     {   0x0091, "VLAN Package" },                                             /* Annex G of ETSI TS 102 333 */
745     {   0x0092, "Detailed Congestion Reporting Package" },                    /* H.248.32 */
746     {   0x0093, "Stimulus Analogue Lines Package" },                          /* H.248.34 */
747     {   0x0094, "icascgen" },                                                 /* H.248.29 Annex B */
748     {   0x0095, "Coin Operated Phone Control Package" },                      /* H.248.35 */
749     {   0x0096, "Metering Pulse Detection Package" },                         /* H.248.26 Amendment 1 */
750     {   0x0097, "Trace Package" },                                            /* 3GPP TS 29.232 v6.3.0 */
751     {   0x0098, "Hanging Termination Package" },                              /* H.248.36 */
752     {   0x0099, "IP NAPT Traversal Package" },                                /* H.248.37 */
753     {   0x009a, "Notification Behaviour Package" },                           /* H.248.1v3 */
754     {   0x009b, "Base Context Package" },                                     /* H.248.38 */
755     {   0x009c, "Application Data Inactivity Detection Package" },            /* H.248.40 */
756     {   0x009d, "Domain Connection Package " },                               /* H.248.41 */
757     {   0x009e, "Digital Circuit Multiplication Equipment Package" },         /* H.248.42 */
758     {   0x009f, "Multi-level Precedence and Pre-emption Package" },           /* H.248.44 */
759     {   0x00a0, "MGC Information Package" },                                  /* H.248.45 */
760     {   0x00a1, "Text Overlay Package" },                                     /* H.248.19 Amendment 1 */
761     {   0x00a2, "Border and Background Package" },                            /* H.248.19 Amendment 1 */
762     {   0x00a3, "Segmentation Package" },                                     /* H.248.1v3 */
763     {   0x00a4, "ETSI notification behaviour package" },                      /* ETSI ES 283 039-3 */
764     {   0x00a5, "ETSI notification rate package" },                           /* ETSI ES 283 039-4 */
765     {   0x00a6, "Automatic Speech Recognition Package" },                     /* H.248.9 Amendment 1 */
766     {   0x00a7, "Set extension to basic syntax for TTS enhancement Package" },/* H.248.9 Amendment 1 */
767     {   0x00a8, "Advanced audio server base package for TTS enhancement" },   /* H.248.9 Amendment 1 */
768     {   0x00a9, "Multimedia Play Package" },                                  /* H.248.9 Amendment 1 */
769     {   0x00aa, "Floor Status Detection Package" },                           /* H.248.19 Amendment 2 */
770     {   0x00ab, "Floor Control Policy Package" },                             /* H.248.19 Amendment 2 */
771     {   0x00ac, "Address Reporting Package" },                                /* H.248.37 Amendment 1 */
772     {   0x00ad, "Connection Capability Control Package" },                    /* H.248.46 */
773     {   0x00ae, "Statistic Conditional Reporting Package" },                  /* H.248.47 Amendment 1 */
774     {   0x00af, "RTCP HR QoS Statistics Package" },                           /* H.248.48 */
775     {   0x00b0, "Received RTCP XR Package" },                                 /* H.248.30 (01/2007) */
776     {   0x00b1, "Received RTCP XR Burst Metrics Package" },                   /* H.248.30 (01/2007) */
777     {   0x00b2, "ASCI Group call package" },                                  /* 3GPP TS 29.232 v7.4.0 */
778     {   0x00b3, "Multimedia Recording Package" },                             /* H.248.9 Amendment 1 */
779     {   0x00b4, "H.245 Transport Package" },                                  /* H.248.12 Amendment 2 */
780     {   0x00b5, "RTCP Handling package" },                                    /* H.248.57 */
781     {   0x00b6, "Gate Management - Outgoing Destination Address/Port Filtering Package" },/* H.248.43 */
782     {   0x00b7, "Gate Management - Incoming Protocol Filtering Package" },    /* H.248.43 */
783     {   0x00b8, "Gate Management - Outgoing Protocol Filtering Package" },    /* H.248.43 */
784     {   0x00b9, "Gate Management - Incoming Filtering Behaviour Package" },   /* H.248.43 */
785     {   0x00ba, "Gate Management - Outgoing Filtering Behaviour Package" },   /* H.248.43 */
786     {   0x00bb, "Session Description Protocol RFC Package" },                 /* H.248.49 */
787     {   0x00bc, "Session Description Protocol Capabilities Package" },        /* H.248.49 */
788     {   0x00bd, "NAT Traversal Toolkit - STUN Base Package" },                /* H.248.50 */
789     {   0x00be, "NAT Traversal Toolkit - MG STUN Client Package" },           /* H.248.50 */
790     {   0x00bf, "NAT Traversal Toolkit - MG TURN Client Package" },           /* H.248.50 */
791     {   0x00c0, "NAT Traversal Toolkit - MGC STUN Client Package" },          /* H.248.50 */
792     {   0x00c1, "NAT Traversal Toolkit - STUN Information Package" },         /* H.248.50 */
793     {   0x00c2, "NAT Traversal Toolkit - MG Act-as STUN Server Package" },    /* H.248.50 */
794     {   0x00c3, "NAT Traversal Toolkit - Originate STUN Continuity Check Package" },  /* H.248.50 */
795     {   0x00c4, "NAT Traversal Toolkit - MGC Originated STUN Request Package" },      /* H.248.50 */
796     {   0x00c5, "NAT Traversal Toolkit - RTP NOOP Request Package" },         /* H.248.50 */
797     {   0x00c6, "Termination Connection Model Package" },                     /* H.248.51 */
798     {   0x00c7, "QoS Class Package" },                                        /* H.248.52 */
799     {   0x00c8, "Traffic Policing Statistics Package" },                      /* H.248.53 */
800     {   0x00c9, "Packet Size Package" },                                      /* H.248.53 */
801     {   0x00ca, "Pull Mode Package" },                                        /* H.248.55 */
802     {   0x00cb, "RTP Application Data Package" },                             /* H.248.58 */
803     {   0x00cc, "Event Timestamp Notification Package" },                     /* H.248.59 */
804     {   0x00cd, "Resource Management Rules Package" },                        /* H.248.63 */
805     {   0x00ce, "Resource Management Configuration Package" },                /* H.248.63 */
806     {   0x00cf, "Abstract Resource Management Packages" },                    /* H.248.63 */
807
808     {   0x00d0, "IP layer octets count statistics Package" },                 /* H.248.61 */
809     {   0x00d1, "Content of Communication Identity Package" },                /* H.248.60 */
810     {   0x00d2, "RSVP extension package" },                                   /* H.248.65 */
811     {   0x00d3, "GCP Transport Mode Indication Package" },                    /* H.248.67 */
812     {   0x00d4, "IP Router Package" },                                        /* H.248.64 */
813     {   0x00d5, "Media Resource Identification Package" },                    /* H.248.66 */
814     {   0x00d6, "Range Format Support Package" },                             /* H.248.66 */
815     {   0x00d7, "Media Resource Description Expiry Package" },                /* H.248.66 */
816     {   0x00d8, "Media Block Size Package" },                                 /* H.248.66 */
817     {   0x00d9, "RTSP Media Resource Syntax Package" },                       /* H.248.66 */
818     {   0x00da, "RTSP Play Package" },                                        /* H.248.66 */
819     {   0x00db, "Signal Pause Package" },                                     /* H.248.66 */
820     {   0x00dc, "Data Delivery Speed Adjustme Package" },                     /* H.248.66 */
821     {   0x00dd, "Playback Relative Scale Adjustment Package" },               /* H.248.66 */
822     {   0x00de, "RTP Information Package" },                                  /* H.248.66 */
823     {   0x00df, "RTP Interleaving Package" },                                 /* H.248.66 */
824     {   0x00e0, "IP Realm Availability Package" },                            /* H.248.41 Amendment 1 */
825     {   0x00e1, "General IP Header QoS Octet Package" },                      /* H.248.52  */
826     {   0x00e2, "Re-answer Package" },                                        /* H.248.62  */
827     {   0x00e3, "3G Interface Type package" },                                /* 3GPP TS 29.232 v8.4.0 */
828     {   0x00e4, "Latch Statistics Package" },                                 /* H.248.37 */
829     {   0x00e5, "Floor Control Signalling Package" },                         /* H.248.19 Amendment 2 */
830     {   0x00e6, "Include Participant in Mix Package" },                       /* H.248.19 Amendment 2 */
831     {   0x00e7, "Speaker Reporting Package" },                                /* H.248.19 Amendment 2 */
832     {   0x00e8, "IP Layer Packet Count Statistics Package" },                 /* H.248.61 */
833     {   0x00e9, "Removal of Digits and Tones Package" },                      /* H.248.68 */
834     {   0x00ea, "MSRP Statistics Package" },                                  /* H.248.69 */
835     {   0x00eb, "MSRP Connection Status Package" },                           /* H.248.69 */
836     {   0x00ec, "Play Message Package" },                                     /* H.248.69 */
837     {   0x00ed, "Delete Stored Message Package" },                            /* H.248.69 */
838     {   0x00ee, "Message Session Information Package" },                      /* H.248.69 */
839     {   0x00ef, "Message Filtering Package" },                                /* H.248.69 */
840     {   0x00f0, "Stored Message Information Package" },                       /* H.248.69 */
841     {   0x00f1, "Record Message Package" },                                   /* H.248.69 */
842     {   0x00f2, "Digit Dialling Method Information Package" },                /* H.248.70 */
843     {   0x00f3, "Digit Dialling Method Information for Extended Digitmap Detection Package" }, /* H.248.70 */
844     {   0x00f4, "Digit Dialling Method Information for Enhanced Digitmap Detection Package" }, /* H.248.70 */
845     {   0x00f5, "Received RTCP Package " },                                   /* H.248.71 */
846     {   0x00f6, "RTP Cumulative Loss Package" },                              /* H.248.71 */
847     {   0x00f7, "H.245 Transport Package for SPC use" },                      /* H.248.72 */
848     {   0x00f8, "MONA Preference Package" },                                  /* H.248.72 */
849     {   0x00f9, "TDM Gain Control Package" },                                 /* H.248.73 */
850     {   0x00fa, "Media Start Package" },                                      /* H.248.74 */
851     {   0x00fb, "Trim Package" },                                             /* H.248.74 */
852     {   0x00fc, "Enhanced Recording Package" },                               /* H.248.74 */
853     {   0x00fd, "Enhanced ASR Package" },                                     /* H.248.74      */
854     {   0x00fe, "Enhanced TTS Package" },                                     /* H.248.74 */
855     {   0x00ff, "Play Offset Control Package" },                              /* H.248.74 */
856     {   0x0100, "Enhanced DTMF Detection Package" },                          /* H.248.9 Revised 2009 */
857     {   0x0101, "IP Router NAT Package" },                                    /* H.248.64 */
858     {   0x0102, "Voice Enrolled Grammar Package" },                           /* H.248.74 */
859     {   0x0103, "Filter Group Package" },                                     /* H.248.76 */
860     {   0x0104, "RTCP Source Description Package" },                          /* H.248.71 */
861     {   0x0105, "Speaker Verification and Identification Package" },          /* H.248.74 */
862     {   0x0106, "Package Identifier Publishing and Application Package" },    /* H.248 */
863     {   0x0107, "Secure RTP Package " },                                      /* H.248.77 */
864     {   0x0108, "MGC Controlled Bearer Level ALG Package" },                  /* H.248.78 */
865     {   0x0109, "Enhanced Revised Offer/Answer SDP Support Package" },        /* H.248.80 */
866     {   0x010a, "Enhanced SDP Media Capabilities Negotiation Support Package" }, /* H.248.80 */
867
868     {   0x8000, "Ericsson IU" },
869     {   0x8001, "Ericsson UMTS and GSM Circuit" },
870     {   0x8002, "Ericsson Tone Generator Package" },
871     {   0x8003, "Ericsson Line Test Package" },
872     {   0x8004, "Nokia Advanced TFO Package" },
873     {   0x8005, "Nokia IWF Package" },
874     {   0x8006, "Nokia Root Package" },
875     {   0x8007, "Nokia Trace Package" },
876     {   0x8008, "Ericsson  V5.2 Layer" },
877     {   0x8009, "Ericsson Detailed Termination Information Package" },
878     {   0x800a, "Nokia Bearer Characteristics Package" },
879     {   0x800b, "Nokia Test Call Package" },
880     {   0x800c, "Nokia Extended Continuity Package" },
881     {   0x800d, "Nokia IPnwR Package" },
882     {   0x800e, "Ericsson Tracing Enhancements Package" },
883     {   0x800f, "Ericsson Partially Wildcarded TerminationID Package" },
884     {   0x8010, "SCTP Stream Handling Package" },
885
886     {0,     NULL}
887 };
888 static value_string_ext package_name_vals_ext = VALUE_STRING_EXT_INIT(package_name_vals);
889
890 /*
891  * This table consist of PackageName + EventName and its's corresponding string
892  *
893  */
894 static const value_string event_name_vals[] = {
895     {   0x00000000, "Media stream properties H.248.1 Annex C" },
896     {   0x00010000, "g H.248.1 Annex E" },
897     {   0x00010001, "g/Cause" },
898     {   0x00010002, "g/Signal Completion" },
899     {   0x00040000, "tonedet H.248.1 Annex E" },
900     {   0x00040001, "tonedet/std(Start tone detected)" },
901     {   0x00040002, "tonedet/etd(End tone detected)" },
902     {   0x00040003, "tonedet/ltd(Long tone detected)" },
903     {   0x00060000, "dd H.248.1 Annex E" },
904     {   0x00060001, "dd/std" },
905     {   0x00060002, "dd/etd" },
906     {   0x00060003, "dd/ltd" },
907     {   0x00060004, "dd, DigitMap Completion Event" },
908     {   0x00060010, "dd/d0, DTMF character 0" },
909     {   0x00060011, "dd/d1, DTMF character 1" },
910     {   0x00060012, "dd/d2, DTMF character 2" },
911     {   0x00060013, "dd/d3, DTMF character 3" },
912     {   0x00060014, "dd/d4, DTMF character 4" },
913     {   0x00060015, "dd/d5, DTMF character 5" },
914     {   0x00060016, "dd/d6, DTMF character 6" },
915     {   0x00060017, "dd/d7, DTMF character 7" },
916     {   0x00060018, "dd/d8, DTMF character 8" },
917     {   0x00060019, "dd/d9, DTMF character 9" },
918     {   0x0006001a, "dd/a, DTMF character A" },
919     {   0x0006001b, "dd/b, DTMF character B" },
920     {   0x0006001c, "dd/c, DTMF character C" },
921     {   0x0006001d, "dd/d, DTMF character D" },
922     {   0x00060020, "dd/*, DTMF character *" },
923     {   0x00060021, "dd/#, DTMF character #" },
924     {   0x00080030, "cd, Dial Tone" },
925     {   0x00080031, "cd, Ringing Tone" },
926     {   0x00080032, "cd, Busy Tone" },
927     {   0x00080033, "cd, Congestion Tone" },
928     {   0x00080034, "cd, Special Information Tone" },
929     {   0x00080035, "cd, (Recording) Warning Tone" },
930     {   0x00080036, "cd, Payphone Recognition Tone" },
931     {   0x00080037, "cd, Call Waiting Tone" },
932     {   0x00080038, "cd, Caller Waiting Tone" },
933     {   0x00090004, "al, onhook" },
934     {   0x00090005, "al, offhook" },
935     {   0x00090006, "al, flashhook" },
936     {   0x0009ffff, "al, *" },
937     {   0x000a0005, "ct, Completion of Continuity test" },
938     {   0x000b0005, "nt, network failure" },
939     {   0x000b0006, "nt, quality alert" },
940     {   0x000c0001, "rtp, Payload Transition" },
941     {   0x00210000, "Generic Bearer Connection Q.1950 Annex A" },
942     {   0x00210001, "GB/BNCChange" },
943     {   0x00220001, "BT/TIND (Tunnel Indication)" },
944     {   0x002a0001, "H.245/h245msg (Incoming H.245 Message)" },
945     {   0x002a0004, "H.245/h245ChC (H.245 Channel Closed)" },
946     {   0x00450000, "Inactivity Timer H.248.14" },
947     {   0x00450001, "it/ito" },
948     {   0x00450002, "it/ito" },
949     {   0x00460001, "threegmlc/mod_link_supp (Bearer Modification Support Event)" },
950     {   0x00980000, "Hanging Termination Package" },
951     {   0x00980001, "Termination Heartbeat" },
952     {   0x800a0000, "Nokia Bearer Characteristics Package" },
953     {0,     NULL}
954 };
955 static value_string_ext event_name_vals_ext = VALUE_STRING_EXT_INIT(event_name_vals);
956
957 /*
958  * This table consist of PackageName + SignalName and its's corresponding string
959  */
960 static const value_string signal_name_vals[] = {
961     {   0x00000000, "Media stream properties H.248.1 Annex C" },
962     {   0x00010000, "g H.248.1 Annex E" },
963     {   0x00030001, "tonegen/pt(Play tone)" },
964     {   0x00050010, "dg, DTMF character 0" },
965     {   0x00050011, "dg, DTMF character 1" },
966     {   0x00050012, "dg, DTMF character 2" },
967     {   0x00050013, "dg, DTMF character 3" },
968     {   0x00050014, "dg, DTMF character 4" },
969     {   0x00050015, "dg, DTMF character 5" },
970     {   0x00050016, "dg, DTMF character 6" },
971     {   0x00050017, "dg, DTMF character 7" },
972     {   0x00050018, "dg, DTMF character 8" },
973     {   0x00050019, "dg, DTMF character 9" },
974     {   0x0005001a, "dg, DTMF character A" },
975     {   0x0005001b, "dg, DTMF character B" },
976     {   0x0005001c, "dg, DTMF character C" },
977     {   0x0005001d, "dg, DTMF character D" },
978     {   0x00050020, "dg, DTMF character *" },
979     {   0x00050021, "dg, DTMF character #" },
980     {   0x00070030, "cg, Dial Tone" },
981     {   0x00070031, "cg/rt (Ringing Tone)" },
982     {   0x00070032, "cg, Busy Tone" },
983     {   0x00070033, "cg, Congestion Tone" },
984     {   0x00070034, "cg, Special Information Tone" },
985     {   0x00070035, "cg, (Recording) Warning Tone" },
986     {   0x00070036, "cg, Payphone Recognition Tone" },
987     {   0x00070037, "cg, Call Waiting Tone" },
988     {   0x00070038, "cg, Caller Waiting Tone" },
989     {   0x00090002, "al, ring" },
990     {   0x0009ffff, "al, *" },
991     {   0x000a0003, "ct, Continuity test" },
992     {   0x000a0004, "ct, Continuity respond" },
993     {   0x00210000, "GB Generic Bearer Connection Q.1950 Annex A" },
994     {   0x00210001, "GB/EstBNC(Establish BNC)" },
995     {   0x00210002, "GB/ModBNC (Modify BNC)" },
996     {   0x00210003, "GB/RelBNC(Release BNC)" },
997
998     {   0x002a0001, "H.245/cs (channel state)" },
999     {   0x002a0002, "H.245/termtype (Terminal Type)" },
1000
1001     {   0x002c0001, "H.324/cmod (Communication mode)" },
1002     {   0x002c0002, "H.324/muxlv (Highest Multiplexing level)" },
1003     {   0x002c0003, "H.324/demux (Demultiplex)" },
1004     {   0x002c0004, "H.324/h223capr (Remote H.223 capability)" },
1005     {   0x002c0005, "H.324/muxtbl_in (Incoming Multiplex Table)" },
1006     {   0x002c0006, "H.324/muxtbl_out (Outgoing Multiplex Table)" },
1007
1008     {   0x800a0000, "Nokia Bearer Characteristics Package" },
1009     {0,     NULL}
1010 };
1011 static value_string_ext signal_name_vals_ext = VALUE_STRING_EXT_INIT(signal_name_vals);
1012
1013 #if 0
1014 static const value_string context_id_type[] = {
1015     {NULL_CONTEXT,"0 (Null Context)"},
1016     {CHOOSE_CONTEXT,"$ (Choose Context)"},
1017     {ALL_CONTEXTS,"* (All Contexts)"},
1018     {0,NULL}
1019 };
1020 #endif
1021
1022
1023
1024 static const value_string h248_reasons[] = {
1025     { 400, "Syntax error in message"},
1026     { 401, "Protocol Error"},
1027     { 402, "Unauthorized"},
1028     { 403, "Syntax error in transaction request"},
1029     { 406, "Version Not Supported"},
1030     { 410, "Incorrect identifier"},
1031     { 411, "The transaction refers to an unknown ContextId"},
1032     { 412, "No ContextIDs available"},
1033     { 413, "Number of transactions in message exceeds maximum"},    /* [H.248.8 (08/07)] */
1034     { 421, "Unknown action or illegal combination of actions"},
1035     { 422, "Syntax Error in Action"},
1036     { 430, "Unknown TerminationID"},
1037     { 431, "No TerminationID matched a wildcard"},
1038     { 432, "Out of TerminationIDs or No TerminationID available"},
1039     { 433, "TerminationID is already in a Context"},
1040     { 434, "Max number of Terminations in a Context exceeded"},
1041     { 435, "Termination ID is not in specified Context"},
1042     { 440, "Unsupported or unknown Package"},
1043     { 441, "Missing Remote or Local Descriptor"},
1044     { 442, "Syntax Error in Command"},
1045     { 443, "Unsupported or Unknown Command"},
1046     { 444, "Unsupported or Unknown Descriptor"},
1047     { 445, "Unsupported or Unknown Property"},
1048     { 446, "Unsupported or Unknown Parameter"},
1049     { 447, "Descriptor not legal in this command"},
1050     { 448, "Descriptor appears twice in a command"},
1051     { 449, "Unsupported or Unknown Parameter or Property Value"},
1052     { 450, "No such property in this package"},
1053     { 451, "No such event in this package"},
1054     { 452, "No such signal in this package"},
1055     { 453, "No such statistic in this package"},
1056     { 454, "No such parameter value in this package"},
1057     { 455, "Property illegal in this Descriptor"},
1058     { 456, "Property appears twice in this Descriptor"},
1059     { 457, "Missing parameter in signal or event"},
1060     { 458, "Unexpected Event/Request ID"},
1061     { 459, "Unsupported or Unknown Profile"},
1062     { 460, "Unable to set statistic on stream"},
1063     { 461, "Unsupported or Unknown Profile"},                               /*[H.248.18] */
1064
1065     { 471, "Implied Add for Multiplex failure"},
1066     { 472, "Required Information Missing"},                                 /*[H.248.8 (08/07)] */
1067     { 473, "Conflicting Property Values"},                                  /*[H.248.8 (08/07)] */
1068     { 474, "Invalid SDP Syntax"},                                           /*[H.248.49] */
1069     { 475, "Unable to pause the playout of the signal"},                    /*[H.248.66] */
1070     { 476, "Unable to adjust the data delivery speed of the Signal"},       /*[H.248.66] */
1071
1072     { 477, "Unable to adjust the playback relative scale of the signal"},   /*[H.248.66] */
1073
1074     { 478, "Behaviour Contradicts Resource Rule"},                          /*[H.248.63] */
1075
1076     { 500, "Internal software Failure in MG"},
1077     { 501, "Not Implemented"},
1078     { 502, "Not ready"},
1079     { 503, "Service Unavailable"},
1080     { 504, "Command Received from unauthorized entity"},
1081     { 505, "Transaction Request Received before a Service Change Reply has been received"},
1082     { 506, "Number of Transaction Pendings Exceeded"},
1083     { 510, "Insufficient resources"},
1084     { 511, "Temporarily Busy"},                                     /* [H.248.8 (08/07)] */
1085     { 512, "Media Gateway unequipped to detect requested Event"},
1086     { 513, "Media Gateway unequipped to generate requested Signals"},
1087     { 514, "Media Gateway cannot send the specified announcement"},
1088     { 515, "Unsupported Media Type"},
1089     { 517, "Unsupported or invalid mode"},
1090     { 518, "Event buffer full"},
1091     { 519, "Out of space to store digit map"},
1092     { 520, "Digit Map undefined in the MG"},
1093     { 521, "Termination is ServiceChangeing"},
1094     { 522, "Functionality Requested in Topology Triple Not Supported"},
1095     { 526, "Insufficient bandwidth"},
1096     { 529, "Internal hardware failure in MG"},
1097     { 530, "Temporary Network failure"},
1098     { 531, "Permanent Network failure"},
1099     { 532, "Audited Property, Statistic, Event or Signal does not exist"},
1100     { 533, "Response exceeds maximum transport PDU size"},
1101     { 534, "Illegal write or read only property"},
1102     { 540, "Unexpected initial hook state"},
1103     { 541, "Unexpected Spare Bit State"},                               /* [H.248.33] */
1104     { 542, "Command is not allowed on this termination"},
1105     { 543, "MGC requested event detection timestamp not supported"},    /* [H.248.8 (08/07)] */
1106     { 581, "Does Not Exist"},
1107     { 600, "Illegal syntax within an announcement specification"},
1108     { 601, "Variable type not supported"},
1109     { 602, "Variable value out of range"},
1110     { 603, "Category not supported"},
1111     { 604, "Selector type not supported"},
1112     { 605, "Selector value not supported"},
1113     { 606, "Unknown segment ID"},
1114     { 607, "Mismatch between play specification and provisioned data"},
1115     { 608, "Provisioning error"},
1116     { 609, "Invalid offset"},
1117     { 610, "No free segment IDs"},
1118     { 611, "Temporary segment not found"},
1119     { 612, "Segment in use"},
1120     { 613, "ISP port limit overrun"},
1121     { 614, "No modems available"},
1122     { 615, "Calling number unacceptable"},
1123     { 616, "Called number unacceptable"},
1124     { 617, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1125     { 618, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1126     { 622, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1127     { 623, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1128     { 624, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1129     { 625, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1130     { 626, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1131     { 627, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1132     { 628, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1133     { 629, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1134     { 700, "Sieve Script Syntax Error"},            /* [H.248.69] */
1135     { 701, "Unsupported Sieve Require Error"},      /* [H.248.69] */
1136     { 702, "Sieve Actions Exceeded Error"},         /* [H.248.69] */
1137
1138     { 900, "Service Restored"},
1139     { 901, "Cold Boot"},
1140     { 902, "Warm Boot"},
1141     { 903, "MGC Directed Change"},
1142     { 904, "Termination malfunctioning"},
1143     { 905, "Termination taken out of service"},
1144     { 906, "Loss of lower layer connectivity (e.g. downstream sync)"},
1145     { 907, "Transmission Failure"},
1146     { 908, "MG Impending Failure"},
1147     { 909, "MGC Impending Failure"},
1148     { 910, "Media Capability Failure"},
1149     { 911, "Modem Capability Failure"},
1150     { 912, "Mux Capability Failure"},
1151     { 913, "Signal Capability Failure"},
1152     { 914, "Event Capability Failure"},
1153     { 915, "State Loss"},
1154     { 916, "Packages Change"},
1155     { 917, "Capabilities Change"},
1156     { 918, "Cancel Graceful"},
1157     { 919, "Warm Failover"},
1158     { 920, "Cold Failover"},
1159     {0,NULL}
1160 };
1161 static value_string_ext h248_reasons_ext = VALUE_STRING_EXT_INIT(h248_reasons);
1162
1163 static const value_string wildcard_modes[] = {
1164     { 0, "Choose" },
1165     { 1, "All" },
1166     { 0, NULL }
1167 };
1168
1169 static const value_string wildcard_levels[] = {
1170     { 0, "This One Level" },
1171     { 1, "This Level and those below" },
1172     { 0, NULL }
1173 };
1174
1175 static h248_curr_info_t curr_info = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
1176 static guint32 error_code;
1177 static guint32 h248_version = 0; /* h248v1 support */
1178 static gcp_wildcard_t wild_term;
1179 static guint8 wild_card = 0xFF; /* place to store wildcardField */
1180
1181 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) {
1182     asn1_ctx_t asn1_ctx;
1183     asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1184     dissect_ber_integer(implicit ? *((gboolean*)implicit) : FALSE, &asn1_ctx, tree, tvb, 0, hfid, NULL);
1185 }
1186
1187 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) {
1188     asn1_ctx_t asn1_ctx;
1189     asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1190     dissect_ber_octet_string(implicit ? *((gboolean*)implicit) : FALSE, &asn1_ctx, tree, tvb, 0, hfid, NULL);
1191 }
1192
1193 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) {
1194     asn1_ctx_t asn1_ctx;
1195     asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1196     dissect_ber_boolean(implicit ? *((gboolean*)implicit) : FALSE, &asn1_ctx, tree, tvb, 0, hfid, NULL);
1197 }
1198
1199 extern void h248_param_item(proto_tree* tree,
1200                              tvbuff_t* tvb,
1201                              packet_info* pinfo _U_,
1202                              int hfid,
1203                              h248_curr_info_t* h248_info _U_,
1204                              void* lenp ) {
1205     int len = lenp ? *((int*)lenp) : -1;
1206     proto_tree_add_item(tree,hfid,tvb,0,len,FALSE);
1207 }
1208
1209 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) {
1210     call_dissector((dissector_handle_t) dissector_hdl,tvb,pinfo,tree);
1211 }
1212
1213
1214 static const h248_package_t no_package = { 0xffff, &hf_h248_no_pkg, &ett_h248_no_pkg, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
1215 static const h248_pkg_sig_t no_signal = { 0, &hf_h248_no_sig, &ett_h248_no_sig, NULL, NULL };
1216 static const h248_pkg_param_t no_param = { 0, &hf_h248_param, h248_param_item,  NULL };
1217 static const h248_pkg_evt_t no_event = { 0, &hf_h248_no_evt, &ett_h248_no_evt, NULL, NULL };
1218
1219 static GPtrArray* packages = NULL;
1220
1221 extern void h248_param_PkgdName(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo , int hfid _U_, h248_curr_info_t* u1 _U_, void* u2 _U_) {
1222     tvbuff_t *new_tvb = NULL;
1223     proto_tree *package_tree=NULL;
1224     guint16 name_major, name_minor;
1225     const h248_package_t* pkg = NULL;
1226     guint i;
1227     int offset = 0;
1228     asn1_ctx_t asn1_ctx;
1229     asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1230
1231     offset = dissect_ber_octet_string(FALSE, &asn1_ctx, tree, tvb, offset, hfid , &new_tvb);
1232
1233     if (new_tvb) {
1234         /* this field is always 4 bytes  so just read it into two integers */
1235         name_major=tvb_get_ntohs(new_tvb, 0);
1236         name_minor=tvb_get_ntohs(new_tvb, 2);
1237
1238         /* do the prettification */
1239         proto_item_append_text(asn1_ctx.created_item, "  %s (%04x)",
1240                                val_to_str_ext_const(name_major, &package_name_vals_ext, "Unknown Package"),
1241                                name_major);
1242
1243         if(tree){
1244             proto_item* pi;
1245             const gchar* strval;
1246
1247             package_tree = proto_item_add_subtree(asn1_ctx.created_item, ett_packagename);
1248             proto_tree_add_uint(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major);
1249
1250             for(i=0; i < packages->len; i++) {
1251                 pkg = g_ptr_array_index(packages,i);
1252
1253                 if (name_major == pkg->id) {
1254                     break;
1255                 } else {
1256                     pkg = NULL;
1257                 }
1258             }
1259
1260             if (! pkg ) pkg = &no_package;
1261
1262
1263             pi = proto_tree_add_uint(package_tree, hf_248_pkg_param, tvb, offset-2, 2, name_minor);
1264
1265             if (pkg->signal_names && ( strval = match_strval(name_minor, pkg->signal_names) )) {
1266                 strval = ep_strdup_printf("%s (%d)",strval,name_minor);
1267             } else {
1268                 strval = ep_strdup_printf("Unknown (%d)",name_minor);
1269             }
1270
1271             proto_item_set_text(pi,"Signal ID: %s", strval);
1272         }
1273
1274     }
1275 }
1276
1277
1278 static int dissect_h248_trx_id(gboolean implicit_tag, packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, guint32* trx_id_p) {
1279     guint64 trx_id = 0;
1280     gint8 class;
1281     gboolean pc;
1282     gint32 tag;
1283     guint32 len;
1284     guint32 i;
1285
1286     if(!implicit_tag){
1287         offset=dissect_ber_identifier(pinfo, tree, tvb, offset, &class, &pc, &tag);
1288         offset=dissect_ber_length(pinfo, tree, tvb, offset, &len, NULL);
1289     } else {
1290         len=tvb_length_remaining(tvb, offset);
1291     }
1292
1293
1294     if (len > 8 || len < 1) {
1295         THROW(BoundsError);
1296     } else {
1297         for(i=1;i<=len;i++){
1298             trx_id=(trx_id<<8)|tvb_get_guint8(tvb, offset);
1299             offset++;
1300         }
1301         if (trx_id > 0xffffffff) {
1302             proto_item* pi = proto_tree_add_text(tree, tvb, offset-len, len,"transactionId %" G_GINT64_MODIFIER "u", trx_id);
1303             proto_item_set_expert_flags(pi, PI_MALFORMED, PI_WARN);
1304
1305             *trx_id_p = 0;
1306
1307         } else {
1308             proto_tree_add_uint(tree, hf_h248_transactionId, tvb, offset-len, len, (guint32)trx_id);
1309             *trx_id_p = (guint32)trx_id;
1310         }
1311     }
1312
1313     return offset;
1314 }
1315
1316 static int dissect_h248_ctx_id(gboolean implicit_tag, packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, guint32* ctx_id_p) {
1317     gint8 class;
1318     gboolean pc;
1319     gint32 tag;
1320     guint32 len;
1321     guint64 ctx_id = 0;
1322     guint32 i;
1323
1324     if(!implicit_tag){
1325         offset=dissect_ber_identifier(pinfo, tree, tvb, offset, &class, &pc, &tag);
1326         offset=dissect_ber_length(pinfo, tree, tvb, offset, &len, NULL);
1327     } else {
1328         len=tvb_length_remaining(tvb, offset);
1329     }
1330
1331
1332     if (len > 8 || len < 1) {
1333         THROW(BoundsError);
1334     } else {
1335         for(i=1;i<=len;i++){
1336             ctx_id=(ctx_id<<8)|tvb_get_guint8(tvb, offset);
1337             offset++;
1338         }
1339
1340         if (ctx_id > 0xffffffff) {
1341             proto_item* pi = proto_tree_add_text(tree, tvb, offset-len, len,
1342                                                  "contextId: %" G_GINT64_MODIFIER "u", ctx_id);
1343             proto_item_set_expert_flags(pi, PI_MALFORMED, PI_WARN);
1344
1345             *ctx_id_p = 0xfffffffd;
1346
1347         } else {
1348             proto_item* pi = proto_tree_add_uint(tree, hf_h248_context_id, tvb, offset-len, len, (guint32)ctx_id);
1349
1350             if ( ctx_id ==  NULL_CONTEXT ) {
1351                 proto_item_set_text(pi,"contextId: Null Context(0)");
1352             } else if ( ctx_id ==  CHOOSE_CONTEXT ) {
1353                 proto_item_set_text(pi,"contextId: $ (Choose Context = 0xfffffffe)");
1354             } else if ( ctx_id ==  ALL_CONTEXTS ) {
1355                 proto_item_set_text(pi,"contextId: * (All Contexts = 0xffffffff)");
1356             }
1357
1358             *ctx_id_p = (guint32) ctx_id;
1359         }
1360     }
1361
1362     return offset;
1363 }
1364
1365 void h248_register_package(const h248_package_t* pkg) {
1366     if (! packages) packages = g_ptr_array_new();
1367
1368     g_ptr_array_add(packages,(void*)pkg);
1369 }
1370
1371 static guint32 packageandid;
1372
1373 static int dissect_h248_PkgdName(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
1374     tvbuff_t *new_tvb = NULL;
1375     proto_tree *package_tree=NULL;
1376     guint16 name_major, name_minor;
1377     const h248_package_t* pkg = NULL;
1378     guint i;
1379
1380     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
1381
1382     if (new_tvb) {
1383         /* this field is always 4 bytes  so just read it into two integers */
1384         name_major=tvb_get_ntohs(new_tvb, 0);
1385         name_minor=tvb_get_ntohs(new_tvb, 2);
1386         packageandid=(name_major<<16)|name_minor;
1387
1388         /* do the prettification */
1389         proto_item_append_text(actx->created_item, "  %s (%04x)",
1390                                val_to_str_ext_const(name_major, &package_name_vals_ext, "Unknown Package"),
1391                                name_major);
1392
1393         if(tree){
1394             package_tree = proto_item_add_subtree(actx->created_item, ett_packagename);
1395             proto_tree_add_uint(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major);
1396         }
1397
1398         for(i=0; i < packages->len; i++) {
1399             pkg = g_ptr_array_index(packages,i);
1400
1401             if (name_major == pkg->id) {
1402                 break;
1403             } else {
1404                 pkg = NULL;
1405             }
1406         }
1407
1408         if (! pkg ) pkg = &no_package;
1409
1410         {
1411             proto_item* pi = proto_tree_add_uint(package_tree, hf_248_pkg_param, tvb, offset-2, 2, name_minor);
1412             const gchar* strval;
1413
1414             if (pkg->param_names && ( strval = match_strval(name_minor, pkg->param_names) )) {
1415                 strval = ep_strdup_printf("%s (%d)",strval,name_minor);
1416             } else {
1417                 strval = ep_strdup_printf("Unknown (%d)",name_minor);
1418             }
1419
1420             proto_item_set_text(pi,"Parameter: %s", strval);
1421         }
1422     } else {
1423         pkg = &no_package;
1424     }
1425
1426     curr_info.pkg = pkg;
1427
1428     return offset;
1429 }
1430
1431 static int dissect_h248_EventName(gboolean implicit_tag, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
1432     tvbuff_t *new_tvb;
1433     proto_tree *package_tree=NULL;
1434     guint16 name_major, name_minor;
1435     const h248_package_t* pkg = NULL;
1436     const h248_pkg_evt_t* evt = NULL;
1437     guint i;
1438
1439     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
1440
1441     if (new_tvb) {
1442         /* this field is always 4 bytes  so just read it into two integers */
1443         name_major=tvb_get_ntohs(new_tvb, 0);
1444         name_minor=tvb_get_ntohs(new_tvb, 2);
1445         packageandid=(name_major<<16)|name_minor;
1446
1447         /* do the prettification */
1448         proto_item_append_text(actx->created_item, "  %s (%04x)",
1449                                val_to_str_ext_const(name_major, &package_name_vals_ext, "Unknown Package"),
1450                                name_major);
1451         if(tree){
1452             package_tree = proto_item_add_subtree(actx->created_item, ett_packagename);
1453         }
1454         proto_tree_add_uint(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major);
1455
1456
1457         for(i=0; i < packages->len; i++) {
1458             pkg = g_ptr_array_index(packages,i);
1459
1460             if (name_major == pkg->id) {
1461                 break;
1462             } else {
1463                 pkg = NULL;
1464             }
1465         }
1466
1467         if (! pkg ) pkg = &no_package;
1468
1469         curr_info.pkg = pkg;
1470
1471         if (pkg->events) {
1472             for (evt = pkg->events; evt->hfid; evt++) {
1473                 if (name_minor == evt->id) {
1474                     break;
1475                 }
1476             }
1477
1478             if (! evt->hfid) evt = &no_event;
1479         } else {
1480             evt = &no_event;
1481         }
1482
1483         curr_info.evt = evt;
1484
1485         {
1486             proto_item* pi = proto_tree_add_uint(package_tree, hf_h248_event_code, tvb, offset-2, 2, name_minor);
1487             const gchar* strval;
1488
1489             if (pkg->event_names && ( strval = match_strval(name_minor, pkg->event_names) )) {
1490                 strval = ep_strdup_printf("%s (%d)",strval,name_minor);
1491             } else {
1492                 strval = ep_strdup_printf("Unknown (%d)",name_minor);
1493             }
1494
1495             proto_item_set_text(pi,"Event ID: %s", strval);
1496         }
1497
1498     } else {
1499         curr_info.pkg = &no_package;
1500         curr_info.evt = &no_event;
1501     }
1502
1503     return offset;
1504 }
1505
1506
1507
1508 static int dissect_h248_SignalName(gboolean implicit_tag , tvbuff_t *tvb, int offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
1509     tvbuff_t *new_tvb;
1510     proto_tree *package_tree=NULL;
1511     guint16 name_major, name_minor;
1512     const h248_package_t* pkg = NULL;
1513     const h248_pkg_sig_t* sig;
1514     guint i;
1515
1516     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
1517
1518     if (new_tvb) {
1519         /* this field is always 4 bytes so just read it into two integers */
1520         name_major=tvb_get_ntohs(new_tvb, 0);
1521         name_minor=tvb_get_ntohs(new_tvb, 2);
1522         packageandid=(name_major<<16)|name_minor;
1523
1524         /* do the prettification */
1525         proto_item_append_text(actx->created_item, "  %s (%04x)",
1526                                val_to_str_ext_const(name_major, &package_name_vals_ext, "Unknown Package"),
1527                                name_major);
1528         if(tree){
1529             package_tree = proto_item_add_subtree(actx->created_item, ett_packagename);
1530         }
1531         proto_tree_add_uint(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major);
1532
1533         for(i=0; i < packages->len; i++) {
1534             pkg = g_ptr_array_index(packages,i);
1535
1536             if (name_major == pkg->id) {
1537                 break;
1538             } else {
1539                 pkg = NULL;
1540             }
1541         }
1542
1543         if (! pkg ) pkg = &no_package;
1544
1545         if (pkg->signals) {
1546             for (sig = pkg->signals; sig->hfid; sig++) {
1547                 if (name_minor == sig->id) {
1548                     break;
1549                 }
1550             }
1551
1552             if (! sig->hfid) sig = &no_signal;
1553
1554             curr_info.pkg = pkg;
1555             curr_info.sig = sig;
1556         } else {
1557             curr_info.pkg = &no_package;
1558             curr_info.sig = &no_signal;
1559         }
1560
1561         {
1562             proto_item* pi = proto_tree_add_uint(package_tree, hf_h248_signal_code, tvb, offset-2, 2, name_minor);
1563             const gchar* strval;
1564
1565             if (pkg->signal_names && ( strval = match_strval(name_minor, pkg->signal_names) )) {
1566                 strval = ep_strdup_printf("%s (%d)",strval,name_minor);
1567             } else {
1568                 strval = ep_strdup_printf("Unknown (%d)",name_minor);
1569             }
1570
1571             proto_item_set_text(pi,"Signal ID: %s", strval);
1572         }
1573
1574     } else {
1575         curr_info.pkg = &no_package;
1576         curr_info.sig = &no_signal;
1577     }
1578
1579     return offset;
1580 }
1581
1582 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_) {
1583
1584     gint8 class;
1585     gboolean pc, ind;
1586     gint32 tag;
1587     guint32 len;
1588     /*guint16 name_major;*/
1589     guint16 name_minor;
1590     int end_offset;
1591     tvbuff_t *next_tvb;
1592     const h248_package_t* pkg;
1593     const h248_pkg_param_t* prop;
1594
1595     offset=dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &class, &pc, &tag);
1596     offset=dissect_ber_length(actx->pinfo, tree, tvb, offset, &len, &ind);
1597     end_offset=offset+len;
1598
1599     if( (class!=BER_CLASS_UNI)
1600       ||(tag!=BER_UNI_TAG_OCTETSTRING) ){
1601         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);
1602         return end_offset;
1603     }
1604
1605
1606     next_tvb = tvb_new_subset(tvb, offset , len , len );
1607     /*name_major = packageandid >> 16;*/
1608     name_minor = packageandid & 0xffff;
1609
1610     pkg = (curr_info.pkg) ? curr_info.pkg : &no_package;
1611
1612     if (pkg->properties) {
1613         for (prop = pkg->properties; prop && prop->hfid; prop++) {
1614             if (name_minor == prop->id) {
1615                 break;
1616             }
1617         }
1618     } else {
1619         prop = &no_param;
1620     }
1621
1622     if (prop && prop->hfid ) {
1623         if (!prop->dissector) prop = &no_param;
1624         prop->dissector(tree, next_tvb, actx->pinfo, *(prop->hfid), &curr_info, prop->data);
1625     }
1626
1627     return end_offset;
1628 }
1629
1630
1631 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_) {
1632     tvbuff_t *next_tvb;
1633     guint32 param_id = 0xffffffff;
1634     const h248_pkg_param_t* sigpar;
1635     const gchar* strval;
1636     proto_item* pi;
1637
1638     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset,  hf_index, &next_tvb);
1639     pi = actx->created_item;
1640
1641     switch(tvb_length(next_tvb)) {
1642         case 4: param_id = tvb_get_ntohl(next_tvb,0); break;
1643         case 3: param_id = tvb_get_ntoh24(next_tvb,0); break;
1644         case 2: param_id = tvb_get_ntohs(next_tvb,0); break;
1645         case 1: param_id = tvb_get_guint8(next_tvb,0); break;
1646         default: break;
1647     }
1648
1649     curr_info.par = &no_param;
1650
1651     if (curr_info.sig && curr_info.sig->parameters) {
1652         for(sigpar = curr_info.sig->parameters; sigpar->hfid; sigpar++) {
1653             if (sigpar->id == param_id) {
1654                 curr_info.par = sigpar;
1655                 break;
1656             }
1657         }
1658     }
1659
1660     if (curr_info.sig && curr_info.sig->param_names && ( strval = match_strval(param_id, curr_info.sig->param_names) )) {
1661         strval = ep_strdup_printf("%s (%d)",strval,param_id);
1662     } else {
1663         strval = ep_strdup_printf("Unknown (%d)",param_id);
1664     }
1665
1666     proto_item_set_text(pi,"Parameter: %s", strval);
1667
1668     return offset;
1669 }
1670
1671 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_) {
1672     tvbuff_t *next_tvb;
1673     int end_offset;
1674     gint8 class;
1675     gboolean pc, ind;
1676     gint32 tag;
1677     guint32 len;
1678
1679     offset=dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &class, &pc, &tag);
1680     offset=dissect_ber_length(actx->pinfo, tree, tvb, offset, &len, &ind);
1681     end_offset=offset+len;
1682
1683     if( (class!=BER_CLASS_UNI)
1684         ||(tag!=BER_UNI_TAG_OCTETSTRING) ){
1685         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);
1686         return end_offset;
1687     }
1688
1689
1690     next_tvb = tvb_new_subset(tvb,offset,len,len);
1691
1692     if ( curr_info.par && curr_info.par->dissector) {
1693         curr_info.par->dissector(tree, next_tvb, actx->pinfo, *(curr_info.par->hfid), &curr_info, curr_info.par->data);
1694     }
1695
1696     return end_offset;
1697 }
1698
1699 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_) {
1700     tvbuff_t *next_tvb;
1701     guint32 param_id = 0xffffffff;
1702     const h248_pkg_param_t* evtpar;
1703     const gchar* strval;
1704     proto_item* pi;
1705
1706     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &next_tvb);
1707     pi = actx->created_item;
1708
1709     if (next_tvb) {
1710         switch(tvb_length(next_tvb)) {
1711             case 4: param_id = tvb_get_ntohl(next_tvb,0); break;
1712             case 3: param_id = tvb_get_ntoh24(next_tvb,0); break;
1713             case 2: param_id = tvb_get_ntohs(next_tvb,0); break;
1714             case 1: param_id = tvb_get_guint8(next_tvb,0); break;
1715             default: break;
1716         }
1717     }
1718
1719
1720     curr_info.par = &no_param;
1721
1722     if (curr_info.evt && curr_info.evt->parameters) {
1723         for(evtpar = curr_info.evt->parameters; evtpar->hfid; evtpar++) {
1724             if (evtpar->id == param_id) {
1725                 curr_info.par = evtpar;
1726                 break;
1727             }
1728         }
1729     } else {
1730         curr_info.par = &no_param;
1731     }
1732
1733     if (curr_info.evt && curr_info.evt->param_names && ( strval = match_strval(param_id, curr_info.evt->param_names) )) {
1734         strval = ep_strdup_printf("%s (%d)",strval,param_id);
1735     } else {
1736         strval = ep_strdup_printf("Unknown (%d)",param_id);
1737     }
1738
1739     proto_item_set_text(pi,"Parameter: %s", strval);
1740
1741
1742     return offset;
1743 }
1744
1745 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_) {
1746     tvbuff_t *next_tvb;
1747     int end_offset;
1748     gint8 class;
1749     gboolean pc, ind;
1750     gint32 tag;
1751     guint32 len;
1752
1753     offset=dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &class, &pc, &tag);
1754     offset=dissect_ber_length(actx->pinfo, tree, tvb, offset, &len, &ind);
1755     end_offset=offset+len;
1756
1757     if( (class!=BER_CLASS_UNI)
1758         ||(tag!=BER_UNI_TAG_OCTETSTRING) ){
1759         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);
1760         return end_offset;
1761     }
1762
1763
1764     next_tvb = tvb_new_subset(tvb,offset,len,len);
1765
1766     if ( curr_info.par && curr_info.par->dissector) {
1767         curr_info.par->dissector(tree, next_tvb, actx->pinfo, *(curr_info.par->hfid), &curr_info, curr_info.par->data);
1768     }
1769
1770     return end_offset;
1771 }
1772
1773 static int dissect_h248_MtpAddress(gboolean implicit_tag, tvbuff_t *tvb, int offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
1774     tvbuff_t *new_tvb;
1775     proto_tree *mtp_tree=NULL;
1776     guint32 val;
1777     int i, len, old_offset;
1778
1779     old_offset=offset;
1780     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
1781
1782     if (new_tvb) {
1783         /* this field is either 2 or 4 bytes  so just read it into an integer */
1784         val=0;
1785         len=tvb_length(new_tvb);
1786         for(i=0;i<len;i++){
1787             val= (val<<8)|tvb_get_guint8(new_tvb, i);
1788         }
1789
1790         /* do the prettification */
1791         proto_item_append_text(actx->created_item, "  NI = %d, PC = %d ( %d-%d )", val&0x03,val>>2,val&0x03,val>>2);
1792         if(tree){
1793             mtp_tree = proto_item_add_subtree(actx->created_item, ett_mtpaddress);
1794         }
1795         proto_tree_add_uint(mtp_tree, hf_h248_mtpaddress_ni, tvb, old_offset, offset-old_offset, val&0x03);
1796         proto_tree_add_uint(mtp_tree, hf_h248_mtpaddress_pc, tvb, old_offset, offset-old_offset, val>>2);
1797     }
1798
1799     return offset;
1800 }
1801
1802 #define H248_TAP() do { if (keep_persistent_data && curr_info.cmd) tap_queue_packet(h248_tap, actx->pinfo, curr_info.cmd); } while(0)
1803
1804
1805 /*--- Included file: packet-h248-fn.c ---*/
1806 #line 1 "../../asn1/h248/packet-h248-fn.c"
1807 /*--- Cyclic dependencies ---*/
1808
1809 /* SecondEventsDescriptor -> SecondEventsDescriptor/eventList -> SecondRequestedEvent -> SecondRequestedActions -> NotifyBehaviour -> RegulatedEmbeddedDescriptor -> SecondEventsDescriptor */
1810 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_);
1811
1812
1813
1814
1815 static int
1816 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_) {
1817   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1818                                        NULL);
1819
1820   return offset;
1821 }
1822
1823
1824
1825 static int
1826 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_) {
1827   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1828                                        NULL);
1829
1830   return offset;
1831 }
1832
1833
1834
1835 static int
1836 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_) {
1837   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1838                                        NULL);
1839
1840   return offset;
1841 }
1842
1843
1844 static const ber_sequence_t AuthenticationHeader_sequence[] = {
1845   { &hf_h248_secParmIndex   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SecurityParmIndex },
1846   { &hf_h248_seqNum         , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SequenceNum },
1847   { &hf_h248_ad             , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_AuthData },
1848   { NULL, 0, 0, 0, NULL }
1849 };
1850
1851 static int
1852 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_) {
1853   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1854                                    AuthenticationHeader_sequence, hf_index, ett_h248_AuthenticationHeader);
1855
1856   return offset;
1857 }
1858
1859
1860
1861 static int
1862 dissect_h248_T_version(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1863 #line 97 "../../asn1/h248/h248.cnf"
1864           offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1865                                                 &h248_version);
1866
1867
1868
1869   return offset;
1870 }
1871
1872
1873
1874 static int
1875 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_) {
1876   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1877                                        NULL);
1878
1879   return offset;
1880 }
1881
1882
1883
1884 static int
1885 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_) {
1886   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1887                                                 NULL);
1888
1889   return offset;
1890 }
1891
1892
1893 static const ber_sequence_t IP4Address_sequence[] = {
1894   { &hf_h248_iP4Address     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_OCTET_STRING_SIZE_4 },
1895   { &hf_h248_portNumber     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
1896   { NULL, 0, 0, 0, NULL }
1897 };
1898
1899 static int
1900 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_) {
1901   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1902                                    IP4Address_sequence, hf_index, ett_h248_IP4Address);
1903
1904   return offset;
1905 }
1906
1907
1908
1909 static int
1910 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_) {
1911   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1912                                        NULL);
1913
1914   return offset;
1915 }
1916
1917
1918 static const ber_sequence_t IP6Address_sequence[] = {
1919   { &hf_h248_iP6Address     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_OCTET_STRING_SIZE_16 },
1920   { &hf_h248_portNumber     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
1921   { NULL, 0, 0, 0, NULL }
1922 };
1923
1924 static int
1925 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_) {
1926   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1927                                    IP6Address_sequence, hf_index, ett_h248_IP6Address);
1928
1929   return offset;
1930 }
1931
1932
1933
1934 static int
1935 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_) {
1936   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
1937                                             actx, tree, tvb, offset, hf_index,
1938                                             NULL);
1939
1940   return offset;
1941 }
1942
1943
1944 static const ber_sequence_t DomainName_sequence[] = {
1945   { &hf_h248_domName        , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IA5String },
1946   { &hf_h248_portNumber     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
1947   { NULL, 0, 0, 0, NULL }
1948 };
1949
1950 static int
1951 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_) {
1952   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1953                                    DomainName_sequence, hf_index, ett_h248_DomainName);
1954
1955   return offset;
1956 }
1957
1958
1959
1960 static int
1961 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_) {
1962   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
1963                                             actx, tree, tvb, offset, hf_index,
1964                                             NULL);
1965
1966   return offset;
1967 }
1968
1969
1970
1971 static const value_string h248_MId_vals[] = {
1972   {   0, "ip4Address" },
1973   {   1, "ip6Address" },
1974   {   2, "domainName" },
1975   {   3, "deviceName" },
1976   {   4, "mtpAddress" },
1977   { 0, NULL }
1978 };
1979
1980 static const ber_choice_t MId_choice[] = {
1981   {   0, &hf_h248_ip4Address     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IP4Address },
1982   {   1, &hf_h248_ip6Address     , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IP6Address },
1983   {   2, &hf_h248_domainName     , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_DomainName },
1984   {   3, &hf_h248_deviceName     , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_PathName },
1985   {   4, &hf_h248_mtpAddress     , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_MtpAddress },
1986   { 0, NULL, 0, 0, 0, NULL }
1987 };
1988
1989 static int
1990 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_) {
1991   offset = dissect_ber_choice(actx, tree, tvb, offset,
1992                                  MId_choice, hf_index, ett_h248_MId,
1993                                  NULL);
1994
1995   return offset;
1996 }
1997
1998
1999
2000
2001 static int
2002 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_) {
2003 #line 291 "../../asn1/h248/h248.cnf"
2004     offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_h248_error_code, &error_code);
2005     expert_add_info_format(actx->pinfo, actx->created_item, PI_RESPONSE_CODE, PI_WARN, "Errored Command");
2006
2007     if (curr_info.cmd) {
2008         gcp_cmd_set_error(curr_info.cmd,error_code);
2009     } else if (curr_info.trx) {
2010         gcp_trx_set_error(curr_info.trx,error_code);
2011     }
2012
2013     return offset;
2014
2015
2016   return offset;
2017 }
2018
2019
2020
2021 static int
2022 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_) {
2023   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
2024                                             actx, tree, tvb, offset, hf_index,
2025                                             NULL);
2026
2027   return offset;
2028 }
2029
2030
2031 static const ber_sequence_t ErrorDescriptor_sequence[] = {
2032   { &hf_h248_errorCode      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_errorCode },
2033   { &hf_h248_errorText      , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ErrorText },
2034   { NULL, 0, 0, 0, NULL }
2035 };
2036
2037 static int
2038 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_) {
2039   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2040                                    ErrorDescriptor_sequence, hf_index, ett_h248_ErrorDescriptor);
2041
2042   return offset;
2043 }
2044
2045
2046
2047 static int
2048 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_) {
2049   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2050                                                 NULL);
2051
2052   return offset;
2053 }
2054
2055
2056
2057 static int
2058 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_) {
2059 #line 101 "../../asn1/h248/h248.cnf"
2060     guint32 trx_id = 0;
2061         offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
2062     curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_REQUEST, keep_persistent_data);
2063     error_code = 0;
2064
2065
2066   return offset;
2067 }
2068
2069
2070
2071
2072 static int
2073 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_) {
2074 #line 126 "../../asn1/h248/h248.cnf"
2075     guint32 ctx_id = 0;
2076         offset = dissect_h248_ctx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &ctx_id);
2077     curr_info.ctx = gcp_ctx(curr_info.msg,curr_info.trx,ctx_id,keep_persistent_data);
2078     curr_info.cmd = NULL;
2079     curr_info.term = NULL;
2080
2081
2082   return offset;
2083 }
2084
2085
2086
2087 static int
2088 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_) {
2089   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2090                                                 NULL);
2091
2092   return offset;
2093 }
2094
2095
2096
2097 static int
2098 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_) {
2099   offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
2100
2101   return offset;
2102 }
2103
2104
2105
2106 static int
2107 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_) {
2108 #line 309 "../../asn1/h248/h248.cnf"
2109     tvbuff_t* new_tvb;
2110     offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
2111     tree = proto_item_add_subtree(actx->created_item,ett_wildcard);
2112     proto_tree_add_item(tree,hf_h248_term_wild_type,new_tvb,0,1,FALSE);
2113     proto_tree_add_item(tree,hf_h248_term_wild_level,new_tvb,0,1,FALSE);
2114     proto_tree_add_item(tree,hf_h248_term_wild_position,new_tvb,0,1,FALSE);
2115
2116     wild_term = tvb_get_guint8(new_tvb,0) & 0x80 ? GCP_WILDCARD_CHOOSE : GCP_WILDCARD_ALL;
2117     /* limitation: assume only one wildcard is used */
2118     wild_card = tvb_get_guint8(new_tvb,0);
2119
2120
2121
2122   return offset;
2123 }
2124
2125
2126 static const ber_sequence_t SEQUENCE_OF_WildcardField_sequence_of[1] = {
2127   { &hf_h248_wildcard_item  , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_WildcardField },
2128 };
2129
2130 static int
2131 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_) {
2132   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2133                                       SEQUENCE_OF_WildcardField_sequence_of, hf_index, ett_h248_SEQUENCE_OF_WildcardField);
2134
2135   return offset;
2136 }
2137
2138
2139
2140 static int
2141 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_) {
2142 #line 323 "../../asn1/h248/h248.cnf"
2143         tvbuff_t* new_tvb;
2144         offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
2145
2146         if (new_tvb) {
2147                 curr_info.term->len = tvb_length(new_tvb);
2148                 curr_info.term->type = 0; /* unknown */
2149
2150                 if (curr_info.term->len) {
2151                         curr_info.term->buffer = ep_tvb_memdup(new_tvb,0,curr_info.term->len);
2152                         curr_info.term->str = bytes_to_str(curr_info.term->buffer,curr_info.term->len);
2153                 }
2154
2155                 curr_info.term = gcp_cmd_add_term(curr_info.msg, curr_info.trx, curr_info.cmd, curr_info.term, wild_term, keep_persistent_data);
2156
2157                 if (h248_term_handle) {
2158                     actx->pinfo->private_data = &wild_card;
2159                         call_dissector(h248_term_handle, new_tvb, actx->pinfo, tree);
2160                         wild_card = 0xFF;
2161                 }
2162         } else {
2163                 curr_info.term->len = 0;
2164                 curr_info.term->buffer = (guint8*)ep_strdup("");
2165                 curr_info.term->str = ep_strdup("?");
2166         }
2167
2168
2169   return offset;
2170 }
2171
2172
2173 static const ber_sequence_t TerminationID_sequence[] = {
2174   { &hf_h248_wildcard       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_WildcardField },
2175   { &hf_h248_terminationId  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_T_terminationId },
2176   { NULL, 0, 0, 0, NULL }
2177 };
2178
2179 static int
2180 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_) {
2181 #line 304 "../../asn1/h248/h248.cnf"
2182     curr_info.term = ep_new0(gcp_term_t);
2183     wild_term = GCP_WILDCARD_NONE;
2184
2185   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2186                                    TerminationID_sequence, hf_index, ett_h248_TerminationID);
2187
2188   return offset;
2189 }
2190
2191
2192 static const value_string h248_T_topologyDirection_vals[] = {
2193   {   0, "bothway" },
2194   {   1, "isolate" },
2195   {   2, "oneway" },
2196   { 0, NULL }
2197 };
2198
2199
2200 static int
2201 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_) {
2202   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2203                                   NULL);
2204
2205   return offset;
2206 }
2207
2208
2209
2210 static int
2211 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_) {
2212   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2213                                                 NULL);
2214
2215   return offset;
2216 }
2217
2218
2219 static const value_string h248_T_topologyDirectionExtension_vals[] = {
2220   {   0, "onewayexternal" },
2221   {   1, "onewayboth" },
2222   { 0, NULL }
2223 };
2224
2225
2226 static int
2227 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_) {
2228   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2229                                   NULL);
2230
2231   return offset;
2232 }
2233
2234
2235 static const ber_sequence_t TopologyRequest_sequence[] = {
2236   { &hf_h248_terminationFrom, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
2237   { &hf_h248_terminationTo  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
2238   { &hf_h248_topologyDirection, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_topologyDirection },
2239   { &hf_h248_streamID       , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
2240   { &hf_h248_topologyDirectionExtension, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_topologyDirectionExtension },
2241   { NULL, 0, 0, 0, NULL }
2242 };
2243
2244 static int
2245 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_) {
2246   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2247                                    TopologyRequest_sequence, hf_index, ett_h248_TopologyRequest);
2248
2249   return offset;
2250 }
2251
2252
2253 static const ber_sequence_t T_topologyReq_sequence_of[1] = {
2254   { &hf_h248_topologyReq_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TopologyRequest },
2255 };
2256
2257 static int
2258 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_) {
2259 #line 209 "../../asn1/h248/h248.cnf"
2260       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_TOPOLOGY_REQ,offset,keep_persistent_data);
2261       H248_TAP();
2262
2263   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2264                                       T_topologyReq_sequence_of, hf_index, ett_h248_T_topologyReq);
2265
2266 #line 213 "../../asn1/h248/h248.cnf"
2267       curr_info.cmd = NULL;
2268
2269   return offset;
2270 }
2271
2272
2273
2274 static int
2275 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_) {
2276   offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
2277
2278   return offset;
2279 }
2280
2281
2282
2283
2284 static int
2285 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_) {
2286   offset = dissect_h248_PkgdName(implicit_tag, tvb, offset, actx, tree, hf_index);
2287
2288   return offset;
2289 }
2290
2291
2292
2293 static const ber_sequence_t SEQUENCE_OF_PropertyID_sequence_of[1] = {
2294   { &hf_h248_propertyParamValue_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyID },
2295 };
2296
2297 static int
2298 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_) {
2299   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2300                                       SEQUENCE_OF_PropertyID_sequence_of, hf_index, ett_h248_SEQUENCE_OF_PropertyID);
2301
2302   return offset;
2303 }
2304
2305
2306 static const value_string h248_Relation_vals[] = {
2307   {   0, "greaterThan" },
2308   {   1, "smallerThan" },
2309   {   2, "unequalTo" },
2310   { 0, NULL }
2311 };
2312
2313
2314 static int
2315 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_) {
2316   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2317                                   NULL);
2318
2319   return offset;
2320 }
2321
2322
2323 static const value_string h248_PropParm_extraInfo_vals[] = {
2324   {   0, "relation" },
2325   {   1, "range" },
2326   {   2, "sublist" },
2327   { 0, NULL }
2328 };
2329
2330 static const ber_choice_t PropParm_extraInfo_choice[] = {
2331   {   0, &hf_h248_relation       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Relation },
2332   {   1, &hf_h248_range          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2333   {   2, &hf_h248_sublist        , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2334   { 0, NULL, 0, 0, 0, NULL }
2335 };
2336
2337 static int
2338 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_) {
2339   offset = dissect_ber_choice(actx, tree, tvb, offset,
2340                                  PropParm_extraInfo_choice, hf_index, ett_h248_PropParm_extraInfo,
2341                                  NULL);
2342
2343   return offset;
2344 }
2345
2346
2347 static const ber_sequence_t PropertyParm_sequence[] = {
2348   { &hf_h248_propertyName   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PropertyName },
2349   { &hf_h248_propertyParamValue, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyID },
2350   { &hf_h248_propParm_extraInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_PropParm_extraInfo },
2351   { NULL, 0, 0, 0, NULL }
2352 };
2353
2354 static int
2355 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_) {
2356 #line 416 "../../asn1/h248/h248.cnf"
2357 /* H248 v1 support */
2358         if (h248_version >1) {
2359                   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2360                                    PropertyParm_sequence, hf_index, ett_h248_PropertyParm);
2361
2362 } else {
2363                 offset = dissect_h248_PropertyParmV1( implicit_tag, tvb, offset, actx, tree, hf_index);
2364 }
2365
2366
2367   return offset;
2368 }
2369
2370
2371 static const ber_sequence_t SEQUENCE_OF_PropertyParm_sequence_of[1] = {
2372   { &hf_h248_contextProp_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyParm },
2373 };
2374
2375 static int
2376 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_) {
2377   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2378                                       SEQUENCE_OF_PropertyParm_sequence_of, hf_index, ett_h248_SEQUENCE_OF_PropertyParm);
2379
2380   return offset;
2381 }
2382
2383
2384
2385 static int
2386 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_) {
2387   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2388                                                 NULL);
2389
2390   return offset;
2391 }
2392
2393
2394 static const ber_sequence_t SEQUENCE_OF_ContextIDinList_sequence_of[1] = {
2395   { &hf_h248_contextList_item, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_h248_ContextIDinList },
2396 };
2397
2398 static int
2399 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_) {
2400   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2401                                       SEQUENCE_OF_ContextIDinList_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ContextIDinList);
2402
2403   return offset;
2404 }
2405
2406
2407 static const ber_sequence_t ContextRequest_sequence[] = {
2408   { &hf_h248_priority       , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_15 },
2409   { &hf_h248_emergency      , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2410   { &hf_h248_topologyReq    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_topologyReq },
2411   { &hf_h248_iepscallind_BOOL, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_Iepscallind_BOOL },
2412   { &hf_h248_contextProp    , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
2413   { &hf_h248_contextList    , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ContextIDinList },
2414   { NULL, 0, 0, 0, NULL }
2415 };
2416
2417 static int
2418 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_) {
2419   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2420                                    ContextRequest_sequence, hf_index, ett_h248_ContextRequest);
2421
2422   return offset;
2423 }
2424
2425
2426
2427 static int
2428 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_) {
2429   offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
2430
2431   return offset;
2432 }
2433
2434
2435 static const ber_sequence_t IndAudPropertyParm_sequence[] = {
2436   { &hf_h248_name           , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
2437   { &hf_h248_propertyParms  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_PropertyParm },
2438   { NULL, 0, 0, 0, NULL }
2439 };
2440
2441 static int
2442 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_) {
2443   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2444                                    IndAudPropertyParm_sequence, hf_index, ett_h248_IndAudPropertyParm);
2445
2446   return offset;
2447 }
2448
2449
2450 static const ber_sequence_t SEQUENCE_OF_IndAudPropertyParm_sequence_of[1] = {
2451   { &hf_h248_contextPropAud_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_IndAudPropertyParm },
2452 };
2453
2454 static int
2455 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_) {
2456   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2457                                       SEQUENCE_OF_IndAudPropertyParm_sequence_of, hf_index, ett_h248_SEQUENCE_OF_IndAudPropertyParm);
2458
2459   return offset;
2460 }
2461
2462
2463 static const value_string h248_SelectLogic_vals[] = {
2464   {   0, "andAUDITSelect" },
2465   {   1, "orAUDITSelect" },
2466   { 0, NULL }
2467 };
2468
2469 static const ber_choice_t SelectLogic_choice[] = {
2470   {   0, &hf_h248_andAUDITSelect , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
2471   {   1, &hf_h248_orAUDITSelect  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
2472   { 0, NULL, 0, 0, 0, NULL }
2473 };
2474
2475 static int
2476 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_) {
2477   offset = dissect_ber_choice(actx, tree, tvb, offset,
2478                                  SelectLogic_choice, hf_index, ett_h248_SelectLogic,
2479                                  NULL);
2480
2481   return offset;
2482 }
2483
2484
2485 static const ber_sequence_t ContextAttrAuditRequest_sequence[] = {
2486   { &hf_h248_topology       , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
2487   { &hf_h248_cAAREmergency  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
2488   { &hf_h248_cAARPriority   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
2489   { &hf_h248_iepscallind    , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
2490   { &hf_h248_contextPropAud , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAudPropertyParm },
2491   { &hf_h248_selectpriority , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_15 },
2492   { &hf_h248_selectemergency, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2493   { &hf_h248_selectiepscallind, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2494   { &hf_h248_selectLogic    , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_SelectLogic },
2495   { NULL, 0, 0, 0, NULL }
2496 };
2497
2498 static int
2499 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_) {
2500   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2501                                    ContextAttrAuditRequest_sequence, hf_index, ett_h248_ContextAttrAuditRequest);
2502
2503   return offset;
2504 }
2505
2506
2507
2508 static int
2509 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_) {
2510 #line 217 "../../asn1/h248/h248.cnf"
2511       curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_CTX_ATTR_AUDIT_REQ,offset,keep_persistent_data);
2512       H248_TAP();
2513
2514   offset = dissect_h248_ContextAttrAuditRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
2515
2516 #line 221 "../../asn1/h248/h248.cnf"
2517       curr_info.cmd = NULL;
2518
2519   return offset;
2520 }
2521
2522
2523 static const ber_sequence_t TerminationIDList_sequence_of[1] = {
2524   { &hf_h248_TerminationIDList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TerminationID },
2525 };
2526
2527 static int
2528 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_) {
2529   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2530                                       TerminationIDList_sequence_of, hf_index, ett_h248_TerminationIDList);
2531
2532   return offset;
2533 }
2534
2535
2536 static const value_string h248_EventBufferControl_vals[] = {
2537   {   0, "off" },
2538   {   1, "lockStep" },
2539   { 0, NULL }
2540 };
2541
2542
2543 static int
2544 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_) {
2545   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2546                                   NULL);
2547
2548   return offset;
2549 }
2550
2551
2552 static const value_string h248_ServiceState_vals[] = {
2553   {   0, "test" },
2554   {   1, "outOfSvc" },
2555   {   2, "inSvc" },
2556   { 0, NULL }
2557 };
2558
2559
2560 static int
2561 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_) {
2562   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2563                                   NULL);
2564
2565   return offset;
2566 }
2567
2568
2569 static const ber_sequence_t TerminationStateDescriptor_sequence[] = {
2570   { &hf_h248_propertyParms_01, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
2571   { &hf_h248_tSEventBufferControl, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_EventBufferControl },
2572   { &hf_h248_serviceState   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ServiceState },
2573   { NULL, 0, 0, 0, NULL }
2574 };
2575
2576 static int
2577 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_) {
2578   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2579                                    TerminationStateDescriptor_sequence, hf_index, ett_h248_TerminationStateDescriptor);
2580
2581   return offset;
2582 }
2583
2584
2585 static const value_string h248_StreamMode_vals[] = {
2586   {   0, "sendOnly" },
2587   {   1, "recvOnly" },
2588   {   2, "sendRecv" },
2589   {   3, "inactive" },
2590   {   4, "loopBack" },
2591   { 0, NULL }
2592 };
2593
2594
2595 static int
2596 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_) {
2597   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2598                                   NULL);
2599
2600   return offset;
2601 }
2602
2603
2604 static const ber_sequence_t LocalControlDescriptor_sequence[] = {
2605   { &hf_h248_streamMode     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamMode },
2606   { &hf_h248_reserveValue   , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2607   { &hf_h248_reserveGroup   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
2608   { &hf_h248_propertyParms_01, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
2609   { NULL, 0, 0, 0, NULL }
2610 };
2611
2612 static int
2613 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_) {
2614   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2615                                    LocalControlDescriptor_sequence, hf_index, ett_h248_LocalControlDescriptor);
2616
2617   return offset;
2618 }
2619
2620
2621 static const ber_sequence_t PropertyGroup_sequence_of[1] = {
2622   { &hf_h248_PropertyGroup_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyParm },
2623 };
2624
2625 static int
2626 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_) {
2627   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2628                                       PropertyGroup_sequence_of, hf_index, ett_h248_PropertyGroup);
2629
2630   return offset;
2631 }
2632
2633
2634 static const ber_sequence_t SEQUENCE_OF_PropertyGroup_sequence_of[1] = {
2635   { &hf_h248_propGrps_item  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyGroup },
2636 };
2637
2638 static int
2639 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_) {
2640   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2641                                       SEQUENCE_OF_PropertyGroup_sequence_of, hf_index, ett_h248_SEQUENCE_OF_PropertyGroup);
2642
2643   return offset;
2644 }
2645
2646
2647 static const ber_sequence_t LocalRemoteDescriptor_sequence[] = {
2648   { &hf_h248_propGrps       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyGroup },
2649   { NULL, 0, 0, 0, NULL }
2650 };
2651
2652 static int
2653 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_) {
2654   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2655                                    LocalRemoteDescriptor_sequence, hf_index, ett_h248_LocalRemoteDescriptor);
2656
2657   return offset;
2658 }
2659
2660
2661
2662 static int
2663 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_) {
2664   offset = dissect_h248_PkgdName(implicit_tag, tvb, offset, actx, tree, hf_index);
2665
2666   return offset;
2667 }
2668
2669
2670
2671 static int
2672 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_) {
2673   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2674                                        NULL);
2675
2676   return offset;
2677 }
2678
2679
2680 static const ber_sequence_t Value_sequence_of[1] = {
2681   { &hf_h248_Value_item     , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_OCTET_STRING },
2682 };
2683
2684 static int
2685 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_) {
2686   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2687                                       Value_sequence_of, hf_index, ett_h248_Value);
2688
2689   return offset;
2690 }
2691
2692
2693
2694 static int
2695 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_) {
2696   offset = dissect_h248_Value(implicit_tag, tvb, offset, actx, tree, hf_index);
2697
2698   return offset;
2699 }
2700
2701
2702 static const ber_sequence_t StatisticsParameter_sequence[] = {
2703   { &hf_h248_statName       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StatName },
2704   { &hf_h248_statValue      , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StatValue },
2705   { NULL, 0, 0, 0, NULL }
2706 };
2707
2708 static int
2709 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_) {
2710   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2711                                    StatisticsParameter_sequence, hf_index, ett_h248_StatisticsParameter);
2712
2713   return offset;
2714 }
2715
2716
2717 static const ber_sequence_t StatisticsDescriptor_sequence_of[1] = {
2718   { &hf_h248_StatisticsDescriptor_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_StatisticsParameter },
2719 };
2720
2721 static int
2722 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_) {
2723   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2724                                       StatisticsDescriptor_sequence_of, hf_index, ett_h248_StatisticsDescriptor);
2725
2726   return offset;
2727 }
2728
2729
2730 static const ber_sequence_t StreamParms_sequence[] = {
2731   { &hf_h248_localControlDescriptor, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_LocalControlDescriptor },
2732   { &hf_h248_localDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_LocalRemoteDescriptor },
2733   { &hf_h248_remoteDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_LocalRemoteDescriptor },
2734   { &hf_h248_statisticsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StatisticsDescriptor },
2735   { NULL, 0, 0, 0, NULL }
2736 };
2737
2738 static int
2739 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_) {
2740   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2741                                    StreamParms_sequence, hf_index, ett_h248_StreamParms);
2742
2743   return offset;
2744 }
2745
2746
2747 static const ber_sequence_t StreamDescriptor_sequence[] = {
2748   { &hf_h248_streamID       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
2749   { &hf_h248_streamParms    , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_StreamParms },
2750   { NULL, 0, 0, 0, NULL }
2751 };
2752
2753 static int
2754 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_) {
2755   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2756                                    StreamDescriptor_sequence, hf_index, ett_h248_StreamDescriptor);
2757
2758   return offset;
2759 }
2760
2761
2762 static const ber_sequence_t SEQUENCE_OF_StreamDescriptor_sequence_of[1] = {
2763   { &hf_h248_mediaDescriptorMultiStream_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_StreamDescriptor },
2764 };
2765
2766 static int
2767 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_) {
2768   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2769                                       SEQUENCE_OF_StreamDescriptor_sequence_of, hf_index, ett_h248_SEQUENCE_OF_StreamDescriptor);
2770
2771   return offset;
2772 }
2773
2774
2775 static const value_string h248_T_streams_vals[] = {
2776   {   0, "oneStream" },
2777   {   1, "multiStream" },
2778   { 0, NULL }
2779 };
2780
2781 static const ber_choice_t T_streams_choice[] = {
2782   {   0, &hf_h248_mediaDescriptorOneStream, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StreamParms },
2783   {   1, &hf_h248_mediaDescriptorMultiStream, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_StreamDescriptor },
2784   { 0, NULL, 0, 0, 0, NULL }
2785 };
2786
2787 static int
2788 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_) {
2789   offset = dissect_ber_choice(actx, tree, tvb, offset,
2790                                  T_streams_choice, hf_index, ett_h248_T_streams,
2791                                  NULL);
2792
2793   return offset;
2794 }
2795
2796
2797 static const ber_sequence_t MediaDescriptor_sequence[] = {
2798   { &hf_h248_termStateDescr , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TerminationStateDescriptor },
2799   { &hf_h248_streams        , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_streams },
2800   { NULL, 0, 0, 0, NULL }
2801 };
2802
2803 static int
2804 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_) {
2805   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2806                                    MediaDescriptor_sequence, hf_index, ett_h248_MediaDescriptor);
2807
2808   return offset;
2809 }
2810
2811
2812 static const value_string h248_ModemType_vals[] = {
2813   {   0, "v18" },
2814   {   1, "v22" },
2815   {   2, "v22bis" },
2816   {   3, "v32" },
2817   {   4, "v32bis" },
2818   {   5, "v34" },
2819   {   6, "v90" },
2820   {   7, "v91" },
2821   {   8, "synchISDN" },
2822   { 0, NULL }
2823 };
2824
2825
2826 static int
2827 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_) {
2828   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2829                                   NULL);
2830
2831   return offset;
2832 }
2833
2834
2835 static const ber_sequence_t SEQUENCE_OF_ModemType_sequence_of[1] = {
2836   { &hf_h248_mtl_item       , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_h248_ModemType },
2837 };
2838
2839 static int
2840 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_) {
2841   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2842                                       SEQUENCE_OF_ModemType_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ModemType);
2843
2844   return offset;
2845 }
2846
2847
2848
2849 static int
2850 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_) {
2851   offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
2852
2853   return offset;
2854 }
2855
2856
2857
2858 static int
2859 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_) {
2860   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2861                                                 NULL);
2862
2863   return offset;
2864 }
2865
2866
2867 static const ber_sequence_t H221NonStandard_sequence[] = {
2868   { &hf_h248_t35CountryCode1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_255 },
2869   { &hf_h248_t35CountryCode2, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_255 },
2870   { &hf_h248_t35Extension   , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_255 },
2871   { &hf_h248_manufacturerCode, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
2872   { NULL, 0, 0, 0, NULL }
2873 };
2874
2875 static int
2876 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_) {
2877   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2878                                    H221NonStandard_sequence, hf_index, ett_h248_H221NonStandard);
2879
2880   return offset;
2881 }
2882
2883
2884
2885 static int
2886 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_) {
2887   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
2888                                             actx, tree, tvb, offset, hf_index,
2889                                             NULL);
2890
2891   return offset;
2892 }
2893
2894
2895 static const value_string h248_NonStandardIdentifier_vals[] = {
2896   {   0, "object" },
2897   {   1, "h221NonStandard" },
2898   {   2, "experimental" },
2899   { 0, NULL }
2900 };
2901
2902 static const ber_choice_t NonStandardIdentifier_choice[] = {
2903   {   0, &hf_h248_object         , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_OBJECT_IDENTIFIER },
2904   {   1, &hf_h248_h221NonStandard, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_H221NonStandard },
2905   {   2, &hf_h248_experimental   , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_IA5String_SIZE_8 },
2906   { 0, NULL, 0, 0, 0, NULL }
2907 };
2908
2909 static int
2910 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_) {
2911   offset = dissect_ber_choice(actx, tree, tvb, offset,
2912                                  NonStandardIdentifier_choice, hf_index, ett_h248_NonStandardIdentifier,
2913                                  NULL);
2914
2915   return offset;
2916 }
2917
2918
2919 static const ber_sequence_t NonStandardData_sequence[] = {
2920   { &hf_h248_nonStandardIdentifier, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_NonStandardIdentifier },
2921   { &hf_h248_data           , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_OCTET_STRING },
2922   { NULL, 0, 0, 0, NULL }
2923 };
2924
2925 static int
2926 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_) {
2927   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2928                                    NonStandardData_sequence, hf_index, ett_h248_NonStandardData);
2929
2930   return offset;
2931 }
2932
2933
2934 static const ber_sequence_t ModemDescriptor_sequence[] = {
2935   { &hf_h248_mtl            , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ModemType },
2936   { &hf_h248_mpl            , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
2937   { &hf_h248_nonStandardData, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NonStandardData },
2938   { NULL, 0, 0, 0, NULL }
2939 };
2940
2941 static int
2942 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_) {
2943   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2944                                    ModemDescriptor_sequence, hf_index, ett_h248_ModemDescriptor);
2945
2946   return offset;
2947 }
2948
2949
2950 static const value_string h248_MuxType_vals[] = {
2951   {   0, "h221" },
2952   {   1, "h223" },
2953   {   2, "h226" },
2954   {   3, "v76" },
2955   {   4, "nx64k" },
2956   { 0, NULL }
2957 };
2958
2959
2960 static int
2961 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_) {
2962   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2963                                   NULL);
2964
2965   return offset;
2966 }
2967
2968
2969 static const ber_sequence_t SEQUENCE_OF_TerminationID_sequence_of[1] = {
2970   { &hf_h248_termList_item  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TerminationID },
2971 };
2972
2973 static int
2974 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_) {
2975   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2976                                       SEQUENCE_OF_TerminationID_sequence_of, hf_index, ett_h248_SEQUENCE_OF_TerminationID);
2977
2978   return offset;
2979 }
2980
2981
2982 static const ber_sequence_t MuxDescriptor_sequence[] = {
2983   { &hf_h248_muxType        , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_MuxType },
2984   { &hf_h248_termList       , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_TerminationID },
2985   { &hf_h248_nonStandardData, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NonStandardData },
2986   { NULL, 0, 0, 0, NULL }
2987 };
2988
2989 static int
2990 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_) {
2991   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2992                                    MuxDescriptor_sequence, hf_index, ett_h248_MuxDescriptor);
2993
2994   return offset;
2995 }
2996
2997
2998
2999 static int
3000 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_) {
3001   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3002                                                 NULL);
3003
3004   return offset;
3005 }
3006
3007
3008
3009
3010 static int
3011 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_) {
3012   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
3013                                        NULL);
3014
3015   return offset;
3016 }
3017
3018
3019
3020 static int
3021 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_) {
3022   offset = dissect_h248_Name(implicit_tag, tvb, offset, actx, tree, hf_index);
3023
3024   return offset;
3025 }
3026
3027
3028
3029 static int
3030 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_) {
3031   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3032                                                 NULL);
3033
3034   return offset;
3035 }
3036
3037
3038 static const ber_sequence_t DigitMapValue_sequence[] = {
3039   { &hf_h248_startTimer     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
3040   { &hf_h248_shortTimer     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
3041   { &hf_h248_longTimer      , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
3042   { &hf_h248_digitMapBody   , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_IA5String },
3043   { &hf_h248_durationTimer  , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
3044   { NULL, 0, 0, 0, NULL }
3045 };
3046
3047 static int
3048 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_) {
3049   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3050                                    DigitMapValue_sequence, hf_index, ett_h248_DigitMapValue);
3051
3052   return offset;
3053 }
3054
3055
3056 static const value_string h248_EventDM_vals[] = {
3057   {   0, "digitMapName" },
3058   {   1, "digitMapValue" },
3059   { 0, NULL }
3060 };
3061
3062 static const ber_choice_t EventDM_choice[] = {
3063   {   0, &hf_h248_digitMapName   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapName },
3064   {   1, &hf_h248_digitMapValue  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapValue },
3065   { 0, NULL, 0, 0, 0, NULL }
3066 };
3067
3068 static int
3069 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_) {
3070   offset = dissect_ber_choice(actx, tree, tvb, offset,
3071                                  EventDM_choice, hf_index, ett_h248_EventDM,
3072                                  NULL);
3073
3074   return offset;
3075 }
3076
3077
3078
3079 static const value_string h248_SignalType_vals[] = {
3080   {   0, "brief" },
3081   {   1, "onOff" },
3082   {   2, "timeOut" },
3083   { 0, NULL }
3084 };
3085
3086
3087 static int
3088 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_) {
3089   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3090                                   NULL);
3091
3092   return offset;
3093 }
3094
3095
3096 static const asn_namedbit NotifyCompletion_bits[] = {
3097   {  0, &hf_h248_NotifyCompletion_onTimeOut, -1, -1, "onTimeOut", NULL },
3098   {  1, &hf_h248_NotifyCompletion_onInterruptByEvent, -1, -1, "onInterruptByEvent", NULL },
3099   {  2, &hf_h248_NotifyCompletion_onInterruptByNewSignalDescr, -1, -1, "onInterruptByNewSignalDescr", NULL },
3100   {  3, &hf_h248_NotifyCompletion_otherReason, -1, -1, "otherReason", NULL },
3101   {  4, &hf_h248_NotifyCompletion_onIteration, -1, -1, "onIteration", NULL },
3102   { 0, NULL, 0, 0, NULL, NULL }
3103 };
3104
3105 static int
3106 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_) {
3107   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
3108                                     NotifyCompletion_bits, hf_index, ett_h248_NotifyCompletion,
3109                                     NULL);
3110
3111   return offset;
3112 }
3113
3114
3115
3116
3117 static const ber_sequence_t SigParamValues_sequence_of[1] = {
3118   { &hf_h248_SigParamValues_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_SigParamValue },
3119 };
3120
3121 static int
3122 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_) {
3123   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3124                                       SigParamValues_sequence_of, hf_index, ett_h248_SigParamValues);
3125
3126   return offset;
3127 }
3128
3129
3130 static const value_string h248_T_extraInfo_vals[] = {
3131   {   0, "relation" },
3132   {   1, "range" },
3133   {   2, "sublist" },
3134   { 0, NULL }
3135 };
3136
3137 static const ber_choice_t T_extraInfo_choice[] = {
3138   {   0, &hf_h248_relation       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Relation },
3139   {   1, &hf_h248_range          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3140   {   2, &hf_h248_sublist        , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3141   { 0, NULL, 0, 0, 0, NULL }
3142 };
3143
3144 static int
3145 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_) {
3146   offset = dissect_ber_choice(actx, tree, tvb, offset,
3147                                  T_extraInfo_choice, hf_index, ett_h248_T_extraInfo,
3148                                  NULL);
3149
3150   return offset;
3151 }
3152
3153
3154 static const ber_sequence_t SigParameter_sequence[] = {
3155   { &hf_h248_sigParameterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SigParameterName },
3156   { &hf_h248_value          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SigParamValues },
3157   { &hf_h248_extraInfo      , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_extraInfo },
3158   { NULL, 0, 0, 0, NULL }
3159 };
3160
3161 static int
3162 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_) {
3163 #line 406 "../../asn1/h248/h248.cnf"
3164 /* H248 v1 support */
3165         if (h248_version >1) {
3166                   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3167                                    SigParameter_sequence, hf_index, ett_h248_SigParameter);
3168
3169 } else {
3170                 offset = dissect_h248_SigParameterV1( implicit_tag, tvb, offset, actx, tree, hf_index);
3171 }
3172
3173
3174   return offset;
3175 }
3176
3177
3178 static const ber_sequence_t SEQUENCE_OF_SigParameter_sequence_of[1] = {
3179   { &hf_h248_sigParList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_SigParameter },
3180 };
3181
3182 static int
3183 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_) {
3184   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3185                                       SEQUENCE_OF_SigParameter_sequence_of, hf_index, ett_h248_SEQUENCE_OF_SigParameter);
3186
3187   return offset;
3188 }
3189
3190
3191 static const value_string h248_SignalDirection_vals[] = {
3192   {   0, "internal" },
3193   {   1, "external" },
3194   {   2, "both" },
3195   { 0, NULL }
3196 };
3197
3198
3199 static int
3200 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_) {
3201   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3202                                   NULL);
3203
3204   return offset;
3205 }
3206
3207
3208 static const ber_sequence_t Signal_sequence[] = {
3209   { &hf_h248_signalName     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SignalName },
3210   { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3211   { &hf_h248_sigType        , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalType },
3212   { &hf_h248_duration       , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
3213   { &hf_h248_notifyCompletion, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NotifyCompletion },
3214   { &hf_h248_keepActive     , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3215   { &hf_h248_sigParList     , BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_SigParameter },
3216   { &hf_h248_direction      , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalDirection },
3217   { &hf_h248_requestID      , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
3218   { &hf_h248_intersigDelay  , BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
3219   { NULL, 0, 0, 0, NULL }
3220 };
3221
3222 static int
3223 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_) {
3224   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3225                                    Signal_sequence, hf_index, ett_h248_Signal);
3226
3227   return offset;
3228 }
3229
3230
3231 static const ber_sequence_t SEQUENCE_OF_Signal_sequence_of[1] = {
3232   { &hf_h248_signalList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_Signal },
3233 };
3234
3235 static int
3236 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_) {
3237   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3238                                       SEQUENCE_OF_Signal_sequence_of, hf_index, ett_h248_SEQUENCE_OF_Signal);
3239
3240   return offset;
3241 }
3242
3243
3244 static const ber_sequence_t SeqSigList_sequence[] = {
3245   { &hf_h248_id             , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
3246   { &hf_h248_signalList     , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_Signal },
3247   { NULL, 0, 0, 0, NULL }
3248 };
3249
3250 static int
3251 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_) {
3252   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3253                                    SeqSigList_sequence, hf_index, ett_h248_SeqSigList);
3254
3255   return offset;
3256 }
3257
3258
3259 static const value_string h248_SignalRequest_vals[] = {
3260   {   0, "signal" },
3261   {   1, "seqSigList" },
3262   { 0, NULL }
3263 };
3264
3265 static const ber_choice_t SignalRequest_choice[] = {
3266   {   0, &hf_h248_signal         , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Signal },
3267   {   1, &hf_h248_seqSigList     , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SeqSigList },
3268   { 0, NULL, 0, 0, 0, NULL }
3269 };
3270
3271 static int
3272 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_) {
3273   offset = dissect_ber_choice(actx, tree, tvb, offset,
3274                                  SignalRequest_choice, hf_index, ett_h248_SignalRequest,
3275                                  NULL);
3276
3277   return offset;
3278 }
3279
3280
3281 static const ber_sequence_t SignalsDescriptor_sequence_of[1] = {
3282   { &hf_h248_SignalsDescriptor_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_SignalRequest },
3283 };
3284
3285 static int
3286 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_) {
3287   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3288                                       SignalsDescriptor_sequence_of, hf_index, ett_h248_SignalsDescriptor);
3289
3290   return offset;
3291 }
3292
3293
3294 static const ber_sequence_t RegulatedEmbeddedDescriptor_sequence[] = {
3295   { &hf_h248_secondEvent    , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SecondEventsDescriptor },
3296   { &hf_h248_signalsDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
3297   { NULL, 0, 0, 0, NULL }
3298 };
3299
3300 static int
3301 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_) {
3302   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3303                                    RegulatedEmbeddedDescriptor_sequence, hf_index, ett_h248_RegulatedEmbeddedDescriptor);
3304
3305   return offset;
3306 }
3307
3308
3309 static const value_string h248_NotifyBehaviour_vals[] = {
3310   {   0, "notifyImmediate" },
3311   {   1, "notifyRegulated" },
3312   {   2, "neverNotify" },
3313   { 0, NULL }
3314 };
3315
3316 static const ber_choice_t NotifyBehaviour_choice[] = {
3317   {   0, &hf_h248_notifyImmediate, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3318   {   1, &hf_h248_notifyRegulated, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_RegulatedEmbeddedDescriptor },
3319   {   2, &hf_h248_neverNotify    , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3320   { 0, NULL, 0, 0, 0, NULL }
3321 };
3322
3323 static int
3324 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_) {
3325   offset = dissect_ber_choice(actx, tree, tvb, offset,
3326                                  NotifyBehaviour_choice, hf_index, ett_h248_NotifyBehaviour,
3327                                  NULL);
3328
3329   return offset;
3330 }
3331
3332
3333 static const ber_sequence_t SecondRequestedActions_sequence[] = {
3334   { &hf_h248_keepActive     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3335   { &hf_h248_eventDM        , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_EventDM },
3336   { &hf_h248_signalsDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
3337   { &hf_h248_notifyBehaviour, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_NotifyBehaviour },
3338   { &hf_h248_resetEventsDescriptor, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3339   { NULL, 0, 0, 0, NULL }
3340 };
3341
3342 static int
3343 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_) {
3344   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3345                                    SecondRequestedActions_sequence, hf_index, ett_h248_SecondRequestedActions);
3346
3347   return offset;
3348 }
3349
3350
3351
3352
3353 static const ber_sequence_t EventParamValues_sequence_of[1] = {
3354   { &hf_h248_EventParamValues_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_EventParamValue },
3355 };
3356
3357 static int
3358 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_) {
3359   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3360                                       EventParamValues_sequence_of, hf_index, ett_h248_EventParamValues);
3361
3362   return offset;
3363 }
3364
3365
3366 static const value_string h248_EventPar_extraInfo_vals[] = {
3367   {   0, "relation" },
3368   {   1, "range" },
3369   {   2, "sublist" },
3370   { 0, NULL }
3371 };
3372
3373 static const ber_choice_t EventPar_extraInfo_choice[] = {
3374   {   0, &hf_h248_relation       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Relation },
3375   {   1, &hf_h248_range          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3376   {   2, &hf_h248_sublist        , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3377   { 0, NULL, 0, 0, 0, NULL }
3378 };
3379
3380 static int
3381 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_) {
3382   offset = dissect_ber_choice(actx, tree, tvb, offset,
3383                                  EventPar_extraInfo_choice, hf_index, ett_h248_EventPar_extraInfo,
3384                                  NULL);
3385
3386   return offset;
3387 }
3388
3389
3390 static const ber_sequence_t EventParameter_sequence[] = {
3391   { &hf_h248_eventParameterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventParameterName },
3392   { &hf_h248_eventParamValue, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_EventParamValues },
3393   { &hf_h248_eventPar_extraInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_EventPar_extraInfo },
3394   { NULL, 0, 0, 0, NULL }
3395 };
3396
3397 static int
3398 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_) {
3399 #line 397 "../../asn1/h248/h248.cnf"
3400 /* H248 v1 support */
3401         if (h248_version >1) {
3402                   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3403                                    EventParameter_sequence, hf_index, ett_h248_EventParameter);
3404
3405 } else {
3406                 offset = dissect_h248_EventParameterV1( implicit_tag, tvb, offset, actx, tree, hf_index);
3407 }
3408
3409
3410   return offset;
3411 }
3412
3413
3414 static const ber_sequence_t SEQUENCE_OF_EventParameter_sequence_of[1] = {
3415   { &hf_h248_eventParList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_EventParameter },
3416 };
3417
3418 static int
3419 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_) {
3420   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3421                                       SEQUENCE_OF_EventParameter_sequence_of, hf_index, ett_h248_SEQUENCE_OF_EventParameter);
3422
3423   return offset;
3424 }
3425
3426
3427 static const ber_sequence_t SecondRequestedEvent_sequence[] = {
3428   { &hf_h248_pkgdName       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
3429   { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3430   { &hf_h248_secondaryEventAction, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SecondRequestedActions },
3431   { &hf_h248_evParList      , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
3432   { NULL, 0, 0, 0, NULL }
3433 };
3434
3435 static int
3436 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_) {
3437   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3438                                    SecondRequestedEvent_sequence, hf_index, ett_h248_SecondRequestedEvent);
3439
3440   return offset;
3441 }
3442
3443
3444 static const ber_sequence_t SEQUENCE_OF_SecondRequestedEvent_sequence_of[1] = {
3445   { &hf_h248_secondaryEventList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_SecondRequestedEvent },
3446 };
3447
3448 static int
3449 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_) {
3450   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3451                                       SEQUENCE_OF_SecondRequestedEvent_sequence_of, hf_index, ett_h248_SEQUENCE_OF_SecondRequestedEvent);
3452
3453   return offset;
3454 }
3455
3456
3457 static const ber_sequence_t SecondEventsDescriptor_sequence[] = {
3458   { &hf_h248_requestID      , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
3459   { &hf_h248_secondaryEventList, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_SecondRequestedEvent },
3460   { NULL, 0, 0, 0, NULL }
3461 };
3462
3463 static int
3464 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_) {
3465   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3466                                    SecondEventsDescriptor_sequence, hf_index, ett_h248_SecondEventsDescriptor);
3467
3468   return offset;
3469 }
3470
3471
3472 static const ber_sequence_t RequestedActions_sequence[] = {
3473   { &hf_h248_keepActive     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3474   { &hf_h248_eventDM        , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_EventDM },
3475   { &hf_h248_secondEvent    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SecondEventsDescriptor },
3476   { &hf_h248_signalsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
3477   { &hf_h248_notifyBehaviour, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_NotifyBehaviour },
3478   { &hf_h248_resetEventsDescriptor, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3479   { NULL, 0, 0, 0, NULL }
3480 };
3481
3482 static int
3483 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_) {
3484   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3485                                    RequestedActions_sequence, hf_index, ett_h248_RequestedActions);
3486
3487   return offset;
3488 }
3489
3490
3491 static const ber_sequence_t RequestedEvent_sequence[] = {
3492   { &hf_h248_eventName      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventName },
3493   { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3494   { &hf_h248_eventAction    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestedActions },
3495   { &hf_h248_evParList      , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
3496   { NULL, 0, 0, 0, NULL }
3497 };
3498
3499 static int
3500 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_) {
3501   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3502                                    RequestedEvent_sequence, hf_index, ett_h248_RequestedEvent);
3503
3504   return offset;
3505 }
3506
3507
3508 static const ber_sequence_t SEQUENCE_OF_RequestedEvent_sequence_of[1] = {
3509   { &hf_h248_eventList_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_RequestedEvent },
3510 };
3511
3512 static int
3513 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_) {
3514   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3515                                       SEQUENCE_OF_RequestedEvent_sequence_of, hf_index, ett_h248_SEQUENCE_OF_RequestedEvent);
3516
3517   return offset;
3518 }
3519
3520
3521 static const ber_sequence_t EventsDescriptor_sequence[] = {
3522   { &hf_h248_requestID      , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
3523   { &hf_h248_eventList      , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_RequestedEvent },
3524   { NULL, 0, 0, 0, NULL }
3525 };
3526
3527 static int
3528 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_) {
3529   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3530                                    EventsDescriptor_sequence, hf_index, ett_h248_EventsDescriptor);
3531
3532   return offset;
3533 }
3534
3535
3536 static const ber_sequence_t EventSpec_sequence[] = {
3537   { &hf_h248_eventName      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventName },
3538   { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3539   { &hf_h248_eventParList   , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
3540   { NULL, 0, 0, 0, NULL }
3541 };
3542
3543 static int
3544 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_) {
3545   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3546                                    EventSpec_sequence, hf_index, ett_h248_EventSpec);
3547
3548   return offset;
3549 }
3550
3551
3552 static const ber_sequence_t EventBufferDescriptor_sequence_of[1] = {
3553   { &hf_h248_EventBufferDescriptor_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_EventSpec },
3554 };
3555
3556 static int
3557 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_) {
3558   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3559                                       EventBufferDescriptor_sequence_of, hf_index, ett_h248_EventBufferDescriptor);
3560
3561   return offset;
3562 }
3563
3564
3565 static const ber_sequence_t DigitMapDescriptor_sequence[] = {
3566   { &hf_h248_digitMapName   , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_DigitMapName },
3567   { &hf_h248_digitMapValue  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_DigitMapValue },
3568   { NULL, 0, 0, 0, NULL }
3569 };
3570
3571 static int
3572 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_) {
3573   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3574                                    DigitMapDescriptor_sequence, hf_index, ett_h248_DigitMapDescriptor);
3575
3576   return offset;
3577 }
3578
3579
3580 static const asn_namedbit T_auditToken_bits[] = {
3581   {  0, &hf_h248_T_auditToken_muxToken, -1, -1, "muxToken", NULL },
3582   {  1, &hf_h248_T_auditToken_modemToken, -1, -1, "modemToken", NULL },
3583   {  2, &hf_h248_T_auditToken_mediaToken, -1, -1, "mediaToken", NULL },
3584   {  3, &hf_h248_T_auditToken_eventsToken, -1, -1, "eventsToken", NULL },
3585   {  4, &hf_h248_T_auditToken_signalsToken, -1, -1, "signalsToken", NULL },
3586   {  5, &hf_h248_T_auditToken_digitMapToken, -1, -1, "digitMapToken", NULL },
3587   {  6, &hf_h248_T_auditToken_statsToken, -1, -1, "statsToken", NULL },
3588   {  7, &hf_h248_T_auditToken_observedEventsToken, -1, -1, "observedEventsToken", NULL },
3589   {  8, &hf_h248_T_auditToken_packagesToken, -1, -1, "packagesToken", NULL },
3590   {  9, &hf_h248_T_auditToken_eventBufferToken, -1, -1, "eventBufferToken", NULL },
3591   { 0, NULL, 0, 0, NULL, NULL }
3592 };
3593
3594 static int
3595 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_) {
3596   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
3597                                     T_auditToken_bits,