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