1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
4 /* asn2wrs.py -b -q -L -p h248 -c ./h248.cnf -s ./packet-h248-template -D . -O ../.. h248v3.asn h248v1support.asn */
7 * Routines for H.248/MEGACO packet dissection
11 * Luis Ontanon 2005 - Context and Transaction Tracing
13 * Wireshark - Network traffic analyzer
14 * By Gerald Combs <gerald@wireshark.org>
15 * Copyright 1998 Gerald Combs
17 * SPDX-License-Identifier: GPL-2.0-or-later
22 #include <epan/packet.h>
23 #include <epan/exceptions.h>
25 #include <epan/asn1.h>
26 #include <epan/proto_data.h>
27 #include <epan/prefs.h>
28 #include <epan/exported_pdu.h>
29 #include <epan/address_types.h>
30 #include <wsutil/array.h>
31 #include "packet-alcap.h"
32 #include "packet-ber.h"
33 #include "packet-tpkt.h"
34 #include "packet-mtp3.h"
35 #include "packet-h248.h"
37 #define PNAME "H.248 MEGACO"
38 #define PSNAME "H.248"
41 void proto_register_h248(void);
43 /* Initialize the protocol and registered fields */
44 static int proto_h248
;
45 static int hf_248_magic_num
;
46 static int hf_h248_mtpaddress_ni
;
47 static int hf_h248_mtpaddress_pc
;
48 static int hf_h248_pkg_name
;
49 static int hf_248_pkg_param
;
50 static int hf_h248_event_name
;
51 static int hf_h248_signal_name
;
52 static int hf_h248_signal_code
;
53 static int hf_h248_event_code
;
54 static int hf_h248_pkg_bcp_BNCChar_PDU
;
58 static int hf_h248_context_id
;
59 static int hf_h248_term_wild_type
;
60 static int hf_h248_term_wild_level
;
61 static int hf_h248_term_wild_position
;
63 static int hf_h248_no_pkg
;
64 static int hf_h248_no_sig
;
65 static int hf_h248_no_evt
;
66 static int hf_h248_param
;
68 static int hf_h248_serviceChangeReasonStr
;
69 static int hf_h248_transactionId64
;
70 static int hf_h248_context_id64
;
73 static int hf_h248_auditValueReplyV1
;
75 static int hf_h248_authHeader
; /* AuthenticationHeader */
76 static int hf_h248_mess
; /* Message */
77 static int hf_h248_secParmIndex
; /* SecurityParmIndex */
78 static int hf_h248_seqNum
; /* SequenceNum */
79 static int hf_h248_ad
; /* AuthData */
80 static int hf_h248_version
; /* T_version */
81 static int hf_h248_mId
; /* MId */
82 static int hf_h248_messageBody
; /* T_messageBody */
83 static int hf_h248_messageError
; /* ErrorDescriptor */
84 static int hf_h248_transactions
; /* SEQUENCE_OF_Transaction */
85 static int hf_h248_transactions_item
; /* Transaction */
86 static int hf_h248_ip4Address
; /* IP4Address */
87 static int hf_h248_ip6Address
; /* IP6Address */
88 static int hf_h248_domainName
; /* DomainName */
89 static int hf_h248_deviceName
; /* PathName */
90 static int hf_h248_mtpAddress
; /* MtpAddress */
91 static int hf_h248_domName
; /* IA5String */
92 static int hf_h248_portNumber
; /* INTEGER_0_65535 */
93 static int hf_h248_iP4Address
; /* OCTET_STRING_SIZE_4 */
94 static int hf_h248_iP6Address
; /* OCTET_STRING_SIZE_16 */
95 static int hf_h248_transactionRequest
; /* TransactionRequest */
96 static int hf_h248_transactionPending
; /* TransactionPending */
97 static int hf_h248_transactionReply
; /* TransactionReply */
98 static int hf_h248_transactionResponseAck
; /* TransactionResponseAck */
99 static int hf_h248_segmentReply
; /* SegmentReply */
100 static int hf_h248_transactionId
; /* T_transactionId */
101 static int hf_h248_actions
; /* SEQUENCE_OF_ActionRequest */
102 static int hf_h248_actions_item
; /* ActionRequest */
103 static int hf_h248_tpend_transactionId
; /* T_tpend_transactionId */
104 static int hf_h248_trep_transactionId
; /* T_trep_transactionId */
105 static int hf_h248_immAckRequired
; /* NULL */
106 static int hf_h248_transactionResult
; /* T_transactionResult */
107 static int hf_h248_transactionError
; /* ErrorDescriptor */
108 static int hf_h248_actionReplies
; /* SEQUENCE_OF_ActionReply */
109 static int hf_h248_actionReplies_item
; /* ActionReply */
110 static int hf_h248_segmentNumber
; /* SegmentNumber */
111 static int hf_h248_segmentationComplete
; /* NULL */
112 static int hf_h248_seg_rep_transactionId
; /* T_seg_rep_transactionId */
113 static int hf_h248_TransactionResponseAck_item
; /* TransactionAck */
114 static int hf_h248_firstAck
; /* TransactionId */
115 static int hf_h248_lastAck
; /* TransactionId */
116 static int hf_h248_errorCode
; /* T_errorCode */
117 static int hf_h248_errorText
; /* ErrorText */
118 static int hf_h248_contextId
; /* ContextId */
119 static int hf_h248_contextRequest
; /* ContextRequest */
120 static int hf_h248_contextAttrAuditReq
; /* T_contextAttrAuditReq */
121 static int hf_h248_commandRequests
; /* SEQUENCE_OF_CommandRequest */
122 static int hf_h248_commandRequests_item
; /* CommandRequest */
123 static int hf_h248_errorDescriptor
; /* ErrorDescriptor */
124 static int hf_h248_contextReply
; /* ContextRequest */
125 static int hf_h248_commandReply
; /* SEQUENCE_OF_CommandReply */
126 static int hf_h248_commandReply_item
; /* CommandReply */
127 static int hf_h248_priority
; /* INTEGER_0_15 */
128 static int hf_h248_emergency
; /* BOOLEAN */
129 static int hf_h248_topologyReq
; /* T_topologyReq */
130 static int hf_h248_topologyReq_item
; /* TopologyRequest */
131 static int hf_h248_iepscallind_BOOL
; /* Iepscallind_BOOL */
132 static int hf_h248_contextProp
; /* SEQUENCE_OF_PropertyParm */
133 static int hf_h248_contextProp_item
; /* PropertyParm */
134 static int hf_h248_contextList
; /* SEQUENCE_OF_ContextIDinList */
135 static int hf_h248_contextList_item
; /* ContextIDinList */
136 static int hf_h248_topology
; /* NULL */
137 static int hf_h248_cAAREmergency
; /* NULL */
138 static int hf_h248_cAARPriority
; /* NULL */
139 static int hf_h248_iepscallind
; /* NULL */
140 static int hf_h248_contextPropAud
; /* SEQUENCE_OF_IndAudPropertyParm */
141 static int hf_h248_contextPropAud_item
; /* IndAudPropertyParm */
142 static int hf_h248_selectpriority
; /* INTEGER_0_15 */
143 static int hf_h248_selectemergency
; /* BOOLEAN */
144 static int hf_h248_selectiepscallind
; /* BOOLEAN */
145 static int hf_h248_selectLogic
; /* SelectLogic */
146 static int hf_h248_andAUDITSelect
; /* NULL */
147 static int hf_h248_orAUDITSelect
; /* NULL */
148 static int hf_h248_command
; /* Command */
149 static int hf_h248_optional
; /* NULL */
150 static int hf_h248_wildcardReturn
; /* NULL */
151 static int hf_h248_addReq
; /* T_addReq */
152 static int hf_h248_moveReq
; /* T_moveReq */
153 static int hf_h248_modReq
; /* T_modReq */
154 static int hf_h248_subtractReq
; /* T_subtractReq */
155 static int hf_h248_auditCapRequest
; /* T_auditCapRequest */
156 static int hf_h248_auditValueRequest
; /* T_auditValueRequest */
157 static int hf_h248_notifyReq
; /* T_notifyReq */
158 static int hf_h248_serviceChangeReq
; /* ServiceChangeRequest */
159 static int hf_h248_addReply
; /* T_addReply */
160 static int hf_h248_moveReply
; /* T_moveReply */
161 static int hf_h248_modReply
; /* T_modReply */
162 static int hf_h248_subtractReply
; /* T_subtractReply */
163 static int hf_h248_auditCapReply
; /* T_auditCapReply */
164 static int hf_h248_auditValueReply
; /* T_auditValueReply */
165 static int hf_h248_notifyReply
; /* T_notifyReply */
166 static int hf_h248_serviceChangeReply
; /* ServiceChangeReply */
167 static int hf_h248_terminationFrom
; /* TerminationID */
168 static int hf_h248_terminationTo
; /* TerminationID */
169 static int hf_h248_topologyDirection
; /* T_topologyDirection */
170 static int hf_h248_streamID
; /* StreamID */
171 static int hf_h248_topologyDirectionExtension
; /* T_topologyDirectionExtension */
172 static int hf_h248_terminationIDList
; /* TerminationIDList */
173 static int hf_h248_descriptors
; /* SEQUENCE_OF_AmmDescriptor */
174 static int hf_h248_descriptors_item
; /* AmmDescriptor */
175 static int hf_h248_mediaDescriptor
; /* MediaDescriptor */
176 static int hf_h248_modemDescriptor
; /* ModemDescriptor */
177 static int hf_h248_muxDescriptor
; /* MuxDescriptor */
178 static int hf_h248_eventsDescriptor
; /* EventsDescriptor */
179 static int hf_h248_eventBufferDescriptor
; /* EventBufferDescriptor */
180 static int hf_h248_signalsDescriptor
; /* SignalsDescriptor */
181 static int hf_h248_digitMapDescriptor
; /* DigitMapDescriptor */
182 static int hf_h248_auditDescriptor
; /* AuditDescriptor */
183 static int hf_h248_aDstatisticsDescriptor
; /* StatisticsDescriptor */
184 static int hf_h248_terminationAudit
; /* TerminationAudit */
185 static int hf_h248_terminationID
; /* TerminationID */
186 static int hf_h248_contextAuditResult
; /* TerminationIDList */
187 static int hf_h248_error
; /* ErrorDescriptor */
188 static int hf_h248_auditResult
; /* AuditResult */
189 static int hf_h248_auditResultTermList
; /* TermListAuditResult */
190 static int hf_h248_terminationAuditResult
; /* TerminationAudit */
191 static int hf_h248_TerminationAudit_item
; /* AuditReturnParameter */
192 static int hf_h248_observedEventsDescriptor
; /* ObservedEventsDescriptor */
193 static int hf_h248_aRPstatisticsDescriptor
; /* StatisticsDescriptor */
194 static int hf_h248_packagesDescriptor
; /* PackagesDescriptor */
195 static int hf_h248_emptyDescriptors
; /* AuditDescriptor */
196 static int hf_h248_auditToken
; /* T_auditToken */
197 static int hf_h248_auditPropertyToken
; /* SEQUENCE_OF_IndAuditParameter */
198 static int hf_h248_auditPropertyToken_item
; /* IndAuditParameter */
199 static int hf_h248_indaudmediaDescriptor
; /* IndAudMediaDescriptor */
200 static int hf_h248_indaudeventsDescriptor
; /* IndAudEventsDescriptor */
201 static int hf_h248_indaudeventBufferDescriptor
; /* IndAudEventBufferDescriptor */
202 static int hf_h248_indaudsignalsDescriptor
; /* IndAudSignalsDescriptor */
203 static int hf_h248_indauddigitMapDescriptor
; /* IndAudDigitMapDescriptor */
204 static int hf_h248_indaudstatisticsDescriptor
; /* IndAudStatisticsDescriptor */
205 static int hf_h248_indaudpackagesDescriptor
; /* IndAudPackagesDescriptor */
206 static int hf_h248_indAudTerminationStateDescriptor
; /* IndAudTerminationStateDescriptor */
207 static int hf_h248_indAudMediaDescriptorStreams
; /* IndAudMediaDescriptorStreams */
208 static int hf_h248_oneStream
; /* IndAudStreamParms */
209 static int hf_h248_multiStream
; /* SEQUENCE_OF_IndAudStreamDescriptor */
210 static int hf_h248_multiStream_item
; /* IndAudStreamDescriptor */
211 static int hf_h248_indAudStreamParms
; /* IndAudStreamParms */
212 static int hf_h248_iASPLocalControlDescriptor
; /* IndAudLocalControlDescriptor */
213 static int hf_h248_iASPLocalDescriptor
; /* IndAudLocalRemoteDescriptor */
214 static int hf_h248_iASPRemoteDescriptor
; /* IndAudLocalRemoteDescriptor */
215 static int hf_h248_statisticsDescriptor
; /* IndAudStatisticsDescriptor */
216 static int hf_h248_iALCDStreamMode
; /* NULL */
217 static int hf_h248_iALCDReserveValue
; /* NULL */
218 static int hf_h248_iALCDReserveGroup
; /* NULL */
219 static int hf_h248_indAudPropertyParms
; /* SEQUENCE_OF_IndAudPropertyParm */
220 static int hf_h248_indAudPropertyParms_item
; /* IndAudPropertyParm */
221 static int hf_h248_streamModeSel
; /* StreamMode */
222 static int hf_h248_name
; /* PkgdName */
223 static int hf_h248_propertyParms
; /* PropertyParm */
224 static int hf_h248_propGroupID
; /* INTEGER_0_65535 */
225 static int hf_h248_iAPropertyGroup
; /* IndAudPropertyGroup */
226 static int hf_h248_IndAudPropertyGroup_item
; /* IndAudPropertyParm */
227 static int hf_h248_eventBufferControl
; /* NULL */
228 static int hf_h248_iATSDServiceState
; /* NULL */
229 static int hf_h248_serviceStateSel
; /* ServiceState */
230 static int hf_h248_requestID
; /* RequestID */
231 static int hf_h248_iAEDPkgdName
; /* PkgdName */
232 static int hf_h248_iAEBDEventName
; /* PkgdName */
233 static int hf_h248_indAudSignal
; /* IndAudSignal */
234 static int hf_h248_indAudSeqSigList
; /* IndAudSeqSigList */
235 static int hf_h248_id
; /* INTEGER_0_65535 */
236 static int hf_h248_iASignalList
; /* IndAudSignal */
237 static int hf_h248_iASignalName
; /* PkgdName */
238 static int hf_h248_signalRequestID
; /* RequestID */
239 static int hf_h248_digitMapName
; /* DigitMapName */
240 static int hf_h248_iAStatName
; /* PkgdName */
241 static int hf_h248_packageName
; /* Name */
242 static int hf_h248_packageVersion
; /* INTEGER_0_99 */
243 static int hf_h248_requestId
; /* RequestID */
244 static int hf_h248_observedEventLst
; /* SEQUENCE_OF_ObservedEvent */
245 static int hf_h248_observedEventLst_item
; /* ObservedEvent */
246 static int hf_h248_eventName
; /* EventName */
247 static int hf_h248_eventParList
; /* SEQUENCE_OF_EventParameter */
248 static int hf_h248_eventParList_item
; /* EventParameter */
249 static int hf_h248_timeNotation
; /* TimeNotation */
250 static int hf_h248_eventParameterName
; /* EventParameterName */
251 static int hf_h248_eventParamValue
; /* EventParamValues */
252 static int hf_h248_eventPar_extraInfo
; /* EventPar_extraInfo */
253 static int hf_h248_relation
; /* Relation */
254 static int hf_h248_range
; /* BOOLEAN */
255 static int hf_h248_sublist
; /* BOOLEAN */
256 static int hf_h248_EventParamValues_item
; /* EventParamValue */
257 static int hf_h248_serviceChangeParms
; /* ServiceChangeParm */
258 static int hf_h248_serviceChangeResult
; /* ServiceChangeResult */
259 static int hf_h248_serviceChangeResParms
; /* ServiceChangeResParm */
260 static int hf_h248_wildcard
; /* SEQUENCE_OF_WildcardField */
261 static int hf_h248_wildcard_item
; /* WildcardField */
262 static int hf_h248_terminationId
; /* T_terminationId */
263 static int hf_h248_TerminationIDList_item
; /* TerminationID */
264 static int hf_h248_termStateDescr
; /* TerminationStateDescriptor */
265 static int hf_h248_streams
; /* T_streams */
266 static int hf_h248_mediaDescriptorOneStream
; /* StreamParms */
267 static int hf_h248_mediaDescriptorMultiStream
; /* SEQUENCE_OF_StreamDescriptor */
268 static int hf_h248_mediaDescriptorMultiStream_item
; /* StreamDescriptor */
269 static int hf_h248_streamParms
; /* StreamParms */
270 static int hf_h248_localControlDescriptor
; /* LocalControlDescriptor */
271 static int hf_h248_localDescriptor
; /* LocalRemoteDescriptor */
272 static int hf_h248_remoteDescriptor
; /* LocalRemoteDescriptor */
273 static int hf_h248_sPstatisticsDescriptor
; /* StatisticsDescriptor */
274 static int hf_h248_streamMode
; /* StreamMode */
275 static int hf_h248_reserveValue
; /* BOOLEAN */
276 static int hf_h248_reserveGroup
; /* BOOLEAN */
277 static int hf_h248_lCDpropertyParms
; /* SEQUENCE_OF_PropertyParm */
278 static int hf_h248_lCDpropertyParms_item
; /* PropertyParm */
279 static int hf_h248_propertyName
; /* PropertyName */
280 static int hf_h248_propertyParamValue
; /* SEQUENCE_OF_PropertyID */
281 static int hf_h248_propertyParamValue_item
; /* PropertyID */
282 static int hf_h248_propParm_extraInfo
; /* PropParm_extraInfo */
283 static int hf_h248_propGrps
; /* SEQUENCE_OF_PropertyGroup */
284 static int hf_h248_propGrps_item
; /* PropertyGroup */
285 static int hf_h248_PropertyGroup_item
; /* PropertyParm */
286 static int hf_h248_tSDpropertyParms
; /* SEQUENCE_OF_PropertyParm */
287 static int hf_h248_tSDpropertyParms_item
; /* PropertyParm */
288 static int hf_h248_tSEventBufferControl
; /* EventBufferControl */
289 static int hf_h248_serviceState
; /* ServiceState */
290 static int hf_h248_muxType
; /* MuxType */
291 static int hf_h248_termList
; /* SEQUENCE_OF_TerminationID */
292 static int hf_h248_termList_item
; /* TerminationID */
293 static int hf_h248_nonStandardData
; /* NonStandardData */
294 static int hf_h248_eventList
; /* SEQUENCE_OF_RequestedEvent */
295 static int hf_h248_eventList_item
; /* RequestedEvent */
296 static int hf_h248_eventAction
; /* RequestedActions */
297 static int hf_h248_evParList
; /* SEQUENCE_OF_EventParameter */
298 static int hf_h248_evParList_item
; /* EventParameter */
299 static int hf_h248_secondEvent
; /* SecondEventsDescriptor */
300 static int hf_h248_notifyImmediate
; /* NULL */
301 static int hf_h248_notifyRegulated
; /* RegulatedEmbeddedDescriptor */
302 static int hf_h248_neverNotify
; /* NULL */
303 static int hf_h248_keepActive
; /* BOOLEAN */
304 static int hf_h248_eventDM
; /* EventDM */
305 static int hf_h248_notifyBehaviour
; /* NotifyBehaviour */
306 static int hf_h248_resetEventsDescriptor
; /* NULL */
307 static int hf_h248_digitMapValue
; /* DigitMapValue */
308 static int hf_h248_secondaryEventList
; /* SEQUENCE_OF_SecondRequestedEvent */
309 static int hf_h248_secondaryEventList_item
; /* SecondRequestedEvent */
310 static int hf_h248_pkgdName
; /* PkgdName */
311 static int hf_h248_secondaryEventAction
; /* SecondRequestedActions */
312 static int hf_h248_EventBufferDescriptor_item
; /* EventSpec */
313 static int hf_h248_SignalsDescriptor_item
; /* SignalRequest */
314 static int hf_h248_signal
; /* Signal */
315 static int hf_h248_seqSigList
; /* SeqSigList */
316 static int hf_h248_signalList
; /* SEQUENCE_OF_Signal */
317 static int hf_h248_signalList_item
; /* Signal */
318 static int hf_h248_signalName
; /* SignalName */
319 static int hf_h248_sigType
; /* SignalType */
320 static int hf_h248_duration
; /* INTEGER_0_65535 */
321 static int hf_h248_notifyCompletion
; /* NotifyCompletion */
322 static int hf_h248_sigParList
; /* SEQUENCE_OF_SigParameter */
323 static int hf_h248_sigParList_item
; /* SigParameter */
324 static int hf_h248_direction
; /* SignalDirection */
325 static int hf_h248_intersigDelay
; /* INTEGER_0_65535 */
326 static int hf_h248_sigParameterName
; /* SigParameterName */
327 static int hf_h248_value
; /* SigParamValues */
328 static int hf_h248_extraInfo
; /* T_extraInfo */
329 static int hf_h248_SigParamValues_item
; /* SigParamValue */
330 static int hf_h248_mtl
; /* SEQUENCE_OF_ModemType */
331 static int hf_h248_mtl_item
; /* ModemType */
332 static int hf_h248_mpl
; /* SEQUENCE_OF_PropertyParm */
333 static int hf_h248_mpl_item
; /* PropertyParm */
334 static int hf_h248_startTimer
; /* INTEGER_0_99 */
335 static int hf_h248_shortTimer
; /* INTEGER_0_99 */
336 static int hf_h248_longTimer
; /* INTEGER_0_99 */
337 static int hf_h248_digitMapBody
; /* IA5String */
338 static int hf_h248_durationTimer
; /* INTEGER_0_99 */
339 static int hf_h248_serviceChangeMethod
; /* ServiceChangeMethod */
340 static int hf_h248_serviceChangeAddress
; /* ServiceChangeAddress */
341 static int hf_h248_serviceChangeVersion
; /* INTEGER_0_99 */
342 static int hf_h248_serviceChangeProfile
; /* ServiceChangeProfile */
343 static int hf_h248_serviceChangeReason
; /* SCreasonValue */
344 static int hf_h248_serviceChangeDelay
; /* INTEGER_0_4294967295 */
345 static int hf_h248_serviceChangeMgcId
; /* MId */
346 static int hf_h248_timeStamp
; /* TimeNotation */
347 static int hf_h248_serviceChangeInfo
; /* AuditDescriptor */
348 static int hf_h248_serviceChangeIncompleteFlag
; /* NULL */
349 static int hf_h248_SCreasonValue_item
; /* SCreasonValueOctetStr */
350 static int hf_h248_timestamp
; /* TimeNotation */
351 static int hf_h248_profileName
; /* IA5String_SIZE_1_67 */
352 static int hf_h248_PackagesDescriptor_item
; /* PackagesItem */
353 static int hf_h248_StatisticsDescriptor_item
; /* StatisticsParameter */
354 static int hf_h248_statName
; /* StatName */
355 static int hf_h248_statValue
; /* StatValue */
356 static int hf_h248_nonStandardIdentifier
; /* NonStandardIdentifier */
357 static int hf_h248_data
; /* OCTET_STRING */
358 static int hf_h248_object
; /* OBJECT_IDENTIFIER */
359 static int hf_h248_h221NonStandard
; /* H221NonStandard */
360 static int hf_h248_experimental
; /* IA5String_SIZE_8 */
361 static int hf_h248_t35CountryCode1
; /* INTEGER_0_255 */
362 static int hf_h248_t35CountryCode2
; /* INTEGER_0_255 */
363 static int hf_h248_t35Extension
; /* INTEGER_0_255 */
364 static int hf_h248_manufacturerCode
; /* INTEGER_0_65535 */
365 static int hf_h248_date
; /* IA5String_SIZE_8 */
366 static int hf_h248_time
; /* IA5String_SIZE_8 */
367 static int hf_h248_Value_item
; /* OCTET_STRING */
368 static int hf_h248_audit_result
; /* AuditResultV1 */
369 static int hf_h248_contectAuditResult
; /* TerminationID */
370 static int hf_h248_eventParamterName
; /* EventParameterName */
371 static int hf_h248_event_param_value
; /* EventParamValueV1 */
372 static int hf_h248_sig_param_value
; /* SigParamValueV1 */
374 static int hf_h248_T_auditToken_muxToken
;
375 static int hf_h248_T_auditToken_modemToken
;
376 static int hf_h248_T_auditToken_mediaToken
;
377 static int hf_h248_T_auditToken_eventsToken
;
378 static int hf_h248_T_auditToken_signalsToken
;
379 static int hf_h248_T_auditToken_digitMapToken
;
380 static int hf_h248_T_auditToken_statsToken
;
381 static int hf_h248_T_auditToken_observedEventsToken
;
382 static int hf_h248_T_auditToken_packagesToken
;
383 static int hf_h248_T_auditToken_eventBufferToken
;
384 static int hf_h248_NotifyCompletion_onTimeOut
;
385 static int hf_h248_NotifyCompletion_onInterruptByEvent
;
386 static int hf_h248_NotifyCompletion_onInterruptByNewSignalDescr
;
387 static int hf_h248_NotifyCompletion_otherReason
;
388 static int hf_h248_NotifyCompletion_onIteration
;
390 /* Initialize the subtree pointers */
392 static int ett_mtpaddress
;
393 static int ett_packagename
;
394 static int ett_codec
;
395 static int ett_wildcard
;
397 static int ett_h248_no_pkg
;
398 static int ett_h248_no_sig
;
399 static int ett_h248_no_evt
;
403 static gcp_hf_ett_t h248_arrel
;
405 static int exported_pdu_tap
= -1;
408 static int ett_h248_MegacoMessage
;
409 static int ett_h248_AuthenticationHeader
;
410 static int ett_h248_Message
;
411 static int ett_h248_T_messageBody
;
412 static int ett_h248_SEQUENCE_OF_Transaction
;
413 static int ett_h248_MId
;
414 static int ett_h248_DomainName
;
415 static int ett_h248_IP4Address
;
416 static int ett_h248_IP6Address
;
417 static int ett_h248_Transaction
;
418 static int ett_h248_TransactionRequest
;
419 static int ett_h248_SEQUENCE_OF_ActionRequest
;
420 static int ett_h248_TransactionPending
;
421 static int ett_h248_TransactionReply
;
422 static int ett_h248_T_transactionResult
;
423 static int ett_h248_SEQUENCE_OF_ActionReply
;
424 static int ett_h248_SegmentReply
;
425 static int ett_h248_TransactionResponseAck
;
426 static int ett_h248_TransactionAck
;
427 static int ett_h248_ErrorDescriptor
;
428 static int ett_h248_ActionRequest
;
429 static int ett_h248_SEQUENCE_OF_CommandRequest
;
430 static int ett_h248_ActionReply
;
431 static int ett_h248_SEQUENCE_OF_CommandReply
;
432 static int ett_h248_ContextRequest
;
433 static int ett_h248_T_topologyReq
;
434 static int ett_h248_SEQUENCE_OF_PropertyParm
;
435 static int ett_h248_SEQUENCE_OF_ContextIDinList
;
436 static int ett_h248_ContextAttrAuditRequest
;
437 static int ett_h248_SEQUENCE_OF_IndAudPropertyParm
;
438 static int ett_h248_SelectLogic
;
439 static int ett_h248_CommandRequest
;
440 static int ett_h248_Command
;
441 static int ett_h248_CommandReply
;
442 static int ett_h248_TopologyRequest
;
443 static int ett_h248_AmmRequest
;
444 static int ett_h248_SEQUENCE_OF_AmmDescriptor
;
445 static int ett_h248_AmmDescriptor
;
446 static int ett_h248_AmmsReply
;
447 static int ett_h248_SubtractRequest
;
448 static int ett_h248_AuditRequest
;
449 static int ett_h248_AuditReply
;
450 static int ett_h248_AuditResult
;
451 static int ett_h248_TermListAuditResult
;
452 static int ett_h248_TerminationAudit
;
453 static int ett_h248_AuditReturnParameter
;
454 static int ett_h248_AuditDescriptor
;
455 static int ett_h248_T_auditToken
;
456 static int ett_h248_SEQUENCE_OF_IndAuditParameter
;
457 static int ett_h248_IndAuditParameter
;
458 static int ett_h248_IndAudMediaDescriptor
;
459 static int ett_h248_IndAudMediaDescriptorStreams
;
460 static int ett_h248_SEQUENCE_OF_IndAudStreamDescriptor
;
461 static int ett_h248_IndAudStreamDescriptor
;
462 static int ett_h248_IndAudStreamParms
;
463 static int ett_h248_IndAudLocalControlDescriptor
;
464 static int ett_h248_IndAudPropertyParm
;
465 static int ett_h248_IndAudLocalRemoteDescriptor
;
466 static int ett_h248_IndAudPropertyGroup
;
467 static int ett_h248_IndAudTerminationStateDescriptor
;
468 static int ett_h248_IndAudEventsDescriptor
;
469 static int ett_h248_IndAudEventBufferDescriptor
;
470 static int ett_h248_IndAudSignalsDescriptor
;
471 static int ett_h248_IndAudSeqSigList
;
472 static int ett_h248_IndAudSignal
;
473 static int ett_h248_IndAudDigitMapDescriptor
;
474 static int ett_h248_IndAudStatisticsDescriptor
;
475 static int ett_h248_IndAudPackagesDescriptor
;
476 static int ett_h248_NotifyRequest
;
477 static int ett_h248_NotifyReply
;
478 static int ett_h248_ObservedEventsDescriptor
;
479 static int ett_h248_SEQUENCE_OF_ObservedEvent
;
480 static int ett_h248_ObservedEvent
;
481 static int ett_h248_SEQUENCE_OF_EventParameter
;
482 static int ett_h248_EventParameter
;
483 static int ett_h248_EventPar_extraInfo
;
484 static int ett_h248_EventParamValues
;
485 static int ett_h248_ServiceChangeRequest
;
486 static int ett_h248_ServiceChangeReply
;
487 static int ett_h248_ServiceChangeResult
;
488 static int ett_h248_TerminationID
;
489 static int ett_h248_SEQUENCE_OF_WildcardField
;
490 static int ett_h248_TerminationIDList
;
491 static int ett_h248_MediaDescriptor
;
492 static int ett_h248_T_streams
;
493 static int ett_h248_SEQUENCE_OF_StreamDescriptor
;
494 static int ett_h248_StreamDescriptor
;
495 static int ett_h248_StreamParms
;
496 static int ett_h248_LocalControlDescriptor
;
497 static int ett_h248_PropertyParm
;
498 static int ett_h248_SEQUENCE_OF_PropertyID
;
499 static int ett_h248_PropParm_extraInfo
;
500 static int ett_h248_LocalRemoteDescriptor
;
501 static int ett_h248_SEQUENCE_OF_PropertyGroup
;
502 static int ett_h248_PropertyGroup
;
503 static int ett_h248_TerminationStateDescriptor
;
504 static int ett_h248_MuxDescriptor
;
505 static int ett_h248_SEQUENCE_OF_TerminationID
;
506 static int ett_h248_EventsDescriptor
;
507 static int ett_h248_SEQUENCE_OF_RequestedEvent
;
508 static int ett_h248_RequestedEvent
;
509 static int ett_h248_RegulatedEmbeddedDescriptor
;
510 static int ett_h248_NotifyBehaviour
;
511 static int ett_h248_RequestedActions
;
512 static int ett_h248_EventDM
;
513 static int ett_h248_SecondEventsDescriptor
;
514 static int ett_h248_SEQUENCE_OF_SecondRequestedEvent
;
515 static int ett_h248_SecondRequestedEvent
;
516 static int ett_h248_SecondRequestedActions
;
517 static int ett_h248_EventBufferDescriptor
;
518 static int ett_h248_EventSpec
;
519 static int ett_h248_SignalsDescriptor
;
520 static int ett_h248_SignalRequest
;
521 static int ett_h248_SeqSigList
;
522 static int ett_h248_SEQUENCE_OF_Signal
;
523 static int ett_h248_Signal
;
524 static int ett_h248_SEQUENCE_OF_SigParameter
;
525 static int ett_h248_NotifyCompletion
;
526 static int ett_h248_SigParameter
;
527 static int ett_h248_T_extraInfo
;
528 static int ett_h248_SigParamValues
;
529 static int ett_h248_ModemDescriptor
;
530 static int ett_h248_SEQUENCE_OF_ModemType
;
531 static int ett_h248_DigitMapDescriptor
;
532 static int ett_h248_DigitMapValue
;
533 static int ett_h248_ServiceChangeParm
;
534 static int ett_h248_SCreasonValue
;
535 static int ett_h248_ServiceChangeAddress
;
536 static int ett_h248_ServiceChangeResParm
;
537 static int ett_h248_ServiceChangeProfile
;
538 static int ett_h248_PackagesDescriptor
;
539 static int ett_h248_PackagesItem
;
540 static int ett_h248_StatisticsDescriptor
;
541 static int ett_h248_StatisticsParameter
;
542 static int ett_h248_NonStandardData
;
543 static int ett_h248_NonStandardIdentifier
;
544 static int ett_h248_H221NonStandard
;
545 static int ett_h248_TimeNotation
;
546 static int ett_h248_Value
;
547 static int ett_h248_AuditReplyV1
;
548 static int ett_h248_AuditResultV1
;
549 static int ett_h248_EventParameterV1
;
550 static int ett_h248_SigParameterV1
;
552 static expert_field ei_h248_errored_command
;
553 static expert_field ei_h248_transactionId64
;
554 static expert_field ei_h248_context_id64
;
555 static expert_field ei_h248_octet_string_expected
;
557 static dissector_table_t subdissector_table
;
559 static int ss7pc_address_type
= -1;
561 /* Gateway Control Protocol -- Context Tracking */
563 const value_string gcp_cmd_type
[] = {
564 { GCP_CMD_NONE
, "NoCommand"},
565 { GCP_CMD_ADD_REQ
, "addReq"},
566 { GCP_CMD_MOVE_REQ
, "moveReq"},
567 { GCP_CMD_MOD_REQ
, "modReq"},
568 { GCP_CMD_SUB_REQ
, "subtractReq"},
569 { GCP_CMD_AUDITCAP_REQ
, "auditCapRequest"},
570 { GCP_CMD_AUDITVAL_REQ
, "auditValueRequest"},
571 { GCP_CMD_NOTIFY_REQ
, "notifyReq"},
572 { GCP_CMD_SVCCHG_REQ
, "serviceChangeReq"},
573 { GCP_CMD_TOPOLOGY_REQ
, "topologyReq"},
574 { GCP_CMD_CTX_ATTR_AUDIT_REQ
, "ctxAttrAuditReq"},
575 { GCP_CMD_ADD_REPLY
, "addReply"},
576 { GCP_CMD_MOVE_REPLY
, "moveReply"},
577 { GCP_CMD_MOD_REPLY
, "modReply"},
578 { GCP_CMD_SUB_REPLY
, "subtractReply"},
579 { GCP_CMD_AUDITCAP_REPLY
, "auditCapReply"},
580 { GCP_CMD_AUDITVAL_REPLY
, "auditValReply"},
581 { GCP_CMD_NOTIFY_REPLY
, "notifyReply"},
582 { GCP_CMD_SVCCHG_REPLY
, "serviceChangeReply"},
583 { GCP_CMD_TOPOLOGY_REPLY
, "topologyReply"},
587 const value_string gcp_term_types
[] = {
588 { GCP_TERM_TYPE_AAL1
, "aal1" },
589 { GCP_TERM_TYPE_AAL2
, "aal2" },
590 { GCP_TERM_TYPE_AAL1_STRUCT
, "aal1struct" },
591 { GCP_TERM_TYPE_IP_RTP
, "ipRtp" },
592 { GCP_TERM_TYPE_TDM
, "tdm" },
596 static wmem_tree_t
* gcp_msgs
;
597 static wmem_tree_t
* gcp_trxs
;
598 static wmem_tree_t
* gcp_ctxs_by_trx
;
599 static wmem_tree_t
* gcp_ctxs
;
601 gcp_msg_t
* gcp_msg(packet_info
* pinfo
, int o
, bool keep_persistent_data
) {
603 uint32_t framenum
= (uint32_t)pinfo
->num
;
604 uint32_t offset
= (uint32_t)o
;
605 address
* src
= &(pinfo
->src
);
606 address
* dst
= &(pinfo
->dst
);
610 if (keep_persistent_data
) {
611 wmem_tree_key_t key
[3];
614 key
[0].key
= &(framenum
);
616 key
[1].key
= &offset
;
620 if (( m
= (gcp_msg_t
*)wmem_tree_lookup32_array(gcp_msgs
,key
) )) {
624 m
= wmem_new(wmem_file_scope(), gcp_msg_t
);
625 m
->framenum
= framenum
;
626 m
->frametime
= pinfo
->abs_ts
;
628 m
->committed
= false;
630 wmem_tree_insert32_array(gcp_msgs
,key
,m
);
633 m
= wmem_new0(pinfo
->pool
, gcp_msg_t
);
634 m
->framenum
= framenum
;
636 m
->committed
= false;
639 if (cmp_address(src
, dst
) < 0) {
647 switch(lo_addr
->type
) {
653 memcpy((uint8_t*)&(m
->hi_addr
),hi_addr
->data
,4);
654 memcpy((uint8_t*)&(m
->lo_addr
),lo_addr
->data
,4);
657 if (lo_addr
->type
== ss7pc_address_type
) {
658 m
->hi_addr
= mtp3_pc_hash((const mtp3_addr_pc_t
*)hi_addr
->data
);
659 m
->lo_addr
= mtp3_pc_hash((const mtp3_addr_pc_t
*)lo_addr
->data
);
662 /* XXX: heuristic and error prone */
663 m
->hi_addr
= g_str_hash(address_to_str(pinfo
->pool
, hi_addr
));
664 m
->lo_addr
= g_str_hash(address_to_str(pinfo
->pool
, lo_addr
));
672 gcp_trx_t
* gcp_trx(gcp_msg_t
* m
,uint32_t t_id
, gcp_trx_type_t type
, packet_info
*pinfo
, bool keep_persistent_data
) {
674 gcp_trx_msg_t
* trxmsg
;
676 if ( !m
) return NULL
;
678 if (keep_persistent_data
) {
681 for ( trxmsg
= m
->trxs
; trxmsg
; trxmsg
= trxmsg
->next
) {
682 if (trxmsg
->trx
&& trxmsg
->trx
->id
== t_id
) {
686 DISSECTOR_ASSERT_NOT_REACHED();
688 wmem_tree_key_t key
[4];
691 key
[0].key
= &(m
->hi_addr
);
693 key
[1].key
= &(m
->lo_addr
);
695 key
[2].key
= &(t_id
);
699 trxmsg
= wmem_new(wmem_file_scope(), gcp_trx_msg_t
);
700 t
= (gcp_trx_t
*)wmem_tree_lookup32_array(gcp_trxs
,key
);
703 t
= wmem_new(wmem_file_scope(), gcp_trx_t
);
711 wmem_tree_insert32_array(gcp_trxs
,key
,t
);
714 /* XXX: request, reply and ack + point to frames where they are */
716 case GCP_TRX_PENDING
:
725 t
= wmem_new(pinfo
->pool
, gcp_trx_t
);
726 trxmsg
= wmem_new(pinfo
->pool
, gcp_trx_msg_t
);
735 DISSECTOR_ASSERT(trxmsg
);
739 trxmsg
->last
= trxmsg
;
742 m
->trxs
->last
= m
->trxs
->last
->next
= trxmsg
;
751 gcp_ctx_t
* gcp_ctx(gcp_msg_t
* m
, gcp_trx_t
* t
, uint32_t c_id
, packet_info
*pinfo
, bool persistent
) {
752 gcp_ctx_t
* context
= NULL
;
753 gcp_ctx_t
** context_p
= NULL
;
755 if ( !m
|| !t
) return NULL
;
759 wmem_tree_key_t ctx_key
[4];
760 wmem_tree_key_t trx_key
[4];
762 ctx_key
[0].length
= 1;
763 ctx_key
[0].key
= &(m
->hi_addr
);
764 ctx_key
[1].length
= 1;
765 ctx_key
[1].key
= &(m
->lo_addr
);
766 ctx_key
[2].length
= 1;
767 ctx_key
[2].key
= &(c_id
);
768 ctx_key
[3].length
= 0;
769 ctx_key
[3].key
= NULL
;
771 trx_key
[0].length
= 1;
772 trx_key
[0].key
= &(m
->hi_addr
);
773 trx_key
[1].length
= 1;
774 trx_key
[1].key
= &(m
->lo_addr
);
775 trx_key
[2].length
= 1;
776 trx_key
[2].key
= &(t
->id
);
777 trx_key
[3].length
= 0;
778 trx_key
[3].key
= NULL
;
781 if (( context
= (gcp_ctx_t
*)wmem_tree_lookup32_array(gcp_ctxs_by_trx
,trx_key
) )) {
783 } if ((context_p
= (gcp_ctx_t
**)wmem_tree_lookup32_array(gcp_ctxs
,ctx_key
))) {
784 context
= *context_p
;
787 if (context
->initial
->framenum
<= m
->framenum
) {
790 } while(( context
= context
->prev
));
792 DISSECTOR_ASSERT(! "a context should exist");
795 if (c_id
== CHOOSE_CONTEXT
) {
796 if (! ( context
= (gcp_ctx_t
*)wmem_tree_lookup32_array(gcp_ctxs_by_trx
,trx_key
))) {
797 context
= wmem_new(wmem_file_scope(), gcp_ctx_t
);
798 context
->initial
= m
;
799 context
->cmds
= NULL
;
801 context
->terms
.last
= &(context
->terms
);
802 context
->terms
.next
= NULL
;
803 context
->terms
.term
= NULL
;
805 wmem_tree_insert32_array(gcp_ctxs_by_trx
,trx_key
,context
);
808 if (( context
= (gcp_ctx_t
*)wmem_tree_lookup32_array(gcp_ctxs_by_trx
,trx_key
) )) {
809 if (( context_p
= (gcp_ctx_t
**)wmem_tree_lookup32_array(gcp_ctxs
,ctx_key
) )) {
810 if (context
!= *context_p
) {
811 if(context
->id
!= CHOOSE_CONTEXT
) {
812 context
= wmem_new(wmem_file_scope(), gcp_ctx_t
);
814 context
->initial
= m
;
816 context
->cmds
= NULL
;
817 context
->terms
.last
= &(context
->terms
);
818 context
->terms
.next
= NULL
;
819 context
->terms
.term
= NULL
;
821 context
->prev
= *context_p
;
822 *context_p
= context
;
825 context_p
= wmem_new(wmem_file_scope(), gcp_ctx_t
*);
826 *context_p
= context
;
827 context
->initial
= m
;
829 wmem_tree_insert32_array(gcp_ctxs
,ctx_key
,context_p
);
831 } else if (! ( context_p
= (gcp_ctx_t
**)wmem_tree_lookup32_array(gcp_ctxs
,ctx_key
) )) {
832 context
= wmem_new(wmem_file_scope(), gcp_ctx_t
);
833 context
->initial
= m
;
835 context
->cmds
= NULL
;
836 context
->terms
.last
= &(context
->terms
);
837 context
->terms
.next
= NULL
;
838 context
->terms
.term
= NULL
;
840 context_p
= wmem_new(wmem_file_scope(), gcp_ctx_t
*);
841 *context_p
= context
;
842 wmem_tree_insert32_array(gcp_ctxs
,ctx_key
,context_p
);
844 context
= *context_p
;
849 context
= wmem_new(pinfo
->pool
, gcp_ctx_t
);
850 context
->initial
= m
;
851 context
->cmds
= NULL
;
853 context
->terms
.last
= &(context
->terms
);
854 context
->terms
.next
= NULL
;
855 context
->terms
.term
= NULL
;
861 gcp_cmd_t
* gcp_cmd(gcp_msg_t
* m
, gcp_trx_t
* t
, gcp_ctx_t
* c
, gcp_cmd_type_t type
, unsigned offset
, packet_info
*pinfo
, bool persistent
) {
863 gcp_cmd_msg_t
* cmdtrx
;
864 gcp_cmd_msg_t
* cmdctx
;
866 if ( !m
|| !t
|| !c
) return NULL
;
870 DISSECTOR_ASSERT(t
->cmds
!= NULL
);
872 for (cmdctx
= t
->cmds
; cmdctx
; cmdctx
= cmdctx
->next
) {
874 if (cmd
->msg
== m
&& cmd
->offset
== offset
) {
879 DISSECTOR_ASSERT(!"called for a command that does not exist!");
883 cmd
= wmem_new(wmem_file_scope(), gcp_cmd_t
);
884 cmdtrx
= wmem_new(wmem_file_scope(), gcp_cmd_msg_t
);
885 cmdctx
= wmem_new(wmem_file_scope(), gcp_cmd_msg_t
);
888 cmd
= wmem_new(pinfo
->pool
, gcp_cmd_t
);
889 cmdtrx
= wmem_new(pinfo
->pool
, gcp_cmd_msg_t
);
890 cmdctx
= wmem_new(pinfo
->pool
, gcp_cmd_msg_t
);
894 cmd
->offset
= offset
;
895 cmd
->terms
.term
= NULL
;
896 cmd
->terms
.next
= NULL
;
897 cmd
->terms
.last
= &(cmd
->terms
);
900 if ((type
!= GCP_CMD_NONE
) && (!persistent
)){
901 cmd
->str
= val_to_str_const(type
, gcp_cmd_type
, "Unknown");
907 cmdctx
->cmd
= cmdtrx
->cmd
= cmd
;
908 cmdctx
->next
= cmdtrx
->next
= NULL
;
909 cmdctx
->last
= cmdtrx
->last
= NULL
;
912 t
->cmds
->last
->next
= cmdtrx
;
913 t
->cmds
->last
= cmdtrx
;
916 t
->cmds
->last
= cmdtrx
;
920 c
->cmds
->last
->next
= cmdctx
;
921 c
->cmds
->last
= cmdctx
;
924 c
->cmds
->last
= cmdctx
;
930 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
, bool persistent
) {
934 static gcp_term_t all_terms
= {"$",(const uint8_t*)"",1,GCP_TERM_TYPE_UNKNOWN
,NULL
,NULL
,NULL
};
936 if ( !c
) return NULL
;
938 if ( wildcard
== GCP_WILDCARD_CHOOSE
) {
943 if ( c
->msg
->committed
) {
944 if (wildcard
== GCP_WILDCARD_ALL
) {
945 for (ct
= c
->ctx
->terms
.next
; ct
; ct
= ct
->next
) {
946 /* XXX not handling more wildcards in one msg */
947 if ( ct
->term
->start
== m
) {
953 for (ct
= c
->ctx
->terms
.next
; ct
; ct
= ct
->next
) {
954 if ( g_str_equal(ct
->term
->str
,t
->str
) ) {
962 for (ct
= c
->ctx
->terms
.next
; ct
; ct
= ct
->next
) {
963 if ( g_str_equal(ct
->term
->str
,t
->str
) || ct
->term
->start
== m
) {
970 if (wildcard
== GCP_WILDCARD_ALL
) {
971 ct
= wmem_new(wmem_file_scope(), gcp_terms_t
);
973 ct
->term
= wmem_new0(wmem_file_scope(), gcp_term_t
);
977 ct
->term
->buffer
= NULL
;
980 c
->terms
.last
= c
->terms
.last
->next
= ct
;
982 ct2
= wmem_new0(wmem_file_scope(), gcp_terms_t
);
983 ct2
->term
= ct
->term
;
985 c
->ctx
->terms
.last
->next
= ct2
;
986 c
->ctx
->terms
.last
= ct2
;
990 for (ct
= c
->ctx
->terms
.next
; ct
; ct
= ct
->next
) {
991 /* XXX not handling more wildcards in one msg */
992 if ( ct
->term
->buffer
== NULL
&& tr
->cmds
->cmd
->msg
== ct
->term
->start
) {
993 ct
->term
->str
= wmem_strdup(wmem_file_scope(), t
->str
);
994 ct
->term
->buffer
= (const uint8_t *)wmem_memdup(wmem_file_scope(), t
->buffer
,t
->len
);
995 ct
->term
->len
= t
->len
;
997 ct2
= wmem_new0(wmem_file_scope(), gcp_terms_t
);
998 ct2
->term
= ct
->term
;
1000 c
->terms
.last
= c
->terms
.last
->next
= ct2
;
1005 if ( g_str_equal(ct
->term
->str
,t
->str
) ) {
1006 ct2
= wmem_new0(wmem_file_scope(), gcp_terms_t
);
1007 ct2
->term
= ct
->term
;
1009 c
->terms
.last
= c
->terms
.last
->next
= ct2
;
1015 ct
= wmem_new(wmem_file_scope(), gcp_terms_t
);
1017 ct
->term
= wmem_new0(wmem_file_scope(), gcp_term_t
);
1019 ct
->term
->start
= m
;
1020 ct
->term
->str
= wmem_strdup(wmem_file_scope(), t
->str
);
1021 ct
->term
->buffer
= (const uint8_t *)wmem_memdup(wmem_file_scope(), t
->buffer
,t
->len
);
1022 ct
->term
->len
= t
->len
;
1024 ct2
= wmem_new0(wmem_file_scope(), gcp_terms_t
);
1025 ct2
->term
= ct
->term
;
1027 c
->terms
.last
= c
->terms
.last
->next
= ct2
;
1029 ct2
= wmem_new0(wmem_file_scope(), gcp_terms_t
);
1030 ct2
->term
= ct
->term
;
1032 c
->ctx
->terms
.last
= c
->ctx
->terms
.last
->next
= ct2
;
1037 ct2
= wmem_new0(wmem_file_scope(), gcp_terms_t
);
1038 ct2
->term
= ct
->term
;
1040 c
->terms
.last
= c
->terms
.last
->next
= ct2
;
1044 DISSECTOR_ASSERT_NOT_REACHED();
1047 ct
= wmem_new(pinfo
->pool
, gcp_terms_t
);
1050 c
->terms
.last
= c
->terms
.last
->next
= ct
;
1057 static const char* gcp_cmd_to_str(gcp_cmd_t
* c
, wmem_allocator_t
*scope
, bool persistent
) {
1061 if ( !c
) return "-";
1066 case GCP_CMD_ADD_REQ
:
1069 case GCP_CMD_MOVE_REQ
:
1072 case GCP_CMD_MOD_REQ
:
1075 case GCP_CMD_SUB_REQ
:
1078 case GCP_CMD_AUDITCAP_REQ
:
1079 s
= "AuditCapReq {";
1081 case GCP_CMD_AUDITVAL_REQ
:
1082 s
= "AuditValReq {";
1084 case GCP_CMD_NOTIFY_REQ
:
1087 case GCP_CMD_SVCCHG_REQ
:
1090 case GCP_CMD_TOPOLOGY_REQ
:
1091 s
= "TopologyReq {";
1093 case GCP_CMD_CTX_ATTR_AUDIT_REQ
:
1094 s
= "CtxAttribAuditReq {";
1096 case GCP_CMD_ADD_REPLY
:
1099 case GCP_CMD_MOVE_REPLY
:
1102 case GCP_CMD_MOD_REPLY
:
1105 case GCP_CMD_SUB_REPLY
:
1108 case GCP_CMD_AUDITCAP_REPLY
:
1109 s
= "AuditCapReply {";
1111 case GCP_CMD_AUDITVAL_REPLY
:
1112 s
= "AuditValReply {";
1114 case GCP_CMD_NOTIFY_REPLY
:
1115 s
= "NotifyReply {";
1117 case GCP_CMD_SVCCHG_REPLY
:
1118 s
= "SvcChgReply {";
1120 case GCP_CMD_TOPOLOGY_REPLY
:
1121 s
= "TopologyReply {";
1124 s
= "ActionReply {";
1126 case GCP_CMD_OTHER_REQ
:
1134 for (term
= c
->terms
.next
; term
; term
= term
->next
) {
1135 s
= wmem_strdup_printf(scope
, "%s %s", s
, term
->term
->str
);
1139 s
= wmem_strdup_printf(scope
, "%s Error=%i", s
, c
->error
);
1142 s
= wmem_strdup_printf(scope
, "%s }", s
);
1145 /* FIXME: this method has a side-effect but is buried deep within an apparently side-effect free string helper */
1146 if (! c
->str
) c
->str
= wmem_strdup(wmem_file_scope(), s
);
1154 static const char * gcp_trx_to_str(gcp_msg_t
* m
, gcp_trx_t
* t
, wmem_allocator_t
*scope
, bool persistent
) {
1158 if ( !m
|| !t
) return "-";
1160 s
= wmem_strbuf_new(scope
, NULL
);
1161 wmem_strbuf_append_printf(s
, "T %x { ", t
->id
);
1164 if (t
->cmds
->cmd
->ctx
) {
1165 wmem_strbuf_append_printf(s
, " C %x {", t
->cmds
->cmd
->ctx
->id
);
1167 for (c
= t
->cmds
; c
; c
= c
->next
) {
1168 if (c
->cmd
->msg
== m
) {
1169 wmem_strbuf_append_c(s
, ' ');
1170 wmem_strbuf_append(s
, gcp_cmd_to_str(c
->cmd
, scope
, persistent
));
1174 wmem_strbuf_append(s
, " }");
1179 wmem_strbuf_append_printf(s
, " Error=%i", t
->error
);
1182 wmem_strbuf_append(s
, " }");
1184 return wmem_strbuf_finalize(s
);
1187 const char* gcp_msg_to_str(gcp_msg_t
* m
, wmem_allocator_t
*scope
, bool persistent
) {
1191 if ( !m
) return "-";
1193 s
= wmem_strbuf_new(scope
, NULL
);
1194 for (t
= m
->trxs
; t
; t
= t
->next
) {
1195 wmem_strbuf_append_c(s
, ' ');
1196 wmem_strbuf_append(s
, gcp_trx_to_str(m
, t
->trx
, scope
, persistent
));
1199 return wmem_strbuf_finalize(s
);
1202 typedef struct _gcp_ctxs_t
{
1203 struct _gcp_ctx_t
* ctx
;
1204 struct _gcp_ctxs_t
* next
;
1207 /*static const char* trx_types[] = {"None","Req","Reply","Pending","Ack"};*/
1209 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
) {
1211 gcp_ctxs_t contexts
= {NULL
,NULL
};
1212 gcp_ctxs_t
* ctx_node
;
1216 for (t
= m
->trxs
; t
; t
= t
->next
) {
1217 for (c
= t
->trx
->cmds
; c
; c
= c
->next
) {
1218 gcp_ctx_t
* ctx
= c
->cmd
->ctx
;
1220 for (ctx_node
= contexts
.next
; ctx_node
; ctx_node
= ctx_node
->next
) {
1221 if (ctx_node
->ctx
->id
== ctx
->id
) {
1227 ctx_node
= wmem_new(pinfo
->pool
, gcp_ctxs_t
);
1228 ctx_node
->ctx
= ctx
;
1229 ctx_node
->next
= contexts
.next
;
1230 contexts
.next
= ctx_node
;
1235 for (ctx_node
= contexts
.next
; ctx_node
; ctx_node
= ctx_node
->next
) {
1236 gcp_ctx_t
* ctx
= ctx_node
->ctx
;
1237 proto_item
* ctx_item
= proto_tree_add_uint(gcp_tree
,ids
->hf
.ctx
,gcp_tvb
,0,0,ctx
->id
);
1238 proto_tree
* ctx_tree
= proto_item_add_subtree(ctx_item
,ids
->ett
.ctx
);
1239 gcp_terms_t
*ctx_term
;
1241 proto_item_set_generated(ctx_item
);
1244 proto_tree
* history_tree
= proto_tree_add_subtree(ctx_tree
,gcp_tvb
,0,0,ids
->ett
.ctx_cmds
,NULL
,"[ Command History ]");
1246 for (c
= ctx
->cmds
; c
; c
= c
->next
) {
1247 proto_item
* cmd_item
= proto_tree_add_uint(history_tree
,ids
->hf
.ctx_cmd
,gcp_tvb
,0,0,c
->cmd
->msg
->framenum
);
1248 if (c
->cmd
->str
) proto_item_append_text(cmd_item
," %s ",c
->cmd
->str
);
1249 proto_item_set_generated(cmd_item
);
1250 if (c
->cmd
->error
) {
1251 expert_add_info(pinfo
, cmd_item
, command_err
);
1256 if (( ctx_term
= ctx
->terms
.next
)) {
1257 proto_tree
* terms_tree
= proto_tree_add_subtree(ctx_tree
,gcp_tvb
,0,0,ids
->ett
.ctx_terms
,NULL
,"[ Terminations Used ]");
1259 for (; ctx_term
; ctx_term
= ctx_term
->next
) {
1260 if ( ctx_term
->term
&& ctx_term
->term
->str
) {
1261 proto_item
* pi
= proto_tree_add_string(terms_tree
,ids
->hf
.ctx_term
,gcp_tvb
,0,0,ctx_term
->term
->str
);
1262 proto_tree
* term_tree
= proto_item_add_subtree(pi
,ids
->ett
.ctx_term
);
1264 proto_item_set_generated(pi
);
1266 if (ctx_term
->term
->type
) {
1267 pi
= proto_tree_add_uint(term_tree
,ids
->hf
.ctx_term_type
,gcp_tvb
,0,0,ctx_term
->term
->type
);
1268 proto_item_set_generated(pi
);
1271 if (ctx_term
->term
->bir
) {
1272 pi
= proto_tree_add_string(term_tree
,ids
->hf
.ctx_term_bir
,gcp_tvb
,0,0,ctx_term
->term
->bir
);
1273 proto_item_set_generated(pi
);
1276 if (ctx_term
->term
->nsap
) {
1277 pi
= proto_tree_add_string(term_tree
,ids
->hf
.ctx_term_nsap
,gcp_tvb
,0,0,ctx_term
->term
->nsap
);
1278 proto_item_set_generated(pi
);
1281 if (ctx_term
->term
->bir
&& ctx_term
->term
->nsap
) {
1282 char* tmp_key
= wmem_strdup_printf(pinfo
->pool
, "%s:%s",ctx_term
->term
->nsap
,ctx_term
->term
->bir
);
1283 char* key
= g_ascii_strdown(tmp_key
, -1);
1284 alcap_tree_from_bearer_key(term_tree
, gcp_tvb
, pinfo
, key
);
1293 /* END Gateway Control Protocol -- Context Tracking */
1295 #define H248_PORT 2945
1296 static bool keep_persistent_data
;
1297 static bool h248_desegment
= true;
1301 static proto_tree
*h248_tree
;
1303 static dissector_handle_t h248_handle
;
1304 static dissector_handle_t h248_term_handle
;
1305 static dissector_handle_t h248_tpkt_handle
;
1307 /* Forward declarations */
1308 static int dissect_h248_ServiceChangeReasonStr(bool implicit_tag
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx
, proto_tree
*tree
, int hf_index
);
1310 /* h248v1 support */
1311 static int dissect_h248_AuditReplyV1(bool implicit_tag
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx
, proto_tree
*tree
, int hf_index
);
1313 static int dissect_h248_EventParameterV1(bool implicit_tag
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx
, proto_tree
*tree
, int hf_index
);
1314 static int dissect_h248_SigParameterV1(bool implicit_tag
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx
, proto_tree
*tree
, int hf_index
);
1315 static int dissect_h248_SigParamValueV1(bool implicit_tag
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx
, proto_tree
*tree
, int hf_index
);
1318 static const value_string context_id_type
[] = {
1319 {NULL_CONTEXT
,"0 (Null Context)"},
1320 {CHOOSE_CONTEXT
,"$ (Choose Context)"},
1321 {ALL_CONTEXTS
,"* (All Contexts)"},
1326 /* the following value_strings are used to build defalut packages.
1327 To add additional detail to a package, build a register a h248_package_t structure
1330 static const value_string base_package_name_vals
[] = {
1331 { 0x0000, "Media stream properties H.248.1 Annex C" },
1332 { 0x0001, "Generic H.248.1 Annex E" },
1333 { 0x0002, "root H.248.1 Annex E" },
1334 { 0x0003, "tonegen H.248.1 Annex E" },
1335 { 0x0004, "tonedet H.248.1 Annex E" },
1336 { 0x0005, "dg H.248.1 Annex E" },
1337 { 0x0006, "dd H.248.1 Annex E" },
1338 { 0x0007, "cg H.248.1 Annex E" },
1339 { 0x0008, "cd H.248.1 Annex E" },
1340 { 0x0009, "al H.248.1 Annex E" },
1341 { 0x000a, "ct H.248.1 Annex E" },
1342 { 0x000b, "nt H.248.1 Annex E" },
1343 { 0x000c, "rtp H.248.1 Annex E" },
1344 { 0x000d, "tdmc H.248.1 Annex E" },
1345 { 0x000e, "ftmd H.248.1 Annex E" },
1346 { 0x000f, "txc H.248.2" }, /* H.248.2 */
1347 { 0x0010, "txp H.248.2" },
1348 { 0x0011, "ctyp H.248.2" },
1349 { 0x0012, "fax H.248.2" },
1350 { 0x0013, "ipfax H.248.2" },
1351 { 0x0014, "dis H.248.3" }, /* H.248.3 */
1352 { 0x0015, "key H.248.3" },
1353 { 0x0016, "kp H.248.3" },
1354 { 0x0017, "labelkey H.248.3" },
1355 { 0x0018, "kf H.248.3" },
1356 { 0x0019, "ind H.248.3" },
1357 { 0x001a, "ks H.248.3" },
1358 { 0x001b, "anci H.248.3" },
1359 { 0x001c, "dtd H.248.6" }, /* H.248.6 */
1360 { 0x001d, "an H.248.7" }, /* H.248.7 */
1361 { 0x001e, "Bearer Characteristics Q.1950 Annex A" }, /* Q.1950 Annex A */
1362 { 0x001f, "Bearer Network Connection Cut Q.1950 Annex A" },
1363 { 0x0020, "Reuse Idle Q.1950 Annex A" },
1364 { 0x0021, "Generic Bearer Connection Q.1950 Annex A" },
1365 { 0x0022, "Bearer Control Tunnelling Q.1950 Annex A" },
1366 { 0x0023, "Basic Call Progress Tones Q.1950 Annex A" },
1367 { 0x0024, "Expanded Call Progress Tones Q.1950 Annex A" },
1368 { 0x0025, "Basic Services Tones Q.1950 Annex A" },
1369 { 0x0026, "Expanded Services Tones Q.1950 Annex A" },
1370 { 0x0027, "Intrusion Tones Q.1950 Annex A" },
1371 { 0x0028, "Business Tones Q.1950 Annex A" },
1372 { 0x0029, "Media Gateway Resource Congestion Handling H.248.10" }, /* H.248.10 */
1373 { 0x002a, "H245 package H.248.12" }, /* H.248.12 */
1374 { 0x002b, "H323 bearer control package H.248.12" }, /* H.248.12 */
1375 { 0x002c, "H324 package H.248.12" }, /* H.248.12 */
1376 { 0x002d, "H245 command package H.248.12" }, /* H.248.12 */
1377 { 0x002e, "H245 indication package H.248.12" }, /* H.248.12 */
1378 { 0x002f, "3G User Plane" }, /* 3GPP TS 29.232 v4.1.0 */
1379 { 0x0030, "3G Circuit Switched Data" },
1380 { 0x0031, "3G TFO Control" },
1381 { 0x0032, "3G Expanded Call Progress Tones" },
1382 { 0x0033, "Advanced Audio Server (AAS Base)" }, /* H.248.9 */
1383 { 0x0034, "AAS Digit Collection" }, /* H.248.9 */
1384 { 0x0035, "AAS Recording" }, /* H.248.9 */
1385 { 0x0036, "AAS Segment Management" }, /* H.248.9 */
1386 { 0x0037, "Quality Alert Ceasing" }, /* H.248.13 */
1387 { 0x0038, "Conferencing Tones Generation" }, /* H.248.27 */
1388 { 0x0039, "Diagnostic Tones Generation" }, /* H.248.27 */
1389 { 0x003a, "Carrier Tones Generation Package H.248.23" }, /* H.248.27 */
1390 { 0x003b, "Enhanced Alerting Package H.248.23" }, /* H.248.23 */
1391 { 0x003c, "Analog Display Signalling Package H.248.23" }, /* H.248.23 */
1392 { 0x003d, "Multi-Frequency Tone Generation Package H.248.24" }, /* H.248.24 */
1393 { 0x003e, "H.248.23Multi-Frequency Tone Detection Package H.248.24" }, /* H.248.24 */
1394 { 0x003f, "Basic CAS Package H.248.25" }, /* H.248.25 */
1395 { 0x0040, "Robbed Bit Signalling Package H.248.25" }, /* H.248.25 */
1396 { 0x0041, "Operator Services and Emergency Services Package H.248.25" },
1397 { 0x0042, "Operator Services Extension Package H.248.25" },
1398 { 0x0043, "Extended Analog Line Supervision Package H.248.26" },
1399 { 0x0044, "Automatic Metering Package H.248.26" },
1400 { 0x0045, "Inactivity Timer Package H.248.14" },
1401 { 0x0046, "3G Modification of Link Characteristics Bearer Capability" }, /* 3GPP TS 29.232 v4.4.0 */
1402 { 0x0047, "Base Announcement Syntax H.248.9" },
1403 { 0x0048, "Voice Variable Syntax H.248.9" },
1404 { 0x0049, "Announcement Set Syntax H.248.9" },
1405 { 0x004a, "Phrase Variable Syntax H.248.9" },
1406 { 0x004b, "Basic NAS package" },
1407 { 0x004c, "NAS incoming package" },
1408 { 0x004d, "NAS outgoing package" },
1409 { 0x004e, "NAS control package" },
1410 { 0x004f, "NAS root package" },
1411 { 0x0050, "Profile Handling Package H.248.18" },
1412 { 0x0051, "Media Gateway Overload Control Package H.248.11" },
1413 { 0x0052, "Extended DTMF Detection Package H.248.16" },
1414 { 0x0053, "Quiet Termination Line Test" },
1415 { 0x0054, "Loopback Line Test Response" }, /* H.248.17 */
1416 { 0x0055, "ITU 404Hz Line Test" }, /* H.248.17 */
1417 { 0x0056, "ITU 816Hz Line Test" }, /* H.248.17 */
1418 { 0x0057, "ITU 1020Hz Line Test" }, /* H.248.17 */
1419 { 0x0058, "ITU 2100Hz Disable Tone Line Test" }, /* H.248.17 */
1420 { 0x0059, "ITU 2100Hz Disable Echo Canceller Tone Line Test" }, /* H.248.17 */
1421 { 0x005a, "ITU 2804Hz Tone Line Test" }, /* H.248.17 */
1422 { 0x005b, "ITU Noise Test Tone Line Test" }, /* H.248.17 */
1423 { 0x005c, "ITU Digital Pseudo Random Test Line Test" }, /* H.248.17 */
1424 { 0x005d, "ITU ATME No.2 Test Line Response" }, /* H.248.17 */
1425 { 0x005e, "ANSI 1004Hz Test Tone Line Test" }, /* H.248.17 */
1426 { 0x005f, "ANSI Test Responder Line Test" }, /* H.248.17 */
1427 { 0x0060, "ANSI 2225Hz Test Progress Tone Line Test" }, /* H.248.17 */
1428 { 0x0061, "ANSI Digital Test Signal Line Test" }, /* H.248.17 */
1429 { 0x0062, "ANSI Inverting Loopback Line Test Response" }, /* H.248.17 */
1430 { 0x0063, "Extended H.324 Packages H.248.12 Annex A" },
1431 { 0x0064, "Extended H.245 Command Package H.248.12 Annex A" },
1432 { 0x0065, "Extended H.245 Indication Package H.248.12 Annex A" },
1433 { 0x0066, "Enhanced DTMF Detection Package H.248.16" },
1434 { 0x0067, "Connection Group Identity Package Q.1950 Annex E" },
1435 { 0x0068, "CTM Text Transport 3GPP TS 29.232 v5.2.0" },
1436 { 0x0069, "SPNE Control Package Q.115.0" },
1437 { 0x006a, "Semi-permanent Connection Package H.248.21" },
1438 { 0x006b, "Shared Risk Group Package H.248.22" },
1439 { 0x006c, "isuptn Annex B of ITU-T Rec. J.171" },
1440 { 0x006d, "Basic CAS Addressing Package H.248.25" },
1441 { 0x006e, "Floor Control Package H.248.19" },
1442 { 0x006f, "Indication of Being Viewed Package H.248.19" },
1443 { 0x0070, "Volume Control Package H.248.19" },
1444 { 0x0071, "UNASSIGNED" },
1445 { 0x0072, "Volume Detection Package H.248.19" },
1446 { 0x0073, "Volume Level Mixing Package H.248.19" },
1447 { 0x0074, "Mixing Volume Level Control Package H.248.19" },
1448 { 0x0075, "Voice Activated Video Switch Package H.248.19" },
1449 { 0x0076, "Lecture Video Mode Package H.248.19" },
1450 { 0x0077, "Contributing Video Source Package H.248.19" },
1451 { 0x0078, "Video Window Package H.248.19" },
1452 { 0x0079, "Tiled Window Package H.248.19" },
1453 { 0x007a, "Adaptive Jitter Buffer Package H.248.31" },
1454 { 0x007b, "International CAS Package H.248.28" },
1455 { 0x007c, "CAS Blocking Package H.248.28" },
1456 { 0x007d, "International CAS Compelled Package H.248.29" },
1457 { 0x007e, "International CAS Compelled with Overlap Package H.248.29" },
1458 { 0x007f, "International CAS Compelled with End-to-end Package H.248.29" },
1459 { 0x0080, "RTCP XR Package H.248.30" },
1460 { 0x0081, "RTCP XR Burst Metrics Package H.248.30" },
1461 { 0x0082, "threegcsden 3G Circuit Switched Data" }, /* 3GPP TS 29.232 v5.6.0 */
1462 { 0x0083, "threegiptra 3G Circuit Switched Data" }, /* 3GPP TS 29.232 v5.6.0 */
1463 { 0x0084, "threegflex 3G Circuit Switched Data" }, /* 3GPP TS 29.232 v5.6.0 */
1464 { 0x0085, "H.248 PCMSB" },
1465 { 0x008a, "TIPHON Extended H.248/MEGACO Package" }, /* ETSI specification TS 101 3 */
1466 { 0x008b, "Differentiated Services Package" }, /* Annex A of ETSI TS 102 333 */
1467 { 0x008c, "Gate Management Package" }, /* Annex B of ETSI TS 102 333 */
1468 { 0x008d, "Traffic Management Package" }, /* Annex C of ETSI TS 102 333 */
1469 { 0x008e, "Gate Recovery Information Package" }, /* Annex D of ETSI TS 102 333 */
1470 { 0x008f, "NAT Traversal Package" }, /* Annex E of ETSI TS 102 333 */
1471 { 0x0090, "MPLS Package" }, /* Annex F of ETSI TS 102 333 */
1472 { 0x0091, "VLAN Package" }, /* Annex G of ETSI TS 102 333 */
1473 { 0x0092, "Detailed Congestion Reporting Package" }, /* H.248.32 */
1474 { 0x0093, "Stimulus Analogue Lines Package" }, /* H.248.34 */
1475 { 0x0094, "icascgen" }, /* H.248.29 Annex B */
1476 { 0x0095, "Coin Operated Phone Control Package" }, /* H.248.35 */
1477 { 0x0096, "Metering Pulse Detection Package" }, /* H.248.26 Amendment 1 */
1478 { 0x0097, "Trace Package" }, /* 3GPP TS 29.232 v6.3.0 */
1479 { 0x0098, "Hanging Termination Package" }, /* H.248.36 */
1480 { 0x0099, "IP NAPT Traversal Package" }, /* H.248.37 */
1481 { 0x009a, "Notification Behaviour Package" }, /* H.248.1v3 */
1482 { 0x009b, "Base Context Package" }, /* H.248.38 */
1483 { 0x009c, "Application Data Inactivity Detection Package" }, /* H.248.40 */
1484 { 0x009d, "Domain Connection Package " }, /* H.248.41 */
1485 { 0x009e, "Digital Circuit Multiplication Equipment Package" }, /* H.248.42 */
1486 { 0x009f, "Multi-level Precedence and Pre-emption Package" }, /* H.248.44 */
1487 { 0x00a0, "MGC Information Package" }, /* H.248.45 */
1488 { 0x00a1, "Text Overlay Package" }, /* H.248.19 Amendment 1 */
1489 { 0x00a2, "Border and Background Package" }, /* H.248.19 Amendment 1 */
1490 { 0x00a3, "Segmentation Package" }, /* H.248.1v3 */
1491 { 0x00a4, "ETSI notification behaviour package" }, /* ETSI ES 283 039-3 */
1492 { 0x00a5, "ETSI notification rate package" }, /* ETSI ES 283 039-4 */
1493 { 0x00a6, "Automatic Speech Recognition Package" }, /* H.248.9 Amendment 1 */
1494 { 0x00a7, "Set extension to basic syntax for TTS enhancement Package" },/* H.248.9 Amendment 1 */
1495 { 0x00a8, "Advanced audio server base package for TTS enhancement" }, /* H.248.9 Amendment 1 */
1496 { 0x00a9, "Multimedia Play Package" }, /* H.248.9 Amendment 1 */
1497 { 0x00aa, "Floor Status Detection Package" }, /* H.248.19 Amendment 2 */
1498 { 0x00ab, "Floor Control Policy Package" }, /* H.248.19 Amendment 2 */
1499 { 0x00ac, "Address Reporting Package" }, /* H.248.37 Amendment 1 */
1500 { 0x00ad, "Connection Capability Control Package" }, /* H.248.46 */
1501 { 0x00ae, "Statistic Conditional Reporting Package" }, /* H.248.47 Amendment 1 */
1502 { 0x00af, "RTCP HR QoS Statistics Package" }, /* H.248.48 */
1503 { 0x00b0, "Received RTCP XR Package" }, /* H.248.30 (01/2007) */
1504 { 0x00b1, "Received RTCP XR Burst Metrics Package" }, /* H.248.30 (01/2007) */
1505 { 0x00b2, "ASCI Group call package" }, /* 3GPP TS 29.232 v7.4.0 */
1506 { 0x00b3, "Multimedia Recording Package" }, /* H.248.9 Amendment 1 */
1507 { 0x00b4, "H.245 Transport Package" }, /* H.248.12 Amendment 2 */
1508 { 0x00b5, "RTCP Handling package" }, /* H.248.57 */
1509 { 0x00b6, "Gate Management - Outgoing Destination Address/Port Filtering Package" },/* H.248.43 */
1510 { 0x00b7, "Gate Management - Incoming Protocol Filtering Package" }, /* H.248.43 */
1511 { 0x00b8, "Gate Management - Outgoing Protocol Filtering Package" }, /* H.248.43 */
1512 { 0x00b9, "Gate Management - Incoming Filtering Behaviour Package" }, /* H.248.43 */
1513 { 0x00ba, "Gate Management - Outgoing Filtering Behaviour Package" }, /* H.248.43 */
1514 { 0x00bb, "Session Description Protocol RFC Package" }, /* H.248.49 */
1515 { 0x00bc, "Session Description Protocol Capabilities Package" }, /* H.248.49 */
1516 { 0x00bd, "NAT Traversal Toolkit - STUN Base Package" }, /* H.248.50 */
1517 { 0x00be, "NAT Traversal Toolkit - MG STUN Client Package" }, /* H.248.50 */
1518 { 0x00bf, "NAT Traversal Toolkit - MG TURN Client Package" }, /* H.248.50 */
1519 { 0x00c0, "NAT Traversal Toolkit - MGC STUN Client Package" }, /* H.248.50 */
1520 { 0x00c1, "NAT Traversal Toolkit - STUN Information Package" }, /* H.248.50 */
1521 { 0x00c2, "NAT Traversal Toolkit - MG Act-as STUN Server Package" }, /* H.248.50 */
1522 { 0x00c3, "NAT Traversal Toolkit - Originate STUN Continuity Check Package" }, /* H.248.50 */
1523 { 0x00c4, "NAT Traversal Toolkit - MGC Originated STUN Request Package" }, /* H.248.50 */
1524 { 0x00c5, "NAT Traversal Toolkit - RTP NOOP Request Package" }, /* H.248.50 */
1525 { 0x00c6, "Termination Connection Model Package" }, /* H.248.51 */
1526 { 0x00c7, "QoS Class Package" }, /* H.248.52 */
1527 { 0x00c8, "Traffic Policing Statistics Package" }, /* H.248.53 */
1528 { 0x00c9, "Packet Size Package" }, /* H.248.53 */
1529 { 0x00ca, "Pull Mode Package" }, /* H.248.55 */
1530 { 0x00cb, "RTP Application Data Package" }, /* H.248.58 */
1531 { 0x00cc, "Event Timestamp Notification Package" }, /* H.248.59 */
1532 { 0x00cd, "Resource Management Rules Package" }, /* H.248.63 */
1533 { 0x00ce, "Resource Management Configuration Package" }, /* H.248.63 */
1534 { 0x00cf, "Abstract Resource Management Packages" }, /* H.248.63 */
1535 { 0x00d0, "IP layer octets count statistics Package" }, /* H.248.61 */
1536 { 0x00d1, "Content of Communication Identity Package" }, /* H.248.60 */
1537 { 0x00d2, "RSVP extension package" }, /* H.248.65 */
1538 { 0x00d3, "GCP Transport Mode Indication Package" }, /* H.248.67 */
1539 { 0x00d4, "IP Router Package" }, /* H.248.64 */
1540 { 0x00d5, "Media Resource Identification Package" }, /* H.248.66 */
1541 { 0x00d6, "Range Format Support Package" }, /* H.248.66 */
1542 { 0x00d7, "Media Resource Description Expiry Package" }, /* H.248.66 */
1543 { 0x00d8, "Media Block Size Package" }, /* H.248.66 */
1544 { 0x00d9, "RTSP Media Resource Syntax Package" }, /* H.248.66 */
1545 { 0x00da, "RTSP Play Package" }, /* H.248.66 */
1546 { 0x00db, "Signal Pause Package" }, /* H.248.66 */
1547 { 0x00dc, "Data Delivery Speed Adjustme Package" }, /* H.248.66 */
1548 { 0x00dd, "Playback Relative Scale Adjustment Package" }, /* H.248.66 */
1549 { 0x00de, "RTP Information Package" }, /* H.248.66 */
1550 { 0x00df, "RTP Interleaving Package" }, /* H.248.66 */
1551 { 0x00e0, "IP Realm Availability Package" }, /* H.248.41 Amendment 1 */
1552 { 0x00e1, "General IP Header QoS Octet Package" }, /* H.248.52 */
1553 { 0x00e2, "Re-answer Package" }, /* H.248.62 */
1554 { 0x00e3, "3G Interface Type package" }, /* 3GPP TS 29.232 v8.4.0 */
1555 { 0x00e4, "Latch Statistics Package" }, /* H.248.37 */
1556 { 0x00e5, "Floor Control Signalling Package" }, /* H.248.19 Amendment 2 */
1557 { 0x00e6, "Include Participant in Mix Package" }, /* H.248.19 Amendment 2 */
1558 { 0x00e7, "Speaker Reporting Package" }, /* H.248.19 Amendment 2 */
1559 { 0x00e8, "IP Layer Packet Count Statistics Package" }, /* H.248.61 */
1560 { 0x00e9, "Removal of Digits and Tones Package" }, /* H.248.68 */
1561 { 0x00ea, "MSRP Statistics Package" }, /* H.248.69 */
1562 { 0x00eb, "MSRP Connection Status Package" }, /* H.248.69 */
1563 { 0x00ec, "Play Message Package" }, /* H.248.69 */
1564 { 0x00ed, "Delete Stored Message Package" }, /* H.248.69 */
1565 { 0x00ee, "Message Session Information Package" }, /* H.248.69 */
1566 { 0x00ef, "Message Filtering Package" }, /* H.248.69 */
1567 { 0x00f0, "Stored Message Information Package" }, /* H.248.69 */
1568 { 0x00f1, "Record Message Package" }, /* H.248.69 */
1569 { 0x00f2, "Digit Dialling Method Information Package" }, /* H.248.70 */
1570 { 0x00f3, "Digit Dialling Method Information for Extended Digitmap Detection Package" }, /* H.248.70 */
1571 { 0x00f4, "Digit Dialling Method Information for Enhanced Digitmap Detection Package" }, /* H.248.70 */
1572 { 0x00f5, "Received RTCP Package " }, /* H.248.71 */
1573 { 0x00f6, "RTP Cumulative Loss Package" }, /* H.248.71 */
1574 { 0x00f7, "H.245 Transport Package for SPC use" }, /* H.248.72 */
1575 { 0x00f8, "MONA Preference Package" }, /* H.248.72 */
1576 { 0x00f9, "TDM Gain Control Package" }, /* H.248.73 */
1577 { 0x00fa, "Media Start Package" }, /* H.248.74 */
1578 { 0x00fb, "Trim Package" }, /* H.248.74 */
1579 { 0x00fc, "Enhanced Recording Package" }, /* H.248.74 */
1580 { 0x00fd, "Enhanced ASR Package" }, /* H.248.74 */
1581 { 0x00fe, "Enhanced TTS Package" }, /* H.248.74 */
1582 { 0x00ff, "Play Offset Control Package" }, /* H.248.74 */
1583 { 0x0100, "Enhanced DTMF Detection Package" }, /* H.248.9 Revised 2009 */
1584 { 0x0101, "IP Router NAT Package" }, /* H.248.64 */
1585 { 0x0102, "Voice Enrolled Grammar Package" }, /* H.248.74 */
1586 { 0x0103, "Filter Group Package" }, /* H.248.76 */
1587 { 0x0104, "RTCP Source Description Package" }, /* H.248.71 */
1588 { 0x0105, "Speaker Verification and Identification Package" }, /* H.248.74 */
1589 { 0x0106, "Package Identifier Publishing and Application Package" }, /* H.248 */
1590 { 0x0107, "Secure RTP Package " }, /* H.248.77 */
1591 { 0x0108, "MGC Controlled Bearer Level ALG Package" }, /* H.248.78 */
1592 { 0x0109, "Enhanced Revised Offer/Answer SDP Support Package" }, /* H.248.80 */
1593 { 0x010a, "Enhanced SDP Media Capabilities Negotiation Support Package" }, /* H.248.80 */
1594 { 0x8000, "Ericsson IU" },
1595 { 0x8001, "Ericsson UMTS and GSM Circuit" },
1596 { 0x8002, "Ericsson Tone Generator Package" },
1597 { 0x8003, "Ericsson Line Test Package" },
1598 { 0x8004, "Nokia Advanced TFO Package" },
1599 { 0x8005, "Nokia IWF Package" },
1600 { 0x8006, "Nokia Root Package" },
1601 { 0x8007, "Nokia Trace Package" },
1602 { 0x8008, "Ericsson V5.2 Layer" },
1603 { 0x8009, "Ericsson Detailed Termination Information Package" },
1604 { 0x800a, "Nokia Bearer Characteristics Package" },
1605 { 0x800b, "Nokia Test Call Package" },
1606 { 0x800c, "Nokia Extended Continuity Package" },
1607 { 0x800d, "Nokia IPnwR Package" },
1608 { 0x800e, "Ericsson Tracing Enhancements Package" },
1609 { 0x800f, "Ericsson Partially Wildcarded TerminationID Package" },
1610 { 0x8010, "SCTP Stream Handling Package" },
1615 * This table consist of PackageName + EventName and its corresponding string
1618 static const value_string base_event_name_vals
[] = {
1619 { 0x00000000, "Media stream properties H.248.1 Annex C" },
1620 { 0x00010000, "g H.248.1 Annex E" },
1621 { 0x00010001, "g/Cause" },
1622 { 0x00010002, "g/Signal Completion" },
1623 { 0x00040000, "tonedet H.248.1 Annex E" },
1624 { 0x00040001, "tonedet/std(Start tone detected)" },
1625 { 0x00040002, "tonedet/etd(End tone detected)" },
1626 { 0x00040003, "tonedet/ltd(Long tone detected)" },
1627 { 0x00060000, "dd H.248.1 Annex E" },
1628 { 0x00060001, "dd/std" },
1629 { 0x00060002, "dd/etd" },
1630 { 0x00060003, "dd/ltd" },
1631 { 0x00060004, "dd, DigitMap Completion Event" },
1632 { 0x00060010, "dd/d0, DTMF character 0" },
1633 { 0x00060011, "dd/d1, DTMF character 1" },
1634 { 0x00060012, "dd/d2, DTMF character 2" },
1635 { 0x00060013, "dd/d3, DTMF character 3" },
1636 { 0x00060014, "dd/d4, DTMF character 4" },
1637 { 0x00060015, "dd/d5, DTMF character 5" },
1638 { 0x00060016, "dd/d6, DTMF character 6" },
1639 { 0x00060017, "dd/d7, DTMF character 7" },
1640 { 0x00060018, "dd/d8, DTMF character 8" },
1641 { 0x00060019, "dd/d9, DTMF character 9" },
1642 { 0x0006001a, "dd/a, DTMF character A" },
1643 { 0x0006001b, "dd/b, DTMF character B" },
1644 { 0x0006001c, "dd/c, DTMF character C" },
1645 { 0x0006001d, "dd/d, DTMF character D" },
1646 { 0x00060020, "dd/" "*, DTMF character *" }, /* XXX: hack so checkAPIs & etc won't see a 'start of comment' */
1647 { 0x00060021, "dd/#, DTMF character #" },
1648 { 0x00080030, "cd, Dial Tone" },
1649 { 0x00080031, "cd, Ringing Tone" },
1650 { 0x00080032, "cd, Busy Tone" },
1651 { 0x00080033, "cd, Congestion Tone" },
1652 { 0x00080034, "cd, Special Information Tone" },
1653 { 0x00080035, "cd, (Recording) Warning Tone" },
1654 { 0x00080036, "cd, Payphone Recognition Tone" },
1655 { 0x00080037, "cd, Call Waiting Tone" },
1656 { 0x00080038, "cd, Caller Waiting Tone" },
1657 { 0x00090004, "al, onhook" },
1658 { 0x00090005, "al, offhook" },
1659 { 0x00090006, "al, flashhook" },
1660 { 0x0009ffff, "al, *" },
1661 { 0x000a0005, "ct, Completion of Continuity test" },
1662 { 0x000b0005, "nt, network failure" },
1663 { 0x000b0006, "nt, quality alert" },
1664 { 0x000c0001, "rtp, Payload Transition" },
1665 { 0x00210000, "Generic Bearer Connection Q.1950 Annex A" },
1666 { 0x00210001, "GB/BNCChange" },
1667 { 0x00220001, "BT/TIND (Tunnel Indication)" },
1668 { 0x002a0001, "H.245/h245msg (Incoming H.245 Message)" },
1669 { 0x002a0004, "H.245/h245ChC (H.245 Channel Closed)" },
1670 { 0x00450000, "Inactivity Timer H.248.14" },
1671 { 0x00450001, "it/ito" },
1672 { 0x00450002, "it/ito" },
1673 { 0x00460001, "threegmlc/mod_link_supp (Bearer Modification Support Event)" },
1674 { 0x00980000, "Hanging Termination Package" },
1675 { 0x00980001, "Termination Heartbeat" },
1676 { 0x800a0000, "Nokia Bearer Characteristics Package" },
1681 * This table consist of PackageName + SignalName and its corresponding string
1683 static const value_string base_signal_name_vals
[] = {
1684 { 0x00000000, "Media stream properties H.248.1 Annex C" },
1685 { 0x00010000, "g H.248.1 Annex E" },
1686 { 0x00030001, "tonegen/pt(Play tone)" },
1687 { 0x00050010, "dg, DTMF character 0" },
1688 { 0x00050011, "dg, DTMF character 1" },
1689 { 0x00050012, "dg, DTMF character 2" },
1690 { 0x00050013, "dg, DTMF character 3" },
1691 { 0x00050014, "dg, DTMF character 4" },
1692 { 0x00050015, "dg, DTMF character 5" },
1693 { 0x00050016, "dg, DTMF character 6" },
1694 { 0x00050017, "dg, DTMF character 7" },
1695 { 0x00050018, "dg, DTMF character 8" },
1696 { 0x00050019, "dg, DTMF character 9" },
1697 { 0x0005001a, "dg, DTMF character A" },
1698 { 0x0005001b, "dg, DTMF character B" },
1699 { 0x0005001c, "dg, DTMF character C" },
1700 { 0x0005001d, "dg, DTMF character D" },
1701 { 0x00050020, "dg, DTMF character *" },
1702 { 0x00050021, "dg, DTMF character #" },
1703 { 0x00070030, "cg, Dial Tone" },
1704 { 0x00070031, "cg/rt (Ringing Tone)" },
1705 { 0x00070032, "cg, Busy Tone" },
1706 { 0x00070033, "cg, Congestion Tone" },
1707 { 0x00070034, "cg, Special Information Tone" },
1708 { 0x00070035, "cg, (Recording) Warning Tone" },
1709 { 0x00070036, "cg, Payphone Recognition Tone" },
1710 { 0x00070037, "cg, Call Waiting Tone" },
1711 { 0x00070038, "cg, Caller Waiting Tone" },
1712 { 0x00090002, "al, ring" },
1713 { 0x0009ffff, "al, *" },
1714 { 0x000a0003, "ct, Continuity test" },
1715 { 0x000a0004, "ct, Continuity respond" },
1716 { 0x00210000, "GB Generic Bearer Connection Q.1950 Annex A" },
1717 { 0x00210001, "GB/EstBNC(Establish BNC)" },
1718 { 0x00210002, "GB/ModBNC (Modify BNC)" },
1719 { 0x00210003, "GB/RelBNC(Release BNC)" },
1720 { 0x002a0001, "H.245/cs (channel state)" },
1721 { 0x002a0002, "H.245/termtype (Terminal Type)" },
1722 { 0x002c0001, "H.324/cmod (Communication mode)" },
1723 { 0x002c0002, "H.324/muxlv (Highest Multiplexing level)" },
1724 { 0x002c0003, "H.324/demux (Demultiplex)" },
1725 { 0x002c0004, "H.324/h223capr (Remote H.223 capability)" },
1726 { 0x002c0005, "H.324/muxtbl_in (Incoming Multiplex Table)" },
1727 { 0x002c0006, "H.324/muxtbl_out (Outgoing Multiplex Table)" },
1728 { 0x800a0000, "Nokia Bearer Characteristics Package" },
1733 static const value_string h248_reasons
[] = {
1734 { 400, "Syntax error in message"},
1735 { 401, "Protocol Error"},
1736 { 402, "Unauthorized"},
1737 { 403, "Syntax error in transaction request"},
1738 { 406, "Version Not Supported"},
1739 { 410, "Incorrect identifier"},
1740 { 411, "The transaction refers to an unknown ContextId"},
1741 { 412, "No ContextIDs available"},
1742 { 413, "Number of transactions in message exceeds maximum"}, /* [H.248.8 (08/07)] */
1743 { 421, "Unknown action or illegal combination of actions"},
1744 { 422, "Syntax Error in Action"},
1745 { 430, "Unknown TerminationID"},
1746 { 431, "No TerminationID matched a wildcard"},
1747 { 432, "Out of TerminationIDs or No TerminationID available"},
1748 { 433, "TerminationID is already in a Context"},
1749 { 434, "Max number of Terminations in a Context exceeded"},
1750 { 435, "Termination ID is not in specified Context"},
1751 { 440, "Unsupported or unknown Package"},
1752 { 441, "Missing Remote or Local Descriptor"},
1753 { 442, "Syntax Error in Command"},
1754 { 443, "Unsupported or Unknown Command"},
1755 { 444, "Unsupported or Unknown Descriptor"},
1756 { 445, "Unsupported or Unknown Property"},
1757 { 446, "Unsupported or Unknown Parameter"},
1758 { 447, "Descriptor not legal in this command"},
1759 { 448, "Descriptor appears twice in a command"},
1760 { 449, "Unsupported or Unknown Parameter or Property Value"},
1761 { 450, "No such property in this package"},
1762 { 451, "No such event in this package"},
1763 { 452, "No such signal in this package"},
1764 { 453, "No such statistic in this package"},
1765 { 454, "No such parameter value in this package"},
1766 { 455, "Property illegal in this Descriptor"},
1767 { 456, "Property appears twice in this Descriptor"},
1768 { 457, "Missing parameter in signal or event"},
1769 { 458, "Unexpected Event/Request ID"},
1770 { 459, "Unsupported or Unknown Profile"},
1771 { 460, "Unable to set statistic on stream"},
1772 { 461, "Unsupported or Unknown Profile"}, /*[H.248.18] */
1774 { 471, "Implied Add for Multiplex failure"},
1775 { 472, "Required Information Missing"}, /*[H.248.8 (08/07)] */
1776 { 473, "Conflicting Property Values"}, /*[H.248.8 (08/07)] */
1777 { 474, "Invalid SDP Syntax"}, /*[H.248.49] */
1778 { 475, "Unable to pause the playout of the signal"}, /*[H.248.66] */
1779 { 476, "Unable to adjust the data delivery speed of the Signal"}, /*[H.248.66] */
1781 { 477, "Unable to adjust the playback relative scale of the signal"}, /*[H.248.66] */
1783 { 478, "Behaviour Contradicts Resource Rule"}, /*[H.248.63] */
1785 { 500, "Internal software Failure in MG"},
1786 { 501, "Not Implemented"},
1787 { 502, "Not ready"},
1788 { 503, "Service Unavailable"},
1789 { 504, "Command Received from unauthorized entity"},
1790 { 505, "Transaction Request Received before a Service Change Reply has been received"},
1791 { 506, "Number of Transaction Pendings Exceeded"},
1792 { 510, "Insufficient resources"},
1793 { 511, "Temporarily Busy"}, /* [H.248.8 (08/07)] */
1794 { 512, "Media Gateway unequipped to detect requested Event"},
1795 { 513, "Media Gateway unequipped to generate requested Signals"},
1796 { 514, "Media Gateway cannot send the specified announcement"},
1797 { 515, "Unsupported Media Type"},
1798 { 517, "Unsupported or invalid mode"},
1799 { 518, "Event buffer full"},
1800 { 519, "Out of space to store digit map"},
1801 { 520, "Digit Map undefined in the MG"},
1802 { 521, "Termination is ServiceChanging"},
1803 { 522, "Functionality Requested in Topology Triple Not Supported"},
1804 { 526, "Insufficient bandwidth"},
1805 { 529, "Internal hardware failure in MG"},
1806 { 530, "Temporary Network failure"},
1807 { 531, "Permanent Network failure"},
1808 { 532, "Audited Property, Statistic, Event or Signal does not exist"},
1809 { 533, "Response exceeds maximum transport PDU size"},
1810 { 534, "Illegal write or read only property"},
1811 { 540, "Unexpected initial hook state"},
1812 { 541, "Unexpected Spare Bit State"}, /* [H.248.33] */
1813 { 542, "Command is not allowed on this termination"},
1814 { 543, "MGC requested event detection timestamp not supported"}, /* [H.248.8 (08/07)] */
1815 { 581, "Does Not Exist"},
1816 { 600, "Illegal syntax within an announcement specification"},
1817 { 601, "Variable type not supported"},
1818 { 602, "Variable value out of range"},
1819 { 603, "Category not supported"},
1820 { 604, "Selector type not supported"},
1821 { 605, "Selector value not supported"},
1822 { 606, "Unknown segment ID"},
1823 { 607, "Mismatch between play specification and provisioned data"},
1824 { 608, "Provisioning error"},
1825 { 609, "Invalid offset"},
1826 { 610, "No free segment IDs"},
1827 { 611, "Temporary segment not found"},
1828 { 612, "Segment in use"},
1829 { 613, "ISP port limit overrun"},
1830 { 614, "No modems available"},
1831 { 615, "Calling number unacceptable"},
1832 { 616, "Called number unacceptable"},
1833 { 617, "Reserved for H.248.9 return code"}, /* [H.248.9] */
1834 { 618, "Reserved for H.248.9 return code"}, /* [H.248.9] */
1835 { 622, "Reserved for H.248.9 return code"}, /* [H.248.9] */
1836 { 623, "Reserved for H.248.9 return code"}, /* [H.248.9] */
1837 { 624, "Reserved for H.248.9 return code"}, /* [H.248.9] */
1838 { 625, "Reserved for H.248.9 return code"}, /* [H.248.9 Amendment 1] */
1839 { 626, "Reserved for H.248.9 return code"}, /* [H.248.9 Amendment 1] */
1840 { 627, "Reserved for H.248.9 return code"}, /* [H.248.9 Amendment 1] */
1841 { 628, "Reserved for H.248.9 return code"}, /* [H.248.9 Amendment 1] */
1842 { 629, "Reserved for H.248.9 return code"}, /* [H.248.9 Amendment 1] */
1843 { 700, "Sieve Script Syntax Error"}, /* [H.248.69] */
1844 { 701, "Unsupported Sieve Require Error"}, /* [H.248.69] */
1845 { 702, "Sieve Actions Exceeded Error"}, /* [H.248.69] */
1847 { 900, "Service Restored"},
1848 { 901, "Cold Boot"},
1849 { 902, "Warm Boot"},
1850 { 903, "MGC Directed Change"},
1851 { 904, "Termination malfunctioning"},
1852 { 905, "Termination taken out of service"},
1853 { 906, "Loss of lower layer connectivity (e.g. downstream sync)"},
1854 { 907, "Transmission Failure"},
1855 { 908, "MG Impending Failure"},
1856 { 909, "MGC Impending Failure"},
1857 { 910, "Media Capability Failure"},
1858 { 911, "Modem Capability Failure"},
1859 { 912, "Mux Capability Failure"},
1860 { 913, "Signal Capability Failure"},
1861 { 914, "Event Capability Failure"},
1862 { 915, "State Loss"},
1863 { 916, "Packages Change"},
1864 { 917, "Capabilities Change"},
1865 { 918, "Cancel Graceful"},
1866 { 919, "Warm Failover"},
1867 { 920, "Cold Failover"},
1870 static value_string_ext h248_reasons_ext
= VALUE_STRING_EXT_INIT(h248_reasons
);
1872 static const value_string wildcard_modes
[] = {
1878 static const value_string wildcard_levels
[] = {
1879 { 0, "This One Level" },
1880 { 1, "This Level and those below" },
1884 static h248_curr_info_t curr_info
;
1885 static uint32_t error_code
;
1886 static uint32_t h248_version
; /* h248v1 support */
1887 static gcp_wildcard_t wild_term
;
1888 static uint8_t wild_card
= 0xFF; /* place to store wildcardField */
1890 /* Call the export PDU tap with relevant data */
1892 export_h248_pdu(packet_info
*pinfo
, tvbuff_t
*tvb
)
1894 if (have_tap_listener(exported_pdu_tap
)) {
1895 exp_pdu_data_t
*exp_pdu_data
= export_pdu_create_common_tags(pinfo
, "h248", EXP_PDU_TAG_DISSECTOR_NAME
);
1897 exp_pdu_data
->tvb_captured_length
= tvb_captured_length(tvb
);
1898 exp_pdu_data
->tvb_reported_length
= tvb_reported_length(tvb
);
1899 exp_pdu_data
->pdu_tvb
= tvb
;
1901 tap_queue_packet(exported_pdu_tap
, pinfo
, exp_pdu_data
);
1905 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
) {
1906 asn1_ctx_t asn1_ctx
;
1907 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, true, pinfo
);
1908 dissect_ber_integer(implicit
? *((bool*)implicit
) : false, &asn1_ctx
, tree
, tvb
, 0, hfid
, NULL
);
1911 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
) {
1912 asn1_ctx_t asn1_ctx
;
1913 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, true, pinfo
);
1914 dissect_ber_octet_string(implicit
? *((bool*)implicit
) : false, &asn1_ctx
, tree
, tvb
, 0, hfid
, NULL
);
1917 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
) {
1918 asn1_ctx_t asn1_ctx
;
1919 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, true, pinfo
);
1920 dissect_ber_boolean(implicit
? *((bool*)implicit
) : false, &asn1_ctx
, tree
, tvb
, 0, hfid
, NULL
);
1923 extern void h248_param_bytes_item(proto_tree
* tree
,
1925 packet_info
* pinfo _U_
,
1927 h248_curr_info_t
* h248_info _U_
,
1929 int len
= lenp
? *((int*)lenp
) : -1;
1930 proto_tree_add_item(tree
,hfid
,tvb
,0,len
,ENC_NA
);
1933 extern void h248_param_uint_item(proto_tree
* tree
,
1935 packet_info
* pinfo _U_
,
1937 h248_curr_info_t
* h248_info _U_
,
1939 int len
= lenp
? *((int*)lenp
) : -1;
1940 proto_tree_add_item(tree
,hfid
,tvb
,0,len
,ENC_BIG_ENDIAN
);
1943 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
) {
1944 call_dissector((dissector_handle_t
) dissector_hdl
,tvb
,pinfo
,tree
);
1948 static const h248_package_t no_package
= { 0xffff, &hf_h248_no_pkg
, &ett_h248_no_pkg
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
};
1949 static const h248_pkg_sig_t no_signal
= { 0, &hf_h248_no_sig
, &ett_h248_no_sig
, NULL
, NULL
};
1950 static const h248_pkg_param_t no_param
= { 0, &hf_h248_param
, h248_param_uint_item
, NULL
};
1951 static const h248_pkg_evt_t no_event
= { 0, &hf_h248_no_evt
, &ett_h248_no_evt
, NULL
, NULL
};
1953 static const h248_package_t
*find_package_id(uint16_t pkgid
);
1954 static wmem_tree_t
* packages
;
1956 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_
) {
1957 tvbuff_t
*new_tvb
= NULL
;
1958 proto_tree
*package_tree
=NULL
;
1959 uint16_t name_major
, name_minor
;
1960 const h248_package_t
* pkg
= NULL
;
1962 asn1_ctx_t asn1_ctx
;
1963 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, true, pinfo
);
1965 offset
= dissect_ber_octet_string(false, &asn1_ctx
, tree
, tvb
, offset
, hfid
, &new_tvb
);
1968 /* this field is always 4 bytes so just read it into two integers */
1969 name_major
=tvb_get_ntohs(new_tvb
, 0);
1970 name_minor
=tvb_get_ntohs(new_tvb
, 2);
1971 pkg
= find_package_id(name_major
);
1972 /* do the prettification */
1973 proto_item_append_text(asn1_ctx
.created_item
, " %s (%04x)",
1974 val_to_str_const(0, pkg
->param_names
, "Unknown Package"),
1981 package_tree
= proto_item_add_subtree(asn1_ctx
.created_item
, ett_packagename
);
1982 proto_tree_add_uint_format(package_tree
, hf_h248_pkg_name
, tvb
, offset
-4, 2, name_major
,
1983 "%s (0x%04x)", val_to_str_const(0, pkg
->param_names
, "Unknown Package"), name_major
);
1985 pi
= proto_tree_add_uint(package_tree
, hf_248_pkg_param
, tvb
, offset
-2, 2, name_minor
);
1987 if (pkg
->signal_names
&& ( strval
= try_val_to_str(name_minor
, pkg
->signal_names
) )) {
1988 strval
= wmem_strdup_printf(pinfo
->pool
, "%s (%d)",strval
,name_minor
);
1990 strval
= wmem_strdup_printf(pinfo
->pool
, "Unknown (%d)",name_minor
);
1993 proto_item_set_text(pi
,"Signal ID: %s", strval
);
2000 static int dissect_h248_trx_id(bool implicit_tag
, packet_info
*pinfo
, proto_tree
*tree
, tvbuff_t
*tvb
, int offset
, uint32_t* trx_id_p
) {
2001 uint64_t trx_id
= 0;
2009 offset
=dissect_ber_identifier(pinfo
, tree
, tvb
, offset
, &ber_class
, &pc
, &tag
);
2010 offset
=dissect_ber_length(pinfo
, tree
, tvb
, offset
, &len
, NULL
);
2012 len
=tvb_reported_length_remaining(tvb
, offset
);
2016 if (len
> 8 || len
< 1) {
2019 for(i
=1;i
<=len
;i
++){
2020 trx_id
=(trx_id
<<8)|tvb_get_uint8(tvb
, offset
);
2023 if (trx_id
> 0xffffffff) {
2024 proto_item
* pi
= proto_tree_add_uint64(tree
, hf_h248_transactionId64
, tvb
, offset
-len
, len
, trx_id
);
2025 expert_add_info(pinfo
, pi
, &ei_h248_transactionId64
);
2030 proto_tree_add_uint(tree
, hf_h248_transactionId
, tvb
, offset
-len
, len
, (uint32_t)trx_id
);
2031 *trx_id_p
= (uint32_t)trx_id
;
2038 static int dissect_h248_ctx_id(bool implicit_tag
, packet_info
*pinfo
, proto_tree
*tree
, tvbuff_t
*tvb
, int offset
, uint32_t* ctx_id_p
) {
2043 uint64_t ctx_id
= 0;
2047 offset
=dissect_ber_identifier(pinfo
, tree
, tvb
, offset
, &ber_class
, &pc
, &tag
);
2048 offset
=dissect_ber_length(pinfo
, tree
, tvb
, offset
, &len
, NULL
);
2050 len
=tvb_reported_length_remaining(tvb
, offset
);
2054 if (len
> 8 || len
< 1) {
2057 for(i
=1;i
<=len
;i
++){
2058 ctx_id
=(ctx_id
<<8)|tvb_get_uint8(tvb
, offset
);
2062 if (ctx_id
> 0xffffffff) {
2063 proto_item
* pi
= proto_tree_add_uint64(tree
, hf_h248_context_id64
, tvb
, offset
-len
, len
, ctx_id
);
2064 expert_add_info(pinfo
, pi
, &ei_h248_context_id64
);
2066 *ctx_id_p
= 0xfffffffd;
2069 proto_item
* pi
= proto_tree_add_uint(tree
, hf_h248_context_id
, tvb
, offset
-len
, len
, (uint32_t)ctx_id
);
2071 if ( ctx_id
== NULL_CONTEXT
) {
2072 proto_item_set_text(pi
,"contextId: Null Context(0)");
2073 } else if ( ctx_id
== CHOOSE_CONTEXT
) {
2074 proto_item_set_text(pi
,"contextId: $ (Choose Context = 0xfffffffe)");
2075 } else if ( ctx_id
== ALL_CONTEXTS
) {
2076 proto_item_set_text(pi
,"contextId: * (All Contexts = 0xffffffff)");
2079 *ctx_id_p
= (uint32_t) ctx_id
;
2086 static s_h248_package_t
*s_find_package_id(uint16_t pkgid
) {
2087 s_h248_package_t
*s_pkg
= NULL
;
2088 s_pkg
= (s_h248_package_t
*)wmem_tree_lookup32(packages
, (uint32_t)(pkgid
));
2092 static const h248_package_t
*find_package_id(uint16_t pkgid
) {
2093 s_h248_package_t
*s_pkg
= NULL
;
2094 s_pkg
= s_find_package_id(pkgid
); /*(packages, GUINT_TO_POINTER((uint32_t)(pkgid))); */
2095 if (! s_pkg
) return &no_package
;
2099 static bool is_pkg_default(uint16_t pkgid
) {
2100 s_h248_package_t
*s_pkg
= NULL
;
2101 s_pkg
= (s_h248_package_t
*)wmem_tree_lookup32(packages
, (uint32_t)(pkgid
));
2102 if(! s_pkg
) return true;
2103 return s_pkg
->is_default
;
2106 void h248_register_package(h248_package_t
* pkg
, pkg_reg_action reg_action
) {
2107 h248_package_t
*pkg_found
= NULL
, *pkg_high
= NULL
, *pkg_low
= NULL
;
2108 s_h248_package_t
*s_pkg
= NULL
;
2110 bool pkg_default
= false;
2111 int j
= 0, idx
= 0, i
= 0, k
= 0;
2113 /* no packaegs are yet registerd so create tree and add default packages to tree
2115 packages
= wmem_tree_new(wmem_epan_scope()); /* init tree if no entries */
2116 while (base_package_name_vals
[i
].strptr
!= NULL
) {
2117 pkg_found
= wmem_new0(wmem_epan_scope(), h248_package_t
); /* create a h248 package structure */
2118 pkg_found
->id
= base_package_name_vals
[i
].value
;
2119 vst
= (value_string
*)wmem_alloc0(wmem_epan_scope(), sizeof(value_string
)*2);
2120 vst
[0].strptr
= base_package_name_vals
[i
].strptr
;
2121 pkg_found
->param_names
= vst
;
2122 pkg_found
->hfid
= &hf_h248_pkg_name
;
2123 pkg_found
->ett
= &ett_packagename
;
2124 try_val_to_str_idx((pkg_found
->id
)<<16,base_event_name_vals
, &j
);
2125 /* now look for events and signals that may be defined for package. If found, create value_strings */
2128 while((base_event_name_vals
[j
].strptr
!=NULL
) && (((base_event_name_vals
[j
].value
)>>16) == (pkg_found
->id
))) {
2132 vst
= (value_string
*)wmem_alloc0(wmem_epan_scope(), sizeof(value_string
)*(j
-idx
+1));
2133 for (k
=0;idx
<j
;k
++) {
2134 vst
[k
].strptr
= base_event_name_vals
[idx
].strptr
;
2135 vst
[k
].value
= (base_event_name_vals
[idx
].value
& 0xffff);
2138 pkg_found
->event_names
= vst
;
2141 /* now look at signals */
2142 if (!try_val_to_str_idx((pkg_found
->id
)<<16, base_signal_name_vals
, &j
)) {
2144 while((base_signal_name_vals
[j
].strptr
!= NULL
) && ((base_signal_name_vals
[j
].value
>>16) == (pkg_found
->id
))) {
2148 vst
= (value_string
*)wmem_alloc0(wmem_epan_scope(), sizeof(value_string
)*(j
-idx
+1));
2149 for (k
=0;idx
<j
;k
++) {
2150 vst
[k
].strptr
= base_signal_name_vals
[idx
].strptr
;
2151 vst
[k
].value
= (base_signal_name_vals
[idx
].value
&0xffff);
2154 pkg_found
->signal_names
= vst
;
2157 s_pkg
= wmem_new0(wmem_epan_scope(), s_h248_package_t
);
2158 s_pkg
->is_default
= true;
2159 s_pkg
->pkg
= pkg_found
;
2160 wmem_tree_insert32(packages
, pkg_found
->id
, s_pkg
);
2163 pkg_found
= NULL
; /* reset pointer */
2165 pkg_default
= is_pkg_default(pkg
->id
);
2166 if (((reg_action
==REPLACE_PKG
) || (reg_action
==ADD_PKG
)) && pkg_default
) {
2167 /* add/replace in tree */
2168 s_pkg
= wmem_new0(wmem_epan_scope(), s_h248_package_t
);
2169 s_pkg
->is_default
= false;
2170 s_pkg
->pkg
= (h248_package_t
*)pkg
;
2171 wmem_tree_insert32(packages
, pkg
->id
, s_pkg
);
2174 if(pkg_default
) reg_action
= MERGE_PKG_HIGH
; /* always make new package override default */
2175 s_pkg
= s_find_package_id(pkg
->id
);
2176 if (s_pkg
== NULL
) { /* no need to merge - package not in tree */
2177 s_pkg
= wmem_new0(wmem_epan_scope(), s_h248_package_t
);
2178 s_pkg
->is_default
= false;
2179 s_pkg
->pkg
= (h248_package_t
*)pkg
;
2180 wmem_tree_insert32(packages
, pkg
->id
, s_pkg
);
2183 pkg_found
= s_pkg
->pkg
;
2184 if (reg_action
==MERGE_PKG_HIGH
) {
2185 pkg_high
= (h248_package_t
*)pkg
;
2186 pkg_low
= pkg_found
;
2188 if (reg_action
==MERGE_PKG_LOW
) {
2189 pkg_high
= pkg_found
;
2190 pkg_low
= (h248_package_t
*)pkg
;
2193 /* if h248_package_t High Priority value !NULL, replace it in the found tree entry else use current entry */
2194 (pkg_high
->hfid
? (pkg_found
->hfid
=pkg_high
->hfid
) : (pkg_found
->hfid
=pkg_low
->hfid
));
2195 (pkg_high
->ett
? (pkg_found
->ett
=pkg_high
->ett
):( pkg_found
->ett
=pkg_low
->ett
));
2196 (pkg_high
->param_names
? (pkg_found
->param_names
=pkg_high
->param_names
):( pkg_found
->param_names
=pkg_low
->param_names
));
2197 (pkg_high
->signal_names
? (pkg_found
->signal_names
=pkg_high
->signal_names
):( pkg_found
->signal_names
=pkg_low
->signal_names
));
2198 (pkg_high
->event_names
? (pkg_found
->event_names
=pkg_high
->event_names
):( pkg_found
->event_names
=pkg_low
->event_names
));
2199 (pkg_high
->stats_names
? (pkg_found
->stats_names
=pkg_high
->stats_names
):( pkg_found
->stats_names
=pkg_low
->stats_names
));
2200 (pkg_high
->properties
? (pkg_found
->properties
=pkg_high
->properties
):( pkg_found
->properties
=pkg_low
->properties
));
2201 (pkg_high
->signals
? (pkg_found
->signals
=pkg_high
->signals
):( pkg_found
->signals
=pkg_low
->signals
));
2202 (pkg_high
->events
? (pkg_found
->events
=pkg_high
->events
):( pkg_found
->events
=pkg_low
->events
));
2203 (pkg_high
->statistics
? (pkg_found
->statistics
=pkg_high
->statistics
):( pkg_found
->statistics
=pkg_low
->statistics
));
2204 s_pkg
->pkg
= pkg_found
;
2205 s_pkg
->is_default
= false;
2210 static uint32_t packageandid
;
2212 static int dissect_h248_PkgdName(bool implicit_tag
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx _U_
, proto_tree
*tree
, int hf_index
) {
2213 tvbuff_t
*new_tvb
= NULL
;
2214 proto_tree
*package_tree
=NULL
;
2215 uint16_t name_major
, name_minor
;
2216 const h248_package_t
* pkg
= NULL
;
2218 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, &new_tvb
);
2221 /* this field is always 4 bytes so just read it into two integers */
2222 name_major
=tvb_get_ntohs(new_tvb
, 0);
2223 name_minor
=tvb_get_ntohs(new_tvb
, 2);
2224 packageandid
=(name_major
<<16)|name_minor
;
2226 pkg
= find_package_id(name_major
);
2227 /* do the prettification */
2228 proto_item_append_text(actx
->created_item
, " %s (%04x)",
2229 val_to_str_const(0, pkg
->param_names
, "Unknown Package"),
2233 package_tree
= proto_item_add_subtree(actx
->created_item
, ett_packagename
);
2234 proto_tree_add_uint_format(package_tree
, hf_h248_pkg_name
, tvb
, offset
-4, 2, name_major
,
2235 "PkgName: %s (0x%04x)", val_to_str_const(0, pkg
->param_names
, "Unknown Package"), name_major
);
2239 proto_item
* pi
= proto_tree_add_uint(package_tree
, hf_248_pkg_param
, tvb
, offset
-2, 2, name_minor
);
2242 if (pkg
->param_names
&& ( strval
= try_val_to_str(name_minor
, pkg
->param_names
) )) {
2243 strval
= wmem_strdup_printf(actx
->pinfo
->pool
, "%s (%d)",strval
,name_minor
);
2245 strval
= wmem_strdup_printf(actx
->pinfo
->pool
, "Unknown (%d)",name_minor
);
2248 proto_item_set_text(pi
,"Parameter: %s", strval
);
2254 curr_info
.pkg
= pkg
;
2259 static int dissect_h248_EventName(bool implicit_tag
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx _U_
, proto_tree
*tree
, int hf_index
) {
2261 proto_tree
*package_tree
=NULL
;
2262 uint16_t name_major
, name_minor
;
2263 const h248_package_t
* pkg
= NULL
;
2264 const h248_pkg_evt_t
* evt
= NULL
;
2266 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, &new_tvb
);
2269 /* this field is always 4 bytes so just read it into two integers */
2270 name_major
=tvb_get_ntohs(new_tvb
, 0);
2271 name_minor
=tvb_get_ntohs(new_tvb
, 2);
2272 packageandid
=(name_major
<<16)|name_minor
;
2274 pkg
= find_package_id(name_major
);
2275 /* do the prettification */
2276 proto_item_append_text(actx
->created_item
, " %s (%04x)",
2277 val_to_str_const(0, pkg
->param_names
, "Unknown Package"),
2280 package_tree
= proto_item_add_subtree(actx
->created_item
, ett_packagename
);
2282 proto_tree_add_uint_format(package_tree
, hf_h248_pkg_name
, tvb
, offset
-4, 2, name_major
,
2283 "%s (0x%04x)", val_to_str_const(0, pkg
->param_names
, "Unknown Package"), name_major
);
2285 curr_info
.pkg
= pkg
;
2288 for (evt
= pkg
->events
; evt
->hfid
; evt
++) {
2289 if (name_minor
== evt
->id
) {
2294 if (! evt
->hfid
) evt
= &no_event
;
2299 curr_info
.evt
= evt
;
2302 proto_item
* pi
= proto_tree_add_uint(package_tree
, hf_h248_event_code
, tvb
, offset
-2, 2, name_minor
);
2305 if (pkg
->event_names
&& ( strval
= try_val_to_str(name_minor
, pkg
->event_names
) )) {
2306 strval
= wmem_strdup_printf(actx
->pinfo
->pool
, "%s (%d)",strval
,name_minor
);
2308 strval
= wmem_strdup_printf(actx
->pinfo
->pool
, "Unknown (%d)",name_minor
);
2311 proto_item_set_text(pi
,"Event ID: %s", strval
);
2315 curr_info
.pkg
= &no_package
;
2316 curr_info
.evt
= &no_event
;
2324 static int dissect_h248_SignalName(bool implicit_tag
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx _U_
, proto_tree
*tree
, int hf_index
) {
2326 proto_tree
*package_tree
=NULL
;
2327 uint16_t name_major
, name_minor
;
2328 const h248_package_t
* pkg
= NULL
;
2329 const h248_pkg_sig_t
* sig
;
2331 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, &new_tvb
);
2334 /* this field is always 4 bytes so just read it into two integers */
2335 name_major
=tvb_get_ntohs(new_tvb
, 0);
2336 name_minor
=tvb_get_ntohs(new_tvb
, 2);
2337 packageandid
=(name_major
<<16)|name_minor
;
2339 pkg
= find_package_id(name_major
);
2340 /* do the prettification */
2341 proto_item_append_text(actx
->created_item
, " %s (%04x)",
2342 val_to_str_const(0, pkg
->param_names
, "Unknown Package"),
2345 package_tree
= proto_item_add_subtree(actx
->created_item
, ett_packagename
);
2347 proto_tree_add_uint_format(package_tree
, hf_h248_pkg_name
, tvb
, offset
-4, 2, name_major
,
2348 "%s (0x%04x)", val_to_str_const(0, pkg
->param_names
, "Unknown Package"), name_major
);
2351 for (sig
= pkg
->signals
; sig
->hfid
; sig
++) {
2352 if (name_minor
== sig
->id
) {
2357 if (! sig
->hfid
) sig
= &no_signal
;
2359 curr_info
.pkg
= pkg
;
2360 curr_info
.sig
= sig
;
2362 curr_info
.pkg
= &no_package
;
2363 curr_info
.sig
= &no_signal
;
2367 proto_item
* pi
= proto_tree_add_uint(package_tree
, hf_h248_signal_code
, tvb
, offset
-2, 2, name_minor
);
2370 if (pkg
->signal_names
&& ( strval
= try_val_to_str(name_minor
, pkg
->signal_names
) )) {
2371 strval
= wmem_strdup_printf(actx
->pinfo
->pool
, "%s (%d)",strval
,name_minor
);
2373 strval
= wmem_strdup_printf(actx
->pinfo
->pool
, "Unknown (%d)",name_minor
);
2376 proto_item_set_text(pi
,"Signal ID: %s", strval
);
2380 curr_info
.pkg
= &no_package
;
2381 curr_info
.sig
= &no_signal
;
2387 static int dissect_h248_PropertyID(bool implicit_tag _U_
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx _U_
, proto_tree
*tree
, int hf_index _U_
) {
2393 uint16_t name_minor
;
2395 const h248_package_t
* pkg
;
2396 const h248_pkg_param_t
* prop
;
2397 tvbuff_t
*next_tvb
= NULL
;
2399 offset
=dissect_ber_identifier(actx
->pinfo
, tree
, tvb
, offset
, &ber_class
, &pc
, &tag
);
2400 offset
=dissect_ber_length(actx
->pinfo
, tree
, tvb
, offset
, &len
, &ind
);
2401 end_offset
=offset
+len
;
2403 if( (ber_class
!=BER_CLASS_UNI
)
2404 ||(tag
!=BER_UNI_TAG_OCTETSTRING
) ){
2405 proto_tree_add_expert_format(tree
, actx
->pinfo
, &ei_h248_octet_string_expected
, tvb
, offset
-2, 2,
2406 "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class
, pc
, tag
);
2410 next_tvb
= tvb_new_subset_length(tvb
,offset
,len
);
2412 name_minor
= packageandid
& 0xffff;
2414 pkg
= (curr_info
.pkg
) ? curr_info
.pkg
: &no_package
;
2416 if (pkg
->properties
) {
2417 for (prop
= pkg
->properties
; prop
&& prop
->hfid
; prop
++) {
2418 if (name_minor
== prop
->id
) {
2425 if (prop
&& prop
->hfid
&& prop
->dissector
) {
2426 prop
->dissector(tree
, next_tvb
, actx
->pinfo
, *(prop
->hfid
), &curr_info
, prop
->data
);
2434 static int dissect_h248_SigParameterName(bool implicit_tag _U_
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx _U_
, proto_tree
*tree
, int hf_index _U_
) {
2436 uint32_t param_id
= 0xffffffff;
2437 const h248_pkg_param_t
* sigpar
;
2441 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, &next_tvb
);
2442 pi
= actx
->created_item
;
2444 switch(tvb_reported_length(next_tvb
)) {
2445 case 4: param_id
= tvb_get_ntohl(next_tvb
,0); break;
2446 case 3: param_id
= tvb_get_ntoh24(next_tvb
,0); break;
2447 case 2: param_id
= tvb_get_ntohs(next_tvb
,0); break;
2448 case 1: param_id
= tvb_get_uint8(next_tvb
,0); break;
2452 curr_info
.par
= &no_param
;
2454 if (curr_info
.sig
&& curr_info
.sig
->parameters
) {
2455 for(sigpar
= curr_info
.sig
->parameters
; sigpar
->hfid
; sigpar
++) {
2456 if (sigpar
->id
== param_id
) {
2457 curr_info
.par
= sigpar
;
2463 if (curr_info
.sig
&& curr_info
.sig
->param_names
&& ( strval
= try_val_to_str(param_id
, curr_info
.sig
->param_names
) )) {
2464 strval
= wmem_strdup_printf(actx
->pinfo
->pool
, "%s (%d)",strval
,param_id
);
2466 strval
= wmem_strdup_printf(actx
->pinfo
->pool
, "Unknown (%d)",param_id
);
2469 proto_item_set_text(pi
,"Parameter: %s", strval
);
2474 static int dissect_h248_SigParamValue(bool implicit_tag _U_
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx _U_
, proto_tree
*tree
, int hf_index _U_
) {
2480 tvbuff_t
*next_tvb
= NULL
;
2482 offset
=dissect_ber_identifier(actx
->pinfo
, tree
, tvb
, offset
, &ber_class
, &pc
, &tag
);
2483 offset
=dissect_ber_length(actx
->pinfo
, tree
, tvb
, offset
, &len
, &ind
);
2484 end_offset
=offset
+len
;
2486 if( (ber_class
!=BER_CLASS_UNI
)
2487 ||(tag
!=BER_UNI_TAG_OCTETSTRING
) ){
2488 proto_tree_add_expert_format(tree
, actx
->pinfo
, &ei_h248_octet_string_expected
, tvb
, offset
-2, 2,
2489 "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class
, pc
, tag
);
2493 next_tvb
= tvb_new_subset_length(tvb
,offset
,len
);
2495 if ( curr_info
.par
&& curr_info
.par
->dissector
) {
2496 curr_info
.par
->dissector(tree
, next_tvb
, actx
->pinfo
, *(curr_info
.par
->hfid
), &curr_info
, curr_info
.par
->data
);
2502 static int dissect_h248_SigParamValueV1(bool implicit_tag _U_
, tvbuff_t
*tvb
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree
, int hf_index _U_
) {
2503 return dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, NULL
);
2507 static int dissect_h248_EventParameterName(bool implicit_tag _U_
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx _U_
, proto_tree
*tree
, int hf_index _U_
) {
2509 uint32_t param_id
= 0xffffffff;
2510 const h248_pkg_param_t
* evtpar
;
2514 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, &next_tvb
);
2515 pi
= actx
->created_item
;
2518 switch(tvb_reported_length(next_tvb
)) {
2519 case 4: param_id
= tvb_get_ntohl(next_tvb
,0); break;
2520 case 3: param_id
= tvb_get_ntoh24(next_tvb
,0); break;
2521 case 2: param_id
= tvb_get_ntohs(next_tvb
,0); break;
2522 case 1: param_id
= tvb_get_uint8(next_tvb
,0); break;
2528 curr_info
.par
= &no_param
;
2530 if (curr_info
.evt
&& curr_info
.evt
->parameters
) {
2531 for(evtpar
= curr_info
.evt
->parameters
; evtpar
->hfid
; evtpar
++) {
2532 if (evtpar
->id
== param_id
) {
2533 curr_info
.par
= evtpar
;
2538 curr_info
.par
= &no_param
;
2541 if (curr_info
.evt
&& curr_info
.evt
->param_names
&& ( strval
= try_val_to_str(param_id
, curr_info
.evt
->param_names
) )) {
2542 strval
= wmem_strdup_printf(actx
->pinfo
->pool
, "%s (%d)",strval
,param_id
);
2544 strval
= wmem_strdup_printf(actx
->pinfo
->pool
, "Unknown (%d)",param_id
);
2547 proto_item_set_text(pi
,"Parameter: %s", strval
);
2553 static int dissect_h248_EventParamValue(bool implicit_tag _U_
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx _U_
, proto_tree
*tree
, int hf_index _U_
) {
2561 offset
=dissect_ber_identifier(actx
->pinfo
, tree
, tvb
, offset
, &ber_class
, &pc
, &tag
);
2562 offset
=dissect_ber_length(actx
->pinfo
, tree
, tvb
, offset
, &len
, &ind
);
2563 end_offset
=offset
+len
;
2565 if( (ber_class
!=BER_CLASS_UNI
)
2566 ||(tag
!=BER_UNI_TAG_OCTETSTRING
) ){
2567 proto_tree_add_expert_format(tree
, actx
->pinfo
, &ei_h248_octet_string_expected
, tvb
, offset
-2, 2,
2568 "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class
, pc
, tag
);
2572 next_tvb
= tvb_new_subset_length(tvb
,offset
,len
);
2574 if ( curr_info
.par
&& curr_info
.par
->dissector
) {
2575 curr_info
.par
->dissector(tree
, next_tvb
, actx
->pinfo
, *(curr_info
.par
->hfid
), &curr_info
, curr_info
.par
->data
);
2581 static int dissect_h248_EventParamValueV1(bool implicit_tag _U_
, tvbuff_t
*tvb
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree
, int hf_index _U_
) {
2582 return dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, &tvb
);
2586 static int dissect_h248_MtpAddress(bool implicit_tag
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx _U_
, proto_tree
*tree
, int hf_index
) {
2588 proto_tree
*mtp_tree
=NULL
;
2590 int i
, len
, old_offset
;
2593 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, &new_tvb
);
2596 /* this field is either 2 or 4 bytes so just read it into an integer */
2598 len
=tvb_reported_length(new_tvb
);
2600 val
= (val
<<8)|tvb_get_uint8(new_tvb
, i
);
2603 /* do the prettification */
2604 proto_item_append_text(actx
->created_item
, " NI = %d, PC = %d ( %d-%d )", val
&0x03,val
>>2,val
&0x03,val
>>2);
2606 mtp_tree
= proto_item_add_subtree(actx
->created_item
, ett_mtpaddress
);
2608 proto_tree_add_uint(mtp_tree
, hf_h248_mtpaddress_ni
, tvb
, old_offset
, offset
-old_offset
, val
&0x03);
2609 proto_tree_add_uint(mtp_tree
, hf_h248_mtpaddress_pc
, tvb
, old_offset
, offset
-old_offset
, val
>>2);
2615 #define H248_TAP() do { if (keep_persistent_data && curr_info.cmd) tap_queue_packet(h248_tap, actx->pinfo, curr_info.cmd); } while(0)
2617 /*--- Cyclic dependencies ---*/
2619 /* SecondEventsDescriptor -> SecondEventsDescriptor/eventList -> SecondRequestedEvent -> SecondRequestedActions -> NotifyBehaviour -> RegulatedEmbeddedDescriptor -> SecondEventsDescriptor */
2620 static int dissect_h248_SecondEventsDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
);
2626 dissect_h248_SecurityParmIndex(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2627 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
2636 dissect_h248_SequenceNum(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2637 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
2646 dissect_h248_AuthData(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2647 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
2654 static const ber_sequence_t AuthenticationHeader_sequence
[] = {
2655 { &hf_h248_secParmIndex
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_SecurityParmIndex
},
2656 { &hf_h248_seqNum
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SequenceNum
},
2657 { &hf_h248_ad
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_AuthData
},
2658 { NULL
, 0, 0, 0, NULL
}
2662 dissect_h248_AuthenticationHeader(bool 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_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
2664 AuthenticationHeader_sequence
, hf_index
, ett_h248_AuthenticationHeader
);
2672 dissect_h248_T_version(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2673 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
2683 dissect_h248_OCTET_STRING_SIZE_4(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2684 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
2693 dissect_h248_INTEGER_0_65535(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2694 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
2701 static const ber_sequence_t IP4Address_sequence
[] = {
2702 { &hf_h248_iP4Address
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_OCTET_STRING_SIZE_4
},
2703 { &hf_h248_portNumber
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_65535
},
2704 { NULL
, 0, 0, 0, NULL
}
2708 dissect_h248_IP4Address(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2709 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
2710 IP4Address_sequence
, hf_index
, ett_h248_IP4Address
);
2718 dissect_h248_OCTET_STRING_SIZE_16(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2719 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
2726 static const ber_sequence_t IP6Address_sequence
[] = {
2727 { &hf_h248_iP6Address
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_OCTET_STRING_SIZE_16
},
2728 { &hf_h248_portNumber
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_65535
},
2729 { NULL
, 0, 0, 0, NULL
}
2733 dissect_h248_IP6Address(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2734 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
2735 IP6Address_sequence
, hf_index
, ett_h248_IP6Address
);
2743 dissect_h248_IA5String(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2744 offset
= dissect_ber_restricted_string(implicit_tag
, BER_UNI_TAG_IA5String
,
2745 actx
, tree
, tvb
, offset
, hf_index
,
2752 static const ber_sequence_t DomainName_sequence
[] = {
2753 { &hf_h248_domName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_IA5String
},
2754 { &hf_h248_portNumber
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_65535
},
2755 { NULL
, 0, 0, 0, NULL
}
2759 dissect_h248_DomainName(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2760 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
2761 DomainName_sequence
, hf_index
, ett_h248_DomainName
);
2769 dissect_h248_PathName(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2770 offset
= dissect_ber_restricted_string(implicit_tag
, BER_UNI_TAG_IA5String
,
2771 actx
, tree
, tvb
, offset
, hf_index
,
2779 static const value_string h248_MId_vals
[] = {
2780 { 0, "ip4Address" },
2781 { 1, "ip6Address" },
2782 { 2, "domainName" },
2783 { 3, "deviceName" },
2784 { 4, "mtpAddress" },
2788 static const ber_choice_t MId_choice
[] = {
2789 { 0, &hf_h248_ip4Address
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_IP4Address
},
2790 { 1, &hf_h248_ip6Address
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_IP6Address
},
2791 { 2, &hf_h248_domainName
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_DomainName
},
2792 { 3, &hf_h248_deviceName
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_PathName
},
2793 { 4, &hf_h248_mtpAddress
, BER_CLASS_CON
, 4, BER_FLAGS_IMPLTAG
, dissect_h248_MtpAddress
},
2794 { 0, NULL
, 0, 0, 0, NULL
}
2798 dissect_h248_MId(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2799 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
2800 MId_choice
, hf_index
, ett_h248_MId
,
2810 dissect_h248_T_errorCode(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2811 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, &error_code
);
2812 expert_add_info(actx
->pinfo
, actx
->created_item
, &ei_h248_errored_command
);
2814 if (curr_info
.cmd
) {
2815 gcp_cmd_set_error(curr_info
.cmd
,error_code
);
2816 } else if (curr_info
.trx
) {
2817 gcp_trx_set_error(curr_info
.trx
,error_code
);
2826 dissect_h248_ErrorText(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2827 offset
= dissect_ber_restricted_string(implicit_tag
, BER_UNI_TAG_IA5String
,
2828 actx
, tree
, tvb
, offset
, hf_index
,
2835 static const ber_sequence_t ErrorDescriptor_sequence
[] = {
2836 { &hf_h248_errorCode
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_T_errorCode
},
2837 { &hf_h248_errorText
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_ErrorText
},
2838 { NULL
, 0, 0, 0, NULL
}
2842 dissect_h248_ErrorDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2843 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
2844 ErrorDescriptor_sequence
, hf_index
, ett_h248_ErrorDescriptor
);
2852 dissect_h248_TransactionId(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2853 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
2862 dissect_h248_T_transactionId(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2863 uint32_t trx_id
= 0;
2864 offset
= dissect_h248_trx_id(implicit_tag
, actx
->pinfo
, tree
, tvb
, offset
, &trx_id
);
2865 curr_info
.trx
= gcp_trx(curr_info
.msg
, trx_id
, GCP_TRX_REQUEST
, actx
->pinfo
, keep_persistent_data
);
2875 dissect_h248_ContextId(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2876 uint32_t ctx_id
= 0;
2877 offset
= dissect_h248_ctx_id(implicit_tag
, actx
->pinfo
, tree
, tvb
, offset
, &ctx_id
);
2878 curr_info
.ctx
= gcp_ctx(curr_info
.msg
,curr_info
.trx
,ctx_id
,actx
->pinfo
,keep_persistent_data
);
2879 curr_info
.cmd
= NULL
;
2880 curr_info
.term
= NULL
;
2888 dissect_h248_INTEGER_0_15(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2889 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
2898 dissect_h248_BOOLEAN(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2899 offset
= dissect_ber_boolean(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, NULL
);
2907 dissect_h248_WildcardField(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2909 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, &new_tvb
);
2910 tree
= proto_item_add_subtree(actx
->created_item
,ett_wildcard
);
2911 proto_tree_add_item(tree
,hf_h248_term_wild_type
,new_tvb
,0,1,ENC_BIG_ENDIAN
);
2912 proto_tree_add_item(tree
,hf_h248_term_wild_level
,new_tvb
,0,1,ENC_BIG_ENDIAN
);
2913 proto_tree_add_item(tree
,hf_h248_term_wild_position
,new_tvb
,0,1,ENC_BIG_ENDIAN
);
2915 wild_term
= tvb_get_uint8(new_tvb
,0) & 0x80 ? GCP_WILDCARD_CHOOSE
: GCP_WILDCARD_ALL
;
2916 /* limitation: assume only one wildcard is used */
2917 wild_card
= tvb_get_uint8(new_tvb
,0);
2924 static const ber_sequence_t SEQUENCE_OF_WildcardField_sequence_of
[1] = {
2925 { &hf_h248_wildcard_item
, BER_CLASS_UNI
, BER_UNI_TAG_OCTETSTRING
, BER_FLAGS_NOOWNTAG
, dissect_h248_WildcardField
},
2929 dissect_h248_SEQUENCE_OF_WildcardField(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2930 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
2931 SEQUENCE_OF_WildcardField_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_WildcardField
);
2939 dissect_h248_T_terminationId(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2941 h248_term_info_t term_info
;
2943 term_info
.wild_card
= wild_card
;
2944 term_info
.str
= NULL
;
2946 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, &new_tvb
);
2949 curr_info
.term
->len
= tvb_reported_length(new_tvb
);
2950 curr_info
.term
->type
= 0; /* unknown */
2952 if (h248_term_handle
) {
2953 call_dissector_with_data(h248_term_handle
, new_tvb
, actx
->pinfo
, tree
, &term_info
);
2957 if (curr_info
.term
->len
) {
2958 curr_info
.term
->buffer
= (uint8_t *)tvb_memdup(actx
->pinfo
->pool
,new_tvb
,0,curr_info
.term
->len
);
2960 curr_info
.term
->str
= wmem_strdup_printf(actx
->pinfo
->pool
, "%s %s",
2961 bytes_to_str_punct(actx
->pinfo
->pool
,curr_info
.term
->buffer
,curr_info
.term
->len
, 0),
2964 curr_info
.term
->str
= bytes_to_str_punct(actx
->pinfo
->pool
,curr_info
.term
->buffer
,curr_info
.term
->len
, 0);
2969 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
);
2972 curr_info
.term
->len
= 0;
2973 curr_info
.term
->buffer
= (uint8_t*)wmem_strdup(actx
->pinfo
->pool
, "");
2974 curr_info
.term
->str
= wmem_strdup(actx
->pinfo
->pool
, "?");
2981 static const ber_sequence_t TerminationID_sequence
[] = {
2982 { &hf_h248_wildcard
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_WildcardField
},
2983 { &hf_h248_terminationId
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_T_terminationId
},
2984 { NULL
, 0, 0, 0, NULL
}
2988 dissect_h248_TerminationID(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
2989 curr_info
.term
= wmem_new0(actx
->pinfo
->pool
, gcp_term_t
);
2990 wild_term
= GCP_WILDCARD_NONE
;
2991 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
2992 TerminationID_sequence
, hf_index
, ett_h248_TerminationID
);
2998 static const value_string h248_T_topologyDirection_vals
[] = {
3007 dissect_h248_T_topologyDirection(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3008 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3017 dissect_h248_StreamID(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3018 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3025 static const value_string h248_T_topologyDirectionExtension_vals
[] = {
3026 { 0, "onewayexternal" },
3027 { 1, "onewayboth" },
3033 dissect_h248_T_topologyDirectionExtension(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3034 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3041 static const ber_sequence_t TopologyRequest_sequence
[] = {
3042 { &hf_h248_terminationFrom
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationID
},
3043 { &hf_h248_terminationTo
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationID
},
3044 { &hf_h248_topologyDirection
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_T_topologyDirection
},
3045 { &hf_h248_streamID
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_StreamID
},
3046 { &hf_h248_topologyDirectionExtension
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_T_topologyDirectionExtension
},
3047 { NULL
, 0, 0, 0, NULL
}
3051 dissect_h248_TopologyRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3052 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3053 TopologyRequest_sequence
, hf_index
, ett_h248_TopologyRequest
);
3059 static const ber_sequence_t T_topologyReq_sequence_of
[1] = {
3060 { &hf_h248_topologyReq_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_TopologyRequest
},
3064 dissect_h248_T_topologyReq(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3065 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_TOPOLOGY_REQ
,offset
,actx
->pinfo
,keep_persistent_data
);
3067 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3068 T_topologyReq_sequence_of
, hf_index
, ett_h248_T_topologyReq
);
3070 curr_info
.cmd
= NULL
;
3077 dissect_h248_Iepscallind_BOOL(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3078 offset
= dissect_ber_boolean(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, NULL
);
3087 dissect_h248_PropertyName(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3088 offset
= dissect_h248_PkgdName(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
3095 static const ber_sequence_t SEQUENCE_OF_PropertyID_sequence_of
[1] = {
3096 { &hf_h248_propertyParamValue_item
, BER_CLASS_UNI
, BER_UNI_TAG_OCTETSTRING
, BER_FLAGS_NOOWNTAG
, dissect_h248_PropertyID
},
3100 dissect_h248_SEQUENCE_OF_PropertyID(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3101 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3102 SEQUENCE_OF_PropertyID_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_PropertyID
);
3108 static const value_string h248_Relation_vals
[] = {
3109 { 0, "greaterThan" },
3110 { 1, "smallerThan" },
3117 dissect_h248_Relation(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3118 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3125 static const value_string h248_PropParm_extraInfo_vals
[] = {
3132 static const ber_choice_t PropParm_extraInfo_choice
[] = {
3133 { 0, &hf_h248_relation
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_Relation
},
3134 { 1, &hf_h248_range
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
3135 { 2, &hf_h248_sublist
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
3136 { 0, NULL
, 0, 0, 0, NULL
}
3140 dissect_h248_PropParm_extraInfo(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3141 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
3142 PropParm_extraInfo_choice
, hf_index
, ett_h248_PropParm_extraInfo
,
3149 static const ber_sequence_t PropertyParm_sequence
[] = {
3150 { &hf_h248_propertyName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_PropertyName
},
3151 { &hf_h248_propertyParamValue
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_PropertyID
},
3152 { &hf_h248_propParm_extraInfo
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_PropParm_extraInfo
},
3153 { NULL
, 0, 0, 0, NULL
}
3157 dissect_h248_PropertyParm(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3158 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3159 PropertyParm_sequence
, hf_index
, ett_h248_PropertyParm
);
3165 static const ber_sequence_t SEQUENCE_OF_PropertyParm_sequence_of
[1] = {
3166 { &hf_h248_contextProp_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_PropertyParm
},
3170 dissect_h248_SEQUENCE_OF_PropertyParm(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3171 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3172 SEQUENCE_OF_PropertyParm_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_PropertyParm
);
3180 dissect_h248_ContextIDinList(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3181 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3188 static const ber_sequence_t SEQUENCE_OF_ContextIDinList_sequence_of
[1] = {
3189 { &hf_h248_contextList_item
, BER_CLASS_UNI
, BER_UNI_TAG_INTEGER
, BER_FLAGS_NOOWNTAG
, dissect_h248_ContextIDinList
},
3193 dissect_h248_SEQUENCE_OF_ContextIDinList(bool 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_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3195 SEQUENCE_OF_ContextIDinList_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_ContextIDinList
);
3201 static const ber_sequence_t ContextRequest_sequence
[] = {
3202 { &hf_h248_priority
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_15
},
3203 { &hf_h248_emergency
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
3204 { &hf_h248_topologyReq
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_T_topologyReq
},
3205 { &hf_h248_iepscallind_BOOL
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_Iepscallind_BOOL
},
3206 { &hf_h248_contextProp
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_PropertyParm
},
3207 { &hf_h248_contextList
, BER_CLASS_CON
, 5, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_ContextIDinList
},
3208 { NULL
, 0, 0, 0, NULL
}
3212 dissect_h248_ContextRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3213 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3214 ContextRequest_sequence
, hf_index
, ett_h248_ContextRequest
);
3222 dissect_h248_NULL(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3223 offset
= dissect_ber_null(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
);
3229 static const ber_sequence_t IndAudPropertyParm_sequence
[] = {
3230 { &hf_h248_name
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_PkgdName
},
3231 { &hf_h248_propertyParms
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_PropertyParm
},
3232 { NULL
, 0, 0, 0, NULL
}
3236 dissect_h248_IndAudPropertyParm(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3237 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3238 IndAudPropertyParm_sequence
, hf_index
, ett_h248_IndAudPropertyParm
);
3244 static const ber_sequence_t SEQUENCE_OF_IndAudPropertyParm_sequence_of
[1] = {
3245 { &hf_h248_contextPropAud_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_IndAudPropertyParm
},
3249 dissect_h248_SEQUENCE_OF_IndAudPropertyParm(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3250 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3251 SEQUENCE_OF_IndAudPropertyParm_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_IndAudPropertyParm
);
3257 static const value_string h248_SelectLogic_vals
[] = {
3258 { 0, "andAUDITSelect" },
3259 { 1, "orAUDITSelect" },
3263 static const ber_choice_t SelectLogic_choice
[] = {
3264 { 0, &hf_h248_andAUDITSelect
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
3265 { 1, &hf_h248_orAUDITSelect
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
3266 { 0, NULL
, 0, 0, 0, NULL
}
3270 dissect_h248_SelectLogic(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3271 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
3272 SelectLogic_choice
, hf_index
, ett_h248_SelectLogic
,
3279 static const ber_sequence_t ContextAttrAuditRequest_sequence
[] = {
3280 { &hf_h248_topology
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
3281 { &hf_h248_cAAREmergency
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
3282 { &hf_h248_cAARPriority
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
3283 { &hf_h248_iepscallind
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
3284 { &hf_h248_contextPropAud
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_IndAudPropertyParm
},
3285 { &hf_h248_selectpriority
, BER_CLASS_CON
, 5, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_15
},
3286 { &hf_h248_selectemergency
, BER_CLASS_CON
, 6, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
3287 { &hf_h248_selectiepscallind
, BER_CLASS_CON
, 7, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
3288 { &hf_h248_selectLogic
, BER_CLASS_CON
, 8, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_SelectLogic
},
3289 { NULL
, 0, 0, 0, NULL
}
3293 dissect_h248_ContextAttrAuditRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3294 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3295 ContextAttrAuditRequest_sequence
, hf_index
, ett_h248_ContextAttrAuditRequest
);
3303 dissect_h248_T_contextAttrAuditReq(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3304 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
);
3306 offset
= dissect_h248_ContextAttrAuditRequest(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
3308 curr_info
.cmd
= NULL
;
3313 static const ber_sequence_t TerminationIDList_sequence_of
[1] = {
3314 { &hf_h248_TerminationIDList_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_TerminationID
},
3318 dissect_h248_TerminationIDList(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3319 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3320 TerminationIDList_sequence_of
, hf_index
, ett_h248_TerminationIDList
);
3326 static const value_string h248_EventBufferControl_vals
[] = {
3334 dissect_h248_EventBufferControl(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3335 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3342 static const value_string h248_ServiceState_vals
[] = {
3351 dissect_h248_ServiceState(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3352 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3359 static const ber_sequence_t TerminationStateDescriptor_sequence
[] = {
3360 { &hf_h248_tSDpropertyParms
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_PropertyParm
},
3361 { &hf_h248_tSEventBufferControl
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_EventBufferControl
},
3362 { &hf_h248_serviceState
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_ServiceState
},
3363 { NULL
, 0, 0, 0, NULL
}
3367 dissect_h248_TerminationStateDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3368 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3369 TerminationStateDescriptor_sequence
, hf_index
, ett_h248_TerminationStateDescriptor
);
3375 static const value_string h248_StreamMode_vals
[] = {
3386 dissect_h248_StreamMode(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3387 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3394 static const ber_sequence_t LocalControlDescriptor_sequence
[] = {
3395 { &hf_h248_streamMode
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_StreamMode
},
3396 { &hf_h248_reserveValue
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
3397 { &hf_h248_reserveGroup
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
3398 { &hf_h248_lCDpropertyParms
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_PropertyParm
},
3399 { NULL
, 0, 0, 0, NULL
}
3403 dissect_h248_LocalControlDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3404 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3405 LocalControlDescriptor_sequence
, hf_index
, ett_h248_LocalControlDescriptor
);
3411 static const ber_sequence_t PropertyGroup_sequence_of
[1] = {
3412 { &hf_h248_PropertyGroup_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_PropertyParm
},
3416 dissect_h248_PropertyGroup(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3417 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3418 PropertyGroup_sequence_of
, hf_index
, ett_h248_PropertyGroup
);
3424 static const ber_sequence_t SEQUENCE_OF_PropertyGroup_sequence_of
[1] = {
3425 { &hf_h248_propGrps_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_PropertyGroup
},
3429 dissect_h248_SEQUENCE_OF_PropertyGroup(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3430 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3431 SEQUENCE_OF_PropertyGroup_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_PropertyGroup
);
3437 static const ber_sequence_t LocalRemoteDescriptor_sequence
[] = {
3438 { &hf_h248_propGrps
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_PropertyGroup
},
3439 { NULL
, 0, 0, 0, NULL
}
3443 dissect_h248_LocalRemoteDescriptor(bool 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 LocalRemoteDescriptor_sequence
, hf_index
, ett_h248_LocalRemoteDescriptor
);
3453 dissect_h248_StatName(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3454 offset
= dissect_h248_PkgdName(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
3462 dissect_h248_OCTET_STRING(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3463 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3470 static const ber_sequence_t Value_sequence_of
[1] = {
3471 { &hf_h248_Value_item
, BER_CLASS_UNI
, BER_UNI_TAG_OCTETSTRING
, BER_FLAGS_NOOWNTAG
, dissect_h248_OCTET_STRING
},
3475 dissect_h248_Value(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3476 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3477 Value_sequence_of
, hf_index
, ett_h248_Value
);
3485 dissect_h248_StatValue(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3486 offset
= dissect_h248_Value(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
3492 static const ber_sequence_t StatisticsParameter_sequence
[] = {
3493 { &hf_h248_statName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_StatName
},
3494 { &hf_h248_statValue
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_StatValue
},
3495 { NULL
, 0, 0, 0, NULL
}
3499 dissect_h248_StatisticsParameter(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3500 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3501 StatisticsParameter_sequence
, hf_index
, ett_h248_StatisticsParameter
);
3507 static const ber_sequence_t StatisticsDescriptor_sequence_of
[1] = {
3508 { &hf_h248_StatisticsDescriptor_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_StatisticsParameter
},
3512 dissect_h248_StatisticsDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3513 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3514 StatisticsDescriptor_sequence_of
, hf_index
, ett_h248_StatisticsDescriptor
);
3520 static const ber_sequence_t StreamParms_sequence
[] = {
3521 { &hf_h248_localControlDescriptor
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_LocalControlDescriptor
},
3522 { &hf_h248_localDescriptor
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_LocalRemoteDescriptor
},
3523 { &hf_h248_remoteDescriptor
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_LocalRemoteDescriptor
},
3524 { &hf_h248_sPstatisticsDescriptor
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_StatisticsDescriptor
},
3525 { NULL
, 0, 0, 0, NULL
}
3529 dissect_h248_StreamParms(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3530 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3531 StreamParms_sequence
, hf_index
, ett_h248_StreamParms
);
3537 static const ber_sequence_t StreamDescriptor_sequence
[] = {
3538 { &hf_h248_streamID
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_StreamID
},
3539 { &hf_h248_streamParms
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_StreamParms
},
3540 { NULL
, 0, 0, 0, NULL
}
3544 dissect_h248_StreamDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3545 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3546 StreamDescriptor_sequence
, hf_index
, ett_h248_StreamDescriptor
);
3552 static const ber_sequence_t SEQUENCE_OF_StreamDescriptor_sequence_of
[1] = {
3553 { &hf_h248_mediaDescriptorMultiStream_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_StreamDescriptor
},
3557 dissect_h248_SEQUENCE_OF_StreamDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3558 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3559 SEQUENCE_OF_StreamDescriptor_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_StreamDescriptor
);
3565 static const value_string h248_T_streams_vals
[] = {
3567 { 1, "multiStream" },
3571 static const ber_choice_t T_streams_choice
[] = {
3572 { 0, &hf_h248_mediaDescriptorOneStream
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_StreamParms
},
3573 { 1, &hf_h248_mediaDescriptorMultiStream
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_StreamDescriptor
},
3574 { 0, NULL
, 0, 0, 0, NULL
}
3578 dissect_h248_T_streams(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3579 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
3580 T_streams_choice
, hf_index
, ett_h248_T_streams
,
3587 static const ber_sequence_t MediaDescriptor_sequence
[] = {
3588 { &hf_h248_termStateDescr
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_TerminationStateDescriptor
},
3589 { &hf_h248_streams
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_T_streams
},
3590 { NULL
, 0, 0, 0, NULL
}
3594 dissect_h248_MediaDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3595 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3596 MediaDescriptor_sequence
, hf_index
, ett_h248_MediaDescriptor
);
3602 static const value_string h248_ModemType_vals
[] = {
3617 dissect_h248_ModemType(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3618 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3625 static const ber_sequence_t SEQUENCE_OF_ModemType_sequence_of
[1] = {
3626 { &hf_h248_mtl_item
, BER_CLASS_UNI
, BER_UNI_TAG_ENUMERATED
, BER_FLAGS_NOOWNTAG
, dissect_h248_ModemType
},
3630 dissect_h248_SEQUENCE_OF_ModemType(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3631 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3632 SEQUENCE_OF_ModemType_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_ModemType
);
3640 dissect_h248_OBJECT_IDENTIFIER(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3641 offset
= dissect_ber_object_identifier(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, NULL
);
3649 dissect_h248_INTEGER_0_255(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3650 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3657 static const ber_sequence_t H221NonStandard_sequence
[] = {
3658 { &hf_h248_t35CountryCode1
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_255
},
3659 { &hf_h248_t35CountryCode2
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_255
},
3660 { &hf_h248_t35Extension
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_255
},
3661 { &hf_h248_manufacturerCode
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_65535
},
3662 { NULL
, 0, 0, 0, NULL
}
3666 dissect_h248_H221NonStandard(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3667 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3668 H221NonStandard_sequence
, hf_index
, ett_h248_H221NonStandard
);
3676 dissect_h248_IA5String_SIZE_8(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3677 offset
= dissect_ber_restricted_string(implicit_tag
, BER_UNI_TAG_IA5String
,
3678 actx
, tree
, tvb
, offset
, hf_index
,
3685 static const value_string h248_NonStandardIdentifier_vals
[] = {
3687 { 1, "h221NonStandard" },
3688 { 2, "experimental" },
3692 static const ber_choice_t NonStandardIdentifier_choice
[] = {
3693 { 0, &hf_h248_object
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_OBJECT_IDENTIFIER
},
3694 { 1, &hf_h248_h221NonStandard
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_H221NonStandard
},
3695 { 2, &hf_h248_experimental
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_IA5String_SIZE_8
},
3696 { 0, NULL
, 0, 0, 0, NULL
}
3700 dissect_h248_NonStandardIdentifier(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3701 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
3702 NonStandardIdentifier_choice
, hf_index
, ett_h248_NonStandardIdentifier
,
3709 static const ber_sequence_t NonStandardData_sequence
[] = {
3710 { &hf_h248_nonStandardIdentifier
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_NonStandardIdentifier
},
3711 { &hf_h248_data
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_OCTET_STRING
},
3712 { NULL
, 0, 0, 0, NULL
}
3716 dissect_h248_NonStandardData(bool 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_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3718 NonStandardData_sequence
, hf_index
, ett_h248_NonStandardData
);
3724 static const ber_sequence_t ModemDescriptor_sequence
[] = {
3725 { &hf_h248_mtl
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_ModemType
},
3726 { &hf_h248_mpl
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_PropertyParm
},
3727 { &hf_h248_nonStandardData
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NonStandardData
},
3728 { NULL
, 0, 0, 0, NULL
}
3732 dissect_h248_ModemDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3733 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3734 ModemDescriptor_sequence
, hf_index
, ett_h248_ModemDescriptor
);
3740 static const value_string h248_MuxType_vals
[] = {
3751 dissect_h248_MuxType(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3752 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3759 static const ber_sequence_t SEQUENCE_OF_TerminationID_sequence_of
[1] = {
3760 { &hf_h248_termList_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_TerminationID
},
3764 dissect_h248_SEQUENCE_OF_TerminationID(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3765 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3766 SEQUENCE_OF_TerminationID_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_TerminationID
);
3772 static const ber_sequence_t MuxDescriptor_sequence
[] = {
3773 { &hf_h248_muxType
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_MuxType
},
3774 { &hf_h248_termList
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_TerminationID
},
3775 { &hf_h248_nonStandardData
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NonStandardData
},
3776 { NULL
, 0, 0, 0, NULL
}
3780 dissect_h248_MuxDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3781 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3782 MuxDescriptor_sequence
, hf_index
, ett_h248_MuxDescriptor
);
3790 dissect_h248_RequestID(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3791 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3801 dissect_h248_Name(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3802 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3811 dissect_h248_DigitMapName(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3812 offset
= dissect_h248_Name(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
3820 dissect_h248_INTEGER_0_99(bool 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_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3828 static const ber_sequence_t DigitMapValue_sequence
[] = {
3829 { &hf_h248_startTimer
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_99
},
3830 { &hf_h248_shortTimer
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_99
},
3831 { &hf_h248_longTimer
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_99
},
3832 { &hf_h248_digitMapBody
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_IA5String
},
3833 { &hf_h248_durationTimer
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_99
},
3834 { NULL
, 0, 0, 0, NULL
}
3838 dissect_h248_DigitMapValue(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3839 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3840 DigitMapValue_sequence
, hf_index
, ett_h248_DigitMapValue
);
3846 static const value_string h248_EventDM_vals
[] = {
3847 { 0, "digitMapName" },
3848 { 1, "digitMapValue" },
3852 static const ber_choice_t EventDM_choice
[] = {
3853 { 0, &hf_h248_digitMapName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_DigitMapName
},
3854 { 1, &hf_h248_digitMapValue
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_DigitMapValue
},
3855 { 0, NULL
, 0, 0, 0, NULL
}
3859 dissect_h248_EventDM(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3860 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
3861 EventDM_choice
, hf_index
, ett_h248_EventDM
,
3869 static const value_string h248_SignalType_vals
[] = {
3878 dissect_h248_SignalType(bool 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_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3886 static int * const NotifyCompletion_bits
[] = {
3887 &hf_h248_NotifyCompletion_onTimeOut
,
3888 &hf_h248_NotifyCompletion_onInterruptByEvent
,
3889 &hf_h248_NotifyCompletion_onInterruptByNewSignalDescr
,
3890 &hf_h248_NotifyCompletion_otherReason
,
3891 &hf_h248_NotifyCompletion_onIteration
,
3896 dissect_h248_NotifyCompletion(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3897 offset
= dissect_ber_bitstring(implicit_tag
, actx
, tree
, tvb
, offset
,
3898 NotifyCompletion_bits
, 5, hf_index
, ett_h248_NotifyCompletion
,
3907 static const ber_sequence_t SigParamValues_sequence_of
[1] = {
3908 { &hf_h248_SigParamValues_item
, BER_CLASS_UNI
, BER_UNI_TAG_OCTETSTRING
, BER_FLAGS_NOOWNTAG
, dissect_h248_SigParamValue
},
3912 dissect_h248_SigParamValues(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3913 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3914 SigParamValues_sequence_of
, hf_index
, ett_h248_SigParamValues
);
3920 static const value_string h248_T_extraInfo_vals
[] = {
3927 static const ber_choice_t T_extraInfo_choice
[] = {
3928 { 0, &hf_h248_relation
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_Relation
},
3929 { 1, &hf_h248_range
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
3930 { 2, &hf_h248_sublist
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
3931 { 0, NULL
, 0, 0, 0, NULL
}
3935 dissect_h248_T_extraInfo(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3936 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
3937 T_extraInfo_choice
, hf_index
, ett_h248_T_extraInfo
,
3944 static const ber_sequence_t SigParameter_sequence
[] = {
3945 { &hf_h248_sigParameterName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_SigParameterName
},
3946 { &hf_h248_value
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SigParamValues
},
3947 { &hf_h248_extraInfo
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_T_extraInfo
},
3948 { NULL
, 0, 0, 0, NULL
}
3952 dissect_h248_SigParameter(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3953 /* H248 v1 support */
3954 if (h248_version
> 1) {
3955 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
3956 SigParameter_sequence
, hf_index
, ett_h248_SigParameter
);
3959 offset
= dissect_h248_SigParameterV1( implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
3966 static const ber_sequence_t SEQUENCE_OF_SigParameter_sequence_of
[1] = {
3967 { &hf_h248_sigParList_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_SigParameter
},
3971 dissect_h248_SEQUENCE_OF_SigParameter(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3972 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
3973 SEQUENCE_OF_SigParameter_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_SigParameter
);
3979 static const value_string h248_SignalDirection_vals
[] = {
3988 dissect_h248_SignalDirection(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
3989 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
3996 static const ber_sequence_t Signal_sequence
[] = {
3997 { &hf_h248_signalName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_SignalName
},
3998 { &hf_h248_streamID
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_StreamID
},
3999 { &hf_h248_sigType
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SignalType
},
4000 { &hf_h248_duration
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_65535
},
4001 { &hf_h248_notifyCompletion
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NotifyCompletion
},
4002 { &hf_h248_keepActive
, BER_CLASS_CON
, 5, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
4003 { &hf_h248_sigParList
, BER_CLASS_CON
, 6, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_SigParameter
},
4004 { &hf_h248_direction
, BER_CLASS_CON
, 7, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SignalDirection
},
4005 { &hf_h248_requestID
, BER_CLASS_CON
, 8, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_RequestID
},
4006 { &hf_h248_intersigDelay
, BER_CLASS_CON
, 9, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_65535
},
4007 { NULL
, 0, 0, 0, NULL
}
4011 dissect_h248_Signal(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4012 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4013 Signal_sequence
, hf_index
, ett_h248_Signal
);
4019 static const ber_sequence_t SEQUENCE_OF_Signal_sequence_of
[1] = {
4020 { &hf_h248_signalList_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_Signal
},
4024 dissect_h248_SEQUENCE_OF_Signal(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4025 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
4026 SEQUENCE_OF_Signal_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_Signal
);
4032 static const ber_sequence_t SeqSigList_sequence
[] = {
4033 { &hf_h248_id
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_65535
},
4034 { &hf_h248_signalList
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_Signal
},
4035 { NULL
, 0, 0, 0, NULL
}
4039 dissect_h248_SeqSigList(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4040 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4041 SeqSigList_sequence
, hf_index
, ett_h248_SeqSigList
);
4047 static const value_string h248_SignalRequest_vals
[] = {
4049 { 1, "seqSigList" },
4053 static const ber_choice_t SignalRequest_choice
[] = {
4054 { 0, &hf_h248_signal
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_Signal
},
4055 { 1, &hf_h248_seqSigList
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SeqSigList
},
4056 { 0, NULL
, 0, 0, 0, NULL
}
4060 dissect_h248_SignalRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4061 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
4062 SignalRequest_choice
, hf_index
, ett_h248_SignalRequest
,
4069 static const ber_sequence_t SignalsDescriptor_sequence_of
[1] = {
4070 { &hf_h248_SignalsDescriptor_item
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_SignalRequest
},
4074 dissect_h248_SignalsDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4075 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
4076 SignalsDescriptor_sequence_of
, hf_index
, ett_h248_SignalsDescriptor
);
4082 static const ber_sequence_t RegulatedEmbeddedDescriptor_sequence
[] = {
4083 { &hf_h248_secondEvent
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SecondEventsDescriptor
},
4084 { &hf_h248_signalsDescriptor
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SignalsDescriptor
},
4085 { NULL
, 0, 0, 0, NULL
}
4089 dissect_h248_RegulatedEmbeddedDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4090 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4091 RegulatedEmbeddedDescriptor_sequence
, hf_index
, ett_h248_RegulatedEmbeddedDescriptor
);
4097 static const value_string h248_NotifyBehaviour_vals
[] = {
4098 { 0, "notifyImmediate" },
4099 { 1, "notifyRegulated" },
4100 { 2, "neverNotify" },
4104 static const ber_choice_t NotifyBehaviour_choice
[] = {
4105 { 0, &hf_h248_notifyImmediate
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
4106 { 1, &hf_h248_notifyRegulated
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_RegulatedEmbeddedDescriptor
},
4107 { 2, &hf_h248_neverNotify
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
4108 { 0, NULL
, 0, 0, 0, NULL
}
4112 dissect_h248_NotifyBehaviour(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4113 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
4114 NotifyBehaviour_choice
, hf_index
, ett_h248_NotifyBehaviour
,
4121 static const ber_sequence_t SecondRequestedActions_sequence
[] = {
4122 { &hf_h248_keepActive
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
4123 { &hf_h248_eventDM
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_EventDM
},
4124 { &hf_h248_signalsDescriptor
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SignalsDescriptor
},
4125 { &hf_h248_notifyBehaviour
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_NotifyBehaviour
},
4126 { &hf_h248_resetEventsDescriptor
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
4127 { NULL
, 0, 0, 0, NULL
}
4131 dissect_h248_SecondRequestedActions(bool 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 SecondRequestedActions_sequence
, hf_index
, ett_h248_SecondRequestedActions
);
4141 static const ber_sequence_t EventParamValues_sequence_of
[1] = {
4142 { &hf_h248_EventParamValues_item
, BER_CLASS_UNI
, BER_UNI_TAG_OCTETSTRING
, BER_FLAGS_NOOWNTAG
, dissect_h248_EventParamValue
},
4146 dissect_h248_EventParamValues(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4147 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
4148 EventParamValues_sequence_of
, hf_index
, ett_h248_EventParamValues
);
4154 static const value_string h248_EventPar_extraInfo_vals
[] = {
4161 static const ber_choice_t EventPar_extraInfo_choice
[] = {
4162 { 0, &hf_h248_relation
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_Relation
},
4163 { 1, &hf_h248_range
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
4164 { 2, &hf_h248_sublist
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
4165 { 0, NULL
, 0, 0, 0, NULL
}
4169 dissect_h248_EventPar_extraInfo(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4170 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
4171 EventPar_extraInfo_choice
, hf_index
, ett_h248_EventPar_extraInfo
,
4178 static const ber_sequence_t EventParameter_sequence
[] = {
4179 { &hf_h248_eventParameterName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_EventParameterName
},
4180 { &hf_h248_eventParamValue
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_EventParamValues
},
4181 { &hf_h248_eventPar_extraInfo
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_EventPar_extraInfo
},
4182 { NULL
, 0, 0, 0, NULL
}
4186 dissect_h248_EventParameter(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4187 /* H248 v1 support */
4188 if (h248_version
> 1) {
4189 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4190 EventParameter_sequence
, hf_index
, ett_h248_EventParameter
);
4193 offset
= dissect_h248_EventParameterV1( implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
4200 static const ber_sequence_t SEQUENCE_OF_EventParameter_sequence_of
[1] = {
4201 { &hf_h248_eventParList_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_EventParameter
},
4205 dissect_h248_SEQUENCE_OF_EventParameter(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4206 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
4207 SEQUENCE_OF_EventParameter_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_EventParameter
);
4213 static const ber_sequence_t SecondRequestedEvent_sequence
[] = {
4214 { &hf_h248_pkgdName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_PkgdName
},
4215 { &hf_h248_streamID
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_StreamID
},
4216 { &hf_h248_secondaryEventAction
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SecondRequestedActions
},
4217 { &hf_h248_evParList
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_EventParameter
},
4218 { NULL
, 0, 0, 0, NULL
}
4222 dissect_h248_SecondRequestedEvent(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4223 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4224 SecondRequestedEvent_sequence
, hf_index
, ett_h248_SecondRequestedEvent
);
4230 static const ber_sequence_t SEQUENCE_OF_SecondRequestedEvent_sequence_of
[1] = {
4231 { &hf_h248_secondaryEventList_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_SecondRequestedEvent
},
4235 dissect_h248_SEQUENCE_OF_SecondRequestedEvent(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4236 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
4237 SEQUENCE_OF_SecondRequestedEvent_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_SecondRequestedEvent
);
4243 static const ber_sequence_t SecondEventsDescriptor_sequence
[] = {
4244 { &hf_h248_requestID
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_RequestID
},
4245 { &hf_h248_secondaryEventList
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_SecondRequestedEvent
},
4246 { NULL
, 0, 0, 0, NULL
}
4250 dissect_h248_SecondEventsDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4251 // SecondEventsDescriptor -> SecondEventsDescriptor/eventList -> SecondRequestedEvent -> SecondRequestedActions -> NotifyBehaviour -> RegulatedEmbeddedDescriptor -> SecondEventsDescriptor
4252 actx
->pinfo
->dissection_depth
+= 6;
4253 increment_dissection_depth(actx
->pinfo
);
4254 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4255 SecondEventsDescriptor_sequence
, hf_index
, ett_h248_SecondEventsDescriptor
);
4257 actx
->pinfo
->dissection_depth
-= 6;
4258 decrement_dissection_depth(actx
->pinfo
);
4263 static const ber_sequence_t RequestedActions_sequence
[] = {
4264 { &hf_h248_keepActive
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_BOOLEAN
},
4265 { &hf_h248_eventDM
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_EventDM
},
4266 { &hf_h248_secondEvent
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SecondEventsDescriptor
},
4267 { &hf_h248_signalsDescriptor
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SignalsDescriptor
},
4268 { &hf_h248_notifyBehaviour
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_NotifyBehaviour
},
4269 { &hf_h248_resetEventsDescriptor
, BER_CLASS_CON
, 5, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
4270 { NULL
, 0, 0, 0, NULL
}
4274 dissect_h248_RequestedActions(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4275 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4276 RequestedActions_sequence
, hf_index
, ett_h248_RequestedActions
);
4282 static const ber_sequence_t RequestedEvent_sequence
[] = {
4283 { &hf_h248_eventName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_EventName
},
4284 { &hf_h248_streamID
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_StreamID
},
4285 { &hf_h248_eventAction
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_RequestedActions
},
4286 { &hf_h248_evParList
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_EventParameter
},
4287 { NULL
, 0, 0, 0, NULL
}
4291 dissect_h248_RequestedEvent(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4292 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4293 RequestedEvent_sequence
, hf_index
, ett_h248_RequestedEvent
);
4299 static const ber_sequence_t SEQUENCE_OF_RequestedEvent_sequence_of
[1] = {
4300 { &hf_h248_eventList_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_RequestedEvent
},
4304 dissect_h248_SEQUENCE_OF_RequestedEvent(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4305 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
4306 SEQUENCE_OF_RequestedEvent_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_RequestedEvent
);
4312 static const ber_sequence_t EventsDescriptor_sequence
[] = {
4313 { &hf_h248_requestID
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_RequestID
},
4314 { &hf_h248_eventList
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_RequestedEvent
},
4315 { NULL
, 0, 0, 0, NULL
}
4319 dissect_h248_EventsDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4320 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4321 EventsDescriptor_sequence
, hf_index
, ett_h248_EventsDescriptor
);
4327 static const ber_sequence_t EventSpec_sequence
[] = {
4328 { &hf_h248_eventName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_EventName
},
4329 { &hf_h248_streamID
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_StreamID
},
4330 { &hf_h248_eventParList
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_EventParameter
},
4331 { NULL
, 0, 0, 0, NULL
}
4335 dissect_h248_EventSpec(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4336 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4337 EventSpec_sequence
, hf_index
, ett_h248_EventSpec
);
4343 static const ber_sequence_t EventBufferDescriptor_sequence_of
[1] = {
4344 { &hf_h248_EventBufferDescriptor_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_EventSpec
},
4348 dissect_h248_EventBufferDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4349 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
4350 EventBufferDescriptor_sequence_of
, hf_index
, ett_h248_EventBufferDescriptor
);
4356 static const ber_sequence_t DigitMapDescriptor_sequence
[] = {
4357 { &hf_h248_digitMapName
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_DigitMapName
},
4358 { &hf_h248_digitMapValue
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_DigitMapValue
},
4359 { NULL
, 0, 0, 0, NULL
}
4363 dissect_h248_DigitMapDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4364 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4365 DigitMapDescriptor_sequence
, hf_index
, ett_h248_DigitMapDescriptor
);
4371 static int * const T_auditToken_bits
[] = {
4372 &hf_h248_T_auditToken_muxToken
,
4373 &hf_h248_T_auditToken_modemToken
,
4374 &hf_h248_T_auditToken_mediaToken
,
4375 &hf_h248_T_auditToken_eventsToken
,
4376 &hf_h248_T_auditToken_signalsToken
,
4377 &hf_h248_T_auditToken_digitMapToken
,
4378 &hf_h248_T_auditToken_statsToken
,
4379 &hf_h248_T_auditToken_observedEventsToken
,
4380 &hf_h248_T_auditToken_packagesToken
,
4381 &hf_h248_T_auditToken_eventBufferToken
,
4386 dissect_h248_T_auditToken(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4387 offset
= dissect_ber_bitstring(implicit_tag
, actx
, tree
, tvb
, offset
,
4388 T_auditToken_bits
, 10, hf_index
, ett_h248_T_auditToken
,
4395 static const ber_sequence_t IndAudTerminationStateDescriptor_sequence
[] = {
4396 { &hf_h248_indAudPropertyParms
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_IndAudPropertyParm
},
4397 { &hf_h248_eventBufferControl
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
4398 { &hf_h248_iATSDServiceState
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
4399 { &hf_h248_serviceStateSel
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_ServiceState
},
4400 { NULL
, 0, 0, 0, NULL
}
4404 dissect_h248_IndAudTerminationStateDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4405 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4406 IndAudTerminationStateDescriptor_sequence
, hf_index
, ett_h248_IndAudTerminationStateDescriptor
);
4412 static const ber_sequence_t IndAudLocalControlDescriptor_sequence
[] = {
4413 { &hf_h248_iALCDStreamMode
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
4414 { &hf_h248_iALCDReserveValue
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
4415 { &hf_h248_iALCDReserveGroup
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
4416 { &hf_h248_indAudPropertyParms
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_IndAudPropertyParm
},
4417 { &hf_h248_streamModeSel
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_StreamMode
},
4418 { NULL
, 0, 0, 0, NULL
}
4422 dissect_h248_IndAudLocalControlDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4423 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4424 IndAudLocalControlDescriptor_sequence
, hf_index
, ett_h248_IndAudLocalControlDescriptor
);
4430 static const ber_sequence_t IndAudPropertyGroup_sequence_of
[1] = {
4431 { &hf_h248_IndAudPropertyGroup_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_IndAudPropertyParm
},
4435 dissect_h248_IndAudPropertyGroup(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4436 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
4437 IndAudPropertyGroup_sequence_of
, hf_index
, ett_h248_IndAudPropertyGroup
);
4443 static const ber_sequence_t IndAudLocalRemoteDescriptor_sequence
[] = {
4444 { &hf_h248_propGroupID
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_65535
},
4445 { &hf_h248_iAPropertyGroup
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_IndAudPropertyGroup
},
4446 { NULL
, 0, 0, 0, NULL
}
4450 dissect_h248_IndAudLocalRemoteDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4451 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4452 IndAudLocalRemoteDescriptor_sequence
, hf_index
, ett_h248_IndAudLocalRemoteDescriptor
);
4458 static const ber_sequence_t IndAudStatisticsDescriptor_sequence
[] = {
4459 { &hf_h248_iAStatName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_PkgdName
},
4460 { NULL
, 0, 0, 0, NULL
}
4464 dissect_h248_IndAudStatisticsDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4465 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4466 IndAudStatisticsDescriptor_sequence
, hf_index
, ett_h248_IndAudStatisticsDescriptor
);
4472 static const ber_sequence_t IndAudStreamParms_sequence
[] = {
4473 { &hf_h248_iASPLocalControlDescriptor
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_IndAudLocalControlDescriptor
},
4474 { &hf_h248_iASPLocalDescriptor
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_IndAudLocalRemoteDescriptor
},
4475 { &hf_h248_iASPRemoteDescriptor
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_IndAudLocalRemoteDescriptor
},
4476 { &hf_h248_statisticsDescriptor
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_IndAudStatisticsDescriptor
},
4477 { NULL
, 0, 0, 0, NULL
}
4481 dissect_h248_IndAudStreamParms(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4482 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4483 IndAudStreamParms_sequence
, hf_index
, ett_h248_IndAudStreamParms
);
4489 static const ber_sequence_t IndAudStreamDescriptor_sequence
[] = {
4490 { &hf_h248_streamID
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_StreamID
},
4491 { &hf_h248_indAudStreamParms
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_IndAudStreamParms
},
4492 { NULL
, 0, 0, 0, NULL
}
4496 dissect_h248_IndAudStreamDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4497 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4498 IndAudStreamDescriptor_sequence
, hf_index
, ett_h248_IndAudStreamDescriptor
);
4504 static const ber_sequence_t SEQUENCE_OF_IndAudStreamDescriptor_sequence_of
[1] = {
4505 { &hf_h248_multiStream_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_IndAudStreamDescriptor
},
4509 dissect_h248_SEQUENCE_OF_IndAudStreamDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4510 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
4511 SEQUENCE_OF_IndAudStreamDescriptor_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_IndAudStreamDescriptor
);
4517 static const value_string h248_IndAudMediaDescriptorStreams_vals
[] = {
4519 { 1, "multiStream" },
4523 static const ber_choice_t IndAudMediaDescriptorStreams_choice
[] = {
4524 { 0, &hf_h248_oneStream
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_IndAudStreamParms
},
4525 { 1, &hf_h248_multiStream
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_IndAudStreamDescriptor
},
4526 { 0, NULL
, 0, 0, 0, NULL
}
4530 dissect_h248_IndAudMediaDescriptorStreams(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4531 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
4532 IndAudMediaDescriptorStreams_choice
, hf_index
, ett_h248_IndAudMediaDescriptorStreams
,
4539 static const ber_sequence_t IndAudMediaDescriptor_sequence
[] = {
4540 { &hf_h248_indAudTerminationStateDescriptor
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_IndAudTerminationStateDescriptor
},
4541 { &hf_h248_indAudMediaDescriptorStreams
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_IndAudMediaDescriptorStreams
},
4542 { NULL
, 0, 0, 0, NULL
}
4546 dissect_h248_IndAudMediaDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4547 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4548 IndAudMediaDescriptor_sequence
, hf_index
, ett_h248_IndAudMediaDescriptor
);
4554 static const ber_sequence_t IndAudEventsDescriptor_sequence
[] = {
4555 { &hf_h248_requestID
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_RequestID
},
4556 { &hf_h248_iAEDPkgdName
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_PkgdName
},
4557 { &hf_h248_streamID
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_StreamID
},
4558 { NULL
, 0, 0, 0, NULL
}
4562 dissect_h248_IndAudEventsDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4563 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4564 IndAudEventsDescriptor_sequence
, hf_index
, ett_h248_IndAudEventsDescriptor
);
4570 static const ber_sequence_t IndAudEventBufferDescriptor_sequence
[] = {
4571 { &hf_h248_iAEBDEventName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_PkgdName
},
4572 { &hf_h248_streamID
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_StreamID
},
4573 { NULL
, 0, 0, 0, NULL
}
4577 dissect_h248_IndAudEventBufferDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4578 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4579 IndAudEventBufferDescriptor_sequence
, hf_index
, ett_h248_IndAudEventBufferDescriptor
);
4585 static const ber_sequence_t IndAudSignal_sequence
[] = {
4586 { &hf_h248_iASignalName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_PkgdName
},
4587 { &hf_h248_streamID
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_StreamID
},
4588 { &hf_h248_signalRequestID
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_RequestID
},
4589 { NULL
, 0, 0, 0, NULL
}
4593 dissect_h248_IndAudSignal(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4594 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4595 IndAudSignal_sequence
, hf_index
, ett_h248_IndAudSignal
);
4601 static const ber_sequence_t IndAudSeqSigList_sequence
[] = {
4602 { &hf_h248_id
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_65535
},
4603 { &hf_h248_iASignalList
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_IndAudSignal
},
4604 { NULL
, 0, 0, 0, NULL
}
4608 dissect_h248_IndAudSeqSigList(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4609 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4610 IndAudSeqSigList_sequence
, hf_index
, ett_h248_IndAudSeqSigList
);
4616 static const value_string h248_IndAudSignalsDescriptor_vals
[] = {
4618 { 1, "seqSigList" },
4622 static const ber_choice_t IndAudSignalsDescriptor_choice
[] = {
4623 { 0, &hf_h248_indAudSignal
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_IndAudSignal
},
4624 { 1, &hf_h248_indAudSeqSigList
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_IndAudSeqSigList
},
4625 { 0, NULL
, 0, 0, 0, NULL
}
4629 dissect_h248_IndAudSignalsDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4630 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
4631 IndAudSignalsDescriptor_choice
, hf_index
, ett_h248_IndAudSignalsDescriptor
,
4638 static const ber_sequence_t IndAudDigitMapDescriptor_sequence
[] = {
4639 { &hf_h248_digitMapName
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_DigitMapName
},
4640 { NULL
, 0, 0, 0, NULL
}
4644 dissect_h248_IndAudDigitMapDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4645 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4646 IndAudDigitMapDescriptor_sequence
, hf_index
, ett_h248_IndAudDigitMapDescriptor
);
4652 static const ber_sequence_t IndAudPackagesDescriptor_sequence
[] = {
4653 { &hf_h248_packageName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_Name
},
4654 { &hf_h248_packageVersion
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_99
},
4655 { NULL
, 0, 0, 0, NULL
}
4659 dissect_h248_IndAudPackagesDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4660 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4661 IndAudPackagesDescriptor_sequence
, hf_index
, ett_h248_IndAudPackagesDescriptor
);
4667 static const value_string h248_IndAuditParameter_vals
[] = {
4668 { 0, "indaudmediaDescriptor" },
4669 { 1, "indaudeventsDescriptor" },
4670 { 2, "indaudeventBufferDescriptor" },
4671 { 3, "indaudsignalsDescriptor" },
4672 { 4, "indauddigitMapDescriptor" },
4673 { 5, "indaudstatisticsDescriptor" },
4674 { 6, "indaudpackagesDescriptor" },
4678 static const ber_choice_t IndAuditParameter_choice
[] = {
4679 { 0, &hf_h248_indaudmediaDescriptor
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_IndAudMediaDescriptor
},
4680 { 1, &hf_h248_indaudeventsDescriptor
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_IndAudEventsDescriptor
},
4681 { 2, &hf_h248_indaudeventBufferDescriptor
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_IndAudEventBufferDescriptor
},
4682 { 3, &hf_h248_indaudsignalsDescriptor
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_IndAudSignalsDescriptor
},
4683 { 4, &hf_h248_indauddigitMapDescriptor
, BER_CLASS_CON
, 4, BER_FLAGS_IMPLTAG
, dissect_h248_IndAudDigitMapDescriptor
},
4684 { 5, &hf_h248_indaudstatisticsDescriptor
, BER_CLASS_CON
, 5, BER_FLAGS_IMPLTAG
, dissect_h248_IndAudStatisticsDescriptor
},
4685 { 6, &hf_h248_indaudpackagesDescriptor
, BER_CLASS_CON
, 6, BER_FLAGS_IMPLTAG
, dissect_h248_IndAudPackagesDescriptor
},
4686 { 0, NULL
, 0, 0, 0, NULL
}
4690 dissect_h248_IndAuditParameter(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4691 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
4692 IndAuditParameter_choice
, hf_index
, ett_h248_IndAuditParameter
,
4699 static const ber_sequence_t SEQUENCE_OF_IndAuditParameter_sequence_of
[1] = {
4700 { &hf_h248_auditPropertyToken_item
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_IndAuditParameter
},
4704 dissect_h248_SEQUENCE_OF_IndAuditParameter(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4705 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
4706 SEQUENCE_OF_IndAuditParameter_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_IndAuditParameter
);
4712 static const ber_sequence_t AuditDescriptor_sequence
[] = {
4713 { &hf_h248_auditToken
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_T_auditToken
},
4714 { &hf_h248_auditPropertyToken
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_IndAuditParameter
},
4715 { NULL
, 0, 0, 0, NULL
}
4719 dissect_h248_AuditDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4720 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4721 AuditDescriptor_sequence
, hf_index
, ett_h248_AuditDescriptor
);
4727 static const value_string h248_AmmDescriptor_vals
[] = {
4728 { 0, "mediaDescriptor" },
4729 { 1, "modemDescriptor" },
4730 { 2, "muxDescriptor" },
4731 { 3, "eventsDescriptor" },
4732 { 4, "eventBufferDescriptor" },
4733 { 5, "signalsDescriptor" },
4734 { 6, "digitMapDescriptor" },
4735 { 7, "auditDescriptor" },
4736 { 8, "statisticsDescriptor" },
4740 static const ber_choice_t AmmDescriptor_choice
[] = {
4741 { 0, &hf_h248_mediaDescriptor
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_MediaDescriptor
},
4742 { 1, &hf_h248_modemDescriptor
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_ModemDescriptor
},
4743 { 2, &hf_h248_muxDescriptor
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_MuxDescriptor
},
4744 { 3, &hf_h248_eventsDescriptor
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_EventsDescriptor
},
4745 { 4, &hf_h248_eventBufferDescriptor
, BER_CLASS_CON
, 4, BER_FLAGS_IMPLTAG
, dissect_h248_EventBufferDescriptor
},
4746 { 5, &hf_h248_signalsDescriptor
, BER_CLASS_CON
, 5, BER_FLAGS_IMPLTAG
, dissect_h248_SignalsDescriptor
},
4747 { 6, &hf_h248_digitMapDescriptor
, BER_CLASS_CON
, 6, BER_FLAGS_IMPLTAG
, dissect_h248_DigitMapDescriptor
},
4748 { 7, &hf_h248_auditDescriptor
, BER_CLASS_CON
, 7, BER_FLAGS_IMPLTAG
, dissect_h248_AuditDescriptor
},
4749 { 8, &hf_h248_aDstatisticsDescriptor
, BER_CLASS_CON
, 8, BER_FLAGS_IMPLTAG
, dissect_h248_StatisticsDescriptor
},
4750 { 0, NULL
, 0, 0, 0, NULL
}
4754 dissect_h248_AmmDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4755 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
4756 AmmDescriptor_choice
, hf_index
, ett_h248_AmmDescriptor
,
4763 static const ber_sequence_t SEQUENCE_OF_AmmDescriptor_sequence_of
[1] = {
4764 { &hf_h248_descriptors_item
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_AmmDescriptor
},
4768 dissect_h248_SEQUENCE_OF_AmmDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4769 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
4770 SEQUENCE_OF_AmmDescriptor_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_AmmDescriptor
);
4776 static const ber_sequence_t AmmRequest_sequence
[] = {
4777 { &hf_h248_terminationIDList
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationIDList
},
4778 { &hf_h248_descriptors
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_AmmDescriptor
},
4779 { NULL
, 0, 0, 0, NULL
}
4783 dissect_h248_AmmRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4784 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4785 AmmRequest_sequence
, hf_index
, ett_h248_AmmRequest
);
4793 dissect_h248_T_addReq(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4794 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_ADD_REQ
,offset
,actx
->pinfo
,keep_persistent_data
);
4796 offset
= dissect_h248_AmmRequest(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
4798 curr_info
.cmd
= NULL
;
4805 dissect_h248_T_moveReq(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4806 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_MOVE_REQ
,offset
,actx
->pinfo
,keep_persistent_data
);
4809 offset
= dissect_h248_AmmRequest(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
4811 curr_info
.cmd
= NULL
;
4818 dissect_h248_T_modReq(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4819 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_MOD_REQ
,offset
,actx
->pinfo
,keep_persistent_data
);
4821 offset
= dissect_h248_AmmRequest(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
4823 curr_info
.cmd
= NULL
;
4828 static const ber_sequence_t SubtractRequest_sequence
[] = {
4829 { &hf_h248_terminationIDList
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationIDList
},
4830 { &hf_h248_auditDescriptor
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_AuditDescriptor
},
4831 { NULL
, 0, 0, 0, NULL
}
4835 dissect_h248_SubtractRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4836 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4837 SubtractRequest_sequence
, hf_index
, ett_h248_SubtractRequest
);
4845 dissect_h248_T_subtractReq(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4846 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_SUB_REQ
,offset
,actx
->pinfo
,keep_persistent_data
);
4848 offset
= dissect_h248_SubtractRequest(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
4850 curr_info
.cmd
= NULL
;
4855 static const ber_sequence_t AuditRequest_sequence
[] = {
4856 { &hf_h248_terminationID
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationID
},
4857 { &hf_h248_auditDescriptor
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_AuditDescriptor
},
4858 { &hf_h248_terminationIDList
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_TerminationIDList
},
4859 { NULL
, 0, 0, 0, NULL
}
4863 dissect_h248_AuditRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4864 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4865 AuditRequest_sequence
, hf_index
, ett_h248_AuditRequest
);
4873 dissect_h248_T_auditCapRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4874 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_AUDITCAP_REQ
,offset
,actx
->pinfo
,keep_persistent_data
);
4876 offset
= dissect_h248_AuditRequest(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
4878 curr_info
.cmd
= NULL
;
4885 dissect_h248_T_auditValueRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4886 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_AUDITVAL_REQ
,offset
,actx
->pinfo
,keep_persistent_data
);
4888 offset
= dissect_h248_AuditRequest(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
4890 curr_info
.cmd
= NULL
;
4895 static const ber_sequence_t TimeNotation_sequence
[] = {
4896 { &hf_h248_date
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_IA5String_SIZE_8
},
4897 { &hf_h248_time
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_IA5String_SIZE_8
},
4898 { NULL
, 0, 0, 0, NULL
}
4902 dissect_h248_TimeNotation(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4903 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4904 TimeNotation_sequence
, hf_index
, ett_h248_TimeNotation
);
4910 static const ber_sequence_t ObservedEvent_sequence
[] = {
4911 { &hf_h248_eventName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_EventName
},
4912 { &hf_h248_streamID
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_StreamID
},
4913 { &hf_h248_eventParList
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_EventParameter
},
4914 { &hf_h248_timeNotation
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_TimeNotation
},
4915 { NULL
, 0, 0, 0, NULL
}
4919 dissect_h248_ObservedEvent(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4920 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4921 ObservedEvent_sequence
, hf_index
, ett_h248_ObservedEvent
);
4927 static const ber_sequence_t SEQUENCE_OF_ObservedEvent_sequence_of
[1] = {
4928 { &hf_h248_observedEventLst_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_ObservedEvent
},
4932 dissect_h248_SEQUENCE_OF_ObservedEvent(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4933 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
4934 SEQUENCE_OF_ObservedEvent_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_ObservedEvent
);
4940 static const ber_sequence_t ObservedEventsDescriptor_sequence
[] = {
4941 { &hf_h248_requestId
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_RequestID
},
4942 { &hf_h248_observedEventLst
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_ObservedEvent
},
4943 { NULL
, 0, 0, 0, NULL
}
4947 dissect_h248_ObservedEventsDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4948 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4949 ObservedEventsDescriptor_sequence
, hf_index
, ett_h248_ObservedEventsDescriptor
);
4955 static const ber_sequence_t NotifyRequest_sequence
[] = {
4956 { &hf_h248_terminationIDList
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationIDList
},
4957 { &hf_h248_observedEventsDescriptor
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_ObservedEventsDescriptor
},
4958 { &hf_h248_errorDescriptor
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_ErrorDescriptor
},
4959 { NULL
, 0, 0, 0, NULL
}
4963 dissect_h248_NotifyRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4964 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
4965 NotifyRequest_sequence
, hf_index
, ett_h248_NotifyRequest
);
4973 dissect_h248_T_notifyReq(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
4974 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_NOTIFY_REQ
,offset
,actx
->pinfo
,keep_persistent_data
);
4976 offset
= dissect_h248_NotifyRequest(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
4978 curr_info
.cmd
= NULL
;
4983 static const value_string h248_ServiceChangeMethod_vals
[] = {
4988 { 4, "disconnected" },
4995 dissect_h248_ServiceChangeMethod(bool 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_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
5003 static const value_string h248_ServiceChangeAddress_vals
[] = {
5004 { 0, "portNumber" },
5005 { 1, "ip4Address" },
5006 { 2, "ip6Address" },
5007 { 3, "domainName" },
5008 { 4, "deviceName" },
5009 { 5, "mtpAddress" },
5013 static const ber_choice_t ServiceChangeAddress_choice
[] = {
5014 { 0, &hf_h248_portNumber
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_65535
},
5015 { 1, &hf_h248_ip4Address
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_IP4Address
},
5016 { 2, &hf_h248_ip6Address
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_IP6Address
},
5017 { 3, &hf_h248_domainName
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_DomainName
},
5018 { 4, &hf_h248_deviceName
, BER_CLASS_CON
, 4, BER_FLAGS_IMPLTAG
, dissect_h248_PathName
},
5019 { 5, &hf_h248_mtpAddress
, BER_CLASS_CON
, 5, BER_FLAGS_IMPLTAG
, dissect_h248_MtpAddress
},
5020 { 0, NULL
, 0, 0, 0, NULL
}
5024 dissect_h248_ServiceChangeAddress(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5025 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
5026 ServiceChangeAddress_choice
, hf_index
, ett_h248_ServiceChangeAddress
,
5035 dissect_h248_IA5String_SIZE_1_67(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5036 offset
= dissect_ber_restricted_string(implicit_tag
, BER_UNI_TAG_IA5String
,
5037 actx
, tree
, tvb
, offset
, hf_index
,
5044 static const ber_sequence_t ServiceChangeProfile_sequence
[] = {
5045 { &hf_h248_profileName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_IA5String_SIZE_1_67
},
5046 { NULL
, 0, 0, 0, NULL
}
5050 dissect_h248_ServiceChangeProfile(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5051 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5052 ServiceChangeProfile_sequence
, hf_index
, ett_h248_ServiceChangeProfile
);
5060 dissect_h248_SCreasonValueOctetStr(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5061 tvbuff_t
*parameter_tvb
;
5062 offset
= dissect_ber_octet_string(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
5069 dissect_h248_ServiceChangeReasonStr(false, parameter_tvb
, 0, actx
, tree
, hf_h248_serviceChangeReasonStr
);
5075 static const ber_sequence_t SCreasonValue_sequence_of
[1] = {
5076 { &hf_h248_SCreasonValue_item
, BER_CLASS_UNI
, BER_UNI_TAG_OCTETSTRING
, BER_FLAGS_NOOWNTAG
, dissect_h248_SCreasonValueOctetStr
},
5080 dissect_h248_SCreasonValue(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5081 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
5082 SCreasonValue_sequence_of
, hf_index
, ett_h248_SCreasonValue
);
5090 dissect_h248_INTEGER_0_4294967295(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5091 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
5098 static const ber_sequence_t ServiceChangeParm_sequence
[] = {
5099 { &hf_h248_serviceChangeMethod
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_ServiceChangeMethod
},
5100 { &hf_h248_serviceChangeAddress
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_ServiceChangeAddress
},
5101 { &hf_h248_serviceChangeVersion
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_99
},
5102 { &hf_h248_serviceChangeProfile
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_ServiceChangeProfile
},
5103 { &hf_h248_serviceChangeReason
, BER_CLASS_CON
, 4, BER_FLAGS_IMPLTAG
, dissect_h248_SCreasonValue
},
5104 { &hf_h248_serviceChangeDelay
, BER_CLASS_CON
, 5, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_4294967295
},
5105 { &hf_h248_serviceChangeMgcId
, BER_CLASS_CON
, 6, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_MId
},
5106 { &hf_h248_timeStamp
, BER_CLASS_CON
, 7, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_TimeNotation
},
5107 { &hf_h248_nonStandardData
, BER_CLASS_CON
, 8, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NonStandardData
},
5108 { &hf_h248_serviceChangeInfo
, BER_CLASS_CON
, 9, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_AuditDescriptor
},
5109 { &hf_h248_serviceChangeIncompleteFlag
, BER_CLASS_CON
, 10, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
5110 { NULL
, 0, 0, 0, NULL
}
5114 dissect_h248_ServiceChangeParm(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5115 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5116 ServiceChangeParm_sequence
, hf_index
, ett_h248_ServiceChangeParm
);
5122 static const ber_sequence_t ServiceChangeRequest_sequence
[] = {
5123 { &hf_h248_terminationIDList
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationIDList
},
5124 { &hf_h248_serviceChangeParms
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_ServiceChangeParm
},
5125 { NULL
, 0, 0, 0, NULL
}
5129 dissect_h248_ServiceChangeRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5130 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_SVCCHG_REQ
,offset
,actx
->pinfo
,keep_persistent_data
);
5132 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5133 ServiceChangeRequest_sequence
, hf_index
, ett_h248_ServiceChangeRequest
);
5135 curr_info
.cmd
= NULL
;
5140 static const value_string h248_Command_vals
[] = {
5144 { 3, "subtractReq" },
5145 { 4, "auditCapRequest" },
5146 { 5, "auditValueRequest" },
5148 { 7, "serviceChangeReq" },
5152 static const ber_choice_t Command_choice
[] = {
5153 { 0, &hf_h248_addReq
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_T_addReq
},
5154 { 1, &hf_h248_moveReq
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_T_moveReq
},
5155 { 2, &hf_h248_modReq
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_T_modReq
},
5156 { 3, &hf_h248_subtractReq
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_T_subtractReq
},
5157 { 4, &hf_h248_auditCapRequest
, BER_CLASS_CON
, 4, BER_FLAGS_IMPLTAG
, dissect_h248_T_auditCapRequest
},
5158 { 5, &hf_h248_auditValueRequest
, BER_CLASS_CON
, 5, BER_FLAGS_IMPLTAG
, dissect_h248_T_auditValueRequest
},
5159 { 6, &hf_h248_notifyReq
, BER_CLASS_CON
, 6, BER_FLAGS_IMPLTAG
, dissect_h248_T_notifyReq
},
5160 { 7, &hf_h248_serviceChangeReq
, BER_CLASS_CON
, 7, BER_FLAGS_IMPLTAG
, dissect_h248_ServiceChangeRequest
},
5161 { 0, NULL
, 0, 0, 0, NULL
}
5165 dissect_h248_Command(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5166 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
5167 Command_choice
, hf_index
, ett_h248_Command
,
5174 static const ber_sequence_t CommandRequest_sequence
[] = {
5175 { &hf_h248_command
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_Command
},
5176 { &hf_h248_optional
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
5177 { &hf_h248_wildcardReturn
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
5178 { NULL
, 0, 0, 0, NULL
}
5182 dissect_h248_CommandRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5183 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5184 CommandRequest_sequence
, hf_index
, ett_h248_CommandRequest
);
5190 static const ber_sequence_t SEQUENCE_OF_CommandRequest_sequence_of
[1] = {
5191 { &hf_h248_commandRequests_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_CommandRequest
},
5195 dissect_h248_SEQUENCE_OF_CommandRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5196 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
5197 SEQUENCE_OF_CommandRequest_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_CommandRequest
);
5203 static const ber_sequence_t ActionRequest_sequence
[] = {
5204 { &hf_h248_contextId
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_ContextId
},
5205 { &hf_h248_contextRequest
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_ContextRequest
},
5206 { &hf_h248_contextAttrAuditReq
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_T_contextAttrAuditReq
},
5207 { &hf_h248_commandRequests
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_CommandRequest
},
5208 { NULL
, 0, 0, 0, NULL
}
5212 dissect_h248_ActionRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5213 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5214 ActionRequest_sequence
, hf_index
, ett_h248_ActionRequest
);
5220 static const ber_sequence_t SEQUENCE_OF_ActionRequest_sequence_of
[1] = {
5221 { &hf_h248_actions_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_ActionRequest
},
5225 dissect_h248_SEQUENCE_OF_ActionRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5226 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
5227 SEQUENCE_OF_ActionRequest_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_ActionRequest
);
5233 static const ber_sequence_t TransactionRequest_sequence
[] = {
5234 { &hf_h248_transactionId
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_T_transactionId
},
5235 { &hf_h248_actions
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_ActionRequest
},
5236 { NULL
, 0, 0, 0, NULL
}
5240 dissect_h248_TransactionRequest(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5241 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5242 TransactionRequest_sequence
, hf_index
, ett_h248_TransactionRequest
);
5250 dissect_h248_T_tpend_transactionId(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5251 uint32_t trx_id
= 0;
5252 offset
= dissect_h248_trx_id(implicit_tag
, actx
->pinfo
, tree
, tvb
, offset
, &trx_id
);
5253 curr_info
.trx
= gcp_trx(curr_info
.msg
, trx_id
, GCP_TRX_PENDING
, actx
->pinfo
, keep_persistent_data
);
5261 static const ber_sequence_t TransactionPending_sequence
[] = {
5262 { &hf_h248_tpend_transactionId
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_T_tpend_transactionId
},
5263 { NULL
, 0, 0, 0, NULL
}
5267 dissect_h248_TransactionPending(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5268 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5269 TransactionPending_sequence
, hf_index
, ett_h248_TransactionPending
);
5277 dissect_h248_T_trep_transactionId(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5278 uint32_t trx_id
= 0;
5279 offset
= dissect_h248_trx_id(implicit_tag
, actx
->pinfo
, tree
, tvb
, offset
, &trx_id
);
5280 curr_info
.trx
= gcp_trx(curr_info
.msg
, trx_id
, GCP_TRX_REPLY
, actx
->pinfo
, keep_persistent_data
);
5288 static const ber_sequence_t PackagesItem_sequence
[] = {
5289 { &hf_h248_packageName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_Name
},
5290 { &hf_h248_packageVersion
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_99
},
5291 { NULL
, 0, 0, 0, NULL
}
5295 dissect_h248_PackagesItem(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5296 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5297 PackagesItem_sequence
, hf_index
, ett_h248_PackagesItem
);
5303 static const ber_sequence_t PackagesDescriptor_sequence_of
[1] = {
5304 { &hf_h248_PackagesDescriptor_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_PackagesItem
},
5308 dissect_h248_PackagesDescriptor(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5309 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
5310 PackagesDescriptor_sequence_of
, hf_index
, ett_h248_PackagesDescriptor
);
5316 static const value_string h248_AuditReturnParameter_vals
[] = {
5317 { 0, "errorDescriptor" },
5318 { 1, "mediaDescriptor" },
5319 { 2, "modemDescriptor" },
5320 { 3, "muxDescriptor" },
5321 { 4, "eventsDescriptor" },
5322 { 5, "eventBufferDescriptor" },
5323 { 6, "signalsDescriptor" },
5324 { 7, "digitMapDescriptor" },
5325 { 8, "observedEventsDescriptor" },
5326 { 9, "statisticsDescriptor" },
5327 { 10, "packagesDescriptor" },
5328 { 11, "emptyDescriptors" },
5332 static const ber_choice_t AuditReturnParameter_choice
[] = {
5333 { 0, &hf_h248_errorDescriptor
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_ErrorDescriptor
},
5334 { 1, &hf_h248_mediaDescriptor
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_MediaDescriptor
},
5335 { 2, &hf_h248_modemDescriptor
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_ModemDescriptor
},
5336 { 3, &hf_h248_muxDescriptor
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_MuxDescriptor
},
5337 { 4, &hf_h248_eventsDescriptor
, BER_CLASS_CON
, 4, BER_FLAGS_IMPLTAG
, dissect_h248_EventsDescriptor
},
5338 { 5, &hf_h248_eventBufferDescriptor
, BER_CLASS_CON
, 5, BER_FLAGS_IMPLTAG
, dissect_h248_EventBufferDescriptor
},
5339 { 6, &hf_h248_signalsDescriptor
, BER_CLASS_CON
, 6, BER_FLAGS_IMPLTAG
, dissect_h248_SignalsDescriptor
},
5340 { 7, &hf_h248_digitMapDescriptor
, BER_CLASS_CON
, 7, BER_FLAGS_IMPLTAG
, dissect_h248_DigitMapDescriptor
},
5341 { 8, &hf_h248_observedEventsDescriptor
, BER_CLASS_CON
, 8, BER_FLAGS_IMPLTAG
, dissect_h248_ObservedEventsDescriptor
},
5342 { 9, &hf_h248_aRPstatisticsDescriptor
, BER_CLASS_CON
, 9, BER_FLAGS_IMPLTAG
, dissect_h248_StatisticsDescriptor
},
5343 { 10, &hf_h248_packagesDescriptor
, BER_CLASS_CON
, 10, BER_FLAGS_IMPLTAG
, dissect_h248_PackagesDescriptor
},
5344 { 11, &hf_h248_emptyDescriptors
, BER_CLASS_CON
, 11, BER_FLAGS_IMPLTAG
, dissect_h248_AuditDescriptor
},
5345 { 0, NULL
, 0, 0, 0, NULL
}
5349 dissect_h248_AuditReturnParameter(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5350 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
5351 AuditReturnParameter_choice
, hf_index
, ett_h248_AuditReturnParameter
,
5358 static const ber_sequence_t TerminationAudit_sequence_of
[1] = {
5359 { &hf_h248_TerminationAudit_item
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_AuditReturnParameter
},
5363 dissect_h248_TerminationAudit(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5364 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
5365 TerminationAudit_sequence_of
, hf_index
, ett_h248_TerminationAudit
);
5371 static const ber_sequence_t AmmsReply_sequence
[] = {
5372 { &hf_h248_terminationIDList
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationIDList
},
5373 { &hf_h248_terminationAudit
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_TerminationAudit
},
5374 { NULL
, 0, 0, 0, NULL
}
5378 dissect_h248_AmmsReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5379 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5380 AmmsReply_sequence
, hf_index
, ett_h248_AmmsReply
);
5388 dissect_h248_T_addReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5389 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_ADD_REPLY
,offset
,actx
->pinfo
,keep_persistent_data
);
5391 offset
= dissect_h248_AmmsReply(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
5399 dissect_h248_T_moveReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5400 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_MOVE_REPLY
,offset
,actx
->pinfo
,keep_persistent_data
);
5402 offset
= dissect_h248_AmmsReply(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
5410 dissect_h248_T_modReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5411 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_MOD_REPLY
,offset
,actx
->pinfo
,keep_persistent_data
);
5413 offset
= dissect_h248_AmmsReply(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
5421 dissect_h248_T_subtractReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5422 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_SUB_REPLY
,offset
,actx
->pinfo
,keep_persistent_data
);
5424 offset
= dissect_h248_AmmsReply(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
5430 static const ber_sequence_t AuditResult_sequence
[] = {
5431 { &hf_h248_terminationID
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationID
},
5432 { &hf_h248_terminationAuditResult
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationAudit
},
5433 { NULL
, 0, 0, 0, NULL
}
5437 dissect_h248_AuditResult(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5438 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5439 AuditResult_sequence
, hf_index
, ett_h248_AuditResult
);
5445 static const ber_sequence_t TermListAuditResult_sequence
[] = {
5446 { &hf_h248_terminationIDList
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationIDList
},
5447 { &hf_h248_terminationAuditResult
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationAudit
},
5448 { NULL
, 0, 0, 0, NULL
}
5452 dissect_h248_TermListAuditResult(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5453 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5454 TermListAuditResult_sequence
, hf_index
, ett_h248_TermListAuditResult
);
5460 static const value_string h248_AuditReply_vals
[] = {
5461 { 0, "contextAuditResult" },
5463 { 2, "auditResult" },
5464 { 3, "auditResultTermList" },
5468 static const ber_choice_t AuditReply_choice
[] = {
5469 { 0, &hf_h248_contextAuditResult
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationIDList
},
5470 { 1, &hf_h248_error
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_ErrorDescriptor
},
5471 { 2, &hf_h248_auditResult
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_AuditResult
},
5472 { 3, &hf_h248_auditResultTermList
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_TermListAuditResult
},
5473 { 0, NULL
, 0, 0, 0, NULL
}
5477 dissect_h248_AuditReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5478 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
5479 AuditReply_choice
, hf_index
, ett_h248_AuditReply
,
5488 dissect_h248_T_auditCapReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5489 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_AUDITCAP_REPLY
,offset
,actx
->pinfo
,keep_persistent_data
);
5491 /* h248v1 support */
5492 if(h248_version
> 1) {
5493 offset
= dissect_h248_AuditReply(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
5496 /* call V1 of the dissector */
5497 offset
= dissect_h248_AuditReplyV1(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
5506 dissect_h248_T_auditValueReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5507 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_AUDITVAL_REPLY
,offset
,actx
->pinfo
,keep_persistent_data
);
5509 /* h248v1 support */
5510 if(h248_version
> 1) {
5511 offset
= dissect_h248_AuditReply(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
5514 /* call V1 of the dissector */
5515 offset
= dissect_h248_AuditReplyV1(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
5522 static const ber_sequence_t NotifyReply_sequence
[] = {
5523 { &hf_h248_terminationIDList
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationIDList
},
5524 { &hf_h248_errorDescriptor
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_ErrorDescriptor
},
5525 { NULL
, 0, 0, 0, NULL
}
5529 dissect_h248_NotifyReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5530 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5531 NotifyReply_sequence
, hf_index
, ett_h248_NotifyReply
);
5539 dissect_h248_T_notifyReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5540 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_NOTIFY_REPLY
,offset
,actx
->pinfo
,keep_persistent_data
);
5542 offset
= dissect_h248_NotifyReply(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
5548 static const ber_sequence_t ServiceChangeResParm_sequence
[] = {
5549 { &hf_h248_serviceChangeMgcId
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_MId
},
5550 { &hf_h248_serviceChangeAddress
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_ServiceChangeAddress
},
5551 { &hf_h248_serviceChangeVersion
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_INTEGER_0_99
},
5552 { &hf_h248_serviceChangeProfile
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_ServiceChangeProfile
},
5553 { &hf_h248_timestamp
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_TimeNotation
},
5554 { NULL
, 0, 0, 0, NULL
}
5558 dissect_h248_ServiceChangeResParm(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5559 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5560 ServiceChangeResParm_sequence
, hf_index
, ett_h248_ServiceChangeResParm
);
5566 static const value_string h248_ServiceChangeResult_vals
[] = {
5567 { 0, "errorDescriptor" },
5568 { 1, "serviceChangeResParms" },
5572 static const ber_choice_t ServiceChangeResult_choice
[] = {
5573 { 0, &hf_h248_errorDescriptor
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_ErrorDescriptor
},
5574 { 1, &hf_h248_serviceChangeResParms
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_ServiceChangeResParm
},
5575 { 0, NULL
, 0, 0, 0, NULL
}
5579 dissect_h248_ServiceChangeResult(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5580 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
5581 ServiceChangeResult_choice
, hf_index
, ett_h248_ServiceChangeResult
,
5588 static const ber_sequence_t ServiceChangeReply_sequence
[] = {
5589 { &hf_h248_terminationIDList
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationIDList
},
5590 { &hf_h248_serviceChangeResult
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_ServiceChangeResult
},
5591 { NULL
, 0, 0, 0, NULL
}
5595 dissect_h248_ServiceChangeReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5596 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_SVCCHG_REPLY
,offset
,actx
->pinfo
,keep_persistent_data
);
5598 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5599 ServiceChangeReply_sequence
, hf_index
, ett_h248_ServiceChangeReply
);
5605 static const value_string h248_CommandReply_vals
[] = {
5609 { 3, "subtractReply" },
5610 { 4, "auditCapReply" },
5611 { 5, "auditValueReply" },
5612 { 6, "notifyReply" },
5613 { 7, "serviceChangeReply" },
5617 static const ber_choice_t CommandReply_choice
[] = {
5618 { 0, &hf_h248_addReply
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_T_addReply
},
5619 { 1, &hf_h248_moveReply
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_T_moveReply
},
5620 { 2, &hf_h248_modReply
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_T_modReply
},
5621 { 3, &hf_h248_subtractReply
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_T_subtractReply
},
5622 { 4, &hf_h248_auditCapReply
, BER_CLASS_CON
, 4, BER_FLAGS_IMPLTAG
, dissect_h248_T_auditCapReply
},
5623 { 5, &hf_h248_auditValueReply
, BER_CLASS_CON
, 5, BER_FLAGS_IMPLTAG
, dissect_h248_T_auditValueReply
},
5624 { 6, &hf_h248_notifyReply
, BER_CLASS_CON
, 6, BER_FLAGS_IMPLTAG
, dissect_h248_T_notifyReply
},
5625 { 7, &hf_h248_serviceChangeReply
, BER_CLASS_CON
, 7, BER_FLAGS_IMPLTAG
, dissect_h248_ServiceChangeReply
},
5626 { 0, NULL
, 0, 0, 0, NULL
}
5630 dissect_h248_CommandReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5631 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
5632 CommandReply_choice
, hf_index
, ett_h248_CommandReply
,
5639 static const ber_sequence_t SEQUENCE_OF_CommandReply_sequence_of
[1] = {
5640 { &hf_h248_commandReply_item
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_CommandReply
},
5644 dissect_h248_SEQUENCE_OF_CommandReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5645 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
5646 SEQUENCE_OF_CommandReply_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_CommandReply
);
5652 static const ber_sequence_t ActionReply_sequence
[] = {
5653 { &hf_h248_contextId
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_ContextId
},
5654 { &hf_h248_errorDescriptor
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_ErrorDescriptor
},
5655 { &hf_h248_contextReply
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_ContextRequest
},
5656 { &hf_h248_commandReply
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_CommandReply
},
5657 { NULL
, 0, 0, 0, NULL
}
5661 dissect_h248_ActionReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5662 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5663 ActionReply_sequence
, hf_index
, ett_h248_ActionReply
);
5665 if (!curr_info
.cmd
) {
5666 curr_info
.cmd
= gcp_cmd(curr_info
.msg
,curr_info
.trx
,curr_info
.ctx
,GCP_CMD_REPLY
,offset
,actx
->pinfo
,keep_persistent_data
);
5673 static const ber_sequence_t SEQUENCE_OF_ActionReply_sequence_of
[1] = {
5674 { &hf_h248_actionReplies_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_ActionReply
},
5678 dissect_h248_SEQUENCE_OF_ActionReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5679 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
5680 SEQUENCE_OF_ActionReply_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_ActionReply
);
5686 static const value_string h248_T_transactionResult_vals
[] = {
5687 { 0, "transactionError" },
5688 { 1, "actionReplies" },
5692 static const ber_choice_t T_transactionResult_choice
[] = {
5693 { 0, &hf_h248_transactionError
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_ErrorDescriptor
},
5694 { 1, &hf_h248_actionReplies
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_ActionReply
},
5695 { 0, NULL
, 0, 0, 0, NULL
}
5699 dissect_h248_T_transactionResult(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5700 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
5701 T_transactionResult_choice
, hf_index
, ett_h248_T_transactionResult
,
5710 dissect_h248_SegmentNumber(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5711 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
5718 static const ber_sequence_t TransactionReply_sequence
[] = {
5719 { &hf_h248_trep_transactionId
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_T_trep_transactionId
},
5720 { &hf_h248_immAckRequired
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
5721 { &hf_h248_transactionResult
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_T_transactionResult
},
5722 { &hf_h248_segmentNumber
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_SegmentNumber
},
5723 { &hf_h248_segmentationComplete
, BER_CLASS_CON
, 4, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
5724 { NULL
, 0, 0, 0, NULL
}
5728 dissect_h248_TransactionReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5729 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5730 TransactionReply_sequence
, hf_index
, ett_h248_TransactionReply
);
5736 static const ber_sequence_t TransactionAck_sequence
[] = {
5737 { &hf_h248_firstAck
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TransactionId
},
5738 { &hf_h248_lastAck
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_TransactionId
},
5739 { NULL
, 0, 0, 0, NULL
}
5743 dissect_h248_TransactionAck(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5744 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5745 TransactionAck_sequence
, hf_index
, ett_h248_TransactionAck
);
5751 static const ber_sequence_t TransactionResponseAck_sequence_of
[1] = {
5752 { &hf_h248_TransactionResponseAck_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_h248_TransactionAck
},
5756 dissect_h248_TransactionResponseAck(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5757 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
5758 TransactionResponseAck_sequence_of
, hf_index
, ett_h248_TransactionResponseAck
);
5766 dissect_h248_T_seg_rep_transactionId(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5767 uint32_t trx_id
= 0;
5768 offset
= dissect_h248_trx_id(implicit_tag
, actx
->pinfo
, tree
, tvb
, offset
, &trx_id
);
5769 curr_info
.trx
= gcp_trx(curr_info
.msg
, trx_id
, GCP_TRX_ACK
, actx
->pinfo
, keep_persistent_data
);
5777 static const ber_sequence_t SegmentReply_sequence
[] = {
5778 { &hf_h248_seg_rep_transactionId
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_T_seg_rep_transactionId
},
5779 { &hf_h248_segmentNumber
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SegmentNumber
},
5780 { &hf_h248_segmentationComplete
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_NULL
},
5781 { NULL
, 0, 0, 0, NULL
}
5785 dissect_h248_SegmentReply(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5786 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5787 SegmentReply_sequence
, hf_index
, ett_h248_SegmentReply
);
5793 static const value_string h248_Transaction_vals
[] = {
5794 { 0, "transactionRequest" },
5795 { 1, "transactionPending" },
5796 { 2, "transactionReply" },
5797 { 3, "transactionResponseAck" },
5798 { 4, "segmentReply" },
5802 static const ber_choice_t Transaction_choice
[] = {
5803 { 0, &hf_h248_transactionRequest
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TransactionRequest
},
5804 { 1, &hf_h248_transactionPending
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_TransactionPending
},
5805 { 2, &hf_h248_transactionReply
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_TransactionReply
},
5806 { 3, &hf_h248_transactionResponseAck
, BER_CLASS_CON
, 3, BER_FLAGS_IMPLTAG
, dissect_h248_TransactionResponseAck
},
5807 { 4, &hf_h248_segmentReply
, BER_CLASS_CON
, 4, BER_FLAGS_IMPLTAG
, dissect_h248_SegmentReply
},
5808 { 0, NULL
, 0, 0, 0, NULL
}
5812 dissect_h248_Transaction(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5813 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
5814 Transaction_choice
, hf_index
, ett_h248_Transaction
,
5821 static const ber_sequence_t SEQUENCE_OF_Transaction_sequence_of
[1] = {
5822 { &hf_h248_transactions_item
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_Transaction
},
5826 dissect_h248_SEQUENCE_OF_Transaction(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5827 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
5828 SEQUENCE_OF_Transaction_sequence_of
, hf_index
, ett_h248_SEQUENCE_OF_Transaction
);
5834 static const value_string h248_T_messageBody_vals
[] = {
5835 { 0, "messageError" },
5836 { 1, "transactions" },
5840 static const ber_choice_t T_messageBody_choice
[] = {
5841 { 0, &hf_h248_messageError
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_ErrorDescriptor
},
5842 { 1, &hf_h248_transactions
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SEQUENCE_OF_Transaction
},
5843 { 0, NULL
, 0, 0, 0, NULL
}
5847 dissect_h248_T_messageBody(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5848 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
5849 T_messageBody_choice
, hf_index
, ett_h248_T_messageBody
,
5856 static const ber_sequence_t Message_sequence
[] = {
5857 { &hf_h248_version
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_T_version
},
5858 { &hf_h248_mId
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_MId
},
5859 { &hf_h248_messageBody
, BER_CLASS_CON
, 2, BER_FLAGS_IMPLTAG
, dissect_h248_T_messageBody
},
5860 { NULL
, 0, 0, 0, NULL
}
5864 dissect_h248_Message(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5865 curr_info
.msg
= gcp_msg(actx
->pinfo
,tvb_raw_offset(tvb
),keep_persistent_data
);
5866 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5867 Message_sequence
, hf_index
, ett_h248_Message
);
5869 col_add_str(actx
->pinfo
->cinfo
, COL_INFO
, gcp_msg_to_str(curr_info
.msg
,actx
->pinfo
->pool
,keep_persistent_data
));
5871 if (keep_persistent_data
)
5872 gcp_analyze_msg(h248_tree
, actx
->pinfo
, tvb
, curr_info
.msg
, &h248_arrel
, &ei_h248_errored_command
);
5877 static const ber_sequence_t MegacoMessage_sequence
[] = {
5878 { &hf_h248_authHeader
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_h248_AuthenticationHeader
},
5879 { &hf_h248_mess
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_Message
},
5880 { NULL
, 0, 0, 0, NULL
}
5884 dissect_h248_MegacoMessage(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5885 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5886 MegacoMessage_sequence
, hf_index
, ett_h248_MegacoMessage
);
5894 dissect_h248_ServiceChangeReasonStr(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5895 offset
= dissect_ber_restricted_string(implicit_tag
, BER_UNI_TAG_IA5String
,
5896 actx
, tree
, tvb
, offset
, hf_index
,
5903 static const value_string h248_AuditResultV1_vals
[] = {
5904 { 0, "contectAuditResult" },
5905 { 1, "terminationAuditResult" },
5909 static const ber_choice_t AuditResultV1_choice
[] = {
5910 { 0, &hf_h248_contectAuditResult
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationID
},
5911 { 1, &hf_h248_terminationAuditResult
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationAudit
},
5912 { 0, NULL
, 0, 0, 0, NULL
}
5916 dissect_h248_AuditResultV1(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5917 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
5918 AuditResultV1_choice
, hf_index
, ett_h248_AuditResultV1
,
5925 static const ber_sequence_t AuditReplyV1_sequence
[] = {
5926 { &hf_h248_terminationID
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_TerminationID
},
5927 { &hf_h248_audit_result
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
|BER_FLAGS_NOTCHKTAG
, dissect_h248_AuditResultV1
},
5928 { NULL
, 0, 0, 0, NULL
}
5932 dissect_h248_AuditReplyV1(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5933 /* h248v1 support */
5934 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5935 AuditReplyV1_sequence
, hf_h248_auditValueReplyV1
, ett_h248_AuditReplyV1
);
5942 static const ber_sequence_t EventParameterV1_sequence
[] = {
5943 { &hf_h248_eventParamterName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_EventParameterName
},
5944 { &hf_h248_event_param_value
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_EventParamValueV1
},
5945 { NULL
, 0, 0, 0, NULL
}
5949 dissect_h248_EventParameterV1(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5950 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5951 EventParameterV1_sequence
, hf_index
, ett_h248_EventParameterV1
);
5958 static const ber_sequence_t SigParameterV1_sequence
[] = {
5959 { &hf_h248_sigParameterName
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_h248_SigParameterName
},
5960 { &hf_h248_sig_param_value
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_h248_SigParamValueV1
},
5961 { NULL
, 0, 0, 0, NULL
}
5965 dissect_h248_SigParameterV1(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
5966 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
5967 SigParameterV1_sequence
, hf_index
, ett_h248_SigParameterV1
);
5973 static int dissect_h248_tpkt(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
) {
5974 dissect_tpkt_encap(tvb
, pinfo
, tree
, h248_desegment
, h248_handle
);
5975 return tvb_captured_length(tvb
);
5979 dissect_h248(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
5981 proto_item
*h248_item
;
5982 asn1_ctx_t asn1_ctx
;
5985 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, true, pinfo
);
5987 curr_info
.msg
= NULL
;
5988 curr_info
.trx
= NULL
;
5989 curr_info
.ctx
= NULL
;
5990 curr_info
.cmd
= NULL
;
5991 curr_info
.term
= NULL
;
5992 curr_info
.pkg
= NULL
;
5993 curr_info
.evt
= NULL
;
5994 curr_info
.sig
= NULL
;
5995 curr_info
.stat
= NULL
;
5996 curr_info
.par
= NULL
;
5998 /* Check if it is actually a text-based H.248 encoding, which we
5999 dissect with the "megaco" dissector in Wireshark. (Both
6000 encodings are MEGACO (RFC 3015) and both are H.248.)
6002 if(tvb_captured_length(tvb
)>=6){
6003 if(!tvb_strneql(tvb
, 0, "MEGACO", 6)){
6004 static dissector_handle_t megaco_handle
=NULL
;
6006 megaco_handle
= find_dissector("megaco");
6009 call_dissector(megaco_handle
, tvb
, pinfo
, tree
);
6010 return tvb_captured_length(tvb
);
6014 proto_item
*hidden_item
= NULL
;
6015 uint32_t magic_num
= 0, offset
= 0;
6016 magic_num
= tvb_get_ntohl(tvb
, offset
);
6017 hidden_item
= proto_tree_add_uint(tree
, hf_248_magic_num
, tvb
, offset
, 4, magic_num
);
6018 proto_item_set_hidden(hidden_item
);
6019 if( dissector_try_uint(subdissector_table
, magic_num
, tvb
, pinfo
, tree
) ) {
6020 return tvb_captured_length(tvb
);
6025 export_h248_pdu(pinfo
, tvb
);
6027 /* Make entry in the Protocol column on summary display */
6028 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "H.248");
6031 h248_item
= proto_tree_add_item(tree
, proto_h248
, tvb
, 0, -1, ENC_NA
);
6032 h248_tree
= proto_item_add_subtree(h248_item
, ett_h248
);
6035 dissect_h248_MegacoMessage(false, tvb
, 0, &asn1_ctx
, h248_tree
, -1);
6037 return tvb_captured_length(tvb
);
6040 /*--- proto_register_h248 ----------------------------------------------*/
6041 void proto_reg_handoff_h248(void);
6043 void proto_register_h248(void) {
6045 /* List of fields */
6046 static hf_register_info hf
[] = {
6047 { &hf_248_magic_num
,
6048 { "Magic Number for Avaya H.248", "h248.magic_num",
6049 FT_UINT32
, BASE_HEX
, NULL
, 0,
6051 { &hf_h248_mtpaddress_ni
,
6052 { "NI", "h248.mtpaddress.ni",
6053 FT_UINT32
, BASE_DEC
, NULL
, 0,
6055 { &hf_h248_mtpaddress_pc
,
6056 { "PC", "h248.mtpaddress.pc",
6057 FT_UINT32
, BASE_DEC
, NULL
, 0,
6059 { &hf_h248_pkg_name
,
6060 { "Package", "h248.package_name",
6061 FT_UINT16
, BASE_HEX
, NULL
, 0,
6063 { &hf_248_pkg_param
,
6064 { "Parameter ID", "h248.package_paramid",
6065 FT_UINT16
, BASE_HEX
, NULL
, 0,
6067 { &hf_h248_signal_code
,
6068 { "Signal ID", "h248.package_signalid",
6069 FT_UINT16
, BASE_HEX
, NULL
, 0,
6071 { &hf_h248_event_code
,
6072 { "Event ID", "h248.package_eventid",
6073 FT_UINT16
, BASE_HEX
, NULL
, 0,
6075 { &hf_h248_event_name
,
6076 { "Package and Event name", "h248.event_name",
6077 FT_UINT32
, BASE_HEX
, NULL
, 0,
6079 { &hf_h248_signal_name
,
6080 { "Package and Signal name", "h248.signal_name",
6081 FT_UINT32
, BASE_HEX
, NULL
, 0,
6083 { &hf_h248_pkg_bcp_BNCChar_PDU
,
6084 { "BNCChar", "h248.package_bcp.BNCChar",
6085 FT_UINT32
, BASE_DEC
, VALS(gcp_term_types
), 0,
6087 { &hf_h248_context_id
,
6088 { "contextId", "h248.contextId",
6089 FT_UINT32
, BASE_HEX
, NULL
, 0,
6090 "Context ID", HFILL
}},
6091 { &hf_h248_term_wild_type
,
6092 { "Wildcard Mode", "h248.term.wildcard.mode",
6093 FT_UINT8
, BASE_DEC
, VALS(wildcard_modes
), 0x80,
6095 { &hf_h248_term_wild_level
,
6096 { "Wildcarding Level", "h248.term.wildcard.level",
6097 FT_UINT8
, BASE_DEC
, VALS(wildcard_levels
), 0x40,
6099 { &hf_h248_term_wild_position
,
6100 { "Wildcarding Position", "h248.term.wildcard.pos",
6101 FT_UINT8
, BASE_DEC
, NULL
, 0x3F,
6105 { "Unknown Package", "h248.pkg.unknown",
6106 FT_BYTES
, BASE_NONE
, NULL
, 0,
6109 { "Unknown Signal", "h248.pkg.unknown.sig",
6110 FT_BYTES
, BASE_NONE
, NULL
, 0,
6113 { "Unknown Event", "h248.pkg.unknown.evt",
6114 FT_BYTES
, BASE_NONE
, NULL
, 0,
6117 { "Parameter", "h248.pkg.unknown.param",
6118 FT_BYTES
, BASE_NONE
, NULL
, 0,
6120 { &hf_h248_serviceChangeReasonStr
,
6121 { "ServiceChangeReasonStr", "h248.serviceChangeReasonstr",
6122 FT_STRING
, BASE_NONE
, NULL
, 0,
6123 "h248.IA5String", HFILL
}},
6124 { &hf_h248_context_id64
,
6125 { "contextId", "h248.contextId64",
6126 FT_UINT64
, BASE_HEX
, NULL
, 0,
6127 "Context ID", HFILL
}},
6128 { &hf_h248_transactionId64
,
6129 { "transactionId", "h248.transactionId",
6130 FT_UINT64
, BASE_DEC
, NULL
, 0,
6133 /* h248v1 support */
6134 { &hf_h248_auditValueReplyV1
,
6135 { "auditValueReplyV1", "h248.auditValueReplyV1",
6136 FT_NONE
, BASE_NONE
, NULL
, 0,
6139 { &hf_h248_authHeader
,
6140 { "authHeader", "h248.authHeader_element",
6141 FT_NONE
, BASE_NONE
, NULL
, 0,
6142 "AuthenticationHeader", HFILL
}},
6144 { "mess", "h248.mess_element",
6145 FT_NONE
, BASE_NONE
, NULL
, 0,
6146 "Message", HFILL
}},
6147 { &hf_h248_secParmIndex
,
6148 { "secParmIndex", "h248.secParmIndex",
6149 FT_BYTES
, BASE_NONE
, NULL
, 0,
6150 "SecurityParmIndex", HFILL
}},
6152 { "seqNum", "h248.seqNum",
6153 FT_BYTES
, BASE_NONE
, NULL
, 0,
6154 "SequenceNum", HFILL
}},
6157 FT_BYTES
, BASE_NONE
, NULL
, 0,
6158 "AuthData", HFILL
}},
6160 { "version", "h248.version",
6161 FT_UINT32
, BASE_DEC
, NULL
, 0,
6164 { "mId", "h248.mId",
6165 FT_UINT32
, BASE_DEC
, VALS(h248_MId_vals
), 0,
6167 { &hf_h248_messageBody
,
6168 { "messageBody", "h248.messageBody",
6169 FT_UINT32
, BASE_DEC
, VALS(h248_T_messageBody_vals
), 0,
6171 { &hf_h248_messageError
,
6172 { "messageError", "h248.messageError_element",
6173 FT_NONE
, BASE_NONE
, NULL
, 0,
6174 "ErrorDescriptor", HFILL
}},
6175 { &hf_h248_transactions
,
6176 { "transactions", "h248.transactions",
6177 FT_UINT32
, BASE_DEC
, NULL
, 0,
6178 "SEQUENCE_OF_Transaction", HFILL
}},
6179 { &hf_h248_transactions_item
,
6180 { "Transaction", "h248.Transaction",
6181 FT_UINT32
, BASE_DEC
, VALS(h248_Transaction_vals
), 0,
6183 { &hf_h248_ip4Address
,
6184 { "ip4Address", "h248.ip4Address_element",
6185 FT_NONE
, BASE_NONE
, NULL
, 0,
6187 { &hf_h248_ip6Address
,
6188 { "ip6Address", "h248.ip6Address_element",
6189 FT_NONE
, BASE_NONE
, NULL
, 0,
6191 { &hf_h248_domainName
,
6192 { "domainName", "h248.domainName_element",
6193 FT_NONE
, BASE_NONE
, NULL
, 0,
6195 { &hf_h248_deviceName
,
6196 { "deviceName", "h248.deviceName",
6197 FT_STRING
, BASE_NONE
, NULL
, 0,
6198 "PathName", HFILL
}},
6199 { &hf_h248_mtpAddress
,
6200 { "mtpAddress", "h248.mtpAddress",
6201 FT_BYTES
, BASE_NONE
, NULL
, 0,
6204 { "name", "h248.domainname",
6205 FT_STRING
, BASE_NONE
, NULL
, 0,
6206 "IA5String", HFILL
}},
6207 { &hf_h248_portNumber
,
6208 { "portNumber", "h248.portNumber",
6209 FT_UINT32
, BASE_DEC
, NULL
, 0,
6210 "INTEGER_0_65535", HFILL
}},
6211 { &hf_h248_iP4Address
,
6212 { "address", "h248.iP4Address",
6213 FT_IPv4
, BASE_NONE
, NULL
, 0,
6214 "OCTET_STRING_SIZE_4", HFILL
}},
6215 { &hf_h248_iP6Address
,
6216 { "address", "h248.iP6Address",
6217 FT_IPv6
, BASE_NONE
, NULL
, 0,
6218 "OCTET_STRING_SIZE_16", HFILL
}},
6219 { &hf_h248_transactionRequest
,
6220 { "transactionRequest", "h248.transactionRequest_element",
6221 FT_NONE
, BASE_NONE
, NULL
, 0,
6223 { &hf_h248_transactionPending
,
6224 { "transactionPending", "h248.transactionPending_element",
6225 FT_NONE
, BASE_NONE
, NULL
, 0,
6227 { &hf_h248_transactionReply
,
6228 { "transactionReply", "h248.transactionReply_element",
6229 FT_NONE
, BASE_NONE
, NULL
, 0,
6231 { &hf_h248_transactionResponseAck
,
6232 { "transactionResponseAck", "h248.transactionResponseAck",
6233 FT_UINT32
, BASE_DEC
, NULL
, 0,
6235 { &hf_h248_segmentReply
,
6236 { "segmentReply", "h248.segmentReply_element",
6237 FT_NONE
, BASE_NONE
, NULL
, 0,
6239 { &hf_h248_transactionId
,
6240 { "transactionId", "h248.transactionRequest.transactionId",
6241 FT_UINT32
, BASE_DEC
, NULL
, 0,
6244 { "actions", "h248.actions",
6245 FT_UINT32
, BASE_DEC
, NULL
, 0,
6246 "SEQUENCE_OF_ActionRequest", HFILL
}},
6247 { &hf_h248_actions_item
,
6248 { "ActionRequest", "h248.ActionRequest_element",
6249 FT_NONE
, BASE_NONE
, NULL
, 0,
6251 { &hf_h248_tpend_transactionId
,
6252 { "transactionId", "h248.transactionpending.transactionId",
6253 FT_UINT32
, BASE_DEC
, NULL
, 0,
6254 "T_tpend_transactionId", HFILL
}},
6255 { &hf_h248_trep_transactionId
,
6256 { "transactionId", "h248.transactionreply.transactionId",
6257 FT_UINT32
, BASE_DEC
, NULL
, 0,
6258 "T_trep_transactionId", HFILL
}},
6259 { &hf_h248_immAckRequired
,
6260 { "immAckRequired", "h248.immAckRequired_element",
6261 FT_NONE
, BASE_NONE
, NULL
, 0,
6263 { &hf_h248_transactionResult
,
6264 { "transactionResult", "h248.transactionResult",
6265 FT_UINT32
, BASE_DEC
, VALS(h248_T_transactionResult_vals
), 0,
6267 { &hf_h248_transactionError
,
6268 { "transactionError", "h248.transactionError_element",
6269 FT_NONE
, BASE_NONE
, NULL
, 0,
6270 "ErrorDescriptor", HFILL
}},
6271 { &hf_h248_actionReplies
,
6272 { "actionReplies", "h248.actionReplies",
6273 FT_UINT32
, BASE_DEC
, NULL
, 0,
6274 "SEQUENCE_OF_ActionReply", HFILL
}},
6275 { &hf_h248_actionReplies_item
,
6276 { "ActionReply", "h248.ActionReply_element",
6277 FT_NONE
, BASE_NONE
, NULL
, 0,
6279 { &hf_h248_segmentNumber
,
6280 { "segmentNumber", "h248.segmentNumber",
6281 FT_UINT32
, BASE_DEC
, NULL
, 0,
6283 { &hf_h248_segmentationComplete
,
6284 { "segmentationComplete", "h248.segmentationComplete_element",
6285 FT_NONE
, BASE_NONE
, NULL
, 0,
6287 { &hf_h248_seg_rep_transactionId
,
6288 { "transactionId", "h248.segmentreply.transactionId",
6289 FT_UINT32
, BASE_DEC
, NULL
, 0,
6290 "T_seg_rep_transactionId", HFILL
}},
6291 { &hf_h248_TransactionResponseAck_item
,
6292 { "TransactionAck", "h248.TransactionAck_element",
6293 FT_NONE
, BASE_NONE
, NULL
, 0,
6295 { &hf_h248_firstAck
,
6296 { "firstAck", "h248.firstAck",
6297 FT_UINT32
, BASE_DEC
, NULL
, 0,
6298 "TransactionId", HFILL
}},
6300 { "lastAck", "h248.lastAck",
6301 FT_UINT32
, BASE_DEC
, NULL
, 0,
6302 "TransactionId", HFILL
}},
6303 { &hf_h248_errorCode
,
6304 { "errorCode", "h248.errorCode",
6305 FT_UINT32
, BASE_DEC
|BASE_EXT_STRING
, &h248_reasons_ext
, 0,
6307 { &hf_h248_errorText
,
6308 { "errorText", "h248.errorText",
6309 FT_STRING
, BASE_NONE
, NULL
, 0,
6311 { &hf_h248_contextId
,
6312 { "contextId", "h248.contextId",
6313 FT_UINT32
, BASE_HEX
, NULL
, 0,
6315 { &hf_h248_contextRequest
,
6316 { "contextRequest", "h248.contextRequest_element",
6317 FT_NONE
, BASE_NONE
, NULL
, 0,
6319 { &hf_h248_contextAttrAuditReq
,
6320 { "contextAttrAuditReq", "h248.contextAttrAuditReq_element",
6321 FT_NONE
, BASE_NONE
, NULL
, 0,
6323 { &hf_h248_commandRequests
,
6324 { "commandRequests", "h248.commandRequests",
6325 FT_UINT32
, BASE_DEC
, NULL
, 0,
6326 "SEQUENCE_OF_CommandRequest", HFILL
}},
6327 { &hf_h248_commandRequests_item
,
6328 { "CommandRequest", "h248.CommandRequest_element",
6329 FT_NONE
, BASE_NONE
, NULL
, 0,
6331 { &hf_h248_errorDescriptor
,
6332 { "errorDescriptor", "h248.errorDescriptor_element",
6333 FT_NONE
, BASE_NONE
, NULL
, 0,
6335 { &hf_h248_contextReply
,
6336 { "contextReply", "h248.contextReply_element",
6337 FT_NONE
, BASE_NONE
, NULL
, 0,
6338 "ContextRequest", HFILL
}},
6339 { &hf_h248_commandReply
,
6340 { "commandReply", "h248.commandReply",
6341 FT_UINT32
, BASE_DEC
, NULL
, 0,
6342 "SEQUENCE_OF_CommandReply", HFILL
}},
6343 { &hf_h248_commandReply_item
,
6344 { "CommandReply", "h248.CommandReply",
6345 FT_UINT32
, BASE_DEC
, VALS(h248_CommandReply_vals
), 0,
6347 { &hf_h248_priority
,
6348 { "priority", "h248.priority",
6349 FT_UINT32
, BASE_DEC
, NULL
, 0,
6350 "INTEGER_0_15", HFILL
}},
6351 { &hf_h248_emergency
,
6352 { "emergency", "h248.emergency",
6353 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
6354 "BOOLEAN", HFILL
}},
6355 { &hf_h248_topologyReq
,
6356 { "topologyReq", "h248.topologyReq",
6357 FT_UINT32
, BASE_DEC
, NULL
, 0,
6359 { &hf_h248_topologyReq_item
,
6360 { "TopologyRequest", "h248.TopologyRequest_element",
6361 FT_NONE
, BASE_NONE
, NULL
, 0,
6363 { &hf_h248_iepscallind_BOOL
,
6364 { "iepscallind", "h248.iepscallind_BOOL",
6365 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
6366 "Iepscallind_BOOL", HFILL
}},
6367 { &hf_h248_contextProp
,
6368 { "contextProp", "h248.contextProp",
6369 FT_UINT32
, BASE_DEC
, NULL
, 0,
6370 "SEQUENCE_OF_PropertyParm", HFILL
}},
6371 { &hf_h248_contextProp_item
,
6372 { "PropertyParm", "h248.PropertyParm_element",
6373 FT_NONE
, BASE_NONE
, NULL
, 0,
6375 { &hf_h248_contextList
,
6376 { "contextList", "h248.contextList",
6377 FT_UINT32
, BASE_DEC
, NULL
, 0,
6378 "SEQUENCE_OF_ContextIDinList", HFILL
}},
6379 { &hf_h248_contextList_item
,
6380 { "ContextIDinList", "h248.ContextIDinList",
6381 FT_UINT32
, BASE_DEC
, NULL
, 0,
6383 { &hf_h248_topology
,
6384 { "topology", "h248.topology_element",
6385 FT_NONE
, BASE_NONE
, NULL
, 0,
6387 { &hf_h248_cAAREmergency
,
6388 { "emergency", "h248.cAAREmergency_element",
6389 FT_NONE
, BASE_NONE
, NULL
, 0,
6391 { &hf_h248_cAARPriority
,
6392 { "priority", "h248.cAARPriority_element",
6393 FT_NONE
, BASE_NONE
, NULL
, 0,
6395 { &hf_h248_iepscallind
,
6396 { "iepscallind", "h248.iepscallind_element",
6397 FT_NONE
, BASE_NONE
, NULL
, 0,
6399 { &hf_h248_contextPropAud
,
6400 { "contextPropAud", "h248.contextPropAud",
6401 FT_UINT32
, BASE_DEC
, NULL
, 0,
6402 "SEQUENCE_OF_IndAudPropertyParm", HFILL
}},
6403 { &hf_h248_contextPropAud_item
,
6404 { "IndAudPropertyParm", "h248.IndAudPropertyParm_element",
6405 FT_NONE
, BASE_NONE
, NULL
, 0,
6407 { &hf_h248_selectpriority
,
6408 { "selectpriority", "h248.selectpriority",
6409 FT_UINT32
, BASE_DEC
, NULL
, 0,
6410 "INTEGER_0_15", HFILL
}},
6411 { &hf_h248_selectemergency
,
6412 { "selectemergency", "h248.selectemergency",
6413 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
6414 "BOOLEAN", HFILL
}},
6415 { &hf_h248_selectiepscallind
,
6416 { "selectiepscallind", "h248.selectiepscallind",
6417 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
6418 "BOOLEAN", HFILL
}},
6419 { &hf_h248_selectLogic
,
6420 { "selectLogic", "h248.selectLogic",
6421 FT_UINT32
, BASE_DEC
, VALS(h248_SelectLogic_vals
), 0,
6423 { &hf_h248_andAUDITSelect
,
6424 { "andAUDITSelect", "h248.andAUDITSelect_element",
6425 FT_NONE
, BASE_NONE
, NULL
, 0,
6427 { &hf_h248_orAUDITSelect
,
6428 { "orAUDITSelect", "h248.orAUDITSelect_element",
6429 FT_NONE
, BASE_NONE
, NULL
, 0,
6432 { "command", "h248.command",
6433 FT_UINT32
, BASE_DEC
, VALS(h248_Command_vals
), 0,
6435 { &hf_h248_optional
,
6436 { "optional", "h248.optional_element",
6437 FT_NONE
, BASE_NONE
, NULL
, 0,
6439 { &hf_h248_wildcardReturn
,
6440 { "wildcardReturn", "h248.wildcardReturn_element",
6441 FT_NONE
, BASE_NONE
, NULL
, 0,
6444 { "addReq", "h248.addReq_element",
6445 FT_NONE
, BASE_NONE
, NULL
, 0,
6448 { "moveReq", "h248.moveReq_element",
6449 FT_NONE
, BASE_NONE
, NULL
, 0,
6452 { "modReq", "h248.modReq_element",
6453 FT_NONE
, BASE_NONE
, NULL
, 0,
6455 { &hf_h248_subtractReq
,
6456 { "subtractReq", "h248.subtractReq_element",
6457 FT_NONE
, BASE_NONE
, NULL
, 0,
6459 { &hf_h248_auditCapRequest
,
6460 { "auditCapRequest", "h248.auditCapRequest_element",
6461 FT_NONE
, BASE_NONE
, NULL
, 0,
6463 { &hf_h248_auditValueRequest
,
6464 { "auditValueRequest", "h248.auditValueRequest_element",
6465 FT_NONE
, BASE_NONE
, NULL
, 0,
6467 { &hf_h248_notifyReq
,
6468 { "notifyReq", "h248.notifyReq_element",
6469 FT_NONE
, BASE_NONE
, NULL
, 0,
6471 { &hf_h248_serviceChangeReq
,
6472 { "serviceChangeReq", "h248.serviceChangeReq_element",
6473 FT_NONE
, BASE_NONE
, NULL
, 0,
6474 "ServiceChangeRequest", HFILL
}},
6475 { &hf_h248_addReply
,
6476 { "addReply", "h248.addReply_element",
6477 FT_NONE
, BASE_NONE
, NULL
, 0,
6479 { &hf_h248_moveReply
,
6480 { "moveReply", "h248.moveReply_element",
6481 FT_NONE
, BASE_NONE
, NULL
, 0,
6483 { &hf_h248_modReply
,
6484 { "modReply", "h248.modReply_element",
6485 FT_NONE
, BASE_NONE
, NULL
, 0,
6487 { &hf_h248_subtractReply
,
6488 { "subtractReply", "h248.subtractReply_element",
6489 FT_NONE
, BASE_NONE
, NULL
, 0,
6491 { &hf_h248_auditCapReply
,
6492 { "auditCapReply", "h248.auditCapReply",
6493 FT_UINT32
, BASE_DEC
, VALS(h248_AuditReply_vals
), 0,
6495 { &hf_h248_auditValueReply
,
6496 { "auditValueReply", "h248.auditValueReply",
6497 FT_UINT32
, BASE_DEC
, VALS(h248_AuditReply_vals
), 0,
6499 { &hf_h248_notifyReply
,
6500 { "notifyReply", "h248.notifyReply_element",
6501 FT_NONE
, BASE_NONE
, NULL
, 0,
6503 { &hf_h248_serviceChangeReply
,
6504 { "serviceChangeReply", "h248.serviceChangeReply_element",
6505 FT_NONE
, BASE_NONE
, NULL
, 0,
6507 { &hf_h248_terminationFrom
,
6508 { "terminationFrom", "h248.terminationFrom_element",
6509 FT_NONE
, BASE_NONE
, NULL
, 0,
6510 "TerminationID", HFILL
}},
6511 { &hf_h248_terminationTo
,
6512 { "terminationTo", "h248.terminationTo_element",
6513 FT_NONE
, BASE_NONE
, NULL
, 0,
6514 "TerminationID", HFILL
}},
6515 { &hf_h248_topologyDirection
,
6516 { "topologyDirection", "h248.topologyDirection",
6517 FT_UINT32
, BASE_DEC
, VALS(h248_T_topologyDirection_vals
), 0,
6519 { &hf_h248_streamID
,
6520 { "streamID", "h248.streamID",
6521 FT_UINT32
, BASE_DEC
, NULL
, 0,
6523 { &hf_h248_topologyDirectionExtension
,
6524 { "topologyDirectionExtension", "h248.topologyDirectionExtension",
6525 FT_UINT32
, BASE_DEC
, VALS(h248_T_topologyDirectionExtension_vals
), 0,
6527 { &hf_h248_terminationIDList
,
6528 { "terminationID", "h248.terminationIDList",
6529 FT_UINT32
, BASE_DEC
, NULL
, 0,
6530 "TerminationIDList", HFILL
}},
6531 { &hf_h248_descriptors
,
6532 { "descriptors", "h248.descriptors",
6533 FT_UINT32
, BASE_DEC
, NULL
, 0,
6534 "SEQUENCE_OF_AmmDescriptor", HFILL
}},
6535 { &hf_h248_descriptors_item
,
6536 { "AmmDescriptor", "h248.AmmDescriptor",
6537 FT_UINT32
, BASE_DEC
, VALS(h248_AmmDescriptor_vals
), 0,
6539 { &hf_h248_mediaDescriptor
,
6540 { "mediaDescriptor", "h248.mediaDescriptor_element",
6541 FT_NONE
, BASE_NONE
, NULL
, 0,
6543 { &hf_h248_modemDescriptor
,
6544 { "modemDescriptor", "h248.modemDescriptor_element",
6545 FT_NONE
, BASE_NONE
, NULL
, 0,
6547 { &hf_h248_muxDescriptor
,
6548 { "muxDescriptor", "h248.muxDescriptor_element",
6549 FT_NONE
, BASE_NONE
, NULL
, 0,
6551 { &hf_h248_eventsDescriptor
,
6552 { "eventsDescriptor", "h248.eventsDescriptor_element",
6553 FT_NONE
, BASE_NONE
, NULL
, 0,
6555 { &hf_h248_eventBufferDescriptor
,
6556 { "eventBufferDescriptor", "h248.eventBufferDescriptor",
6557 FT_UINT32
, BASE_DEC
, NULL
, 0,
6559 { &hf_h248_signalsDescriptor
,
6560 { "signalsDescriptor", "h248.signalsDescriptor",
6561 FT_UINT32
, BASE_DEC
, NULL
, 0,
6563 { &hf_h248_digitMapDescriptor
,
6564 { "digitMapDescriptor", "h248.digitMapDescriptor_element",
6565 FT_NONE
, BASE_NONE
, NULL
, 0,
6567 { &hf_h248_auditDescriptor
,
6568 { "auditDescriptor", "h248.auditDescriptor_element",
6569 FT_NONE
, BASE_NONE
, NULL
, 0,
6571 { &hf_h248_aDstatisticsDescriptor
,
6572 { "statisticsDescriptor", "h248.aDstatisticsDescriptor",
6573 FT_UINT32
, BASE_DEC
, NULL
, 0,
6575 { &hf_h248_terminationAudit
,
6576 { "terminationAudit", "h248.terminationAudit",
6577 FT_UINT32
, BASE_DEC
, NULL
, 0,
6579 { &hf_h248_terminationID
,
6580 { "terminationID", "h248.terminationID_element",
6581 FT_NONE
, BASE_NONE
, NULL
, 0,
6583 { &hf_h248_contextAuditResult
,
6584 { "contextAuditResult", "h248.contextAuditResult",
6585 FT_UINT32
, BASE_DEC
, NULL
, 0,
6586 "TerminationIDList", HFILL
}},
6588 { "error", "h248.error_element",
6589 FT_NONE
, BASE_NONE
, NULL
, 0,
6590 "ErrorDescriptor", HFILL
}},
6591 { &hf_h248_auditResult
,
6592 { "auditResult", "h248.auditResult_element",
6593 FT_NONE
, BASE_NONE
, NULL
, 0,
6595 { &hf_h248_auditResultTermList
,
6596 { "auditResultTermList", "h248.auditResultTermList_element",
6597 FT_NONE
, BASE_NONE
, NULL
, 0,
6598 "TermListAuditResult", HFILL
}},
6599 { &hf_h248_terminationAuditResult
,
6600 { "terminationAuditResult", "h248.terminationAuditResult",
6601 FT_UINT32
, BASE_DEC
, NULL
, 0,
6602 "TerminationAudit", HFILL
}},
6603 { &hf_h248_TerminationAudit_item
,
6604 { "AuditReturnParameter", "h248.AuditReturnParameter",
6605 FT_UINT32
, BASE_DEC
, VALS(h248_AuditReturnParameter_vals
), 0,
6607 { &hf_h248_observedEventsDescriptor
,
6608 { "observedEventsDescriptor", "h248.observedEventsDescriptor_element",
6609 FT_NONE
, BASE_NONE
, NULL
, 0,
6611 { &hf_h248_aRPstatisticsDescriptor
,
6612 { "statisticsDescriptor", "h248.aRPstatisticsDescriptor",
6613 FT_UINT32
, BASE_DEC
, NULL
, 0,
6615 { &hf_h248_packagesDescriptor
,
6616 { "packagesDescriptor", "h248.packagesDescriptor",
6617 FT_UINT32
, BASE_DEC
, NULL
, 0,
6619 { &hf_h248_emptyDescriptors
,
6620 { "emptyDescriptors", "h248.emptyDescriptors_element",
6621 FT_NONE
, BASE_NONE
, NULL
, 0,
6622 "AuditDescriptor", HFILL
}},
6623 { &hf_h248_auditToken
,
6624 { "auditToken", "h248.auditToken",
6625 FT_BYTES
, BASE_NONE
, NULL
, 0,
6627 { &hf_h248_auditPropertyToken
,
6628 { "auditPropertyToken", "h248.auditPropertyToken",
6629 FT_UINT32
, BASE_DEC
, NULL
, 0,
6630 "SEQUENCE_OF_IndAuditParameter", HFILL
}},
6631 { &hf_h248_auditPropertyToken_item
,
6632 { "IndAuditParameter", "h248.IndAuditParameter",
6633 FT_UINT32
, BASE_DEC
, VALS(h248_IndAuditParameter_vals
), 0,
6635 { &hf_h248_indaudmediaDescriptor
,
6636 { "indaudmediaDescriptor", "h248.indaudmediaDescriptor_element",
6637 FT_NONE
, BASE_NONE
, NULL
, 0,
6639 { &hf_h248_indaudeventsDescriptor
,
6640 { "indaudeventsDescriptor", "h248.indaudeventsDescriptor_element",
6641 FT_NONE
, BASE_NONE
, NULL
, 0,
6643 { &hf_h248_indaudeventBufferDescriptor
,
6644 { "indaudeventBufferDescriptor", "h248.indaudeventBufferDescriptor_element",
6645 FT_NONE
, BASE_NONE
, NULL
, 0,
6647 { &hf_h248_indaudsignalsDescriptor
,
6648 { "indaudsignalsDescriptor", "h248.indaudsignalsDescriptor",
6649 FT_UINT32
, BASE_DEC
, VALS(h248_IndAudSignalsDescriptor_vals
), 0,
6651 { &hf_h248_indauddigitMapDescriptor
,
6652 { "indauddigitMapDescriptor", "h248.indauddigitMapDescriptor_element",
6653 FT_NONE
, BASE_NONE
, NULL
, 0,
6655 { &hf_h248_indaudstatisticsDescriptor
,
6656 { "indaudstatisticsDescriptor", "h248.indaudstatisticsDescriptor_element",
6657 FT_NONE
, BASE_NONE
, NULL
, 0,
6659 { &hf_h248_indaudpackagesDescriptor
,
6660 { "indaudpackagesDescriptor", "h248.indaudpackagesDescriptor_element",
6661 FT_NONE
, BASE_NONE
, NULL
, 0,
6663 { &hf_h248_indAudTerminationStateDescriptor
,
6664 { "termStateDescr", "h248.indAudTerminationStateDescriptor_element",
6665 FT_NONE
, BASE_NONE
, NULL
, 0,
6666 "IndAudTerminationStateDescriptor", HFILL
}},
6667 { &hf_h248_indAudMediaDescriptorStreams
,
6668 { "streams", "h248.indAudMediaDescriptorStreams",
6669 FT_UINT32
, BASE_DEC
, VALS(h248_IndAudMediaDescriptorStreams_vals
), 0,
6670 "IndAudMediaDescriptorStreams", HFILL
}},
6671 { &hf_h248_oneStream
,
6672 { "oneStream", "h248.oneStream_element",
6673 FT_NONE
, BASE_NONE
, NULL
, 0,
6674 "IndAudStreamParms", HFILL
}},
6675 { &hf_h248_multiStream
,
6676 { "multiStream", "h248.multiStream",
6677 FT_UINT32
, BASE_DEC
, NULL
, 0,
6678 "SEQUENCE_OF_IndAudStreamDescriptor", HFILL
}},
6679 { &hf_h248_multiStream_item
,
6680 { "IndAudStreamDescriptor", "h248.IndAudStreamDescriptor_element",
6681 FT_NONE
, BASE_NONE
, NULL
, 0,
6683 { &hf_h248_indAudStreamParms
,
6684 { "streamParms", "h248.indAudStreamParms_element",
6685 FT_NONE
, BASE_NONE
, NULL
, 0,
6686 "IndAudStreamParms", HFILL
}},
6687 { &hf_h248_iASPLocalControlDescriptor
,
6688 { "localControlDescriptor", "h248.iASPLocalControlDescriptor_element",
6689 FT_NONE
, BASE_NONE
, NULL
, 0,
6690 "IndAudLocalControlDescriptor", HFILL
}},
6691 { &hf_h248_iASPLocalDescriptor
,
6692 { "localDescriptor", "h248.iASPLocalDescriptor_element",
6693 FT_NONE
, BASE_NONE
, NULL
, 0,
6694 "IndAudLocalRemoteDescriptor", HFILL
}},
6695 { &hf_h248_iASPRemoteDescriptor
,
6696 { "remoteDescriptor", "h248.iASPRemoteDescriptor_element",
6697 FT_NONE
, BASE_NONE
, NULL
, 0,
6698 "IndAudLocalRemoteDescriptor", HFILL
}},
6699 { &hf_h248_statisticsDescriptor
,
6700 { "statisticsDescriptor", "h248.statisticsDescriptor_element",
6701 FT_NONE
, BASE_NONE
, NULL
, 0,
6702 "IndAudStatisticsDescriptor", HFILL
}},
6703 { &hf_h248_iALCDStreamMode
,
6704 { "streamMode", "h248.iALCDStreamMode_element",
6705 FT_NONE
, BASE_NONE
, NULL
, 0,
6707 { &hf_h248_iALCDReserveValue
,
6708 { "reserveValue", "h248.iALCDReserveValue_element",
6709 FT_NONE
, BASE_NONE
, NULL
, 0,
6711 { &hf_h248_iALCDReserveGroup
,
6712 { "reserveGroup", "h248.iALCDReserveGroup_element",
6713 FT_NONE
, BASE_NONE
, NULL
, 0,
6715 { &hf_h248_indAudPropertyParms
,
6716 { "propertyParms", "h248.indAudPropertyParms",
6717 FT_UINT32
, BASE_DEC
, NULL
, 0,
6718 "SEQUENCE_OF_IndAudPropertyParm", HFILL
}},
6719 { &hf_h248_indAudPropertyParms_item
,
6720 { "IndAudPropertyParm", "h248.IndAudPropertyParm_element",
6721 FT_NONE
, BASE_NONE
, NULL
, 0,
6723 { &hf_h248_streamModeSel
,
6724 { "streamModeSel", "h248.streamModeSel",
6725 FT_UINT32
, BASE_DEC
, VALS(h248_StreamMode_vals
), 0,
6726 "StreamMode", HFILL
}},
6728 { "name", "h248.name",
6729 FT_BYTES
, BASE_NONE
, NULL
, 0,
6730 "PkgdName", HFILL
}},
6731 { &hf_h248_propertyParms
,
6732 { "propertyParms", "h248.propertyParms_element",
6733 FT_NONE
, BASE_NONE
, NULL
, 0,
6734 "PropertyParm", HFILL
}},
6735 { &hf_h248_propGroupID
,
6736 { "propGroupID", "h248.propGroupID",
6737 FT_UINT32
, BASE_DEC
, NULL
, 0,
6738 "INTEGER_0_65535", HFILL
}},
6739 { &hf_h248_iAPropertyGroup
,
6740 { "propGrps", "h248.iAPropertyGroup",
6741 FT_UINT32
, BASE_DEC
, NULL
, 0,
6742 "IndAudPropertyGroup", HFILL
}},
6743 { &hf_h248_IndAudPropertyGroup_item
,
6744 { "IndAudPropertyParm", "h248.IndAudPropertyParm_element",
6745 FT_NONE
, BASE_NONE
, NULL
, 0,
6747 { &hf_h248_eventBufferControl
,
6748 { "eventBufferControl", "h248.eventBufferControl_element",
6749 FT_NONE
, BASE_NONE
, NULL
, 0,
6751 { &hf_h248_iATSDServiceState
,
6752 { "serviceState", "h248.iATSDServiceState_element",
6753 FT_NONE
, BASE_NONE
, NULL
, 0,
6755 { &hf_h248_serviceStateSel
,
6756 { "serviceStateSel", "h248.serviceStateSel",
6757 FT_UINT32
, BASE_DEC
, VALS(h248_ServiceState_vals
), 0,
6758 "ServiceState", HFILL
}},
6759 { &hf_h248_requestID
,
6760 { "requestID", "h248.requestID",
6761 FT_UINT32
, BASE_DEC
, NULL
, 0,
6763 { &hf_h248_iAEDPkgdName
,
6764 { "pkgdName", "h248.iAEDPkgdName",
6765 FT_BYTES
, BASE_NONE
, NULL
, 0,
6767 { &hf_h248_iAEBDEventName
,
6768 { "eventName", "h248.iAEBDEventName",
6769 FT_BYTES
, BASE_NONE
, NULL
, 0,
6770 "PkgdName", HFILL
}},
6771 { &hf_h248_indAudSignal
,
6772 { "signal", "h248.indAudSignal_element",
6773 FT_NONE
, BASE_NONE
, NULL
, 0,
6774 "IndAudSignal", HFILL
}},
6775 { &hf_h248_indAudSeqSigList
,
6776 { "seqSigList", "h248.indAudSeqSigList_element",
6777 FT_NONE
, BASE_NONE
, NULL
, 0,
6778 "IndAudSeqSigList", HFILL
}},
6781 FT_UINT32
, BASE_DEC
, NULL
, 0,
6782 "INTEGER_0_65535", HFILL
}},
6783 { &hf_h248_iASignalList
,
6784 { "signalList", "h248.iASignalList_element",
6785 FT_NONE
, BASE_NONE
, NULL
, 0,
6786 "IndAudSignal", HFILL
}},
6787 { &hf_h248_iASignalName
,
6788 { "signalName", "h248.iASignalName",
6789 FT_BYTES
, BASE_NONE
, NULL
, 0,
6790 "PkgdName", HFILL
}},
6791 { &hf_h248_signalRequestID
,
6792 { "signalRequestID", "h248.signalRequestID",
6793 FT_UINT32
, BASE_DEC
, NULL
, 0,
6794 "RequestID", HFILL
}},
6795 { &hf_h248_digitMapName
,
6796 { "digitMapName", "h248.digitMapName",
6797 FT_BYTES
, BASE_NONE
, NULL
, 0,
6799 { &hf_h248_iAStatName
,
6800 { "statName", "h248.iAStatName",
6801 FT_BYTES
, BASE_NONE
, NULL
, 0,
6802 "PkgdName", HFILL
}},
6803 { &hf_h248_packageName
,
6804 { "packageName", "h248.packageName",
6805 FT_BYTES
, BASE_NONE
, NULL
, 0,
6807 { &hf_h248_packageVersion
,
6808 { "packageVersion", "h248.packageVersion",
6809 FT_UINT32
, BASE_DEC
, NULL
, 0,
6810 "INTEGER_0_99", HFILL
}},
6811 { &hf_h248_requestId
,
6812 { "requestId", "h248.requestId",
6813 FT_UINT32
, BASE_DEC
, NULL
, 0,
6815 { &hf_h248_observedEventLst
,
6816 { "observedEventLst", "h248.observedEventLst",
6817 FT_UINT32
, BASE_DEC
, NULL
, 0,
6818 "SEQUENCE_OF_ObservedEvent", HFILL
}},
6819 { &hf_h248_observedEventLst_item
,
6820 { "ObservedEvent", "h248.ObservedEvent_element",
6821 FT_NONE
, BASE_NONE
, NULL
, 0,
6823 { &hf_h248_eventName
,
6824 { "eventName", "h248.eventName",
6825 FT_BYTES
, BASE_NONE
, NULL
, 0,
6827 { &hf_h248_eventParList
,
6828 { "eventParList", "h248.eventParList",
6829 FT_UINT32
, BASE_DEC
, NULL
, 0,
6830 "SEQUENCE_OF_EventParameter", HFILL
}},
6831 { &hf_h248_eventParList_item
,
6832 { "EventParameter", "h248.EventParameter_element",
6833 FT_NONE
, BASE_NONE
, NULL
, 0,
6835 { &hf_h248_timeNotation
,
6836 { "timeNotation", "h248.timeNotation_element",
6837 FT_NONE
, BASE_NONE
, NULL
, 0,
6839 { &hf_h248_eventParameterName
,
6840 { "eventParameterName", "h248.eventParameterName",
6841 FT_BYTES
, BASE_NONE
, NULL
, 0,
6843 { &hf_h248_eventParamValue
,
6844 { "eventParamValue", "h248.eventParamValue",
6845 FT_UINT32
, BASE_DEC
, NULL
, 0,
6846 "EventParamValues", HFILL
}},
6847 { &hf_h248_eventPar_extraInfo
,
6848 { "extraInfo", "h248.eventPar_extraInfo",
6849 FT_UINT32
, BASE_DEC
, VALS(h248_EventPar_extraInfo_vals
), 0,
6850 "EventPar_extraInfo", HFILL
}},
6851 { &hf_h248_relation
,
6852 { "relation", "h248.relation",
6853 FT_UINT32
, BASE_DEC
, VALS(h248_Relation_vals
), 0,
6856 { "range", "h248.range",
6857 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
6858 "BOOLEAN", HFILL
}},
6860 { "sublist", "h248.sublist",
6861 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
6862 "BOOLEAN", HFILL
}},
6863 { &hf_h248_EventParamValues_item
,
6864 { "EventParamValue", "h248.EventParamValue",
6865 FT_BYTES
, BASE_NONE
, NULL
, 0,
6867 { &hf_h248_serviceChangeParms
,
6868 { "serviceChangeParms", "h248.serviceChangeParms_element",
6869 FT_NONE
, BASE_NONE
, NULL
, 0,
6870 "ServiceChangeParm", HFILL
}},
6871 { &hf_h248_serviceChangeResult
,
6872 { "serviceChangeResult", "h248.serviceChangeResult",
6873 FT_UINT32
, BASE_DEC
, VALS(h248_ServiceChangeResult_vals
), 0,
6875 { &hf_h248_serviceChangeResParms
,
6876 { "serviceChangeResParms", "h248.serviceChangeResParms_element",
6877 FT_NONE
, BASE_NONE
, NULL
, 0,
6878 "ServiceChangeResParm", HFILL
}},
6879 { &hf_h248_wildcard
,
6880 { "wildcard", "h248.wildcard",
6881 FT_UINT32
, BASE_DEC
, NULL
, 0,
6882 "SEQUENCE_OF_WildcardField", HFILL
}},
6883 { &hf_h248_wildcard_item
,
6884 { "WildcardField", "h248.WildcardField",
6885 FT_BYTES
, BASE_NONE
, NULL
, 0,
6887 { &hf_h248_terminationId
,
6888 { "id", "h248.terminationId",
6889 FT_BYTES
, BASE_NONE
, NULL
, 0,
6890 "T_terminationId", HFILL
}},
6891 { &hf_h248_TerminationIDList_item
,
6892 { "TerminationID", "h248.TerminationID_element",
6893 FT_NONE
, BASE_NONE
, NULL
, 0,
6895 { &hf_h248_termStateDescr
,
6896 { "termStateDescr", "h248.termStateDescr_element",
6897 FT_NONE
, BASE_NONE
, NULL
, 0,
6898 "TerminationStateDescriptor", HFILL
}},
6900 { "streams", "h248.streams",
6901 FT_UINT32
, BASE_DEC
, VALS(h248_T_streams_vals
), 0,
6903 { &hf_h248_mediaDescriptorOneStream
,
6904 { "oneStream", "h248.mediaDescriptorOneStream_element",
6905 FT_NONE
, BASE_NONE
, NULL
, 0,
6906 "StreamParms", HFILL
}},
6907 { &hf_h248_mediaDescriptorMultiStream
,
6908 { "multiStream", "h248.mediaDescriptorMultiStream",
6909 FT_UINT32
, BASE_DEC
, NULL
, 0,
6910 "SEQUENCE_OF_StreamDescriptor", HFILL
}},
6911 { &hf_h248_mediaDescriptorMultiStream_item
,
6912 { "StreamDescriptor", "h248.StreamDescriptor_element",
6913 FT_NONE
, BASE_NONE
, NULL
, 0,
6915 { &hf_h248_streamParms
,
6916 { "streamParms", "h248.streamParms_element",
6917 FT_NONE
, BASE_NONE
, NULL
, 0,
6919 { &hf_h248_localControlDescriptor
,
6920 { "localControlDescriptor", "h248.localControlDescriptor_element",
6921 FT_NONE
, BASE_NONE
, NULL
, 0,
6923 { &hf_h248_localDescriptor
,
6924 { "localDescriptor", "h248.localDescriptor_element",
6925 FT_NONE
, BASE_NONE
, NULL
, 0,
6926 "LocalRemoteDescriptor", HFILL
}},
6927 { &hf_h248_remoteDescriptor
,
6928 { "remoteDescriptor", "h248.remoteDescriptor_element",
6929 FT_NONE
, BASE_NONE
, NULL
, 0,
6930 "LocalRemoteDescriptor", HFILL
}},
6931 { &hf_h248_sPstatisticsDescriptor
,
6932 { "statisticsDescriptor", "h248.sPstatisticsDescriptor",
6933 FT_UINT32
, BASE_DEC
, NULL
, 0,
6935 { &hf_h248_streamMode
,
6936 { "streamMode", "h248.streamMode",
6937 FT_UINT32
, BASE_DEC
, VALS(h248_StreamMode_vals
), 0,
6939 { &hf_h248_reserveValue
,
6940 { "reserveValue", "h248.reserveValue",
6941 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
6942 "BOOLEAN", HFILL
}},
6943 { &hf_h248_reserveGroup
,
6944 { "reserveGroup", "h248.reserveGroup",
6945 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
6946 "BOOLEAN", HFILL
}},
6947 { &hf_h248_lCDpropertyParms
,
6948 { "propertyParms", "h248.lCDpropertyParms",
6949 FT_UINT32
, BASE_DEC
, NULL
, 0,
6950 "SEQUENCE_OF_PropertyParm", HFILL
}},
6951 { &hf_h248_lCDpropertyParms_item
,
6952 { "PropertyParm", "h248.PropertyParm_element",
6953 FT_NONE
, BASE_NONE
, NULL
, 0,
6955 { &hf_h248_propertyName
,
6956 { "propertyName", "h248.propertyName",
6957 FT_BYTES
, BASE_NONE
, NULL
, 0,
6959 { &hf_h248_propertyParamValue
,
6960 { "value", "h248.propertyParamValue",
6961 FT_UINT32
, BASE_DEC
, NULL
, 0,
6962 "SEQUENCE_OF_PropertyID", HFILL
}},
6963 { &hf_h248_propertyParamValue_item
,
6964 { "PropertyID", "h248.PropertyID",
6965 FT_BYTES
, BASE_NONE
, NULL
, 0,
6967 { &hf_h248_propParm_extraInfo
,
6968 { "extraInfo", "h248.propParm_extraInfo",
6969 FT_UINT32
, BASE_DEC
, VALS(h248_PropParm_extraInfo_vals
), 0,
6970 "PropParm_extraInfo", HFILL
}},
6971 { &hf_h248_propGrps
,
6972 { "propGrps", "h248.propGrps",
6973 FT_UINT32
, BASE_DEC
, NULL
, 0,
6974 "SEQUENCE_OF_PropertyGroup", HFILL
}},
6975 { &hf_h248_propGrps_item
,
6976 { "PropertyGroup", "h248.PropertyGroup",
6977 FT_UINT32
, BASE_DEC
, NULL
, 0,
6979 { &hf_h248_PropertyGroup_item
,
6980 { "PropertyParm", "h248.PropertyParm_element",
6981 FT_NONE
, BASE_NONE
, NULL
, 0,
6983 { &hf_h248_tSDpropertyParms
,
6984 { "propertyParms", "h248.tSDpropertyParms",
6985 FT_UINT32
, BASE_DEC
, NULL
, 0,
6986 "SEQUENCE_OF_PropertyParm", HFILL
}},
6987 { &hf_h248_tSDpropertyParms_item
,
6988 { "PropertyParm", "h248.PropertyParm_element",
6989 FT_NONE
, BASE_NONE
, NULL
, 0,
6991 { &hf_h248_tSEventBufferControl
,
6992 { "eventBufferControl", "h248.tSEventBufferControl",
6993 FT_UINT32
, BASE_DEC
, VALS(h248_EventBufferControl_vals
), 0,
6995 { &hf_h248_serviceState
,
6996 { "serviceState", "h248.serviceState",
6997 FT_UINT32
, BASE_DEC
, VALS(h248_ServiceState_vals
), 0,
7000 { "muxType", "h248.muxType",
7001 FT_UINT32
, BASE_DEC
, VALS(h248_MuxType_vals
), 0,
7003 { &hf_h248_termList
,
7004 { "termList", "h248.termList",
7005 FT_UINT32
, BASE_DEC
, NULL
, 0,
7006 "SEQUENCE_OF_TerminationID", HFILL
}},
7007 { &hf_h248_termList_item
,
7008 { "TerminationID", "h248.TerminationID_element",
7009 FT_NONE
, BASE_NONE
, NULL
, 0,
7011 { &hf_h248_nonStandardData
,
7012 { "nonStandardData", "h248.nonStandardData_element",
7013 FT_NONE
, BASE_NONE
, NULL
, 0,
7015 { &hf_h248_eventList
,
7016 { "eventList", "h248.eventList",
7017 FT_UINT32
, BASE_DEC
, NULL
, 0,
7018 "SEQUENCE_OF_RequestedEvent", HFILL
}},
7019 { &hf_h248_eventList_item
,
7020 { "RequestedEvent", "h248.RequestedEvent_element",
7021 FT_NONE
, BASE_NONE
, NULL
, 0,
7023 { &hf_h248_eventAction
,
7024 { "eventAction", "h248.eventAction_element",
7025 FT_NONE
, BASE_NONE
, NULL
, 0,
7026 "RequestedActions", HFILL
}},
7027 { &hf_h248_evParList
,
7028 { "evParList", "h248.evParList",
7029 FT_UINT32
, BASE_DEC
, NULL
, 0,
7030 "SEQUENCE_OF_EventParameter", HFILL
}},
7031 { &hf_h248_evParList_item
,
7032 { "EventParameter", "h248.EventParameter_element",
7033 FT_NONE
, BASE_NONE
, NULL
, 0,
7035 { &hf_h248_secondEvent
,
7036 { "secondEvent", "h248.secondEvent_element",
7037 FT_NONE
, BASE_NONE
, NULL
, 0,
7038 "SecondEventsDescriptor", HFILL
}},
7039 { &hf_h248_notifyImmediate
,
7040 { "notifyImmediate", "h248.notifyImmediate_element",
7041 FT_NONE
, BASE_NONE
, NULL
, 0,
7043 { &hf_h248_notifyRegulated
,
7044 { "notifyRegulated", "h248.notifyRegulated_element",
7045 FT_NONE
, BASE_NONE
, NULL
, 0,
7046 "RegulatedEmbeddedDescriptor", HFILL
}},
7047 { &hf_h248_neverNotify
,
7048 { "neverNotify", "h248.neverNotify_element",
7049 FT_NONE
, BASE_NONE
, NULL
, 0,
7051 { &hf_h248_keepActive
,
7052 { "keepActive", "h248.keepActive",
7053 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
7054 "BOOLEAN", HFILL
}},
7056 { "eventDM", "h248.eventDM",
7057 FT_UINT32
, BASE_DEC
, VALS(h248_EventDM_vals
), 0,
7059 { &hf_h248_notifyBehaviour
,
7060 { "notifyBehaviour", "h248.notifyBehaviour",
7061 FT_UINT32
, BASE_DEC
, VALS(h248_NotifyBehaviour_vals
), 0,
7063 { &hf_h248_resetEventsDescriptor
,
7064 { "resetEventsDescriptor", "h248.resetEventsDescriptor_element",
7065 FT_NONE
, BASE_NONE
, NULL
, 0,
7067 { &hf_h248_digitMapValue
,
7068 { "digitMapValue", "h248.digitMapValue_element",
7069 FT_NONE
, BASE_NONE
, NULL
, 0,
7071 { &hf_h248_secondaryEventList
,
7072 { "eventList", "h248.secondaryEventList",
7073 FT_UINT32
, BASE_DEC
, NULL
, 0,
7074 "SEQUENCE_OF_SecondRequestedEvent", HFILL
}},
7075 { &hf_h248_secondaryEventList_item
,
7076 { "SecondRequestedEvent", "h248.SecondRequestedEvent_element",
7077 FT_NONE
, BASE_NONE
, NULL
, 0,
7079 { &hf_h248_pkgdName
,
7080 { "pkgdName", "h248.pkgdName",
7081 FT_BYTES
, BASE_NONE
, NULL
, 0,
7083 { &hf_h248_secondaryEventAction
,
7084 { "eventAction", "h248.secondaryEventAction_element",
7085 FT_NONE
, BASE_NONE
, NULL
, 0,
7086 "SecondRequestedActions", HFILL
}},
7087 { &hf_h248_EventBufferDescriptor_item
,
7088 { "EventSpec", "h248.EventSpec_element",
7089 FT_NONE
, BASE_NONE
, NULL
, 0,
7091 { &hf_h248_SignalsDescriptor_item
,
7092 { "SignalRequest", "h248.SignalRequest",
7093 FT_UINT32
, BASE_DEC
, VALS(h248_SignalRequest_vals
), 0,
7096 { "signal", "h248.signal_element",
7097 FT_NONE
, BASE_NONE
, NULL
, 0,
7099 { &hf_h248_seqSigList
,
7100 { "seqSigList", "h248.seqSigList_element",
7101 FT_NONE
, BASE_NONE
, NULL
, 0,
7103 { &hf_h248_signalList
,
7104 { "signalList", "h248.signalList",
7105 FT_UINT32
, BASE_DEC
, NULL
, 0,
7106 "SEQUENCE_OF_Signal", HFILL
}},
7107 { &hf_h248_signalList_item
,
7108 { "Signal", "h248.Signal_element",
7109 FT_NONE
, BASE_NONE
, NULL
, 0,
7111 { &hf_h248_signalName
,
7112 { "signalName", "h248.signalName",
7113 FT_BYTES
, BASE_NONE
, NULL
, 0,
7116 { "sigType", "h248.sigType",
7117 FT_UINT32
, BASE_DEC
, VALS(h248_SignalType_vals
), 0,
7118 "SignalType", HFILL
}},
7119 { &hf_h248_duration
,
7120 { "duration", "h248.duration",
7121 FT_UINT32
, BASE_DEC
, NULL
, 0,
7122 "INTEGER_0_65535", HFILL
}},
7123 { &hf_h248_notifyCompletion
,
7124 { "notifyCompletion", "h248.notifyCompletion",
7125 FT_BYTES
, BASE_NONE
, NULL
, 0,
7127 { &hf_h248_sigParList
,
7128 { "sigParList", "h248.sigParList",
7129 FT_UINT32
, BASE_DEC
, NULL
, 0,
7130 "SEQUENCE_OF_SigParameter", HFILL
}},
7131 { &hf_h248_sigParList_item
,
7132 { "SigParameter", "h248.SigParameter_element",
7133 FT_NONE
, BASE_NONE
, NULL
, 0,
7135 { &hf_h248_direction
,
7136 { "direction", "h248.direction",
7137 FT_UINT32
, BASE_DEC
, VALS(h248_SignalDirection_vals
), 0,
7138 "SignalDirection", HFILL
}},
7139 { &hf_h248_intersigDelay
,
7140 { "intersigDelay", "h248.intersigDelay",
7141 FT_UINT32
, BASE_DEC
, NULL
, 0,
7142 "INTEGER_0_65535", HFILL
}},
7143 { &hf_h248_sigParameterName
,
7144 { "sigParameterName", "h248.sigParameterName",
7145 FT_BYTES
, BASE_NONE
, NULL
, 0,
7148 { "value", "h248.value",
7149 FT_UINT32
, BASE_DEC
, NULL
, 0,
7150 "SigParamValues", HFILL
}},
7151 { &hf_h248_extraInfo
,
7152 { "extraInfo", "h248.extraInfo",
7153 FT_UINT32
, BASE_DEC
, VALS(h248_T_extraInfo_vals
), 0,
7155 { &hf_h248_SigParamValues_item
,
7156 { "SigParamValue", "h248.SigParamValue",
7157 FT_BYTES
, BASE_NONE
, NULL
, 0,
7160 { "mtl", "h248.mtl",
7161 FT_UINT32
, BASE_DEC
, NULL
, 0,
7162 "SEQUENCE_OF_ModemType", HFILL
}},
7163 { &hf_h248_mtl_item
,
7164 { "ModemType", "h248.ModemType",
7165 FT_UINT32
, BASE_DEC
, VALS(h248_ModemType_vals
), 0,
7168 { "mpl", "h248.mpl",
7169 FT_UINT32
, BASE_DEC
, NULL
, 0,
7170 "SEQUENCE_OF_PropertyParm", HFILL
}},
7171 { &hf_h248_mpl_item
,
7172 { "PropertyParm", "h248.PropertyParm_element",
7173 FT_NONE
, BASE_NONE
, NULL
, 0,
7175 { &hf_h248_startTimer
,
7176 { "startTimer", "h248.startTimer",
7177 FT_UINT32
, BASE_DEC
, NULL
, 0,
7178 "INTEGER_0_99", HFILL
}},
7179 { &hf_h248_shortTimer
,
7180 { "shortTimer", "h248.shortTimer",
7181 FT_UINT32
, BASE_DEC
, NULL
, 0,
7182 "INTEGER_0_99", HFILL
}},
7183 { &hf_h248_longTimer
,
7184 { "longTimer", "h248.longTimer",
7185 FT_UINT32
, BASE_DEC
, NULL
, 0,
7186 "INTEGER_0_99", HFILL
}},
7187 { &hf_h248_digitMapBody
,
7188 { "digitMapBody", "h248.digitMapBody",
7189 FT_STRING
, BASE_NONE
, NULL
, 0,
7190 "IA5String", HFILL
}},
7191 { &hf_h248_durationTimer
,
7192 { "durationTimer", "h248.durationTimer",
7193 FT_UINT32
, BASE_DEC
, NULL
, 0,
7194 "INTEGER_0_99", HFILL
}},
7195 { &hf_h248_serviceChangeMethod
,
7196 { "serviceChangeMethod", "h248.serviceChangeMethod",
7197 FT_UINT32
, BASE_DEC
, VALS(h248_ServiceChangeMethod_vals
), 0,
7199 { &hf_h248_serviceChangeAddress
,
7200 { "serviceChangeAddress", "h248.serviceChangeAddress",
7201 FT_UINT32
, BASE_DEC
, VALS(h248_ServiceChangeAddress_vals
), 0,
7203 { &hf_h248_serviceChangeVersion
,
7204 { "serviceChangeVersion", "h248.serviceChangeVersion",
7205 FT_UINT32
, BASE_DEC
, NULL
, 0,
7206 "INTEGER_0_99", HFILL
}},
7207 { &hf_h248_serviceChangeProfile
,
7208 { "serviceChangeProfile", "h248.serviceChangeProfile_element",
7209 FT_NONE
, BASE_NONE
, NULL
, 0,
7211 { &hf_h248_serviceChangeReason
,
7212 { "serviceChangeReason", "h248.serviceChangeReason",
7213 FT_UINT32
, BASE_DEC
, NULL
, 0,
7214 "SCreasonValue", HFILL
}},
7215 { &hf_h248_serviceChangeDelay
,
7216 { "serviceChangeDelay", "h248.serviceChangeDelay",
7217 FT_UINT32
, BASE_DEC
, NULL
, 0,
7218 "INTEGER_0_4294967295", HFILL
}},
7219 { &hf_h248_serviceChangeMgcId
,
7220 { "serviceChangeMgcId", "h248.serviceChangeMgcId",
7221 FT_UINT32
, BASE_DEC
, VALS(h248_MId_vals
), 0,
7223 { &hf_h248_timeStamp
,
7224 { "timeStamp", "h248.timeStamp_element",
7225 FT_NONE
, BASE_NONE
, NULL
, 0,
7226 "TimeNotation", HFILL
}},
7227 { &hf_h248_serviceChangeInfo
,
7228 { "serviceChangeInfo", "h248.serviceChangeInfo_element",
7229 FT_NONE
, BASE_NONE
, NULL
, 0,
7230 "AuditDescriptor", HFILL
}},
7231 { &hf_h248_serviceChangeIncompleteFlag
,
7232 { "serviceChangeIncompleteFlag", "h248.serviceChangeIncompleteFlag_element",
7233 FT_NONE
, BASE_NONE
, NULL
, 0,
7235 { &hf_h248_SCreasonValue_item
,
7236 { "SCreasonValueOctetStr", "h248.SCreasonValueOctetStr",
7237 FT_BYTES
, BASE_NONE
, NULL
, 0,
7239 { &hf_h248_timestamp
,
7240 { "timestamp", "h248.timestamp_element",
7241 FT_NONE
, BASE_NONE
, NULL
, 0,
7242 "TimeNotation", HFILL
}},
7243 { &hf_h248_profileName
,
7244 { "profileName", "h248.profileName",
7245 FT_STRING
, BASE_NONE
, NULL
, 0,
7246 "IA5String_SIZE_1_67", HFILL
}},
7247 { &hf_h248_PackagesDescriptor_item
,
7248 { "PackagesItem", "h248.PackagesItem_element",
7249 FT_NONE
, BASE_NONE
, NULL
, 0,
7251 { &hf_h248_StatisticsDescriptor_item
,
7252 { "StatisticsParameter", "h248.StatisticsParameter_element",
7253 FT_NONE
, BASE_NONE
, NULL
, 0,
7255 { &hf_h248_statName
,
7256 { "statName", "h248.statName",
7257 FT_BYTES
, BASE_NONE
, NULL
, 0,
7259 { &hf_h248_statValue
,
7260 { "statValue", "h248.statValue",
7261 FT_UINT32
, BASE_DEC
, NULL
, 0,
7263 { &hf_h248_nonStandardIdentifier
,
7264 { "nonStandardIdentifier", "h248.nonStandardIdentifier",
7265 FT_UINT32
, BASE_DEC
, VALS(h248_NonStandardIdentifier_vals
), 0,
7268 { "data", "h248.data",
7269 FT_BYTES
, BASE_NONE
, NULL
, 0,
7270 "OCTET_STRING", HFILL
}},
7272 { "object", "h248.object",
7273 FT_OID
, BASE_NONE
, NULL
, 0,
7274 "OBJECT_IDENTIFIER", HFILL
}},
7275 { &hf_h248_h221NonStandard
,
7276 { "h221NonStandard", "h248.h221NonStandard_element",
7277 FT_NONE
, BASE_NONE
, NULL
, 0,
7279 { &hf_h248_experimental
,
7280 { "experimental", "h248.experimental",
7281 FT_STRING
, BASE_NONE
, NULL
, 0,
7282 "IA5String_SIZE_8", HFILL
}},
7283 { &hf_h248_t35CountryCode1
,
7284 { "t35CountryCode1", "h248.t35CountryCode1",
7285 FT_UINT32
, BASE_DEC
, NULL
, 0,
7286 "INTEGER_0_255", HFILL
}},
7287 { &hf_h248_t35CountryCode2
,
7288 { "t35CountryCode2", "h248.t35CountryCode2",
7289 FT_UINT32
, BASE_DEC
, NULL
, 0,
7290 "INTEGER_0_255", HFILL
}},
7291 { &hf_h248_t35Extension
,
7292 { "t35Extension", "h248.t35Extension",
7293 FT_UINT32
, BASE_DEC
, NULL
, 0,
7294 "INTEGER_0_255", HFILL
}},
7295 { &hf_h248_manufacturerCode
,
7296 { "manufacturerCode", "h248.manufacturerCode",
7297 FT_UINT32
, BASE_DEC
, NULL
, 0,
7298 "INTEGER_0_65535", HFILL
}},
7300 { "date", "h248.date",
7301 FT_STRING
, BASE_NONE
, NULL
, 0,
7302 "IA5String_SIZE_8", HFILL
}},
7304 { "time", "h248.time",
7305 FT_STRING
, BASE_NONE
, NULL
, 0,
7306 "IA5String_SIZE_8", HFILL
}},
7307 { &hf_h248_Value_item
,
7308 { "Value item", "h248.Value_item",
7309 FT_BYTES
, BASE_NONE
, NULL
, 0,
7310 "OCTET_STRING", HFILL
}},
7311 { &hf_h248_audit_result
,
7312 { "auditResult", "h248.audit_result",
7313 FT_UINT32
, BASE_DEC
, VALS(h248_AuditResultV1_vals
), 0,
7314 "AuditResultV1", HFILL
}},
7315 { &hf_h248_contectAuditResult
,
7316 { "contectAuditResult", "h248.contectAuditResult_element",
7317 FT_NONE
, BASE_NONE
, NULL
, 0,
7318 "TerminationID", HFILL
}},
7319 { &hf_h248_eventParamterName
,
7320 { "eventParamterName", "h248.eventParamterName",
7321 FT_BYTES
, BASE_NONE
, NULL
, 0,
7322 "EventParameterName", HFILL
}},
7323 { &hf_h248_event_param_value
,
7324 { "value", "h248.event_param_value",
7325 FT_BYTES
, BASE_NONE
, NULL
, 0,
7326 "EventParamValueV1", HFILL
}},
7327 { &hf_h248_sig_param_value
,
7328 { "value", "h248.sig_param_value",
7329 FT_BYTES
, BASE_NONE
, NULL
, 0,
7330 "SigParamValueV1", HFILL
}},
7331 { &hf_h248_T_auditToken_muxToken
,
7332 { "muxToken", "h248.T.auditToken.muxToken",
7333 FT_BOOLEAN
, 8, NULL
, 0x80,
7335 { &hf_h248_T_auditToken_modemToken
,
7336 { "modemToken", "h248.T.auditToken.modemToken",
7337 FT_BOOLEAN
, 8, NULL
, 0x40,
7339 { &hf_h248_T_auditToken_mediaToken
,
7340 { "mediaToken", "h248.T.auditToken.mediaToken",
7341 FT_BOOLEAN
, 8, NULL
, 0x20,
7343 { &hf_h248_T_auditToken_eventsToken
,
7344 { "eventsToken", "h248.T.auditToken.eventsToken",
7345 FT_BOOLEAN
, 8, NULL
, 0x10,
7347 { &hf_h248_T_auditToken_signalsToken
,
7348 { "signalsToken", "h248.T.auditToken.signalsToken",
7349 FT_BOOLEAN
, 8, NULL
, 0x08,
7351 { &hf_h248_T_auditToken_digitMapToken
,
7352 { "digitMapToken", "h248.T.auditToken.digitMapToken",
7353 FT_BOOLEAN
, 8, NULL
, 0x04,
7355 { &hf_h248_T_auditToken_statsToken
,
7356 { "statsToken", "h248.T.auditToken.statsToken",
7357 FT_BOOLEAN
, 8, NULL
, 0x02,
7359 { &hf_h248_T_auditToken_observedEventsToken
,
7360 { "observedEventsToken", "h248.T.auditToken.observedEventsToken",
7361 FT_BOOLEAN
, 8, NULL
, 0x01,
7363 { &hf_h248_T_auditToken_packagesToken
,
7364 { "packagesToken", "h248.T.auditToken.packagesToken",
7365 FT_BOOLEAN
, 8, NULL
, 0x80,
7367 { &hf_h248_T_auditToken_eventBufferToken
,
7368 { "eventBufferToken", "h248.T.auditToken.eventBufferToken",
7369 FT_BOOLEAN
, 8, NULL
, 0x40,
7371 { &hf_h248_NotifyCompletion_onTimeOut
,
7372 { "onTimeOut", "h248.NotifyCompletion.onTimeOut",
7373 FT_BOOLEAN
, 8, NULL
, 0x80,
7375 { &hf_h248_NotifyCompletion_onInterruptByEvent
,
7376 { "onInterruptByEvent", "h248.NotifyCompletion.onInterruptByEvent",
7377 FT_BOOLEAN
, 8, NULL
, 0x40,
7379 { &hf_h248_NotifyCompletion_onInterruptByNewSignalDescr
,
7380 { "onInterruptByNewSignalDescr", "h248.NotifyCompletion.onInterruptByNewSignalDescr",
7381 FT_BOOLEAN
, 8, NULL
, 0x20,
7383 { &hf_h248_NotifyCompletion_otherReason
,
7384 { "otherReason", "h248.NotifyCompletion.otherReason",
7385 FT_BOOLEAN
, 8, NULL
, 0x10,
7387 { &hf_h248_NotifyCompletion_onIteration
,
7388 { "onIteration", "h248.NotifyCompletion.onIteration",
7389 FT_BOOLEAN
, 8, NULL
, 0x08,
7392 GCP_HF_ARR_ELEMS("h248",h248_arrel
)
7396 /* List of subtrees */
7397 static int *ett
[] = {
7406 GCP_ETT_ARR_ELEMS(h248_arrel
),
7408 &ett_h248_MegacoMessage
,
7409 &ett_h248_AuthenticationHeader
,
7411 &ett_h248_T_messageBody
,
7412 &ett_h248_SEQUENCE_OF_Transaction
,
7414 &ett_h248_DomainName
,
7415 &ett_h248_IP4Address
,
7416 &ett_h248_IP6Address
,
7417 &ett_h248_Transaction
,
7418 &ett_h248_TransactionRequest
,
7419 &ett_h248_SEQUENCE_OF_ActionRequest
,
7420 &ett_h248_TransactionPending
,
7421 &ett_h248_TransactionReply
,
7422 &ett_h248_T_transactionResult
,
7423 &ett_h248_SEQUENCE_OF_ActionReply
,
7424 &ett_h248_SegmentReply
,
7425 &ett_h248_TransactionResponseAck
,
7426 &ett_h248_TransactionAck
,
7427 &ett_h248_ErrorDescriptor
,
7428 &ett_h248_ActionRequest
,
7429 &ett_h248_SEQUENCE_OF_CommandRequest
,
7430 &ett_h248_ActionReply
,
7431 &ett_h248_SEQUENCE_OF_CommandReply
,
7432 &ett_h248_ContextRequest
,
7433 &ett_h248_T_topologyReq
,
7434 &ett_h248_SEQUENCE_OF_PropertyParm
,
7435 &ett_h248_SEQUENCE_OF_ContextIDinList
,
7436 &ett_h248_ContextAttrAuditRequest
,
7437 &ett_h248_SEQUENCE_OF_IndAudPropertyParm
,
7438 &ett_h248_SelectLogic
,
7439 &ett_h248_CommandRequest
,
7441 &ett_h248_CommandReply
,
7442 &ett_h248_TopologyRequest
,
7443 &ett_h248_AmmRequest
,
7444 &ett_h248_SEQUENCE_OF_AmmDescriptor
,
7445 &ett_h248_AmmDescriptor
,
7446 &ett_h248_AmmsReply
,
7447 &ett_h248_SubtractRequest
,
7448 &ett_h248_AuditRequest
,
7449 &ett_h248_AuditReply
,
7450 &ett_h248_AuditResult
,
7451 &ett_h248_TermListAuditResult
,
7452 &ett_h248_TerminationAudit
,
7453 &ett_h248_AuditReturnParameter
,
7454 &ett_h248_AuditDescriptor
,
7455 &ett_h248_T_auditToken
,
7456 &ett_h248_SEQUENCE_OF_IndAuditParameter
,
7457 &ett_h248_IndAuditParameter
,
7458 &ett_h248_IndAudMediaDescriptor
,
7459 &ett_h248_IndAudMediaDescriptorStreams
,
7460 &ett_h248_SEQUENCE_OF_IndAudStreamDescriptor
,
7461 &ett_h248_IndAudStreamDescriptor
,
7462 &ett_h248_IndAudStreamParms
,
7463 &ett_h248_IndAudLocalControlDescriptor
,
7464 &ett_h248_IndAudPropertyParm
,
7465 &ett_h248_IndAudLocalRemoteDescriptor
,
7466 &ett_h248_IndAudPropertyGroup
,
7467 &ett_h248_IndAudTerminationStateDescriptor
,
7468 &ett_h248_IndAudEventsDescriptor
,
7469 &ett_h248_IndAudEventBufferDescriptor
,
7470 &ett_h248_IndAudSignalsDescriptor
,
7471 &ett_h248_IndAudSeqSigList
,
7472 &ett_h248_IndAudSignal
,
7473 &ett_h248_IndAudDigitMapDescriptor
,
7474 &ett_h248_IndAudStatisticsDescriptor
,
7475 &ett_h248_IndAudPackagesDescriptor
,
7476 &ett_h248_NotifyRequest
,
7477 &ett_h248_NotifyReply
,
7478 &ett_h248_ObservedEventsDescriptor
,
7479 &ett_h248_SEQUENCE_OF_ObservedEvent
,
7480 &ett_h248_ObservedEvent
,
7481 &ett_h248_SEQUENCE_OF_EventParameter
,
7482 &ett_h248_EventParameter
,
7483 &ett_h248_EventPar_extraInfo
,
7484 &ett_h248_EventParamValues
,
7485 &ett_h248_ServiceChangeRequest
,
7486 &ett_h248_ServiceChangeReply
,
7487 &ett_h248_ServiceChangeResult
,
7488 &ett_h248_TerminationID
,
7489 &ett_h248_SEQUENCE_OF_WildcardField
,
7490 &ett_h248_TerminationIDList
,
7491 &ett_h248_MediaDescriptor
,
7492 &ett_h248_T_streams
,
7493 &ett_h248_SEQUENCE_OF_StreamDescriptor
,
7494 &ett_h248_StreamDescriptor
,
7495 &ett_h248_StreamParms
,
7496 &ett_h248_LocalControlDescriptor
,
7497 &ett_h248_PropertyParm
,
7498 &ett_h248_SEQUENCE_OF_PropertyID
,
7499 &ett_h248_PropParm_extraInfo
,
7500 &ett_h248_LocalRemoteDescriptor
,
7501 &ett_h248_SEQUENCE_OF_PropertyGroup
,
7502 &ett_h248_PropertyGroup
,
7503 &ett_h248_TerminationStateDescriptor
,
7504 &ett_h248_MuxDescriptor
,
7505 &ett_h248_SEQUENCE_OF_TerminationID
,
7506 &ett_h248_EventsDescriptor
,
7507 &ett_h248_SEQUENCE_OF_RequestedEvent
,
7508 &ett_h248_RequestedEvent
,
7509 &ett_h248_RegulatedEmbeddedDescriptor
,
7510 &ett_h248_NotifyBehaviour
,
7511 &ett_h248_RequestedActions
,
7513 &ett_h248_SecondEventsDescriptor
,
7514 &ett_h248_SEQUENCE_OF_SecondRequestedEvent
,
7515 &ett_h248_SecondRequestedEvent
,
7516 &ett_h248_SecondRequestedActions
,
7517 &ett_h248_EventBufferDescriptor
,
7518 &ett_h248_EventSpec
,
7519 &ett_h248_SignalsDescriptor
,
7520 &ett_h248_SignalRequest
,
7521 &ett_h248_SeqSigList
,
7522 &ett_h248_SEQUENCE_OF_Signal
,
7524 &ett_h248_SEQUENCE_OF_SigParameter
,
7525 &ett_h248_NotifyCompletion
,
7526 &ett_h248_SigParameter
,
7527 &ett_h248_T_extraInfo
,
7528 &ett_h248_SigParamValues
,
7529 &ett_h248_ModemDescriptor
,
7530 &ett_h248_SEQUENCE_OF_ModemType
,
7531 &ett_h248_DigitMapDescriptor
,
7532 &ett_h248_DigitMapValue
,
7533 &ett_h248_ServiceChangeParm
,
7534 &ett_h248_SCreasonValue
,
7535 &ett_h248_ServiceChangeAddress
,
7536 &ett_h248_ServiceChangeResParm
,
7537 &ett_h248_ServiceChangeProfile
,
7538 &ett_h248_PackagesDescriptor
,
7539 &ett_h248_PackagesItem
,
7540 &ett_h248_StatisticsDescriptor
,
7541 &ett_h248_StatisticsParameter
,
7542 &ett_h248_NonStandardData
,
7543 &ett_h248_NonStandardIdentifier
,
7544 &ett_h248_H221NonStandard
,
7545 &ett_h248_TimeNotation
,
7547 &ett_h248_AuditReplyV1
,
7548 &ett_h248_AuditResultV1
,
7549 &ett_h248_EventParameterV1
,
7550 &ett_h248_SigParameterV1
,
7553 static ei_register_info ei
[] = {
7554 { &ei_h248_errored_command
, { "h248.errored_command", PI_RESPONSE_CODE
, PI_WARN
, "Errored Command", EXPFILL
}},
7555 { &ei_h248_transactionId64
, { "h248.transactionId.error", PI_MALFORMED
, PI_WARN
, "Transaction ID invalid", EXPFILL
}},
7556 { &ei_h248_context_id64
, { "h248.contextId.error", PI_MALFORMED
, PI_WARN
, "Context ID invalid", EXPFILL
}},
7557 { &ei_h248_octet_string_expected
, { "h248.octet_string_expected", PI_PROTOCOL
, PI_WARN
, "H.248 BER Error: OctetString expected", EXPFILL
}},
7560 expert_module_t
* expert_h248
;
7561 module_t
*h248_module
;
7563 /* Register protocol */
7564 proto_h248
= proto_register_protocol(PNAME
, PSNAME
, PFNAME
);
7565 h248_handle
= register_dissector("h248", dissect_h248
, proto_h248
);
7566 h248_tpkt_handle
= register_dissector("h248.tpkt", dissect_h248_tpkt
, proto_h248
);
7568 /* Register fields and subtrees */
7569 proto_register_field_array(proto_h248
, hf
, array_length(hf
));
7570 proto_register_subtree_array(ett
, array_length(ett
));
7571 expert_h248
= expert_register_protocol(proto_h248
);
7572 expert_register_field_array(expert_h248
, ei
, array_length(ei
));
7574 subdissector_table
= register_dissector_table("h248.magic_num", "H.248 Magic Num", proto_h248
, FT_UINT32
, BASE_HEX
);
7576 h248_module
= prefs_register_protocol(proto_h248
, NULL
);
7577 prefs_register_bool_preference(h248_module
, "ctx_info",
7579 "Maintain relationships between transactions and contexts and display an extra tree showing context data",
7580 &keep_persistent_data
);
7581 prefs_register_bool_preference(h248_module
, "desegment",
7582 "Desegment H.248 over TCP",
7583 "Desegment H.248 messages that span more TCP segments",
7586 gcp_msgs
= wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
7587 gcp_trxs
= wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
7588 gcp_ctxs_by_trx
= wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
7589 gcp_ctxs
= wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
7591 h248_tap
= register_tap("h248");
7594 /*--- proto_reg_handoff_h248 -------------------------------------------*/
7595 void proto_reg_handoff_h248(void) {
7597 dissector_add_uint("mtp3.service_indicator", MTP_SI_GCP
, h248_handle
);
7598 h248_term_handle
= find_dissector_add_dependency("h248term", proto_h248
);
7599 dissector_add_uint_with_preference("tcp.port", H248_PORT
, h248_tpkt_handle
);
7600 dissector_add_uint_with_preference("udp.port", H248_PORT
, h248_handle
);
7602 ss7pc_address_type
= address_type_get_by_name("AT_SS7PC");
7603 exported_pdu_tap
= find_tap_id(EXPORT_PDU_TAP_NAME_LAYER_7
);