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