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