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 ¶meter_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