Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-camel.c
blob7dd9be130473999365fe800397cbc6d688f8c924
1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
3 /* packet-camel.c */
4 /* asn2wrs.py -b -q -L -p camel -c ./camel.cnf -s ./packet-camel-template -D . -O ../.. CAP-object-identifiers.asn CAP-classes.asn CAP-datatypes.asn CAP-errorcodes.asn CAP-errortypes.asn CAP-operationcodes.asn CAP-GPRS-ReferenceNumber.asn CAP-gsmSCF-gsmSRF-ops-args.asn CAP-gsmSSF-gsmSCF-ops-args.asn CAP-gprsSSF-gsmSCF-ops-args.asn CAP-SMS-ops-args.asn CAP-U-ABORT-Data.asn CamelV2diff.asn ../ros/Remote-Operations-Information-Objects.asn ../ros/Remote-Operations-Generic-ROS-PDUs.asn */
6 /* packet-camel-template.c
7 * Routines for Camel
8 * Copyright 2004, Tim Endean <endeant@hotmail.com>
9 * Copyright 2005, Olivier Jacques <olivier.jacques@hp.com>
10 * Copyright 2005, Javier Acuna <javier.acuna@sixbell.com>
11 * Updated to ETSI TS 129 078 V6.4.0 (2004-3GPP TS 29.078 version 6.4.0 Release 6 1 12)
12 * Copyright 2005-2010, Anders Broman <anders.broman@ericsson.com>
13 * Updated to 3GPP TS 29.078 version 7.3.0 Release 7 (2006-06)
14 * Built from the gsm-map dissector Copyright 2004, Anders Broman <anders.broman@ericsson.com>
16 * Wireshark - Network traffic analyzer
17 * By Gerald Combs <gerald@wireshark.org>
18 * Copyright 1998 Gerald Combs
20 * SPDX-License-Identifier: GPL-2.0-or-later
21 * References: ETSI 300 374
24 * Indentation logic: this file is indented with 2 spaces indentation.
25 * there are no tabs.
27 #include "config.h"
29 #include <stdlib.h>
31 #include <epan/packet.h>
32 #include <epan/prefs.h>
33 #include <epan/oids.h>
34 #include <epan/tap.h>
35 #include <epan/srt_table.h>
36 #include <epan/stat_tap_ui.h>
37 #include <epan/asn1.h>
38 #include <epan/expert.h>
39 #include <epan/tfs.h>
40 #include <wsutil/strtoi.h>
41 #include <wsutil/array.h>
43 #include "packet-ber.h"
44 #include "packet-camel.h"
45 #include "packet-q931.h"
46 #include "packet-e164.h"
47 #include "packet-isup.h"
48 #include "packet-gsm_map.h"
49 #include "packet-gsm_a_common.h"
50 #include "packet-inap.h"
51 #include "packet-tcap.h"
53 #define PNAME "Camel"
54 #define PSNAME "CAMEL"
55 #define PFNAME "camel"
57 /* Initialize the protocol and registered fields */
58 static int proto_camel;
59 static int date_format = 1; /*assume european date format */
60 static int camel_tap;
61 /* Global variables */
62 static uint32_t opcode=0;
63 static uint32_t errorCode=0;
64 static uint32_t camel_ver;
66 /* When several Camel components are received in a single TCAP message,
67 we have to use several buffers for the stored parameters
68 because else this data are erased during TAP dissector call */
69 #define MAX_CAMEL_INSTANCE 10
70 static int camelsrt_global_current=0;
71 static struct camelsrt_info_t camelsrt_global_info[MAX_CAMEL_INSTANCE];
73 /* ROSE context */
74 static rose_ctx_t camel_rose_ctx;
76 static int hf_digit;
77 static int hf_camel_extension_code_local;
78 static int hf_camel_error_code_local;
79 static int hf_camel_cause_indicator;
80 static int hf_camel_PDPTypeNumber_etsi;
81 static int hf_camel_PDPTypeNumber_ietf;
82 static int hf_camel_PDPAddress_IPv4;
83 static int hf_camel_PDPAddress_IPv6;
84 static int hf_camel_cellGlobalIdOrServiceAreaIdFixedLength;
85 static int hf_camel_RP_Cause;
86 static int hf_camel_CAMEL_AChBillingChargingCharacteristics;
87 static int hf_camel_CAMEL_FCIBillingChargingCharacteristics;
88 static int hf_camel_CAMEL_FCIGPRSBillingChargingCharacteristics;
89 static int hf_camel_CAMEL_FCISMSBillingChargingCharacteristics;
90 static int hf_camel_CAMEL_SCIBillingChargingCharacteristics;
91 static int hf_camel_CAMEL_SCIGPRSBillingChargingCharacteristics;
92 static int hf_camel_CAMEL_CallResult;
94 /* Used by persistent data */
95 static int hf_camelsrt_SessionId;
96 //static int hf_camelsrt_RequestNumber;
97 static int hf_camelsrt_Duplicate;
98 static int hf_camelsrt_RequestFrame;
99 static int hf_camelsrt_ResponseFrame;
100 //static int hf_camelsrt_DeltaTime;
101 //static int hf_camelsrt_SessionTime;
102 static int hf_camelsrt_DeltaTime31;
103 static int hf_camelsrt_DeltaTime75;
104 static int hf_camelsrt_DeltaTime65;
105 static int hf_camelsrt_DeltaTime22;
106 static int hf_camelsrt_DeltaTime35;
107 static int hf_camelsrt_DeltaTime80;
108 static int hf_camel_timeandtimezone_time;
109 static int hf_camel_timeandtimezone_tz;
111 static int hf_camel_PAR_cancelFailed_PDU; /* PAR_cancelFailed */
112 static int hf_camel_PAR_requestedInfoError_PDU; /* PAR_requestedInfoError */
113 static int hf_camel_UnavailableNetworkResource_PDU; /* UnavailableNetworkResource */
114 static int hf_camel_PAR_taskRefused_PDU; /* PAR_taskRefused */
115 static int hf_camel_CAP_GPRS_ReferenceNumber_PDU; /* CAP_GPRS_ReferenceNumber */
116 static int hf_camel_PlayAnnouncementArg_PDU; /* PlayAnnouncementArg */
117 static int hf_camel_PromptAndCollectUserInformationArg_PDU; /* PromptAndCollectUserInformationArg */
118 static int hf_camel_ReceivedInformationArg_PDU; /* ReceivedInformationArg */
119 static int hf_camel_SpecializedResourceReportArg_PDU; /* SpecializedResourceReportArg */
120 static int hf_camel_ApplyChargingArg_PDU; /* ApplyChargingArg */
121 static int hf_camel_ApplyChargingReportArg_PDU; /* ApplyChargingReportArg */
122 static int hf_camel_AssistRequestInstructionsArg_PDU; /* AssistRequestInstructionsArg */
123 static int hf_camel_CallGapArg_PDU; /* CallGapArg */
124 static int hf_camel_CallInformationReportArg_PDU; /* CallInformationReportArg */
125 static int hf_camel_CallInformationRequestArg_PDU; /* CallInformationRequestArg */
126 static int hf_camel_CancelArg_PDU; /* CancelArg */
127 static int hf_camel_CollectInformationArg_PDU; /* CollectInformationArg */
128 static int hf_camel_ConnectArg_PDU; /* ConnectArg */
129 static int hf_camel_ConnectToResourceArg_PDU; /* ConnectToResourceArg */
130 static int hf_camel_ContinueWithArgumentArg_PDU; /* ContinueWithArgumentArg */
131 static int hf_camel_DisconnectForwardConnectionWithArgumentArg_PDU; /* DisconnectForwardConnectionWithArgumentArg */
132 static int hf_camel_DisconnectLegArg_PDU; /* DisconnectLegArg */
133 static int hf_camel_EntityReleasedArg_PDU; /* EntityReleasedArg */
134 static int hf_camel_EstablishTemporaryConnectionArg_PDU; /* EstablishTemporaryConnectionArg */
135 static int hf_camel_EventReportBCSMArg_PDU; /* EventReportBCSMArg */
136 static int hf_camel_FurnishChargingInformationArg_PDU; /* FurnishChargingInformationArg */
137 static int hf_camel_InitialDPArg_PDU; /* InitialDPArg */
138 static int hf_camel_InitiateCallAttemptArg_PDU; /* InitiateCallAttemptArg */
139 static int hf_camel_InitiateCallAttemptRes_PDU; /* InitiateCallAttemptRes */
140 static int hf_camel_MoveLegArg_PDU; /* MoveLegArg */
141 static int hf_camel_PlayToneArg_PDU; /* PlayToneArg */
142 static int hf_camel_ReleaseCallArg_PDU; /* ReleaseCallArg */
143 static int hf_camel_RequestReportBCSMEventArg_PDU; /* RequestReportBCSMEventArg */
144 static int hf_camel_ResetTimerArg_PDU; /* ResetTimerArg */
145 static int hf_camel_SendChargingInformationArg_PDU; /* SendChargingInformationArg */
146 static int hf_camel_SplitLegArg_PDU; /* SplitLegArg */
147 static int hf_camel_ApplyChargingGPRSArg_PDU; /* ApplyChargingGPRSArg */
148 static int hf_camel_ApplyChargingReportGPRSArg_PDU; /* ApplyChargingReportGPRSArg */
149 static int hf_camel_CancelGPRSArg_PDU; /* CancelGPRSArg */
150 static int hf_camel_ConnectGPRSArg_PDU; /* ConnectGPRSArg */
151 static int hf_camel_ContinueGPRSArg_PDU; /* ContinueGPRSArg */
152 static int hf_camel_EntityReleasedGPRSArg_PDU; /* EntityReleasedGPRSArg */
153 static int hf_camel_EventReportGPRSArg_PDU; /* EventReportGPRSArg */
154 static int hf_camel_FurnishChargingInformationGPRSArg_PDU; /* FurnishChargingInformationGPRSArg */
155 static int hf_camel_InitialDPGPRSArg_PDU; /* InitialDPGPRSArg */
156 static int hf_camel_ReleaseGPRSArg_PDU; /* ReleaseGPRSArg */
157 static int hf_camel_RequestReportGPRSEventArg_PDU; /* RequestReportGPRSEventArg */
158 static int hf_camel_ResetTimerGPRSArg_PDU; /* ResetTimerGPRSArg */
159 static int hf_camel_SendChargingInformationGPRSArg_PDU; /* SendChargingInformationGPRSArg */
160 static int hf_camel_ConnectSMSArg_PDU; /* ConnectSMSArg */
161 static int hf_camel_EventReportSMSArg_PDU; /* EventReportSMSArg */
162 static int hf_camel_FurnishChargingInformationSMSArg_PDU; /* FurnishChargingInformationSMSArg */
163 static int hf_camel_InitialDPSMSArg_PDU; /* InitialDPSMSArg */
164 static int hf_camel_ReleaseSMSArg_PDU; /* ReleaseSMSArg */
165 static int hf_camel_RequestReportSMSEventArg_PDU; /* RequestReportSMSEventArg */
166 static int hf_camel_ResetTimerSMSArg_PDU; /* ResetTimerSMSArg */
167 static int hf_camel_CAP_U_ABORT_REASON_PDU; /* CAP_U_ABORT_REASON */
168 static int hf_camel_legID; /* LegID */
169 static int hf_camel_srfConnection; /* CallSegmentID */
170 static int hf_camel_aOCInitial; /* CAI_GSM0224 */
171 static int hf_camel_aOCSubsequent; /* AOCSubsequent */
172 static int hf_camel_cAI_GSM0224; /* CAI_GSM0224 */
173 static int hf_camel_aocSubsequent_tariffSwitchInterval; /* INTEGER_1_86400 */
174 static int hf_camel_audibleIndicatorTone; /* BOOLEAN */
175 static int hf_camel_burstList; /* BurstList */
176 static int hf_camel_conferenceTreatmentIndicator; /* OCTET_STRING_SIZE_1 */
177 static int hf_camel_callCompletionTreatmentIndicator; /* OCTET_STRING_SIZE_1 */
178 static int hf_camel_calledAddressValue; /* Digits */
179 static int hf_camel_gapOnService; /* GapOnService */
180 static int hf_camel_calledAddressAndService; /* T_calledAddressAndService */
181 static int hf_camel_serviceKey; /* ServiceKey */
182 static int hf_camel_callingAddressAndService; /* T_callingAddressAndService */
183 static int hf_camel_callingAddressValue; /* Digits */
184 static int hf_camel_eventTypeBCSM; /* EventTypeBCSM */
185 static int hf_camel_monitorMode; /* MonitorMode */
186 static int hf_camel_dpSpecificCriteria; /* DpSpecificCriteria */
187 static int hf_camel_automaticRearm; /* NULL */
188 static int hf_camel_cause; /* Cause */
189 static int hf_camel_bearerCap; /* T_bearerCap */
190 static int hf_camel_numberOfBursts; /* INTEGER_1_3 */
191 static int hf_camel_burstInterval; /* INTEGER_1_1200 */
192 static int hf_camel_numberOfTonesInBurst; /* INTEGER_1_3 */
193 static int hf_camel_burstToneDuration; /* INTEGER_1_20 */
194 static int hf_camel_toneInterval; /* INTEGER_1_20 */
195 static int hf_camel_warningPeriod; /* INTEGER_1_1200 */
196 static int hf_camel_bursts; /* Burst */
197 static int hf_camel_e1; /* INTEGER_0_8191 */
198 static int hf_camel_e2; /* INTEGER_0_8191 */
199 static int hf_camel_e3; /* INTEGER_0_8191 */
200 static int hf_camel_e4; /* INTEGER_0_8191 */
201 static int hf_camel_e5; /* INTEGER_0_8191 */
202 static int hf_camel_e6; /* INTEGER_0_8191 */
203 static int hf_camel_e7; /* INTEGER_0_8191 */
204 static int hf_camel_callSegmentID; /* CallSegmentID */
205 static int hf_camel_invokeID; /* InvokeID */
206 static int hf_camel_timeDurationCharging; /* T_timeDurationCharging */
207 static int hf_camel_maxCallPeriodDuration; /* INTEGER_1_864000 */
208 static int hf_camel_releaseIfdurationExceeded; /* BOOLEAN */
209 static int hf_camel_timeDurationCharging_tariffSwitchInterval; /* INTEGER_1_86400 */
210 static int hf_camel_audibleIndicator; /* T_audibleIndicator */
211 static int hf_camel_extensions; /* Extensions */
212 static int hf_camel_timeDurationChargingResult; /* T_timeDurationChargingResult */
213 static int hf_camel_timeDurationChargingResultpartyToCharge; /* ReceivingSideID */
214 static int hf_camel_timeInformation; /* TimeInformation */
215 static int hf_camel_legActive; /* BOOLEAN */
216 static int hf_camel_callLegReleasedAtTcpExpiry; /* NULL */
217 static int hf_camel_aChChargingAddress; /* AChChargingAddress */
218 static int hf_camel_fci_fCIBCCCAMELsequence1; /* T_fci_fCIBCCCAMELsequence1 */
219 static int hf_camel_freeFormatData; /* OCTET_STRING_SIZE_bound__minFCIBillingChargingDataLength_bound__maxFCIBillingChargingDataLength */
220 static int hf_camel_fCIBCCCAMELsequence1partyToCharge; /* SendingSideID */
221 static int hf_camel_appendFreeFormatData; /* AppendFreeFormatData */
222 static int hf_camel_fciGPRS_fCIBCCCAMELsequence1; /* T_fciGPRS_fCIBCCCAMELsequence1 */
223 static int hf_camel_pDPID; /* PDPID */
224 static int hf_camel_fciSMS_fCIBCCCAMELsequence1; /* T_fciSMS_fCIBCCCAMELsequence1 */
225 static int hf_camel_aOCBeforeAnswer; /* AOCBeforeAnswer */
226 static int hf_camel_aOCAfterAnswer; /* AOCSubsequent */
227 static int hf_camel_aOC_extension; /* CAMEL_SCIBillingChargingCharacteristicsAlt */
228 static int hf_camel_aOCGPRS; /* AOCGPRS */
229 static int hf_camel_ChangeOfPositionControlInfo_item; /* ChangeOfLocation */
230 static int hf_camel_cellGlobalId; /* CellGlobalIdOrServiceAreaIdFixedLength */
231 static int hf_camel_serviceAreaId; /* CellGlobalIdOrServiceAreaIdFixedLength */
232 static int hf_camel_locationAreaId; /* LAIFixedLength */
233 static int hf_camel_inter_SystemHandOver; /* NULL */
234 static int hf_camel_inter_PLMNHandOver; /* NULL */
235 static int hf_camel_inter_MSCHandOver; /* NULL */
236 static int hf_camel_changeOfLocationAlt; /* ChangeOfLocationAlt */
237 static int hf_camel_maxTransferredVolume; /* INTEGER_1_4294967295 */
238 static int hf_camel_maxElapsedTime; /* INTEGER_1_86400 */
239 static int hf_camel_transferredVolume; /* TransferredVolume */
240 static int hf_camel_elapsedTime; /* ElapsedTime */
241 static int hf_camel_transferredVolumeRollOver; /* TransferredVolumeRollOver */
242 static int hf_camel_elapsedTimeRollOver; /* ElapsedTimeRollOver */
243 static int hf_camel_minimumNbOfDigits; /* INTEGER_1_30 */
244 static int hf_camel_maximumNbOfDigits; /* INTEGER_1_30 */
245 static int hf_camel_endOfReplyDigit; /* OCTET_STRING_SIZE_1_2 */
246 static int hf_camel_cancelDigit; /* OCTET_STRING_SIZE_1_2 */
247 static int hf_camel_startDigit; /* OCTET_STRING_SIZE_1_2 */
248 static int hf_camel_firstDigitTimeOut; /* INTEGER_1_127 */
249 static int hf_camel_interDigitTimeOut; /* INTEGER_1_127 */
250 static int hf_camel_errorTreatment; /* ErrorTreatment */
251 static int hf_camel_interruptableAnnInd; /* BOOLEAN */
252 static int hf_camel_voiceInformation; /* BOOLEAN */
253 static int hf_camel_voiceBack; /* BOOLEAN */
254 static int hf_camel_collectedDigits; /* CollectedDigits */
255 static int hf_camel_basicGapCriteria; /* BasicGapCriteria */
256 static int hf_camel_scfID; /* ScfID */
257 static int hf_camel_DestinationRoutingAddress_item; /* CalledPartyNumber */
258 static int hf_camel_applicationTimer; /* ApplicationTimer */
259 static int hf_camel_midCallControlInfo; /* MidCallControlInfo */
260 static int hf_camel_dpSpecificCriteriaAlt; /* DpSpecificCriteriaAlt */
261 static int hf_camel_changeOfPositionControlInfo; /* ChangeOfPositionControlInfo */
262 static int hf_camel_numberOfDigits; /* NumberOfDigits */
263 static int hf_camel_interDigitTimeout; /* INTEGER_1_127 */
264 static int hf_camel_oServiceChangeSpecificInfo; /* T_oServiceChangeSpecificInfo */
265 static int hf_camel_ext_basicServiceCode; /* Ext_BasicServiceCode */
266 static int hf_camel_initiatorOfServiceChange; /* InitiatorOfServiceChange */
267 static int hf_camel_natureOfServiceChange; /* NatureOfServiceChange */
268 static int hf_camel_tServiceChangeSpecificInfo; /* T_tServiceChangeSpecificInfo */
269 static int hf_camel_collectedInfoSpecificInfo; /* T_collectedInfoSpecificInfo */
270 static int hf_camel_calledPartyNumber; /* CalledPartyNumber */
271 static int hf_camel_timeGPRSIfNoTariffSwitch; /* INTEGER_0_86400 */
272 static int hf_camel_timeGPRSIfTariffSwitch; /* T_timeGPRSIfTariffSwitch */
273 static int hf_camel_timeGPRSSinceLastTariffSwitch; /* INTEGER_0_86400 */
274 static int hf_camel_timeGPRSTariffSwitchInterval; /* INTEGER_0_86400 */
275 static int hf_camel_rO_TimeGPRSIfNoTariffSwitch; /* INTEGER_0_255 */
276 static int hf_camel_rO_TimeGPRSIfTariffSwitch; /* T_rO_TimeGPRSIfTariffSwitch */
277 static int hf_camel_rO_TimeGPRSSinceLastTariffSwitch; /* INTEGER_0_255 */
278 static int hf_camel_rO_TimeGPRSTariffSwitchInterval; /* INTEGER_0_255 */
279 static int hf_camel_pDPTypeOrganization; /* T_pDPTypeOrganization */
280 static int hf_camel_pDPTypeNumber; /* T_pDPTypeNumber */
281 static int hf_camel_pDPAddress; /* T_pDPAddress */
282 static int hf_camel_routeSelectFailureSpecificInfo; /* T_routeSelectFailureSpecificInfo */
283 static int hf_camel_routeSelectfailureCause; /* Cause */
284 static int hf_camel_oCalledPartyBusySpecificInfo; /* T_oCalledPartyBusySpecificInfo */
285 static int hf_camel_busyCause; /* Cause */
286 static int hf_camel_oNoAnswerSpecificInfo; /* T_oNoAnswerSpecificInfo */
287 static int hf_camel_oAnswerSpecificInfo; /* T_oAnswerSpecificInfo */
288 static int hf_camel_destinationAddress; /* CalledPartyNumber */
289 static int hf_camel_or_Call; /* NULL */
290 static int hf_camel_forwardedCall; /* NULL */
291 static int hf_camel_chargeIndicator; /* ChargeIndicator */
292 static int hf_camel_ext_basicServiceCode2; /* Ext_BasicServiceCode */
293 static int hf_camel_oMidCallSpecificInfo; /* T_oMidCallSpecificInfo */
294 static int hf_camel_omidCallEvents; /* T_omidCallEvents */
295 static int hf_camel_dTMFDigitsCompleted; /* Digits */
296 static int hf_camel_dTMFDigitsTimeOut; /* Digits */
297 static int hf_camel_oDisconnectSpecificInfo; /* T_oDisconnectSpecificInfo */
298 static int hf_camel_releaseCause; /* Cause */
299 static int hf_camel_tBusySpecificInfo; /* T_tBusySpecificInfo */
300 static int hf_camel_callForwarded; /* NULL */
301 static int hf_camel_routeNotPermitted; /* NULL */
302 static int hf_camel_forwardingDestinationNumber; /* CalledPartyNumber */
303 static int hf_camel_tNoAnswerSpecificInfo; /* T_tNoAnswerSpecificInfo */
304 static int hf_camel_tAnswerSpecificInfo; /* T_tAnswerSpecificInfo */
305 static int hf_camel_tMidCallSpecificInfo; /* T_tMidCallSpecificInfo */
306 static int hf_camel_tmidCallEvents; /* T_tmidCallEvents */
307 static int hf_camel_tDisconnectSpecificInfo; /* T_tDisconnectSpecificInfo */
308 static int hf_camel_oTermSeizedSpecificInfo; /* T_oTermSeizedSpecificInfo */
309 static int hf_camel_locationInformation; /* LocationInformation */
310 static int hf_camel_callAcceptedSpecificInfo; /* T_callAcceptedSpecificInfo */
311 static int hf_camel_oAbandonSpecificInfo; /* T_oAbandonSpecificInfo */
312 static int hf_camel_oChangeOfPositionSpecificInfo; /* T_oChangeOfPositionSpecificInfo */
313 static int hf_camel_metDPCriteriaList; /* MetDPCriteriaList */
314 static int hf_camel_tChangeOfPositionSpecificInfo; /* T_tChangeOfPositionSpecificInfo */
315 static int hf_camel_dpSpecificInfoAlt; /* DpSpecificInfoAlt */
316 static int hf_camel_o_smsFailureSpecificInfo; /* T_o_smsFailureSpecificInfo */
317 static int hf_camel_mo_smsfailureCause; /* MO_SMSCause */
318 static int hf_camel_o_smsSubmissionSpecificInfo; /* T_o_smsSubmissionSpecificInfo */
319 static int hf_camel_t_smsFailureSpecificInfo; /* T_t_smsFailureSpecificInfo */
320 static int hf_camel_t_smsfailureCause; /* MT_SMSCause */
321 static int hf_camel_t_smsDeliverySpecificInfo; /* T_t_smsDeliverySpecificInfo */
322 static int hf_camel_Extensions_item; /* ExtensionField */
323 static int hf_camel_type; /* Code */
324 static int hf_camel_criticality; /* CriticalityType */
325 static int hf_camel_value; /* T_value */
326 static int hf_camel_callDiversionTreatmentIndicator; /* OCTET_STRING_SIZE_1 */
327 static int hf_camel_callingPartyRestrictionIndicator; /* OCTET_STRING_SIZE_1 */
328 static int hf_camel_compoundGapCriteria; /* CompoundCriteria */
329 static int hf_camel_gapIndicatorsDuration; /* Duration */
330 static int hf_camel_gapInterval; /* Interval */
331 static int hf_camel_informationToSend; /* InformationToSend */
332 static int hf_camel_GenericNumbers_item; /* GenericNumber */
333 static int hf_camel_short_QoS_format; /* QoS_Subscribed */
334 static int hf_camel_long_QoS_format; /* Ext_QoS_Subscribed */
335 static int hf_camel_supplement_to_long_QoS_format; /* Ext2_QoS_Subscribed */
336 static int hf_camel_additionalSupplement; /* Ext3_QoS_Subscribed */
337 static int hf_camel_gPRSEventType; /* GPRSEventType */
338 static int hf_camel_attachChangeOfPositionSpecificInformation; /* T_attachChangeOfPositionSpecificInformation */
339 static int hf_camel_locationInformationGPRS; /* LocationInformationGPRS */
340 static int hf_camel_pdp_ContextchangeOfPositionSpecificInformation; /* T_pdp_ContextchangeOfPositionSpecificInformation */
341 static int hf_camel_accessPointName; /* AccessPointName */
342 static int hf_camel_chargingID; /* GPRSChargingID */
343 static int hf_camel_endUserAddress; /* EndUserAddress */
344 static int hf_camel_qualityOfService; /* QualityOfService */
345 static int hf_camel_timeAndTimeZone; /* TimeAndTimezone */
346 static int hf_camel_gGSNAddress; /* GSN_Address */
347 static int hf_camel_detachSpecificInformation; /* T_detachSpecificInformation */
348 static int hf_camel_initiatingEntity; /* InitiatingEntity */
349 static int hf_camel_routeingAreaUpdate; /* NULL */
350 static int hf_camel_disconnectSpecificInformation; /* T_disconnectSpecificInformation */
351 static int hf_camel_pDPContextEstablishmentSpecificInformation; /* T_pDPContextEstablishmentSpecificInformation */
352 static int hf_camel_pDPInitiationType; /* PDPInitiationType */
353 static int hf_camel_secondaryPDP_context; /* NULL */
354 static int hf_camel_pDPContextEstablishmentAcknowledgementSpecificInformation; /* T_pDPContextEstablishmentAcknowledgementSpecificInformation */
355 static int hf_camel_messageID; /* MessageID */
356 static int hf_camel_numberOfRepetitions; /* INTEGER_1_127 */
357 static int hf_camel_inbandInfoDuration; /* INTEGER_0_32767 */
358 static int hf_camel_interval; /* INTEGER_0_32767 */
359 static int hf_camel_inbandInfo; /* InbandInfo */
360 static int hf_camel_tone; /* Tone */
361 static int hf_camel_cellGlobalIdOrServiceAreaIdOrLAI; /* T_cellGlobalIdOrServiceAreaIdOrLAI */
362 static int hf_camel_routeingAreaIdentity; /* RAIdentity */
363 static int hf_camel_geographicalInformation; /* GeographicalInformation */
364 static int hf_camel_sgsn_Number; /* ISDN_AddressString */
365 static int hf_camel_selectedLSAIdentity; /* LSAIdentity */
366 static int hf_camel_extensionContainer; /* ExtensionContainer */
367 static int hf_camel_sai_Present; /* NULL */
368 static int hf_camel_userCSGInformation; /* UserCSGInformation */
369 static int hf_camel_elementaryMessageID; /* Integer4 */
370 static int hf_camel_text; /* T_text */
371 static int hf_camel_messageContent; /* IA5String_SIZE_bound__minMessageContentLength_bound__maxMessageContentLength */
372 static int hf_camel_attributes; /* OCTET_STRING_SIZE_bound__minAttributesLength_bound__maxAttributesLength */
373 static int hf_camel_elementaryMessageIDs; /* SEQUENCE_SIZE_1_bound__numOfMessageIDs_OF_Integer4 */
374 static int hf_camel_elementaryMessageIDs_item; /* Integer4 */
375 static int hf_camel_variableMessage; /* T_variableMessage */
376 static int hf_camel_variableParts; /* SEQUENCE_SIZE_1_5_OF_VariablePart */
377 static int hf_camel_variableParts_item; /* VariablePart */
378 static int hf_camel_MetDPCriteriaList_item; /* MetDPCriterion */
379 static int hf_camel_enteringCellGlobalId; /* CellGlobalIdOrServiceAreaIdFixedLength */
380 static int hf_camel_leavingCellGlobalId; /* CellGlobalIdOrServiceAreaIdFixedLength */
381 static int hf_camel_enteringServiceAreaId; /* CellGlobalIdOrServiceAreaIdFixedLength */
382 static int hf_camel_leavingServiceAreaId; /* CellGlobalIdOrServiceAreaIdFixedLength */
383 static int hf_camel_enteringLocationAreaId; /* LAIFixedLength */
384 static int hf_camel_leavingLocationAreaId; /* LAIFixedLength */
385 static int hf_camel_inter_SystemHandOverToUMTS; /* NULL */
386 static int hf_camel_inter_SystemHandOverToGSM; /* NULL */
387 static int hf_camel_metDPCriterionAlt; /* MetDPCriterionAlt */
388 static int hf_camel_minimumNumberOfDigits; /* INTEGER_1_30 */
389 static int hf_camel_maximumNumberOfDigits; /* INTEGER_1_30 */
390 static int hf_camel_requested_QoS; /* GPRS_QoS */
391 static int hf_camel_subscribed_QoS; /* GPRS_QoS */
392 static int hf_camel_negotiated_QoS; /* GPRS_QoS */
393 static int hf_camel_requested_QoS_Extension; /* GPRS_QoS_Extension */
394 static int hf_camel_subscribed_QoS_Extension; /* GPRS_QoS_Extension */
395 static int hf_camel_negotiated_QoS_Extension; /* GPRS_QoS_Extension */
396 static int hf_camel_receivingSideID; /* LegType */
397 static int hf_camel_RequestedInformationList_item; /* RequestedInformation */
398 static int hf_camel_RequestedInformationTypeList_item; /* RequestedInformationType */
399 static int hf_camel_requestedInformationType; /* RequestedInformationType */
400 static int hf_camel_requestedInformationValue; /* RequestedInformationValue */
401 static int hf_camel_callAttemptElapsedTimeValue; /* INTEGER_0_255 */
402 static int hf_camel_callStopTimeValue; /* DateAndTime */
403 static int hf_camel_callConnectedElapsedTimeValue; /* Integer4 */
404 static int hf_camel_releaseCauseValue; /* Cause */
405 static int hf_camel_sendingSideID; /* LegType */
406 static int hf_camel_forwardServiceInteractionInd; /* ForwardServiceInteractionInd */
407 static int hf_camel_backwardServiceInteractionInd; /* BackwardServiceInteractionInd */
408 static int hf_camel_bothwayThroughConnectionInd; /* BothwayThroughConnectionInd */
409 static int hf_camel_connectedNumberTreatmentInd; /* ConnectedNumberTreatmentInd */
410 static int hf_camel_nonCUGCall; /* NULL */
411 static int hf_camel_holdTreatmentIndicator; /* OCTET_STRING_SIZE_1 */
412 static int hf_camel_cwTreatmentIndicator; /* OCTET_STRING_SIZE_1 */
413 static int hf_camel_ectTreatmentIndicator; /* OCTET_STRING_SIZE_1 */
414 static int hf_camel_eventTypeSMS; /* EventTypeSMS */
415 static int hf_camel_timeSinceTariffSwitch; /* INTEGER_0_864000 */
416 static int hf_camel_timeIfTariffSwitch_tariffSwitchInterval; /* INTEGER_1_864000 */
417 static int hf_camel_timeIfNoTariffSwitch; /* TimeIfNoTariffSwitch */
418 static int hf_camel_timeIfTariffSwitch; /* TimeIfTariffSwitch */
419 static int hf_camel_toneID; /* Integer4 */
420 static int hf_camel_toneDuration; /* Integer4 */
421 static int hf_camel_volumeIfNoTariffSwitch; /* INTEGER_0_4294967295 */
422 static int hf_camel_volumeIfTariffSwitch; /* T_volumeIfTariffSwitch */
423 static int hf_camel_volumeSinceLastTariffSwitch; /* INTEGER_0_4294967295 */
424 static int hf_camel_volumeTariffSwitchInterval; /* INTEGER_0_4294967295 */
425 static int hf_camel_rO_VolumeIfNoTariffSwitch; /* INTEGER_0_255 */
426 static int hf_camel_rO_VolumeIfTariffSwitch; /* T_rO_VolumeIfTariffSwitch */
427 static int hf_camel_rO_VolumeSinceLastTariffSwitch; /* INTEGER_0_255 */
428 static int hf_camel_rO_VolumeTariffSwitchInterval; /* INTEGER_0_255 */
429 static int hf_camel_integer; /* Integer4 */
430 static int hf_camel_number; /* Digits */
431 static int hf_camel_time; /* OCTET_STRING_SIZE_2 */
432 static int hf_camel_date; /* OCTET_STRING_SIZE_4 */
433 static int hf_camel_price; /* OCTET_STRING_SIZE_4 */
434 static int hf_camel_par_cancelFailedProblem; /* T_par_cancelFailedProblem */
435 static int hf_camel_operation; /* InvokeID */
436 static int hf_camel_destinationReference; /* Integer4 */
437 static int hf_camel_originationReference; /* Integer4 */
438 static int hf_camel_disconnectFromIPForbidden; /* BOOLEAN */
439 static int hf_camel_requestAnnouncementCompleteNotification; /* BOOLEAN */
440 static int hf_camel_requestAnnouncementStartedNotification; /* BOOLEAN */
441 static int hf_camel_collectedInfo; /* CollectedInfo */
442 static int hf_camel_digitsResponse; /* Digits */
443 static int hf_camel_allAnnouncementsComplete; /* NULL */
444 static int hf_camel_firstAnnouncementStarted; /* NULL */
445 static int hf_camel_aChBillingChargingCharacteristics; /* AChBillingChargingCharacteristics */
446 static int hf_camel_partyToCharge; /* SendingSideID */
447 static int hf_camel_iTXcharging; /* BOOLEAN */
448 static int hf_camel_correlationID; /* CorrelationID */
449 static int hf_camel_iPSSPCapabilities; /* IPSSPCapabilities */
450 static int hf_camel_gapCriteria; /* GapCriteria */
451 static int hf_camel_gapIndicators; /* GapIndicators */
452 static int hf_camel_controlType; /* ControlType */
453 static int hf_camel_gapTreatment; /* GapTreatment */
454 static int hf_camel_requestedInformationList; /* RequestedInformationList */
455 static int hf_camel_legID_01; /* ReceivingSideID */
456 static int hf_camel_requestedInformationTypeList; /* RequestedInformationTypeList */
457 static int hf_camel_legID_02; /* SendingSideID */
458 static int hf_camel_allRequests; /* NULL */
459 static int hf_camel_callSegmentToCancel; /* CallSegmentToCancel */
460 static int hf_camel_destinationRoutingAddress; /* DestinationRoutingAddress */
461 static int hf_camel_alertingPattern; /* AlertingPattern */
462 static int hf_camel_originalCalledPartyID; /* OriginalCalledPartyID */
463 static int hf_camel_carrier; /* Carrier */
464 static int hf_camel_callingPartysCategory; /* CallingPartysCategory */
465 static int hf_camel_redirectingPartyID; /* RedirectingPartyID */
466 static int hf_camel_redirectionInformation; /* RedirectionInformation */
467 static int hf_camel_genericNumbers; /* GenericNumbers */
468 static int hf_camel_serviceInteractionIndicatorsTwo; /* ServiceInteractionIndicatorsTwo */
469 static int hf_camel_chargeNumber; /* ChargeNumber */
470 static int hf_camel_legToBeConnected; /* LegID */
471 static int hf_camel_cug_Interlock; /* CUG_Interlock */
472 static int hf_camel_cug_OutgoingAccess; /* NULL */
473 static int hf_camel_suppressionOfAnnouncement; /* SuppressionOfAnnouncement */
474 static int hf_camel_oCSIApplicable; /* OCSIApplicable */
475 static int hf_camel_naOliInfo; /* NAOliInfo */
476 static int hf_camel_bor_InterrogationRequested; /* NULL */
477 static int hf_camel_suppress_N_CSI; /* NULL */
478 static int hf_camel_resourceAddress; /* T_resourceAddress */
479 static int hf_camel_ipRoutingAddress; /* IPRoutingAddress */
480 static int hf_camel_none; /* NULL */
481 static int hf_camel_suppress_O_CSI; /* NULL */
482 static int hf_camel_continueWithArgumentArgExtension; /* ContinueWithArgumentArgExtension */
483 static int hf_camel_suppress_D_CSI; /* NULL */
484 static int hf_camel_suppressOutgoingCallBarring; /* NULL */
485 static int hf_camel_legOrCallSegment; /* LegOrCallSegment */
486 static int hf_camel_legToBeReleased; /* LegID */
487 static int hf_camel_callSegmentFailure; /* CallSegmentFailure */
488 static int hf_camel_bCSM_Failure; /* BCSM_Failure */
489 static int hf_camel_assistingSSPIPRoutingAddress; /* AssistingSSPIPRoutingAddress */
490 static int hf_camel_callingPartyNumber; /* CallingPartyNumber */
491 static int hf_camel_eventSpecificInformationBCSM; /* EventSpecificInformationBCSM */
492 static int hf_camel_miscCallInfo; /* MiscCallInfo */
493 static int hf_camel_cGEncountered; /* CGEncountered */
494 static int hf_camel_locationNumber; /* LocationNumber */
495 static int hf_camel_highLayerCompatibility; /* HighLayerCompatibility */
496 static int hf_camel_additionalCallingPartyNumber; /* AdditionalCallingPartyNumber */
497 static int hf_camel_bearerCapability; /* BearerCapability */
498 static int hf_camel_cug_Index; /* CUG_Index */
499 static int hf_camel_iMSI; /* IMSI */
500 static int hf_camel_subscriberState; /* SubscriberState */
501 static int hf_camel_callReferenceNumber; /* CallReferenceNumber */
502 static int hf_camel_mscAddress; /* ISDN_AddressString */
503 static int hf_camel_calledPartyBCDNumber; /* CalledPartyBCDNumber */
504 static int hf_camel_timeAndTimezone; /* TimeAndTimezone */
505 static int hf_camel_callForwardingSS_Pending; /* NULL */
506 static int hf_camel_initialDPArgExtension; /* InitialDPArgExtension */
507 static int hf_camel_gmscAddress; /* ISDN_AddressString */
508 static int hf_camel_ms_Classmark2; /* MS_Classmark2 */
509 static int hf_camel_iMEI; /* IMEI */
510 static int hf_camel_supportedCamelPhases; /* SupportedCamelPhases */
511 static int hf_camel_offeredCamel4Functionalities; /* OfferedCamel4Functionalities */
512 static int hf_camel_bearerCapability2; /* BearerCapability */
513 static int hf_camel_highLayerCompatibility2; /* HighLayerCompatibility */
514 static int hf_camel_lowLayerCompatibility; /* LowLayerCompatibility */
515 static int hf_camel_lowLayerCompatibility2; /* LowLayerCompatibility */
516 static int hf_camel_enhancedDialledServicesAllowed; /* NULL */
517 static int hf_camel_uu_Data; /* UU_Data */
518 static int hf_camel_collectInformationAllowed; /* NULL */
519 static int hf_camel_releaseCallArgExtensionAllowed; /* NULL */
520 static int hf_camel_legToBeCreated; /* LegID */
521 static int hf_camel_newCallSegment; /* CallSegmentID */
522 static int hf_camel_gsmSCFAddress; /* ISDN_AddressString */
523 static int hf_camel_suppress_T_CSI; /* NULL */
524 static int hf_camel_legIDToMove; /* LegID */
525 static int hf_camel_allCallSegments; /* AllCallSegments */
526 static int hf_camel_allCallSegmentsWithExtension; /* AllCallSegmentsWithExtension */
527 static int hf_camel_bcsmEvents; /* SEQUENCE_SIZE_1_bound__numOfBCSMEvents_OF_BCSMEvent */
528 static int hf_camel_bcsmEvents_item; /* BCSMEvent */
529 static int hf_camel_timerID; /* TimerID */
530 static int hf_camel_timervalue; /* TimerValue */
531 static int hf_camel_sCIBillingChargingCharacteristics; /* SCIBillingChargingCharacteristics */
532 static int hf_camel_legToBeSplit; /* LegID */
533 static int hf_camel_chargingCharacteristics; /* ChargingCharacteristics */
534 static int hf_camel_applyChargingGPRS_tariffSwitchInterval; /* INTEGER_1_86400 */
535 static int hf_camel_chargingResult; /* ChargingResult */
536 static int hf_camel_active; /* BOOLEAN */
537 static int hf_camel_chargingRollOver; /* ChargingRollOver */
538 static int hf_camel_pdpID; /* PDPID */
539 static int hf_camel_gPRSCause; /* GPRSCause */
540 static int hf_camel_miscGPRSInfo; /* MiscCallInfo */
541 static int hf_camel_gPRSEventSpecificInformation; /* GPRSEventSpecificInformation */
542 static int hf_camel_mSISDN; /* ISDN_AddressString */
543 static int hf_camel_gPRSMSClass; /* GPRSMSClass */
544 static int hf_camel_sGSNCapabilities; /* SGSNCapabilities */
545 static int hf_camel_gprsCause; /* GPRSCause */
546 static int hf_camel_gPRSEvent; /* SEQUENCE_SIZE_1_bound__numOfGPRSEvents_OF_GPRSEvent */
547 static int hf_camel_gPRSEvent_item; /* GPRSEvent */
548 static int hf_camel_sCIGPRSBillingChargingCharacteristics; /* SCIGPRSBillingChargingCharacteristics */
549 static int hf_camel_callingPartysNumber; /* SMS_AddressString */
550 static int hf_camel_destinationSubscriberNumber; /* CalledPartyBCDNumber */
551 static int hf_camel_sMSCAddress; /* ISDN_AddressString */
552 static int hf_camel_eventSpecificInformationSMS; /* EventSpecificInformationSMS */
553 static int hf_camel_callingPartyNumber_01; /* SMS_AddressString */
554 static int hf_camel_locationInformationMSC; /* LocationInformation */
555 static int hf_camel_tPShortMessageSpecificInfo; /* TPShortMessageSpecificInfo */
556 static int hf_camel_tPProtocolIdentifier; /* TPProtocolIdentifier */
557 static int hf_camel_tPDataCodingScheme; /* TPDataCodingScheme */
558 static int hf_camel_tPValidityPeriod; /* TPValidityPeriod */
559 static int hf_camel_smsReferenceNumber; /* CallReferenceNumber */
560 static int hf_camel_calledPartyNumber_01; /* ISDN_AddressString */
561 static int hf_camel_sMSEvents; /* SEQUENCE_SIZE_1_bound__numOfSMSEvents_OF_SMSEvent */
562 static int hf_camel_sMSEvents_item; /* SMSEvent */
563 static int hf_camel_extensions_01; /* SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField */
564 static int hf_camel_extensions_item; /* ExtensionField */
565 static int hf_camel_na_info; /* NA_Info */
566 static int hf_camel_naCarrierInformation; /* NACarrierInformation */
567 static int hf_camel_naCarrierId; /* NAEA_CIC */
568 static int hf_camel_naCICSelectionType; /* NACarrierSelectionInfo */
569 static int hf_camel_naChargeNumber; /* NAChargeNumber */
570 static int hf_camel_timeDurationCharging_01; /* T_timeDurationCharging_01 */
571 static int hf_camel_releaseIfdurationExceeded_01; /* ReleaseIfDurationExceeded */
572 static int hf_camel_tariffSwitchInterval; /* INTEGER_1_86400 */
573 static int hf_camel_tone_01; /* BOOLEAN */
574 static int hf_camel_local; /* T_local */
575 static int hf_camel_global; /* T_global */
576 static int hf_camel_invoke; /* Invoke */
577 static int hf_camel_returnResult; /* ReturnResult */
578 static int hf_camel_returnError; /* ReturnError */
579 static int hf_camel_reject; /* Reject */
580 static int hf_camel_invokeId; /* InvokeId */
581 static int hf_camel_linkedId; /* T_linkedId */
582 static int hf_camel_linkedIdPresent; /* T_linkedIdPresent */
583 static int hf_camel_absent; /* NULL */
584 static int hf_camel_opcode; /* Code */
585 static int hf_camel_argument; /* T_argument */
586 static int hf_camel_result; /* T_result */
587 static int hf_camel_resultArgument; /* ResultArgument */
588 static int hf_camel_errcode; /* Code */
589 static int hf_camel_parameter; /* T_parameter */
590 static int hf_camel_problem; /* T_problem */
591 static int hf_camel_general; /* GeneralProblem */
592 static int hf_camel_invokeProblem; /* InvokeProblem */
593 static int hf_camel_problemReturnResult; /* ReturnResultProblem */
594 static int hf_camel_returnErrorProblem; /* ReturnErrorProblem */
595 static int hf_camel_present; /* INTEGER */
596 static int hf_camel_InvokeId_present; /* InvokeId_present */
598 static struct camelsrt_info_t * gp_camelsrt_info;
600 /* Forward declarations */
601 static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx);
602 static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx);
603 static int dissect_returnErrorData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx);
604 static int dissect_camel_CAMEL_AChBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
605 static int dissect_camel_CAMEL_AChBillingChargingCharacteristicsV2(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
606 static int dissect_camel_CAMEL_CallResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
607 static int dissect_camel_EstablishTemporaryConnectionArgV2(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
608 static int dissect_camel_SpecializedResourceReportArgV23(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
610 /* XXX - can we get rid of these and always do the SRT work? */
611 static bool gcamel_PersistentSRT=false;
612 static bool gcamel_DisplaySRT=false;
613 bool gcamel_StatSRT=false;
615 /* Initialize the subtree pointers */
616 static int ett_camel;
617 static int ett_camelisup_parameter;
618 static int ett_camel_AccessPointName;
619 static int ett_camel_pdptypenumber;
620 static int ett_camel_cause;
621 static int ett_camel_RPcause;
622 static int ett_camel_stat;
623 static int ett_camel_calledpartybcdnumber;
624 static int ett_camel_callingpartynumber;
625 static int ett_camel_originalcalledpartyid;
626 static int ett_camel_redirectingpartyid;
627 static int ett_camel_locationnumber;
628 static int ett_camel_additionalcallingpartynumber;
629 static int ett_camel_calledAddressValue;
630 static int ett_camel_callingAddressValue;
631 static int ett_camel_assistingSSPIPRoutingAddress;
632 static int ett_camel_correlationID;
633 static int ett_camel_dTMFDigitsCompleted;
634 static int ett_camel_dTMFDigitsTimeOut;
635 static int ett_camel_number;
636 static int ett_camel_digitsResponse;
637 static int ett_camel_timeandtimezone;
639 static int ett_camel_AChChargingAddress;
640 static int ett_camel_AOCBeforeAnswer;
641 static int ett_camel_AOCGPRS;
642 static int ett_camel_AOCSubsequent;
643 static int ett_camel_AudibleIndicator;
644 static int ett_camel_BackwardServiceInteractionInd;
645 static int ett_camel_BasicGapCriteria;
646 static int ett_camel_T_calledAddressAndService;
647 static int ett_camel_T_callingAddressAndService;
648 static int ett_camel_BCSMEvent;
649 static int ett_camel_BCSM_Failure;
650 static int ett_camel_BearerCapability;
651 static int ett_camel_Burst;
652 static int ett_camel_BurstList;
653 static int ett_camel_CAI_GSM0224;
654 static int ett_camel_CallSegmentFailure;
655 static int ett_camel_CallSegmentToCancel;
656 static int ett_camel_CAMEL_AChBillingChargingCharacteristics;
657 static int ett_camel_T_timeDurationCharging;
658 static int ett_camel_CAMEL_CallResult;
659 static int ett_camel_T_timeDurationChargingResult;
660 static int ett_camel_CAMEL_FCIBillingChargingCharacteristics;
661 static int ett_camel_T_fci_fCIBCCCAMELsequence1;
662 static int ett_camel_CAMEL_FCIGPRSBillingChargingCharacteristics;
663 static int ett_camel_T_fciGPRS_fCIBCCCAMELsequence1;
664 static int ett_camel_CAMEL_FCISMSBillingChargingCharacteristics;
665 static int ett_camel_T_fciSMS_fCIBCCCAMELsequence1;
666 static int ett_camel_CAMEL_SCIBillingChargingCharacteristics;
667 static int ett_camel_CAMEL_SCIBillingChargingCharacteristicsAlt;
668 static int ett_camel_CAMEL_SCIGPRSBillingChargingCharacteristics;
669 static int ett_camel_ChangeOfPositionControlInfo;
670 static int ett_camel_ChangeOfLocation;
671 static int ett_camel_ChangeOfLocationAlt;
672 static int ett_camel_ChargingCharacteristics;
673 static int ett_camel_ChargingResult;
674 static int ett_camel_ChargingRollOver;
675 static int ett_camel_CollectedDigits;
676 static int ett_camel_CollectedInfo;
677 static int ett_camel_CompoundCriteria;
678 static int ett_camel_DestinationRoutingAddress;
679 static int ett_camel_DpSpecificCriteria;
680 static int ett_camel_DpSpecificCriteriaAlt;
681 static int ett_camel_DpSpecificInfoAlt;
682 static int ett_camel_T_oServiceChangeSpecificInfo;
683 static int ett_camel_T_tServiceChangeSpecificInfo;
684 static int ett_camel_T_collectedInfoSpecificInfo;
685 static int ett_camel_ElapsedTime;
686 static int ett_camel_T_timeGPRSIfTariffSwitch;
687 static int ett_camel_ElapsedTimeRollOver;
688 static int ett_camel_T_rO_TimeGPRSIfTariffSwitch;
689 static int ett_camel_EndUserAddress;
690 static int ett_camel_EventSpecificInformationBCSM;
691 static int ett_camel_T_routeSelectFailureSpecificInfo;
692 static int ett_camel_T_oCalledPartyBusySpecificInfo;
693 static int ett_camel_T_oNoAnswerSpecificInfo;
694 static int ett_camel_T_oAnswerSpecificInfo;
695 static int ett_camel_T_oMidCallSpecificInfo;
696 static int ett_camel_T_omidCallEvents;
697 static int ett_camel_T_oDisconnectSpecificInfo;
698 static int ett_camel_T_tBusySpecificInfo;
699 static int ett_camel_T_tNoAnswerSpecificInfo;
700 static int ett_camel_T_tAnswerSpecificInfo;
701 static int ett_camel_T_tMidCallSpecificInfo;
702 static int ett_camel_T_tmidCallEvents;
703 static int ett_camel_T_tDisconnectSpecificInfo;
704 static int ett_camel_T_oTermSeizedSpecificInfo;
705 static int ett_camel_T_callAcceptedSpecificInfo;
706 static int ett_camel_T_oAbandonSpecificInfo;
707 static int ett_camel_T_oChangeOfPositionSpecificInfo;
708 static int ett_camel_T_tChangeOfPositionSpecificInfo;
709 static int ett_camel_EventSpecificInformationSMS;
710 static int ett_camel_T_o_smsFailureSpecificInfo;
711 static int ett_camel_T_o_smsSubmissionSpecificInfo;
712 static int ett_camel_T_t_smsFailureSpecificInfo;
713 static int ett_camel_T_t_smsDeliverySpecificInfo;
714 static int ett_camel_Extensions;
715 static int ett_camel_ExtensionField;
716 static int ett_camel_ForwardServiceInteractionInd;
717 static int ett_camel_GapCriteria;
718 static int ett_camel_GapIndicators;
719 static int ett_camel_GapOnService;
720 static int ett_camel_GapTreatment;
721 static int ett_camel_GenericNumbers;
722 static int ett_camel_GPRS_QoS;
723 static int ett_camel_GPRS_QoS_Extension;
724 static int ett_camel_GPRSEvent;
725 static int ett_camel_GPRSEventSpecificInformation;
726 static int ett_camel_T_attachChangeOfPositionSpecificInformation;
727 static int ett_camel_T_pdp_ContextchangeOfPositionSpecificInformation;
728 static int ett_camel_T_detachSpecificInformation;
729 static int ett_camel_T_disconnectSpecificInformation;
730 static int ett_camel_T_pDPContextEstablishmentSpecificInformation;
731 static int ett_camel_T_pDPContextEstablishmentAcknowledgementSpecificInformation;
732 static int ett_camel_InbandInfo;
733 static int ett_camel_InformationToSend;
734 static int ett_camel_LegOrCallSegment;
735 static int ett_camel_LocationInformationGPRS;
736 static int ett_camel_MessageID;
737 static int ett_camel_T_text;
738 static int ett_camel_SEQUENCE_SIZE_1_bound__numOfMessageIDs_OF_Integer4;
739 static int ett_camel_T_variableMessage;
740 static int ett_camel_SEQUENCE_SIZE_1_5_OF_VariablePart;
741 static int ett_camel_MetDPCriteriaList;
742 static int ett_camel_MetDPCriterion;
743 static int ett_camel_MetDPCriterionAlt;
744 static int ett_camel_MidCallControlInfo;
745 static int ett_camel_QualityOfService;
746 static int ett_camel_ReceivingSideID;
747 static int ett_camel_RequestedInformationList;
748 static int ett_camel_RequestedInformationTypeList;
749 static int ett_camel_RequestedInformation;
750 static int ett_camel_RequestedInformationValue;
751 static int ett_camel_SendingSideID;
752 static int ett_camel_ServiceInteractionIndicatorsTwo;
753 static int ett_camel_SMSEvent;
754 static int ett_camel_TimeIfTariffSwitch;
755 static int ett_camel_TimeInformation;
756 static int ett_camel_Tone;
757 static int ett_camel_TransferredVolume;
758 static int ett_camel_T_volumeIfTariffSwitch;
759 static int ett_camel_TransferredVolumeRollOver;
760 static int ett_camel_T_rO_VolumeIfTariffSwitch;
761 static int ett_camel_VariablePart;
762 static int ett_camel_PAR_cancelFailed;
763 static int ett_camel_CAP_GPRS_ReferenceNumber;
764 static int ett_camel_PlayAnnouncementArg;
765 static int ett_camel_PromptAndCollectUserInformationArg;
766 static int ett_camel_ReceivedInformationArg;
767 static int ett_camel_SpecializedResourceReportArg;
768 static int ett_camel_ApplyChargingArg;
769 static int ett_camel_AssistRequestInstructionsArg;
770 static int ett_camel_CallGapArg;
771 static int ett_camel_CallInformationReportArg;
772 static int ett_camel_CallInformationRequestArg;
773 static int ett_camel_CancelArg;
774 static int ett_camel_CollectInformationArg;
775 static int ett_camel_ConnectArg;
776 static int ett_camel_ConnectToResourceArg;
777 static int ett_camel_T_resourceAddress;
778 static int ett_camel_ContinueWithArgumentArg;
779 static int ett_camel_ContinueWithArgumentArgExtension;
780 static int ett_camel_DisconnectForwardConnectionWithArgumentArg;
781 static int ett_camel_DisconnectLegArg;
782 static int ett_camel_EntityReleasedArg;
783 static int ett_camel_EstablishTemporaryConnectionArg;
784 static int ett_camel_EventReportBCSMArg;
785 static int ett_camel_InitialDPArg;
786 static int ett_camel_InitialDPArgExtension;
787 static int ett_camel_InitiateCallAttemptArg;
788 static int ett_camel_InitiateCallAttemptRes;
789 static int ett_camel_MoveLegArg;
790 static int ett_camel_PlayToneArg;
791 static int ett_camel_ReleaseCallArg;
792 static int ett_camel_AllCallSegmentsWithExtension;
793 static int ett_camel_RequestReportBCSMEventArg;
794 static int ett_camel_SEQUENCE_SIZE_1_bound__numOfBCSMEvents_OF_BCSMEvent;
795 static int ett_camel_ResetTimerArg;
796 static int ett_camel_SendChargingInformationArg;
797 static int ett_camel_SplitLegArg;
798 static int ett_camel_ApplyChargingGPRSArg;
799 static int ett_camel_ApplyChargingReportGPRSArg;
800 static int ett_camel_CancelGPRSArg;
801 static int ett_camel_ConnectGPRSArg;
802 static int ett_camel_ContinueGPRSArg;
803 static int ett_camel_EntityReleasedGPRSArg;
804 static int ett_camel_EventReportGPRSArg;
805 static int ett_camel_InitialDPGPRSArg;
806 static int ett_camel_ReleaseGPRSArg;
807 static int ett_camel_RequestReportGPRSEventArg;
808 static int ett_camel_SEQUENCE_SIZE_1_bound__numOfGPRSEvents_OF_GPRSEvent;
809 static int ett_camel_ResetTimerGPRSArg;
810 static int ett_camel_SendChargingInformationGPRSArg;
811 static int ett_camel_ConnectSMSArg;
812 static int ett_camel_EventReportSMSArg;
813 static int ett_camel_InitialDPSMSArg;
814 static int ett_camel_RequestReportSMSEventArg;
815 static int ett_camel_SEQUENCE_SIZE_1_bound__numOfSMSEvents_OF_SMSEvent;
816 static int ett_camel_ResetTimerSMSArg;
817 static int ett_camel_EstablishTemporaryConnectionArgV2;
818 static int ett_camel_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField;
819 static int ett_camel_InitialDPArgExtensionV2;
820 static int ett_camel_NACarrierInformation;
821 static int ett_camel_NA_Info;
822 static int ett_camel_CAMEL_AChBillingChargingCharacteristicsV2;
823 static int ett_camel_T_timeDurationCharging_01;
824 static int ett_camel_ReleaseIfDurationExceeded;
825 static int ett_camel_Code;
826 static int ett_camel_ROS;
827 static int ett_camel_Invoke;
828 static int ett_camel_T_linkedId;
829 static int ett_camel_ReturnResult;
830 static int ett_camel_T_result;
831 static int ett_camel_ReturnError;
832 static int ett_camel_Reject;
833 static int ett_camel_T_problem;
834 static int ett_camel_InvokeId;
836 static expert_field ei_camel_unknown_invokeData;
837 static expert_field ei_camel_unknown_returnResultData;
838 static expert_field ei_camel_unknown_returnErrorData;
839 static expert_field ei_camel_par_wrong_length;
840 static expert_field ei_camel_bcd_not_digit;
842 /* Preference settings default */
843 #define MAX_SSN 254
844 static range_t *global_ssn_range;
845 static dissector_handle_t camel_handle;
846 static dissector_handle_t camel_v1_handle;
847 static dissector_handle_t camel_v2_handle;
848 static dissector_handle_t camel_v3_handle;
849 static dissector_handle_t camel_v4_handle;
851 /* Global variables */
853 static uint8_t PDPTypeOrganization;
854 static uint8_t PDPTypeNumber;
855 const char *camel_obj_id;
856 bool is_ExtensionField;
858 /* Global hash tables*/
859 static wmem_map_t *srt_calls;
860 static uint32_t camelsrt_global_SessionId=1;
862 static int camel_opcode_type;
863 #define CAMEL_OPCODE_INVOKE 1
864 #define CAMEL_OPCODE_RETURN_RESULT 2
865 #define CAMEL_OPCODE_RETURN_ERROR 3
866 #define CAMEL_OPCODE_REJECT 4
868 static const value_string camel_Component_vals[] = {
869 { 1, "invoke" },
870 { 2, "returnResultLast" },
871 { 3, "returnError" },
872 { 4, "reject" },
873 { 0, NULL }
876 const value_string camelSRTtype_naming[]= {
877 { CAMELSRT_SESSION, "TCAP_Session" },
878 { CAMELSRT_VOICE_INITIALDP, "InitialDP/Continue" },
879 { CAMELSRT_VOICE_ACR1, "Slice1_ACR/ACH" },
880 { CAMELSRT_VOICE_ACR2, "Slice2_ACR/ACH" },
881 { CAMELSRT_VOICE_ACR3, "Slice3_ACR/ACH" },
882 { CAMELSRT_VOICE_DISC, "EvtRepBSCM/Release" },
883 { CAMELSRT_SMS_INITIALDP, "InitialDP/ContinueSMS" },
884 { CAMELSRT_GPRS_INITIALDP, "InitialDP/ContinueGPRS" },
885 { CAMELSRT_GPRS_REPORT, "EvtRepGPRS/ContinueGPRS" },
886 { 0,NULL}
889 #define EUROPEAN_DATE 1
890 #define AMERICAN_DATE 2
891 #define CAMEL_DATE_AND_TIME_LEN 20 /* 2*5 + 4 + 5 + 1 (HH:MM:SS;mm/dd/yyyy) */
893 static const enum_val_t date_options[] = {
894 { "european", "DD/MM/YYYY", EUROPEAN_DATE },
895 { "american", "MM/DD/YYYY", AMERICAN_DATE },
896 { NULL, NULL, 0 }
899 static const value_string digit_value[] = {
900 { 0, "0"},
901 { 1, "1"},
902 { 2, "2"},
903 { 3, "3"},
904 { 4, "4"},
905 { 5, "5"},
906 { 6, "6"},
907 { 7, "7"},
908 { 8, "8"},
909 { 9, "9"},
910 { 10, "spare"},
911 { 11, "spare"},
912 { 12, "spare"},
913 { 13, "spare"},
914 { 0, NULL}
919 #if 0
920 static const value_string camel_nature_of_addr_indicator_values[] = {
921 { 0x00, "unknown" },
922 { 0x01, "International Number" },
923 { 0x02, "National Significant Number" },
924 { 0x03, "Network Specific Number" },
925 { 0x04, "Subscriber Number" },
926 { 0x05, "Reserved" },
927 { 0x06, "Abbreviated Number" },
928 { 0x07, "Reserved for extension" },
929 { 0, NULL }
931 static const value_string camel_number_plan_values[] = {
932 { 0x00, "unknown" },
933 { 0x01, "ISDN/Telephony Numbering (Rec ITU-T E.164)" },
934 { 0x02, "spare" },
935 { 0x03, "Data Numbering (ITU-T Rec. X.121)" },
936 { 0x04, "Telex Numbering (ITU-T Rec. F.69)" },
937 { 0x05, "spare" },
938 { 0x06, "Land Mobile Numbering (ITU-T Rec. E.212)" },
939 { 0x07, "spare" },
940 { 0x08, "National Numbering" },
941 { 0x09, "Private Numbering" },
942 { 0x0f, "Reserved for extension" },
943 { 0, NULL }
945 #endif
947 /* End includes from old" packet-camel.c */
949 static const value_string camel_RP_Cause_values[] = {
950 { 1, "Unassigned (unallocated) number" },
951 { 8, "Operator determined barring" },
952 { 10, "Call barred" },
953 { 11, "Reserved" },
954 { 21, "Short message transfer rejected" },
955 { 27, "Destination out of order" },
956 { 28, "Unidentified subscriber" },
957 { 29, "Facility Rejected" },
958 { 30, "Unknown subscriber" },
959 { 38, "Network out of order" },
960 { 41, "Temporary failure" },
961 { 42, "Congestion" },
962 { 47, "Resources unavailable, unspecified" },
963 { 50, "Requested facility not subscribed" },
964 { 69, "Requested facility not implemented" },
965 { 81, "Invalid short message transfer reference value" },
966 { 95, "Semantically incorrect message" },
967 { 96, "Invalid mandatory information" },
968 { 97, " Message Type non-existent or not implemented" },
969 { 98, "Message not compatible with short message protocol state" },
970 { 99, "Information element non existent or not implemented" },
971 { 111, "Protocol error, unspecified" },
972 { 127, "Interworking, unspecified" },
973 { 22,"Memory capacity exceeded" },
974 { 0, NULL }
977 static const value_string camel_holdTreatmentIndicator_values[] = {
978 { 0x01, "acceptHoldRequest" },
979 { 0x02, "rejectHoldRequest" },
980 { 0, NULL }
982 static const value_string camel_cwTreatmentIndicator_values[] = {
983 { 0x01, "acceptCw" },
984 { 0x02, "rejectCw" },
985 { 0, NULL }
987 static const value_string camel_ectTreatmentIndicator_values[] = {
988 { 0x01, "acceptEctRequest" },
989 { 0x02, "rejectEctRequest" },
990 { 0, NULL }
993 #define tc_Messages "0.0.17.773.2.1.3"
994 #define tc_NotationExtensions "0.0.17.775.2.4.1"
995 #define ros_InformationObjects "2.4.5.0"
996 #define datatypes "0.4.0.0.1.3.52.7"
997 #define errortypes "0.4.0.0.1.3.51.7"
998 #define operationcodes "0.4.0.0.1.3.53.7"
999 #define errorcodes "0.4.0.0.1.3.57.7"
1000 #define classes "0.4.0.0.1.3.54.7"
1001 #define gsmSSF_gsmSCF_Operations "0.4.0.0.1.3.101.7"
1002 #define gsmSSF_gsmSCF_Protocol "0.4.0.0.1.3.102.7"
1003 #define gsmSCF_gsmSRF_Operations "0.4.0.0.1.3.103.7"
1004 #define gsmSCF_gsmSRF_Protocol "0.4.0.0.1.3.104.7"
1005 #define sms_Operations "0.4.0.0.1.3.105.7"
1006 #define smsSSF_gsmSCF_Protocol "0.4.0.0.1.3.106.7"
1007 #define gprsSSF_gsmSCF_Operations "0.4.0.0.1.3.107.7"
1008 #define gprsSSF_gsmSCF_Protocol "0.4.0.0.1.3.108.7"
1009 #define id_CAP "0.4.0.0.1.22"
1010 #define id_CAP3 "0.4.0.0.1.20"
1011 #define id_CAPOE "0.4.0.0.1.23"
1012 #define id_CAP3OE "0.4.0.0.1.21"
1013 #define id_ac id_CAP".3"
1014 #define id_acE id_CAPOE".3"
1015 #define id_ac3E id_CAP3OE".3"
1016 #define id_as id_CAP".5"
1017 #define id_asE id_CAPOE".5"
1018 #define id_rosObject id_CAP".25"
1019 #define id_contract id_CAP".26"
1020 #define id_contract3 id_CAP3".26"
1021 #define id_contractE id_CAPOE".26"
1022 #define id_package id_CAP".27"
1023 #define id_packageE id_CAPOE".27"
1024 #define id_rosObject_gsmSCF id_rosObject".4"
1025 #define id_rosObject_gsmSSF id_rosObject".5"
1026 #define id_rosObject_gsmSRF id_rosObject".6"
1027 #define id_rosObject_gprsSSF id_rosObject".7"
1028 #define id_rosObject_smsSSF_V3 id_rosObject".8"
1029 #define id_rosObject_smsSSF_V4 id_rosObject".9"
1030 #define id_ac_CAP_gsmSSF_scfGenericAC id_acE".4"
1031 #define id_ac_CAP_gsmSSF_scfAssistHandoffAC id_acE".6"
1032 #define id_ac_CAP_scf_gsmSSFGenericAC id_acE".8"
1033 #define id_ac_gsmSRF_gsmSCF id_ac".14"
1034 #define id_ac_CAP_gprsSSF_gsmSCF_AC id_ac3E".50"
1035 #define id_ac_CAP_gsmSCF_gprsSSF_AC id_ac3E".51"
1036 #define id_ac_cap3_sms_AC id_ac3E".61"
1037 #define id_ac_cap4_sms_AC id_acE".61"
1038 #define id_CAPSsfToScfGeneric id_contractE".3"
1039 #define id_CAPAssistHandoffssfToScf id_contractE".5"
1040 #define id_CAPScfToSsfGeneric id_contractE".6"
1041 #define id_contract_gsmSRF_gsmSCF id_contract".13"
1042 #define id_capGprsSsfTogsmScf id_contract".14"
1043 #define id_capGsmScfToGprsSsf id_contract".15"
1044 #define id_cap3SmsSsfTogsmScf id_contract3".16"
1045 #define id_cap4SmsSsfTogsmScf id_contract".16"
1046 #define id_package_scfActivation id_package".11"
1047 #define id_package_gsmSRF_scfActivationOfAssist id_package".15"
1048 #define id_package_assistConnectionEstablishment id_package".16"
1049 #define id_package_genericDisconnectResource id_package".17"
1050 #define id_package_nonAssistedConnectionEstablishment id_package".18"
1051 #define id_package_connect id_package".19"
1052 #define id_package_callHandling id_packageE".20"
1053 #define id_package_bcsmEventHandling id_package".21"
1054 #define id_package_ssfCallProcessing id_packageE".24"
1055 #define id_package_scfCallInitiation id_package".25"
1056 #define id_package_timer id_package".26"
1057 #define id_package_billing id_package".27"
1058 #define id_package_charging id_package".28"
1059 #define id_package_trafficManagement id_package".29"
1060 #define id_package_callReport id_package".32"
1061 #define id_package_signallingControl id_package".33"
1062 #define id_package_activityTest id_package".34"
1063 #define id_package_cancel id_packageE".36"
1064 #define id_package_cphResponse id_package".37"
1065 #define id_package_exceptionInform id_package".38"
1066 #define id_package_playTone id_package".39"
1067 #define id_package_specializedResourceControl id_package".42"
1068 #define id_package_gsmSRF_scfCancel id_package".43"
1069 #define id_package_gprsContinue id_package".49"
1070 #define id_package_gprsExceptionInformation id_package".50"
1071 #define id_package_gprsScfActivation id_package".51"
1072 #define id_package_gprsConnect id_package".52"
1073 #define id_package_gprsRelease id_package".53"
1074 #define id_package_gprsEventHandling id_package".54"
1075 #define id_package_gprsTimer id_package".55"
1076 #define id_package_gprsBilling id_package".56"
1077 #define id_package_gprsCharging id_package".57"
1078 #define id_package_gprsActivityTest id_package".58"
1079 #define id_package_gprsCancel id_package".59"
1080 #define id_package_gprsChargeAdvice id_package".60"
1081 #define id_package_smsActivation id_package".61"
1082 #define id_package_smsConnect id_package".62"
1083 #define id_package_smsContinue id_package".63"
1084 #define id_package_smsRelease id_package".64"
1085 #define id_package_smsEventHandling id_package".65"
1086 #define id_package_smsBilling id_package".66"
1087 #define id_package_smsTimer id_package".67"
1088 #define id_as_gsmSSF_scfGenericAS id_asE".4"
1089 #define id_as_assistHandoff_gsmSSF_scfAS id_asE".6"
1090 #define id_as_scf_gsmSSFGenericAS id_asE".7"
1091 #define id_as_basic_gsmSRF_gsmSCF id_as".14"
1092 #define id_as_gprsSSF_gsmSCF_AS id_as".50"
1093 #define id_as_gsmSCF_gprsSSF_AS id_as".51"
1094 #define id_as_smsSSF_gsmSCF_AS id_as".61"
1095 #define leg1 0x01
1096 #define leg2 0x02
1097 #define maxSMS_AddressStringLength 11
1098 #define numOfInfoItems 4
1099 #define errcode_canceled 0
1100 #define errcode_cancelFailed 1
1101 #define errcode_eTCFailed 3
1102 #define errcode_improperCallerResponse 4
1103 #define errcode_missingCustomerRecord 6
1104 #define errcode_missingParameter 7
1105 #define errcode_parameterOutOfRange 8
1106 #define errcode_requestedInfoError 10
1107 #define errcode_systemFailure 11
1108 #define errcode_taskRefused 12
1109 #define errcode_unavailableResource 13
1110 #define errcode_unexpectedComponentSequence 14
1111 #define errcode_unexpectedDataValue 15
1112 #define errcode_unexpectedParameter 16
1113 #define errcode_unknownLegID 17
1114 #define errcode_unknownPDPID 50
1115 #define errcode_unknownCSID 51
1116 #define opcode_initialDP 0
1117 #define opcode_assistRequestInstructions 16
1118 #define opcode_establishTemporaryConnection 17
1119 #define opcode_disconnectForwardConnection 18
1120 #define opcode_dFCWithArgument 86
1121 #define opcode_connectToResource 19
1122 #define opcode_connect 20
1123 #define opcode_releaseCall 22
1124 #define opcode_requestReportBCSMEvent 23
1125 #define opcode_eventReportBCSM 24
1126 #define opcode_collectInformation 27
1127 #define opcode_continue 31
1128 #define opcode_initiateCallAttempt 32
1129 #define opcode_resetTimer 33
1130 #define opcode_furnishChargingInformation 34
1131 #define opcode_applyCharging 35
1132 #define opcode_applyChargingReport 36
1133 #define opcode_callGap 41
1134 #define opcode_callInformationReport 44
1135 #define opcode_callInformationRequest 45
1136 #define opcode_sendChargingInformation 46
1137 #define opcode_playAnnouncement 47
1138 #define opcode_promptAndCollectUserInformation 48
1139 #define opcode_specializedResourceReport 49
1140 #define opcode_cancel 53
1141 #define opcode_activityTest 55
1142 #define opcode_continueWithArgument 88
1143 #define opcode_disconnectLeg 90
1144 #define opcode_moveLeg 93
1145 #define opcode_splitLeg 95
1146 #define opcode_entityReleased 96
1147 #define opcode_playTone 97
1148 #define opcode_initialDPSMS 60
1149 #define opcode_furnishChargingInformationSMS 61
1150 #define opcode_connectSMS 62
1151 #define opcode_requestReportSMSEvent 63
1152 #define opcode_eventReportSMS 64
1153 #define opcode_continueSMS 65
1154 #define opcode_releaseSMS 66
1155 #define opcode_resetTimerSMS 67
1156 #define opcode_activityTestGPRS 70
1157 #define opcode_applyChargingGPRS 71
1158 #define opcode_applyChargingReportGPRS 72
1159 #define opcode_cancelGPRS 73
1160 #define opcode_connectGPRS 74
1161 #define opcode_continueGPRS 75
1162 #define opcode_entityReleasedGPRS 76
1163 #define opcode_furnishChargingInformationGPRS 77
1164 #define opcode_initialDPGPRS 78
1165 #define opcode_releaseGPRS 79
1166 #define opcode_eventReportGPRS 80
1167 #define opcode_requestReportGPRSEvent 81
1168 #define opcode_resetTimerGPRS 82
1169 #define opcode_sendChargingInformationGPRS 83
1170 #define id_CAP_GPRS_ReferenceNumber "0.4.0.0.1.1.5.2"
1171 #define id_CAP_U_ABORT_Reason "0.4.0.0.1.1.2.2"
1172 #define noInvokeId NULL
1175 /* CAMEL OPERATIONS */
1176 const value_string camel_opr_code_strings[] = {
1177 { opcode_playAnnouncement, "playAnnouncement" },
1178 { opcode_promptAndCollectUserInformation, "promptAndCollectUserInformation" },
1179 { opcode_specializedResourceReport, "specializedResourceReport" },
1180 { opcode_activityTest, "activityTest" },
1181 { opcode_applyCharging, "applyCharging" },
1182 { opcode_applyChargingReport, "applyChargingReport" },
1183 { opcode_assistRequestInstructions, "assistRequestInstructions" },
1184 { opcode_callGap, "callGap" },
1185 { opcode_callInformationReport, "callInformationReport" },
1186 { opcode_callInformationRequest, "callInformationRequest" },
1187 { opcode_cancel, "cancel" },
1188 { opcode_collectInformation, "collectInformation" },
1189 { opcode_connect, "connect" },
1190 { opcode_connectToResource, "connectToResource" },
1191 { opcode_continue, "continue" },
1192 { opcode_continueWithArgument, "continueWithArgument" },
1193 { opcode_disconnectForwardConnection, "disconnectForwardConnection" },
1194 { opcode_dFCWithArgument, "disconnectForwardConnectionWithArgument" },
1195 { opcode_disconnectLeg, "disconnectLeg" },
1196 { opcode_entityReleased, "entityReleased" },
1197 { opcode_establishTemporaryConnection, "establishTemporaryConnection" },
1198 { opcode_eventReportBCSM, "eventReportBCSM" },
1199 { opcode_furnishChargingInformation, "furnishChargingInformation" },
1200 { opcode_initialDP, "initialDP" },
1201 { opcode_initiateCallAttempt, "initiateCallAttempt" },
1202 { opcode_moveLeg, "moveLeg" },
1203 { opcode_playTone, "playTone" },
1204 { opcode_releaseCall, "releaseCall" },
1205 { opcode_requestReportBCSMEvent, "requestReportBCSMEvent" },
1206 { opcode_resetTimer, "resetTimer" },
1207 { opcode_sendChargingInformation, "sendChargingInformation" },
1208 { opcode_splitLeg, "splitLeg" },
1209 { opcode_activityTestGPRS, "activityTestGPRS" },
1210 { opcode_applyChargingGPRS, "applyChargingGPRS" },
1211 { opcode_applyChargingReportGPRS, "applyChargingReportGPRS" },
1212 { opcode_cancelGPRS, "cancelGPRS" },
1213 { opcode_connectGPRS, "connectGPRS" },
1214 { opcode_continueGPRS, "continueGPRS" },
1215 { opcode_entityReleasedGPRS, "entityReleasedGPRS" },
1216 { opcode_eventReportGPRS, "eventReportGPRS" },
1217 { opcode_furnishChargingInformationGPRS, "furnishChargingInformationGPRS" },
1218 { opcode_initialDPGPRS, "initialDPGPRS" },
1219 { opcode_releaseGPRS, "releaseGPRS" },
1220 { opcode_requestReportGPRSEvent, "requestReportGPRSEvent" },
1221 { opcode_resetTimerGPRS, "resetTimerGPRS" },
1222 { opcode_sendChargingInformationGPRS, "sendChargingInformationGPRS" },
1223 { opcode_connectSMS, "connectSMS" },
1224 { opcode_continueSMS, "continueSMS" },
1225 { opcode_eventReportSMS, "eventReportSMS" },
1226 { opcode_furnishChargingInformationSMS, "furnishChargingInformationSMS" },
1227 { opcode_initialDPSMS, "initialDPSMS" },
1228 { opcode_releaseSMS, "releaseSMS" },
1229 { opcode_requestReportSMSEvent, "requestReportSMSEvent" },
1230 { opcode_resetTimerSMS, "resetTimerSMS" },
1231 { 0, NULL }
1235 /* CAMEL ERRORS */
1236 static const value_string camel_err_code_string_vals[] = {
1237 { errcode_canceled, "canceled" },
1238 { errcode_cancelFailed, "cancelFailed" },
1239 { errcode_eTCFailed, "eTCFailed" },
1240 { errcode_improperCallerResponse, "improperCallerResponse" },
1241 { errcode_missingCustomerRecord, "missingCustomerRecord" },
1242 { errcode_missingParameter, "missingParameter" },
1243 { errcode_parameterOutOfRange, "parameterOutOfRange" },
1244 { errcode_requestedInfoError, "requestedInfoError" },
1245 { errcode_systemFailure, "systemFailure" },
1246 { errcode_taskRefused, "taskRefused" },
1247 { errcode_unavailableResource, "unavailableResource" },
1248 { errcode_unexpectedComponentSequence, "unexpectedComponentSequence" },
1249 { errcode_unexpectedDataValue, "unexpectedDataValue" },
1250 { errcode_unexpectedParameter, "unexpectedParameter" },
1251 { errcode_unknownLegID, "unknownLegID" },
1252 { errcode_unknownCSID, "unknownCSID" },
1253 { errcode_unknownPDPID, "unknownPDPID" },
1254 { 0, NULL }
1259 * DEBUG fonctions
1262 #undef DEBUG_CAMELSRT
1263 /* #define DEBUG_CAMELSRT */
1265 #ifdef DEBUG_CAMELSRT
1266 #include <stdio.h>
1267 #include <stdarg.h>
1268 static unsigned debug_level = 99;
1270 static void dbg(unsigned level, char *fmt, ...) {
1271 va_list ap;
1273 if (level > debug_level) return;
1274 va_start(ap,fmt);
1275 vfprintf(stderr, fmt, ap);
1276 va_end(ap);
1278 #endif
1280 static void
1281 camelstat_init(struct register_srt* srt _U_, GArray* srt_array)
1283 srt_stat_table *camel_srt_table;
1284 char* tmp_str;
1285 uint32_t i;
1287 camel_srt_table = init_srt_table("CAMEL Commands", NULL, srt_array, NB_CAMELSRT_CATEGORY, NULL, NULL, NULL);
1288 for (i = 0; i < NB_CAMELSRT_CATEGORY; i++)
1290 tmp_str = val_to_str_wmem(NULL,i,camelSRTtype_naming,"Unknown (%d)");
1291 init_srt_table_row(camel_srt_table, i, tmp_str);
1292 wmem_free(NULL, tmp_str);
1296 static tap_packet_status
1297 camelstat_packet(void *pcamel, packet_info *pinfo, epan_dissect_t *edt _U_, const void *psi, tap_flags_t flags _U_)
1299 unsigned idx = 0;
1300 srt_stat_table *camel_srt_table;
1301 const struct camelsrt_info_t * pi=(const struct camelsrt_info_t *)psi;
1302 srt_data_t *data = (srt_data_t *)pcamel;
1303 int i;
1305 for (i=1; i<NB_CAMELSRT_CATEGORY; i++) {
1306 if ( pi->bool_msginfo[i] &&
1307 pi->msginfo[i].is_delta_time
1308 && pi->msginfo[i].request_available
1309 && !pi->msginfo[i].is_duplicate )
1311 camel_srt_table = g_array_index(data->srt_array, srt_stat_table*, idx);
1312 add_srt_table_data(camel_srt_table, i, &pi->msginfo[i].req_time, pinfo);
1314 } /* category */
1315 return TAP_PACKET_REDRAW;
1319 static char camel_number_to_char(int number)
1321 if (number < 10)
1322 return (char) (number + 48 ); /* this is ASCII specific */
1323 else
1324 return (char) (number + 55 );
1328 * 24.011 8.2.5.4
1330 static uint8_t
1331 dissect_RP_cause_ie(tvbuff_t *tvb, uint32_t offset, _U_ unsigned len,
1332 proto_tree *tree, int hf_cause_value, uint8_t *cause_value)
1334 uint8_t oct;
1335 uint32_t curr_offset;
1337 curr_offset = offset;
1338 oct = tvb_get_uint8(tvb, curr_offset);
1340 *cause_value = oct & 0x7f;
1342 proto_tree_add_uint(tree, hf_cause_value, tvb, curr_offset, 1, oct);
1343 curr_offset++;
1345 if ((oct & 0x80)) {
1346 oct = tvb_get_uint8(tvb, curr_offset);
1347 proto_tree_add_uint_format(tree, hf_cause_value,
1348 tvb, curr_offset, 1, oct,
1349 "Diagnostic : %u", oct);
1350 curr_offset++;
1352 return curr_offset - offset;
1355 static int dissect_camel_InitialDPArgExtensionV2(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
1359 static int
1360 dissect_camel_AccessPointName(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1362 tvbuff_t *parameter_tvb;
1363 proto_tree *subtree;
1365 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1366 &parameter_tvb);
1369 if (!parameter_tvb)
1370 return offset;
1371 subtree = proto_item_add_subtree(actx->created_item, ett_camel_AccessPointName);
1372 de_sm_apn(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(parameter_tvb), NULL, 0);
1374 return offset;
1379 static int
1380 dissect_camel_AChBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1381 tvbuff_t *parameter_tvb;
1382 proto_tree *subtree;
1384 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1385 &parameter_tvb);
1387 if (!parameter_tvb)
1388 return offset;
1389 subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_AChBillingChargingCharacteristics);
1390 if((camel_ver == 2)||(camel_ver == 1)){
1391 return dissect_camel_CAMEL_AChBillingChargingCharacteristicsV2(false, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_AChBillingChargingCharacteristics);
1393 dissect_camel_CAMEL_AChBillingChargingCharacteristics(false, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_AChBillingChargingCharacteristics);
1396 return offset;
1401 static int
1402 dissect_camel_CallSegmentID(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1403 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1404 NULL);
1406 return offset;
1410 static const value_string camel_AChChargingAddress_vals[] = {
1411 { 2, "legID" },
1412 { 50, "srfConnection" },
1413 { 0, NULL }
1416 static const ber_choice_t AChChargingAddress_choice[] = {
1417 { 2, &hf_camel_legID , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_inap_LegID },
1418 { 50, &hf_camel_srfConnection , BER_CLASS_CON, 50, BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
1419 { 0, NULL, 0, 0, 0, NULL }
1422 static int
1423 dissect_camel_AChChargingAddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1424 offset = dissect_ber_choice(actx, tree, tvb, offset,
1425 AChChargingAddress_choice, hf_index, ett_camel_AChChargingAddress,
1426 NULL);
1428 return offset;
1433 static int
1434 dissect_camel_Digits(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1436 * Digits {PARAMETERS-BOUND : bound} ::= OCTET STRING (SIZE(
1437 * bound.&minDigitsLength .. bound.&maxDigitsLength))
1438 *-- Indicates the address signalling digits.
1439 *-- Refer to ETSI EN 300 356 1 [23] Generic Number & Generic Digits parameters for encoding.
1440 *-- The coding of the subfields 'NumberQualifier' in Generic Number and 'TypeOfDigits' in
1441 *-- Generic Digits are irrelevant to the CAP;
1442 *-- the ASN.1 tags are sufficient to identify the parameter.
1443 *-- The ISUP format does not allow to exclude these subfields,
1444 *-- therefore the value is network operator specific.
1446 *-- The following parameters shall use Generic Number:
1447 *-- - AdditionalCallingPartyNumber for InitialDP
1448 *-- - AssistingSSPIPRoutingAddress for EstablishTemporaryConnection
1449 *-- - CorrelationID for AssistRequestInstructions
1450 *-- - CalledAddressValue for all occurrences, CallingAddressValue for all occurrences.
1452 *-- The following parameters shall use Generic Digits:
1453 *-- - CorrelationID in EstablishTemporaryConnection
1454 *-- - number in VariablePart
1455 *-- - digitsResponse in ReceivedInformationArg
1456 *-- - midCallEvents in oMidCallSpecificInfo and tMidCallSpecificInfo
1458 *-- In the digitsResponse and midCallevents, the digits may also include the '*', '#',
1459 *-- a, b, c and d digits by using the IA5 character encoding scheme. If the BCD even or
1460 *-- BCD odd encoding scheme is used, then the following encoding shall be applied for the
1461 *-- non-decimal characters: 1011 (*), 1100 (#).
1463 *-- AssistingSSPIPRoutingAddress in EstablishTemporaryConnection and CorrelationID in
1464 *-- AssistRequestInstructions may contain a Hex B digit as address signal. Refer to
1465 *-- Annex A.6 for the usage of the Hex B digit.
1467 *-- Note that when CorrelationID is transported in Generic Digits, then the digits shall
1468 *-- always be BCD encoded.
1470 tvbuff_t *parameter_tvb;
1471 proto_tree *subtree;
1472 int ett = -1;
1473 bool digits = false;
1475 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1476 &parameter_tvb);
1478 if (!parameter_tvb)
1479 return offset;
1481 if (hf_index == hf_camel_calledAddressValue) {
1482 ett = ett_camel_calledAddressValue;
1483 } else if (hf_index == hf_camel_callingAddressValue) {
1484 ett = ett_camel_callingAddressValue;
1485 } else if (hf_index == hf_camel_additionalCallingPartyNumber) {
1486 ett = ett_camel_additionalcallingpartynumber;
1487 } else if (hf_index == hf_camel_assistingSSPIPRoutingAddress) {
1488 ett = ett_camel_assistingSSPIPRoutingAddress;
1489 } else if (hf_index == hf_camel_correlationID) {
1490 ett = ett_camel_correlationID;
1491 digits = (opcode == opcode_establishTemporaryConnection) ? true : false;
1492 } else if (hf_index == hf_camel_dTMFDigitsCompleted) {
1493 ett = ett_camel_dTMFDigitsCompleted;
1494 digits = true;
1495 } else if (hf_index == hf_camel_dTMFDigitsTimeOut) {
1496 ett = ett_camel_dTMFDigitsTimeOut;
1497 digits = true;
1498 } else if (hf_index == hf_camel_number) {
1499 ett = ett_camel_number;
1500 digits = true;
1501 } else if (hf_index == hf_camel_digitsResponse) {
1502 ett = ett_camel_digitsResponse;
1503 digits = true;
1506 subtree = proto_item_add_subtree(actx->created_item, ett);
1507 if (digits) {
1508 dissect_isup_generic_digits_parameter(parameter_tvb, subtree, NULL);
1509 } else {
1510 dissect_isup_generic_number_parameter(parameter_tvb, actx->pinfo, subtree, NULL);
1514 return offset;
1519 static int
1520 dissect_camel_AdditionalCallingPartyNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1521 offset = dissect_camel_Digits(implicit_tag, tvb, offset, actx, tree, hf_index);
1523 return offset;
1528 static int
1529 dissect_camel_AlertingPattern(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1530 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1531 NULL);
1533 return offset;
1538 static int
1539 dissect_camel_INTEGER_0_8191(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1540 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1541 NULL);
1543 return offset;
1547 static const ber_sequence_t CAI_GSM0224_sequence[] = {
1548 { &hf_camel_e1 , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1549 { &hf_camel_e2 , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1550 { &hf_camel_e3 , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1551 { &hf_camel_e4 , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1552 { &hf_camel_e5 , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1553 { &hf_camel_e6 , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1554 { &hf_camel_e7 , BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_8191 },
1555 { NULL, 0, 0, 0, NULL }
1558 static int
1559 dissect_camel_CAI_GSM0224(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1560 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1561 CAI_GSM0224_sequence, hf_index, ett_camel_CAI_GSM0224);
1563 return offset;
1568 static int
1569 dissect_camel_INTEGER_1_86400(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1570 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1571 NULL);
1573 return offset;
1577 static const ber_sequence_t AOCSubsequent_sequence[] = {
1578 { &hf_camel_cAI_GSM0224 , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_CAI_GSM0224 },
1579 { &hf_camel_aocSubsequent_tariffSwitchInterval, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_86400 },
1580 { NULL, 0, 0, 0, NULL }
1583 static int
1584 dissect_camel_AOCSubsequent(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1585 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1586 AOCSubsequent_sequence, hf_index, ett_camel_AOCSubsequent);
1588 return offset;
1592 static const ber_sequence_t AOCBeforeAnswer_sequence[] = {
1593 { &hf_camel_aOCInitial , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_CAI_GSM0224 },
1594 { &hf_camel_aOCSubsequent , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AOCSubsequent },
1595 { NULL, 0, 0, 0, NULL }
1598 static int
1599 dissect_camel_AOCBeforeAnswer(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1600 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1601 AOCBeforeAnswer_sequence, hf_index, ett_camel_AOCBeforeAnswer);
1603 return offset;
1607 static const ber_sequence_t AOCGPRS_sequence[] = {
1608 { &hf_camel_aOCInitial , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_CAI_GSM0224 },
1609 { &hf_camel_aOCSubsequent , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AOCSubsequent },
1610 { NULL, 0, 0, 0, NULL }
1613 static int
1614 dissect_camel_AOCGPRS(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1615 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1616 AOCGPRS_sequence, hf_index, ett_camel_AOCGPRS);
1618 return offset;
1622 static const value_string camel_AppendFreeFormatData_vals[] = {
1623 { 0, "overwrite" },
1624 { 1, "append" },
1625 { 0, NULL }
1629 static int
1630 dissect_camel_AppendFreeFormatData(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1631 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1632 NULL);
1634 return offset;
1639 static int
1640 dissect_camel_ApplicationTimer(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1641 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1642 NULL);
1644 return offset;
1649 static int
1650 dissect_camel_AssistingSSPIPRoutingAddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1651 offset = dissect_camel_Digits(implicit_tag, tvb, offset, actx, tree, hf_index);
1653 return offset;
1658 static int
1659 dissect_camel_BOOLEAN(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1660 offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
1662 return offset;
1667 static int
1668 dissect_camel_INTEGER_1_1200(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1669 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1670 NULL);
1672 return offset;
1677 static int
1678 dissect_camel_INTEGER_1_3(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1679 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1680 NULL);
1682 return offset;
1687 static int
1688 dissect_camel_INTEGER_1_20(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1689 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1690 NULL);
1692 return offset;
1696 static const ber_sequence_t Burst_sequence[] = {
1697 { &hf_camel_numberOfBursts, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_3 },
1698 { &hf_camel_burstInterval , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_1200 },
1699 { &hf_camel_numberOfTonesInBurst, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_3 },
1700 { &hf_camel_burstToneDuration, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_20 },
1701 { &hf_camel_toneInterval , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_20 },
1702 { NULL, 0, 0, 0, NULL }
1705 static int
1706 dissect_camel_Burst(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1707 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1708 Burst_sequence, hf_index, ett_camel_Burst);
1710 return offset;
1714 static const ber_sequence_t BurstList_sequence[] = {
1715 { &hf_camel_warningPeriod , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_1200 },
1716 { &hf_camel_bursts , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_Burst },
1717 { NULL, 0, 0, 0, NULL }
1720 static int
1721 dissect_camel_BurstList(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1722 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1723 BurstList_sequence, hf_index, ett_camel_BurstList);
1725 return offset;
1729 static const value_string camel_AudibleIndicator_vals[] = {
1730 { 0, "tone" },
1731 { 1, "burstList" },
1732 { 0, NULL }
1735 static const ber_choice_t AudibleIndicator_choice[] = {
1736 { 0, &hf_camel_audibleIndicatorTone, BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_NOOWNTAG, dissect_camel_BOOLEAN },
1737 { 1, &hf_camel_burstList , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_BurstList },
1738 { 0, NULL, 0, 0, 0, NULL }
1741 static int
1742 dissect_camel_AudibleIndicator(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1743 offset = dissect_ber_choice(actx, tree, tvb, offset,
1744 AudibleIndicator_choice, hf_index, ett_camel_AudibleIndicator,
1745 NULL);
1747 return offset;
1752 static int
1753 dissect_camel_OCTET_STRING_SIZE_1(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1754 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1755 NULL);
1757 return offset;
1761 static const ber_sequence_t BackwardServiceInteractionInd_sequence[] = {
1762 { &hf_camel_conferenceTreatmentIndicator, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1 },
1763 { &hf_camel_callCompletionTreatmentIndicator, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1 },
1764 { NULL, 0, 0, 0, NULL }
1767 static int
1768 dissect_camel_BackwardServiceInteractionInd(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1769 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1770 BackwardServiceInteractionInd_sequence, hf_index, ett_camel_BackwardServiceInteractionInd);
1772 return offset;
1776 static const ber_sequence_t GapOnService_sequence[] = {
1777 { &hf_camel_serviceKey , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_inap_ServiceKey },
1778 { NULL, 0, 0, 0, NULL }
1781 static int
1782 dissect_camel_GapOnService(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1783 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1784 GapOnService_sequence, hf_index, ett_camel_GapOnService);
1786 return offset;
1790 static const ber_sequence_t T_calledAddressAndService_sequence[] = {
1791 { &hf_camel_calledAddressValue, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_Digits },
1792 { &hf_camel_serviceKey , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_inap_ServiceKey },
1793 { NULL, 0, 0, 0, NULL }
1796 static int
1797 dissect_camel_T_calledAddressAndService(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1798 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1799 T_calledAddressAndService_sequence, hf_index, ett_camel_T_calledAddressAndService);
1801 return offset;
1805 static const ber_sequence_t T_callingAddressAndService_sequence[] = {
1806 { &hf_camel_callingAddressValue, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_Digits },
1807 { &hf_camel_serviceKey , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_inap_ServiceKey },
1808 { NULL, 0, 0, 0, NULL }
1811 static int
1812 dissect_camel_T_callingAddressAndService(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1813 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1814 T_callingAddressAndService_sequence, hf_index, ett_camel_T_callingAddressAndService);
1816 return offset;
1820 static const value_string camel_BasicGapCriteria_vals[] = {
1821 { 0, "calledAddressValue" },
1822 { 2, "gapOnService" },
1823 { 29, "calledAddressAndService" },
1824 { 30, "callingAddressAndService" },
1825 { 0, NULL }
1828 static const ber_choice_t BasicGapCriteria_choice[] = {
1829 { 0, &hf_camel_calledAddressValue, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_Digits },
1830 { 2, &hf_camel_gapOnService , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_GapOnService },
1831 { 29, &hf_camel_calledAddressAndService, BER_CLASS_CON, 29, BER_FLAGS_IMPLTAG, dissect_camel_T_calledAddressAndService },
1832 { 30, &hf_camel_callingAddressAndService, BER_CLASS_CON, 30, BER_FLAGS_IMPLTAG, dissect_camel_T_callingAddressAndService },
1833 { 0, NULL, 0, 0, 0, NULL }
1836 static int
1837 dissect_camel_BasicGapCriteria(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1838 offset = dissect_ber_choice(actx, tree, tvb, offset,
1839 BasicGapCriteria_choice, hf_index, ett_camel_BasicGapCriteria,
1840 NULL);
1842 return offset;
1846 static const value_string camel_EventTypeBCSM_vals[] = {
1847 { 2, "collectedInfo" },
1848 { 3, "analyzedInformation" },
1849 { 4, "routeSelectFailure" },
1850 { 5, "oCalledPartyBusy" },
1851 { 6, "oNoAnswer" },
1852 { 7, "oAnswer" },
1853 { 8, "oMidCall" },
1854 { 9, "oDisconnect" },
1855 { 10, "oAbandon" },
1856 { 12, "termAttemptAuthorized" },
1857 { 13, "tBusy" },
1858 { 14, "tNoAnswer" },
1859 { 15, "tAnswer" },
1860 { 16, "tMidCall" },
1861 { 17, "tDisconnect" },
1862 { 18, "tAbandon" },
1863 { 19, "oTermSeized" },
1864 { 27, "callAccepted" },
1865 { 50, "oChangeOfPosition" },
1866 { 51, "tChangeOfPosition" },
1867 { 52, "oServiceChange" },
1868 { 53, "tServiceChange" },
1869 { 0, NULL }
1873 static int
1874 dissect_camel_EventTypeBCSM(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1875 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1876 NULL);
1878 return offset;
1882 static const value_string camel_MonitorMode_vals[] = {
1883 { 0, "interrupted" },
1884 { 1, "notifyAndContinue" },
1885 { 2, "transparent" },
1886 { 0, NULL }
1890 static int
1891 dissect_camel_MonitorMode(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1892 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1893 NULL);
1895 return offset;
1900 static int
1901 dissect_camel_INTEGER_1_30(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1902 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1903 NULL);
1905 return offset;
1910 static int
1911 dissect_camel_OCTET_STRING_SIZE_1_2(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1912 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
1913 NULL);
1915 return offset;
1920 static int
1921 dissect_camel_INTEGER_1_127(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1922 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1923 NULL);
1925 return offset;
1929 static const ber_sequence_t MidCallControlInfo_sequence[] = {
1930 { &hf_camel_minimumNumberOfDigits, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_30 },
1931 { &hf_camel_maximumNumberOfDigits, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_30 },
1932 { &hf_camel_endOfReplyDigit, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1_2 },
1933 { &hf_camel_cancelDigit , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1_2 },
1934 { &hf_camel_startDigit , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1_2 },
1935 { &hf_camel_interDigitTimeout, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_127 },
1936 { NULL, 0, 0, 0, NULL }
1939 static int
1940 dissect_camel_MidCallControlInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1941 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1942 MidCallControlInfo_sequence, hf_index, ett_camel_MidCallControlInfo);
1944 return offset;
1949 static int
1950 dissect_camel_NULL(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1951 offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
1953 return offset;
1957 static const ber_sequence_t ChangeOfLocationAlt_sequence[] = {
1958 { NULL, 0, 0, 0, NULL }
1961 static int
1962 dissect_camel_ChangeOfLocationAlt(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1963 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1964 ChangeOfLocationAlt_sequence, hf_index, ett_camel_ChangeOfLocationAlt);
1966 return offset;
1970 static const value_string camel_ChangeOfLocation_vals[] = {
1971 { 0, "cellGlobalId" },
1972 { 1, "serviceAreaId" },
1973 { 2, "locationAreaId" },
1974 { 3, "inter-SystemHandOver" },
1975 { 4, "inter-PLMNHandOver" },
1976 { 5, "inter-MSCHandOver" },
1977 { 6, "changeOfLocationAlt" },
1978 { 0, NULL }
1981 static const ber_choice_t ChangeOfLocation_choice[] = {
1982 { 0, &hf_camel_cellGlobalId , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength },
1983 { 1, &hf_camel_serviceAreaId , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength },
1984 { 2, &hf_camel_locationAreaId, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_gsm_map_LAIFixedLength },
1985 { 3, &hf_camel_inter_SystemHandOver, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
1986 { 4, &hf_camel_inter_PLMNHandOver, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
1987 { 5, &hf_camel_inter_MSCHandOver, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
1988 { 6, &hf_camel_changeOfLocationAlt, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_camel_ChangeOfLocationAlt },
1989 { 0, NULL, 0, 0, 0, NULL }
1992 static int
1993 dissect_camel_ChangeOfLocation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1994 offset = dissect_ber_choice(actx, tree, tvb, offset,
1995 ChangeOfLocation_choice, hf_index, ett_camel_ChangeOfLocation,
1996 NULL);
1998 return offset;
2002 static const ber_sequence_t ChangeOfPositionControlInfo_sequence_of[1] = {
2003 { &hf_camel_ChangeOfPositionControlInfo_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_ChangeOfLocation },
2006 static int
2007 dissect_camel_ChangeOfPositionControlInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2008 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2009 ChangeOfPositionControlInfo_sequence_of, hf_index, ett_camel_ChangeOfPositionControlInfo);
2011 return offset;
2016 static int
2017 dissect_camel_NumberOfDigits(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2018 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2019 NULL);
2021 return offset;
2025 static const ber_sequence_t DpSpecificCriteriaAlt_sequence[] = {
2026 { &hf_camel_changeOfPositionControlInfo, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_ChangeOfPositionControlInfo },
2027 { &hf_camel_numberOfDigits, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NumberOfDigits },
2028 { &hf_camel_interDigitTimeout, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_127 },
2029 { NULL, 0, 0, 0, NULL }
2032 static int
2033 dissect_camel_DpSpecificCriteriaAlt(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2034 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2035 DpSpecificCriteriaAlt_sequence, hf_index, ett_camel_DpSpecificCriteriaAlt);
2037 return offset;
2041 static const value_string camel_DpSpecificCriteria_vals[] = {
2042 { 1, "applicationTimer" },
2043 { 2, "midCallControlInfo" },
2044 { 3, "dpSpecificCriteriaAlt" },
2045 { 0, NULL }
2048 static const ber_choice_t DpSpecificCriteria_choice[] = {
2049 { 1, &hf_camel_applicationTimer, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_ApplicationTimer },
2050 { 2, &hf_camel_midCallControlInfo, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_MidCallControlInfo },
2051 { 3, &hf_camel_dpSpecificCriteriaAlt, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_camel_DpSpecificCriteriaAlt },
2052 { 0, NULL, 0, 0, 0, NULL }
2055 static int
2056 dissect_camel_DpSpecificCriteria(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2057 offset = dissect_ber_choice(actx, tree, tvb, offset,
2058 DpSpecificCriteria_choice, hf_index, ett_camel_DpSpecificCriteria,
2059 NULL);
2061 return offset;
2065 static const ber_sequence_t BCSMEvent_sequence[] = {
2066 { &hf_camel_eventTypeBCSM , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_EventTypeBCSM },
2067 { &hf_camel_monitorMode , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_MonitorMode },
2068 { &hf_camel_legID , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_LegID },
2069 { &hf_camel_dpSpecificCriteria, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_DpSpecificCriteria },
2070 { &hf_camel_automaticRearm, BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
2071 { NULL, 0, 0, 0, NULL }
2074 static int
2075 dissect_camel_BCSMEvent(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2076 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2077 BCSMEvent_sequence, hf_index, ett_camel_BCSMEvent);
2079 return offset;
2084 static int
2085 dissect_camel_Cause(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2087 tvbuff_t *parameter_tvb;
2088 uint8_t Cause_value;
2089 proto_tree *subtree;
2091 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2092 &parameter_tvb);
2095 if (!parameter_tvb)
2096 return offset;
2097 subtree = proto_item_add_subtree(actx->created_item, ett_camel_cause);
2099 dissect_q931_cause_ie(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), subtree, hf_camel_cause_indicator, &Cause_value, isup_parameter_type_value);
2101 return offset;
2105 static const ber_sequence_t BCSM_Failure_sequence[] = {
2106 { &hf_camel_legID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_LegID },
2107 { &hf_camel_cause , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Cause },
2108 { NULL, 0, 0, 0, NULL }
2111 static int
2112 dissect_camel_BCSM_Failure(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2113 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2114 BCSM_Failure_sequence, hf_index, ett_camel_BCSM_Failure);
2116 return offset;
2121 static int
2122 dissect_camel_T_bearerCap(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2123 tvbuff_t *parameter_tvb;
2125 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2126 &parameter_tvb);
2129 if (!parameter_tvb)
2130 return offset;
2132 dissect_q931_bearer_capability_ie(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), tree);
2134 return offset;
2138 static const value_string camel_BearerCapability_vals[] = {
2139 { 0, "bearerCap" },
2140 { 0, NULL }
2143 static const ber_choice_t BearerCapability_choice[] = {
2144 { 0, &hf_camel_bearerCap , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_bearerCap },
2145 { 0, NULL, 0, 0, 0, NULL }
2148 static int
2149 dissect_camel_BearerCapability(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2150 offset = dissect_ber_choice(actx, tree, tvb, offset,
2151 BearerCapability_choice, hf_index, ett_camel_BearerCapability,
2152 NULL);
2154 return offset;
2159 static int
2160 dissect_camel_CalledPartyBCDNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2161 /* See 3GPP TS 29.078
2162 * and 3GPP TS 24.008, section 10.5.4.7
2163 * Indicates the Called Party Number, including service selection information.
2164 * Refer to 3GPP TS 24.008 [9] for encoding.
2165 * This data type carries only the 'type of number', 'numbering plan
2166 * identification' and 'number digit' fields defined in 3GPP TS 24.008 [9];
2167 * it does not carry the 'called party BCD number IEI' or 'length of called
2168 * party BCD number contents'.
2169 * In the context of the DestinationSubscriberNumber field in ConnectSMSArg or
2170 * InitialDPSMSArg, a CalledPartyBCDNumber may also contain an alphanumeric
2171 * character string. In this case, type-of-number '101'B is used, in accordance
2172 * with 3GPP TS 23.040 [6]. The address is coded in accordance with the
2173 * GSM 7-bit default alphabet definition and the SMS packing rules
2174 * as specified in 3GPP TS 23.038 [15] in this case.
2176 tvbuff_t *parameter_tvb;
2177 proto_tree *subtree;
2179 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2180 &parameter_tvb);
2183 if (!parameter_tvb)
2184 return offset;
2185 subtree = proto_item_add_subtree(actx->created_item, ett_camel_calledpartybcdnumber);
2186 de_cld_party_bcd_num(parameter_tvb, subtree, actx->pinfo, 0, tvb_reported_length(parameter_tvb), NULL, 0);
2189 return offset;
2194 static int
2195 dissect_camel_CalledPartyNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2196 tvbuff_t *parameter_tvb;
2197 proto_tree *subtree;
2199 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2200 &parameter_tvb);
2203 if (!parameter_tvb)
2204 return offset;
2206 subtree = proto_item_add_subtree(actx->created_item, ett_camel_calledpartybcdnumber);
2207 dissect_isup_called_party_number_parameter(parameter_tvb, actx->pinfo, subtree, NULL);
2209 return offset;
2214 static int
2215 dissect_camel_CallingPartyNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2216 tvbuff_t *parameter_tvb;
2217 proto_tree *subtree;
2219 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2220 &parameter_tvb);
2223 if (!parameter_tvb)
2224 return offset;
2226 subtree = proto_item_add_subtree(actx->created_item, ett_camel_callingpartynumber);
2227 dissect_isup_calling_party_number_parameter(parameter_tvb, actx->pinfo, subtree, NULL);
2229 return offset;
2234 static int
2235 dissect_camel_CallResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2236 tvbuff_t *parameter_tvb;
2237 proto_tree *subtree;
2239 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2240 &parameter_tvb);
2242 if (!parameter_tvb)
2243 return offset;
2244 subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_CallResult);
2245 dissect_camel_CAMEL_CallResult(false, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_CallResult);
2248 return offset;
2252 static const ber_sequence_t CallSegmentFailure_sequence[] = {
2253 { &hf_camel_callSegmentID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
2254 { &hf_camel_cause , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Cause },
2255 { NULL, 0, 0, 0, NULL }
2258 static int
2259 dissect_camel_CallSegmentFailure(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2260 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2261 CallSegmentFailure_sequence, hf_index, ett_camel_CallSegmentFailure);
2263 return offset;
2268 static int
2269 dissect_camel_InvokeID(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2270 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2271 NULL);
2273 return offset;
2277 static const ber_sequence_t CallSegmentToCancel_sequence[] = {
2278 { &hf_camel_invokeID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_InvokeID },
2279 { &hf_camel_callSegmentID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
2280 { NULL, 0, 0, 0, NULL }
2283 static int
2284 dissect_camel_CallSegmentToCancel(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2285 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2286 CallSegmentToCancel_sequence, hf_index, ett_camel_CallSegmentToCancel);
2288 return offset;
2293 static int
2294 dissect_camel_INTEGER_1_864000(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2295 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2296 NULL);
2298 return offset;
2303 static int
2304 dissect_camel_T_audibleIndicator(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2305 if (tvb_reported_length_remaining(tvb,offset) < 2)
2306 offset = dissect_camel_BOOLEAN(true, tvb, offset, actx , tree, hf_camel_audibleIndicatorTone);
2307 else
2308 offset = dissect_camel_AudibleIndicator(implicit_tag, tvb, offset, actx, tree, hf_index);
2312 return offset;
2317 static int
2318 dissect_camel_T_local(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2320 if (is_ExtensionField){
2321 hf_index = hf_camel_extension_code_local;
2322 }else if (camel_opcode_type == CAMEL_OPCODE_RETURN_ERROR){
2323 hf_index = hf_camel_error_code_local;
2325 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2326 &opcode);
2328 if (is_ExtensionField == false){
2329 if (camel_opcode_type == CAMEL_OPCODE_RETURN_ERROR){
2330 errorCode = opcode;
2331 col_append_str(actx->pinfo->cinfo, COL_INFO,
2332 val_to_str(errorCode, camel_err_code_string_vals, "Unknown CAMEL error (%u)"));
2333 col_append_str(actx->pinfo->cinfo, COL_INFO, " ");
2334 col_set_fence(actx->pinfo->cinfo, COL_INFO);
2335 }else{
2336 col_append_str(actx->pinfo->cinfo, COL_INFO,
2337 val_to_str(opcode, camel_opr_code_strings, "Unknown CAMEL (%u)"));
2338 col_append_str(actx->pinfo->cinfo, COL_INFO, " ");
2339 col_set_fence(actx->pinfo->cinfo, COL_INFO);
2341 gp_camelsrt_info->opcode=opcode;
2344 return offset;
2349 static int
2350 dissect_camel_T_global(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2351 offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_index, &camel_obj_id);
2353 return offset;
2357 static const value_string camel_Code_vals[] = {
2358 { 0, "local" },
2359 { 1, "global" },
2360 { 0, NULL }
2363 static const ber_choice_t Code_choice[] = {
2364 { 0, &hf_camel_local , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_camel_T_local },
2365 { 1, &hf_camel_global , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_camel_T_global },
2366 { 0, NULL, 0, 0, 0, NULL }
2369 static int
2370 dissect_camel_Code(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2371 offset = dissect_ber_choice(actx, tree, tvb, offset,
2372 Code_choice, hf_index, ett_camel_Code,
2373 NULL);
2375 return offset;
2380 static int
2381 dissect_camel_T_value(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2382 /*XXX handle local form here */
2383 if(camel_obj_id){
2384 offset=call_ber_oid_callback(camel_obj_id, tvb, offset, actx->pinfo, tree, NULL);
2386 is_ExtensionField = false;
2389 return offset;
2393 static const ber_sequence_t ExtensionField_sequence[] = {
2394 { &hf_camel_type , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_Code },
2395 { &hf_camel_criticality , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_inap_CriticalityType },
2396 { &hf_camel_value , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_value },
2397 { NULL, 0, 0, 0, NULL }
2400 static int
2401 dissect_camel_ExtensionField(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2402 camel_obj_id = NULL;
2403 is_ExtensionField =true;
2405 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2406 ExtensionField_sequence, hf_index, ett_camel_ExtensionField);
2408 return offset;
2412 static const ber_sequence_t Extensions_sequence_of[1] = {
2413 { &hf_camel_Extensions_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_camel_ExtensionField },
2416 static int
2417 dissect_camel_Extensions(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2418 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2419 Extensions_sequence_of, hf_index, ett_camel_Extensions);
2421 return offset;
2425 static const ber_sequence_t T_timeDurationCharging_sequence[] = {
2426 { &hf_camel_maxCallPeriodDuration, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_864000 },
2427 { &hf_camel_releaseIfdurationExceeded, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
2428 { &hf_camel_timeDurationCharging_tariffSwitchInterval, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_86400 },
2429 { &hf_camel_audibleIndicator, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_T_audibleIndicator },
2430 { &hf_camel_extensions , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
2431 { NULL, 0, 0, 0, NULL }
2434 static int
2435 dissect_camel_T_timeDurationCharging(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2436 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2437 T_timeDurationCharging_sequence, hf_index, ett_camel_T_timeDurationCharging);
2439 return offset;
2443 static const value_string camel_CAMEL_AChBillingChargingCharacteristics_vals[] = {
2444 { 0, "timeDurationCharging" },
2445 { 0, NULL }
2448 static const ber_choice_t CAMEL_AChBillingChargingCharacteristics_choice[] = {
2449 { 0, &hf_camel_timeDurationCharging, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_timeDurationCharging },
2450 { 0, NULL, 0, 0, 0, NULL }
2453 static int
2454 dissect_camel_CAMEL_AChBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2455 offset = dissect_ber_choice(actx, tree, tvb, offset,
2456 CAMEL_AChBillingChargingCharacteristics_choice, hf_index, ett_camel_CAMEL_AChBillingChargingCharacteristics,
2457 NULL);
2459 return offset;
2464 static int
2465 dissect_camel_LegType(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2466 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2467 NULL);
2469 return offset;
2473 static const value_string camel_ReceivingSideID_vals[] = {
2474 { 1, "receivingSideID" },
2475 { 0, NULL }
2478 static const ber_choice_t ReceivingSideID_choice[] = {
2479 { 1, &hf_camel_receivingSideID, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_LegType },
2480 { 0, NULL, 0, 0, 0, NULL }
2483 static int
2484 dissect_camel_ReceivingSideID(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2485 offset = dissect_ber_choice(actx, tree, tvb, offset,
2486 ReceivingSideID_choice, hf_index, ett_camel_ReceivingSideID,
2487 NULL);
2489 return offset;
2494 static int
2495 dissect_camel_TimeIfNoTariffSwitch(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2496 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2497 NULL);
2499 return offset;
2504 static int
2505 dissect_camel_INTEGER_0_864000(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2506 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2507 NULL);
2509 return offset;
2513 static const ber_sequence_t TimeIfTariffSwitch_sequence[] = {
2514 { &hf_camel_timeSinceTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_864000 },
2515 { &hf_camel_timeIfTariffSwitch_tariffSwitchInterval, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_864000 },
2516 { NULL, 0, 0, 0, NULL }
2519 static int
2520 dissect_camel_TimeIfTariffSwitch(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2521 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2522 TimeIfTariffSwitch_sequence, hf_index, ett_camel_TimeIfTariffSwitch);
2524 return offset;
2528 static const value_string camel_TimeInformation_vals[] = {
2529 { 0, "timeIfNoTariffSwitch" },
2530 { 1, "timeIfTariffSwitch" },
2531 { 0, NULL }
2534 static const ber_choice_t TimeInformation_choice[] = {
2535 { 0, &hf_camel_timeIfNoTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_TimeIfNoTariffSwitch },
2536 { 1, &hf_camel_timeIfTariffSwitch, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_TimeIfTariffSwitch },
2537 { 0, NULL, 0, 0, 0, NULL }
2540 static int
2541 dissect_camel_TimeInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2542 offset = dissect_ber_choice(actx, tree, tvb, offset,
2543 TimeInformation_choice, hf_index, ett_camel_TimeInformation,
2544 NULL);
2546 return offset;
2550 static const ber_sequence_t T_timeDurationChargingResult_sequence[] = {
2551 { &hf_camel_timeDurationChargingResultpartyToCharge, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_ReceivingSideID },
2552 { &hf_camel_timeInformation, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_TimeInformation },
2553 { &hf_camel_legActive , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
2554 { &hf_camel_callLegReleasedAtTcpExpiry, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
2555 { &hf_camel_extensions , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
2556 { &hf_camel_aChChargingAddress, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_AChChargingAddress },
2557 { NULL, 0, 0, 0, NULL }
2560 static int
2561 dissect_camel_T_timeDurationChargingResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2562 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2563 T_timeDurationChargingResult_sequence, hf_index, ett_camel_T_timeDurationChargingResult);
2565 return offset;
2569 static const value_string camel_CAMEL_CallResult_vals[] = {
2570 { 0, "timeDurationChargingResult" },
2571 { 0, NULL }
2574 static const ber_choice_t CAMEL_CallResult_choice[] = {
2575 { 0, &hf_camel_timeDurationChargingResult, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_timeDurationChargingResult },
2576 { 0, NULL, 0, 0, 0, NULL }
2579 static int
2580 dissect_camel_CAMEL_CallResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2581 offset = dissect_ber_choice(actx, tree, tvb, offset,
2582 CAMEL_CallResult_choice, hf_index, ett_camel_CAMEL_CallResult,
2583 NULL);
2585 return offset;
2590 static int
2591 dissect_camel_OCTET_STRING_SIZE_bound__minFCIBillingChargingDataLength_bound__maxFCIBillingChargingDataLength(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2592 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2593 NULL);
2595 return offset;
2599 static const value_string camel_SendingSideID_vals[] = {
2600 { 0, "sendingSideID" },
2601 { 0, NULL }
2604 static const ber_choice_t SendingSideID_choice[] = {
2605 { 0, &hf_camel_sendingSideID , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_LegType },
2606 { 0, NULL, 0, 0, 0, NULL }
2609 static int
2610 dissect_camel_SendingSideID(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2611 offset = dissect_ber_choice(actx, tree, tvb, offset,
2612 SendingSideID_choice, hf_index, ett_camel_SendingSideID,
2613 NULL);
2615 return offset;
2619 static const ber_sequence_t T_fci_fCIBCCCAMELsequence1_sequence[] = {
2620 { &hf_camel_freeFormatData, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_bound__minFCIBillingChargingDataLength_bound__maxFCIBillingChargingDataLength },
2621 { &hf_camel_fCIBCCCAMELsequence1partyToCharge, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_SendingSideID },
2622 { &hf_camel_appendFreeFormatData, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AppendFreeFormatData },
2623 { NULL, 0, 0, 0, NULL }
2626 static int
2627 dissect_camel_T_fci_fCIBCCCAMELsequence1(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2628 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2629 T_fci_fCIBCCCAMELsequence1_sequence, hf_index, ett_camel_T_fci_fCIBCCCAMELsequence1);
2631 return offset;
2635 static const value_string camel_CAMEL_FCIBillingChargingCharacteristics_vals[] = {
2636 { 0, "fCIBCCCAMELsequence1" },
2637 { 0, NULL }
2640 static const ber_choice_t CAMEL_FCIBillingChargingCharacteristics_choice[] = {
2641 { 0, &hf_camel_fci_fCIBCCCAMELsequence1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_fci_fCIBCCCAMELsequence1 },
2642 { 0, NULL, 0, 0, 0, NULL }
2645 static int
2646 dissect_camel_CAMEL_FCIBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2647 offset = dissect_ber_choice(actx, tree, tvb, offset,
2648 CAMEL_FCIBillingChargingCharacteristics_choice, hf_index, ett_camel_CAMEL_FCIBillingChargingCharacteristics,
2649 NULL);
2651 return offset;
2656 static int
2657 dissect_camel_PDPID(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2658 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2659 NULL);
2661 return offset;
2665 static const ber_sequence_t T_fciGPRS_fCIBCCCAMELsequence1_sequence[] = {
2666 { &hf_camel_freeFormatData, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_bound__minFCIBillingChargingDataLength_bound__maxFCIBillingChargingDataLength },
2667 { &hf_camel_pDPID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPID },
2668 { &hf_camel_appendFreeFormatData, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AppendFreeFormatData },
2669 { NULL, 0, 0, 0, NULL }
2672 static int
2673 dissect_camel_T_fciGPRS_fCIBCCCAMELsequence1(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2674 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2675 T_fciGPRS_fCIBCCCAMELsequence1_sequence, hf_index, ett_camel_T_fciGPRS_fCIBCCCAMELsequence1);
2677 return offset;
2681 static const ber_sequence_t CAMEL_FCIGPRSBillingChargingCharacteristics_sequence[] = {
2682 { &hf_camel_fciGPRS_fCIBCCCAMELsequence1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_fciGPRS_fCIBCCCAMELsequence1 },
2683 { NULL, 0, 0, 0, NULL }
2686 static int
2687 dissect_camel_CAMEL_FCIGPRSBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2688 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2689 CAMEL_FCIGPRSBillingChargingCharacteristics_sequence, hf_index, ett_camel_CAMEL_FCIGPRSBillingChargingCharacteristics);
2691 return offset;
2695 static const ber_sequence_t T_fciSMS_fCIBCCCAMELsequence1_sequence[] = {
2696 { &hf_camel_freeFormatData, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_bound__minFCIBillingChargingDataLength_bound__maxFCIBillingChargingDataLength },
2697 { &hf_camel_appendFreeFormatData, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AppendFreeFormatData },
2698 { NULL, 0, 0, 0, NULL }
2701 static int
2702 dissect_camel_T_fciSMS_fCIBCCCAMELsequence1(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2703 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2704 T_fciSMS_fCIBCCCAMELsequence1_sequence, hf_index, ett_camel_T_fciSMS_fCIBCCCAMELsequence1);
2706 return offset;
2710 static const value_string camel_CAMEL_FCISMSBillingChargingCharacteristics_vals[] = {
2711 { 0, "fCIBCCCAMELsequence1" },
2712 { 0, NULL }
2715 static const ber_choice_t CAMEL_FCISMSBillingChargingCharacteristics_choice[] = {
2716 { 0, &hf_camel_fciSMS_fCIBCCCAMELsequence1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_fciSMS_fCIBCCCAMELsequence1 },
2717 { 0, NULL, 0, 0, 0, NULL }
2720 static int
2721 dissect_camel_CAMEL_FCISMSBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2722 offset = dissect_ber_choice(actx, tree, tvb, offset,
2723 CAMEL_FCISMSBillingChargingCharacteristics_choice, hf_index, ett_camel_CAMEL_FCISMSBillingChargingCharacteristics,
2724 NULL);
2726 return offset;
2730 static const ber_sequence_t CAMEL_SCIBillingChargingCharacteristicsAlt_sequence[] = {
2731 { NULL, 0, 0, 0, NULL }
2734 static int
2735 dissect_camel_CAMEL_SCIBillingChargingCharacteristicsAlt(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2736 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2737 CAMEL_SCIBillingChargingCharacteristicsAlt_sequence, hf_index, ett_camel_CAMEL_SCIBillingChargingCharacteristicsAlt);
2739 return offset;
2743 static const value_string camel_CAMEL_SCIBillingChargingCharacteristics_vals[] = {
2744 { 0, "aOCBeforeAnswer" },
2745 { 1, "aOCAfterAnswer" },
2746 { 2, "aOC-extension" },
2747 { 0, NULL }
2750 static const ber_choice_t CAMEL_SCIBillingChargingCharacteristics_choice[] = {
2751 { 0, &hf_camel_aOCBeforeAnswer, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_AOCBeforeAnswer },
2752 { 1, &hf_camel_aOCAfterAnswer, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_AOCSubsequent },
2753 { 2, &hf_camel_aOC_extension , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_CAMEL_SCIBillingChargingCharacteristicsAlt },
2754 { 0, NULL, 0, 0, 0, NULL }
2757 static int
2758 dissect_camel_CAMEL_SCIBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2759 offset = dissect_ber_choice(actx, tree, tvb, offset,
2760 CAMEL_SCIBillingChargingCharacteristics_choice, hf_index, ett_camel_CAMEL_SCIBillingChargingCharacteristics,
2761 NULL);
2763 return offset;
2767 static const ber_sequence_t CAMEL_SCIGPRSBillingChargingCharacteristics_sequence[] = {
2768 { &hf_camel_aOCGPRS , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_AOCGPRS },
2769 { &hf_camel_pDPID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPID },
2770 { NULL, 0, 0, 0, NULL }
2773 static int
2774 dissect_camel_CAMEL_SCIGPRSBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2775 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2776 CAMEL_SCIGPRSBillingChargingCharacteristics_sequence, hf_index, ett_camel_CAMEL_SCIGPRSBillingChargingCharacteristics);
2778 return offset;
2783 static int
2784 dissect_camel_Carrier(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2785 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2786 NULL);
2788 return offset;
2792 static const value_string camel_CGEncountered_vals[] = {
2793 { 0, "noCGencountered" },
2794 { 1, "manualCGencountered" },
2795 { 2, "scpOverload" },
2796 { 0, NULL }
2800 static int
2801 dissect_camel_CGEncountered(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2802 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2803 NULL);
2805 return offset;
2810 static int
2811 dissect_camel_ChargeIndicator(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2812 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2813 NULL);
2815 return offset;
2820 static int
2821 dissect_camel_LocationNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2822 tvbuff_t *parameter_tvb;
2823 proto_tree *subtree;
2825 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
2826 &parameter_tvb);
2829 if (!parameter_tvb)
2830 return offset;
2832 subtree = proto_item_add_subtree(actx->created_item, ett_camel_locationnumber);
2833 dissect_isup_location_number_parameter(parameter_tvb, actx->pinfo, subtree, NULL);
2835 return offset;
2840 static int
2841 dissect_camel_ChargeNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2842 offset = dissect_camel_LocationNumber(implicit_tag, tvb, offset, actx, tree, hf_index);
2844 return offset;
2849 static int
2850 dissect_camel_INTEGER_1_4294967295(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2851 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2852 NULL);
2854 return offset;
2858 static const value_string camel_ChargingCharacteristics_vals[] = {
2859 { 0, "maxTransferredVolume" },
2860 { 1, "maxElapsedTime" },
2861 { 0, NULL }
2864 static const ber_choice_t ChargingCharacteristics_choice[] = {
2865 { 0, &hf_camel_maxTransferredVolume, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_4294967295 },
2866 { 1, &hf_camel_maxElapsedTime, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_86400 },
2867 { 0, NULL, 0, 0, 0, NULL }
2870 static int
2871 dissect_camel_ChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2872 offset = dissect_ber_choice(actx, tree, tvb, offset,
2873 ChargingCharacteristics_choice, hf_index, ett_camel_ChargingCharacteristics,
2874 NULL);
2876 return offset;
2881 static int
2882 dissect_camel_INTEGER_0_4294967295(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2883 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2884 NULL);
2886 return offset;
2890 static const ber_sequence_t T_volumeIfTariffSwitch_sequence[] = {
2891 { &hf_camel_volumeSinceLastTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_4294967295 },
2892 { &hf_camel_volumeTariffSwitchInterval, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_4294967295 },
2893 { NULL, 0, 0, 0, NULL }
2896 static int
2897 dissect_camel_T_volumeIfTariffSwitch(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2898 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2899 T_volumeIfTariffSwitch_sequence, hf_index, ett_camel_T_volumeIfTariffSwitch);
2901 return offset;
2905 static const value_string camel_TransferredVolume_vals[] = {
2906 { 0, "volumeIfNoTariffSwitch" },
2907 { 1, "volumeIfTariffSwitch" },
2908 { 0, NULL }
2911 static const ber_choice_t TransferredVolume_choice[] = {
2912 { 0, &hf_camel_volumeIfNoTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_4294967295 },
2913 { 1, &hf_camel_volumeIfTariffSwitch, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_volumeIfTariffSwitch },
2914 { 0, NULL, 0, 0, 0, NULL }
2917 static int
2918 dissect_camel_TransferredVolume(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2919 offset = dissect_ber_choice(actx, tree, tvb, offset,
2920 TransferredVolume_choice, hf_index, ett_camel_TransferredVolume,
2921 NULL);
2923 return offset;
2928 static int
2929 dissect_camel_INTEGER_0_86400(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2930 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
2931 NULL);
2933 return offset;
2937 static const ber_sequence_t T_timeGPRSIfTariffSwitch_sequence[] = {
2938 { &hf_camel_timeGPRSSinceLastTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_86400 },
2939 { &hf_camel_timeGPRSTariffSwitchInterval, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_86400 },
2940 { NULL, 0, 0, 0, NULL }
2943 static int
2944 dissect_camel_T_timeGPRSIfTariffSwitch(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2945 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2946 T_timeGPRSIfTariffSwitch_sequence, hf_index, ett_camel_T_timeGPRSIfTariffSwitch);
2948 return offset;
2952 static const value_string camel_ElapsedTime_vals[] = {
2953 { 0, "timeGPRSIfNoTariffSwitch" },
2954 { 1, "timeGPRSIfTariffSwitch" },
2955 { 0, NULL }
2958 static const ber_choice_t ElapsedTime_choice[] = {
2959 { 0, &hf_camel_timeGPRSIfNoTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_86400 },
2960 { 1, &hf_camel_timeGPRSIfTariffSwitch, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_timeGPRSIfTariffSwitch },
2961 { 0, NULL, 0, 0, 0, NULL }
2964 static int
2965 dissect_camel_ElapsedTime(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2966 offset = dissect_ber_choice(actx, tree, tvb, offset,
2967 ElapsedTime_choice, hf_index, ett_camel_ElapsedTime,
2968 NULL);
2970 return offset;
2974 static const value_string camel_ChargingResult_vals[] = {
2975 { 0, "transferredVolume" },
2976 { 1, "elapsedTime" },
2977 { 0, NULL }
2980 static const ber_choice_t ChargingResult_choice[] = {
2981 { 0, &hf_camel_transferredVolume, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_TransferredVolume },
2982 { 1, &hf_camel_elapsedTime , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_ElapsedTime },
2983 { 0, NULL, 0, 0, 0, NULL }
2986 static int
2987 dissect_camel_ChargingResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2988 offset = dissect_ber_choice(actx, tree, tvb, offset,
2989 ChargingResult_choice, hf_index, ett_camel_ChargingResult,
2990 NULL);
2992 return offset;
2997 static int
2998 dissect_camel_INTEGER_0_255(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2999 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3000 NULL);
3002 return offset;
3006 static const ber_sequence_t T_rO_VolumeIfTariffSwitch_sequence[] = {
3007 { &hf_camel_rO_VolumeSinceLastTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_255 },
3008 { &hf_camel_rO_VolumeTariffSwitchInterval, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_255 },
3009 { NULL, 0, 0, 0, NULL }
3012 static int
3013 dissect_camel_T_rO_VolumeIfTariffSwitch(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3014 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3015 T_rO_VolumeIfTariffSwitch_sequence, hf_index, ett_camel_T_rO_VolumeIfTariffSwitch);
3017 return offset;
3021 static const value_string camel_TransferredVolumeRollOver_vals[] = {
3022 { 0, "rO-VolumeIfNoTariffSwitch" },
3023 { 1, "rO-VolumeIfTariffSwitch" },
3024 { 0, NULL }
3027 static const ber_choice_t TransferredVolumeRollOver_choice[] = {
3028 { 0, &hf_camel_rO_VolumeIfNoTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_255 },
3029 { 1, &hf_camel_rO_VolumeIfTariffSwitch, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_rO_VolumeIfTariffSwitch },
3030 { 0, NULL, 0, 0, 0, NULL }
3033 static int
3034 dissect_camel_TransferredVolumeRollOver(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3035 offset = dissect_ber_choice(actx, tree, tvb, offset,
3036 TransferredVolumeRollOver_choice, hf_index, ett_camel_TransferredVolumeRollOver,
3037 NULL);
3039 return offset;
3043 static const ber_sequence_t T_rO_TimeGPRSIfTariffSwitch_sequence[] = {
3044 { &hf_camel_rO_TimeGPRSSinceLastTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_255 },
3045 { &hf_camel_rO_TimeGPRSTariffSwitchInterval, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_255 },
3046 { NULL, 0, 0, 0, NULL }
3049 static int
3050 dissect_camel_T_rO_TimeGPRSIfTariffSwitch(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3051 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3052 T_rO_TimeGPRSIfTariffSwitch_sequence, hf_index, ett_camel_T_rO_TimeGPRSIfTariffSwitch);
3054 return offset;
3058 static const value_string camel_ElapsedTimeRollOver_vals[] = {
3059 { 0, "rO-TimeGPRSIfNoTariffSwitch" },
3060 { 1, "rO-TimeGPRSIfTariffSwitch" },
3061 { 0, NULL }
3064 static const ber_choice_t ElapsedTimeRollOver_choice[] = {
3065 { 0, &hf_camel_rO_TimeGPRSIfNoTariffSwitch, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_255 },
3066 { 1, &hf_camel_rO_TimeGPRSIfTariffSwitch, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_rO_TimeGPRSIfTariffSwitch },
3067 { 0, NULL, 0, 0, 0, NULL }
3070 static int
3071 dissect_camel_ElapsedTimeRollOver(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3072 offset = dissect_ber_choice(actx, tree, tvb, offset,
3073 ElapsedTimeRollOver_choice, hf_index, ett_camel_ElapsedTimeRollOver,
3074 NULL);
3076 return offset;
3080 static const value_string camel_ChargingRollOver_vals[] = {
3081 { 0, "transferredVolumeRollOver" },
3082 { 1, "elapsedTimeRollOver" },
3083 { 0, NULL }
3086 static const ber_choice_t ChargingRollOver_choice[] = {
3087 { 0, &hf_camel_transferredVolumeRollOver, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_TransferredVolumeRollOver },
3088 { 1, &hf_camel_elapsedTimeRollOver, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_ElapsedTimeRollOver },
3089 { 0, NULL, 0, 0, 0, NULL }
3092 static int
3093 dissect_camel_ChargingRollOver(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3094 offset = dissect_ber_choice(actx, tree, tvb, offset,
3095 ChargingRollOver_choice, hf_index, ett_camel_ChargingRollOver,
3096 NULL);
3098 return offset;
3102 static const value_string camel_ErrorTreatment_vals[] = {
3103 { 0, "stdErrorAndInfo" },
3104 { 1, "help" },
3105 { 2, "repeatPrompt" },
3106 { 0, NULL }
3110 static int
3111 dissect_camel_ErrorTreatment(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3112 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3113 NULL);
3115 return offset;
3119 static const ber_sequence_t CollectedDigits_sequence[] = {
3120 { &hf_camel_minimumNbOfDigits, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_30 },
3121 { &hf_camel_maximumNbOfDigits, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_30 },
3122 { &hf_camel_endOfReplyDigit, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1_2 },
3123 { &hf_camel_cancelDigit , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1_2 },
3124 { &hf_camel_startDigit , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1_2 },
3125 { &hf_camel_firstDigitTimeOut, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_127 },
3126 { &hf_camel_interDigitTimeOut, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_127 },
3127 { &hf_camel_errorTreatment, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ErrorTreatment },
3128 { &hf_camel_interruptableAnnInd, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
3129 { &hf_camel_voiceInformation, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
3130 { &hf_camel_voiceBack , BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
3131 { NULL, 0, 0, 0, NULL }
3134 static int
3135 dissect_camel_CollectedDigits(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3136 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3137 CollectedDigits_sequence, hf_index, ett_camel_CollectedDigits);
3139 return offset;
3143 static const value_string camel_CollectedInfo_vals[] = {
3144 { 0, "collectedDigits" },
3145 { 0, NULL }
3148 static const ber_choice_t CollectedInfo_choice[] = {
3149 { 0, &hf_camel_collectedDigits, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_CollectedDigits },
3150 { 0, NULL, 0, 0, 0, NULL }
3153 static int
3154 dissect_camel_CollectedInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3155 offset = dissect_ber_choice(actx, tree, tvb, offset,
3156 CollectedInfo_choice, hf_index, ett_camel_CollectedInfo,
3157 NULL);
3159 return offset;
3163 static const value_string camel_ConnectedNumberTreatmentInd_vals[] = {
3164 { 0, "noINImpact" },
3165 { 1, "presentationRestricted" },
3166 { 2, "presentCalledINNumber" },
3167 { 3, "presentCallINNumberRestricted" },
3168 { 0, NULL }
3172 static int
3173 dissect_camel_ConnectedNumberTreatmentInd(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3174 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3175 NULL);
3177 return offset;
3181 static const value_string camel_ControlType_vals[] = {
3182 { 0, "sCPOverloaded" },
3183 { 1, "manuallyInitiated" },
3184 { 0, NULL }
3188 static int
3189 dissect_camel_ControlType(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3190 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3191 NULL);
3193 return offset;
3198 static int
3199 dissect_camel_ScfID(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3200 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
3201 NULL);
3203 return offset;
3207 static const ber_sequence_t CompoundCriteria_sequence[] = {
3208 { &hf_camel_basicGapCriteria, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_BasicGapCriteria },
3209 { &hf_camel_scfID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ScfID },
3210 { NULL, 0, 0, 0, NULL }
3213 static int
3214 dissect_camel_CompoundCriteria(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3215 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3216 CompoundCriteria_sequence, hf_index, ett_camel_CompoundCriteria);
3218 return offset;
3223 static int
3224 dissect_camel_CorrelationID(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3225 offset = dissect_camel_Digits(implicit_tag, tvb, offset, actx, tree, hf_index);
3227 return offset;
3232 static int
3233 dissect_camel_DateAndTime(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3237 * date_option = 1 european dd:mm:yyyy
3238 * date_option = 2 american mm:dd:yyyy
3242 * Output should be HH:MM:SS;dd/mm/yyyy
3243 * if european is selected, and HH:MM:SS;mm/dd/yyyy
3244 * otherwise.
3247 uint8_t digit_pair;
3248 uint8_t i = 0, curr_offset;
3249 char camel_time[CAMEL_DATE_AND_TIME_LEN];
3250 char c[CAMEL_DATE_AND_TIME_LEN]; /*temporary container*/
3252 /* 2 digits per octet, 7 octets total + 5 delimiters */
3254 for (curr_offset = 0; curr_offset < 7 ; curr_offset++)
3255 /*Loop to extract date*/
3257 digit_pair = tvb_get_uint8(tvb, curr_offset);
3259 proto_tree_add_uint(tree,
3260 hf_digit,
3261 tvb,
3262 curr_offset,
3264 digit_pair & 0x0F);
3266 proto_tree_add_uint(tree,
3267 hf_digit,
3268 tvb,
3269 curr_offset,
3271 digit_pair >>4);
3274 c[i] = camel_number_to_char( digit_pair & 0x0F);
3275 i++;
3276 c[i] = camel_number_to_char( digit_pair >>4);
3277 i++;
3280 /* Pretty print date */
3281 /* XXX - Should we use snprintf here instead of assembling the string by
3282 * hand? */
3284 camel_time[0] = c[8];
3285 camel_time[1] = c[9];
3286 camel_time[2] = ':';
3287 camel_time[3] = c[10];
3288 camel_time[4] = c[11];
3289 camel_time[5] = ':';
3290 camel_time[6] = c[12];
3291 camel_time[7] = c[13];
3292 camel_time[8] = ';';
3293 if ( EUROPEAN_DATE == date_format) /*european*/
3295 camel_time[9] = c[6]; /*day*/
3296 camel_time[10] = c[7];
3297 camel_time[11] = '/';
3298 camel_time[12] = c[4]; /*month*/
3299 camel_time[13] = c[5];
3301 else /*american*/
3303 camel_time[9] = c[4]; /*month*/
3304 camel_time[10] = c[5];
3305 camel_time[11] = '/';
3306 camel_time[12] = c[6]; /*day*/
3307 camel_time[13] = c[7];
3309 camel_time[14] = '/';
3310 camel_time[15] = c[0];
3311 camel_time[16] = c[1];
3312 camel_time[17] = c[2];
3313 camel_time[18] = c[3];
3315 camel_time[CAMEL_DATE_AND_TIME_LEN - 1] = '\0';
3317 /*start = 0, length = 7*/
3319 proto_tree_add_string(tree,
3320 hf_index,
3321 tvb,
3324 camel_time);
3326 return 7; /* 7 octets eaten*/
3328 return offset;
3332 static const ber_sequence_t DestinationRoutingAddress_sequence_of[1] = {
3333 { &hf_camel_DestinationRoutingAddress_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_camel_CalledPartyNumber },
3336 static int
3337 dissect_camel_DestinationRoutingAddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3338 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3339 DestinationRoutingAddress_sequence_of, hf_index, ett_camel_DestinationRoutingAddress);
3341 return offset;
3345 static const value_string camel_InitiatorOfServiceChange_vals[] = {
3346 { 0, "a-side" },
3347 { 1, "b-side" },
3348 { 0, NULL }
3352 static int
3353 dissect_camel_InitiatorOfServiceChange(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3354 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3355 NULL);
3357 return offset;
3361 static const value_string camel_NatureOfServiceChange_vals[] = {
3362 { 0, "userInitiated" },
3363 { 1, "networkInitiated" },
3364 { 0, NULL }
3368 static int
3369 dissect_camel_NatureOfServiceChange(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3370 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3371 NULL);
3373 return offset;
3377 static const ber_sequence_t T_oServiceChangeSpecificInfo_sequence[] = {
3378 { &hf_camel_ext_basicServiceCode, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_Ext_BasicServiceCode },
3379 { &hf_camel_initiatorOfServiceChange, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_InitiatorOfServiceChange },
3380 { &hf_camel_natureOfServiceChange, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NatureOfServiceChange },
3381 { NULL, 0, 0, 0, NULL }
3384 static int
3385 dissect_camel_T_oServiceChangeSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3386 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3387 T_oServiceChangeSpecificInfo_sequence, hf_index, ett_camel_T_oServiceChangeSpecificInfo);
3389 return offset;
3393 static const ber_sequence_t T_tServiceChangeSpecificInfo_sequence[] = {
3394 { &hf_camel_ext_basicServiceCode, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_Ext_BasicServiceCode },
3395 { &hf_camel_initiatorOfServiceChange, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_InitiatorOfServiceChange },
3396 { &hf_camel_natureOfServiceChange, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NatureOfServiceChange },
3397 { NULL, 0, 0, 0, NULL }
3400 static int
3401 dissect_camel_T_tServiceChangeSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3402 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3403 T_tServiceChangeSpecificInfo_sequence, hf_index, ett_camel_T_tServiceChangeSpecificInfo);
3405 return offset;
3409 static const ber_sequence_t T_collectedInfoSpecificInfo_sequence[] = {
3410 { &hf_camel_calledPartyNumber, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CalledPartyNumber },
3411 { NULL, 0, 0, 0, NULL }
3414 static int
3415 dissect_camel_T_collectedInfoSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3416 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3417 T_collectedInfoSpecificInfo_sequence, hf_index, ett_camel_T_collectedInfoSpecificInfo);
3419 return offset;
3423 static const ber_sequence_t DpSpecificInfoAlt_sequence[] = {
3424 { &hf_camel_oServiceChangeSpecificInfo, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_oServiceChangeSpecificInfo },
3425 { &hf_camel_tServiceChangeSpecificInfo, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_tServiceChangeSpecificInfo },
3426 { &hf_camel_collectedInfoSpecificInfo, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_T_collectedInfoSpecificInfo },
3427 { NULL, 0, 0, 0, NULL }
3430 static int
3431 dissect_camel_DpSpecificInfoAlt(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3432 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3433 DpSpecificInfoAlt_sequence, hf_index, ett_camel_DpSpecificInfoAlt);
3435 return offset;
3440 static int
3441 dissect_camel_T_pDPTypeOrganization(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3443 tvbuff_t *parameter_tvb;
3445 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
3446 &parameter_tvb);
3449 if (!parameter_tvb)
3450 return offset;
3451 PDPTypeOrganization = (tvb_get_uint8(parameter_tvb,0) &0x0f);
3453 return offset;
3458 static int
3459 dissect_camel_T_pDPTypeNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3461 tvbuff_t *parameter_tvb;
3462 proto_tree *subtree;
3464 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
3465 &parameter_tvb);
3468 if (!parameter_tvb)
3469 return offset;
3470 PDPTypeNumber = tvb_get_uint8(parameter_tvb,0);
3471 subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber);
3472 switch (PDPTypeOrganization){
3473 case 0: /* ETSI */
3474 proto_tree_add_item(subtree, hf_camel_PDPTypeNumber_etsi, parameter_tvb, 0, 1, ENC_BIG_ENDIAN);
3475 break;
3476 case 1: /* IETF */
3477 proto_tree_add_item(subtree, hf_camel_PDPTypeNumber_ietf, parameter_tvb, 0, 1, ENC_BIG_ENDIAN);
3478 break;
3479 default:
3480 break;
3483 return offset;
3488 static int
3489 dissect_camel_T_pDPAddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3491 tvbuff_t *parameter_tvb;
3492 proto_tree *subtree;
3494 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
3495 &parameter_tvb);
3498 if (!parameter_tvb)
3499 return offset;
3500 subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber);
3501 switch (PDPTypeOrganization){
3502 case 0: /* ETSI */
3503 break;
3504 case 1: /* IETF */
3505 switch(PDPTypeNumber){
3506 case 0x21: /* IPv4 */
3507 proto_tree_add_item(subtree, hf_camel_PDPAddress_IPv4, parameter_tvb, 0, tvb_reported_length(parameter_tvb), ENC_BIG_ENDIAN);
3508 break;
3509 case 0x57: /* IPv6 */
3510 proto_tree_add_item(subtree, hf_camel_PDPAddress_IPv6, parameter_tvb, 0, tvb_reported_length(parameter_tvb), ENC_NA);
3511 break;
3512 default:
3513 break;
3515 default:
3516 break;
3520 return offset;
3524 static const ber_sequence_t EndUserAddress_sequence[] = {
3525 { &hf_camel_pDPTypeOrganization, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_pDPTypeOrganization },
3526 { &hf_camel_pDPTypeNumber , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_pDPTypeNumber },
3527 { &hf_camel_pDPAddress , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_T_pDPAddress },
3528 { NULL, 0, 0, 0, NULL }
3531 static int
3532 dissect_camel_EndUserAddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3533 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3534 EndUserAddress_sequence, hf_index, ett_camel_EndUserAddress);
3536 return offset;
3540 static const ber_sequence_t T_routeSelectFailureSpecificInfo_sequence[] = {
3541 { &hf_camel_routeSelectfailureCause, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Cause },
3542 { NULL, 0, 0, 0, NULL }
3545 static int
3546 dissect_camel_T_routeSelectFailureSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3547 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3548 T_routeSelectFailureSpecificInfo_sequence, hf_index, ett_camel_T_routeSelectFailureSpecificInfo);
3550 return offset;
3554 static const ber_sequence_t T_oCalledPartyBusySpecificInfo_sequence[] = {
3555 { &hf_camel_busyCause , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Cause },
3556 { NULL, 0, 0, 0, NULL }
3559 static int
3560 dissect_camel_T_oCalledPartyBusySpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3561 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3562 T_oCalledPartyBusySpecificInfo_sequence, hf_index, ett_camel_T_oCalledPartyBusySpecificInfo);
3564 return offset;
3568 static const ber_sequence_t T_oNoAnswerSpecificInfo_sequence[] = {
3569 { NULL, 0, 0, 0, NULL }
3572 static int
3573 dissect_camel_T_oNoAnswerSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3574 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3575 T_oNoAnswerSpecificInfo_sequence, hf_index, ett_camel_T_oNoAnswerSpecificInfo);
3577 return offset;
3581 static const ber_sequence_t T_oAnswerSpecificInfo_sequence[] = {
3582 { &hf_camel_destinationAddress, BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CalledPartyNumber },
3583 { &hf_camel_or_Call , BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
3584 { &hf_camel_forwardedCall , BER_CLASS_CON, 52, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
3585 { &hf_camel_chargeIndicator, BER_CLASS_CON, 53, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ChargeIndicator },
3586 { &hf_camel_ext_basicServiceCode, BER_CLASS_CON, 54, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_Ext_BasicServiceCode },
3587 { &hf_camel_ext_basicServiceCode2, BER_CLASS_CON, 55, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_Ext_BasicServiceCode },
3588 { NULL, 0, 0, 0, NULL }
3591 static int
3592 dissect_camel_T_oAnswerSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3593 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3594 T_oAnswerSpecificInfo_sequence, hf_index, ett_camel_T_oAnswerSpecificInfo);
3596 return offset;
3600 static const value_string camel_T_omidCallEvents_vals[] = {
3601 { 3, "dTMFDigitsCompleted" },
3602 { 4, "dTMFDigitsTimeOut" },
3603 { 0, NULL }
3606 static const ber_choice_t T_omidCallEvents_choice[] = {
3607 { 3, &hf_camel_dTMFDigitsCompleted, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_camel_Digits },
3608 { 4, &hf_camel_dTMFDigitsTimeOut, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_camel_Digits },
3609 { 0, NULL, 0, 0, 0, NULL }
3612 static int
3613 dissect_camel_T_omidCallEvents(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3614 offset = dissect_ber_choice(actx, tree, tvb, offset,
3615 T_omidCallEvents_choice, hf_index, ett_camel_T_omidCallEvents,
3616 NULL);
3618 return offset;
3622 static const ber_sequence_t T_oMidCallSpecificInfo_sequence[] = {
3623 { &hf_camel_omidCallEvents, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_T_omidCallEvents },
3624 { NULL, 0, 0, 0, NULL }
3627 static int
3628 dissect_camel_T_oMidCallSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3629 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3630 T_oMidCallSpecificInfo_sequence, hf_index, ett_camel_T_oMidCallSpecificInfo);
3632 return offset;
3636 static const ber_sequence_t T_oDisconnectSpecificInfo_sequence[] = {
3637 { &hf_camel_releaseCause , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Cause },
3638 { NULL, 0, 0, 0, NULL }
3641 static int
3642 dissect_camel_T_oDisconnectSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3643 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3644 T_oDisconnectSpecificInfo_sequence, hf_index, ett_camel_T_oDisconnectSpecificInfo);
3646 return offset;
3650 static const ber_sequence_t T_tBusySpecificInfo_sequence[] = {
3651 { &hf_camel_busyCause , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Cause },
3652 { &hf_camel_callForwarded , BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
3653 { &hf_camel_routeNotPermitted, BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
3654 { &hf_camel_forwardingDestinationNumber, BER_CLASS_CON, 52, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CalledPartyNumber },
3655 { NULL, 0, 0, 0, NULL }
3658 static int
3659 dissect_camel_T_tBusySpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3660 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3661 T_tBusySpecificInfo_sequence, hf_index, ett_camel_T_tBusySpecificInfo);
3663 return offset;
3667 static const ber_sequence_t T_tNoAnswerSpecificInfo_sequence[] = {
3668 { &hf_camel_callForwarded , BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
3669 { &hf_camel_forwardingDestinationNumber, BER_CLASS_CON, 52, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CalledPartyNumber },
3670 { NULL, 0, 0, 0, NULL }
3673 static int
3674 dissect_camel_T_tNoAnswerSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3675 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3676 T_tNoAnswerSpecificInfo_sequence, hf_index, ett_camel_T_tNoAnswerSpecificInfo);
3678 return offset;
3682 static const ber_sequence_t T_tAnswerSpecificInfo_sequence[] = {
3683 { &hf_camel_destinationAddress, BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CalledPartyNumber },
3684 { &hf_camel_or_Call , BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
3685 { &hf_camel_forwardedCall , BER_CLASS_CON, 52, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
3686 { &hf_camel_chargeIndicator, BER_CLASS_CON, 53, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ChargeIndicator },
3687 { &hf_camel_ext_basicServiceCode, BER_CLASS_CON, 54, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_Ext_BasicServiceCode },
3688 { &hf_camel_ext_basicServiceCode2, BER_CLASS_CON, 55, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_Ext_BasicServiceCode },
3689 { NULL, 0, 0, 0, NULL }
3692 static int
3693 dissect_camel_T_tAnswerSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3694 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3695 T_tAnswerSpecificInfo_sequence, hf_index, ett_camel_T_tAnswerSpecificInfo);
3697 return offset;
3701 static const value_string camel_T_tmidCallEvents_vals[] = {
3702 { 3, "dTMFDigitsCompleted" },
3703 { 4, "dTMFDigitsTimeOut" },
3704 { 0, NULL }
3707 static const ber_choice_t T_tmidCallEvents_choice[] = {
3708 { 3, &hf_camel_dTMFDigitsCompleted, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_camel_Digits },
3709 { 4, &hf_camel_dTMFDigitsTimeOut, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_camel_Digits },
3710 { 0, NULL, 0, 0, 0, NULL }
3713 static int
3714 dissect_camel_T_tmidCallEvents(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3715 offset = dissect_ber_choice(actx, tree, tvb, offset,
3716 T_tmidCallEvents_choice, hf_index, ett_camel_T_tmidCallEvents,
3717 NULL);
3719 return offset;
3723 static const ber_sequence_t T_tMidCallSpecificInfo_sequence[] = {
3724 { &hf_camel_tmidCallEvents, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_T_tmidCallEvents },
3725 { NULL, 0, 0, 0, NULL }
3728 static int
3729 dissect_camel_T_tMidCallSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3730 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3731 T_tMidCallSpecificInfo_sequence, hf_index, ett_camel_T_tMidCallSpecificInfo);
3733 return offset;
3737 static const ber_sequence_t T_tDisconnectSpecificInfo_sequence[] = {
3738 { &hf_camel_releaseCause , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Cause },
3739 { NULL, 0, 0, 0, NULL }
3742 static int
3743 dissect_camel_T_tDisconnectSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3744 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3745 T_tDisconnectSpecificInfo_sequence, hf_index, ett_camel_T_tDisconnectSpecificInfo);
3747 return offset;
3751 static const ber_sequence_t T_oTermSeizedSpecificInfo_sequence[] = {
3752 { &hf_camel_locationInformation, BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_LocationInformation },
3753 { NULL, 0, 0, 0, NULL }
3756 static int
3757 dissect_camel_T_oTermSeizedSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3758 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3759 T_oTermSeizedSpecificInfo_sequence, hf_index, ett_camel_T_oTermSeizedSpecificInfo);
3761 return offset;
3765 static const ber_sequence_t T_callAcceptedSpecificInfo_sequence[] = {
3766 { &hf_camel_locationInformation, BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_LocationInformation },
3767 { NULL, 0, 0, 0, NULL }
3770 static int
3771 dissect_camel_T_callAcceptedSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3772 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3773 T_callAcceptedSpecificInfo_sequence, hf_index, ett_camel_T_callAcceptedSpecificInfo);
3775 return offset;
3779 static const ber_sequence_t T_oAbandonSpecificInfo_sequence[] = {
3780 { &hf_camel_routeNotPermitted, BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
3781 { NULL, 0, 0, 0, NULL }
3784 static int
3785 dissect_camel_T_oAbandonSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3786 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3787 T_oAbandonSpecificInfo_sequence, hf_index, ett_camel_T_oAbandonSpecificInfo);
3789 return offset;
3793 static const ber_sequence_t MetDPCriterionAlt_sequence[] = {
3794 { NULL, 0, 0, 0, NULL }
3797 static int
3798 dissect_camel_MetDPCriterionAlt(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3799 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3800 MetDPCriterionAlt_sequence, hf_index, ett_camel_MetDPCriterionAlt);
3802 return offset;
3806 static const value_string camel_MetDPCriterion_vals[] = {
3807 { 0, "enteringCellGlobalId" },
3808 { 1, "leavingCellGlobalId" },
3809 { 2, "enteringServiceAreaId" },
3810 { 3, "leavingServiceAreaId" },
3811 { 4, "enteringLocationAreaId" },
3812 { 5, "leavingLocationAreaId" },
3813 { 6, "inter-SystemHandOverToUMTS" },
3814 { 7, "inter-SystemHandOverToGSM" },
3815 { 8, "inter-PLMNHandOver" },
3816 { 9, "inter-MSCHandOver" },
3817 { 10, "metDPCriterionAlt" },
3818 { 0, NULL }
3821 static const ber_choice_t MetDPCriterion_choice[] = {
3822 { 0, &hf_camel_enteringCellGlobalId, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength },
3823 { 1, &hf_camel_leavingCellGlobalId, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength },
3824 { 2, &hf_camel_enteringServiceAreaId, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength },
3825 { 3, &hf_camel_leavingServiceAreaId, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength },
3826 { 4, &hf_camel_enteringLocationAreaId, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_gsm_map_LAIFixedLength },
3827 { 5, &hf_camel_leavingLocationAreaId, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_gsm_map_LAIFixedLength },
3828 { 6, &hf_camel_inter_SystemHandOverToUMTS, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
3829 { 7, &hf_camel_inter_SystemHandOverToGSM, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
3830 { 8, &hf_camel_inter_PLMNHandOver, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
3831 { 9, &hf_camel_inter_MSCHandOver, BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
3832 { 10, &hf_camel_metDPCriterionAlt, BER_CLASS_CON, 10, BER_FLAGS_IMPLTAG, dissect_camel_MetDPCriterionAlt },
3833 { 0, NULL, 0, 0, 0, NULL }
3836 static int
3837 dissect_camel_MetDPCriterion(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3838 offset = dissect_ber_choice(actx, tree, tvb, offset,
3839 MetDPCriterion_choice, hf_index, ett_camel_MetDPCriterion,
3840 NULL);
3842 return offset;
3846 static const ber_sequence_t MetDPCriteriaList_sequence_of[1] = {
3847 { &hf_camel_MetDPCriteriaList_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_MetDPCriterion },
3850 static int
3851 dissect_camel_MetDPCriteriaList(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3852 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3853 MetDPCriteriaList_sequence_of, hf_index, ett_camel_MetDPCriteriaList);
3855 return offset;
3859 static const ber_sequence_t T_oChangeOfPositionSpecificInfo_sequence[] = {
3860 { &hf_camel_locationInformation, BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_LocationInformation },
3861 { &hf_camel_metDPCriteriaList, BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_MetDPCriteriaList },
3862 { NULL, 0, 0, 0, NULL }
3865 static int
3866 dissect_camel_T_oChangeOfPositionSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3867 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3868 T_oChangeOfPositionSpecificInfo_sequence, hf_index, ett_camel_T_oChangeOfPositionSpecificInfo);
3870 return offset;
3874 static const ber_sequence_t T_tChangeOfPositionSpecificInfo_sequence[] = {
3875 { &hf_camel_locationInformation, BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_LocationInformation },
3876 { &hf_camel_metDPCriteriaList, BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_MetDPCriteriaList },
3877 { NULL, 0, 0, 0, NULL }
3880 static int
3881 dissect_camel_T_tChangeOfPositionSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3882 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3883 T_tChangeOfPositionSpecificInfo_sequence, hf_index, ett_camel_T_tChangeOfPositionSpecificInfo);
3885 return offset;
3889 static const value_string camel_EventSpecificInformationBCSM_vals[] = {
3890 { 2, "routeSelectFailureSpecificInfo" },
3891 { 3, "oCalledPartyBusySpecificInfo" },
3892 { 4, "oNoAnswerSpecificInfo" },
3893 { 5, "oAnswerSpecificInfo" },
3894 { 6, "oMidCallSpecificInfo" },
3895 { 7, "oDisconnectSpecificInfo" },
3896 { 8, "tBusySpecificInfo" },
3897 { 9, "tNoAnswerSpecificInfo" },
3898 { 10, "tAnswerSpecificInfo" },
3899 { 11, "tMidCallSpecificInfo" },
3900 { 12, "tDisconnectSpecificInfo" },
3901 { 13, "oTermSeizedSpecificInfo" },
3902 { 20, "callAcceptedSpecificInfo" },
3903 { 21, "oAbandonSpecificInfo" },
3904 { 50, "oChangeOfPositionSpecificInfo" },
3905 { 51, "tChangeOfPositionSpecificInfo" },
3906 { 52, "dpSpecificInfoAlt" },
3907 { 0, NULL }
3910 static const ber_choice_t EventSpecificInformationBCSM_choice[] = {
3911 { 2, &hf_camel_routeSelectFailureSpecificInfo, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_T_routeSelectFailureSpecificInfo },
3912 { 3, &hf_camel_oCalledPartyBusySpecificInfo, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_camel_T_oCalledPartyBusySpecificInfo },
3913 { 4, &hf_camel_oNoAnswerSpecificInfo, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_camel_T_oNoAnswerSpecificInfo },
3914 { 5, &hf_camel_oAnswerSpecificInfo, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_camel_T_oAnswerSpecificInfo },
3915 { 6, &hf_camel_oMidCallSpecificInfo, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_camel_T_oMidCallSpecificInfo },
3916 { 7, &hf_camel_oDisconnectSpecificInfo, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_camel_T_oDisconnectSpecificInfo },
3917 { 8, &hf_camel_tBusySpecificInfo, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_camel_T_tBusySpecificInfo },
3918 { 9, &hf_camel_tNoAnswerSpecificInfo, BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_camel_T_tNoAnswerSpecificInfo },
3919 { 10, &hf_camel_tAnswerSpecificInfo, BER_CLASS_CON, 10, BER_FLAGS_IMPLTAG, dissect_camel_T_tAnswerSpecificInfo },
3920 { 11, &hf_camel_tMidCallSpecificInfo, BER_CLASS_CON, 11, BER_FLAGS_IMPLTAG, dissect_camel_T_tMidCallSpecificInfo },
3921 { 12, &hf_camel_tDisconnectSpecificInfo, BER_CLASS_CON, 12, BER_FLAGS_IMPLTAG, dissect_camel_T_tDisconnectSpecificInfo },
3922 { 13, &hf_camel_oTermSeizedSpecificInfo, BER_CLASS_CON, 13, BER_FLAGS_IMPLTAG, dissect_camel_T_oTermSeizedSpecificInfo },
3923 { 20, &hf_camel_callAcceptedSpecificInfo, BER_CLASS_CON, 20, BER_FLAGS_IMPLTAG, dissect_camel_T_callAcceptedSpecificInfo },
3924 { 21, &hf_camel_oAbandonSpecificInfo, BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_camel_T_oAbandonSpecificInfo },
3925 { 50, &hf_camel_oChangeOfPositionSpecificInfo, BER_CLASS_CON, 50, BER_FLAGS_IMPLTAG, dissect_camel_T_oChangeOfPositionSpecificInfo },
3926 { 51, &hf_camel_tChangeOfPositionSpecificInfo, BER_CLASS_CON, 51, BER_FLAGS_IMPLTAG, dissect_camel_T_tChangeOfPositionSpecificInfo },
3927 { 52, &hf_camel_dpSpecificInfoAlt, BER_CLASS_CON, 52, BER_FLAGS_IMPLTAG, dissect_camel_DpSpecificInfoAlt },
3928 { 0, NULL, 0, 0, 0, NULL }
3931 static int
3932 dissect_camel_EventSpecificInformationBCSM(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3933 offset = dissect_ber_choice(actx, tree, tvb, offset,
3934 EventSpecificInformationBCSM_choice, hf_index, ett_camel_EventSpecificInformationBCSM,
3935 NULL);
3937 return offset;
3941 static const value_string camel_MO_SMSCause_vals[] = {
3942 { 0, "systemFailure" },
3943 { 1, "unexpectedDataValue" },
3944 { 2, "facilityNotSupported" },
3945 { 3, "sM-DeliveryFailure" },
3946 { 4, "releaseFromRadioInterface" },
3947 { 0, NULL }
3951 static int
3952 dissect_camel_MO_SMSCause(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3953 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3954 NULL);
3956 return offset;
3960 static const ber_sequence_t T_o_smsFailureSpecificInfo_sequence[] = {
3961 { &hf_camel_mo_smsfailureCause, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_MO_SMSCause },
3962 { NULL, 0, 0, 0, NULL }
3965 static int
3966 dissect_camel_T_o_smsFailureSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3967 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3968 T_o_smsFailureSpecificInfo_sequence, hf_index, ett_camel_T_o_smsFailureSpecificInfo);
3970 return offset;
3974 static const ber_sequence_t T_o_smsSubmissionSpecificInfo_sequence[] = {
3975 { NULL, 0, 0, 0, NULL }
3978 static int
3979 dissect_camel_T_o_smsSubmissionSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3980 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3981 T_o_smsSubmissionSpecificInfo_sequence, hf_index, ett_camel_T_o_smsSubmissionSpecificInfo);
3983 return offset;
3988 static int
3989 dissect_camel_MT_SMSCause(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3990 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
3991 NULL);
3993 return offset;
3997 static const ber_sequence_t T_t_smsFailureSpecificInfo_sequence[] = {
3998 { &hf_camel_t_smsfailureCause, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_MT_SMSCause },
3999 { NULL, 0, 0, 0, NULL }
4002 static int
4003 dissect_camel_T_t_smsFailureSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4004 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4005 T_t_smsFailureSpecificInfo_sequence, hf_index, ett_camel_T_t_smsFailureSpecificInfo);
4007 return offset;
4011 static const ber_sequence_t T_t_smsDeliverySpecificInfo_sequence[] = {
4012 { NULL, 0, 0, 0, NULL }
4015 static int
4016 dissect_camel_T_t_smsDeliverySpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4017 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4018 T_t_smsDeliverySpecificInfo_sequence, hf_index, ett_camel_T_t_smsDeliverySpecificInfo);
4020 return offset;
4024 static const value_string camel_EventSpecificInformationSMS_vals[] = {
4025 { 0, "o-smsFailureSpecificInfo" },
4026 { 1, "o-smsSubmissionSpecificInfo" },
4027 { 2, "t-smsFailureSpecificInfo" },
4028 { 3, "t-smsDeliverySpecificInfo" },
4029 { 0, NULL }
4032 static const ber_choice_t EventSpecificInformationSMS_choice[] = {
4033 { 0, &hf_camel_o_smsFailureSpecificInfo, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_o_smsFailureSpecificInfo },
4034 { 1, &hf_camel_o_smsSubmissionSpecificInfo, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_o_smsSubmissionSpecificInfo },
4035 { 2, &hf_camel_t_smsFailureSpecificInfo, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_T_t_smsFailureSpecificInfo },
4036 { 3, &hf_camel_t_smsDeliverySpecificInfo, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_camel_T_t_smsDeliverySpecificInfo },
4037 { 0, NULL, 0, 0, 0, NULL }
4040 static int
4041 dissect_camel_EventSpecificInformationSMS(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4042 offset = dissect_ber_choice(actx, tree, tvb, offset,
4043 EventSpecificInformationSMS_choice, hf_index, ett_camel_EventSpecificInformationSMS,
4044 NULL);
4046 return offset;
4050 static const value_string camel_EventTypeSMS_vals[] = {
4051 { 1, "sms-CollectedInfo" },
4052 { 2, "o-smsFailure" },
4053 { 3, "o-smsSubmission" },
4054 { 11, "sms-DeliveryRequested" },
4055 { 12, "t-smsFailure" },
4056 { 13, "t-smsDelivery" },
4057 { 0, NULL }
4061 static int
4062 dissect_camel_EventTypeSMS(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4063 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
4064 NULL);
4066 return offset;
4071 static int
4072 dissect_camel_FCIBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4073 tvbuff_t *parameter_tvb;
4074 proto_tree *subtree;
4076 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4077 &parameter_tvb);
4079 if (!parameter_tvb)
4080 return offset;
4081 subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCIBillingChargingCharacteristics);
4082 dissect_camel_CAMEL_FCIBillingChargingCharacteristics(false, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCIBillingChargingCharacteristics);
4085 return offset;
4090 static int
4091 dissect_camel_FCIGPRSBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4092 tvbuff_t *parameter_tvb;
4093 proto_tree *subtree;
4095 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4096 &parameter_tvb);
4098 if (!parameter_tvb)
4099 return offset;
4100 subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCIGPRSBillingChargingCharacteristics);
4101 dissect_camel_CAMEL_FCIGPRSBillingChargingCharacteristics(false, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCIGPRSBillingChargingCharacteristics);
4104 return offset;
4109 static int
4110 dissect_camel_FCISMSBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4111 tvbuff_t *parameter_tvb;
4112 proto_tree *subtree;
4114 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4115 &parameter_tvb);
4117 if (!parameter_tvb)
4118 return offset;
4119 subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_FCISMSBillingChargingCharacteristics);
4120 dissect_camel_CAMEL_FCISMSBillingChargingCharacteristics(false, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_FCISMSBillingChargingCharacteristics);
4123 return offset;
4127 static const ber_sequence_t ForwardServiceInteractionInd_sequence[] = {
4128 { &hf_camel_conferenceTreatmentIndicator, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1 },
4129 { &hf_camel_callDiversionTreatmentIndicator, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1 },
4130 { &hf_camel_callingPartyRestrictionIndicator, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1 },
4131 { NULL, 0, 0, 0, NULL }
4134 static int
4135 dissect_camel_ForwardServiceInteractionInd(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4136 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4137 ForwardServiceInteractionInd_sequence, hf_index, ett_camel_ForwardServiceInteractionInd);
4139 return offset;
4143 static const value_string camel_GapCriteria_vals[] = {
4144 { 0, "basicGapCriteria" },
4145 { 1, "compoundGapCriteria" },
4146 { 0, NULL }
4149 static const ber_choice_t GapCriteria_choice[] = {
4150 { 0, &hf_camel_basicGapCriteria, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_camel_BasicGapCriteria },
4151 { 1, &hf_camel_compoundGapCriteria, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_camel_CompoundCriteria },
4152 { 0, NULL, 0, 0, 0, NULL }
4155 static int
4156 dissect_camel_GapCriteria(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4157 offset = dissect_ber_choice(actx, tree, tvb, offset,
4158 GapCriteria_choice, hf_index, ett_camel_GapCriteria,
4159 NULL);
4161 return offset;
4165 static const ber_sequence_t GapIndicators_sequence[] = {
4166 { &hf_camel_gapIndicatorsDuration, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_inap_Duration },
4167 { &hf_camel_gapInterval , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_inap_Interval },
4168 { NULL, 0, 0, 0, NULL }
4171 static int
4172 dissect_camel_GapIndicators(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4173 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4174 GapIndicators_sequence, hf_index, ett_camel_GapIndicators);
4176 return offset;
4181 static int
4182 dissect_camel_IA5String_SIZE_bound__minMessageContentLength_bound__maxMessageContentLength(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4183 offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
4184 actx, tree, tvb, offset, hf_index,
4185 NULL);
4187 return offset;
4192 static int
4193 dissect_camel_OCTET_STRING_SIZE_bound__minAttributesLength_bound__maxAttributesLength(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4194 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4195 NULL);
4197 return offset;
4201 static const ber_sequence_t T_text_sequence[] = {
4202 { &hf_camel_messageContent, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_IA5String_SIZE_bound__minMessageContentLength_bound__maxMessageContentLength },
4203 { &hf_camel_attributes , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_bound__minAttributesLength_bound__maxAttributesLength },
4204 { NULL, 0, 0, 0, NULL }
4207 static int
4208 dissect_camel_T_text(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4209 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4210 T_text_sequence, hf_index, ett_camel_T_text);
4212 return offset;
4216 static const ber_sequence_t SEQUENCE_SIZE_1_bound__numOfMessageIDs_OF_Integer4_sequence_of[1] = {
4217 { &hf_camel_elementaryMessageIDs_item, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_inap_Integer4 },
4220 static int
4221 dissect_camel_SEQUENCE_SIZE_1_bound__numOfMessageIDs_OF_Integer4(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4222 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4223 SEQUENCE_SIZE_1_bound__numOfMessageIDs_OF_Integer4_sequence_of, hf_index, ett_camel_SEQUENCE_SIZE_1_bound__numOfMessageIDs_OF_Integer4);
4225 return offset;
4230 static int
4231 dissect_camel_OCTET_STRING_SIZE_2(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4232 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4233 NULL);
4235 return offset;
4240 static int
4241 dissect_camel_OCTET_STRING_SIZE_4(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4242 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4243 NULL);
4245 return offset;
4249 static const value_string camel_VariablePart_vals[] = {
4250 { 0, "integer" },
4251 { 1, "number" },
4252 { 2, "time" },
4253 { 3, "date" },
4254 { 4, "price" },
4255 { 0, NULL }
4258 static const ber_choice_t VariablePart_choice[] = {
4259 { 0, &hf_camel_integer , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_inap_Integer4 },
4260 { 1, &hf_camel_number , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_Digits },
4261 { 2, &hf_camel_time , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_2 },
4262 { 3, &hf_camel_date , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_4 },
4263 { 4, &hf_camel_price , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_4 },
4264 { 0, NULL, 0, 0, 0, NULL }
4267 static int
4268 dissect_camel_VariablePart(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4269 offset = dissect_ber_choice(actx, tree, tvb, offset,
4270 VariablePart_choice, hf_index, ett_camel_VariablePart,
4271 NULL);
4273 return offset;
4277 static const ber_sequence_t SEQUENCE_SIZE_1_5_OF_VariablePart_sequence_of[1] = {
4278 { &hf_camel_variableParts_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_VariablePart },
4281 static int
4282 dissect_camel_SEQUENCE_SIZE_1_5_OF_VariablePart(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4283 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4284 SEQUENCE_SIZE_1_5_OF_VariablePart_sequence_of, hf_index, ett_camel_SEQUENCE_SIZE_1_5_OF_VariablePart);
4286 return offset;
4290 static const ber_sequence_t T_variableMessage_sequence[] = {
4291 { &hf_camel_elementaryMessageID, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_inap_Integer4 },
4292 { &hf_camel_variableParts , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_SEQUENCE_SIZE_1_5_OF_VariablePart },
4293 { NULL, 0, 0, 0, NULL }
4296 static int
4297 dissect_camel_T_variableMessage(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4298 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4299 T_variableMessage_sequence, hf_index, ett_camel_T_variableMessage);
4301 return offset;
4305 static const value_string camel_MessageID_vals[] = {
4306 { 0, "elementaryMessageID" },
4307 { 1, "text" },
4308 { 29, "elementaryMessageIDs" },
4309 { 30, "variableMessage" },
4310 { 0, NULL }
4313 static const ber_choice_t MessageID_choice[] = {
4314 { 0, &hf_camel_elementaryMessageID, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_inap_Integer4 },
4315 { 1, &hf_camel_text , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_text },
4316 { 29, &hf_camel_elementaryMessageIDs, BER_CLASS_CON, 29, BER_FLAGS_IMPLTAG, dissect_camel_SEQUENCE_SIZE_1_bound__numOfMessageIDs_OF_Integer4 },
4317 { 30, &hf_camel_variableMessage, BER_CLASS_CON, 30, BER_FLAGS_IMPLTAG, dissect_camel_T_variableMessage },
4318 { 0, NULL, 0, 0, 0, NULL }
4321 static int
4322 dissect_camel_MessageID(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4323 offset = dissect_ber_choice(actx, tree, tvb, offset,
4324 MessageID_choice, hf_index, ett_camel_MessageID,
4325 NULL);
4327 return offset;
4332 static int
4333 dissect_camel_INTEGER_0_32767(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4334 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
4335 NULL);
4337 return offset;
4341 static const ber_sequence_t InbandInfo_sequence[] = {
4342 { &hf_camel_messageID , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_MessageID },
4343 { &hf_camel_numberOfRepetitions, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_127 },
4344 { &hf_camel_inbandInfoDuration, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_32767 },
4345 { &hf_camel_interval , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_32767 },
4346 { NULL, 0, 0, 0, NULL }
4349 static int
4350 dissect_camel_InbandInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4351 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4352 InbandInfo_sequence, hf_index, ett_camel_InbandInfo);
4354 return offset;
4358 static const ber_sequence_t Tone_sequence[] = {
4359 { &hf_camel_toneID , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_inap_Integer4 },
4360 { &hf_camel_toneDuration , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_Integer4 },
4361 { NULL, 0, 0, 0, NULL }
4364 static int
4365 dissect_camel_Tone(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4366 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4367 Tone_sequence, hf_index, ett_camel_Tone);
4369 return offset;
4373 static const value_string camel_InformationToSend_vals[] = {
4374 { 0, "inbandInfo" },
4375 { 1, "tone" },
4376 { 0, NULL }
4379 static const ber_choice_t InformationToSend_choice[] = {
4380 { 0, &hf_camel_inbandInfo , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_InbandInfo },
4381 { 1, &hf_camel_tone , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_Tone },
4382 { 0, NULL, 0, 0, 0, NULL }
4385 static int
4386 dissect_camel_InformationToSend(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4387 offset = dissect_ber_choice(actx, tree, tvb, offset,
4388 InformationToSend_choice, hf_index, ett_camel_InformationToSend,
4389 NULL);
4391 return offset;
4395 static const value_string camel_GapTreatment_vals[] = {
4396 { 0, "informationToSend" },
4397 { 1, "releaseCause" },
4398 { 0, NULL }
4401 static const ber_choice_t GapTreatment_choice[] = {
4402 { 0, &hf_camel_informationToSend, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_InformationToSend },
4403 { 1, &hf_camel_releaseCause , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_Cause },
4404 { 0, NULL, 0, 0, 0, NULL }
4407 static int
4408 dissect_camel_GapTreatment(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4409 offset = dissect_ber_choice(actx, tree, tvb, offset,
4410 GapTreatment_choice, hf_index, ett_camel_GapTreatment,
4411 NULL);
4413 return offset;
4418 static int
4419 dissect_camel_GenericNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4420 tvbuff_t *parameter_tvb;
4422 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4423 &parameter_tvb);
4426 if (!parameter_tvb)
4427 return offset;
4429 dissect_isup_generic_number_parameter(parameter_tvb, actx->pinfo, tree, NULL);
4431 return offset;
4435 static const ber_sequence_t GenericNumbers_set_of[1] = {
4436 { &hf_camel_GenericNumbers_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_camel_GenericNumber },
4439 static int
4440 dissect_camel_GenericNumbers(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4441 offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
4442 GenericNumbers_set_of, hf_index, ett_camel_GenericNumbers);
4444 return offset;
4448 static const value_string camel_GPRS_QoS_vals[] = {
4449 { 0, "short-QoS-format" },
4450 { 1, "long-QoS-format" },
4451 { 0, NULL }
4454 static const ber_choice_t GPRS_QoS_choice[] = {
4455 { 0, &hf_camel_short_QoS_format, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_QoS_Subscribed },
4456 { 1, &hf_camel_long_QoS_format, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_Ext_QoS_Subscribed },
4457 { 0, NULL, 0, 0, 0, NULL }
4460 static int
4461 dissect_camel_GPRS_QoS(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4462 offset = dissect_ber_choice(actx, tree, tvb, offset,
4463 GPRS_QoS_choice, hf_index, ett_camel_GPRS_QoS,
4464 NULL);
4466 return offset;
4470 static const ber_sequence_t GPRS_QoS_Extension_sequence[] = {
4471 { &hf_camel_supplement_to_long_QoS_format, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_Ext2_QoS_Subscribed },
4472 { &hf_camel_additionalSupplement, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_Ext3_QoS_Subscribed },
4473 { NULL, 0, 0, 0, NULL }
4476 static int
4477 dissect_camel_GPRS_QoS_Extension(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4478 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4479 GPRS_QoS_Extension_sequence, hf_index, ett_camel_GPRS_QoS_Extension);
4481 return offset;
4486 static int
4487 dissect_camel_GPRSCause(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4488 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4489 NULL);
4491 return offset;
4495 static const value_string camel_GPRSEventType_vals[] = {
4496 { 1, "attach" },
4497 { 2, "attachChangeOfPosition" },
4498 { 3, "detached" },
4499 { 11, "pdp-ContextEstablishment" },
4500 { 12, "pdp-ContextEstablishmentAcknowledgement" },
4501 { 13, "disonnect" },
4502 { 14, "pdp-ContextChangeOfPosition" },
4503 { 0, NULL }
4507 static int
4508 dissect_camel_GPRSEventType(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4509 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
4510 NULL);
4512 return offset;
4516 static const ber_sequence_t GPRSEvent_sequence[] = {
4517 { &hf_camel_gPRSEventType , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_GPRSEventType },
4518 { &hf_camel_monitorMode , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_MonitorMode },
4519 { NULL, 0, 0, 0, NULL }
4522 static int
4523 dissect_camel_GPRSEvent(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4524 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4525 GPRSEvent_sequence, hf_index, ett_camel_GPRSEvent);
4527 return offset;
4532 static int
4533 dissect_camel_T_cellGlobalIdOrServiceAreaIdOrLAI(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4534 proto_tree *subtree;
4535 int start_offset;
4537 start_offset = offset;
4538 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4539 NULL);
4542 subtree = proto_item_add_subtree(actx->created_item, ett_camel_pdptypenumber);
4544 if (tvb_reported_length_remaining(tvb,start_offset) == 7){
4545 dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength(true, tvb, start_offset, actx, subtree, hf_camel_cellGlobalIdOrServiceAreaIdFixedLength);
4546 }else{
4547 dissect_gsm_map_LAIFixedLength(true, tvb, start_offset, actx, subtree, hf_camel_locationAreaId);
4550 return offset;
4555 static int
4556 dissect_camel_UserCSGInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4557 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4558 NULL);
4560 return offset;
4564 static const ber_sequence_t LocationInformationGPRS_sequence[] = {
4565 { &hf_camel_cellGlobalIdOrServiceAreaIdOrLAI, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_T_cellGlobalIdOrServiceAreaIdOrLAI },
4566 { &hf_camel_routeingAreaIdentity, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_RAIdentity },
4567 { &hf_camel_geographicalInformation, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_GeographicalInformation },
4568 { &hf_camel_sgsn_Number , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ISDN_AddressString },
4569 { &hf_camel_selectedLSAIdentity, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_LSAIdentity },
4570 { &hf_camel_extensionContainer, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ExtensionContainer },
4571 { &hf_camel_sai_Present , BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
4572 { &hf_camel_userCSGInformation, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_UserCSGInformation },
4573 { NULL, 0, 0, 0, NULL }
4576 static int
4577 dissect_camel_LocationInformationGPRS(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4578 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4579 LocationInformationGPRS_sequence, hf_index, ett_camel_LocationInformationGPRS);
4581 return offset;
4585 static const ber_sequence_t T_attachChangeOfPositionSpecificInformation_sequence[] = {
4586 { &hf_camel_locationInformationGPRS, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_LocationInformationGPRS },
4587 { NULL, 0, 0, 0, NULL }
4590 static int
4591 dissect_camel_T_attachChangeOfPositionSpecificInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4592 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4593 T_attachChangeOfPositionSpecificInformation_sequence, hf_index, ett_camel_T_attachChangeOfPositionSpecificInformation);
4595 return offset;
4599 static const ber_sequence_t QualityOfService_sequence[] = {
4600 { &hf_camel_requested_QoS , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_GPRS_QoS },
4601 { &hf_camel_subscribed_QoS, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_GPRS_QoS },
4602 { &hf_camel_negotiated_QoS, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_GPRS_QoS },
4603 { &hf_camel_requested_QoS_Extension, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_GPRS_QoS_Extension },
4604 { &hf_camel_subscribed_QoS_Extension, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_GPRS_QoS_Extension },
4605 { &hf_camel_negotiated_QoS_Extension, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_GPRS_QoS_Extension },
4606 { NULL, 0, 0, 0, NULL }
4609 static int
4610 dissect_camel_QualityOfService(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4611 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4612 QualityOfService_sequence, hf_index, ett_camel_QualityOfService);
4614 return offset;
4619 static int
4620 dissect_camel_TimeAndTimezone(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4621 tvbuff_t *parameter_tvb;
4622 proto_tree *subtree;
4623 proto_item *item;
4624 char *digit_str;
4625 unsigned length;
4626 char year[5];
4627 char month[3];
4628 char day[3];
4629 char hour[3];
4630 char minute[3];
4631 char second[3];
4633 uint8_t oct;
4634 int8_t tz;
4635 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4636 &parameter_tvb);
4639 if (!parameter_tvb)
4640 return offset;
4641 length = tvb_reported_length(parameter_tvb);
4642 if (length < 8 /*cAPSpecificBoundSetminTimeAndTimezoneLength*/){
4643 expert_add_info(actx->pinfo, actx->created_item, &ei_camel_par_wrong_length);
4644 return offset;
4646 subtree = proto_item_add_subtree(actx->created_item, ett_camel_timeandtimezone);
4647 item = proto_tree_add_item_ret_display_string(subtree, hf_camel_timeandtimezone_time, parameter_tvb, 0, 7, ENC_BCD_DIGITS_0_9|ENC_LITTLE_ENDIAN, actx->pinfo->pool, &digit_str);
4650 The Time Zone indicates the difference, expressed in quarters of an hour, between the local time and GMT. In the first of the two semi octets,
4651 the first bit (bit 3 of the seventh octet of the TP Service Centre Time Stamp field) represents the algebraic sign of this difference (0: positive, 1: negative).
4653 oct = tvb_get_uint8(parameter_tvb,7);
4655 /* packet-gsm_sms.c time dis_field_scts_aux() */
4656 tz = (oct >> 4) + (oct & 0x07) * 10;
4657 tz = (oct & 0x08) ? -tz : tz;
4659 proto_tree_add_int_format_value(subtree, hf_camel_timeandtimezone_tz, parameter_tvb, 7, 1, tz, "GMT %+d hours %d minutes", tz / 4, tz % 4 * 15);
4661 /* ENC_BCD_DIGITS_0_9 truncates if the nibble is 0xf. */
4662 if (strlen(digit_str) < 14 || strchr(digit_str, '?')) {
4663 expert_add_info(actx->pinfo, item, &ei_camel_bcd_not_digit);
4664 return offset;
4667 (void) g_strlcpy(year, digit_str, 5);
4668 (void) g_strlcpy(month, digit_str+4, 3);
4669 (void) g_strlcpy(day, digit_str+6, 3);
4670 (void) g_strlcpy(hour, digit_str+8, 3);
4671 (void) g_strlcpy(minute, digit_str+10, 3);
4672 (void) g_strlcpy(second, digit_str+12, 3);
4674 proto_item_append_text(item, " (%s-%s-%s %s:%s:%s)",year,month,day,hour,minute,second);
4677 return offset;
4681 static const ber_sequence_t T_pdp_ContextchangeOfPositionSpecificInformation_sequence[] = {
4682 { &hf_camel_accessPointName, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AccessPointName },
4683 { &hf_camel_chargingID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_GPRSChargingID },
4684 { &hf_camel_locationInformationGPRS, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_LocationInformationGPRS },
4685 { &hf_camel_endUserAddress, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_EndUserAddress },
4686 { &hf_camel_qualityOfService, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_QualityOfService },
4687 { &hf_camel_timeAndTimeZone, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_TimeAndTimezone },
4688 { &hf_camel_gGSNAddress , BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_GSN_Address },
4689 { NULL, 0, 0, 0, NULL }
4692 static int
4693 dissect_camel_T_pdp_ContextchangeOfPositionSpecificInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4694 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4695 T_pdp_ContextchangeOfPositionSpecificInformation_sequence, hf_index, ett_camel_T_pdp_ContextchangeOfPositionSpecificInformation);
4697 return offset;
4701 static const value_string camel_InitiatingEntity_vals[] = {
4702 { 0, "mobileStation" },
4703 { 1, "sgsn" },
4704 { 2, "hlr" },
4705 { 3, "ggsn" },
4706 { 0, NULL }
4710 static int
4711 dissect_camel_InitiatingEntity(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4712 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
4713 NULL);
4715 return offset;
4719 static const ber_sequence_t T_detachSpecificInformation_sequence[] = {
4720 { &hf_camel_initiatingEntity, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_InitiatingEntity },
4721 { &hf_camel_routeingAreaUpdate, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
4722 { NULL, 0, 0, 0, NULL }
4725 static int
4726 dissect_camel_T_detachSpecificInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4727 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4728 T_detachSpecificInformation_sequence, hf_index, ett_camel_T_detachSpecificInformation);
4730 return offset;
4734 static const ber_sequence_t T_disconnectSpecificInformation_sequence[] = {
4735 { &hf_camel_initiatingEntity, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_InitiatingEntity },
4736 { &hf_camel_routeingAreaUpdate, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
4737 { NULL, 0, 0, 0, NULL }
4740 static int
4741 dissect_camel_T_disconnectSpecificInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4742 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4743 T_disconnectSpecificInformation_sequence, hf_index, ett_camel_T_disconnectSpecificInformation);
4745 return offset;
4749 static const value_string camel_PDPInitiationType_vals[] = {
4750 { 0, "mSInitiated" },
4751 { 1, "networkInitiated" },
4752 { 0, NULL }
4756 static int
4757 dissect_camel_PDPInitiationType(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4758 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
4759 NULL);
4761 return offset;
4765 static const ber_sequence_t T_pDPContextEstablishmentSpecificInformation_sequence[] = {
4766 { &hf_camel_accessPointName, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AccessPointName },
4767 { &hf_camel_endUserAddress, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_EndUserAddress },
4768 { &hf_camel_qualityOfService, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_QualityOfService },
4769 { &hf_camel_locationInformationGPRS, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_LocationInformationGPRS },
4770 { &hf_camel_timeAndTimeZone, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_TimeAndTimezone },
4771 { &hf_camel_pDPInitiationType, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPInitiationType },
4772 { &hf_camel_secondaryPDP_context, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
4773 { NULL, 0, 0, 0, NULL }
4776 static int
4777 dissect_camel_T_pDPContextEstablishmentSpecificInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4778 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4779 T_pDPContextEstablishmentSpecificInformation_sequence, hf_index, ett_camel_T_pDPContextEstablishmentSpecificInformation);
4781 return offset;
4785 static const ber_sequence_t T_pDPContextEstablishmentAcknowledgementSpecificInformation_sequence[] = {
4786 { &hf_camel_accessPointName, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AccessPointName },
4787 { &hf_camel_chargingID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_GPRSChargingID },
4788 { &hf_camel_endUserAddress, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_EndUserAddress },
4789 { &hf_camel_qualityOfService, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_QualityOfService },
4790 { &hf_camel_locationInformationGPRS, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_LocationInformationGPRS },
4791 { &hf_camel_timeAndTimeZone, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_TimeAndTimezone },
4792 { &hf_camel_gGSNAddress , BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_GSN_Address },
4793 { NULL, 0, 0, 0, NULL }
4796 static int
4797 dissect_camel_T_pDPContextEstablishmentAcknowledgementSpecificInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4798 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4799 T_pDPContextEstablishmentAcknowledgementSpecificInformation_sequence, hf_index, ett_camel_T_pDPContextEstablishmentAcknowledgementSpecificInformation);
4801 return offset;
4805 static const value_string camel_GPRSEventSpecificInformation_vals[] = {
4806 { 0, "attachChangeOfPositionSpecificInformation" },
4807 { 1, "pdp-ContextchangeOfPositionSpecificInformation" },
4808 { 2, "detachSpecificInformation" },
4809 { 3, "disconnectSpecificInformation" },
4810 { 4, "pDPContextEstablishmentSpecificInformation" },
4811 { 5, "pDPContextEstablishmentAcknowledgementSpecificInformation" },
4812 { 0, NULL }
4815 static const ber_choice_t GPRSEventSpecificInformation_choice[] = {
4816 { 0, &hf_camel_attachChangeOfPositionSpecificInformation, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_attachChangeOfPositionSpecificInformation },
4817 { 1, &hf_camel_pdp_ContextchangeOfPositionSpecificInformation, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_T_pdp_ContextchangeOfPositionSpecificInformation },
4818 { 2, &hf_camel_detachSpecificInformation, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_T_detachSpecificInformation },
4819 { 3, &hf_camel_disconnectSpecificInformation, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_camel_T_disconnectSpecificInformation },
4820 { 4, &hf_camel_pDPContextEstablishmentSpecificInformation, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_camel_T_pDPContextEstablishmentSpecificInformation },
4821 { 5, &hf_camel_pDPContextEstablishmentAcknowledgementSpecificInformation, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_camel_T_pDPContextEstablishmentAcknowledgementSpecificInformation },
4822 { 0, NULL, 0, 0, 0, NULL }
4825 static int
4826 dissect_camel_GPRSEventSpecificInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4827 offset = dissect_ber_choice(actx, tree, tvb, offset,
4828 GPRSEventSpecificInformation_choice, hf_index, ett_camel_GPRSEventSpecificInformation,
4829 NULL);
4831 return offset;
4836 static int
4837 dissect_camel_IPRoutingAddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4838 offset = dissect_camel_CalledPartyNumber(implicit_tag, tvb, offset, actx, tree, hf_index);
4840 return offset;
4845 static int
4846 dissect_camel_IPSSPCapabilities(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4847 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4848 NULL);
4850 return offset;
4854 static const value_string camel_LegOrCallSegment_vals[] = {
4855 { 0, "callSegmentID" },
4856 { 1, "legID" },
4857 { 0, NULL }
4860 static const ber_choice_t LegOrCallSegment_choice[] = {
4861 { 0, &hf_camel_callSegmentID , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
4862 { 1, &hf_camel_legID , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_inap_LegID },
4863 { 0, NULL, 0, 0, 0, NULL }
4866 static int
4867 dissect_camel_LegOrCallSegment(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4868 offset = dissect_ber_choice(actx, tree, tvb, offset,
4869 LegOrCallSegment_choice, hf_index, ett_camel_LegOrCallSegment,
4870 NULL);
4872 return offset;
4877 static int
4878 dissect_camel_LowLayerCompatibility(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4879 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4880 NULL);
4882 return offset;
4887 static int
4888 dissect_camel_NAOliInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4889 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4890 NULL);
4892 return offset;
4897 static int
4898 dissect_camel_OCSIApplicable(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4899 offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
4901 return offset;
4906 static int
4907 dissect_camel_OriginalCalledPartyID(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4909 tvbuff_t *parameter_tvb;
4910 proto_tree *subtree;
4912 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4913 &parameter_tvb);
4916 if (!parameter_tvb)
4917 return offset;
4918 subtree = proto_item_add_subtree(actx->created_item, ett_camel_originalcalledpartyid);
4919 dissect_isup_original_called_number_parameter(parameter_tvb, actx->pinfo, subtree, NULL);
4921 return offset;
4926 static int
4927 dissect_camel_RedirectingPartyID(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4929 tvbuff_t *parameter_tvb;
4930 proto_tree *subtree;
4932 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
4933 &parameter_tvb);
4936 if (!parameter_tvb)
4937 return offset;
4938 subtree = proto_item_add_subtree(actx->created_item, ett_camel_redirectingpartyid);
4939 dissect_isup_redirecting_number_parameter(parameter_tvb, actx->pinfo, subtree, NULL);
4941 return offset;
4945 static const value_string camel_RequestedInformationType_vals[] = {
4946 { 0, "callAttemptElapsedTime" },
4947 { 1, "callStopTime" },
4948 { 2, "callConnectedElapsedTime" },
4949 { 30, "releaseCause" },
4950 { 0, NULL }
4954 static int
4955 dissect_camel_RequestedInformationType(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4956 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
4957 NULL);
4959 return offset;
4963 static const value_string camel_RequestedInformationValue_vals[] = {
4964 { 0, "callAttemptElapsedTimeValue" },
4965 { 1, "callStopTimeValue" },
4966 { 2, "callConnectedElapsedTimeValue" },
4967 { 30, "releaseCauseValue" },
4968 { 0, NULL }
4971 static const ber_choice_t RequestedInformationValue_choice[] = {
4972 { 0, &hf_camel_callAttemptElapsedTimeValue, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_0_255 },
4973 { 1, &hf_camel_callStopTimeValue, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_DateAndTime },
4974 { 2, &hf_camel_callConnectedElapsedTimeValue, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_inap_Integer4 },
4975 { 30, &hf_camel_releaseCauseValue, BER_CLASS_CON, 30, BER_FLAGS_IMPLTAG, dissect_camel_Cause },
4976 { 0, NULL, 0, 0, 0, NULL }
4979 static int
4980 dissect_camel_RequestedInformationValue(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4981 offset = dissect_ber_choice(actx, tree, tvb, offset,
4982 RequestedInformationValue_choice, hf_index, ett_camel_RequestedInformationValue,
4983 NULL);
4985 return offset;
4989 static const ber_sequence_t RequestedInformation_sequence[] = {
4990 { &hf_camel_requestedInformationType, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_RequestedInformationType },
4991 { &hf_camel_requestedInformationValue, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_RequestedInformationValue },
4992 { NULL, 0, 0, 0, NULL }
4995 static int
4996 dissect_camel_RequestedInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4997 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4998 RequestedInformation_sequence, hf_index, ett_camel_RequestedInformation);
5000 return offset;
5004 static const ber_sequence_t RequestedInformationList_sequence_of[1] = {
5005 { &hf_camel_RequestedInformationList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_camel_RequestedInformation },
5008 static int
5009 dissect_camel_RequestedInformationList(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5010 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5011 RequestedInformationList_sequence_of, hf_index, ett_camel_RequestedInformationList);
5013 return offset;
5017 static const ber_sequence_t RequestedInformationTypeList_sequence_of[1] = {
5018 { &hf_camel_RequestedInformationTypeList_item, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_camel_RequestedInformationType },
5021 static int
5022 dissect_camel_RequestedInformationTypeList(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5023 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5024 RequestedInformationTypeList_sequence_of, hf_index, ett_camel_RequestedInformationTypeList);
5026 return offset;
5031 static int
5032 dissect_camel_RPCause(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5034 tvbuff_t *parameter_tvb;
5035 uint8_t Cause_value;
5036 proto_tree *subtree;
5038 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
5039 &parameter_tvb);
5042 if (!parameter_tvb)
5043 return offset;
5044 subtree = proto_item_add_subtree(actx->created_item, ett_camel_RPcause);
5046 dissect_RP_cause_ie(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), subtree, hf_camel_RP_Cause, &Cause_value);
5048 return offset;
5053 static int
5054 dissect_camel_SCIBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5055 tvbuff_t *parameter_tvb;
5056 proto_tree *subtree;
5058 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
5059 &parameter_tvb);
5061 if (!parameter_tvb)
5062 return offset;
5063 subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_SCIBillingChargingCharacteristics);
5064 dissect_camel_CAMEL_SCIBillingChargingCharacteristics(false, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_SCIBillingChargingCharacteristics);
5067 return offset;
5072 static int
5073 dissect_camel_SCIGPRSBillingChargingCharacteristics(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5074 tvbuff_t *parameter_tvb;
5075 proto_tree *subtree;
5077 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
5078 &parameter_tvb);
5080 if (!parameter_tvb)
5081 return offset;
5082 subtree = proto_item_add_subtree(actx->created_item, ett_camel_CAMEL_SCIGPRSBillingChargingCharacteristics);
5083 dissect_camel_CAMEL_SCIGPRSBillingChargingCharacteristics(false, parameter_tvb, 0, actx, subtree, hf_camel_CAMEL_SCIGPRSBillingChargingCharacteristics);
5086 return offset;
5090 static const ber_sequence_t ServiceInteractionIndicatorsTwo_sequence[] = {
5091 { &hf_camel_forwardServiceInteractionInd, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ForwardServiceInteractionInd },
5092 { &hf_camel_backwardServiceInteractionInd, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BackwardServiceInteractionInd },
5093 { &hf_camel_bothwayThroughConnectionInd, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_BothwayThroughConnectionInd },
5094 { &hf_camel_connectedNumberTreatmentInd, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ConnectedNumberTreatmentInd },
5095 { &hf_camel_nonCUGCall , BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5096 { &hf_camel_holdTreatmentIndicator, BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1 },
5097 { &hf_camel_cwTreatmentIndicator, BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1 },
5098 { &hf_camel_ectTreatmentIndicator, BER_CLASS_CON, 52, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCTET_STRING_SIZE_1 },
5099 { NULL, 0, 0, 0, NULL }
5102 static int
5103 dissect_camel_ServiceInteractionIndicatorsTwo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5104 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5105 ServiceInteractionIndicatorsTwo_sequence, hf_index, ett_camel_ServiceInteractionIndicatorsTwo);
5107 return offset;
5112 static int
5113 dissect_camel_SGSNCapabilities(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5114 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
5115 NULL);
5117 return offset;
5122 static int
5123 dissect_camel_SMS_AddressString(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5124 offset = dissect_gsm_map_AddressString(implicit_tag, tvb, offset, actx, tree, hf_index);
5126 return offset;
5130 static const ber_sequence_t SMSEvent_sequence[] = {
5131 { &hf_camel_eventTypeSMS , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_EventTypeSMS },
5132 { &hf_camel_monitorMode , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_MonitorMode },
5133 { NULL, 0, 0, 0, NULL }
5136 static int
5137 dissect_camel_SMSEvent(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5138 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5139 SMSEvent_sequence, hf_index, ett_camel_SMSEvent);
5141 return offset;
5145 static const value_string camel_TimerID_vals[] = {
5146 { 0, "tssf" },
5147 { 0, NULL }
5151 static int
5152 dissect_camel_TimerID(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5153 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
5154 NULL);
5156 return offset;
5161 static int
5162 dissect_camel_TimerValue(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5163 offset = dissect_inap_Integer4(implicit_tag, tvb, offset, actx, tree, hf_index);
5165 return offset;
5170 static int
5171 dissect_camel_TPDataCodingScheme(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5172 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
5173 NULL);
5175 return offset;
5180 static int
5181 dissect_camel_TPProtocolIdentifier(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5182 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
5183 NULL);
5185 return offset;
5190 static int
5191 dissect_camel_TPShortMessageSpecificInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5192 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
5193 NULL);
5195 return offset;
5200 static int
5201 dissect_camel_TPValidityPeriod(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5202 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
5203 NULL);
5205 return offset;
5209 static const value_string camel_UnavailableNetworkResource_vals[] = {
5210 { 0, "unavailableResources" },
5211 { 1, "componentFailure" },
5212 { 2, "basicCallProcessingException" },
5213 { 3, "resourceStatusFailure" },
5214 { 4, "endUserFailure" },
5215 { 0, NULL }
5219 static int
5220 dissect_camel_UnavailableNetworkResource(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5221 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
5222 NULL);
5224 return offset;
5228 static const value_string camel_T_par_cancelFailedProblem_vals[] = {
5229 { 0, "unknownOperation" },
5230 { 1, "tooLate" },
5231 { 2, "operationNotCancellable" },
5232 { 0, NULL }
5236 static int
5237 dissect_camel_T_par_cancelFailedProblem(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5238 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
5239 NULL);
5241 return offset;
5245 static const ber_sequence_t PAR_cancelFailed_sequence[] = {
5246 { &hf_camel_par_cancelFailedProblem, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_par_cancelFailedProblem },
5247 { &hf_camel_operation , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_InvokeID },
5248 { NULL, 0, 0, 0, NULL }
5251 static int
5252 dissect_camel_PAR_cancelFailed(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5253 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5254 PAR_cancelFailed_sequence, hf_index, ett_camel_PAR_cancelFailed);
5256 return offset;
5260 static const value_string camel_PAR_requestedInfoError_vals[] = {
5261 { 1, "unknownRequestedInfo" },
5262 { 2, "requestedInfoNotAvailable" },
5263 { 0, NULL }
5267 static int
5268 dissect_camel_PAR_requestedInfoError(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5269 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
5270 NULL);
5272 return offset;
5276 static const value_string camel_PAR_taskRefused_vals[] = {
5277 { 0, "generic" },
5278 { 1, "unobtainable" },
5279 { 2, "congestion" },
5280 { 0, NULL }
5284 static int
5285 dissect_camel_PAR_taskRefused(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5286 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
5287 NULL);
5289 return offset;
5293 static const ber_sequence_t CAP_GPRS_ReferenceNumber_sequence[] = {
5294 { &hf_camel_destinationReference, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_Integer4 },
5295 { &hf_camel_originationReference, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_Integer4 },
5296 { NULL, 0, 0, 0, NULL }
5299 static int
5300 dissect_camel_CAP_GPRS_ReferenceNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5301 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5302 CAP_GPRS_ReferenceNumber_sequence, hf_index, ett_camel_CAP_GPRS_ReferenceNumber);
5304 return offset;
5308 static const ber_sequence_t PlayAnnouncementArg_sequence[] = {
5309 { &hf_camel_informationToSend, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_InformationToSend },
5310 { &hf_camel_disconnectFromIPForbidden, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
5311 { &hf_camel_requestAnnouncementCompleteNotification, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
5312 { &hf_camel_extensions , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5313 { &hf_camel_callSegmentID , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
5314 { &hf_camel_requestAnnouncementStartedNotification, BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
5315 { NULL, 0, 0, 0, NULL }
5318 static int
5319 dissect_camel_PlayAnnouncementArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5320 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5321 PlayAnnouncementArg_sequence, hf_index, ett_camel_PlayAnnouncementArg);
5323 return offset;
5327 static const ber_sequence_t PromptAndCollectUserInformationArg_sequence[] = {
5328 { &hf_camel_collectedInfo , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_CollectedInfo },
5329 { &hf_camel_disconnectFromIPForbidden, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
5330 { &hf_camel_informationToSend, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_InformationToSend },
5331 { &hf_camel_extensions , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5332 { &hf_camel_callSegmentID , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
5333 { &hf_camel_requestAnnouncementStartedNotification, BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
5334 { NULL, 0, 0, 0, NULL }
5337 static int
5338 dissect_camel_PromptAndCollectUserInformationArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5339 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5340 PromptAndCollectUserInformationArg_sequence, hf_index, ett_camel_PromptAndCollectUserInformationArg);
5342 return offset;
5346 static const value_string camel_ReceivedInformationArg_vals[] = {
5347 { 0, "digitsResponse" },
5348 { 0, NULL }
5351 static const ber_choice_t ReceivedInformationArg_choice[] = {
5352 { 0, &hf_camel_digitsResponse, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_Digits },
5353 { 0, NULL, 0, 0, 0, NULL }
5356 static int
5357 dissect_camel_ReceivedInformationArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5358 offset = dissect_ber_choice(actx, tree, tvb, offset,
5359 ReceivedInformationArg_choice, hf_index, ett_camel_ReceivedInformationArg,
5360 NULL);
5362 return offset;
5366 static const value_string camel_SpecializedResourceReportArg_vals[] = {
5367 { 50, "allAnnouncementsComplete" },
5368 { 51, "firstAnnouncementStarted" },
5369 { 0, NULL }
5372 static const ber_choice_t SpecializedResourceReportArg_choice[] = {
5373 { 50, &hf_camel_allAnnouncementsComplete, BER_CLASS_CON, 50, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5374 { 51, &hf_camel_firstAnnouncementStarted, BER_CLASS_CON, 51, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5375 { 0, NULL, 0, 0, 0, NULL }
5378 static int
5379 dissect_camel_SpecializedResourceReportArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5380 if (camel_ver < 4) {
5381 return dissect_camel_SpecializedResourceReportArgV23(implicit_tag, tvb, offset, actx, tree, hf_camel_allAnnouncementsComplete);
5383 offset = dissect_ber_choice(actx, tree, tvb, offset,
5384 SpecializedResourceReportArg_choice, hf_index, ett_camel_SpecializedResourceReportArg,
5385 NULL);
5389 return offset;
5393 static const ber_sequence_t ApplyChargingArg_sequence[] = {
5394 { &hf_camel_aChBillingChargingCharacteristics, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_AChBillingChargingCharacteristics },
5395 { &hf_camel_partyToCharge , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_SendingSideID },
5396 { &hf_camel_extensions , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5397 { &hf_camel_aChChargingAddress, BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_AChChargingAddress },
5398 { &hf_camel_iTXcharging , BER_CLASS_CON, 64, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
5399 { NULL, 0, 0, 0, NULL }
5402 static int
5403 dissect_camel_ApplyChargingArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5404 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5405 ApplyChargingArg_sequence, hf_index, ett_camel_ApplyChargingArg);
5407 return offset;
5412 static int
5413 dissect_camel_ApplyChargingReportArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5414 offset = dissect_camel_CallResult(implicit_tag, tvb, offset, actx, tree, hf_index);
5416 return offset;
5420 static const ber_sequence_t AssistRequestInstructionsArg_sequence[] = {
5421 { &hf_camel_correlationID , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_CorrelationID },
5422 { &hf_camel_iPSSPCapabilities, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_IPSSPCapabilities },
5423 { &hf_camel_extensions , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5424 { NULL, 0, 0, 0, NULL }
5427 static int
5428 dissect_camel_AssistRequestInstructionsArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5429 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5430 AssistRequestInstructionsArg_sequence, hf_index, ett_camel_AssistRequestInstructionsArg);
5432 return offset;
5436 static const ber_sequence_t CallGapArg_sequence[] = {
5437 { &hf_camel_gapCriteria , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_GapCriteria },
5438 { &hf_camel_gapIndicators , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_GapIndicators },
5439 { &hf_camel_controlType , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ControlType },
5440 { &hf_camel_gapTreatment , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_GapTreatment },
5441 { &hf_camel_extensions , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5442 { NULL, 0, 0, 0, NULL }
5445 static int
5446 dissect_camel_CallGapArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5447 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5448 CallGapArg_sequence, hf_index, ett_camel_CallGapArg);
5450 return offset;
5454 static const ber_sequence_t CallInformationReportArg_sequence[] = {
5455 { &hf_camel_requestedInformationList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_RequestedInformationList },
5456 { &hf_camel_extensions , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5457 { &hf_camel_legID_01 , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_ReceivingSideID },
5458 { NULL, 0, 0, 0, NULL }
5461 static int
5462 dissect_camel_CallInformationReportArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5463 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5464 CallInformationReportArg_sequence, hf_index, ett_camel_CallInformationReportArg);
5466 return offset;
5470 static const ber_sequence_t CallInformationRequestArg_sequence[] = {
5471 { &hf_camel_requestedInformationTypeList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_RequestedInformationTypeList },
5472 { &hf_camel_extensions , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5473 { &hf_camel_legID_02 , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_SendingSideID },
5474 { NULL, 0, 0, 0, NULL }
5477 static int
5478 dissect_camel_CallInformationRequestArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5479 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5480 CallInformationRequestArg_sequence, hf_index, ett_camel_CallInformationRequestArg);
5482 return offset;
5486 static const value_string camel_CancelArg_vals[] = {
5487 { 0, "invokeID" },
5488 { 1, "allRequests" },
5489 { 2, "callSegmentToCancel" },
5490 { 0, NULL }
5493 static const ber_choice_t CancelArg_choice[] = {
5494 { 0, &hf_camel_invokeID , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_InvokeID },
5495 { 1, &hf_camel_allRequests , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5496 { 2, &hf_camel_callSegmentToCancel, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentToCancel },
5497 { 0, NULL, 0, 0, 0, NULL }
5500 static int
5501 dissect_camel_CancelArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5502 offset = dissect_ber_choice(actx, tree, tvb, offset,
5503 CancelArg_choice, hf_index, ett_camel_CancelArg,
5504 NULL);
5506 return offset;
5510 static const ber_sequence_t CollectInformationArg_sequence[] = {
5511 { &hf_camel_extensions , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5512 { NULL, 0, 0, 0, NULL }
5515 static int
5516 dissect_camel_CollectInformationArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5517 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5518 CollectInformationArg_sequence, hf_index, ett_camel_CollectInformationArg);
5520 return offset;
5524 static const ber_sequence_t ConnectArg_sequence[] = {
5525 { &hf_camel_destinationRoutingAddress, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_DestinationRoutingAddress },
5526 { &hf_camel_alertingPattern, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AlertingPattern },
5527 { &hf_camel_originalCalledPartyID, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OriginalCalledPartyID },
5528 { &hf_camel_extensions , BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5529 { &hf_camel_carrier , BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Carrier },
5530 { &hf_camel_callingPartysCategory, BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_CallingPartysCategory },
5531 { &hf_camel_redirectingPartyID, BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_RedirectingPartyID },
5532 { &hf_camel_redirectionInformation, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_RedirectionInformation },
5533 { &hf_camel_genericNumbers, BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_GenericNumbers },
5534 { &hf_camel_serviceInteractionIndicatorsTwo, BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ServiceInteractionIndicatorsTwo },
5535 { &hf_camel_chargeNumber , BER_CLASS_CON, 19, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ChargeNumber },
5536 { &hf_camel_legToBeConnected, BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_LegID },
5537 { &hf_camel_cug_Interlock , BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_CUG_Interlock },
5538 { &hf_camel_cug_OutgoingAccess, BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5539 { &hf_camel_suppressionOfAnnouncement, BER_CLASS_CON, 55, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ch_SuppressionOfAnnouncement },
5540 { &hf_camel_oCSIApplicable, BER_CLASS_CON, 56, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OCSIApplicable },
5541 { &hf_camel_naOliInfo , BER_CLASS_CON, 57, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NAOliInfo },
5542 { &hf_camel_bor_InterrogationRequested, BER_CLASS_CON, 58, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5543 { &hf_camel_suppress_N_CSI, BER_CLASS_CON, 59, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5544 { NULL, 0, 0, 0, NULL }
5547 static int
5548 dissect_camel_ConnectArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5549 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5550 ConnectArg_sequence, hf_index, ett_camel_ConnectArg);
5552 return offset;
5556 static const value_string camel_T_resourceAddress_vals[] = {
5557 { 0, "ipRoutingAddress" },
5558 { 3, "none" },
5559 { 0, NULL }
5562 static const ber_choice_t T_resourceAddress_choice[] = {
5563 { 0, &hf_camel_ipRoutingAddress, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_IPRoutingAddress },
5564 { 3, &hf_camel_none , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5565 { 0, NULL, 0, 0, 0, NULL }
5568 static int
5569 dissect_camel_T_resourceAddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5570 offset = dissect_ber_choice(actx, tree, tvb, offset,
5571 T_resourceAddress_choice, hf_index, ett_camel_T_resourceAddress,
5572 NULL);
5574 return offset;
5578 static const ber_sequence_t ConnectToResourceArg_sequence[] = {
5579 { &hf_camel_resourceAddress, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_T_resourceAddress },
5580 { &hf_camel_extensions , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5581 { &hf_camel_serviceInteractionIndicatorsTwo, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ServiceInteractionIndicatorsTwo },
5582 { &hf_camel_callSegmentID , BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
5583 { NULL, 0, 0, 0, NULL }
5586 static int
5587 dissect_camel_ConnectToResourceArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5588 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5589 ConnectToResourceArg_sequence, hf_index, ett_camel_ConnectToResourceArg);
5591 return offset;
5595 static const ber_sequence_t ContinueWithArgumentArgExtension_sequence[] = {
5596 { &hf_camel_suppress_D_CSI, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5597 { &hf_camel_suppress_N_CSI, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5598 { &hf_camel_suppressOutgoingCallBarring, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5599 { &hf_camel_legOrCallSegment, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_LegOrCallSegment },
5600 { NULL, 0, 0, 0, NULL }
5603 static int
5604 dissect_camel_ContinueWithArgumentArgExtension(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5605 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5606 ContinueWithArgumentArgExtension_sequence, hf_index, ett_camel_ContinueWithArgumentArgExtension);
5608 return offset;
5612 static const ber_sequence_t ContinueWithArgumentArg_sequence[] = {
5613 { &hf_camel_alertingPattern, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AlertingPattern },
5614 { &hf_camel_extensions , BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5615 { &hf_camel_serviceInteractionIndicatorsTwo, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ServiceInteractionIndicatorsTwo },
5616 { &hf_camel_callingPartysCategory, BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_CallingPartysCategory },
5617 { &hf_camel_genericNumbers, BER_CLASS_CON, 16, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_GenericNumbers },
5618 { &hf_camel_cug_Interlock , BER_CLASS_CON, 17, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_CUG_Interlock },
5619 { &hf_camel_cug_OutgoingAccess, BER_CLASS_CON, 18, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5620 { &hf_camel_chargeNumber , BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ChargeNumber },
5621 { &hf_camel_carrier , BER_CLASS_CON, 52, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Carrier },
5622 { &hf_camel_suppressionOfAnnouncement, BER_CLASS_CON, 55, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ch_SuppressionOfAnnouncement },
5623 { &hf_camel_naOliInfo , BER_CLASS_CON, 56, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NAOliInfo },
5624 { &hf_camel_bor_InterrogationRequested, BER_CLASS_CON, 57, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5625 { &hf_camel_suppress_O_CSI, BER_CLASS_CON, 58, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5626 { &hf_camel_continueWithArgumentArgExtension, BER_CLASS_CON, 59, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ContinueWithArgumentArgExtension },
5627 { NULL, 0, 0, 0, NULL }
5630 static int
5631 dissect_camel_ContinueWithArgumentArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5632 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5633 ContinueWithArgumentArg_sequence, hf_index, ett_camel_ContinueWithArgumentArg);
5635 return offset;
5639 static const ber_sequence_t DisconnectForwardConnectionWithArgumentArg_sequence[] = {
5640 { &hf_camel_callSegmentID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
5641 { &hf_camel_extensions , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5642 { NULL, 0, 0, 0, NULL }
5645 static int
5646 dissect_camel_DisconnectForwardConnectionWithArgumentArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5647 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5648 DisconnectForwardConnectionWithArgumentArg_sequence, hf_index, ett_camel_DisconnectForwardConnectionWithArgumentArg);
5650 return offset;
5654 static const ber_sequence_t DisconnectLegArg_sequence[] = {
5655 { &hf_camel_legToBeReleased, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_inap_LegID },
5656 { &hf_camel_releaseCause , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Cause },
5657 { &hf_camel_extensions , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5658 { NULL, 0, 0, 0, NULL }
5661 static int
5662 dissect_camel_DisconnectLegArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5663 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5664 DisconnectLegArg_sequence, hf_index, ett_camel_DisconnectLegArg);
5666 return offset;
5670 static const value_string camel_EntityReleasedArg_vals[] = {
5671 { 0, "callSegmentFailure" },
5672 { 1, "bCSM-Failure" },
5673 { 0, NULL }
5676 static const ber_choice_t EntityReleasedArg_choice[] = {
5677 { 0, &hf_camel_callSegmentFailure, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentFailure },
5678 { 1, &hf_camel_bCSM_Failure , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_BCSM_Failure },
5679 { 0, NULL, 0, 0, 0, NULL }
5682 static int
5683 dissect_camel_EntityReleasedArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5684 offset = dissect_ber_choice(actx, tree, tvb, offset,
5685 EntityReleasedArg_choice, hf_index, ett_camel_EntityReleasedArg,
5686 NULL);
5688 return offset;
5692 static const ber_sequence_t EstablishTemporaryConnectionArg_sequence[] = {
5693 { &hf_camel_assistingSSPIPRoutingAddress, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_AssistingSSPIPRoutingAddress },
5694 { &hf_camel_correlationID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CorrelationID },
5695 { &hf_camel_scfID , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ScfID },
5696 { &hf_camel_extensions , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5697 { &hf_camel_carrier , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Carrier },
5698 { &hf_camel_serviceInteractionIndicatorsTwo, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ServiceInteractionIndicatorsTwo },
5699 { &hf_camel_callSegmentID , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
5700 { &hf_camel_naOliInfo , BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NAOliInfo },
5701 { &hf_camel_chargeNumber , BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ChargeNumber },
5702 { &hf_camel_originalCalledPartyID, BER_CLASS_CON, 52, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OriginalCalledPartyID },
5703 { &hf_camel_callingPartyNumber, BER_CLASS_CON, 53, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallingPartyNumber },
5704 { NULL, 0, 0, 0, NULL }
5707 static int
5708 dissect_camel_EstablishTemporaryConnectionArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5710 if(camel_ver==2){
5711 return dissect_camel_EstablishTemporaryConnectionArgV2(implicit_tag, tvb, offset, actx, tree, hf_index);
5713 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5714 EstablishTemporaryConnectionArg_sequence, hf_index, ett_camel_EstablishTemporaryConnectionArg);
5718 return offset;
5722 static const ber_sequence_t EventReportBCSMArg_sequence[] = {
5723 { &hf_camel_eventTypeBCSM , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_EventTypeBCSM },
5724 { &hf_camel_eventSpecificInformationBCSM, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_EventSpecificInformationBCSM },
5725 { &hf_camel_legID_01 , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_ReceivingSideID },
5726 { &hf_camel_miscCallInfo , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_MiscCallInfo },
5727 { &hf_camel_extensions , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5728 { NULL, 0, 0, 0, NULL }
5731 static int
5732 dissect_camel_EventReportBCSMArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5733 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5734 EventReportBCSMArg_sequence, hf_index, ett_camel_EventReportBCSMArg);
5736 return offset;
5741 static int
5742 dissect_camel_FurnishChargingInformationArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5743 offset = dissect_camel_FCIBillingChargingCharacteristics(implicit_tag, tvb, offset, actx, tree, hf_index);
5745 return offset;
5749 static const ber_sequence_t InitialDPArgExtension_sequence[] = {
5750 { &hf_camel_gmscAddress , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ISDN_AddressString },
5751 { &hf_camel_forwardingDestinationNumber, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CalledPartyNumber },
5752 { &hf_camel_ms_Classmark2 , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_MS_Classmark2 },
5753 { &hf_camel_iMEI , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_IMEI },
5754 { &hf_camel_supportedCamelPhases, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_SupportedCamelPhases },
5755 { &hf_camel_offeredCamel4Functionalities, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_OfferedCamel4Functionalities },
5756 { &hf_camel_bearerCapability2, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_BearerCapability },
5757 { &hf_camel_ext_basicServiceCode2, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_Ext_BasicServiceCode },
5758 { &hf_camel_highLayerCompatibility2, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_HighLayerCompatibility },
5759 { &hf_camel_lowLayerCompatibility, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_LowLayerCompatibility },
5760 { &hf_camel_lowLayerCompatibility2, BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_LowLayerCompatibility },
5761 { &hf_camel_enhancedDialledServicesAllowed, BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5762 { &hf_camel_uu_Data , BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ch_UU_Data },
5763 { &hf_camel_collectInformationAllowed, BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5764 { &hf_camel_releaseCallArgExtensionAllowed, BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5765 { NULL, 0, 0, 0, NULL }
5768 static int
5769 dissect_camel_InitialDPArgExtension(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5771 if((camel_ver == 2)||(camel_ver == 1)){
5772 return dissect_camel_InitialDPArgExtensionV2(implicit_tag, tvb, offset, actx, tree, hf_index);
5775 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5776 InitialDPArgExtension_sequence, hf_index, ett_camel_InitialDPArgExtension);
5780 return offset;
5784 static const ber_sequence_t InitialDPArg_sequence[] = {
5785 { &hf_camel_serviceKey , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_inap_ServiceKey },
5786 { &hf_camel_calledPartyNumber, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CalledPartyNumber },
5787 { &hf_camel_callingPartyNumber, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallingPartyNumber },
5788 { &hf_camel_callingPartysCategory, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_CallingPartysCategory },
5789 { &hf_camel_cGEncountered , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CGEncountered },
5790 { &hf_camel_iPSSPCapabilities, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_IPSSPCapabilities },
5791 { &hf_camel_locationNumber, BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_LocationNumber },
5792 { &hf_camel_originalCalledPartyID, BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_OriginalCalledPartyID },
5793 { &hf_camel_extensions , BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5794 { &hf_camel_highLayerCompatibility, BER_CLASS_CON, 23, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_HighLayerCompatibility },
5795 { &hf_camel_additionalCallingPartyNumber, BER_CLASS_CON, 25, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AdditionalCallingPartyNumber },
5796 { &hf_camel_bearerCapability, BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_BearerCapability },
5797 { &hf_camel_eventTypeBCSM , BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_EventTypeBCSM },
5798 { &hf_camel_redirectingPartyID, BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_RedirectingPartyID },
5799 { &hf_camel_redirectionInformation, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_RedirectionInformation },
5800 { &hf_camel_cause , BER_CLASS_CON, 17, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Cause },
5801 { &hf_camel_serviceInteractionIndicatorsTwo, BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ServiceInteractionIndicatorsTwo },
5802 { &hf_camel_carrier , BER_CLASS_CON, 37, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Carrier },
5803 { &hf_camel_cug_Index , BER_CLASS_CON, 45, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_CUG_Index },
5804 { &hf_camel_cug_Interlock , BER_CLASS_CON, 46, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_CUG_Interlock },
5805 { &hf_camel_cug_OutgoingAccess, BER_CLASS_CON, 47, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5806 { &hf_camel_iMSI , BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_IMSI },
5807 { &hf_camel_subscriberState, BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_SubscriberState },
5808 { &hf_camel_locationInformation, BER_CLASS_CON, 52, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_LocationInformation },
5809 { &hf_camel_ext_basicServiceCode, BER_CLASS_CON, 53, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_Ext_BasicServiceCode },
5810 { &hf_camel_callReferenceNumber, BER_CLASS_CON, 54, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ch_CallReferenceNumber },
5811 { &hf_camel_mscAddress , BER_CLASS_CON, 55, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ISDN_AddressString },
5812 { &hf_camel_calledPartyBCDNumber, BER_CLASS_CON, 56, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CalledPartyBCDNumber },
5813 { &hf_camel_timeAndTimezone, BER_CLASS_CON, 57, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_TimeAndTimezone },
5814 { &hf_camel_callForwardingSS_Pending, BER_CLASS_CON, 58, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5815 { &hf_camel_initialDPArgExtension, BER_CLASS_CON, 59, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_InitialDPArgExtension },
5816 { NULL, 0, 0, 0, NULL }
5819 static int
5820 dissect_camel_InitialDPArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5821 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5822 InitialDPArg_sequence, hf_index, ett_camel_InitialDPArg);
5824 return offset;
5828 static const ber_sequence_t InitiateCallAttemptArg_sequence[] = {
5829 { &hf_camel_destinationRoutingAddress, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_DestinationRoutingAddress },
5830 { &hf_camel_extensions , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5831 { &hf_camel_legToBeCreated, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_LegID },
5832 { &hf_camel_newCallSegment, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
5833 { &hf_camel_callingPartyNumber, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallingPartyNumber },
5834 { &hf_camel_callReferenceNumber, BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ch_CallReferenceNumber },
5835 { &hf_camel_gsmSCFAddress , BER_CLASS_CON, 52, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ISDN_AddressString },
5836 { &hf_camel_suppress_T_CSI, BER_CLASS_CON, 53, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5837 { NULL, 0, 0, 0, NULL }
5840 static int
5841 dissect_camel_InitiateCallAttemptArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5842 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5843 InitiateCallAttemptArg_sequence, hf_index, ett_camel_InitiateCallAttemptArg);
5845 return offset;
5849 static const ber_sequence_t InitiateCallAttemptRes_sequence[] = {
5850 { &hf_camel_supportedCamelPhases, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_SupportedCamelPhases },
5851 { &hf_camel_offeredCamel4Functionalities, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_OfferedCamel4Functionalities },
5852 { &hf_camel_extensions , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5853 { &hf_camel_releaseCallArgExtensionAllowed, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
5854 { NULL, 0, 0, 0, NULL }
5857 static int
5858 dissect_camel_InitiateCallAttemptRes(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5859 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5860 InitiateCallAttemptRes_sequence, hf_index, ett_camel_InitiateCallAttemptRes);
5862 return offset;
5866 static const ber_sequence_t MoveLegArg_sequence[] = {
5867 { &hf_camel_legIDToMove , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_inap_LegID },
5868 { &hf_camel_extensions , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5869 { NULL, 0, 0, 0, NULL }
5872 static int
5873 dissect_camel_MoveLegArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5874 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5875 MoveLegArg_sequence, hf_index, ett_camel_MoveLegArg);
5877 return offset;
5881 static const ber_sequence_t PlayToneArg_sequence[] = {
5882 { &hf_camel_legOrCallSegment, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_LegOrCallSegment },
5883 { &hf_camel_bursts , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_Burst },
5884 { &hf_camel_extensions , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5885 { NULL, 0, 0, 0, NULL }
5888 static int
5889 dissect_camel_PlayToneArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5890 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5891 PlayToneArg_sequence, hf_index, ett_camel_PlayToneArg);
5893 return offset;
5898 static int
5899 dissect_camel_AllCallSegments(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5900 offset = dissect_camel_Cause(implicit_tag, tvb, offset, actx, tree, hf_index);
5902 return offset;
5906 static const ber_sequence_t AllCallSegmentsWithExtension_sequence[] = {
5907 { &hf_camel_allCallSegments, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_AllCallSegments },
5908 { &hf_camel_extensions , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5909 { NULL, 0, 0, 0, NULL }
5912 static int
5913 dissect_camel_AllCallSegmentsWithExtension(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5914 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5915 AllCallSegmentsWithExtension_sequence, hf_index, ett_camel_AllCallSegmentsWithExtension);
5917 return offset;
5921 static const value_string camel_ReleaseCallArg_vals[] = {
5922 { 0, "allCallSegments" },
5923 { 1, "allCallSegmentsWithExtension" },
5924 { 0, NULL }
5927 static const ber_choice_t ReleaseCallArg_choice[] = {
5928 { 0, &hf_camel_allCallSegments, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_camel_AllCallSegments },
5929 { 1, &hf_camel_allCallSegmentsWithExtension, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_AllCallSegmentsWithExtension },
5930 { 0, NULL, 0, 0, 0, NULL }
5933 static int
5934 dissect_camel_ReleaseCallArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5935 offset = dissect_ber_choice(actx, tree, tvb, offset,
5936 ReleaseCallArg_choice, hf_index, ett_camel_ReleaseCallArg,
5937 NULL);
5939 return offset;
5943 static const ber_sequence_t SEQUENCE_SIZE_1_bound__numOfBCSMEvents_OF_BCSMEvent_sequence_of[1] = {
5944 { &hf_camel_bcsmEvents_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_camel_BCSMEvent },
5947 static int
5948 dissect_camel_SEQUENCE_SIZE_1_bound__numOfBCSMEvents_OF_BCSMEvent(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5949 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5950 SEQUENCE_SIZE_1_bound__numOfBCSMEvents_OF_BCSMEvent_sequence_of, hf_index, ett_camel_SEQUENCE_SIZE_1_bound__numOfBCSMEvents_OF_BCSMEvent);
5952 return offset;
5956 static const ber_sequence_t RequestReportBCSMEventArg_sequence[] = {
5957 { &hf_camel_bcsmEvents , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_SEQUENCE_SIZE_1_bound__numOfBCSMEvents_OF_BCSMEvent },
5958 { &hf_camel_extensions , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5959 { NULL, 0, 0, 0, NULL }
5962 static int
5963 dissect_camel_RequestReportBCSMEventArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5964 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5965 RequestReportBCSMEventArg_sequence, hf_index, ett_camel_RequestReportBCSMEventArg);
5967 return offset;
5971 static const ber_sequence_t ResetTimerArg_sequence[] = {
5972 { &hf_camel_timerID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_TimerID },
5973 { &hf_camel_timervalue , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_TimerValue },
5974 { &hf_camel_extensions , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5975 { &hf_camel_callSegmentID , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
5976 { NULL, 0, 0, 0, NULL }
5979 static int
5980 dissect_camel_ResetTimerArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5981 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5982 ResetTimerArg_sequence, hf_index, ett_camel_ResetTimerArg);
5984 return offset;
5988 static const ber_sequence_t SendChargingInformationArg_sequence[] = {
5989 { &hf_camel_sCIBillingChargingCharacteristics, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_SCIBillingChargingCharacteristics },
5990 { &hf_camel_partyToCharge , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_SendingSideID },
5991 { &hf_camel_extensions , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
5992 { NULL, 0, 0, 0, NULL }
5995 static int
5996 dissect_camel_SendChargingInformationArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5997 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5998 SendChargingInformationArg_sequence, hf_index, ett_camel_SendChargingInformationArg);
6000 return offset;
6004 static const ber_sequence_t SplitLegArg_sequence[] = {
6005 { &hf_camel_legToBeSplit , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_inap_LegID },
6006 { &hf_camel_newCallSegment, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CallSegmentID },
6007 { &hf_camel_extensions , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
6008 { NULL, 0, 0, 0, NULL }
6011 static int
6012 dissect_camel_SplitLegArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6013 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6014 SplitLegArg_sequence, hf_index, ett_camel_SplitLegArg);
6016 return offset;
6020 static const ber_sequence_t ApplyChargingGPRSArg_sequence[] = {
6021 { &hf_camel_chargingCharacteristics, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_ChargingCharacteristics },
6022 { &hf_camel_applyChargingGPRS_tariffSwitchInterval, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_86400 },
6023 { &hf_camel_pDPID , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPID },
6024 { NULL, 0, 0, 0, NULL }
6027 static int
6028 dissect_camel_ApplyChargingGPRSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6029 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6030 ApplyChargingGPRSArg_sequence, hf_index, ett_camel_ApplyChargingGPRSArg);
6032 return offset;
6036 static const ber_sequence_t ApplyChargingReportGPRSArg_sequence[] = {
6037 { &hf_camel_chargingResult, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_ChargingResult },
6038 { &hf_camel_qualityOfService, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_QualityOfService },
6039 { &hf_camel_active , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_BOOLEAN },
6040 { &hf_camel_pDPID , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPID },
6041 { &hf_camel_chargingRollOver, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_ChargingRollOver },
6042 { NULL, 0, 0, 0, NULL }
6045 static int
6046 dissect_camel_ApplyChargingReportGPRSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6047 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6048 ApplyChargingReportGPRSArg_sequence, hf_index, ett_camel_ApplyChargingReportGPRSArg);
6050 return offset;
6054 static const ber_sequence_t CancelGPRSArg_sequence[] = {
6055 { &hf_camel_pDPID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPID },
6056 { NULL, 0, 0, 0, NULL }
6059 static int
6060 dissect_camel_CancelGPRSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6061 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6062 CancelGPRSArg_sequence, hf_index, ett_camel_CancelGPRSArg);
6064 return offset;
6068 static const ber_sequence_t ConnectGPRSArg_sequence[] = {
6069 { &hf_camel_accessPointName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_AccessPointName },
6070 { &hf_camel_pdpID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPID },
6071 { NULL, 0, 0, 0, NULL }
6074 static int
6075 dissect_camel_ConnectGPRSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6076 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6077 ConnectGPRSArg_sequence, hf_index, ett_camel_ConnectGPRSArg);
6079 return offset;
6083 static const ber_sequence_t ContinueGPRSArg_sequence[] = {
6084 { &hf_camel_pDPID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPID },
6085 { NULL, 0, 0, 0, NULL }
6088 static int
6089 dissect_camel_ContinueGPRSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6090 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6091 ContinueGPRSArg_sequence, hf_index, ett_camel_ContinueGPRSArg);
6093 return offset;
6097 static const ber_sequence_t EntityReleasedGPRSArg_sequence[] = {
6098 { &hf_camel_gPRSCause , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_GPRSCause },
6099 { &hf_camel_pDPID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPID },
6100 { NULL, 0, 0, 0, NULL }
6103 static int
6104 dissect_camel_EntityReleasedGPRSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6105 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6106 EntityReleasedGPRSArg_sequence, hf_index, ett_camel_EntityReleasedGPRSArg);
6108 return offset;
6112 static const ber_sequence_t EventReportGPRSArg_sequence[] = {
6113 { &hf_camel_gPRSEventType , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_GPRSEventType },
6114 { &hf_camel_miscGPRSInfo , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_MiscCallInfo },
6115 { &hf_camel_gPRSEventSpecificInformation, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_GPRSEventSpecificInformation },
6116 { &hf_camel_pDPID , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPID },
6117 { NULL, 0, 0, 0, NULL }
6120 static int
6121 dissect_camel_EventReportGPRSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6122 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6123 EventReportGPRSArg_sequence, hf_index, ett_camel_EventReportGPRSArg);
6125 return offset;
6130 static int
6131 dissect_camel_FurnishChargingInformationGPRSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6132 offset = dissect_camel_FCIGPRSBillingChargingCharacteristics(implicit_tag, tvb, offset, actx, tree, hf_index);
6134 return offset;
6138 static const ber_sequence_t InitialDPGPRSArg_sequence[] = {
6139 { &hf_camel_serviceKey , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_inap_ServiceKey },
6140 { &hf_camel_gPRSEventType , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_GPRSEventType },
6141 { &hf_camel_mSISDN , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_gsm_map_ISDN_AddressString },
6142 { &hf_camel_iMSI , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_gsm_map_IMSI },
6143 { &hf_camel_timeAndTimeZone, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_camel_TimeAndTimezone },
6144 { &hf_camel_gPRSMSClass , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_GPRSMSClass },
6145 { &hf_camel_endUserAddress, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_EndUserAddress },
6146 { &hf_camel_qualityOfService, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_QualityOfService },
6147 { &hf_camel_accessPointName, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_AccessPointName },
6148 { &hf_camel_routeingAreaIdentity, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_RAIdentity },
6149 { &hf_camel_chargingID , BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_GPRSChargingID },
6150 { &hf_camel_sGSNCapabilities, BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_SGSNCapabilities },
6151 { &hf_camel_locationInformationGPRS, BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_LocationInformationGPRS },
6152 { &hf_camel_pDPInitiationType, BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPInitiationType },
6153 { &hf_camel_extensions , BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
6154 { &hf_camel_gGSNAddress , BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_GSN_Address },
6155 { &hf_camel_secondaryPDP_context, BER_CLASS_CON, 16, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NULL },
6156 { &hf_camel_iMEI , BER_CLASS_CON, 17, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_IMEI },
6157 { NULL, 0, 0, 0, NULL }
6160 static int
6161 dissect_camel_InitialDPGPRSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6162 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6163 InitialDPGPRSArg_sequence, hf_index, ett_camel_InitialDPGPRSArg);
6165 return offset;
6169 static const ber_sequence_t ReleaseGPRSArg_sequence[] = {
6170 { &hf_camel_gprsCause , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_GPRSCause },
6171 { &hf_camel_pDPID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPID },
6172 { NULL, 0, 0, 0, NULL }
6175 static int
6176 dissect_camel_ReleaseGPRSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6177 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6178 ReleaseGPRSArg_sequence, hf_index, ett_camel_ReleaseGPRSArg);
6180 return offset;
6184 static const ber_sequence_t SEQUENCE_SIZE_1_bound__numOfGPRSEvents_OF_GPRSEvent_sequence_of[1] = {
6185 { &hf_camel_gPRSEvent_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_camel_GPRSEvent },
6188 static int
6189 dissect_camel_SEQUENCE_SIZE_1_bound__numOfGPRSEvents_OF_GPRSEvent(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6190 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
6191 SEQUENCE_SIZE_1_bound__numOfGPRSEvents_OF_GPRSEvent_sequence_of, hf_index, ett_camel_SEQUENCE_SIZE_1_bound__numOfGPRSEvents_OF_GPRSEvent);
6193 return offset;
6197 static const ber_sequence_t RequestReportGPRSEventArg_sequence[] = {
6198 { &hf_camel_gPRSEvent , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_SEQUENCE_SIZE_1_bound__numOfGPRSEvents_OF_GPRSEvent },
6199 { &hf_camel_pDPID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_PDPID },
6200 { NULL, 0, 0, 0, NULL }
6203 static int
6204 dissect_camel_RequestReportGPRSEventArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6205 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6206 RequestReportGPRSEventArg_sequence, hf_index, ett_camel_RequestReportGPRSEventArg);
6208 return offset;
6212 static const ber_sequence_t ResetTimerGPRSArg_sequence[] = {
6213 { &hf_camel_timerID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_TimerID },
6214 { &hf_camel_timervalue , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_TimerValue },
6215 { NULL, 0, 0, 0, NULL }
6218 static int
6219 dissect_camel_ResetTimerGPRSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6220 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6221 ResetTimerGPRSArg_sequence, hf_index, ett_camel_ResetTimerGPRSArg);
6223 return offset;
6227 static const ber_sequence_t SendChargingInformationGPRSArg_sequence[] = {
6228 { &hf_camel_sCIGPRSBillingChargingCharacteristics, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_SCIGPRSBillingChargingCharacteristics },
6229 { NULL, 0, 0, 0, NULL }
6232 static int
6233 dissect_camel_SendChargingInformationGPRSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6234 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6235 SendChargingInformationGPRSArg_sequence, hf_index, ett_camel_SendChargingInformationGPRSArg);
6237 return offset;
6241 static const ber_sequence_t ConnectSMSArg_sequence[] = {
6242 { &hf_camel_callingPartysNumber, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_SMS_AddressString },
6243 { &hf_camel_destinationSubscriberNumber, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CalledPartyBCDNumber },
6244 { &hf_camel_sMSCAddress , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ISDN_AddressString },
6245 { &hf_camel_extensions , BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
6246 { NULL, 0, 0, 0, NULL }
6249 static int
6250 dissect_camel_ConnectSMSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6251 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6252 ConnectSMSArg_sequence, hf_index, ett_camel_ConnectSMSArg);
6254 return offset;
6258 static const ber_sequence_t EventReportSMSArg_sequence[] = {
6259 { &hf_camel_eventTypeSMS , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_EventTypeSMS },
6260 { &hf_camel_eventSpecificInformationSMS, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_EventSpecificInformationSMS },
6261 { &hf_camel_miscCallInfo , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inap_MiscCallInfo },
6262 { &hf_camel_extensions , BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
6263 { NULL, 0, 0, 0, NULL }
6266 static int
6267 dissect_camel_EventReportSMSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6268 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6269 EventReportSMSArg_sequence, hf_index, ett_camel_EventReportSMSArg);
6271 return offset;
6276 static int
6277 dissect_camel_FurnishChargingInformationSMSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6278 offset = dissect_camel_FCISMSBillingChargingCharacteristics(implicit_tag, tvb, offset, actx, tree, hf_index);
6280 return offset;
6284 static const ber_sequence_t InitialDPSMSArg_sequence[] = {
6285 { &hf_camel_serviceKey , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_inap_ServiceKey },
6286 { &hf_camel_destinationSubscriberNumber, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CalledPartyBCDNumber },
6287 { &hf_camel_callingPartyNumber_01, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_SMS_AddressString },
6288 { &hf_camel_eventTypeSMS , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_EventTypeSMS },
6289 { &hf_camel_iMSI , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_IMSI },
6290 { &hf_camel_locationInformationMSC, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_LocationInformation },
6291 { &hf_camel_locationInformationGPRS, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_LocationInformationGPRS },
6292 { &hf_camel_sMSCAddress , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ISDN_AddressString },
6293 { &hf_camel_timeAndTimezone, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_TimeAndTimezone },
6294 { &hf_camel_tPShortMessageSpecificInfo, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_TPShortMessageSpecificInfo },
6295 { &hf_camel_tPProtocolIdentifier, BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_TPProtocolIdentifier },
6296 { &hf_camel_tPDataCodingScheme, BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_TPDataCodingScheme },
6297 { &hf_camel_tPValidityPeriod, BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_TPValidityPeriod },
6298 { &hf_camel_extensions , BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
6299 { &hf_camel_smsReferenceNumber, BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ch_CallReferenceNumber },
6300 { &hf_camel_mscAddress , BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ISDN_AddressString },
6301 { &hf_camel_sgsn_Number , BER_CLASS_CON, 16, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ISDN_AddressString },
6302 { &hf_camel_ms_Classmark2 , BER_CLASS_CON, 17, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_MS_Classmark2 },
6303 { &hf_camel_gPRSMSClass , BER_CLASS_CON, 18, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ms_GPRSMSClass },
6304 { &hf_camel_iMEI , BER_CLASS_CON, 19, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_IMEI },
6305 { &hf_camel_calledPartyNumber_01, BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ISDN_AddressString },
6306 { NULL, 0, 0, 0, NULL }
6309 static int
6310 dissect_camel_InitialDPSMSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6311 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6312 InitialDPSMSArg_sequence, hf_index, ett_camel_InitialDPSMSArg);
6314 return offset;
6319 static int
6320 dissect_camel_ReleaseSMSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6321 offset = dissect_camel_RPCause(implicit_tag, tvb, offset, actx, tree, hf_index);
6323 return offset;
6327 static const ber_sequence_t SEQUENCE_SIZE_1_bound__numOfSMSEvents_OF_SMSEvent_sequence_of[1] = {
6328 { &hf_camel_sMSEvents_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_camel_SMSEvent },
6331 static int
6332 dissect_camel_SEQUENCE_SIZE_1_bound__numOfSMSEvents_OF_SMSEvent(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6333 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
6334 SEQUENCE_SIZE_1_bound__numOfSMSEvents_OF_SMSEvent_sequence_of, hf_index, ett_camel_SEQUENCE_SIZE_1_bound__numOfSMSEvents_OF_SMSEvent);
6336 return offset;
6340 static const ber_sequence_t RequestReportSMSEventArg_sequence[] = {
6341 { &hf_camel_sMSEvents , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_SEQUENCE_SIZE_1_bound__numOfSMSEvents_OF_SMSEvent },
6342 { &hf_camel_extensions , BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
6343 { NULL, 0, 0, 0, NULL }
6346 static int
6347 dissect_camel_RequestReportSMSEventArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6348 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6349 RequestReportSMSEventArg_sequence, hf_index, ett_camel_RequestReportSMSEventArg);
6351 return offset;
6355 static const ber_sequence_t ResetTimerSMSArg_sequence[] = {
6356 { &hf_camel_timerID , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_TimerID },
6357 { &hf_camel_timervalue , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_TimerValue },
6358 { &hf_camel_extensions , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_Extensions },
6359 { NULL, 0, 0, 0, NULL }
6362 static int
6363 dissect_camel_ResetTimerSMSArg(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6364 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6365 ResetTimerSMSArg_sequence, hf_index, ett_camel_ResetTimerSMSArg);
6367 return offset;
6371 static const value_string camel_CAP_U_ABORT_REASON_vals[] = {
6372 { 1, "no-reason-given" },
6373 { 2, "application-timer-expired" },
6374 { 3, "not-allowed-procedures" },
6375 { 4, "abnormal-processing" },
6376 { 5, "congestion" },
6377 { 6, "invalid-reference" },
6378 { 7, "missing-reference" },
6379 { 8, "overlapping-dialogue" },
6380 { 0, NULL }
6384 static int
6385 dissect_camel_CAP_U_ABORT_REASON(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6386 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
6387 NULL);
6389 return offset;
6393 static const ber_sequence_t SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField_sequence_of[1] = {
6394 { &hf_camel_extensions_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_camel_ExtensionField },
6397 static int
6398 dissect_camel_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6399 offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
6400 SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField_sequence_of, hf_index, ett_camel_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField);
6402 return offset;
6407 static int
6408 dissect_camel_NACarrierSelectionInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6409 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
6410 NULL);
6412 return offset;
6416 static const ber_sequence_t NACarrierInformation_sequence[] = {
6417 { &hf_camel_naCarrierId , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_NAEA_CIC },
6418 { &hf_camel_naCICSelectionType, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NACarrierSelectionInfo },
6419 { NULL, 0, 0, 0, NULL }
6422 static int
6423 dissect_camel_NACarrierInformation(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6424 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6425 NACarrierInformation_sequence, hf_index, ett_camel_NACarrierInformation);
6427 return offset;
6432 static int
6433 dissect_camel_NAChargeNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6434 offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
6435 NULL);
6437 return offset;
6441 static const ber_sequence_t NA_Info_sequence[] = {
6442 { &hf_camel_naCarrierInformation, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NACarrierInformation },
6443 { &hf_camel_naOliInfo , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NAOliInfo },
6444 { &hf_camel_naChargeNumber, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NAChargeNumber },
6445 { NULL, 0, 0, 0, NULL }
6448 static int
6449 dissect_camel_NA_Info(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6450 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6451 NA_Info_sequence, hf_index, ett_camel_NA_Info);
6453 return offset;
6457 static const ber_sequence_t EstablishTemporaryConnectionArgV2_sequence[] = {
6458 { &hf_camel_assistingSSPIPRoutingAddress, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_AssistingSSPIPRoutingAddress },
6459 { &hf_camel_correlationID , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_CorrelationID },
6460 { &hf_camel_scfID , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ScfID },
6461 { &hf_camel_extensions_01 , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField },
6462 { &hf_camel_serviceInteractionIndicatorsTwo, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ServiceInteractionIndicatorsTwo },
6463 { &hf_camel_na_info , BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NA_Info },
6464 { NULL, 0, 0, 0, NULL }
6467 static int
6468 dissect_camel_EstablishTemporaryConnectionArgV2(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6469 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6470 EstablishTemporaryConnectionArgV2_sequence, hf_index, ett_camel_EstablishTemporaryConnectionArgV2);
6472 return offset;
6476 static const ber_sequence_t InitialDPArgExtensionV2_sequence[] = {
6477 { &hf_camel_naCarrierInformation, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_NACarrierInformation },
6478 { &hf_camel_gmscAddress , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gsm_map_ISDN_AddressString },
6479 { NULL, 0, 0, 0, NULL }
6482 static int
6483 dissect_camel_InitialDPArgExtensionV2(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6484 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6485 InitialDPArgExtensionV2_sequence, hf_index, ett_camel_InitialDPArgExtensionV2);
6487 return offset;
6491 static const ber_sequence_t ReleaseIfDurationExceeded_sequence[] = {
6492 { &hf_camel_tone_01 , BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_camel_BOOLEAN },
6493 { &hf_camel_extensions_01 , BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField },
6494 { NULL, 0, 0, 0, NULL }
6497 static int
6498 dissect_camel_ReleaseIfDurationExceeded(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6499 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6500 ReleaseIfDurationExceeded_sequence, hf_index, ett_camel_ReleaseIfDurationExceeded);
6502 return offset;
6506 static const ber_sequence_t T_timeDurationCharging_01_sequence[] = {
6507 { &hf_camel_maxCallPeriodDuration, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_864000 },
6508 { &hf_camel_releaseIfdurationExceeded_01, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_ReleaseIfDurationExceeded },
6509 { &hf_camel_tariffSwitchInterval, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_INTEGER_1_86400 },
6510 { NULL, 0, 0, 0, NULL }
6513 static int
6514 dissect_camel_T_timeDurationCharging_01(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6515 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6516 T_timeDurationCharging_01_sequence, hf_index, ett_camel_T_timeDurationCharging_01);
6518 return offset;
6522 static const ber_choice_t CAMEL_AChBillingChargingCharacteristicsV2_choice[] = {
6523 { 0, &hf_camel_timeDurationCharging_01, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_timeDurationCharging_01 },
6524 { 0, NULL, 0, 0, 0, NULL }
6527 static int
6528 dissect_camel_CAMEL_AChBillingChargingCharacteristicsV2(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6529 offset = dissect_ber_choice(actx, tree, tvb, offset,
6530 CAMEL_AChBillingChargingCharacteristicsV2_choice, hf_index, ett_camel_CAMEL_AChBillingChargingCharacteristicsV2,
6531 NULL);
6533 return offset;
6538 static int
6539 dissect_camel_SpecializedResourceReportArgV23(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6540 offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
6542 return offset;
6547 static int
6548 dissect_camel_INTEGER(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6549 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
6550 NULL);
6552 return offset;
6556 static const value_string camel_InvokeId_vals[] = {
6557 { 0, "present" },
6558 { 1, "absent" },
6559 { 0, NULL }
6562 static const ber_choice_t InvokeId_choice[] = {
6563 { 0, &hf_camel_present , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_camel_INTEGER },
6564 { 1, &hf_camel_absent , BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_camel_NULL },
6565 { 0, NULL, 0, 0, 0, NULL }
6568 static int
6569 dissect_camel_InvokeId(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6570 offset = dissect_ber_choice(actx, tree, tvb, offset,
6571 InvokeId_choice, hf_index, ett_camel_InvokeId,
6572 NULL);
6574 return offset;
6579 static int
6580 dissect_camel_InvokeId_present(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6581 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
6582 NULL);
6584 return offset;
6589 static int
6590 dissect_camel_T_linkedIdPresent(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6591 offset = dissect_camel_InvokeId_present(implicit_tag, tvb, offset, actx, tree, hf_index);
6593 return offset;
6597 static const value_string camel_T_linkedId_vals[] = {
6598 { 0, "present" },
6599 { 1, "absent" },
6600 { 0, NULL }
6603 static const ber_choice_t T_linkedId_choice[] = {
6604 { 0, &hf_camel_linkedIdPresent, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_T_linkedIdPresent },
6605 { 1, &hf_camel_absent , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_NULL },
6606 { 0, NULL, 0, 0, 0, NULL }
6609 static int
6610 dissect_camel_T_linkedId(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6611 offset = dissect_ber_choice(actx, tree, tvb, offset,
6612 T_linkedId_choice, hf_index, ett_camel_T_linkedId,
6613 NULL);
6615 return offset;
6620 static int
6621 dissect_camel_T_argument(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6622 offset = dissect_invokeData(tree, tvb, offset, actx);
6625 return offset;
6629 static const ber_sequence_t Invoke_sequence[] = {
6630 { &hf_camel_invokeId , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_InvokeId },
6631 { &hf_camel_linkedId , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_T_linkedId },
6632 { &hf_camel_opcode , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_Code },
6633 { &hf_camel_argument , BER_CLASS_ANY, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_camel_T_argument },
6634 { NULL, 0, 0, 0, NULL }
6637 static int
6638 dissect_camel_Invoke(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6639 camel_opcode_type=CAMEL_OPCODE_INVOKE;
6641 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6642 Invoke_sequence, hf_index, ett_camel_Invoke);
6644 return offset;
6649 static int
6650 dissect_camel_ResultArgument(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6651 offset = dissect_returnResultData(tree, tvb, offset, actx);
6654 return offset;
6658 static const ber_sequence_t T_result_sequence[] = {
6659 { &hf_camel_opcode , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_Code },
6660 { &hf_camel_resultArgument, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_camel_ResultArgument },
6661 { NULL, 0, 0, 0, NULL }
6664 static int
6665 dissect_camel_T_result(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6666 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6667 T_result_sequence, hf_index, ett_camel_T_result);
6669 return offset;
6673 static const ber_sequence_t ReturnResult_sequence[] = {
6674 { &hf_camel_invokeId , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_InvokeId },
6675 { &hf_camel_result , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_camel_T_result },
6676 { NULL, 0, 0, 0, NULL }
6679 static int
6680 dissect_camel_ReturnResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6681 camel_opcode_type=CAMEL_OPCODE_RETURN_RESULT;
6683 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6684 ReturnResult_sequence, hf_index, ett_camel_ReturnResult);
6686 return offset;
6691 static int
6692 dissect_camel_T_parameter(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6693 offset = dissect_returnErrorData(tree, tvb, offset, actx);
6697 return offset;
6701 static const ber_sequence_t ReturnError_sequence[] = {
6702 { &hf_camel_invokeId , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_InvokeId },
6703 { &hf_camel_errcode , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_Code },
6704 { &hf_camel_parameter , BER_CLASS_ANY, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_camel_T_parameter },
6705 { NULL, 0, 0, 0, NULL }
6708 static int
6709 dissect_camel_ReturnError(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6710 camel_opcode_type=CAMEL_OPCODE_RETURN_ERROR;
6712 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6713 ReturnError_sequence, hf_index, ett_camel_ReturnError);
6715 return offset;
6719 static const value_string camel_GeneralProblem_vals[] = {
6720 { 0, "unrecognizedPDU" },
6721 { 1, "mistypedPDU" },
6722 { 2, "badlyStructuredPDU" },
6723 { 0, NULL }
6727 static int
6728 dissect_camel_GeneralProblem(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6729 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
6730 NULL);
6732 return offset;
6736 static const value_string camel_InvokeProblem_vals[] = {
6737 { 0, "duplicateInvocation" },
6738 { 1, "unrecognizedOperation" },
6739 { 2, "mistypedArgument" },
6740 { 3, "resourceLimitation" },
6741 { 4, "releaseInProgress" },
6742 { 5, "unrecognizedLinkedId" },
6743 { 6, "linkedResponseUnexpected" },
6744 { 7, "unexpectedLinkedOperation" },
6745 { 0, NULL }
6749 static int
6750 dissect_camel_InvokeProblem(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6751 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
6752 NULL);
6754 return offset;
6758 static const value_string camel_ReturnResultProblem_vals[] = {
6759 { 0, "unrecognizedInvocation" },
6760 { 1, "resultResponseUnexpected" },
6761 { 2, "mistypedResult" },
6762 { 0, NULL }
6766 static int
6767 dissect_camel_ReturnResultProblem(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6768 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
6769 NULL);
6771 return offset;
6775 static const value_string camel_ReturnErrorProblem_vals[] = {
6776 { 0, "unrecognizedInvocation" },
6777 { 1, "errorResponseUnexpected" },
6778 { 2, "unrecognizedError" },
6779 { 3, "unexpectedError" },
6780 { 4, "mistypedParameter" },
6781 { 0, NULL }
6785 static int
6786 dissect_camel_ReturnErrorProblem(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6787 offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
6788 NULL);
6790 return offset;
6794 static const value_string camel_T_problem_vals[] = {
6795 { 0, "general" },
6796 { 1, "invoke" },
6797 { 2, "returnResult" },
6798 { 3, "returnError" },
6799 { 0, NULL }
6802 static const ber_choice_t T_problem_choice[] = {
6803 { 0, &hf_camel_general , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_camel_GeneralProblem },
6804 { 1, &hf_camel_invokeProblem , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_InvokeProblem },
6805 { 2, &hf_camel_problemReturnResult, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_ReturnResultProblem },
6806 { 3, &hf_camel_returnErrorProblem, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_camel_ReturnErrorProblem },
6807 { 0, NULL, 0, 0, 0, NULL }
6810 static int
6811 dissect_camel_T_problem(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6812 offset = dissect_ber_choice(actx, tree, tvb, offset,
6813 T_problem_choice, hf_index, ett_camel_T_problem,
6814 NULL);
6816 return offset;
6820 static const ber_sequence_t Reject_sequence[] = {
6821 { &hf_camel_invokeId , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_InvokeId },
6822 { &hf_camel_problem , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_camel_T_problem },
6823 { NULL, 0, 0, 0, NULL }
6826 static int
6827 dissect_camel_Reject(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6828 camel_opcode_type=CAMEL_OPCODE_REJECT;
6831 offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
6832 Reject_sequence, hf_index, ett_camel_Reject);
6834 return offset;
6838 static const ber_choice_t ROS_choice[] = {
6839 { 1, &hf_camel_invoke , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_camel_Invoke },
6840 { 2, &hf_camel_returnResult , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_camel_ReturnResult },
6841 { 3, &hf_camel_returnError , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_camel_ReturnError },
6842 { 4, &hf_camel_reject , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_camel_Reject },
6843 { 0, NULL, 0, 0, 0, NULL }
6846 static int
6847 dissect_camel_ROS(bool implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
6848 offset = dissect_ber_choice(actx, tree, tvb, offset,
6849 ROS_choice, hf_index, ett_camel_ROS,
6850 NULL);
6852 return offset;
6855 /*--- PDUs ---*/
6857 static int dissect_PAR_cancelFailed_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6858 int offset = 0;
6859 asn1_ctx_t asn1_ctx;
6860 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6861 offset = dissect_camel_PAR_cancelFailed(false, tvb, offset, &asn1_ctx, tree, hf_camel_PAR_cancelFailed_PDU);
6862 return offset;
6864 static int dissect_PAR_requestedInfoError_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6865 int offset = 0;
6866 asn1_ctx_t asn1_ctx;
6867 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6868 offset = dissect_camel_PAR_requestedInfoError(false, tvb, offset, &asn1_ctx, tree, hf_camel_PAR_requestedInfoError_PDU);
6869 return offset;
6871 static int dissect_UnavailableNetworkResource_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6872 int offset = 0;
6873 asn1_ctx_t asn1_ctx;
6874 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6875 offset = dissect_camel_UnavailableNetworkResource(false, tvb, offset, &asn1_ctx, tree, hf_camel_UnavailableNetworkResource_PDU);
6876 return offset;
6878 static int dissect_PAR_taskRefused_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6879 int offset = 0;
6880 asn1_ctx_t asn1_ctx;
6881 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6882 offset = dissect_camel_PAR_taskRefused(false, tvb, offset, &asn1_ctx, tree, hf_camel_PAR_taskRefused_PDU);
6883 return offset;
6885 static int dissect_CAP_GPRS_ReferenceNumber_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6886 int offset = 0;
6887 asn1_ctx_t asn1_ctx;
6888 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6889 offset = dissect_camel_CAP_GPRS_ReferenceNumber(false, tvb, offset, &asn1_ctx, tree, hf_camel_CAP_GPRS_ReferenceNumber_PDU);
6890 return offset;
6892 static int dissect_PlayAnnouncementArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6893 int offset = 0;
6894 asn1_ctx_t asn1_ctx;
6895 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6896 offset = dissect_camel_PlayAnnouncementArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_PlayAnnouncementArg_PDU);
6897 return offset;
6899 static int dissect_PromptAndCollectUserInformationArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6900 int offset = 0;
6901 asn1_ctx_t asn1_ctx;
6902 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6903 offset = dissect_camel_PromptAndCollectUserInformationArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_PromptAndCollectUserInformationArg_PDU);
6904 return offset;
6906 static int dissect_ReceivedInformationArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6907 int offset = 0;
6908 asn1_ctx_t asn1_ctx;
6909 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6910 offset = dissect_camel_ReceivedInformationArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ReceivedInformationArg_PDU);
6911 return offset;
6913 static int dissect_SpecializedResourceReportArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6914 int offset = 0;
6915 asn1_ctx_t asn1_ctx;
6916 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6917 offset = dissect_camel_SpecializedResourceReportArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_SpecializedResourceReportArg_PDU);
6918 return offset;
6920 static int dissect_ApplyChargingArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6921 int offset = 0;
6922 asn1_ctx_t asn1_ctx;
6923 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6924 offset = dissect_camel_ApplyChargingArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ApplyChargingArg_PDU);
6925 return offset;
6927 static int dissect_ApplyChargingReportArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6928 int offset = 0;
6929 asn1_ctx_t asn1_ctx;
6930 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6931 offset = dissect_camel_ApplyChargingReportArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ApplyChargingReportArg_PDU);
6932 return offset;
6934 static int dissect_AssistRequestInstructionsArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6935 int offset = 0;
6936 asn1_ctx_t asn1_ctx;
6937 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6938 offset = dissect_camel_AssistRequestInstructionsArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_AssistRequestInstructionsArg_PDU);
6939 return offset;
6941 static int dissect_CallGapArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6942 int offset = 0;
6943 asn1_ctx_t asn1_ctx;
6944 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6945 offset = dissect_camel_CallGapArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_CallGapArg_PDU);
6946 return offset;
6948 static int dissect_CallInformationReportArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6949 int offset = 0;
6950 asn1_ctx_t asn1_ctx;
6951 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6952 offset = dissect_camel_CallInformationReportArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_CallInformationReportArg_PDU);
6953 return offset;
6955 static int dissect_CallInformationRequestArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6956 int offset = 0;
6957 asn1_ctx_t asn1_ctx;
6958 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6959 offset = dissect_camel_CallInformationRequestArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_CallInformationRequestArg_PDU);
6960 return offset;
6962 static int dissect_CancelArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6963 int offset = 0;
6964 asn1_ctx_t asn1_ctx;
6965 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6966 offset = dissect_camel_CancelArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_CancelArg_PDU);
6967 return offset;
6969 static int dissect_CollectInformationArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6970 int offset = 0;
6971 asn1_ctx_t asn1_ctx;
6972 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6973 offset = dissect_camel_CollectInformationArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_CollectInformationArg_PDU);
6974 return offset;
6976 static int dissect_ConnectArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6977 int offset = 0;
6978 asn1_ctx_t asn1_ctx;
6979 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6980 offset = dissect_camel_ConnectArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ConnectArg_PDU);
6981 return offset;
6983 static int dissect_ConnectToResourceArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6984 int offset = 0;
6985 asn1_ctx_t asn1_ctx;
6986 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6987 offset = dissect_camel_ConnectToResourceArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ConnectToResourceArg_PDU);
6988 return offset;
6990 static int dissect_ContinueWithArgumentArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6991 int offset = 0;
6992 asn1_ctx_t asn1_ctx;
6993 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
6994 offset = dissect_camel_ContinueWithArgumentArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ContinueWithArgumentArg_PDU);
6995 return offset;
6997 static int dissect_DisconnectForwardConnectionWithArgumentArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
6998 int offset = 0;
6999 asn1_ctx_t asn1_ctx;
7000 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7001 offset = dissect_camel_DisconnectForwardConnectionWithArgumentArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_DisconnectForwardConnectionWithArgumentArg_PDU);
7002 return offset;
7004 static int dissect_DisconnectLegArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7005 int offset = 0;
7006 asn1_ctx_t asn1_ctx;
7007 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7008 offset = dissect_camel_DisconnectLegArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_DisconnectLegArg_PDU);
7009 return offset;
7011 static int dissect_EntityReleasedArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7012 int offset = 0;
7013 asn1_ctx_t asn1_ctx;
7014 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7015 offset = dissect_camel_EntityReleasedArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_EntityReleasedArg_PDU);
7016 return offset;
7018 static int dissect_EstablishTemporaryConnectionArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7019 int offset = 0;
7020 asn1_ctx_t asn1_ctx;
7021 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7022 offset = dissect_camel_EstablishTemporaryConnectionArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_EstablishTemporaryConnectionArg_PDU);
7023 return offset;
7025 static int dissect_EventReportBCSMArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7026 int offset = 0;
7027 asn1_ctx_t asn1_ctx;
7028 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7029 offset = dissect_camel_EventReportBCSMArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_EventReportBCSMArg_PDU);
7030 return offset;
7032 static int dissect_FurnishChargingInformationArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7033 int offset = 0;
7034 asn1_ctx_t asn1_ctx;
7035 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7036 offset = dissect_camel_FurnishChargingInformationArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_FurnishChargingInformationArg_PDU);
7037 return offset;
7039 static int dissect_InitialDPArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7040 int offset = 0;
7041 asn1_ctx_t asn1_ctx;
7042 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7043 offset = dissect_camel_InitialDPArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_InitialDPArg_PDU);
7044 return offset;
7046 static int dissect_InitiateCallAttemptArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7047 int offset = 0;
7048 asn1_ctx_t asn1_ctx;
7049 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7050 offset = dissect_camel_InitiateCallAttemptArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_InitiateCallAttemptArg_PDU);
7051 return offset;
7053 static int dissect_InitiateCallAttemptRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7054 int offset = 0;
7055 asn1_ctx_t asn1_ctx;
7056 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7057 offset = dissect_camel_InitiateCallAttemptRes(false, tvb, offset, &asn1_ctx, tree, hf_camel_InitiateCallAttemptRes_PDU);
7058 return offset;
7060 static int dissect_MoveLegArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7061 int offset = 0;
7062 asn1_ctx_t asn1_ctx;
7063 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7064 offset = dissect_camel_MoveLegArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_MoveLegArg_PDU);
7065 return offset;
7067 static int dissect_PlayToneArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7068 int offset = 0;
7069 asn1_ctx_t asn1_ctx;
7070 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7071 offset = dissect_camel_PlayToneArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_PlayToneArg_PDU);
7072 return offset;
7074 static int dissect_ReleaseCallArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7075 int offset = 0;
7076 asn1_ctx_t asn1_ctx;
7077 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7078 offset = dissect_camel_ReleaseCallArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ReleaseCallArg_PDU);
7079 return offset;
7081 static int dissect_RequestReportBCSMEventArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7082 int offset = 0;
7083 asn1_ctx_t asn1_ctx;
7084 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7085 offset = dissect_camel_RequestReportBCSMEventArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_RequestReportBCSMEventArg_PDU);
7086 return offset;
7088 static int dissect_ResetTimerArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7089 int offset = 0;
7090 asn1_ctx_t asn1_ctx;
7091 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7092 offset = dissect_camel_ResetTimerArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ResetTimerArg_PDU);
7093 return offset;
7095 static int dissect_SendChargingInformationArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7096 int offset = 0;
7097 asn1_ctx_t asn1_ctx;
7098 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7099 offset = dissect_camel_SendChargingInformationArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_SendChargingInformationArg_PDU);
7100 return offset;
7102 static int dissect_SplitLegArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7103 int offset = 0;
7104 asn1_ctx_t asn1_ctx;
7105 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7106 offset = dissect_camel_SplitLegArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_SplitLegArg_PDU);
7107 return offset;
7109 static int dissect_ApplyChargingGPRSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7110 int offset = 0;
7111 asn1_ctx_t asn1_ctx;
7112 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7113 offset = dissect_camel_ApplyChargingGPRSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ApplyChargingGPRSArg_PDU);
7114 return offset;
7116 static int dissect_ApplyChargingReportGPRSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7117 int offset = 0;
7118 asn1_ctx_t asn1_ctx;
7119 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7120 offset = dissect_camel_ApplyChargingReportGPRSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ApplyChargingReportGPRSArg_PDU);
7121 return offset;
7123 static int dissect_CancelGPRSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7124 int offset = 0;
7125 asn1_ctx_t asn1_ctx;
7126 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7127 offset = dissect_camel_CancelGPRSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_CancelGPRSArg_PDU);
7128 return offset;
7130 static int dissect_ConnectGPRSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7131 int offset = 0;
7132 asn1_ctx_t asn1_ctx;
7133 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7134 offset = dissect_camel_ConnectGPRSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ConnectGPRSArg_PDU);
7135 return offset;
7137 static int dissect_ContinueGPRSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7138 int offset = 0;
7139 asn1_ctx_t asn1_ctx;
7140 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7141 offset = dissect_camel_ContinueGPRSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ContinueGPRSArg_PDU);
7142 return offset;
7144 static int dissect_EntityReleasedGPRSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7145 int offset = 0;
7146 asn1_ctx_t asn1_ctx;
7147 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7148 offset = dissect_camel_EntityReleasedGPRSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_EntityReleasedGPRSArg_PDU);
7149 return offset;
7151 static int dissect_EventReportGPRSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7152 int offset = 0;
7153 asn1_ctx_t asn1_ctx;
7154 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7155 offset = dissect_camel_EventReportGPRSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_EventReportGPRSArg_PDU);
7156 return offset;
7158 static int dissect_FurnishChargingInformationGPRSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7159 int offset = 0;
7160 asn1_ctx_t asn1_ctx;
7161 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7162 offset = dissect_camel_FurnishChargingInformationGPRSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_FurnishChargingInformationGPRSArg_PDU);
7163 return offset;
7165 static int dissect_InitialDPGPRSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7166 int offset = 0;
7167 asn1_ctx_t asn1_ctx;
7168 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7169 offset = dissect_camel_InitialDPGPRSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_InitialDPGPRSArg_PDU);
7170 return offset;
7172 static int dissect_ReleaseGPRSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7173 int offset = 0;
7174 asn1_ctx_t asn1_ctx;
7175 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7176 offset = dissect_camel_ReleaseGPRSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ReleaseGPRSArg_PDU);
7177 return offset;
7179 static int dissect_RequestReportGPRSEventArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7180 int offset = 0;
7181 asn1_ctx_t asn1_ctx;
7182 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7183 offset = dissect_camel_RequestReportGPRSEventArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_RequestReportGPRSEventArg_PDU);
7184 return offset;
7186 static int dissect_ResetTimerGPRSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7187 int offset = 0;
7188 asn1_ctx_t asn1_ctx;
7189 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7190 offset = dissect_camel_ResetTimerGPRSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ResetTimerGPRSArg_PDU);
7191 return offset;
7193 static int dissect_SendChargingInformationGPRSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7194 int offset = 0;
7195 asn1_ctx_t asn1_ctx;
7196 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7197 offset = dissect_camel_SendChargingInformationGPRSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_SendChargingInformationGPRSArg_PDU);
7198 return offset;
7200 static int dissect_ConnectSMSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7201 int offset = 0;
7202 asn1_ctx_t asn1_ctx;
7203 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7204 offset = dissect_camel_ConnectSMSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ConnectSMSArg_PDU);
7205 return offset;
7207 static int dissect_EventReportSMSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7208 int offset = 0;
7209 asn1_ctx_t asn1_ctx;
7210 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7211 offset = dissect_camel_EventReportSMSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_EventReportSMSArg_PDU);
7212 return offset;
7214 static int dissect_FurnishChargingInformationSMSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7215 int offset = 0;
7216 asn1_ctx_t asn1_ctx;
7217 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7218 offset = dissect_camel_FurnishChargingInformationSMSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_FurnishChargingInformationSMSArg_PDU);
7219 return offset;
7221 static int dissect_InitialDPSMSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7222 int offset = 0;
7223 asn1_ctx_t asn1_ctx;
7224 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7225 offset = dissect_camel_InitialDPSMSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_InitialDPSMSArg_PDU);
7226 return offset;
7228 static int dissect_ReleaseSMSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7229 int offset = 0;
7230 asn1_ctx_t asn1_ctx;
7231 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7232 offset = dissect_camel_ReleaseSMSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ReleaseSMSArg_PDU);
7233 return offset;
7235 static int dissect_RequestReportSMSEventArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7236 int offset = 0;
7237 asn1_ctx_t asn1_ctx;
7238 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7239 offset = dissect_camel_RequestReportSMSEventArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_RequestReportSMSEventArg_PDU);
7240 return offset;
7242 static int dissect_ResetTimerSMSArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7243 int offset = 0;
7244 asn1_ctx_t asn1_ctx;
7245 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7246 offset = dissect_camel_ResetTimerSMSArg(false, tvb, offset, &asn1_ctx, tree, hf_camel_ResetTimerSMSArg_PDU);
7247 return offset;
7249 static int dissect_CAP_U_ABORT_REASON_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
7250 int offset = 0;
7251 asn1_ctx_t asn1_ctx;
7252 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
7253 offset = dissect_camel_CAP_U_ABORT_REASON(false, tvb, offset, &asn1_ctx, tree, hf_camel_CAP_U_ABORT_REASON_PDU);
7254 return offset;
7259 static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx) {
7261 switch(opcode){
7262 case opcode_playAnnouncement: /* playAnnouncement */
7263 offset= dissect_PlayAnnouncementArg_PDU(tvb, actx->pinfo , tree , NULL);
7264 break;
7265 case opcode_promptAndCollectUserInformation: /* promptAndCollectUserInformation */
7266 offset= dissect_PromptAndCollectUserInformationArg_PDU(tvb, actx->pinfo , tree , NULL);
7267 break;
7268 case opcode_specializedResourceReport: /* specializedResourceReport */
7269 offset= dissect_SpecializedResourceReportArg_PDU(tvb, actx->pinfo , tree , NULL);
7270 break;
7271 case opcode_applyCharging: /* applyCharging */
7272 offset= dissect_ApplyChargingArg_PDU(tvb, actx->pinfo , tree , NULL);
7273 break;
7274 case opcode_applyChargingReport: /* applyChargingReport */
7275 offset= dissect_ApplyChargingReportArg_PDU(tvb, actx->pinfo , tree , NULL);
7276 break;
7277 case opcode_assistRequestInstructions: /* assistRequestInstructions */
7278 offset= dissect_AssistRequestInstructionsArg_PDU(tvb, actx->pinfo , tree , NULL);
7279 break;
7280 case opcode_callGap: /* callGap */
7281 offset= dissect_CallGapArg_PDU(tvb, actx->pinfo , tree , NULL);
7282 break;
7283 case opcode_callInformationReport: /* callInformationReport */
7284 offset= dissect_CallInformationReportArg_PDU(tvb, actx->pinfo , tree , NULL);
7285 break;
7286 case opcode_callInformationRequest: /* callInformationRequest */
7287 offset= dissect_CallInformationRequestArg_PDU(tvb, actx->pinfo , tree , NULL);
7288 break;
7289 case opcode_cancel: /* cancel */
7290 offset= dissect_CancelArg_PDU(tvb, actx->pinfo , tree , NULL);
7291 break;
7292 case opcode_collectInformation: /* collectInformation */
7293 offset= dissect_CollectInformationArg_PDU(tvb, actx->pinfo , tree , NULL);
7294 break;
7295 case opcode_connect: /* connect */
7296 offset= dissect_ConnectArg_PDU(tvb, actx->pinfo , tree , NULL);
7297 break;
7298 case opcode_connectToResource: /* connectToResource */
7299 offset= dissect_ConnectToResourceArg_PDU(tvb, actx->pinfo , tree , NULL);
7300 break;
7301 case opcode_continueWithArgument: /* continueWithArgument */
7302 offset= dissect_ContinueWithArgumentArg_PDU(tvb, actx->pinfo , tree , NULL);
7303 break;
7304 case opcode_dFCWithArgument: /* disconnectForwardConnectionWithArgument */
7305 offset= dissect_DisconnectForwardConnectionWithArgumentArg_PDU(tvb, actx->pinfo , tree , NULL);
7306 break;
7307 case opcode_disconnectLeg: /* disconnectLeg */
7308 offset= dissect_DisconnectLegArg_PDU(tvb, actx->pinfo , tree , NULL);
7309 break;
7310 case opcode_entityReleased: /* entityReleased */
7311 offset= dissect_EntityReleasedArg_PDU(tvb, actx->pinfo , tree , NULL);
7312 break;
7313 case opcode_establishTemporaryConnection: /* establishTemporaryConnection */
7314 offset= dissect_EstablishTemporaryConnectionArg_PDU(tvb, actx->pinfo , tree , NULL);
7315 break;
7316 case opcode_eventReportBCSM: /* eventReportBCSM */
7317 offset= dissect_EventReportBCSMArg_PDU(tvb, actx->pinfo , tree , NULL);
7318 break;
7319 case opcode_furnishChargingInformation: /* furnishChargingInformation */
7320 offset= dissect_FurnishChargingInformationArg_PDU(tvb, actx->pinfo , tree , NULL);
7321 break;
7322 case opcode_initialDP: /* initialDP */
7323 offset= dissect_InitialDPArg_PDU(tvb, actx->pinfo , tree , NULL);
7324 break;
7325 case opcode_initiateCallAttempt: /* initiateCallAttempt */
7326 offset= dissect_InitiateCallAttemptArg_PDU(tvb, actx->pinfo , tree , NULL);
7327 break;
7328 case opcode_moveLeg: /* moveLeg */
7329 offset= dissect_MoveLegArg_PDU(tvb, actx->pinfo , tree , NULL);
7330 break;
7331 case opcode_playTone: /* playTone */
7332 offset= dissect_PlayToneArg_PDU(tvb, actx->pinfo , tree , NULL);
7333 break;
7334 case opcode_releaseCall: /* releaseCall */
7335 offset= dissect_ReleaseCallArg_PDU(tvb, actx->pinfo , tree , NULL);
7336 break;
7337 case opcode_requestReportBCSMEvent: /* requestReportBCSMEvent */
7338 offset= dissect_RequestReportBCSMEventArg_PDU(tvb, actx->pinfo , tree , NULL);
7339 break;
7340 case opcode_resetTimer: /* resetTimer */
7341 offset= dissect_ResetTimerArg_PDU(tvb, actx->pinfo , tree , NULL);
7342 break;
7343 case opcode_sendChargingInformation: /* sendChargingInformation */
7344 offset= dissect_SendChargingInformationArg_PDU(tvb, actx->pinfo , tree , NULL);
7345 break;
7346 case opcode_splitLeg: /* splitLeg */
7347 offset= dissect_SplitLegArg_PDU(tvb, actx->pinfo , tree , NULL);
7348 break;
7349 case opcode_applyChargingGPRS: /* applyChargingGPRS */
7350 offset= dissect_ApplyChargingGPRSArg_PDU(tvb, actx->pinfo , tree , NULL);
7351 break;
7352 case opcode_applyChargingReportGPRS: /* applyChargingReportGPRS */
7353 offset= dissect_ApplyChargingReportGPRSArg_PDU(tvb, actx->pinfo , tree , NULL);
7354 break;
7355 case opcode_cancelGPRS: /* cancelGPRS */
7356 offset= dissect_CancelGPRSArg_PDU(tvb, actx->pinfo , tree , NULL);
7357 break;
7358 case opcode_connectGPRS: /* connectGPRS */
7359 offset= dissect_ConnectGPRSArg_PDU(tvb, actx->pinfo , tree , NULL);
7360 break;
7361 case opcode_continueGPRS: /* continueGPRS */
7362 offset= dissect_ContinueGPRSArg_PDU(tvb, actx->pinfo , tree , NULL);
7363 break;
7364 case opcode_entityReleasedGPRS: /* entityReleasedGPRS */
7365 offset= dissect_EntityReleasedGPRSArg_PDU(tvb, actx->pinfo , tree , NULL);
7366 break;
7367 case opcode_eventReportGPRS: /* eventReportGPRS */
7368 offset= dissect_EventReportGPRSArg_PDU(tvb, actx->pinfo , tree , NULL);
7369 break;
7370 case opcode_furnishChargingInformationGPRS: /* furnishChargingInformationGPRS */
7371 offset= dissect_FurnishChargingInformationGPRSArg_PDU(tvb, actx->pinfo , tree , NULL);
7372 break;
7373 case opcode_initialDPGPRS: /* initialDPGPRS */
7374 offset= dissect_InitialDPGPRSArg_PDU(tvb, actx->pinfo , tree , NULL);
7375 break;
7376 case opcode_releaseGPRS: /* releaseGPRS */
7377 offset= dissect_ReleaseGPRSArg_PDU(tvb, actx->pinfo , tree , NULL);
7378 break;
7379 case opcode_requestReportGPRSEvent: /* requestReportGPRSEvent */
7380 offset= dissect_RequestReportGPRSEventArg_PDU(tvb, actx->pinfo , tree , NULL);
7381 break;
7382 case opcode_resetTimerGPRS: /* resetTimerGPRS */
7383 offset= dissect_ResetTimerGPRSArg_PDU(tvb, actx->pinfo , tree , NULL);
7384 break;
7385 case opcode_sendChargingInformationGPRS: /* sendChargingInformationGPRS */
7386 offset= dissect_SendChargingInformationGPRSArg_PDU(tvb, actx->pinfo , tree , NULL);
7387 break;
7388 case opcode_connectSMS: /* connectSMS */
7389 offset= dissect_ConnectSMSArg_PDU(tvb, actx->pinfo , tree , NULL);
7390 break;
7391 case opcode_eventReportSMS: /* eventReportSMS */
7392 offset= dissect_EventReportSMSArg_PDU(tvb, actx->pinfo , tree , NULL);
7393 break;
7394 case opcode_furnishChargingInformationSMS: /* furnishChargingInformationSMS */
7395 offset= dissect_FurnishChargingInformationSMSArg_PDU(tvb, actx->pinfo , tree , NULL);
7396 break;
7397 case opcode_initialDPSMS: /* initialDPSMS */
7398 offset= dissect_InitialDPSMSArg_PDU(tvb, actx->pinfo , tree , NULL);
7399 break;
7400 case opcode_releaseSMS: /* releaseSMS */
7401 offset= dissect_ReleaseSMSArg_PDU(tvb, actx->pinfo , tree , NULL);
7402 break;
7403 case opcode_requestReportSMSEvent: /* requestReportSMSEvent */
7404 offset= dissect_RequestReportSMSEventArg_PDU(tvb, actx->pinfo , tree , NULL);
7405 break;
7406 case opcode_resetTimerSMS: /* resetTimerSMS */
7407 offset= dissect_ResetTimerSMSArg_PDU(tvb, actx->pinfo , tree , NULL);
7408 break;
7409 default:
7410 proto_tree_add_expert_format(tree, actx->pinfo, &ei_camel_unknown_invokeData,
7411 tvb, offset, -1, "Unknown invokeData %d", opcode);
7412 /* todo call the asn.1 dissector */
7413 break;
7415 return offset;
7419 static int dissect_returnResultData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) {
7421 switch(opcode){
7422 case opcode_promptAndCollectUserInformation: /* promptAndCollectUserInformation */
7423 offset= dissect_ReceivedInformationArg_PDU(tvb, actx->pinfo , tree , NULL);
7424 break;
7425 case opcode_initiateCallAttempt: /* initiateCallAttempt */
7426 offset= dissect_InitiateCallAttemptRes_PDU(tvb, actx->pinfo , tree , NULL);
7427 break;
7428 default:
7429 proto_tree_add_expert_format(tree, actx->pinfo, &ei_camel_unknown_returnResultData,
7430 tvb, offset, -1, "Unknown returnResultData %d",opcode);
7432 return offset;
7436 static int dissect_returnErrorData(proto_tree *tree, tvbuff_t *tvb, int offset,asn1_ctx_t *actx) {
7438 switch(errorCode) {
7439 case errcode_cancelFailed: /* cancelFailed */
7440 dissect_PAR_cancelFailed_PDU(tvb, actx->pinfo , tree , NULL);
7441 break;
7442 case errcode_requestedInfoError: /* requestedInfoError */
7443 dissect_PAR_requestedInfoError_PDU(tvb, actx->pinfo , tree , NULL);
7444 break;
7445 case errcode_systemFailure: /* systemFailure */
7446 dissect_UnavailableNetworkResource_PDU(tvb, actx->pinfo , tree , NULL);
7447 break;
7448 case errcode_taskRefused: /* taskRefused */
7449 dissect_PAR_taskRefused_PDU(tvb, actx->pinfo , tree , NULL);
7450 break;
7451 default:
7452 proto_tree_add_expert_format(tree, actx->pinfo, &ei_camel_unknown_returnErrorData,
7453 tvb, offset, -1, "Unknown returnErrorData %d",errorCode);
7455 return offset;
7460 * Functions needed for Hash-Table
7463 /* compare 2 keys */
7464 static int
7465 camelsrt_call_equal(const void *k1, const void *k2)
7467 const struct camelsrt_call_info_key_t *key1 = (const struct camelsrt_call_info_key_t *) k1;
7468 const struct camelsrt_call_info_key_t *key2 = (const struct camelsrt_call_info_key_t *) k2;
7470 return (key1->SessionIdKey == key2->SessionIdKey) ;
7473 /* calculate a hash key */
7474 static unsigned
7475 camelsrt_call_hash(const void *k)
7477 const struct camelsrt_call_info_key_t *key = (const struct camelsrt_call_info_key_t *) k;
7478 return key->SessionIdKey;
7482 * Find the dialog by Key and Time
7484 static struct camelsrt_call_t *
7485 find_camelsrt_call(struct camelsrt_call_info_key_t *p_camelsrt_call_key)
7487 struct camelsrt_call_t *p_camelsrt_call = NULL;
7488 p_camelsrt_call = (struct camelsrt_call_t *)wmem_map_lookup(srt_calls, p_camelsrt_call_key);
7490 #ifdef DEBUG_CAMELSRT
7491 if(p_camelsrt_call) {
7492 dbg(10,"D%d ", p_camelsrt_call->session_id);
7493 } else {
7494 dbg(23,"Not in hash ");
7496 #endif
7498 return p_camelsrt_call;
7502 * Initialize the data per call for the Service Response Time Statistics
7503 * Data are linked to a Camel operation in a TCAP transaction
7505 static void
7506 raz_camelsrt_call (struct camelsrt_call_t *p_camelsrt_call)
7508 memset(p_camelsrt_call,0,sizeof(struct camelsrt_call_t));
7512 * New record to create, to identify a new transaction
7514 static struct camelsrt_call_t *
7515 new_camelsrt_call(struct camelsrt_call_info_key_t *p_camelsrt_call_key)
7517 struct camelsrt_call_info_key_t *p_new_camelsrt_call_key;
7518 struct camelsrt_call_t *p_new_camelsrt_call = NULL;
7520 /* Register the transaction in the hash table
7521 with the tcap transaction Id as main Key
7522 Once created, this entry will be updated later */
7524 p_new_camelsrt_call_key = wmem_new(wmem_file_scope(), struct camelsrt_call_info_key_t);
7525 p_new_camelsrt_call_key->SessionIdKey = p_camelsrt_call_key->SessionIdKey;
7526 p_new_camelsrt_call = wmem_new(wmem_file_scope(), struct camelsrt_call_t);
7527 raz_camelsrt_call(p_new_camelsrt_call);
7528 p_new_camelsrt_call->session_id = camelsrt_global_SessionId++;
7529 #ifdef DEBUG_CAMELSRT
7530 dbg(10,"D%d ", p_new_camelsrt_call->session_id);
7531 #endif
7532 /* store it */
7533 wmem_map_insert(srt_calls, p_new_camelsrt_call_key, p_new_camelsrt_call);
7534 return p_new_camelsrt_call;
7538 * Routine called when the TAP is initialized.
7539 * so hash table are (re)created
7541 static void
7542 camelsrt_init_routine(void)
7544 /* Reset the session counter */
7545 camelsrt_global_SessionId=1;
7547 /* The Display of SRT is enable
7548 * 1) For wireshark only if Persistent Stat is enable
7549 * 2) For Tshark, if the SRT CLI tap is registered
7551 gcamel_DisplaySRT=gcamel_PersistentSRT || gcamel_StatSRT;
7556 * Update a record with the data of the Request
7558 static void
7559 update_camelsrt_call(struct camelsrt_call_t *p_camelsrt_call, packet_info *pinfo,
7560 unsigned msg_category)
7562 p_camelsrt_call->category[msg_category].req_num = pinfo->num;
7563 p_camelsrt_call->category[msg_category].rsp_num = 0;
7564 p_camelsrt_call->category[msg_category].responded = false;
7565 p_camelsrt_call->category[msg_category].req_time = pinfo->abs_ts;
7569 * Update the Camel session info, and close the session.
7570 * Then remove the associated context, if we do not have persistentSRT enable
7572 static void
7573 camelsrt_close_call_matching(packet_info *pinfo,
7574 struct camelsrt_info_t *p_camelsrt_info)
7576 struct camelsrt_call_t *p_camelsrt_call;
7577 struct camelsrt_call_info_key_t camelsrt_call_key;
7578 nstime_t delta;
7580 p_camelsrt_info->bool_msginfo[CAMELSRT_SESSION]=true;
7581 #ifdef DEBUG_CAMELSRT
7582 dbg(10,"\n Session end #%u\n", pinfo->num);
7583 #endif
7584 /* look only for matching request, if matching conversation is available. */
7585 camelsrt_call_key.SessionIdKey = p_camelsrt_info->tcap_session_id;
7587 #ifdef DEBUG_CAMELSRT
7588 dbg(11,"Search key %lu ",camelsrt_call_key.SessionIdKey);
7589 #endif
7590 p_camelsrt_call = find_camelsrt_call(&camelsrt_call_key);
7591 if(p_camelsrt_call) {
7592 #ifdef DEBUG_CAMELSRT
7593 dbg(12,"Found ");
7594 #endif
7595 /* Calculate Service Response Time */
7596 nstime_delta(&delta, &pinfo->abs_ts, &p_camelsrt_call->category[CAMELSRT_SESSION].req_time);
7597 p_camelsrt_call->category[CAMELSRT_SESSION].responded = true;
7598 p_camelsrt_info->msginfo[CAMELSRT_SESSION].request_available = true;
7599 p_camelsrt_info->msginfo[CAMELSRT_SESSION].is_delta_time = true;
7600 p_camelsrt_info->msginfo[CAMELSRT_SESSION].delta_time = delta; /* give it to tap */
7601 p_camelsrt_info->msginfo[CAMELSRT_SESSION].req_time = p_camelsrt_call->category[CAMELSRT_SESSION].req_time;
7603 if ( !gcamel_PersistentSRT ) {
7604 wmem_map_remove(srt_calls, &camelsrt_call_key);
7605 #ifdef DEBUG_CAMELSRT
7606 dbg(20,"remove hash ");
7607 #endif
7608 } else {
7609 #ifdef DEBUG_CAMELSRT
7610 dbg(20,"keep hash ");
7611 #endif
7613 } /* call reference found */
7617 * Callback function for the TCAP dissector
7618 * This callback function is used to inform the camel layer, that the session
7619 * has been Closed or Aborted by a TCAP message without Camel component
7620 * So, we can close the context for camel session, and update the stats.
7622 static void
7623 camelsrt_tcap_matching(tvbuff_t *tvb _U_, packet_info *pinfo,
7624 proto_tree *tree _U_,
7625 struct tcaphash_context_t *p_tcap_context)
7627 struct camelsrt_info_t *p_camelsrt_info;
7629 #ifdef DEBUG_CAMELSRT
7630 dbg(11,"Camel_CallBack ");
7631 #endif
7632 p_camelsrt_info=camelsrt_razinfo();
7634 p_camelsrt_info->tcap_context=p_tcap_context;
7635 if (p_tcap_context) {
7636 #ifdef DEBUG_CAMELSRT
7637 dbg(11,"Close TCAP ");
7638 #endif
7639 p_camelsrt_info->tcap_session_id = p_tcap_context->session_id;
7640 camelsrt_close_call_matching(pinfo, p_camelsrt_info);
7641 tap_queue_packet(camel_tap, pinfo, p_camelsrt_info);
7646 * Create the record identifiying the Camel session
7647 * As the Tcap session id given by the TCAP dissector is uniq, it will be
7648 * used as main key.
7650 static void
7651 camelsrt_begin_call_matching(packet_info *pinfo,
7652 struct camelsrt_info_t *p_camelsrt_info)
7654 struct camelsrt_call_t *p_camelsrt_call;
7655 struct camelsrt_call_info_key_t camelsrt_call_key;
7657 p_camelsrt_info->bool_msginfo[CAMELSRT_SESSION]=true;
7659 /* prepare the key data */
7660 camelsrt_call_key.SessionIdKey = p_camelsrt_info->tcap_session_id;
7662 /* look up the request */
7663 #ifdef DEBUG_CAMELSRT
7664 dbg(10,"\n Session begin #%u\n", pinfo->num);
7665 dbg(11,"Search key %lu ",camelsrt_call_key.SessionIdKey);
7666 #endif
7667 p_camelsrt_call = (struct camelsrt_call_t *)wmem_map_lookup(srt_calls, &camelsrt_call_key);
7668 if (p_camelsrt_call) {
7669 /* We have seen this request before -> do nothing */
7670 #ifdef DEBUG_CAMELSRT
7671 dbg(22,"Already seen ");
7672 #endif
7673 } else { /* p_camelsrt_call has not been found */
7674 #ifdef DEBUG_CAMELSRT
7675 dbg(10,"New key %lu ",camelsrt_call_key.SessionIdKey);
7676 #endif
7677 p_camelsrt_call = new_camelsrt_call(&camelsrt_call_key);
7678 p_camelsrt_call->tcap_context=(struct tcaphash_context_t *)p_camelsrt_info->tcap_context;
7679 update_camelsrt_call(p_camelsrt_call, pinfo,CAMELSRT_SESSION);
7681 #ifdef DEBUG_CAMELSRT
7682 dbg(11,"Update Callback ");
7683 #endif
7684 p_camelsrt_call->tcap_context->callback=camelsrt_tcap_matching;
7689 * Register the request, and try to find the response
7692 static void
7693 camelsrt_request_call_matching(tvbuff_t *tvb, packet_info *pinfo,
7694 proto_tree *tree,
7695 struct camelsrt_info_t *p_camelsrt_info,
7696 unsigned srt_type )
7698 struct camelsrt_call_t *p_camelsrt_call;
7699 struct camelsrt_call_info_key_t camelsrt_call_key;
7700 proto_item *ti, *hidden_item;
7702 #ifdef DEBUG_CAMELSRT
7703 dbg(10,"\n %s #%u\n", val_to_str_const(srt_type, camelSRTtype_naming, "Unk"),pinfo->num);
7704 #endif
7706 /* look only for matching request, if matching conversation is available. */
7707 camelsrt_call_key.SessionIdKey = p_camelsrt_info->tcap_session_id;
7709 #ifdef DEBUG_CAMELSRT
7710 dbg(11,"Search key %lu ", camelsrt_call_key.SessionIdKey);
7711 #endif
7712 p_camelsrt_call = find_camelsrt_call(&camelsrt_call_key);
7713 if(p_camelsrt_call) {
7714 #ifdef DEBUG_CAMELSRT
7715 dbg(12,"Found ");
7716 #endif
7717 if (gcamel_DisplaySRT)
7718 proto_tree_add_uint(tree, hf_camelsrt_SessionId, tvb, 0,0, p_camelsrt_call->session_id);
7721 /* Hmm.. As there are several slices ApplyChargingReport/ApplyCharging
7722 * we will prepare the measurement for 3 slices with 3 categories */
7723 if (srt_type==CAMELSRT_VOICE_ACR1) {
7724 if (p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].req_num == 0) {
7725 srt_type=CAMELSRT_VOICE_ACR1;
7726 } else if ( (p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].req_num == 0)
7727 && (p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].rsp_num != 0)
7728 && (p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].rsp_num < pinfo->num) ) {
7729 srt_type=CAMELSRT_VOICE_ACR2;
7730 } else if ( (p_camelsrt_call->category[CAMELSRT_VOICE_ACR3].req_num == 0)
7731 && (p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].rsp_num != 0)
7732 && (p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].rsp_num < pinfo->num) ) {
7733 srt_type=CAMELSRT_VOICE_ACR3;
7734 } else if (p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].rsp_num != 0
7735 && p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].rsp_num > pinfo->num) {
7736 srt_type=CAMELSRT_VOICE_ACR1;
7737 } else if ( p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].rsp_num != 0
7738 && p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].rsp_num > pinfo->num) {
7739 srt_type=CAMELSRT_VOICE_ACR2;
7740 } else if (p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].rsp_num != 0
7741 && p_camelsrt_call->category[CAMELSRT_VOICE_ACR3].rsp_num > pinfo->num) {
7742 srt_type=CAMELSRT_VOICE_ACR3;
7744 #ifdef DEBUG_CAMELSRT
7745 dbg(70,"Request ACR %u ",srt_type);
7746 dbg(70,"ACR1 %u %u",p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].req_num, p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].rsp_num);
7747 dbg(70,"ACR2 %u %u",p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].req_num, p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].rsp_num);
7748 dbg(70,"ACR3 %u %u",p_camelsrt_call->category[CAMELSRT_VOICE_ACR3].req_num, p_camelsrt_call->category[CAMELSRT_VOICE_ACR3].rsp_num);
7749 #endif
7750 } /* not ACR */
7751 p_camelsrt_info->bool_msginfo[srt_type]=true;
7754 if (p_camelsrt_call->category[srt_type].req_num == 0) {
7755 /* We have not yet seen a request to that call, so this must be the first request
7756 remember its frame number. */
7757 #ifdef DEBUG_CAMELSRT
7758 dbg(5,"Set reqlink #%u ", pinfo->num);
7759 #endif
7760 update_camelsrt_call(p_camelsrt_call, pinfo, srt_type);
7761 } else {
7762 /* We have seen a request to this call - but was it *this* request? */
7763 if (p_camelsrt_call->category[srt_type].req_num != pinfo->num) {
7765 if (srt_type!=CAMELSRT_VOICE_DISC) {
7766 /* No, so it's a duplicate request. Mark it as such. */
7767 #ifdef DEBUG_CAMELSRT
7768 dbg(21,"Display_duplicate with req %d ", p_camelsrt_call->category[srt_type].req_num);
7769 #endif
7770 p_camelsrt_info->msginfo[srt_type].is_duplicate = true;
7771 if (gcamel_DisplaySRT){
7772 hidden_item = proto_tree_add_uint(tree, hf_camelsrt_Duplicate, tvb, 0,0, 77);
7773 proto_item_set_hidden(hidden_item);
7776 } else {
7777 /* Ignore duplicate frame */
7778 if (pinfo->num > p_camelsrt_call->category[srt_type].req_num) {
7779 p_camelsrt_call->category[srt_type].req_num = pinfo->num;
7780 #ifdef DEBUG_CAMELSRT
7781 dbg(5,"DISC Set reqlink #%u ", pinfo->num);
7782 #endif
7783 update_camelsrt_call(p_camelsrt_call, pinfo, srt_type);
7784 } /* greater frame */
7785 } /* DISC */
7786 } /* req_num already seen */
7787 } /* req_num != 0 */
7789 /* add link to response frame, if available */
7790 if ( gcamel_DisplaySRT &&
7791 (p_camelsrt_call->category[srt_type].rsp_num != 0) &&
7792 (p_camelsrt_call->category[srt_type].req_num != 0) &&
7793 (p_camelsrt_call->category[srt_type].req_num == pinfo->num) ) {
7794 #ifdef DEBUG_CAMELSRT
7795 dbg(20,"Display_framersplink %d ",p_camelsrt_call->category[srt_type].rsp_num);
7796 #endif
7797 ti = proto_tree_add_uint_format(tree, hf_camelsrt_RequestFrame, tvb, 0, 0,
7798 p_camelsrt_call->category[srt_type].rsp_num,
7799 "Linked response %s in frame %u",
7800 val_to_str_const(srt_type, camelSRTtype_naming, "Unk"),
7801 p_camelsrt_call->category[srt_type].rsp_num);
7802 proto_item_set_generated(ti);
7803 } /* frame valid */
7804 } /* call reference */
7808 * Display the delta time between two messages in a field corresponding
7809 * to the category (hf_camelsrt_DeltaTimexx).
7811 static void
7812 camelsrt_display_DeltaTime(proto_tree *tree, tvbuff_t *tvb, nstime_t *value_ptr,
7813 unsigned category)
7815 proto_item *ti;
7817 if ( gcamel_DisplaySRT ) {
7818 switch(category) {
7819 case CAMELSRT_VOICE_INITIALDP:
7820 ti = proto_tree_add_time(tree, hf_camelsrt_DeltaTime31, tvb, 0, 0, value_ptr);
7821 proto_item_set_generated(ti);
7822 break;
7824 case CAMELSRT_VOICE_ACR1:
7825 case CAMELSRT_VOICE_ACR2:
7826 case CAMELSRT_VOICE_ACR3:
7827 ti = proto_tree_add_time(tree, hf_camelsrt_DeltaTime22, tvb, 0, 0, value_ptr);
7828 proto_item_set_generated(ti);
7829 break;
7831 case CAMELSRT_VOICE_DISC:
7832 ti = proto_tree_add_time(tree, hf_camelsrt_DeltaTime35, tvb, 0, 0, value_ptr);
7833 proto_item_set_generated(ti);
7834 break;
7836 case CAMELSRT_GPRS_INITIALDP:
7837 ti = proto_tree_add_time(tree, hf_camelsrt_DeltaTime75, tvb, 0, 0, value_ptr);
7838 proto_item_set_generated(ti);
7839 break;
7841 case CAMELSRT_GPRS_REPORT:
7842 ti = proto_tree_add_time(tree, hf_camelsrt_DeltaTime80, tvb, 0, 0, value_ptr);
7843 proto_item_set_generated(ti);
7844 break;
7846 case CAMELSRT_SMS_INITIALDP:
7847 ti = proto_tree_add_time(tree, hf_camelsrt_DeltaTime65, tvb, 0, 0, value_ptr);
7848 proto_item_set_generated(ti);
7849 break;
7851 default:
7852 break;
7858 * Check if the received message is a response to a previous request
7859 * registered is the camel session context.
7861 static void
7862 camelsrt_report_call_matching(tvbuff_t *tvb, packet_info *pinfo,
7863 proto_tree *tree,
7864 struct camelsrt_info_t *p_camelsrt_info,
7865 unsigned srt_type)
7867 struct camelsrt_call_t *p_camelsrt_call;
7868 struct camelsrt_call_info_key_t camelsrt_call_key;
7869 nstime_t delta;
7870 proto_item *ti, *hidden_item;
7872 #ifdef DEBUG_CAMELSRT
7873 dbg(10,"\n %s #%u\n", val_to_str_const(srt_type, camelSRTtype_naming, "Unk"),pinfo->num);
7874 #endif
7875 camelsrt_call_key.SessionIdKey = p_camelsrt_info->tcap_session_id;
7876 /* look only for matching request, if matching conversation is available. */
7878 #ifdef DEBUG_CAMELSRT
7879 dbg(11,"Search key %lu ",camelsrt_call_key.SessionIdKey);
7880 #endif
7881 p_camelsrt_call = find_camelsrt_call(&camelsrt_call_key);
7882 if(p_camelsrt_call) {
7883 #ifdef DEBUG_CAMELSRT
7884 dbg(12,"Found, req=%d ",p_camelsrt_call->category[srt_type].req_num);
7885 #endif
7886 if ( gcamel_DisplaySRT )
7887 proto_tree_add_uint(tree, hf_camelsrt_SessionId, tvb, 0,0, p_camelsrt_call->session_id);
7889 if (srt_type==CAMELSRT_VOICE_ACR1) {
7890 if (p_camelsrt_call->category[CAMELSRT_VOICE_ACR3].req_num != 0
7891 && p_camelsrt_call->category[CAMELSRT_VOICE_ACR3].req_num < pinfo->num) {
7892 srt_type=CAMELSRT_VOICE_ACR1;
7893 } else if ( p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].req_num != 0
7894 && p_camelsrt_call->category[CAMELSRT_VOICE_ACR2].req_num < pinfo->num) {
7895 srt_type=CAMELSRT_VOICE_ACR2;
7896 } else if (p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].req_num != 0
7897 && p_camelsrt_call->category[CAMELSRT_VOICE_ACR1].req_num < pinfo->num) {
7898 srt_type=CAMELSRT_VOICE_ACR1;
7900 #ifdef DEBUG_CAMELSRT
7901 dbg(70,"Report ACR %u ",srt_type);
7902 #endif
7903 } /* not ACR */
7904 p_camelsrt_info->bool_msginfo[srt_type]=true;
7906 if (p_camelsrt_call->category[srt_type].rsp_num == 0) {
7907 if ( (p_camelsrt_call->category[srt_type].req_num != 0)
7908 && (pinfo->num > p_camelsrt_call->category[srt_type].req_num) ){
7909 /* We have not yet seen a response to that call, so this must be the first response;
7910 remember its frame number only if response comes after request */
7911 #ifdef DEBUG_CAMELSRT
7912 dbg(14,"Set reslink #%d req %u ",pinfo->num, p_camelsrt_call->category[srt_type].req_num);
7913 #endif
7914 p_camelsrt_call->category[srt_type].rsp_num = pinfo->num;
7916 } else {
7917 #ifdef DEBUG_CAMELSRT
7918 dbg(2,"badreslink #%u req %u ",pinfo->num, p_camelsrt_call->category[srt_type].req_num);
7919 #endif
7920 } /* req_num != 0 */
7921 } else { /* rsp_num != 0 */
7922 /* We have seen a response to this call - but was it *this* response? */
7923 if (p_camelsrt_call->category[srt_type].rsp_num != pinfo->num) {
7924 /* No, so it's a duplicate response. Mark it as such. */
7925 #ifdef DEBUG_CAMELSRT
7926 dbg(21,"Display_duplicate rsp=%d ", p_camelsrt_call->category[srt_type].rsp_num);
7927 #endif
7928 p_camelsrt_info->msginfo[srt_type].is_duplicate = true;
7929 if ( gcamel_DisplaySRT ){
7930 hidden_item = proto_tree_add_uint(tree, hf_camelsrt_Duplicate, tvb, 0,0, 77);
7931 proto_item_set_hidden(hidden_item);
7934 } /* rsp_num != 0 */
7936 if ( (p_camelsrt_call->category[srt_type].req_num != 0) &&
7937 (p_camelsrt_call->category[srt_type].rsp_num != 0) &&
7938 (p_camelsrt_call->category[srt_type].rsp_num == pinfo->num) ) {
7940 p_camelsrt_call->category[srt_type].responded = true;
7941 p_camelsrt_info->msginfo[srt_type].request_available = true;
7942 #ifdef DEBUG_CAMELSRT
7943 dbg(20,"Display_frameReqlink %d ",p_camelsrt_call->category[srt_type].req_num);
7944 #endif
7945 /* Indicate the frame to which this is a reply. */
7946 if ( gcamel_DisplaySRT ) {
7947 ti = proto_tree_add_uint_format(tree, hf_camelsrt_ResponseFrame, tvb, 0, 0,
7948 p_camelsrt_call->category[srt_type].req_num,
7949 "Linked request %s in frame %u",
7950 val_to_str_const(srt_type, camelSRTtype_naming, "Unk"),
7951 p_camelsrt_call->category[srt_type].req_num);
7952 proto_item_set_generated(ti);
7954 /* Calculate Service Response Time */
7955 nstime_delta(&delta, &pinfo->abs_ts, &p_camelsrt_call->category[srt_type].req_time);
7957 p_camelsrt_info->msginfo[srt_type].is_delta_time = true;
7958 p_camelsrt_info->msginfo[srt_type].delta_time = delta; /* give it to tap */
7959 p_camelsrt_info->msginfo[srt_type].req_time = p_camelsrt_call->category[srt_type].req_time;
7961 /* display Service Response Time and make it filterable */
7962 camelsrt_display_DeltaTime(tree, tvb, &delta, srt_type);
7964 } /*req_num != 0 && not duplicate */
7965 } /* call reference found */
7969 * Service Response Time analyze, called just after the camel dissector
7970 * According to the camel operation, we
7971 * - open/close a context for the camel session
7972 * - look for a request, or look for the corresponding response
7974 void
7975 camelsrt_call_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
7976 struct camelsrt_info_t *p_camelsrt_info)
7979 #ifdef DEBUG_CAMELSRT
7980 dbg(10,"tcap_session #%d ", p_camelsrt_info->tcap_session_id);
7981 #endif
7983 switch (p_camelsrt_info->opcode) {
7985 case 0: /*InitialDP*/
7986 camelsrt_begin_call_matching(pinfo, p_camelsrt_info);
7987 camelsrt_request_call_matching(tvb, pinfo, tree, p_camelsrt_info,
7988 CAMELSRT_VOICE_INITIALDP);
7989 break;
7990 case 60: /*InitialDPSMS*/
7991 camelsrt_begin_call_matching(pinfo, p_camelsrt_info);
7992 camelsrt_request_call_matching(tvb, pinfo, tree, p_camelsrt_info,
7993 CAMELSRT_SMS_INITIALDP);
7994 break;
7995 case 78: /*InitialDPGPRS*/
7996 camelsrt_begin_call_matching(pinfo, p_camelsrt_info);
7997 camelsrt_request_call_matching(tvb, pinfo, tree, p_camelsrt_info,
7998 CAMELSRT_GPRS_INITIALDP);
7999 break;
8001 case 23: /*RequestReportBCSMEvent*/
8002 break;
8004 case 63: /*RequestReportSMSEvent*/
8005 break;
8007 case 81: /*RequestReportGPRSEvent*/
8008 break;
8010 case 24: /*EventReportBCSMEvent*/
8011 camelsrt_request_call_matching(tvb, pinfo, tree, p_camelsrt_info,
8012 CAMELSRT_VOICE_DISC );
8013 break;
8015 case 64: /*EventReportSMS*/
8016 /* Session has been explicitly closed without TC_END */
8017 camelsrt_close_call_matching(pinfo, p_camelsrt_info);
8018 tcapsrt_close((struct tcaphash_context_t *)p_camelsrt_info->tcap_context, pinfo);
8019 break;
8021 case 80: /*EventReportGPRS*/
8022 camelsrt_begin_call_matching(pinfo, p_camelsrt_info);
8023 camelsrt_request_call_matching(tvb, pinfo, tree, p_camelsrt_info,
8024 CAMELSRT_GPRS_REPORT);
8025 break;
8027 case 35: /*ApplyCharging*/
8028 camelsrt_report_call_matching(tvb, pinfo, tree, p_camelsrt_info,
8029 CAMELSRT_VOICE_ACR1 );
8030 break;
8032 case 71: /*ApplyChargingGPRS*/
8033 break;
8035 case 36: /*ApplyChargingReport*/
8036 camelsrt_request_call_matching(tvb, pinfo, tree, p_camelsrt_info,
8037 CAMELSRT_VOICE_ACR1 );
8038 break;
8040 case 72: /*ApplyChargingReportGPRS*/
8041 break;
8043 case 31: /*Continue*/
8044 camelsrt_report_call_matching(tvb, pinfo, tree, p_camelsrt_info,
8045 CAMELSRT_VOICE_INITIALDP);
8046 break;
8047 case 65: /*ContinueSMS*/
8048 camelsrt_report_call_matching(tvb, pinfo, tree, p_camelsrt_info,
8049 CAMELSRT_SMS_INITIALDP);
8050 break;
8051 case 75: /*ContinueGPRS*/
8052 camelsrt_report_call_matching(tvb, pinfo, tree, p_camelsrt_info,
8053 CAMELSRT_GPRS_INITIALDP);
8054 camelsrt_report_call_matching(tvb, pinfo, tree, p_camelsrt_info,
8055 CAMELSRT_GPRS_REPORT);
8056 break;
8058 case 22: /*ReleaseCall*/
8059 camelsrt_report_call_matching(tvb, pinfo, tree, p_camelsrt_info,
8060 CAMELSRT_VOICE_DISC);
8061 /* Session has been closed by Network */
8062 camelsrt_close_call_matching(pinfo, p_camelsrt_info);
8063 break;
8065 case 66: /*ReleaseSMS*/
8066 /* Session has been closed by Network */
8067 camelsrt_close_call_matching(pinfo, p_camelsrt_info);
8068 tcapsrt_close((struct tcaphash_context_t *)p_camelsrt_info->tcap_context,pinfo);
8069 break;
8071 case 79: /*ReleaseGPRS*/
8072 /* Session has been closed by Network */
8073 camelsrt_close_call_matching(pinfo, p_camelsrt_info);
8074 break;
8075 } /* switch opcode */
8079 * Initialize the Message Info used by the main dissector
8080 * Data are linked to a TCAP transaction
8082 struct camelsrt_info_t *
8083 camelsrt_razinfo(void)
8085 struct camelsrt_info_t *p_camelsrt_info ;
8087 /* Global buffer for packet extraction */
8088 camelsrt_global_current++;
8089 if(camelsrt_global_current==MAX_CAMEL_INSTANCE){
8090 camelsrt_global_current=0;
8093 p_camelsrt_info=&camelsrt_global_info[camelsrt_global_current];
8094 memset(p_camelsrt_info,0,sizeof(struct camelsrt_info_t));
8096 p_camelsrt_info->opcode=255;
8098 return p_camelsrt_info;
8102 static uint8_t camel_pdu_type;
8103 static uint8_t camel_pdu_size;
8106 static int
8107 dissect_camel_camelPDU(bool implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_,proto_tree *tree,
8108 int hf_index, struct tcap_private_t * p_private_tcap) {
8110 opcode = 0;
8111 if (p_private_tcap != NULL){
8112 gp_camelsrt_info->tcap_context=p_private_tcap->context;
8113 if (p_private_tcap->context)
8114 gp_camelsrt_info->tcap_session_id = ( (struct tcaphash_context_t *) (p_private_tcap->context))->session_id;
8117 camel_pdu_type = tvb_get_uint8(tvb, offset)&0x0f;
8118 /* Get the length and add 2 */
8119 camel_pdu_size = tvb_get_uint8(tvb, offset+1)+2;
8121 /* Populate the info column with PDU type*/
8122 col_add_str(actx->pinfo->cinfo, COL_INFO, val_to_str(camel_pdu_type, camel_Component_vals, "Unknown Camel (%u)"));
8123 col_append_str(actx->pinfo->cinfo, COL_INFO, " ");
8125 is_ExtensionField =false;
8126 offset = dissect_camel_ROS(true, tvb, offset, actx, tree, hf_index);
8128 return offset;
8131 static int
8132 dissect_camel_all(int version, const char* col_protocol, const char* suffix,
8133 tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data)
8135 proto_item *item;
8136 proto_tree *tree = NULL, *stat_tree = NULL;
8137 struct tcap_private_t * p_private_tcap = (struct tcap_private_t*)data;
8138 asn1_ctx_t asn1_ctx;
8139 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
8141 col_set_str(pinfo->cinfo, COL_PROTOCOL, col_protocol);
8143 camel_ver = version;
8145 /* create display subtree for the protocol */
8146 if(parent_tree){
8147 item = proto_tree_add_item(parent_tree, proto_camel, tvb, 0, -1, ENC_NA);
8148 tree = proto_item_add_subtree(item, ett_camel);
8149 proto_item_append_text(item, "%s", suffix);
8151 /* camelsrt reset counter, and initialise global pointer
8152 to store service response time related data */
8153 gp_camelsrt_info=camelsrt_razinfo();
8155 dissect_camel_camelPDU(false, tvb, 0, &asn1_ctx , tree, -1, p_private_tcap);
8157 /* If a Tcap context is associated to this transaction */
8158 if (gp_camelsrt_info->tcap_context ) {
8159 if (gcamel_DisplaySRT && tree) {
8160 stat_tree = proto_tree_add_subtree(tree, tvb, 0, 0, ett_camel_stat, NULL, "Stat");
8162 camelsrt_call_matching(tvb, pinfo, stat_tree, gp_camelsrt_info);
8163 tap_queue_packet(camel_tap, pinfo, gp_camelsrt_info);
8166 return tvb_captured_length(tvb);
8169 static int
8170 dissect_camel_v1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data)
8172 return dissect_camel_all(1, "Camel-v1", "-V1", tvb, pinfo, parent_tree, data);
8175 static int
8176 dissect_camel_v2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data)
8178 return dissect_camel_all(2, "Camel-v2", "-V2", tvb, pinfo, parent_tree, data);
8181 static int
8182 dissect_camel_v3(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data)
8184 return dissect_camel_all(3, "Camel-v3", "-V3", tvb, pinfo, parent_tree, data);
8187 static int
8188 dissect_camel_v4(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data)
8190 return dissect_camel_all(4, "Camel-v4", "-V4", tvb, pinfo, parent_tree, data);
8193 static int
8194 dissect_camel(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data)
8196 return dissect_camel_all(4, "Camel", "", tvb, pinfo, parent_tree, data);
8199 /* TAP STAT INFO */
8200 typedef enum
8202 MESSAGE_TYPE_COLUMN = 0,
8203 COUNT_COLUMN
8204 } camel_stat_columns;
8206 static stat_tap_table_item camel_stat_fields[] = {{TABLE_ITEM_STRING, TAP_ALIGN_LEFT, "Message Type or Reason", "%-25s"}, {TABLE_ITEM_UINT, TAP_ALIGN_RIGHT, "Count", "%d"}};
8208 static void camel_stat_init(stat_tap_table_ui* new_stat)
8210 const char *table_name = "CAMEL Message Counters";
8211 int num_fields = array_length(camel_stat_fields);
8212 stat_tap_table *table;
8213 int i;
8214 stat_tap_table_item_type items[array_length(camel_stat_fields)];
8216 table = stat_tap_find_table(new_stat, table_name);
8217 if (table) {
8218 if (new_stat->stat_tap_reset_table_cb) {
8219 new_stat->stat_tap_reset_table_cb(table);
8221 return;
8224 table = stat_tap_init_table(table_name, num_fields, 0, NULL);
8225 stat_tap_add_table(new_stat, table);
8227 memset(items, 0x0, sizeof(items));
8228 items[MESSAGE_TYPE_COLUMN].type = TABLE_ITEM_STRING;
8229 items[COUNT_COLUMN].type = TABLE_ITEM_UINT;
8230 items[COUNT_COLUMN].value.uint_value = 0;
8232 /* Add a row for each value type */
8233 for (i = 0; i < camel_MAX_NUM_OPR_CODES; i++)
8235 const char *ocs = try_val_to_str(i, camel_opr_code_strings);
8236 char *col_str;
8237 if (ocs) {
8238 col_str = ws_strdup_printf("Request %s", ocs);
8239 } else {
8240 col_str = ws_strdup_printf("Unknown op code %d", i);
8243 items[MESSAGE_TYPE_COLUMN].value.string_value = col_str;
8244 stat_tap_init_table_row(table, i, num_fields, items);
8248 static tap_packet_status
8249 camel_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *csi_ptr, tap_flags_t flags _U_)
8251 stat_data_t* stat_data = (stat_data_t*)tapdata;
8252 const struct camelsrt_info_t *csi = (const struct camelsrt_info_t *) csi_ptr;
8253 stat_tap_table* table;
8254 stat_tap_table_item_type* msg_data;
8256 table = g_array_index(stat_data->stat_tap_data->tables, stat_tap_table*, 0);
8257 if (csi->opcode >= table->num_elements)
8258 return TAP_PACKET_DONT_REDRAW;
8259 msg_data = stat_tap_get_field_data(table, csi->opcode, COUNT_COLUMN);
8260 msg_data->value.uint_value++;
8261 stat_tap_set_field_data(table, csi->opcode, COUNT_COLUMN, msg_data);
8263 return TAP_PACKET_REDRAW;
8266 static void
8267 camel_stat_reset(stat_tap_table* table)
8269 unsigned element;
8270 stat_tap_table_item_type* item_data;
8272 for (element = 0; element < table->num_elements; element++)
8274 item_data = stat_tap_get_field_data(table, element, COUNT_COLUMN);
8275 item_data->value.uint_value = 0;
8276 stat_tap_set_field_data(table, element, COUNT_COLUMN, item_data);
8280 static void
8281 camel_stat_free_table_item(stat_tap_table* table _U_, unsigned row _U_, unsigned column, stat_tap_table_item_type* field_data)
8283 if (column != MESSAGE_TYPE_COLUMN) return;
8284 g_free((char*)field_data->value.string_value);
8287 /*--- proto_reg_handoff_camel ---------------------------------------*/
8288 static void range_delete_callback(uint32_t ssn, void *ptr _U_)
8290 if (ssn) {
8291 delete_itu_tcap_subdissector(ssn, camel_handle);
8295 static void range_add_callback(uint32_t ssn, void *ptr _U_)
8297 if (ssn) {
8298 add_itu_tcap_subdissector(ssn, camel_handle);
8302 void proto_reg_handoff_camel(void) {
8303 static bool camel_prefs_initialized = false;
8304 static range_t *ssn_range;
8306 if (!camel_prefs_initialized) {
8308 camel_prefs_initialized = true;
8310 register_ber_oid_dissector_handle("0.4.0.0.1.0.50.0",camel_v1_handle, proto_camel, "CAP-v1-gsmSSF-to-gsmSCF-AC" );
8311 register_ber_oid_dissector_handle("0.4.0.0.1.0.50.1",camel_v2_handle, proto_camel, "CAP-v2-gsmSSF-to-gsmSCF-AC" );
8312 register_ber_oid_dissector_handle("0.4.0.0.1.0.51.1",camel_v2_handle, proto_camel, "CAP-v2-assist-gsmSSF-to-gsmSCF-AC" );
8313 register_ber_oid_dissector_handle("0.4.0.0.1.0.52.1",camel_v2_handle, proto_camel, "CAP-v2-gsmSRF-to-gsmSCF-AC" );
8315 /* CAMEL Phase 3 Application Context Names */
8316 register_ber_oid_dissector_handle("0.4.0.0.1.21.3.4", camel_v3_handle, proto_camel, "capssf-scfGenericAC");
8317 register_ber_oid_dissector_handle("0.4.0.0.1.21.3.6", camel_v3_handle, proto_camel, "capssf-scfAssistHandoffAC");
8318 register_ber_oid_dissector_handle("0.4.0.0.1.20.3.14", camel_v3_handle, proto_camel, "gsmSRF-gsmSCF-ac");
8319 register_ber_oid_dissector_handle("0.4.0.0.1.21.3.50", camel_v3_handle, proto_camel, "cap3-gprssf-scfAC");
8320 register_ber_oid_dissector_handle("0.4.0.0.1.21.3.51", camel_v3_handle, proto_camel, "cap3-gsmscf-gprsssfAC");
8321 register_ber_oid_dissector_handle("0.4.0.0.1.21.3.61", camel_v3_handle, proto_camel, "cap3-sms-AC");
8323 /* CAMEL Phase 4 Application Context Names */
8324 register_ber_oid_dissector_handle("0.4.0.0.1.23.3.4", camel_v4_handle, proto_camel, "capssf-scfGenericAC");
8325 register_ber_oid_dissector_handle("0.4.0.0.1.23.3.6", camel_v4_handle, proto_camel, "capssf-scfAssistHandoffAC");
8326 register_ber_oid_dissector_handle("0.4.0.0.1.23.3.8", camel_v4_handle, proto_camel, "capscf-ssfGenericAC");
8327 register_ber_oid_dissector_handle("0.4.0.0.1.22.3.14", camel_v4_handle, proto_camel, "gsmSRF-gsmSCF-ac");
8328 register_ber_oid_dissector_handle("0.4.0.0.1.23.3.61", camel_v4_handle, proto_camel, "cap4-sms-AC");
8331 register_ber_oid_dissector("0.4.0.0.1.1.5.2", dissect_CAP_GPRS_ReferenceNumber_PDU, proto_camel, "id-CAP-GPRS-ReferenceNumber");
8332 register_ber_oid_dissector("0.4.0.0.1.1.2.2", dissect_CAP_U_ABORT_REASON_PDU, proto_camel, "id-CAP-U-ABORT-Reason");
8334 } else {
8335 range_foreach(ssn_range, range_delete_callback, NULL);
8336 wmem_free(wmem_epan_scope(), ssn_range);
8339 ssn_range = range_copy(wmem_epan_scope(), global_ssn_range);
8341 range_foreach(ssn_range, range_add_callback, NULL);
8345 void proto_register_camel(void) {
8346 module_t *camel_module;
8347 /* List of fields */
8348 static hf_register_info hf[] = {
8349 { &hf_camel_extension_code_local,
8350 { "local", "camel.extension_code_local",
8351 FT_INT32, BASE_DEC, NULL, 0,
8352 "Extension local code", HFILL }},
8353 { &hf_camel_error_code_local,
8354 { "local", "camel.error_code_local",
8355 FT_INT32, BASE_DEC, VALS(camel_err_code_string_vals), 0,
8356 "ERROR code", HFILL }},
8357 { &hf_camel_cause_indicator, /* Currently not enabled */
8358 { "Cause indicator", "camel.cause_indicator",
8359 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &q850_cause_code_vals_ext, 0x7f,
8360 NULL, HFILL }},
8361 { &hf_digit,
8362 { "Digit Value", "camel.digit_value",
8363 FT_UINT8, BASE_DEC, VALS(digit_value), 0, NULL, HFILL }},
8364 { &hf_camel_PDPTypeNumber_etsi,
8365 { "ETSI defined PDP Type Value", "camel.PDPTypeNumber_etsi",
8366 FT_UINT8, BASE_HEX, VALS(gsm_map_etsi_defined_pdp_vals), 0,
8367 NULL, HFILL }},
8368 { &hf_camel_PDPTypeNumber_ietf,
8369 { "IETF defined PDP Type Value", "camel.PDPTypeNumber_ietf",
8370 FT_UINT8, BASE_HEX, VALS(gsm_map_ietf_defined_pdp_vals), 0,
8371 NULL, HFILL }},
8372 { &hf_camel_PDPAddress_IPv4,
8373 { "PDPAddress IPv4", "camel.PDPAddress_IPv4",
8374 FT_IPv4, BASE_NONE, NULL, 0,
8375 "IPAddress IPv4", HFILL }},
8376 { &hf_camel_PDPAddress_IPv6,
8377 { "PDPAddress IPv6", "camel.PDPAddress_IPv6",
8378 FT_IPv6, BASE_NONE, NULL, 0,
8379 "IPAddress IPv6", HFILL }},
8380 { &hf_camel_cellGlobalIdOrServiceAreaIdFixedLength,
8381 { "CellGlobalIdOrServiceAreaIdFixedLength", "camel.CellGlobalIdOrServiceAreaIdFixedLength",
8382 FT_BYTES, BASE_NONE, NULL, 0,
8383 "LocationInformationGPRS/CellGlobalIdOrServiceAreaIdOrLAI", HFILL }},
8384 { &hf_camel_RP_Cause,
8385 { "RP Cause", "camel.RP_Cause",
8386 FT_UINT8, BASE_DEC, VALS(camel_RP_Cause_values), 0x7F,
8387 "RP Cause Value", HFILL }},
8389 { &hf_camel_CAMEL_AChBillingChargingCharacteristics,
8390 { "CAMEL-AChBillingChargingCharacteristics", "camel.CAMEL_AChBillingChargingCharacteristics",
8391 FT_UINT32, BASE_DEC, VALS(camel_CAMEL_AChBillingChargingCharacteristics_vals), 0,
8392 NULL, HFILL }},
8394 { &hf_camel_CAMEL_FCIBillingChargingCharacteristics,
8395 { "CAMEL-FCIBillingChargingCharacteristics", "camel.CAMEL_FCIBillingChargingCharacteristics",
8396 FT_UINT32, BASE_DEC, VALS(camel_CAMEL_FCIBillingChargingCharacteristics_vals), 0,
8397 NULL, HFILL }},
8399 { &hf_camel_CAMEL_FCIGPRSBillingChargingCharacteristics,
8400 { "CAMEL-FCIGPRSBillingChargingCharacteristics", "camel.CAMEL_FCIGPRSBillingChargingCharacteristics",
8401 FT_UINT32, BASE_DEC, NULL, 0,
8402 NULL, HFILL }},
8404 { &hf_camel_CAMEL_FCISMSBillingChargingCharacteristics,
8405 { "CAMEL-FCISMSBillingChargingCharacteristics", "camel.CAMEL_FCISMSBillingChargingCharacteristics",
8406 FT_UINT32, BASE_DEC, VALS(camel_CAMEL_FCISMSBillingChargingCharacteristics_vals), 0,
8407 NULL, HFILL }},
8409 { &hf_camel_CAMEL_SCIBillingChargingCharacteristics,
8410 { "CAMEL-SCIBillingChargingCharacteristics", "camel.CAMEL_SCIBillingChargingCharacteristics",
8411 FT_UINT32, BASE_DEC, VALS(camel_CAMEL_SCIBillingChargingCharacteristics_vals), 0,
8412 NULL, HFILL }},
8414 { &hf_camel_CAMEL_SCIGPRSBillingChargingCharacteristics,
8415 { "CAMEL-SCIGPRSBillingChargingCharacteristics", "camel.CAMEL_SCIGPRSBillingChargingCharacteristics",
8416 FT_UINT32, BASE_DEC, NULL, 0,
8417 "CAMEL-FSCIGPRSBillingChargingCharacteristics", HFILL }},
8419 { &hf_camel_CAMEL_CallResult,
8420 { "CAMEL-CAMEL_CallResult", "camel.CAMEL_CallResult",
8421 FT_UINT32, BASE_DEC, VALS(camel_CAMEL_CallResult_vals), 0,
8422 "CAMEL-CallResult", HFILL }},
8424 /* Camel Service Response Time */
8425 { &hf_camelsrt_SessionId,
8426 { "Session Id",
8427 "camel.srt.session_id",
8428 FT_UINT32, BASE_DEC, NULL, 0x0,
8429 NULL, HFILL }
8431 //{ &hf_camelsrt_RequestNumber,
8432 // { "Request Number",
8433 // "camel.srt.request_number",
8434 // FT_UINT64, BASE_DEC, NULL, 0x0,
8435 // NULL, HFILL }
8436 //},
8437 { &hf_camelsrt_Duplicate,
8438 { "Request Duplicate",
8439 "camel.srt.duplicate",
8440 FT_UINT32, BASE_DEC, NULL, 0x0,
8441 NULL, HFILL }
8443 { &hf_camelsrt_RequestFrame,
8444 { "Requested Frame",
8445 "camel.srt.reqframe",
8446 FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_REQUEST), 0x0,
8447 "SRT Request Frame", HFILL }
8449 { &hf_camelsrt_ResponseFrame,
8450 { "Response Frame",
8451 "camel.srt.rspframe",
8452 FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0,
8453 "SRT Response Frame", HFILL }
8455 //{ &hf_camelsrt_DeltaTime,
8456 // { "Service Response Time",
8457 // "camel.srt.deltatime",
8458 // FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
8459 // "DeltaTime between Request and Response", HFILL }
8460 //},
8461 //{ &hf_camelsrt_SessionTime,
8462 // { "Session duration",
8463 // "camel.srt.sessiontime",
8464 // FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
8465 // "Duration of the TCAP session", HFILL }
8466 //},
8467 { &hf_camelsrt_DeltaTime31,
8468 { "Service Response Time",
8469 "camel.srt.deltatime31",
8470 FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
8471 "DeltaTime between InitialDP and Continue", HFILL }
8473 { &hf_camelsrt_DeltaTime65,
8474 { "Service Response Time",
8475 "camel.srt.deltatime65",
8476 FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
8477 "DeltaTime between InitialDPSMS and ContinueSMS", HFILL }
8479 { &hf_camelsrt_DeltaTime75,
8480 { "Service Response Time",
8481 "camel.srt.deltatime75",
8482 FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
8483 "DeltaTime between InitialDPGPRS and ContinueGPRS", HFILL }
8485 { &hf_camelsrt_DeltaTime35,
8486 { "Service Response Time",
8487 "camel.srt.deltatime35",
8488 FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
8489 "DeltaTime between ApplyChargingReport and ApplyCharging", HFILL }
8491 { &hf_camelsrt_DeltaTime22,
8492 { "Service Response Time",
8493 "camel.srt.deltatime22",
8494 FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
8495 "DeltaTime between EventReport(Disconnect) and Release Call", HFILL }
8497 { &hf_camelsrt_DeltaTime80,
8498 { "Service Response Time",
8499 "camel.srt.deltatime80",
8500 FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
8501 "DeltaTime between EventReportGPRS and ContinueGPRS", HFILL }
8503 { &hf_camel_timeandtimezone_time,
8504 { "Time",
8505 "camel.timeandtimezone.time",
8506 FT_STRING, BASE_NONE, NULL, 0x0,
8507 NULL, HFILL }
8509 { &hf_camel_timeandtimezone_tz,
8510 { "Time Zone",
8511 "camel.timeandtimezone.timezone",
8512 FT_INT8, BASE_DEC, NULL, 0x0,
8513 "Difference, expressed in quarters of an hour, between local time and GMT", HFILL }
8515 #ifdef REMOVED
8516 #endif
8517 { &hf_camel_PAR_cancelFailed_PDU,
8518 { "PAR-cancelFailed", "camel.PAR_cancelFailed_element",
8519 FT_NONE, BASE_NONE, NULL, 0,
8520 NULL, HFILL }},
8521 { &hf_camel_PAR_requestedInfoError_PDU,
8522 { "PAR-requestedInfoError", "camel.PAR_requestedInfoError",
8523 FT_UINT32, BASE_DEC, VALS(camel_PAR_requestedInfoError_vals), 0,
8524 NULL, HFILL }},
8525 { &hf_camel_UnavailableNetworkResource_PDU,
8526 { "UnavailableNetworkResource", "camel.UnavailableNetworkResource",
8527 FT_UINT32, BASE_DEC, VALS(camel_UnavailableNetworkResource_vals), 0,
8528 NULL, HFILL }},
8529 { &hf_camel_PAR_taskRefused_PDU,
8530 { "PAR-taskRefused", "camel.PAR_taskRefused",
8531 FT_UINT32, BASE_DEC, VALS(camel_PAR_taskRefused_vals), 0,
8532 NULL, HFILL }},
8533 { &hf_camel_CAP_GPRS_ReferenceNumber_PDU,
8534 { "CAP-GPRS-ReferenceNumber", "camel.CAP_GPRS_ReferenceNumber_element",
8535 FT_NONE, BASE_NONE, NULL, 0,
8536 NULL, HFILL }},
8537 { &hf_camel_PlayAnnouncementArg_PDU,
8538 { "PlayAnnouncementArg", "camel.PlayAnnouncementArg_element",
8539 FT_NONE, BASE_NONE, NULL, 0,
8540 NULL, HFILL }},
8541 { &hf_camel_PromptAndCollectUserInformationArg_PDU,
8542 { "PromptAndCollectUserInformationArg", "camel.PromptAndCollectUserInformationArg_element",
8543 FT_NONE, BASE_NONE, NULL, 0,
8544 NULL, HFILL }},
8545 { &hf_camel_ReceivedInformationArg_PDU,
8546 { "ReceivedInformationArg", "camel.ReceivedInformationArg",
8547 FT_UINT32, BASE_DEC, VALS(camel_ReceivedInformationArg_vals), 0,
8548 NULL, HFILL }},
8549 { &hf_camel_SpecializedResourceReportArg_PDU,
8550 { "SpecializedResourceReportArg", "camel.SpecializedResourceReportArg",
8551 FT_UINT32, BASE_DEC, VALS(camel_SpecializedResourceReportArg_vals), 0,
8552 NULL, HFILL }},
8553 { &hf_camel_ApplyChargingArg_PDU,
8554 { "ApplyChargingArg", "camel.ApplyChargingArg_element",
8555 FT_NONE, BASE_NONE, NULL, 0,
8556 NULL, HFILL }},
8557 { &hf_camel_ApplyChargingReportArg_PDU,
8558 { "ApplyChargingReportArg", "camel.ApplyChargingReportArg",
8559 FT_BYTES, BASE_NONE, NULL, 0,
8560 NULL, HFILL }},
8561 { &hf_camel_AssistRequestInstructionsArg_PDU,
8562 { "AssistRequestInstructionsArg", "camel.AssistRequestInstructionsArg_element",
8563 FT_NONE, BASE_NONE, NULL, 0,
8564 NULL, HFILL }},
8565 { &hf_camel_CallGapArg_PDU,
8566 { "CallGapArg", "camel.CallGapArg_element",
8567 FT_NONE, BASE_NONE, NULL, 0,
8568 NULL, HFILL }},
8569 { &hf_camel_CallInformationReportArg_PDU,
8570 { "CallInformationReportArg", "camel.CallInformationReportArg_element",
8571 FT_NONE, BASE_NONE, NULL, 0,
8572 NULL, HFILL }},
8573 { &hf_camel_CallInformationRequestArg_PDU,
8574 { "CallInformationRequestArg", "camel.CallInformationRequestArg_element",
8575 FT_NONE, BASE_NONE, NULL, 0,
8576 NULL, HFILL }},
8577 { &hf_camel_CancelArg_PDU,
8578 { "CancelArg", "camel.CancelArg",
8579 FT_UINT32, BASE_DEC, VALS(camel_CancelArg_vals), 0,
8580 NULL, HFILL }},
8581 { &hf_camel_CollectInformationArg_PDU,
8582 { "CollectInformationArg", "camel.CollectInformationArg_element",
8583 FT_NONE, BASE_NONE, NULL, 0,
8584 NULL, HFILL }},
8585 { &hf_camel_ConnectArg_PDU,
8586 { "ConnectArg", "camel.ConnectArg_element",
8587 FT_NONE, BASE_NONE, NULL, 0,
8588 NULL, HFILL }},
8589 { &hf_camel_ConnectToResourceArg_PDU,
8590 { "ConnectToResourceArg", "camel.ConnectToResourceArg_element",
8591 FT_NONE, BASE_NONE, NULL, 0,
8592 NULL, HFILL }},
8593 { &hf_camel_ContinueWithArgumentArg_PDU,
8594 { "ContinueWithArgumentArg", "camel.ContinueWithArgumentArg_element",
8595 FT_NONE, BASE_NONE, NULL, 0,
8596 NULL, HFILL }},
8597 { &hf_camel_DisconnectForwardConnectionWithArgumentArg_PDU,
8598 { "DisconnectForwardConnectionWithArgumentArg", "camel.DisconnectForwardConnectionWithArgumentArg_element",
8599 FT_NONE, BASE_NONE, NULL, 0,
8600 NULL, HFILL }},
8601 { &hf_camel_DisconnectLegArg_PDU,
8602 { "DisconnectLegArg", "camel.DisconnectLegArg_element",
8603 FT_NONE, BASE_NONE, NULL, 0,
8604 NULL, HFILL }},
8605 { &hf_camel_EntityReleasedArg_PDU,
8606 { "EntityReleasedArg", "camel.EntityReleasedArg",
8607 FT_UINT32, BASE_DEC, VALS(camel_EntityReleasedArg_vals), 0,
8608 NULL, HFILL }},
8609 { &hf_camel_EstablishTemporaryConnectionArg_PDU,
8610 { "EstablishTemporaryConnectionArg", "camel.EstablishTemporaryConnectionArg_element",
8611 FT_NONE, BASE_NONE, NULL, 0,
8612 NULL, HFILL }},
8613 { &hf_camel_EventReportBCSMArg_PDU,
8614 { "EventReportBCSMArg", "camel.EventReportBCSMArg_element",
8615 FT_NONE, BASE_NONE, NULL, 0,
8616 NULL, HFILL }},
8617 { &hf_camel_FurnishChargingInformationArg_PDU,
8618 { "FurnishChargingInformationArg", "camel.FurnishChargingInformationArg",
8619 FT_BYTES, BASE_NONE, NULL, 0,
8620 NULL, HFILL }},
8621 { &hf_camel_InitialDPArg_PDU,
8622 { "InitialDPArg", "camel.InitialDPArg_element",
8623 FT_NONE, BASE_NONE, NULL, 0,
8624 NULL, HFILL }},
8625 { &hf_camel_InitiateCallAttemptArg_PDU,
8626 { "InitiateCallAttemptArg", "camel.InitiateCallAttemptArg_element",
8627 FT_NONE, BASE_NONE, NULL, 0,
8628 NULL, HFILL }},
8629 { &hf_camel_InitiateCallAttemptRes_PDU,
8630 { "InitiateCallAttemptRes", "camel.InitiateCallAttemptRes_element",
8631 FT_NONE, BASE_NONE, NULL, 0,
8632 NULL, HFILL }},
8633 { &hf_camel_MoveLegArg_PDU,
8634 { "MoveLegArg", "camel.MoveLegArg_element",
8635 FT_NONE, BASE_NONE, NULL, 0,
8636 NULL, HFILL }},
8637 { &hf_camel_PlayToneArg_PDU,
8638 { "PlayToneArg", "camel.PlayToneArg_element",
8639 FT_NONE, BASE_NONE, NULL, 0,
8640 NULL, HFILL }},
8641 { &hf_camel_ReleaseCallArg_PDU,
8642 { "ReleaseCallArg", "camel.ReleaseCallArg",
8643 FT_UINT32, BASE_DEC, VALS(camel_ReleaseCallArg_vals), 0,
8644 NULL, HFILL }},
8645 { &hf_camel_RequestReportBCSMEventArg_PDU,
8646 { "RequestReportBCSMEventArg", "camel.RequestReportBCSMEventArg_element",
8647 FT_NONE, BASE_NONE, NULL, 0,
8648 NULL, HFILL }},
8649 { &hf_camel_ResetTimerArg_PDU,
8650 { "ResetTimerArg", "camel.ResetTimerArg_element",
8651 FT_NONE, BASE_NONE, NULL, 0,
8652 NULL, HFILL }},
8653 { &hf_camel_SendChargingInformationArg_PDU,
8654 { "SendChargingInformationArg", "camel.SendChargingInformationArg_element",
8655 FT_NONE, BASE_NONE, NULL, 0,
8656 NULL, HFILL }},
8657 { &hf_camel_SplitLegArg_PDU,
8658 { "SplitLegArg", "camel.SplitLegArg_element",
8659 FT_NONE, BASE_NONE, NULL, 0,
8660 NULL, HFILL }},
8661 { &hf_camel_ApplyChargingGPRSArg_PDU,
8662 { "ApplyChargingGPRSArg", "camel.ApplyChargingGPRSArg_element",
8663 FT_NONE, BASE_NONE, NULL, 0,
8664 NULL, HFILL }},
8665 { &hf_camel_ApplyChargingReportGPRSArg_PDU,
8666 { "ApplyChargingReportGPRSArg", "camel.ApplyChargingReportGPRSArg_element",
8667 FT_NONE, BASE_NONE, NULL, 0,
8668 NULL, HFILL }},
8669 { &hf_camel_CancelGPRSArg_PDU,
8670 { "CancelGPRSArg", "camel.CancelGPRSArg_element",
8671 FT_NONE, BASE_NONE, NULL, 0,
8672 NULL, HFILL }},
8673 { &hf_camel_ConnectGPRSArg_PDU,
8674 { "ConnectGPRSArg", "camel.ConnectGPRSArg_element",
8675 FT_NONE, BASE_NONE, NULL, 0,
8676 NULL, HFILL }},
8677 { &hf_camel_ContinueGPRSArg_PDU,
8678 { "ContinueGPRSArg", "camel.ContinueGPRSArg_element",
8679 FT_NONE, BASE_NONE, NULL, 0,
8680 NULL, HFILL }},
8681 { &hf_camel_EntityReleasedGPRSArg_PDU,
8682 { "EntityReleasedGPRSArg", "camel.EntityReleasedGPRSArg_element",
8683 FT_NONE, BASE_NONE, NULL, 0,
8684 NULL, HFILL }},
8685 { &hf_camel_EventReportGPRSArg_PDU,
8686 { "EventReportGPRSArg", "camel.EventReportGPRSArg_element",
8687 FT_NONE, BASE_NONE, NULL, 0,
8688 NULL, HFILL }},
8689 { &hf_camel_FurnishChargingInformationGPRSArg_PDU,
8690 { "FurnishChargingInformationGPRSArg", "camel.FurnishChargingInformationGPRSArg",
8691 FT_BYTES, BASE_NONE, NULL, 0,
8692 NULL, HFILL }},
8693 { &hf_camel_InitialDPGPRSArg_PDU,
8694 { "InitialDPGPRSArg", "camel.InitialDPGPRSArg_element",
8695 FT_NONE, BASE_NONE, NULL, 0,
8696 NULL, HFILL }},
8697 { &hf_camel_ReleaseGPRSArg_PDU,
8698 { "ReleaseGPRSArg", "camel.ReleaseGPRSArg_element",
8699 FT_NONE, BASE_NONE, NULL, 0,
8700 NULL, HFILL }},
8701 { &hf_camel_RequestReportGPRSEventArg_PDU,
8702 { "RequestReportGPRSEventArg", "camel.RequestReportGPRSEventArg_element",
8703 FT_NONE, BASE_NONE, NULL, 0,
8704 NULL, HFILL }},
8705 { &hf_camel_ResetTimerGPRSArg_PDU,
8706 { "ResetTimerGPRSArg", "camel.ResetTimerGPRSArg_element",
8707 FT_NONE, BASE_NONE, NULL, 0,
8708 NULL, HFILL }},
8709 { &hf_camel_SendChargingInformationGPRSArg_PDU,
8710 { "SendChargingInformationGPRSArg", "camel.SendChargingInformationGPRSArg_element",
8711 FT_NONE, BASE_NONE, NULL, 0,
8712 NULL, HFILL }},
8713 { &hf_camel_ConnectSMSArg_PDU,
8714 { "ConnectSMSArg", "camel.ConnectSMSArg_element",
8715 FT_NONE, BASE_NONE, NULL, 0,
8716 NULL, HFILL }},
8717 { &hf_camel_EventReportSMSArg_PDU,
8718 { "EventReportSMSArg", "camel.EventReportSMSArg_element",
8719 FT_NONE, BASE_NONE, NULL, 0,
8720 NULL, HFILL }},
8721 { &hf_camel_FurnishChargingInformationSMSArg_PDU,
8722 { "FurnishChargingInformationSMSArg", "camel.FurnishChargingInformationSMSArg",
8723 FT_BYTES, BASE_NONE, NULL, 0,
8724 NULL, HFILL }},
8725 { &hf_camel_InitialDPSMSArg_PDU,
8726 { "InitialDPSMSArg", "camel.InitialDPSMSArg_element",
8727 FT_NONE, BASE_NONE, NULL, 0,
8728 NULL, HFILL }},
8729 { &hf_camel_ReleaseSMSArg_PDU,
8730 { "ReleaseSMSArg", "camel.ReleaseSMSArg",
8731 FT_BYTES, BASE_NONE, NULL, 0,
8732 NULL, HFILL }},
8733 { &hf_camel_RequestReportSMSEventArg_PDU,
8734 { "RequestReportSMSEventArg", "camel.RequestReportSMSEventArg_element",
8735 FT_NONE, BASE_NONE, NULL, 0,
8736 NULL, HFILL }},
8737 { &hf_camel_ResetTimerSMSArg_PDU,
8738 { "ResetTimerSMSArg", "camel.ResetTimerSMSArg_element",
8739 FT_NONE, BASE_NONE, NULL, 0,
8740 NULL, HFILL }},
8741 { &hf_camel_CAP_U_ABORT_REASON_PDU,
8742 { "CAP-U-ABORT-REASON", "camel.CAP_U_ABORT_REASON",
8743 FT_UINT32, BASE_DEC, VALS(camel_CAP_U_ABORT_REASON_vals), 0,
8744 NULL, HFILL }},
8745 { &hf_camel_legID,
8746 { "legID", "camel.legID",
8747 FT_UINT32, BASE_DEC, VALS(inap_LegID_vals), 0,
8748 NULL, HFILL }},
8749 { &hf_camel_srfConnection,
8750 { "srfConnection", "camel.srfConnection",
8751 FT_UINT32, BASE_DEC, NULL, 0,
8752 "CallSegmentID", HFILL }},
8753 { &hf_camel_aOCInitial,
8754 { "aOCInitial", "camel.aOCInitial_element",
8755 FT_NONE, BASE_NONE, NULL, 0,
8756 "CAI_GSM0224", HFILL }},
8757 { &hf_camel_aOCSubsequent,
8758 { "aOCSubsequent", "camel.aOCSubsequent_element",
8759 FT_NONE, BASE_NONE, NULL, 0,
8760 NULL, HFILL }},
8761 { &hf_camel_cAI_GSM0224,
8762 { "cAI-GSM0224", "camel.cAI_GSM0224_element",
8763 FT_NONE, BASE_NONE, NULL, 0,
8764 NULL, HFILL }},
8765 { &hf_camel_aocSubsequent_tariffSwitchInterval,
8766 { "tariffSwitchInterval", "camel.tariffSwitchInterval",
8767 FT_UINT32, BASE_DEC, NULL, 0,
8768 "INTEGER_1_86400", HFILL }},
8769 { &hf_camel_audibleIndicatorTone,
8770 { "tone", "camel.tone",
8771 FT_BOOLEAN, BASE_NONE, NULL, 0,
8772 "BOOLEAN", HFILL }},
8773 { &hf_camel_burstList,
8774 { "burstList", "camel.burstList_element",
8775 FT_NONE, BASE_NONE, NULL, 0,
8776 NULL, HFILL }},
8777 { &hf_camel_conferenceTreatmentIndicator,
8778 { "conferenceTreatmentIndicator", "camel.conferenceTreatmentIndicator",
8779 FT_BYTES, BASE_NONE, NULL, 0,
8780 "OCTET_STRING_SIZE_1", HFILL }},
8781 { &hf_camel_callCompletionTreatmentIndicator,
8782 { "callCompletionTreatmentIndicator", "camel.callCompletionTreatmentIndicator",
8783 FT_BYTES, BASE_NONE, NULL, 0,
8784 "OCTET_STRING_SIZE_1", HFILL }},
8785 { &hf_camel_calledAddressValue,
8786 { "calledAddressValue", "camel.calledAddressValue",
8787 FT_BYTES, BASE_NONE, NULL, 0,
8788 "Digits", HFILL }},
8789 { &hf_camel_gapOnService,
8790 { "gapOnService", "camel.gapOnService_element",
8791 FT_NONE, BASE_NONE, NULL, 0,
8792 NULL, HFILL }},
8793 { &hf_camel_calledAddressAndService,
8794 { "calledAddressAndService", "camel.calledAddressAndService_element",
8795 FT_NONE, BASE_NONE, NULL, 0,
8796 NULL, HFILL }},
8797 { &hf_camel_serviceKey,
8798 { "serviceKey", "camel.serviceKey",
8799 FT_UINT32, BASE_DEC, NULL, 0,
8800 NULL, HFILL }},
8801 { &hf_camel_callingAddressAndService,
8802 { "callingAddressAndService", "camel.callingAddressAndService_element",
8803 FT_NONE, BASE_NONE, NULL, 0,
8804 NULL, HFILL }},
8805 { &hf_camel_callingAddressValue,
8806 { "callingAddressValue", "camel.callingAddressValue",
8807 FT_BYTES, BASE_NONE, NULL, 0,
8808 "Digits", HFILL }},
8809 { &hf_camel_eventTypeBCSM,
8810 { "eventTypeBCSM", "camel.eventTypeBCSM",
8811 FT_UINT32, BASE_DEC, VALS(camel_EventTypeBCSM_vals), 0,
8812 NULL, HFILL }},
8813 { &hf_camel_monitorMode,
8814 { "monitorMode", "camel.monitorMode",
8815 FT_UINT32, BASE_DEC, VALS(camel_MonitorMode_vals), 0,
8816 NULL, HFILL }},
8817 { &hf_camel_dpSpecificCriteria,
8818 { "dpSpecificCriteria", "camel.dpSpecificCriteria",
8819 FT_UINT32, BASE_DEC, VALS(camel_DpSpecificCriteria_vals), 0,
8820 NULL, HFILL }},
8821 { &hf_camel_automaticRearm,
8822 { "automaticRearm", "camel.automaticRearm_element",
8823 FT_NONE, BASE_NONE, NULL, 0,
8824 NULL, HFILL }},
8825 { &hf_camel_cause,
8826 { "cause", "camel.cause",
8827 FT_BYTES, BASE_NONE, NULL, 0,
8828 NULL, HFILL }},
8829 { &hf_camel_bearerCap,
8830 { "bearerCap", "camel.bearerCap",
8831 FT_BYTES, BASE_NONE, NULL, 0,
8832 NULL, HFILL }},
8833 { &hf_camel_numberOfBursts,
8834 { "numberOfBursts", "camel.numberOfBursts",
8835 FT_UINT32, BASE_DEC, NULL, 0,
8836 "INTEGER_1_3", HFILL }},
8837 { &hf_camel_burstInterval,
8838 { "burstInterval", "camel.burstInterval",
8839 FT_UINT32, BASE_DEC, NULL, 0,
8840 "INTEGER_1_1200", HFILL }},
8841 { &hf_camel_numberOfTonesInBurst,
8842 { "numberOfTonesInBurst", "camel.numberOfTonesInBurst",
8843 FT_UINT32, BASE_DEC, NULL, 0,
8844 "INTEGER_1_3", HFILL }},
8845 { &hf_camel_burstToneDuration,
8846 { "toneDuration", "camel.toneDuration",
8847 FT_UINT32, BASE_DEC, NULL, 0,
8848 "INTEGER_1_20", HFILL }},
8849 { &hf_camel_toneInterval,
8850 { "toneInterval", "camel.toneInterval",
8851 FT_UINT32, BASE_DEC, NULL, 0,
8852 "INTEGER_1_20", HFILL }},
8853 { &hf_camel_warningPeriod,
8854 { "warningPeriod", "camel.warningPeriod",
8855 FT_UINT32, BASE_DEC, NULL, 0,
8856 "INTEGER_1_1200", HFILL }},
8857 { &hf_camel_bursts,
8858 { "bursts", "camel.bursts_element",
8859 FT_NONE, BASE_NONE, NULL, 0,
8860 "Burst", HFILL }},
8861 { &hf_camel_e1,
8862 { "e1", "camel.e1",
8863 FT_UINT32, BASE_DEC, NULL, 0,
8864 "INTEGER_0_8191", HFILL }},
8865 { &hf_camel_e2,
8866 { "e2", "camel.e2",
8867 FT_UINT32, BASE_DEC, NULL, 0,
8868 "INTEGER_0_8191", HFILL }},
8869 { &hf_camel_e3,
8870 { "e3", "camel.e3",
8871 FT_UINT32, BASE_DEC, NULL, 0,
8872 "INTEGER_0_8191", HFILL }},
8873 { &hf_camel_e4,
8874 { "e4", "camel.e4",
8875 FT_UINT32, BASE_DEC, NULL, 0,
8876 "INTEGER_0_8191", HFILL }},
8877 { &hf_camel_e5,
8878 { "e5", "camel.e5",
8879 FT_UINT32, BASE_DEC, NULL, 0,
8880 "INTEGER_0_8191", HFILL }},
8881 { &hf_camel_e6,
8882 { "e6", "camel.e6",
8883 FT_UINT32, BASE_DEC, NULL, 0,
8884 "INTEGER_0_8191", HFILL }},
8885 { &hf_camel_e7,
8886 { "e7", "camel.e7",
8887 FT_UINT32, BASE_DEC, NULL, 0,
8888 "INTEGER_0_8191", HFILL }},
8889 { &hf_camel_callSegmentID,
8890 { "callSegmentID", "camel.callSegmentID",
8891 FT_UINT32, BASE_DEC, NULL, 0,
8892 NULL, HFILL }},
8893 { &hf_camel_invokeID,
8894 { "invokeID", "camel.invokeID",
8895 FT_INT32, BASE_DEC, NULL, 0,
8896 NULL, HFILL }},
8897 { &hf_camel_timeDurationCharging,
8898 { "timeDurationCharging", "camel.timeDurationCharging_element",
8899 FT_NONE, BASE_NONE, NULL, 0,
8900 NULL, HFILL }},
8901 { &hf_camel_maxCallPeriodDuration,
8902 { "maxCallPeriodDuration", "camel.maxCallPeriodDuration",
8903 FT_UINT32, BASE_DEC, NULL, 0,
8904 "INTEGER_1_864000", HFILL }},
8905 { &hf_camel_releaseIfdurationExceeded,
8906 { "releaseIfdurationExceeded", "camel.releaseIfdurationExceeded",
8907 FT_BOOLEAN, BASE_NONE, NULL, 0,
8908 "BOOLEAN", HFILL }},
8909 { &hf_camel_timeDurationCharging_tariffSwitchInterval,
8910 { "tariffSwitchInterval", "camel.tariffSwitchInterval",
8911 FT_UINT32, BASE_DEC, NULL, 0,
8912 "INTEGER_1_86400", HFILL }},
8913 { &hf_camel_audibleIndicator,
8914 { "audibleIndicator", "camel.audibleIndicator",
8915 FT_UINT32, BASE_DEC, VALS(camel_AudibleIndicator_vals), 0,
8916 NULL, HFILL }},
8917 { &hf_camel_extensions,
8918 { "extensions", "camel.extensions",
8919 FT_UINT32, BASE_DEC, NULL, 0,
8920 NULL, HFILL }},
8921 { &hf_camel_timeDurationChargingResult,
8922 { "timeDurationChargingResult", "camel.timeDurationChargingResult_element",
8923 FT_NONE, BASE_NONE, NULL, 0,
8924 NULL, HFILL }},
8925 { &hf_camel_timeDurationChargingResultpartyToCharge,
8926 { "partyToCharge", "camel.partyToCharge",
8927 FT_UINT32, BASE_DEC, VALS(camel_ReceivingSideID_vals), 0,
8928 "ReceivingSideID", HFILL }},
8929 { &hf_camel_timeInformation,
8930 { "timeInformation", "camel.timeInformation",
8931 FT_UINT32, BASE_DEC, VALS(camel_TimeInformation_vals), 0,
8932 NULL, HFILL }},
8933 { &hf_camel_legActive,
8934 { "legActive", "camel.legActive",
8935 FT_BOOLEAN, BASE_NONE, NULL, 0,
8936 "BOOLEAN", HFILL }},
8937 { &hf_camel_callLegReleasedAtTcpExpiry,
8938 { "callLegReleasedAtTcpExpiry", "camel.callLegReleasedAtTcpExpiry_element",
8939 FT_NONE, BASE_NONE, NULL, 0,
8940 NULL, HFILL }},
8941 { &hf_camel_aChChargingAddress,
8942 { "aChChargingAddress", "camel.aChChargingAddress",
8943 FT_UINT32, BASE_DEC, VALS(camel_AChChargingAddress_vals), 0,
8944 NULL, HFILL }},
8945 { &hf_camel_fci_fCIBCCCAMELsequence1,
8946 { "fCIBCCCAMELsequence1", "camel.fCIBCCCAMELsequence1_element",
8947 FT_NONE, BASE_NONE, NULL, 0,
8948 "T_fci_fCIBCCCAMELsequence1", HFILL }},
8949 { &hf_camel_freeFormatData,
8950 { "freeFormatData", "camel.freeFormatData",
8951 FT_BYTES, BASE_NONE, NULL, 0,
8952 "OCTET_STRING_SIZE_bound__minFCIBillingChargingDataLength_bound__maxFCIBillingChargingDataLength", HFILL }},
8953 { &hf_camel_fCIBCCCAMELsequence1partyToCharge,
8954 { "partyToCharge", "camel.partyToCharge",
8955 FT_UINT32, BASE_DEC, VALS(camel_SendingSideID_vals), 0,
8956 "SendingSideID", HFILL }},
8957 { &hf_camel_appendFreeFormatData,
8958 { "appendFreeFormatData", "camel.appendFreeFormatData",
8959 FT_UINT32, BASE_DEC, VALS(camel_AppendFreeFormatData_vals), 0,
8960 NULL, HFILL }},
8961 { &hf_camel_fciGPRS_fCIBCCCAMELsequence1,
8962 { "fCIBCCCAMELsequence1", "camel.fCIBCCCAMELsequence1_element",
8963 FT_NONE, BASE_NONE, NULL, 0,
8964 "T_fciGPRS_fCIBCCCAMELsequence1", HFILL }},
8965 { &hf_camel_pDPID,
8966 { "pDPID", "camel.pDPID",
8967 FT_BYTES, BASE_NONE, NULL, 0,
8968 NULL, HFILL }},
8969 { &hf_camel_fciSMS_fCIBCCCAMELsequence1,
8970 { "fCIBCCCAMELsequence1", "camel.fCIBCCCAMELsequence1_element",
8971 FT_NONE, BASE_NONE, NULL, 0,
8972 "T_fciSMS_fCIBCCCAMELsequence1", HFILL }},
8973 { &hf_camel_aOCBeforeAnswer,
8974 { "aOCBeforeAnswer", "camel.aOCBeforeAnswer_element",
8975 FT_NONE, BASE_NONE, NULL, 0,
8976 NULL, HFILL }},
8977 { &hf_camel_aOCAfterAnswer,
8978 { "aOCAfterAnswer", "camel.aOCAfterAnswer_element",
8979 FT_NONE, BASE_NONE, NULL, 0,
8980 "AOCSubsequent", HFILL }},
8981 { &hf_camel_aOC_extension,
8982 { "aOC-extension", "camel.aOC_extension_element",
8983 FT_NONE, BASE_NONE, NULL, 0,
8984 "CAMEL_SCIBillingChargingCharacteristicsAlt", HFILL }},
8985 { &hf_camel_aOCGPRS,
8986 { "aOCGPRS", "camel.aOCGPRS_element",
8987 FT_NONE, BASE_NONE, NULL, 0,
8988 NULL, HFILL }},
8989 { &hf_camel_ChangeOfPositionControlInfo_item,
8990 { "ChangeOfLocation", "camel.ChangeOfLocation",
8991 FT_UINT32, BASE_DEC, VALS(camel_ChangeOfLocation_vals), 0,
8992 NULL, HFILL }},
8993 { &hf_camel_cellGlobalId,
8994 { "cellGlobalId", "camel.cellGlobalId",
8995 FT_BYTES, BASE_NONE, NULL, 0,
8996 "CellGlobalIdOrServiceAreaIdFixedLength", HFILL }},
8997 { &hf_camel_serviceAreaId,
8998 { "serviceAreaId", "camel.serviceAreaId",
8999 FT_BYTES, BASE_NONE, NULL, 0,
9000 "CellGlobalIdOrServiceAreaIdFixedLength", HFILL }},
9001 { &hf_camel_locationAreaId,
9002 { "locationAreaId", "camel.locationAreaId",
9003 FT_BYTES, BASE_NONE, NULL, 0,
9004 "LAIFixedLength", HFILL }},
9005 { &hf_camel_inter_SystemHandOver,
9006 { "inter-SystemHandOver", "camel.inter_SystemHandOver_element",
9007 FT_NONE, BASE_NONE, NULL, 0,
9008 NULL, HFILL }},
9009 { &hf_camel_inter_PLMNHandOver,
9010 { "inter-PLMNHandOver", "camel.inter_PLMNHandOver_element",
9011 FT_NONE, BASE_NONE, NULL, 0,
9012 NULL, HFILL }},
9013 { &hf_camel_inter_MSCHandOver,
9014 { "inter-MSCHandOver", "camel.inter_MSCHandOver_element",
9015 FT_NONE, BASE_NONE, NULL, 0,
9016 NULL, HFILL }},
9017 { &hf_camel_changeOfLocationAlt,
9018 { "changeOfLocationAlt", "camel.changeOfLocationAlt_element",
9019 FT_NONE, BASE_NONE, NULL, 0,
9020 NULL, HFILL }},
9021 { &hf_camel_maxTransferredVolume,
9022 { "maxTransferredVolume", "camel.maxTransferredVolume",
9023 FT_UINT32, BASE_DEC, NULL, 0,
9024 "INTEGER_1_4294967295", HFILL }},
9025 { &hf_camel_maxElapsedTime,
9026 { "maxElapsedTime", "camel.maxElapsedTime",
9027 FT_UINT32, BASE_DEC, NULL, 0,
9028 "INTEGER_1_86400", HFILL }},
9029 { &hf_camel_transferredVolume,
9030 { "transferredVolume", "camel.transferredVolume",
9031 FT_UINT32, BASE_DEC, VALS(camel_TransferredVolume_vals), 0,
9032 NULL, HFILL }},
9033 { &hf_camel_elapsedTime,
9034 { "elapsedTime", "camel.elapsedTime",
9035 FT_UINT32, BASE_DEC, VALS(camel_ElapsedTime_vals), 0,
9036 NULL, HFILL }},
9037 { &hf_camel_transferredVolumeRollOver,
9038 { "transferredVolumeRollOver", "camel.transferredVolumeRollOver",
9039 FT_UINT32, BASE_DEC, VALS(camel_TransferredVolumeRollOver_vals), 0,
9040 NULL, HFILL }},
9041 { &hf_camel_elapsedTimeRollOver,
9042 { "elapsedTimeRollOver", "camel.elapsedTimeRollOver",
9043 FT_UINT32, BASE_DEC, VALS(camel_ElapsedTimeRollOver_vals), 0,
9044 NULL, HFILL }},
9045 { &hf_camel_minimumNbOfDigits,
9046 { "minimumNbOfDigits", "camel.minimumNbOfDigits",
9047 FT_UINT32, BASE_DEC, NULL, 0,
9048 "INTEGER_1_30", HFILL }},
9049 { &hf_camel_maximumNbOfDigits,
9050 { "maximumNbOfDigits", "camel.maximumNbOfDigits",
9051 FT_UINT32, BASE_DEC, NULL, 0,
9052 "INTEGER_1_30", HFILL }},
9053 { &hf_camel_endOfReplyDigit,
9054 { "endOfReplyDigit", "camel.endOfReplyDigit",
9055 FT_BYTES, BASE_NONE, NULL, 0,
9056 "OCTET_STRING_SIZE_1_2", HFILL }},
9057 { &hf_camel_cancelDigit,
9058 { "cancelDigit", "camel.cancelDigit",
9059 FT_BYTES, BASE_NONE, NULL, 0,
9060 "OCTET_STRING_SIZE_1_2", HFILL }},
9061 { &hf_camel_startDigit,
9062 { "startDigit", "camel.startDigit",
9063 FT_BYTES, BASE_NONE, NULL, 0,
9064 "OCTET_STRING_SIZE_1_2", HFILL }},
9065 { &hf_camel_firstDigitTimeOut,
9066 { "firstDigitTimeOut", "camel.firstDigitTimeOut",
9067 FT_UINT32, BASE_DEC, NULL, 0,
9068 "INTEGER_1_127", HFILL }},
9069 { &hf_camel_interDigitTimeOut,
9070 { "interDigitTimeOut", "camel.interDigitTimeOut",
9071 FT_UINT32, BASE_DEC, NULL, 0,
9072 "INTEGER_1_127", HFILL }},
9073 { &hf_camel_errorTreatment,
9074 { "errorTreatment", "camel.errorTreatment",
9075 FT_UINT32, BASE_DEC, VALS(camel_ErrorTreatment_vals), 0,
9076 NULL, HFILL }},
9077 { &hf_camel_interruptableAnnInd,
9078 { "interruptableAnnInd", "camel.interruptableAnnInd",
9079 FT_BOOLEAN, BASE_NONE, NULL, 0,
9080 "BOOLEAN", HFILL }},
9081 { &hf_camel_voiceInformation,
9082 { "voiceInformation", "camel.voiceInformation",
9083 FT_BOOLEAN, BASE_NONE, NULL, 0,
9084 "BOOLEAN", HFILL }},
9085 { &hf_camel_voiceBack,
9086 { "voiceBack", "camel.voiceBack",
9087 FT_BOOLEAN, BASE_NONE, NULL, 0,
9088 "BOOLEAN", HFILL }},
9089 { &hf_camel_collectedDigits,
9090 { "collectedDigits", "camel.collectedDigits_element",
9091 FT_NONE, BASE_NONE, NULL, 0,
9092 NULL, HFILL }},
9093 { &hf_camel_basicGapCriteria,
9094 { "basicGapCriteria", "camel.basicGapCriteria",
9095 FT_UINT32, BASE_DEC, VALS(camel_BasicGapCriteria_vals), 0,
9096 NULL, HFILL }},
9097 { &hf_camel_scfID,
9098 { "scfID", "camel.scfID",
9099 FT_BYTES, BASE_NONE, NULL, 0,
9100 NULL, HFILL }},
9101 { &hf_camel_DestinationRoutingAddress_item,
9102 { "CalledPartyNumber", "camel.CalledPartyNumber",
9103 FT_BYTES, BASE_NONE, NULL, 0,
9104 NULL, HFILL }},
9105 { &hf_camel_applicationTimer,
9106 { "applicationTimer", "camel.applicationTimer",
9107 FT_UINT32, BASE_DEC, NULL, 0,
9108 NULL, HFILL }},
9109 { &hf_camel_midCallControlInfo,
9110 { "midCallControlInfo", "camel.midCallControlInfo_element",
9111 FT_NONE, BASE_NONE, NULL, 0,
9112 NULL, HFILL }},
9113 { &hf_camel_dpSpecificCriteriaAlt,
9114 { "dpSpecificCriteriaAlt", "camel.dpSpecificCriteriaAlt_element",
9115 FT_NONE, BASE_NONE, NULL, 0,
9116 NULL, HFILL }},
9117 { &hf_camel_changeOfPositionControlInfo,
9118 { "changeOfPositionControlInfo", "camel.changeOfPositionControlInfo",
9119 FT_UINT32, BASE_DEC, NULL, 0,
9120 NULL, HFILL }},
9121 { &hf_camel_numberOfDigits,
9122 { "numberOfDigits", "camel.numberOfDigits",
9123 FT_UINT32, BASE_DEC, NULL, 0,
9124 NULL, HFILL }},
9125 { &hf_camel_interDigitTimeout,
9126 { "interDigitTimeout", "camel.interDigitTimeout",
9127 FT_UINT32, BASE_DEC, NULL, 0,
9128 "INTEGER_1_127", HFILL }},
9129 { &hf_camel_oServiceChangeSpecificInfo,
9130 { "oServiceChangeSpecificInfo", "camel.oServiceChangeSpecificInfo_element",
9131 FT_NONE, BASE_NONE, NULL, 0,
9132 NULL, HFILL }},
9133 { &hf_camel_ext_basicServiceCode,
9134 { "ext-basicServiceCode", "camel.ext_basicServiceCode",
9135 FT_UINT32, BASE_DEC, VALS(gsm_map_Ext_BasicServiceCode_vals), 0,
9136 NULL, HFILL }},
9137 { &hf_camel_initiatorOfServiceChange,
9138 { "initiatorOfServiceChange", "camel.initiatorOfServiceChange",
9139 FT_UINT32, BASE_DEC, VALS(camel_InitiatorOfServiceChange_vals), 0,
9140 NULL, HFILL }},
9141 { &hf_camel_natureOfServiceChange,
9142 { "natureOfServiceChange", "camel.natureOfServiceChange",
9143 FT_UINT32, BASE_DEC, VALS(camel_NatureOfServiceChange_vals), 0,
9144 NULL, HFILL }},
9145 { &hf_camel_tServiceChangeSpecificInfo,
9146 { "tServiceChangeSpecificInfo", "camel.tServiceChangeSpecificInfo_element",
9147 FT_NONE, BASE_NONE, NULL, 0,
9148 NULL, HFILL }},
9149 { &hf_camel_collectedInfoSpecificInfo,
9150 { "collectedInfoSpecificInfo", "camel.collectedInfoSpecificInfo_element",
9151 FT_NONE, BASE_NONE, NULL, 0,
9152 NULL, HFILL }},
9153 { &hf_camel_calledPartyNumber,
9154 { "calledPartyNumber", "camel.calledPartyNumber",
9155 FT_BYTES, BASE_NONE, NULL, 0,
9156 NULL, HFILL }},
9157 { &hf_camel_timeGPRSIfNoTariffSwitch,
9158 { "timeGPRSIfNoTariffSwitch", "camel.timeGPRSIfNoTariffSwitch",
9159 FT_UINT32, BASE_DEC, NULL, 0,
9160 "INTEGER_0_86400", HFILL }},
9161 { &hf_camel_timeGPRSIfTariffSwitch,
9162 { "timeGPRSIfTariffSwitch", "camel.timeGPRSIfTariffSwitch_element",
9163 FT_NONE, BASE_NONE, NULL, 0,
9164 NULL, HFILL }},
9165 { &hf_camel_timeGPRSSinceLastTariffSwitch,
9166 { "timeGPRSSinceLastTariffSwitch", "camel.timeGPRSSinceLastTariffSwitch",
9167 FT_UINT32, BASE_DEC, NULL, 0,
9168 "INTEGER_0_86400", HFILL }},
9169 { &hf_camel_timeGPRSTariffSwitchInterval,
9170 { "timeGPRSTariffSwitchInterval", "camel.timeGPRSTariffSwitchInterval",
9171 FT_UINT32, BASE_DEC, NULL, 0,
9172 "INTEGER_0_86400", HFILL }},
9173 { &hf_camel_rO_TimeGPRSIfNoTariffSwitch,
9174 { "rO-TimeGPRSIfNoTariffSwitch", "camel.rO_TimeGPRSIfNoTariffSwitch",
9175 FT_UINT32, BASE_DEC, NULL, 0,
9176 "INTEGER_0_255", HFILL }},
9177 { &hf_camel_rO_TimeGPRSIfTariffSwitch,
9178 { "rO-TimeGPRSIfTariffSwitch", "camel.rO_TimeGPRSIfTariffSwitch_element",
9179 FT_NONE, BASE_NONE, NULL, 0,
9180 NULL, HFILL }},
9181 { &hf_camel_rO_TimeGPRSSinceLastTariffSwitch,
9182 { "rO-TimeGPRSSinceLastTariffSwitch", "camel.rO_TimeGPRSSinceLastTariffSwitch",
9183 FT_UINT32, BASE_DEC, NULL, 0,
9184 "INTEGER_0_255", HFILL }},
9185 { &hf_camel_rO_TimeGPRSTariffSwitchInterval,
9186 { "rO-TimeGPRSTariffSwitchInterval", "camel.rO_TimeGPRSTariffSwitchInterval",
9187 FT_UINT32, BASE_DEC, NULL, 0,
9188 "INTEGER_0_255", HFILL }},
9189 { &hf_camel_pDPTypeOrganization,
9190 { "pDPTypeOrganization", "camel.pDPTypeOrganization",
9191 FT_BYTES, BASE_NONE, NULL, 0,
9192 NULL, HFILL }},
9193 { &hf_camel_pDPTypeNumber,
9194 { "pDPTypeNumber", "camel.pDPTypeNumber",
9195 FT_BYTES, BASE_NONE, NULL, 0,
9196 NULL, HFILL }},
9197 { &hf_camel_pDPAddress,
9198 { "pDPAddress", "camel.pDPAddress",
9199 FT_BYTES, BASE_NONE, NULL, 0,
9200 NULL, HFILL }},
9201 { &hf_camel_routeSelectFailureSpecificInfo,
9202 { "routeSelectFailureSpecificInfo", "camel.routeSelectFailureSpecificInfo_element",
9203 FT_NONE, BASE_NONE, NULL, 0,
9204 NULL, HFILL }},
9205 { &hf_camel_routeSelectfailureCause,
9206 { "failureCause", "camel.routeSelectfailureCause",
9207 FT_BYTES, BASE_NONE, NULL, 0,
9208 "Cause", HFILL }},
9209 { &hf_camel_oCalledPartyBusySpecificInfo,
9210 { "oCalledPartyBusySpecificInfo", "camel.oCalledPartyBusySpecificInfo_element",
9211 FT_NONE, BASE_NONE, NULL, 0,
9212 NULL, HFILL }},
9213 { &hf_camel_busyCause,
9214 { "busyCause", "camel.busyCause",
9215 FT_BYTES, BASE_NONE, NULL, 0,
9216 "Cause", HFILL }},
9217 { &hf_camel_oNoAnswerSpecificInfo,
9218 { "oNoAnswerSpecificInfo", "camel.oNoAnswerSpecificInfo_element",
9219 FT_NONE, BASE_NONE, NULL, 0,
9220 NULL, HFILL }},
9221 { &hf_camel_oAnswerSpecificInfo,
9222 { "oAnswerSpecificInfo", "camel.oAnswerSpecificInfo_element",
9223 FT_NONE, BASE_NONE, NULL, 0,
9224 NULL, HFILL }},
9225 { &hf_camel_destinationAddress,
9226 { "destinationAddress", "camel.destinationAddress",
9227 FT_BYTES, BASE_NONE, NULL, 0,
9228 "CalledPartyNumber", HFILL }},
9229 { &hf_camel_or_Call,
9230 { "or-Call", "camel.or_Call_element",
9231 FT_NONE, BASE_NONE, NULL, 0,
9232 NULL, HFILL }},
9233 { &hf_camel_forwardedCall,
9234 { "forwardedCall", "camel.forwardedCall_element",
9235 FT_NONE, BASE_NONE, NULL, 0,
9236 NULL, HFILL }},
9237 { &hf_camel_chargeIndicator,
9238 { "chargeIndicator", "camel.chargeIndicator",
9239 FT_BYTES, BASE_NONE, NULL, 0,
9240 NULL, HFILL }},
9241 { &hf_camel_ext_basicServiceCode2,
9242 { "ext-basicServiceCode2", "camel.ext_basicServiceCode2",
9243 FT_UINT32, BASE_DEC, VALS(gsm_map_Ext_BasicServiceCode_vals), 0,
9244 "Ext_BasicServiceCode", HFILL }},
9245 { &hf_camel_oMidCallSpecificInfo,
9246 { "oMidCallSpecificInfo", "camel.oMidCallSpecificInfo_element",
9247 FT_NONE, BASE_NONE, NULL, 0,
9248 NULL, HFILL }},
9249 { &hf_camel_omidCallEvents,
9250 { "midCallEvents", "camel.midCallEvents",
9251 FT_UINT32, BASE_DEC, VALS(camel_T_omidCallEvents_vals), 0,
9252 "T_omidCallEvents", HFILL }},
9253 { &hf_camel_dTMFDigitsCompleted,
9254 { "dTMFDigitsCompleted", "camel.dTMFDigitsCompleted",
9255 FT_BYTES, BASE_NONE, NULL, 0,
9256 "Digits", HFILL }},
9257 { &hf_camel_dTMFDigitsTimeOut,
9258 { "dTMFDigitsTimeOut", "camel.dTMFDigitsTimeOut",
9259 FT_BYTES, BASE_NONE, NULL, 0,
9260 "Digits", HFILL }},
9261 { &hf_camel_oDisconnectSpecificInfo,
9262 { "oDisconnectSpecificInfo", "camel.oDisconnectSpecificInfo_element",
9263 FT_NONE, BASE_NONE, NULL, 0,
9264 NULL, HFILL }},
9265 { &hf_camel_releaseCause,
9266 { "releaseCause", "camel.releaseCause",
9267 FT_BYTES, BASE_NONE, NULL, 0,
9268 "Cause", HFILL }},
9269 { &hf_camel_tBusySpecificInfo,
9270 { "tBusySpecificInfo", "camel.tBusySpecificInfo_element",
9271 FT_NONE, BASE_NONE, NULL, 0,
9272 NULL, HFILL }},
9273 { &hf_camel_callForwarded,
9274 { "callForwarded", "camel.callForwarded_element",
9275 FT_NONE, BASE_NONE, NULL, 0,
9276 NULL, HFILL }},
9277 { &hf_camel_routeNotPermitted,
9278 { "routeNotPermitted", "camel.routeNotPermitted_element",
9279 FT_NONE, BASE_NONE, NULL, 0,
9280 NULL, HFILL }},
9281 { &hf_camel_forwardingDestinationNumber,
9282 { "forwardingDestinationNumber", "camel.forwardingDestinationNumber",
9283 FT_BYTES, BASE_NONE, NULL, 0,
9284 "CalledPartyNumber", HFILL }},
9285 { &hf_camel_tNoAnswerSpecificInfo,
9286 { "tNoAnswerSpecificInfo", "camel.tNoAnswerSpecificInfo_element",
9287 FT_NONE, BASE_NONE, NULL, 0,
9288 NULL, HFILL }},
9289 { &hf_camel_tAnswerSpecificInfo,
9290 { "tAnswerSpecificInfo", "camel.tAnswerSpecificInfo_element",
9291 FT_NONE, BASE_NONE, NULL, 0,
9292 NULL, HFILL }},
9293 { &hf_camel_tMidCallSpecificInfo,
9294 { "tMidCallSpecificInfo", "camel.tMidCallSpecificInfo_element",
9295 FT_NONE, BASE_NONE, NULL, 0,
9296 NULL, HFILL }},
9297 { &hf_camel_tmidCallEvents,
9298 { "midCallEvents", "camel.midCallEvents",
9299 FT_UINT32, BASE_DEC, VALS(camel_T_tmidCallEvents_vals), 0,
9300 "T_tmidCallEvents", HFILL }},
9301 { &hf_camel_tDisconnectSpecificInfo,
9302 { "tDisconnectSpecificInfo", "camel.tDisconnectSpecificInfo_element",
9303 FT_NONE, BASE_NONE, NULL, 0,
9304 NULL, HFILL }},
9305 { &hf_camel_oTermSeizedSpecificInfo,
9306 { "oTermSeizedSpecificInfo", "camel.oTermSeizedSpecificInfo_element",
9307 FT_NONE, BASE_NONE, NULL, 0,
9308 NULL, HFILL }},
9309 { &hf_camel_locationInformation,
9310 { "locationInformation", "camel.locationInformation_element",
9311 FT_NONE, BASE_NONE, NULL, 0,
9312 NULL, HFILL }},
9313 { &hf_camel_callAcceptedSpecificInfo,
9314 { "callAcceptedSpecificInfo", "camel.callAcceptedSpecificInfo_element",
9315 FT_NONE, BASE_NONE, NULL, 0,
9316 NULL, HFILL }},
9317 { &hf_camel_oAbandonSpecificInfo,
9318 { "oAbandonSpecificInfo", "camel.oAbandonSpecificInfo_element",
9319 FT_NONE, BASE_NONE, NULL, 0,
9320 NULL, HFILL }},
9321 { &hf_camel_oChangeOfPositionSpecificInfo,
9322 { "oChangeOfPositionSpecificInfo", "camel.oChangeOfPositionSpecificInfo_element",
9323 FT_NONE, BASE_NONE, NULL, 0,
9324 NULL, HFILL }},
9325 { &hf_camel_metDPCriteriaList,
9326 { "metDPCriteriaList", "camel.metDPCriteriaList",
9327 FT_UINT32, BASE_DEC, NULL, 0,
9328 NULL, HFILL }},
9329 { &hf_camel_tChangeOfPositionSpecificInfo,
9330 { "tChangeOfPositionSpecificInfo", "camel.tChangeOfPositionSpecificInfo_element",
9331 FT_NONE, BASE_NONE, NULL, 0,
9332 NULL, HFILL }},
9333 { &hf_camel_dpSpecificInfoAlt,
9334 { "dpSpecificInfoAlt", "camel.dpSpecificInfoAlt_element",
9335 FT_NONE, BASE_NONE, NULL, 0,
9336 NULL, HFILL }},
9337 { &hf_camel_o_smsFailureSpecificInfo,
9338 { "o-smsFailureSpecificInfo", "camel.o_smsFailureSpecificInfo_element",
9339 FT_NONE, BASE_NONE, NULL, 0,
9340 NULL, HFILL }},
9341 { &hf_camel_mo_smsfailureCause,
9342 { "failureCause", "camel.mo-smsfailureCause",
9343 FT_UINT32, BASE_DEC, VALS(camel_MO_SMSCause_vals), 0,
9344 "MO_SMSCause", HFILL }},
9345 { &hf_camel_o_smsSubmissionSpecificInfo,
9346 { "o-smsSubmissionSpecificInfo", "camel.o_smsSubmissionSpecificInfo_element",
9347 FT_NONE, BASE_NONE, NULL, 0,
9348 NULL, HFILL }},
9349 { &hf_camel_t_smsFailureSpecificInfo,
9350 { "t-smsFailureSpecificInfo", "camel.t_smsFailureSpecificInfo_element",
9351 FT_NONE, BASE_NONE, NULL, 0,
9352 "T_t_smsFailureSpecificInfo", HFILL }},
9353 { &hf_camel_t_smsfailureCause,
9354 { "failureCause", "camel.t-smsfailureCause",
9355 FT_BYTES, BASE_NONE, NULL, 0,
9356 "MT_SMSCause", HFILL }},
9357 { &hf_camel_t_smsDeliverySpecificInfo,
9358 { "t-smsDeliverySpecificInfo", "camel.t_smsDeliverySpecificInfo_element",
9359 FT_NONE, BASE_NONE, NULL, 0,
9360 "T_t_smsDeliverySpecificInfo", HFILL }},
9361 { &hf_camel_Extensions_item,
9362 { "ExtensionField", "camel.ExtensionField_element",
9363 FT_NONE, BASE_NONE, NULL, 0,
9364 NULL, HFILL }},
9365 { &hf_camel_type,
9366 { "type", "camel.type",
9367 FT_UINT32, BASE_DEC, VALS(camel_Code_vals), 0,
9368 "Code", HFILL }},
9369 { &hf_camel_criticality,
9370 { "criticality", "camel.criticality",
9371 FT_UINT32, BASE_DEC, VALS(inap_CriticalityType_vals), 0,
9372 "CriticalityType", HFILL }},
9373 { &hf_camel_value,
9374 { "value", "camel.value_element",
9375 FT_NONE, BASE_NONE, NULL, 0,
9376 NULL, HFILL }},
9377 { &hf_camel_callDiversionTreatmentIndicator,
9378 { "callDiversionTreatmentIndicator", "camel.callDiversionTreatmentIndicator",
9379 FT_BYTES, BASE_NONE, NULL, 0,
9380 "OCTET_STRING_SIZE_1", HFILL }},
9381 { &hf_camel_callingPartyRestrictionIndicator,
9382 { "callingPartyRestrictionIndicator", "camel.callingPartyRestrictionIndicator",
9383 FT_BYTES, BASE_NONE, NULL, 0,
9384 "OCTET_STRING_SIZE_1", HFILL }},
9385 { &hf_camel_compoundGapCriteria,
9386 { "compoundGapCriteria", "camel.compoundGapCriteria_element",
9387 FT_NONE, BASE_NONE, NULL, 0,
9388 "CompoundCriteria", HFILL }},
9389 { &hf_camel_gapIndicatorsDuration,
9390 { "duration", "camel.gapIndicatorsDuration",
9391 FT_INT32, BASE_DEC, NULL, 0,
9392 NULL, HFILL }},
9393 { &hf_camel_gapInterval,
9394 { "gapInterval", "camel.gapInterval",
9395 FT_INT32, BASE_DEC, NULL, 0,
9396 "Interval", HFILL }},
9397 { &hf_camel_informationToSend,
9398 { "informationToSend", "camel.informationToSend",
9399 FT_UINT32, BASE_DEC, VALS(camel_InformationToSend_vals), 0,
9400 NULL, HFILL }},
9401 { &hf_camel_GenericNumbers_item,
9402 { "GenericNumber", "camel.GenericNumber",
9403 FT_BYTES, BASE_NONE, NULL, 0,
9404 NULL, HFILL }},
9405 { &hf_camel_short_QoS_format,
9406 { "short-QoS-format", "camel.short_QoS_format",
9407 FT_BYTES, BASE_NONE, NULL, 0,
9408 "QoS_Subscribed", HFILL }},
9409 { &hf_camel_long_QoS_format,
9410 { "long-QoS-format", "camel.long_QoS_format",
9411 FT_BYTES, BASE_NONE, NULL, 0,
9412 "Ext_QoS_Subscribed", HFILL }},
9413 { &hf_camel_supplement_to_long_QoS_format,
9414 { "supplement-to-long-QoS-format", "camel.supplement_to_long_QoS_format",
9415 FT_BYTES, BASE_NONE, NULL, 0,
9416 "Ext2_QoS_Subscribed", HFILL }},
9417 { &hf_camel_additionalSupplement,
9418 { "additionalSupplement", "camel.additionalSupplement",
9419 FT_BYTES, BASE_NONE, NULL, 0,
9420 "Ext3_QoS_Subscribed", HFILL }},
9421 { &hf_camel_gPRSEventType,
9422 { "gPRSEventType", "camel.gPRSEventType",
9423 FT_UINT32, BASE_DEC, VALS(camel_GPRSEventType_vals), 0,
9424 NULL, HFILL }},
9425 { &hf_camel_attachChangeOfPositionSpecificInformation,
9426 { "attachChangeOfPositionSpecificInformation", "camel.attachChangeOfPositionSpecificInformation_element",
9427 FT_NONE, BASE_NONE, NULL, 0,
9428 NULL, HFILL }},
9429 { &hf_camel_locationInformationGPRS,
9430 { "locationInformationGPRS", "camel.locationInformationGPRS_element",
9431 FT_NONE, BASE_NONE, NULL, 0,
9432 NULL, HFILL }},
9433 { &hf_camel_pdp_ContextchangeOfPositionSpecificInformation,
9434 { "pdp-ContextchangeOfPositionSpecificInformation", "camel.pdp_ContextchangeOfPositionSpecificInformation_element",
9435 FT_NONE, BASE_NONE, NULL, 0,
9436 NULL, HFILL }},
9437 { &hf_camel_accessPointName,
9438 { "accessPointName", "camel.accessPointName",
9439 FT_BYTES, BASE_NONE, NULL, 0,
9440 NULL, HFILL }},
9441 { &hf_camel_chargingID,
9442 { "chargingID", "camel.chargingID",
9443 FT_BYTES, BASE_NONE, NULL, 0,
9444 "GPRSChargingID", HFILL }},
9445 { &hf_camel_endUserAddress,
9446 { "endUserAddress", "camel.endUserAddress_element",
9447 FT_NONE, BASE_NONE, NULL, 0,
9448 NULL, HFILL }},
9449 { &hf_camel_qualityOfService,
9450 { "qualityOfService", "camel.qualityOfService_element",
9451 FT_NONE, BASE_NONE, NULL, 0,
9452 NULL, HFILL }},
9453 { &hf_camel_timeAndTimeZone,
9454 { "timeAndTimeZone", "camel.timeAndTimeZone",
9455 FT_BYTES, BASE_NONE, NULL, 0,
9456 NULL, HFILL }},
9457 { &hf_camel_gGSNAddress,
9458 { "gGSNAddress", "camel.gGSNAddress",
9459 FT_BYTES, BASE_NONE, NULL, 0,
9460 "GSN_Address", HFILL }},
9461 { &hf_camel_detachSpecificInformation,
9462 { "detachSpecificInformation", "camel.detachSpecificInformation_element",
9463 FT_NONE, BASE_NONE, NULL, 0,
9464 NULL, HFILL }},
9465 { &hf_camel_initiatingEntity,
9466 { "initiatingEntity", "camel.initiatingEntity",
9467 FT_UINT32, BASE_DEC, VALS(camel_InitiatingEntity_vals), 0,
9468 NULL, HFILL }},
9469 { &hf_camel_routeingAreaUpdate,
9470 { "routeingAreaUpdate", "camel.routeingAreaUpdate_element",
9471 FT_NONE, BASE_NONE, NULL, 0,
9472 NULL, HFILL }},
9473 { &hf_camel_disconnectSpecificInformation,
9474 { "disconnectSpecificInformation", "camel.disconnectSpecificInformation_element",
9475 FT_NONE, BASE_NONE, NULL, 0,
9476 NULL, HFILL }},
9477 { &hf_camel_pDPContextEstablishmentSpecificInformation,
9478 { "pDPContextEstablishmentSpecificInformation", "camel.pDPContextEstablishmentSpecificInformation_element",
9479 FT_NONE, BASE_NONE, NULL, 0,
9480 NULL, HFILL }},
9481 { &hf_camel_pDPInitiationType,
9482 { "pDPInitiationType", "camel.pDPInitiationType",
9483 FT_UINT32, BASE_DEC, VALS(camel_PDPInitiationType_vals), 0,
9484 NULL, HFILL }},
9485 { &hf_camel_secondaryPDP_context,
9486 { "secondaryPDP-context", "camel.secondaryPDP_context_element",
9487 FT_NONE, BASE_NONE, NULL, 0,
9488 NULL, HFILL }},
9489 { &hf_camel_pDPContextEstablishmentAcknowledgementSpecificInformation,
9490 { "pDPContextEstablishmentAcknowledgementSpecificInformation", "camel.pDPContextEstablishmentAcknowledgementSpecificInformation_element",
9491 FT_NONE, BASE_NONE, NULL, 0,
9492 NULL, HFILL }},
9493 { &hf_camel_messageID,
9494 { "messageID", "camel.messageID",
9495 FT_UINT32, BASE_DEC, VALS(camel_MessageID_vals), 0,
9496 NULL, HFILL }},
9497 { &hf_camel_numberOfRepetitions,
9498 { "numberOfRepetitions", "camel.numberOfRepetitions",
9499 FT_UINT32, BASE_DEC, NULL, 0,
9500 "INTEGER_1_127", HFILL }},
9501 { &hf_camel_inbandInfoDuration,
9502 { "duration", "camel.inbandInfoDuration",
9503 FT_UINT32, BASE_DEC, NULL, 0,
9504 "INTEGER_0_32767", HFILL }},
9505 { &hf_camel_interval,
9506 { "interval", "camel.interval",
9507 FT_UINT32, BASE_DEC, NULL, 0,
9508 "INTEGER_0_32767", HFILL }},
9509 { &hf_camel_inbandInfo,
9510 { "inbandInfo", "camel.inbandInfo_element",
9511 FT_NONE, BASE_NONE, NULL, 0,
9512 NULL, HFILL }},
9513 { &hf_camel_tone,
9514 { "tone", "camel.tone_element",
9515 FT_NONE, BASE_NONE, NULL, 0,
9516 NULL, HFILL }},
9517 { &hf_camel_cellGlobalIdOrServiceAreaIdOrLAI,
9518 { "cellGlobalIdOrServiceAreaIdOrLAI", "camel.cellGlobalIdOrServiceAreaIdOrLAI",
9519 FT_BYTES, BASE_NONE, NULL, 0,
9520 NULL, HFILL }},
9521 { &hf_camel_routeingAreaIdentity,
9522 { "routeingAreaIdentity", "camel.routeingAreaIdentity",
9523 FT_BYTES, BASE_NONE, NULL, 0,
9524 "RAIdentity", HFILL }},
9525 { &hf_camel_geographicalInformation,
9526 { "geographicalInformation", "camel.geographicalInformation",
9527 FT_BYTES, BASE_NONE, NULL, 0,
9528 NULL, HFILL }},
9529 { &hf_camel_sgsn_Number,
9530 { "sgsn-Number", "camel.sgsn_Number",
9531 FT_BYTES, BASE_NONE, NULL, 0,
9532 "ISDN_AddressString", HFILL }},
9533 { &hf_camel_selectedLSAIdentity,
9534 { "selectedLSAIdentity", "camel.selectedLSAIdentity",
9535 FT_BYTES, BASE_NONE, NULL, 0,
9536 "LSAIdentity", HFILL }},
9537 { &hf_camel_extensionContainer,
9538 { "extensionContainer", "camel.extensionContainer_element",
9539 FT_NONE, BASE_NONE, NULL, 0,
9540 NULL, HFILL }},
9541 { &hf_camel_sai_Present,
9542 { "sai-Present", "camel.sai_Present_element",
9543 FT_NONE, BASE_NONE, NULL, 0,
9544 NULL, HFILL }},
9545 { &hf_camel_userCSGInformation,
9546 { "userCSGInformation", "camel.userCSGInformation",
9547 FT_BYTES, BASE_NONE, NULL, 0,
9548 NULL, HFILL }},
9549 { &hf_camel_elementaryMessageID,
9550 { "elementaryMessageID", "camel.elementaryMessageID",
9551 FT_UINT32, BASE_DEC, NULL, 0,
9552 "Integer4", HFILL }},
9553 { &hf_camel_text,
9554 { "text", "camel.text_element",
9555 FT_NONE, BASE_NONE, NULL, 0,
9556 NULL, HFILL }},
9557 { &hf_camel_messageContent,
9558 { "messageContent", "camel.messageContent",
9559 FT_STRING, BASE_NONE, NULL, 0,
9560 "IA5String_SIZE_bound__minMessageContentLength_bound__maxMessageContentLength", HFILL }},
9561 { &hf_camel_attributes,
9562 { "attributes", "camel.attributes",
9563 FT_BYTES, BASE_NONE, NULL, 0,
9564 "OCTET_STRING_SIZE_bound__minAttributesLength_bound__maxAttributesLength", HFILL }},
9565 { &hf_camel_elementaryMessageIDs,
9566 { "elementaryMessageIDs", "camel.elementaryMessageIDs",
9567 FT_UINT32, BASE_DEC, NULL, 0,
9568 "SEQUENCE_SIZE_1_bound__numOfMessageIDs_OF_Integer4", HFILL }},
9569 { &hf_camel_elementaryMessageIDs_item,
9570 { "Integer4", "camel.Integer4",
9571 FT_UINT32, BASE_DEC, NULL, 0,
9572 NULL, HFILL }},
9573 { &hf_camel_variableMessage,
9574 { "variableMessage", "camel.variableMessage_element",
9575 FT_NONE, BASE_NONE, NULL, 0,
9576 NULL, HFILL }},
9577 { &hf_camel_variableParts,
9578 { "variableParts", "camel.variableParts",
9579 FT_UINT32, BASE_DEC, NULL, 0,
9580 "SEQUENCE_SIZE_1_5_OF_VariablePart", HFILL }},
9581 { &hf_camel_variableParts_item,
9582 { "VariablePart", "camel.VariablePart",
9583 FT_UINT32, BASE_DEC, VALS(camel_VariablePart_vals), 0,
9584 NULL, HFILL }},
9585 { &hf_camel_MetDPCriteriaList_item,
9586 { "MetDPCriterion", "camel.MetDPCriterion",
9587 FT_UINT32, BASE_DEC, VALS(camel_MetDPCriterion_vals), 0,
9588 NULL, HFILL }},
9589 { &hf_camel_enteringCellGlobalId,
9590 { "enteringCellGlobalId", "camel.enteringCellGlobalId",
9591 FT_BYTES, BASE_NONE, NULL, 0,
9592 "CellGlobalIdOrServiceAreaIdFixedLength", HFILL }},
9593 { &hf_camel_leavingCellGlobalId,
9594 { "leavingCellGlobalId", "camel.leavingCellGlobalId",
9595 FT_BYTES, BASE_NONE, NULL, 0,
9596 "CellGlobalIdOrServiceAreaIdFixedLength", HFILL }},
9597 { &hf_camel_enteringServiceAreaId,
9598 { "enteringServiceAreaId", "camel.enteringServiceAreaId",
9599 FT_BYTES, BASE_NONE, NULL, 0,
9600 "CellGlobalIdOrServiceAreaIdFixedLength", HFILL }},
9601 { &hf_camel_leavingServiceAreaId,
9602 { "leavingServiceAreaId", "camel.leavingServiceAreaId",
9603 FT_BYTES, BASE_NONE, NULL, 0,
9604 "CellGlobalIdOrServiceAreaIdFixedLength", HFILL }},
9605 { &hf_camel_enteringLocationAreaId,
9606 { "enteringLocationAreaId", "camel.enteringLocationAreaId",
9607 FT_BYTES, BASE_NONE, NULL, 0,
9608 "LAIFixedLength", HFILL }},
9609 { &hf_camel_leavingLocationAreaId,
9610 { "leavingLocationAreaId", "camel.leavingLocationAreaId",
9611 FT_BYTES, BASE_NONE, NULL, 0,
9612 "LAIFixedLength", HFILL }},
9613 { &hf_camel_inter_SystemHandOverToUMTS,
9614 { "inter-SystemHandOverToUMTS", "camel.inter_SystemHandOverToUMTS_element",
9615 FT_NONE, BASE_NONE, NULL, 0,
9616 NULL, HFILL }},
9617 { &hf_camel_inter_SystemHandOverToGSM,
9618 { "inter-SystemHandOverToGSM", "camel.inter_SystemHandOverToGSM_element",
9619 FT_NONE, BASE_NONE, NULL, 0,
9620 NULL, HFILL }},
9621 { &hf_camel_metDPCriterionAlt,
9622 { "metDPCriterionAlt", "camel.metDPCriterionAlt_element",
9623 FT_NONE, BASE_NONE, NULL, 0,
9624 NULL, HFILL }},
9625 { &hf_camel_minimumNumberOfDigits,
9626 { "minimumNumberOfDigits", "camel.minimumNumberOfDigits",
9627 FT_UINT32, BASE_DEC, NULL, 0,
9628 "INTEGER_1_30", HFILL }},
9629 { &hf_camel_maximumNumberOfDigits,
9630 { "maximumNumberOfDigits", "camel.maximumNumberOfDigits",
9631 FT_UINT32, BASE_DEC, NULL, 0,
9632 "INTEGER_1_30", HFILL }},
9633 { &hf_camel_requested_QoS,
9634 { "requested-QoS", "camel.requested_QoS",
9635 FT_UINT32, BASE_DEC, VALS(camel_GPRS_QoS_vals), 0,
9636 "GPRS_QoS", HFILL }},
9637 { &hf_camel_subscribed_QoS,
9638 { "subscribed-QoS", "camel.subscribed_QoS",
9639 FT_UINT32, BASE_DEC, VALS(camel_GPRS_QoS_vals), 0,
9640 "GPRS_QoS", HFILL }},
9641 { &hf_camel_negotiated_QoS,
9642 { "negotiated-QoS", "camel.negotiated_QoS",
9643 FT_UINT32, BASE_DEC, VALS(camel_GPRS_QoS_vals), 0,
9644 "GPRS_QoS", HFILL }},
9645 { &hf_camel_requested_QoS_Extension,
9646 { "requested-QoS-Extension", "camel.requested_QoS_Extension_element",
9647 FT_NONE, BASE_NONE, NULL, 0,
9648 "GPRS_QoS_Extension", HFILL }},
9649 { &hf_camel_subscribed_QoS_Extension,
9650 { "subscribed-QoS-Extension", "camel.subscribed_QoS_Extension_element",
9651 FT_NONE, BASE_NONE, NULL, 0,
9652 "GPRS_QoS_Extension", HFILL }},
9653 { &hf_camel_negotiated_QoS_Extension,
9654 { "negotiated-QoS-Extension", "camel.negotiated_QoS_Extension_element",
9655 FT_NONE, BASE_NONE, NULL, 0,
9656 "GPRS_QoS_Extension", HFILL }},
9657 { &hf_camel_receivingSideID,
9658 { "receivingSideID", "camel.receivingSideID",
9659 FT_BYTES, BASE_NONE, NULL, 0,
9660 "LegType", HFILL }},
9661 { &hf_camel_RequestedInformationList_item,
9662 { "RequestedInformation", "camel.RequestedInformation_element",
9663 FT_NONE, BASE_NONE, NULL, 0,
9664 NULL, HFILL }},
9665 { &hf_camel_RequestedInformationTypeList_item,
9666 { "RequestedInformationType", "camel.RequestedInformationType",
9667 FT_UINT32, BASE_DEC, VALS(camel_RequestedInformationType_vals), 0,
9668 NULL, HFILL }},
9669 { &hf_camel_requestedInformationType,
9670 { "requestedInformationType", "camel.requestedInformationType",
9671 FT_UINT32, BASE_DEC, VALS(camel_RequestedInformationType_vals), 0,
9672 NULL, HFILL }},
9673 { &hf_camel_requestedInformationValue,
9674 { "requestedInformationValue", "camel.requestedInformationValue",
9675 FT_UINT32, BASE_DEC, VALS(camel_RequestedInformationValue_vals), 0,
9676 NULL, HFILL }},
9677 { &hf_camel_callAttemptElapsedTimeValue,
9678 { "callAttemptElapsedTimeValue", "camel.callAttemptElapsedTimeValue",
9679 FT_UINT32, BASE_DEC, NULL, 0,
9680 "INTEGER_0_255", HFILL }},
9681 { &hf_camel_callStopTimeValue,
9682 { "callStopTimeValue", "camel.callStopTimeValue",
9683 FT_STRING, BASE_NONE, NULL, 0,
9684 "DateAndTime", HFILL }},
9685 { &hf_camel_callConnectedElapsedTimeValue,
9686 { "callConnectedElapsedTimeValue", "camel.callConnectedElapsedTimeValue",
9687 FT_UINT32, BASE_DEC, NULL, 0,
9688 "Integer4", HFILL }},
9689 { &hf_camel_releaseCauseValue,
9690 { "releaseCauseValue", "camel.releaseCauseValue",
9691 FT_BYTES, BASE_NONE, NULL, 0,
9692 "Cause", HFILL }},
9693 { &hf_camel_sendingSideID,
9694 { "sendingSideID", "camel.sendingSideID",
9695 FT_BYTES, BASE_NONE, NULL, 0,
9696 "LegType", HFILL }},
9697 { &hf_camel_forwardServiceInteractionInd,
9698 { "forwardServiceInteractionInd", "camel.forwardServiceInteractionInd_element",
9699 FT_NONE, BASE_NONE, NULL, 0,
9700 NULL, HFILL }},
9701 { &hf_camel_backwardServiceInteractionInd,
9702 { "backwardServiceInteractionInd", "camel.backwardServiceInteractionInd_element",
9703 FT_NONE, BASE_NONE, NULL, 0,
9704 NULL, HFILL }},
9705 { &hf_camel_bothwayThroughConnectionInd,
9706 { "bothwayThroughConnectionInd", "camel.bothwayThroughConnectionInd",
9707 FT_UINT32, BASE_DEC, VALS(inap_BothwayThroughConnectionInd_vals), 0,
9708 NULL, HFILL }},
9709 { &hf_camel_connectedNumberTreatmentInd,
9710 { "connectedNumberTreatmentInd", "camel.connectedNumberTreatmentInd",
9711 FT_UINT32, BASE_DEC, VALS(camel_ConnectedNumberTreatmentInd_vals), 0,
9712 NULL, HFILL }},
9713 { &hf_camel_nonCUGCall,
9714 { "nonCUGCall", "camel.nonCUGCall_element",
9715 FT_NONE, BASE_NONE, NULL, 0,
9716 NULL, HFILL }},
9717 { &hf_camel_holdTreatmentIndicator,
9718 { "holdTreatmentIndicator", "camel.holdTreatmentIndicator",
9719 FT_INT32, BASE_DEC, VALS(camel_holdTreatmentIndicator_values), 0,
9720 "OCTET_STRING_SIZE_1", HFILL }},
9721 { &hf_camel_cwTreatmentIndicator,
9722 { "cwTreatmentIndicator", "camel.cwTreatmentIndicator",
9723 FT_INT32, BASE_DEC, VALS(camel_cwTreatmentIndicator_values), 0,
9724 "OCTET_STRING_SIZE_1", HFILL }},
9725 { &hf_camel_ectTreatmentIndicator,
9726 { "ectTreatmentIndicator", "camel.ectTreatmentIndicator",
9727 FT_INT32, BASE_DEC, VALS(camel_ectTreatmentIndicator_values), 0,
9728 "OCTET_STRING_SIZE_1", HFILL }},
9729 { &hf_camel_eventTypeSMS,
9730 { "eventTypeSMS", "camel.eventTypeSMS",
9731 FT_UINT32, BASE_DEC, VALS(camel_EventTypeSMS_vals), 0,
9732 NULL, HFILL }},
9733 { &hf_camel_timeSinceTariffSwitch,
9734 { "timeSinceTariffSwitch", "camel.timeSinceTariffSwitch",
9735 FT_UINT32, BASE_DEC, NULL, 0,
9736 "INTEGER_0_864000", HFILL }},
9737 { &hf_camel_timeIfTariffSwitch_tariffSwitchInterval,
9738 { "tariffSwitchInterval", "camel.tariffSwitchInterval",
9739 FT_UINT32, BASE_DEC, NULL, 0,
9740 "INTEGER_1_864000", HFILL }},
9741 { &hf_camel_timeIfNoTariffSwitch,
9742 { "timeIfNoTariffSwitch", "camel.timeIfNoTariffSwitch",
9743 FT_UINT32, BASE_DEC, NULL, 0,
9744 NULL, HFILL }},
9745 { &hf_camel_timeIfTariffSwitch,
9746 { "timeIfTariffSwitch", "camel.timeIfTariffSwitch_element",
9747 FT_NONE, BASE_NONE, NULL, 0,
9748 NULL, HFILL }},
9749 { &hf_camel_toneID,
9750 { "toneID", "camel.toneID",
9751 FT_UINT32, BASE_DEC, NULL, 0,
9752 "Integer4", HFILL }},
9753 { &hf_camel_toneDuration,
9754 { "duration", "camel.toneDuration",
9755 FT_UINT32, BASE_DEC, NULL, 0,
9756 "Integer4", HFILL }},
9757 { &hf_camel_volumeIfNoTariffSwitch,
9758 { "volumeIfNoTariffSwitch", "camel.volumeIfNoTariffSwitch",
9759 FT_UINT32, BASE_DEC, NULL, 0,
9760 "INTEGER_0_4294967295", HFILL }},
9761 { &hf_camel_volumeIfTariffSwitch,
9762 { "volumeIfTariffSwitch", "camel.volumeIfTariffSwitch_element",
9763 FT_NONE, BASE_NONE, NULL, 0,
9764 NULL, HFILL }},
9765 { &hf_camel_volumeSinceLastTariffSwitch,
9766 { "volumeSinceLastTariffSwitch", "camel.volumeSinceLastTariffSwitch",
9767 FT_UINT32, BASE_DEC, NULL, 0,
9768 "INTEGER_0_4294967295", HFILL }},
9769 { &hf_camel_volumeTariffSwitchInterval,
9770 { "volumeTariffSwitchInterval", "camel.volumeTariffSwitchInterval",
9771 FT_UINT32, BASE_DEC, NULL, 0,
9772 "INTEGER_0_4294967295", HFILL }},
9773 { &hf_camel_rO_VolumeIfNoTariffSwitch,
9774 { "rO-VolumeIfNoTariffSwitch", "camel.rO_VolumeIfNoTariffSwitch",
9775 FT_UINT32, BASE_DEC, NULL, 0,
9776 "INTEGER_0_255", HFILL }},
9777 { &hf_camel_rO_VolumeIfTariffSwitch,
9778 { "rO-VolumeIfTariffSwitch", "camel.rO_VolumeIfTariffSwitch_element",
9779 FT_NONE, BASE_NONE, NULL, 0,
9780 NULL, HFILL }},
9781 { &hf_camel_rO_VolumeSinceLastTariffSwitch,
9782 { "rO-VolumeSinceLastTariffSwitch", "camel.rO_VolumeSinceLastTariffSwitch",
9783 FT_UINT32, BASE_DEC, NULL, 0,
9784 "INTEGER_0_255", HFILL }},
9785 { &hf_camel_rO_VolumeTariffSwitchInterval,
9786 { "rO-VolumeTariffSwitchInterval", "camel.rO_VolumeTariffSwitchInterval",
9787 FT_UINT32, BASE_DEC, NULL, 0,
9788 "INTEGER_0_255", HFILL }},
9789 { &hf_camel_integer,
9790 { "integer", "camel.integer",
9791 FT_UINT32, BASE_DEC, NULL, 0,
9792 "Integer4", HFILL }},
9793 { &hf_camel_number,
9794 { "number", "camel.number",
9795 FT_BYTES, BASE_NONE, NULL, 0,
9796 "Digits", HFILL }},
9797 { &hf_camel_time,
9798 { "time", "camel.time",
9799 FT_BYTES, BASE_NONE, NULL, 0,
9800 "OCTET_STRING_SIZE_2", HFILL }},
9801 { &hf_camel_date,
9802 { "date", "camel.date",
9803 FT_BYTES, BASE_NONE, NULL, 0,
9804 "OCTET_STRING_SIZE_4", HFILL }},
9805 { &hf_camel_price,
9806 { "price", "camel.price",
9807 FT_BYTES, BASE_NONE, NULL, 0,
9808 "OCTET_STRING_SIZE_4", HFILL }},
9809 { &hf_camel_par_cancelFailedProblem,
9810 { "problem", "camel.problem",
9811 FT_UINT32, BASE_DEC, VALS(camel_T_par_cancelFailedProblem_vals), 0,
9812 "T_par_cancelFailedProblem", HFILL }},
9813 { &hf_camel_operation,
9814 { "operation", "camel.operation",
9815 FT_INT32, BASE_DEC, NULL, 0,
9816 "InvokeID", HFILL }},
9817 { &hf_camel_destinationReference,
9818 { "destinationReference", "camel.destinationReference",
9819 FT_UINT32, BASE_DEC, NULL, 0,
9820 "Integer4", HFILL }},
9821 { &hf_camel_originationReference,
9822 { "originationReference", "camel.originationReference",
9823 FT_UINT32, BASE_DEC, NULL, 0,
9824 "Integer4", HFILL }},
9825 { &hf_camel_disconnectFromIPForbidden,
9826 { "disconnectFromIPForbidden", "camel.disconnectFromIPForbidden",
9827 FT_BOOLEAN, BASE_NONE, NULL, 0,
9828 "BOOLEAN", HFILL }},
9829 { &hf_camel_requestAnnouncementCompleteNotification,
9830 { "requestAnnouncementCompleteNotification", "camel.requestAnnouncementCompleteNotification",
9831 FT_BOOLEAN, BASE_NONE, NULL, 0,
9832 "BOOLEAN", HFILL }},
9833 { &hf_camel_requestAnnouncementStartedNotification,
9834 { "requestAnnouncementStartedNotification", "camel.requestAnnouncementStartedNotification",
9835 FT_BOOLEAN, BASE_NONE, NULL, 0,
9836 "BOOLEAN", HFILL }},
9837 { &hf_camel_collectedInfo,
9838 { "collectedInfo", "camel.collectedInfo",
9839 FT_UINT32, BASE_DEC, VALS(camel_CollectedInfo_vals), 0,
9840 NULL, HFILL }},
9841 { &hf_camel_digitsResponse,
9842 { "digitsResponse", "camel.digitsResponse",
9843 FT_BYTES, BASE_NONE, NULL, 0,
9844 "Digits", HFILL }},
9845 { &hf_camel_allAnnouncementsComplete,
9846 { "allAnnouncementsComplete", "camel.allAnnouncementsComplete_element",
9847 FT_NONE, BASE_NONE, NULL, 0,
9848 NULL, HFILL }},
9849 { &hf_camel_firstAnnouncementStarted,
9850 { "firstAnnouncementStarted", "camel.firstAnnouncementStarted_element",
9851 FT_NONE, BASE_NONE, NULL, 0,
9852 NULL, HFILL }},
9853 { &hf_camel_aChBillingChargingCharacteristics,
9854 { "aChBillingChargingCharacteristics", "camel.aChBillingChargingCharacteristics",
9855 FT_BYTES, BASE_NONE, NULL, 0,
9856 NULL, HFILL }},
9857 { &hf_camel_partyToCharge,
9858 { "partyToCharge", "camel.partyToCharge",
9859 FT_UINT32, BASE_DEC, VALS(camel_SendingSideID_vals), 0,
9860 "SendingSideID", HFILL }},
9861 { &hf_camel_iTXcharging,
9862 { "iTXcharging", "camel.iTXcharging",
9863 FT_BOOLEAN, BASE_NONE, NULL, 0,
9864 "BOOLEAN", HFILL }},
9865 { &hf_camel_correlationID,
9866 { "correlationID", "camel.correlationID",
9867 FT_BYTES, BASE_NONE, NULL, 0,
9868 NULL, HFILL }},
9869 { &hf_camel_iPSSPCapabilities,
9870 { "iPSSPCapabilities", "camel.iPSSPCapabilities",
9871 FT_BYTES, BASE_NONE, NULL, 0,
9872 NULL, HFILL }},
9873 { &hf_camel_gapCriteria,
9874 { "gapCriteria", "camel.gapCriteria",
9875 FT_UINT32, BASE_DEC, VALS(camel_GapCriteria_vals), 0,
9876 NULL, HFILL }},
9877 { &hf_camel_gapIndicators,
9878 { "gapIndicators", "camel.gapIndicators_element",
9879 FT_NONE, BASE_NONE, NULL, 0,
9880 NULL, HFILL }},
9881 { &hf_camel_controlType,
9882 { "controlType", "camel.controlType",
9883 FT_UINT32, BASE_DEC, VALS(camel_ControlType_vals), 0,
9884 NULL, HFILL }},
9885 { &hf_camel_gapTreatment,
9886 { "gapTreatment", "camel.gapTreatment",
9887 FT_UINT32, BASE_DEC, VALS(camel_GapTreatment_vals), 0,
9888 NULL, HFILL }},
9889 { &hf_camel_requestedInformationList,
9890 { "requestedInformationList", "camel.requestedInformationList",
9891 FT_UINT32, BASE_DEC, NULL, 0,
9892 NULL, HFILL }},
9893 { &hf_camel_legID_01,
9894 { "legID", "camel.legID",
9895 FT_UINT32, BASE_DEC, VALS(camel_ReceivingSideID_vals), 0,
9896 "ReceivingSideID", HFILL }},
9897 { &hf_camel_requestedInformationTypeList,
9898 { "requestedInformationTypeList", "camel.requestedInformationTypeList",
9899 FT_UINT32, BASE_DEC, NULL, 0,
9900 NULL, HFILL }},
9901 { &hf_camel_legID_02,
9902 { "legID", "camel.legID",
9903 FT_UINT32, BASE_DEC, VALS(camel_SendingSideID_vals), 0,
9904 "SendingSideID", HFILL }},
9905 { &hf_camel_allRequests,
9906 { "allRequests", "camel.allRequests_element",
9907 FT_NONE, BASE_NONE, NULL, 0,
9908 NULL, HFILL }},
9909 { &hf_camel_callSegmentToCancel,
9910 { "callSegmentToCancel", "camel.callSegmentToCancel_element",
9911 FT_NONE, BASE_NONE, NULL, 0,
9912 NULL, HFILL }},
9913 { &hf_camel_destinationRoutingAddress,
9914 { "destinationRoutingAddress", "camel.destinationRoutingAddress",
9915 FT_UINT32, BASE_DEC, NULL, 0,
9916 NULL, HFILL }},
9917 { &hf_camel_alertingPattern,
9918 { "alertingPattern", "camel.alertingPattern",
9919 FT_BYTES, BASE_NONE, NULL, 0,
9920 NULL, HFILL }},
9921 { &hf_camel_originalCalledPartyID,
9922 { "originalCalledPartyID", "camel.originalCalledPartyID",
9923 FT_BYTES, BASE_NONE, NULL, 0,
9924 NULL, HFILL }},
9925 { &hf_camel_carrier,
9926 { "carrier", "camel.carrier",
9927 FT_BYTES, BASE_NONE, NULL, 0,
9928 NULL, HFILL }},
9929 { &hf_camel_callingPartysCategory,
9930 { "callingPartysCategory", "camel.callingPartysCategory",
9931 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &isup_calling_partys_category_value_ext, 0,
9932 NULL, HFILL }},
9933 { &hf_camel_redirectingPartyID,
9934 { "redirectingPartyID", "camel.redirectingPartyID",
9935 FT_BYTES, BASE_NONE, NULL, 0,
9936 NULL, HFILL }},
9937 { &hf_camel_redirectionInformation,
9938 { "redirectionInformation", "camel.redirectionInformation",
9939 FT_BYTES, BASE_NONE, NULL, 0,
9940 NULL, HFILL }},
9941 { &hf_camel_genericNumbers,
9942 { "genericNumbers", "camel.genericNumbers",
9943 FT_UINT32, BASE_DEC, NULL, 0,
9944 NULL, HFILL }},
9945 { &hf_camel_serviceInteractionIndicatorsTwo,
9946 { "serviceInteractionIndicatorsTwo", "camel.serviceInteractionIndicatorsTwo_element",
9947 FT_NONE, BASE_NONE, NULL, 0,
9948 NULL, HFILL }},
9949 { &hf_camel_chargeNumber,
9950 { "chargeNumber", "camel.chargeNumber",
9951 FT_BYTES, BASE_NONE, NULL, 0,
9952 NULL, HFILL }},
9953 { &hf_camel_legToBeConnected,
9954 { "legToBeConnected", "camel.legToBeConnected",
9955 FT_UINT32, BASE_DEC, VALS(inap_LegID_vals), 0,
9956 "LegID", HFILL }},
9957 { &hf_camel_cug_Interlock,
9958 { "cug-Interlock", "camel.cug_Interlock",
9959 FT_BYTES, BASE_NONE, NULL, 0,
9960 NULL, HFILL }},
9961 { &hf_camel_cug_OutgoingAccess,
9962 { "cug-OutgoingAccess", "camel.cug_OutgoingAccess_element",
9963 FT_NONE, BASE_NONE, NULL, 0,
9964 NULL, HFILL }},
9965 { &hf_camel_suppressionOfAnnouncement,
9966 { "suppressionOfAnnouncement", "camel.suppressionOfAnnouncement_element",
9967 FT_NONE, BASE_NONE, NULL, 0,
9968 NULL, HFILL }},
9969 { &hf_camel_oCSIApplicable,
9970 { "oCSIApplicable", "camel.oCSIApplicable_element",
9971 FT_NONE, BASE_NONE, NULL, 0,
9972 NULL, HFILL }},
9973 { &hf_camel_naOliInfo,
9974 { "naOliInfo", "camel.naOliInfo",
9975 FT_BYTES, BASE_NONE, NULL, 0,
9976 NULL, HFILL }},
9977 { &hf_camel_bor_InterrogationRequested,
9978 { "bor-InterrogationRequested", "camel.bor_InterrogationRequested_element",
9979 FT_NONE, BASE_NONE, NULL, 0,
9980 NULL, HFILL }},
9981 { &hf_camel_suppress_N_CSI,
9982 { "suppress-N-CSI", "camel.suppress_N_CSI_element",
9983 FT_NONE, BASE_NONE, NULL, 0,
9984 NULL, HFILL }},
9985 { &hf_camel_resourceAddress,
9986 { "resourceAddress", "camel.resourceAddress",
9987 FT_UINT32, BASE_DEC, VALS(camel_T_resourceAddress_vals), 0,
9988 NULL, HFILL }},
9989 { &hf_camel_ipRoutingAddress,
9990 { "ipRoutingAddress", "camel.ipRoutingAddress",
9991 FT_BYTES, BASE_NONE, NULL, 0,
9992 NULL, HFILL }},
9993 { &hf_camel_none,
9994 { "none", "camel.none_element",
9995 FT_NONE, BASE_NONE, NULL, 0,
9996 NULL, HFILL }},
9997 { &hf_camel_suppress_O_CSI,
9998 { "suppress-O-CSI", "camel.suppress_O_CSI_element",
9999 FT_NONE, BASE_NONE, NULL, 0,
10000 NULL, HFILL }},
10001 { &hf_camel_continueWithArgumentArgExtension,
10002 { "continueWithArgumentArgExtension", "camel.continueWithArgumentArgExtension_element",
10003 FT_NONE, BASE_NONE, NULL, 0,
10004 NULL, HFILL }},
10005 { &hf_camel_suppress_D_CSI,
10006 { "suppress-D-CSI", "camel.suppress_D_CSI_element",
10007 FT_NONE, BASE_NONE, NULL, 0,
10008 NULL, HFILL }},
10009 { &hf_camel_suppressOutgoingCallBarring,
10010 { "suppressOutgoingCallBarring", "camel.suppressOutgoingCallBarring_element",
10011 FT_NONE, BASE_NONE, NULL, 0,
10012 NULL, HFILL }},
10013 { &hf_camel_legOrCallSegment,
10014 { "legOrCallSegment", "camel.legOrCallSegment",
10015 FT_UINT32, BASE_DEC, VALS(camel_LegOrCallSegment_vals), 0,
10016 NULL, HFILL }},
10017 { &hf_camel_legToBeReleased,
10018 { "legToBeReleased", "camel.legToBeReleased",
10019 FT_UINT32, BASE_DEC, VALS(inap_LegID_vals), 0,
10020 "LegID", HFILL }},
10021 { &hf_camel_callSegmentFailure,
10022 { "callSegmentFailure", "camel.callSegmentFailure_element",
10023 FT_NONE, BASE_NONE, NULL, 0,
10024 NULL, HFILL }},
10025 { &hf_camel_bCSM_Failure,
10026 { "bCSM-Failure", "camel.bCSM_Failure_element",
10027 FT_NONE, BASE_NONE, NULL, 0,
10028 NULL, HFILL }},
10029 { &hf_camel_assistingSSPIPRoutingAddress,
10030 { "assistingSSPIPRoutingAddress", "camel.assistingSSPIPRoutingAddress",
10031 FT_BYTES, BASE_NONE, NULL, 0,
10032 NULL, HFILL }},
10033 { &hf_camel_callingPartyNumber,
10034 { "callingPartyNumber", "camel.callingPartyNumber",
10035 FT_BYTES, BASE_NONE, NULL, 0,
10036 NULL, HFILL }},
10037 { &hf_camel_eventSpecificInformationBCSM,
10038 { "eventSpecificInformationBCSM", "camel.eventSpecificInformationBCSM",
10039 FT_UINT32, BASE_DEC, VALS(camel_EventSpecificInformationBCSM_vals), 0,
10040 NULL, HFILL }},
10041 { &hf_camel_miscCallInfo,
10042 { "miscCallInfo", "camel.miscCallInfo_element",
10043 FT_NONE, BASE_NONE, NULL, 0,
10044 NULL, HFILL }},
10045 { &hf_camel_cGEncountered,
10046 { "cGEncountered", "camel.cGEncountered",
10047 FT_UINT32, BASE_DEC, VALS(camel_CGEncountered_vals), 0,
10048 NULL, HFILL }},
10049 { &hf_camel_locationNumber,
10050 { "locationNumber", "camel.locationNumber",
10051 FT_BYTES, BASE_NONE, NULL, 0,
10052 NULL, HFILL }},
10053 { &hf_camel_highLayerCompatibility,
10054 { "highLayerCompatibility", "camel.highLayerCompatibility",
10055 FT_BYTES, BASE_NONE, NULL, 0,
10056 NULL, HFILL }},
10057 { &hf_camel_additionalCallingPartyNumber,
10058 { "additionalCallingPartyNumber", "camel.additionalCallingPartyNumber",
10059 FT_BYTES, BASE_NONE, NULL, 0,
10060 NULL, HFILL }},
10061 { &hf_camel_bearerCapability,
10062 { "bearerCapability", "camel.bearerCapability",
10063 FT_UINT32, BASE_DEC, VALS(camel_BearerCapability_vals), 0,
10064 NULL, HFILL }},
10065 { &hf_camel_cug_Index,
10066 { "cug-Index", "camel.cug_Index",
10067 FT_UINT32, BASE_DEC, NULL, 0,
10068 NULL, HFILL }},
10069 { &hf_camel_iMSI,
10070 { "iMSI", "camel.iMSI",
10071 FT_BYTES, BASE_NONE, NULL, 0,
10072 NULL, HFILL }},
10073 { &hf_camel_subscriberState,
10074 { "subscriberState", "camel.subscriberState",
10075 FT_UINT32, BASE_DEC, VALS(gsm_map_ms_SubscriberState_vals), 0,
10076 NULL, HFILL }},
10077 { &hf_camel_callReferenceNumber,
10078 { "callReferenceNumber", "camel.callReferenceNumber",
10079 FT_BYTES, BASE_NONE, NULL, 0,
10080 NULL, HFILL }},
10081 { &hf_camel_mscAddress,
10082 { "mscAddress", "camel.mscAddress",
10083 FT_BYTES, BASE_NONE, NULL, 0,
10084 "ISDN_AddressString", HFILL }},
10085 { &hf_camel_calledPartyBCDNumber,
10086 { "calledPartyBCDNumber", "camel.calledPartyBCDNumber",
10087 FT_BYTES, BASE_NONE, NULL, 0,
10088 NULL, HFILL }},
10089 { &hf_camel_timeAndTimezone,
10090 { "timeAndTimezone", "camel.timeAndTimezone",
10091 FT_BYTES, BASE_NONE, NULL, 0,
10092 NULL, HFILL }},
10093 { &hf_camel_callForwardingSS_Pending,
10094 { "callForwardingSS-Pending", "camel.callForwardingSS_Pending_element",
10095 FT_NONE, BASE_NONE, NULL, 0,
10096 NULL, HFILL }},
10097 { &hf_camel_initialDPArgExtension,
10098 { "initialDPArgExtension", "camel.initialDPArgExtension_element",
10099 FT_NONE, BASE_NONE, NULL, 0,
10100 NULL, HFILL }},
10101 { &hf_camel_gmscAddress,
10102 { "gmscAddress", "camel.gmscAddress",
10103 FT_BYTES, BASE_NONE, NULL, 0,
10104 "ISDN_AddressString", HFILL }},
10105 { &hf_camel_ms_Classmark2,
10106 { "ms-Classmark2", "camel.ms_Classmark2",
10107 FT_BYTES, BASE_NONE, NULL, 0,
10108 NULL, HFILL }},
10109 { &hf_camel_iMEI,
10110 { "iMEI", "camel.iMEI",
10111 FT_BYTES, BASE_NONE, NULL, 0,
10112 NULL, HFILL }},
10113 { &hf_camel_supportedCamelPhases,
10114 { "supportedCamelPhases", "camel.supportedCamelPhases",
10115 FT_BYTES, BASE_NONE, NULL, 0,
10116 NULL, HFILL }},
10117 { &hf_camel_offeredCamel4Functionalities,
10118 { "offeredCamel4Functionalities", "camel.offeredCamel4Functionalities",
10119 FT_BYTES, BASE_NONE, NULL, 0,
10120 NULL, HFILL }},
10121 { &hf_camel_bearerCapability2,
10122 { "bearerCapability2", "camel.bearerCapability2",
10123 FT_UINT32, BASE_DEC, VALS(camel_BearerCapability_vals), 0,
10124 "BearerCapability", HFILL }},
10125 { &hf_camel_highLayerCompatibility2,
10126 { "highLayerCompatibility2", "camel.highLayerCompatibility2",
10127 FT_BYTES, BASE_NONE, NULL, 0,
10128 "HighLayerCompatibility", HFILL }},
10129 { &hf_camel_lowLayerCompatibility,
10130 { "lowLayerCompatibility", "camel.lowLayerCompatibility",
10131 FT_BYTES, BASE_NONE, NULL, 0,
10132 NULL, HFILL }},
10133 { &hf_camel_lowLayerCompatibility2,
10134 { "lowLayerCompatibility2", "camel.lowLayerCompatibility2",
10135 FT_BYTES, BASE_NONE, NULL, 0,
10136 "LowLayerCompatibility", HFILL }},
10137 { &hf_camel_enhancedDialledServicesAllowed,
10138 { "enhancedDialledServicesAllowed", "camel.enhancedDialledServicesAllowed_element",
10139 FT_NONE, BASE_NONE, NULL, 0,
10140 NULL, HFILL }},
10141 { &hf_camel_uu_Data,
10142 { "uu-Data", "camel.uu_Data_element",
10143 FT_NONE, BASE_NONE, NULL, 0,
10144 NULL, HFILL }},
10145 { &hf_camel_collectInformationAllowed,
10146 { "collectInformationAllowed", "camel.collectInformationAllowed_element",
10147 FT_NONE, BASE_NONE, NULL, 0,
10148 NULL, HFILL }},
10149 { &hf_camel_releaseCallArgExtensionAllowed,
10150 { "releaseCallArgExtensionAllowed", "camel.releaseCallArgExtensionAllowed_element",
10151 FT_NONE, BASE_NONE, NULL, 0,
10152 NULL, HFILL }},
10153 { &hf_camel_legToBeCreated,
10154 { "legToBeCreated", "camel.legToBeCreated",
10155 FT_UINT32, BASE_DEC, VALS(inap_LegID_vals), 0,
10156 "LegID", HFILL }},
10157 { &hf_camel_newCallSegment,
10158 { "newCallSegment", "camel.newCallSegment",
10159 FT_UINT32, BASE_DEC, NULL, 0,
10160 "CallSegmentID", HFILL }},
10161 { &hf_camel_gsmSCFAddress,
10162 { "gsmSCFAddress", "camel.gsmSCFAddress",
10163 FT_BYTES, BASE_NONE, NULL, 0,
10164 "ISDN_AddressString", HFILL }},
10165 { &hf_camel_suppress_T_CSI,
10166 { "suppress-T-CSI", "camel.suppress_T_CSI_element",
10167 FT_NONE, BASE_NONE, NULL, 0,
10168 NULL, HFILL }},
10169 { &hf_camel_legIDToMove,
10170 { "legIDToMove", "camel.legIDToMove",
10171 FT_UINT32, BASE_DEC, VALS(inap_LegID_vals), 0,
10172 "LegID", HFILL }},
10173 { &hf_camel_allCallSegments,
10174 { "allCallSegments", "camel.allCallSegments",
10175 FT_BYTES, BASE_NONE, NULL, 0,
10176 NULL, HFILL }},
10177 { &hf_camel_allCallSegmentsWithExtension,
10178 { "allCallSegmentsWithExtension", "camel.allCallSegmentsWithExtension_element",
10179 FT_NONE, BASE_NONE, NULL, 0,
10180 NULL, HFILL }},
10181 { &hf_camel_bcsmEvents,
10182 { "bcsmEvents", "camel.bcsmEvents",
10183 FT_UINT32, BASE_DEC, NULL, 0,
10184 "SEQUENCE_SIZE_1_bound__numOfBCSMEvents_OF_BCSMEvent", HFILL }},
10185 { &hf_camel_bcsmEvents_item,
10186 { "BCSMEvent", "camel.BCSMEvent_element",
10187 FT_NONE, BASE_NONE, NULL, 0,
10188 NULL, HFILL }},
10189 { &hf_camel_timerID,
10190 { "timerID", "camel.timerID",
10191 FT_UINT32, BASE_DEC, VALS(camel_TimerID_vals), 0,
10192 NULL, HFILL }},
10193 { &hf_camel_timervalue,
10194 { "timervalue", "camel.timervalue",
10195 FT_UINT32, BASE_DEC, NULL, 0,
10196 NULL, HFILL }},
10197 { &hf_camel_sCIBillingChargingCharacteristics,
10198 { "sCIBillingChargingCharacteristics", "camel.sCIBillingChargingCharacteristics",
10199 FT_BYTES, BASE_NONE, NULL, 0,
10200 NULL, HFILL }},
10201 { &hf_camel_legToBeSplit,
10202 { "legToBeSplit", "camel.legToBeSplit",
10203 FT_UINT32, BASE_DEC, VALS(inap_LegID_vals), 0,
10204 "LegID", HFILL }},
10205 { &hf_camel_chargingCharacteristics,
10206 { "chargingCharacteristics", "camel.chargingCharacteristics",
10207 FT_UINT32, BASE_DEC, VALS(camel_ChargingCharacteristics_vals), 0,
10208 NULL, HFILL }},
10209 { &hf_camel_applyChargingGPRS_tariffSwitchInterval,
10210 { "tariffSwitchInterval", "camel.tariffSwitchInterval",
10211 FT_UINT32, BASE_DEC, NULL, 0,
10212 "INTEGER_1_86400", HFILL }},
10213 { &hf_camel_chargingResult,
10214 { "chargingResult", "camel.chargingResult",
10215 FT_UINT32, BASE_DEC, VALS(camel_ChargingResult_vals), 0,
10216 NULL, HFILL }},
10217 { &hf_camel_active,
10218 { "active", "camel.active",
10219 FT_BOOLEAN, BASE_NONE, NULL, 0,
10220 "BOOLEAN", HFILL }},
10221 { &hf_camel_chargingRollOver,
10222 { "chargingRollOver", "camel.chargingRollOver",
10223 FT_UINT32, BASE_DEC, VALS(camel_ChargingRollOver_vals), 0,
10224 NULL, HFILL }},
10225 { &hf_camel_pdpID,
10226 { "pdpID", "camel.pdpID",
10227 FT_BYTES, BASE_NONE, NULL, 0,
10228 NULL, HFILL }},
10229 { &hf_camel_gPRSCause,
10230 { "gPRSCause", "camel.gPRSCause",
10231 FT_BYTES, BASE_NONE, NULL, 0,
10232 NULL, HFILL }},
10233 { &hf_camel_miscGPRSInfo,
10234 { "miscGPRSInfo", "camel.miscGPRSInfo_element",
10235 FT_NONE, BASE_NONE, NULL, 0,
10236 "MiscCallInfo", HFILL }},
10237 { &hf_camel_gPRSEventSpecificInformation,
10238 { "gPRSEventSpecificInformation", "camel.gPRSEventSpecificInformation",
10239 FT_UINT32, BASE_DEC, VALS(camel_GPRSEventSpecificInformation_vals), 0,
10240 NULL, HFILL }},
10241 { &hf_camel_mSISDN,
10242 { "mSISDN", "camel.mSISDN",
10243 FT_BYTES, BASE_NONE, NULL, 0,
10244 "ISDN_AddressString", HFILL }},
10245 { &hf_camel_gPRSMSClass,
10246 { "gPRSMSClass", "camel.gPRSMSClass_element",
10247 FT_NONE, BASE_NONE, NULL, 0,
10248 NULL, HFILL }},
10249 { &hf_camel_sGSNCapabilities,
10250 { "sGSNCapabilities", "camel.sGSNCapabilities",
10251 FT_BYTES, BASE_NONE, NULL, 0,
10252 NULL, HFILL }},
10253 { &hf_camel_gprsCause,
10254 { "gprsCause", "camel.gprsCause",
10255 FT_BYTES, BASE_NONE, NULL, 0,
10256 NULL, HFILL }},
10257 { &hf_camel_gPRSEvent,
10258 { "gPRSEvent", "camel.gPRSEvent",
10259 FT_UINT32, BASE_DEC, NULL, 0,
10260 "SEQUENCE_SIZE_1_bound__numOfGPRSEvents_OF_GPRSEvent", HFILL }},
10261 { &hf_camel_gPRSEvent_item,
10262 { "GPRSEvent", "camel.GPRSEvent_element",
10263 FT_NONE, BASE_NONE, NULL, 0,
10264 NULL, HFILL }},
10265 { &hf_camel_sCIGPRSBillingChargingCharacteristics,
10266 { "sCIGPRSBillingChargingCharacteristics", "camel.sCIGPRSBillingChargingCharacteristics",
10267 FT_BYTES, BASE_NONE, NULL, 0,
10268 NULL, HFILL }},
10269 { &hf_camel_callingPartysNumber,
10270 { "callingPartysNumber", "camel.callingPartysNumber",
10271 FT_BYTES, BASE_NONE, NULL, 0,
10272 "SMS_AddressString", HFILL }},
10273 { &hf_camel_destinationSubscriberNumber,
10274 { "destinationSubscriberNumber", "camel.destinationSubscriberNumber",
10275 FT_BYTES, BASE_NONE, NULL, 0,
10276 "CalledPartyBCDNumber", HFILL }},
10277 { &hf_camel_sMSCAddress,
10278 { "sMSCAddress", "camel.sMSCAddress",
10279 FT_BYTES, BASE_NONE, NULL, 0,
10280 "ISDN_AddressString", HFILL }},
10281 { &hf_camel_eventSpecificInformationSMS,
10282 { "eventSpecificInformationSMS", "camel.eventSpecificInformationSMS",
10283 FT_UINT32, BASE_DEC, VALS(camel_EventSpecificInformationSMS_vals), 0,
10284 NULL, HFILL }},
10285 { &hf_camel_callingPartyNumber_01,
10286 { "callingPartyNumber", "camel.callingPartyNumber",
10287 FT_BYTES, BASE_NONE, NULL, 0,
10288 "SMS_AddressString", HFILL }},
10289 { &hf_camel_locationInformationMSC,
10290 { "locationInformationMSC", "camel.locationInformationMSC_element",
10291 FT_NONE, BASE_NONE, NULL, 0,
10292 "LocationInformation", HFILL }},
10293 { &hf_camel_tPShortMessageSpecificInfo,
10294 { "tPShortMessageSpecificInfo", "camel.tPShortMessageSpecificInfo",
10295 FT_BYTES, BASE_NONE, NULL, 0,
10296 NULL, HFILL }},
10297 { &hf_camel_tPProtocolIdentifier,
10298 { "tPProtocolIdentifier", "camel.tPProtocolIdentifier",
10299 FT_BYTES, BASE_NONE, NULL, 0,
10300 NULL, HFILL }},
10301 { &hf_camel_tPDataCodingScheme,
10302 { "tPDataCodingScheme", "camel.tPDataCodingScheme",
10303 FT_BYTES, BASE_NONE, NULL, 0,
10304 NULL, HFILL }},
10305 { &hf_camel_tPValidityPeriod,
10306 { "tPValidityPeriod", "camel.tPValidityPeriod",
10307 FT_BYTES, BASE_NONE, NULL, 0,
10308 NULL, HFILL }},
10309 { &hf_camel_smsReferenceNumber,
10310 { "smsReferenceNumber", "camel.smsReferenceNumber",
10311 FT_BYTES, BASE_NONE, NULL, 0,
10312 "CallReferenceNumber", HFILL }},
10313 { &hf_camel_calledPartyNumber_01,
10314 { "calledPartyNumber", "camel.calledPartyNumber",
10315 FT_BYTES, BASE_NONE, NULL, 0,
10316 "ISDN_AddressString", HFILL }},
10317 { &hf_camel_sMSEvents,
10318 { "sMSEvents", "camel.sMSEvents",
10319 FT_UINT32, BASE_DEC, NULL, 0,
10320 "SEQUENCE_SIZE_1_bound__numOfSMSEvents_OF_SMSEvent", HFILL }},
10321 { &hf_camel_sMSEvents_item,
10322 { "SMSEvent", "camel.SMSEvent_element",
10323 FT_NONE, BASE_NONE, NULL, 0,
10324 NULL, HFILL }},
10325 { &hf_camel_extensions_01,
10326 { "extensions", "camel.extensions",
10327 FT_UINT32, BASE_DEC, NULL, 0,
10328 "SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField", HFILL }},
10329 { &hf_camel_extensions_item,
10330 { "ExtensionField", "camel.ExtensionField_element",
10331 FT_NONE, BASE_NONE, NULL, 0,
10332 NULL, HFILL }},
10333 { &hf_camel_na_info,
10334 { "na-info", "camel.na_info_element",
10335 FT_NONE, BASE_NONE, NULL, 0,
10336 NULL, HFILL }},
10337 { &hf_camel_naCarrierInformation,
10338 { "naCarrierInformation", "camel.naCarrierInformation_element",
10339 FT_NONE, BASE_NONE, NULL, 0,
10340 NULL, HFILL }},
10341 { &hf_camel_naCarrierId,
10342 { "naCarrierId", "camel.naCarrierId",
10343 FT_BYTES, BASE_NONE, NULL, 0,
10344 "NAEA_CIC", HFILL }},
10345 { &hf_camel_naCICSelectionType,
10346 { "naCICSelectionType", "camel.naCICSelectionType",
10347 FT_BYTES, BASE_NONE, NULL, 0,
10348 "NACarrierSelectionInfo", HFILL }},
10349 { &hf_camel_naChargeNumber,
10350 { "naChargeNumber", "camel.naChargeNumber",
10351 FT_BYTES, BASE_NONE, NULL, 0,
10352 NULL, HFILL }},
10353 { &hf_camel_timeDurationCharging_01,
10354 { "timeDurationCharging", "camel.timeDurationCharging_element",
10355 FT_NONE, BASE_NONE, NULL, 0,
10356 "T_timeDurationCharging_01", HFILL }},
10357 { &hf_camel_releaseIfdurationExceeded_01,
10358 { "releaseIfdurationExceeded", "camel.releaseIfdurationExceeded_element",
10359 FT_NONE, BASE_NONE, NULL, 0,
10360 NULL, HFILL }},
10361 { &hf_camel_tariffSwitchInterval,
10362 { "tariffSwitchInterval", "camel.tariffSwitchInterval",
10363 FT_UINT32, BASE_DEC, NULL, 0,
10364 "INTEGER_1_86400", HFILL }},
10365 { &hf_camel_tone_01,
10366 { "tone", "camel.tone",
10367 FT_BOOLEAN, BASE_NONE, NULL, 0,
10368 "BOOLEAN", HFILL }},
10369 { &hf_camel_local,
10370 { "local", "camel.local",
10371 FT_INT32, BASE_DEC, VALS(camel_opr_code_strings), 0,
10372 NULL, HFILL }},
10373 { &hf_camel_global,
10374 { "global", "camel.global",
10375 FT_OID, BASE_NONE, NULL, 0,
10376 NULL, HFILL }},
10377 { &hf_camel_invoke,
10378 { "invoke", "camel.invoke_element",
10379 FT_NONE, BASE_NONE, NULL, 0,
10380 NULL, HFILL }},
10381 { &hf_camel_returnResult,
10382 { "returnResult", "camel.returnResult_element",
10383 FT_NONE, BASE_NONE, NULL, 0,
10384 NULL, HFILL }},
10385 { &hf_camel_returnError,
10386 { "returnError", "camel.returnError_element",
10387 FT_NONE, BASE_NONE, NULL, 0,
10388 NULL, HFILL }},
10389 { &hf_camel_reject,
10390 { "reject", "camel.reject_element",
10391 FT_NONE, BASE_NONE, NULL, 0,
10392 NULL, HFILL }},
10393 { &hf_camel_invokeId,
10394 { "invokeId", "camel.invokeId",
10395 FT_UINT32, BASE_DEC, VALS(camel_InvokeId_vals), 0,
10396 NULL, HFILL }},
10397 { &hf_camel_linkedId,
10398 { "linkedId", "camel.linkedId",
10399 FT_UINT32, BASE_DEC, VALS(camel_T_linkedId_vals), 0,
10400 NULL, HFILL }},
10401 { &hf_camel_linkedIdPresent,
10402 { "present", "camel.present",
10403 FT_INT32, BASE_DEC, NULL, 0,
10404 "T_linkedIdPresent", HFILL }},
10405 { &hf_camel_absent,
10406 { "absent", "camel.absent_element",
10407 FT_NONE, BASE_NONE, NULL, 0,
10408 NULL, HFILL }},
10409 { &hf_camel_opcode,
10410 { "opcode", "camel.opcode",
10411 FT_UINT32, BASE_DEC, VALS(camel_Code_vals), 0,
10412 "Code", HFILL }},
10413 { &hf_camel_argument,
10414 { "argument", "camel.argument_element",
10415 FT_NONE, BASE_NONE, NULL, 0,
10416 NULL, HFILL }},
10417 { &hf_camel_result,
10418 { "result", "camel.result_element",
10419 FT_NONE, BASE_NONE, NULL, 0,
10420 NULL, HFILL }},
10421 { &hf_camel_resultArgument,
10422 { "result", "camel.result_element",
10423 FT_NONE, BASE_NONE, NULL, 0,
10424 "ResultArgument", HFILL }},
10425 { &hf_camel_errcode,
10426 { "errcode", "camel.errcode",
10427 FT_UINT32, BASE_DEC, VALS(camel_Code_vals), 0,
10428 "Code", HFILL }},
10429 { &hf_camel_parameter,
10430 { "parameter", "camel.parameter_element",
10431 FT_NONE, BASE_NONE, NULL, 0,
10432 NULL, HFILL }},
10433 { &hf_camel_problem,
10434 { "problem", "camel.problem",
10435 FT_UINT32, BASE_DEC, VALS(camel_T_problem_vals), 0,
10436 NULL, HFILL }},
10437 { &hf_camel_general,
10438 { "general", "camel.general",
10439 FT_INT32, BASE_DEC, VALS(camel_GeneralProblem_vals), 0,
10440 "GeneralProblem", HFILL }},
10441 { &hf_camel_invokeProblem,
10442 { "invoke", "camel.invoke",
10443 FT_INT32, BASE_DEC, VALS(camel_InvokeProblem_vals), 0,
10444 "InvokeProblem", HFILL }},
10445 { &hf_camel_problemReturnResult,
10446 { "returnResult", "camel.returnResult",
10447 FT_INT32, BASE_DEC, VALS(camel_ReturnResultProblem_vals), 0,
10448 "ReturnResultProblem", HFILL }},
10449 { &hf_camel_returnErrorProblem,
10450 { "returnError", "camel.returnError",
10451 FT_INT32, BASE_DEC, VALS(camel_ReturnErrorProblem_vals), 0,
10452 "ReturnErrorProblem", HFILL }},
10453 { &hf_camel_present,
10454 { "present", "camel.present",
10455 FT_INT32, BASE_DEC, NULL, 0,
10456 "INTEGER", HFILL }},
10457 { &hf_camel_InvokeId_present,
10458 { "InvokeId.present", "camel.InvokeId_present",
10459 FT_INT32, BASE_DEC, NULL, 0,
10460 "InvokeId_present", HFILL }},
10463 /* List of subtrees */
10464 static int *ett[] = {
10465 &ett_camel,
10466 &ett_camelisup_parameter,
10467 &ett_camel_AccessPointName,
10468 &ett_camel_pdptypenumber,
10469 &ett_camel_cause,
10470 &ett_camel_RPcause,
10471 &ett_camel_stat,
10472 &ett_camel_calledpartybcdnumber,
10473 &ett_camel_callingpartynumber,
10474 &ett_camel_originalcalledpartyid,
10475 &ett_camel_redirectingpartyid,
10476 &ett_camel_locationnumber,
10477 &ett_camel_additionalcallingpartynumber,
10478 &ett_camel_calledAddressValue,
10479 &ett_camel_callingAddressValue,
10480 &ett_camel_assistingSSPIPRoutingAddress,
10481 &ett_camel_correlationID,
10482 &ett_camel_dTMFDigitsCompleted,
10483 &ett_camel_dTMFDigitsTimeOut,
10484 &ett_camel_number,
10485 &ett_camel_digitsResponse,
10486 &ett_camel_timeandtimezone,
10488 &ett_camel_AChChargingAddress,
10489 &ett_camel_AOCBeforeAnswer,
10490 &ett_camel_AOCGPRS,
10491 &ett_camel_AOCSubsequent,
10492 &ett_camel_AudibleIndicator,
10493 &ett_camel_BackwardServiceInteractionInd,
10494 &ett_camel_BasicGapCriteria,
10495 &ett_camel_T_calledAddressAndService,
10496 &ett_camel_T_callingAddressAndService,
10497 &ett_camel_BCSMEvent,
10498 &ett_camel_BCSM_Failure,
10499 &ett_camel_BearerCapability,
10500 &ett_camel_Burst,
10501 &ett_camel_BurstList,
10502 &ett_camel_CAI_GSM0224,
10503 &ett_camel_CallSegmentFailure,
10504 &ett_camel_CallSegmentToCancel,
10505 &ett_camel_CAMEL_AChBillingChargingCharacteristics,
10506 &ett_camel_T_timeDurationCharging,
10507 &ett_camel_CAMEL_CallResult,
10508 &ett_camel_T_timeDurationChargingResult,
10509 &ett_camel_CAMEL_FCIBillingChargingCharacteristics,
10510 &ett_camel_T_fci_fCIBCCCAMELsequence1,
10511 &ett_camel_CAMEL_FCIGPRSBillingChargingCharacteristics,
10512 &ett_camel_T_fciGPRS_fCIBCCCAMELsequence1,
10513 &ett_camel_CAMEL_FCISMSBillingChargingCharacteristics,
10514 &ett_camel_T_fciSMS_fCIBCCCAMELsequence1,
10515 &ett_camel_CAMEL_SCIBillingChargingCharacteristics,
10516 &ett_camel_CAMEL_SCIBillingChargingCharacteristicsAlt,
10517 &ett_camel_CAMEL_SCIGPRSBillingChargingCharacteristics,
10518 &ett_camel_ChangeOfPositionControlInfo,
10519 &ett_camel_ChangeOfLocation,
10520 &ett_camel_ChangeOfLocationAlt,
10521 &ett_camel_ChargingCharacteristics,
10522 &ett_camel_ChargingResult,
10523 &ett_camel_ChargingRollOver,
10524 &ett_camel_CollectedDigits,
10525 &ett_camel_CollectedInfo,
10526 &ett_camel_CompoundCriteria,
10527 &ett_camel_DestinationRoutingAddress,
10528 &ett_camel_DpSpecificCriteria,
10529 &ett_camel_DpSpecificCriteriaAlt,
10530 &ett_camel_DpSpecificInfoAlt,
10531 &ett_camel_T_oServiceChangeSpecificInfo,
10532 &ett_camel_T_tServiceChangeSpecificInfo,
10533 &ett_camel_T_collectedInfoSpecificInfo,
10534 &ett_camel_ElapsedTime,
10535 &ett_camel_T_timeGPRSIfTariffSwitch,
10536 &ett_camel_ElapsedTimeRollOver,
10537 &ett_camel_T_rO_TimeGPRSIfTariffSwitch,
10538 &ett_camel_EndUserAddress,
10539 &ett_camel_EventSpecificInformationBCSM,
10540 &ett_camel_T_routeSelectFailureSpecificInfo,
10541 &ett_camel_T_oCalledPartyBusySpecificInfo,
10542 &ett_camel_T_oNoAnswerSpecificInfo,
10543 &ett_camel_T_oAnswerSpecificInfo,
10544 &ett_camel_T_oMidCallSpecificInfo,
10545 &ett_camel_T_omidCallEvents,
10546 &ett_camel_T_oDisconnectSpecificInfo,
10547 &ett_camel_T_tBusySpecificInfo,
10548 &ett_camel_T_tNoAnswerSpecificInfo,
10549 &ett_camel_T_tAnswerSpecificInfo,
10550 &ett_camel_T_tMidCallSpecificInfo,
10551 &ett_camel_T_tmidCallEvents,
10552 &ett_camel_T_tDisconnectSpecificInfo,
10553 &ett_camel_T_oTermSeizedSpecificInfo,
10554 &ett_camel_T_callAcceptedSpecificInfo,
10555 &ett_camel_T_oAbandonSpecificInfo,
10556 &ett_camel_T_oChangeOfPositionSpecificInfo,
10557 &ett_camel_T_tChangeOfPositionSpecificInfo,
10558 &ett_camel_EventSpecificInformationSMS,
10559 &ett_camel_T_o_smsFailureSpecificInfo,
10560 &ett_camel_T_o_smsSubmissionSpecificInfo,
10561 &ett_camel_T_t_smsFailureSpecificInfo,
10562 &ett_camel_T_t_smsDeliverySpecificInfo,
10563 &ett_camel_Extensions,
10564 &ett_camel_ExtensionField,
10565 &ett_camel_ForwardServiceInteractionInd,
10566 &ett_camel_GapCriteria,
10567 &ett_camel_GapIndicators,
10568 &ett_camel_GapOnService,
10569 &ett_camel_GapTreatment,
10570 &ett_camel_GenericNumbers,
10571 &ett_camel_GPRS_QoS,
10572 &ett_camel_GPRS_QoS_Extension,
10573 &ett_camel_GPRSEvent,
10574 &ett_camel_GPRSEventSpecificInformation,
10575 &ett_camel_T_attachChangeOfPositionSpecificInformation,
10576 &ett_camel_T_pdp_ContextchangeOfPositionSpecificInformation,
10577 &ett_camel_T_detachSpecificInformation,
10578 &ett_camel_T_disconnectSpecificInformation,
10579 &ett_camel_T_pDPContextEstablishmentSpecificInformation,
10580 &ett_camel_T_pDPContextEstablishmentAcknowledgementSpecificInformation,
10581 &ett_camel_InbandInfo,
10582 &ett_camel_InformationToSend,
10583 &ett_camel_LegOrCallSegment,
10584 &ett_camel_LocationInformationGPRS,
10585 &ett_camel_MessageID,
10586 &ett_camel_T_text,
10587 &ett_camel_SEQUENCE_SIZE_1_bound__numOfMessageIDs_OF_Integer4,
10588 &ett_camel_T_variableMessage,
10589 &ett_camel_SEQUENCE_SIZE_1_5_OF_VariablePart,
10590 &ett_camel_MetDPCriteriaList,
10591 &ett_camel_MetDPCriterion,
10592 &ett_camel_MetDPCriterionAlt,
10593 &ett_camel_MidCallControlInfo,
10594 &ett_camel_QualityOfService,
10595 &ett_camel_ReceivingSideID,
10596 &ett_camel_RequestedInformationList,
10597 &ett_camel_RequestedInformationTypeList,
10598 &ett_camel_RequestedInformation,
10599 &ett_camel_RequestedInformationValue,
10600 &ett_camel_SendingSideID,
10601 &ett_camel_ServiceInteractionIndicatorsTwo,
10602 &ett_camel_SMSEvent,
10603 &ett_camel_TimeIfTariffSwitch,
10604 &ett_camel_TimeInformation,
10605 &ett_camel_Tone,
10606 &ett_camel_TransferredVolume,
10607 &ett_camel_T_volumeIfTariffSwitch,
10608 &ett_camel_TransferredVolumeRollOver,
10609 &ett_camel_T_rO_VolumeIfTariffSwitch,
10610 &ett_camel_VariablePart,
10611 &ett_camel_PAR_cancelFailed,
10612 &ett_camel_CAP_GPRS_ReferenceNumber,
10613 &ett_camel_PlayAnnouncementArg,
10614 &ett_camel_PromptAndCollectUserInformationArg,
10615 &ett_camel_ReceivedInformationArg,
10616 &ett_camel_SpecializedResourceReportArg,
10617 &ett_camel_ApplyChargingArg,
10618 &ett_camel_AssistRequestInstructionsArg,
10619 &ett_camel_CallGapArg,
10620 &ett_camel_CallInformationReportArg,
10621 &ett_camel_CallInformationRequestArg,
10622 &ett_camel_CancelArg,
10623 &ett_camel_CollectInformationArg,
10624 &ett_camel_ConnectArg,
10625 &ett_camel_ConnectToResourceArg,
10626 &ett_camel_T_resourceAddress,
10627 &ett_camel_ContinueWithArgumentArg,
10628 &ett_camel_ContinueWithArgumentArgExtension,
10629 &ett_camel_DisconnectForwardConnectionWithArgumentArg,
10630 &ett_camel_DisconnectLegArg,
10631 &ett_camel_EntityReleasedArg,
10632 &ett_camel_EstablishTemporaryConnectionArg,
10633 &ett_camel_EventReportBCSMArg,
10634 &ett_camel_InitialDPArg,
10635 &ett_camel_InitialDPArgExtension,
10636 &ett_camel_InitiateCallAttemptArg,
10637 &ett_camel_InitiateCallAttemptRes,
10638 &ett_camel_MoveLegArg,
10639 &ett_camel_PlayToneArg,
10640 &ett_camel_ReleaseCallArg,
10641 &ett_camel_AllCallSegmentsWithExtension,
10642 &ett_camel_RequestReportBCSMEventArg,
10643 &ett_camel_SEQUENCE_SIZE_1_bound__numOfBCSMEvents_OF_BCSMEvent,
10644 &ett_camel_ResetTimerArg,
10645 &ett_camel_SendChargingInformationArg,
10646 &ett_camel_SplitLegArg,
10647 &ett_camel_ApplyChargingGPRSArg,
10648 &ett_camel_ApplyChargingReportGPRSArg,
10649 &ett_camel_CancelGPRSArg,
10650 &ett_camel_ConnectGPRSArg,
10651 &ett_camel_ContinueGPRSArg,
10652 &ett_camel_EntityReleasedGPRSArg,
10653 &ett_camel_EventReportGPRSArg,
10654 &ett_camel_InitialDPGPRSArg,
10655 &ett_camel_ReleaseGPRSArg,
10656 &ett_camel_RequestReportGPRSEventArg,
10657 &ett_camel_SEQUENCE_SIZE_1_bound__numOfGPRSEvents_OF_GPRSEvent,
10658 &ett_camel_ResetTimerGPRSArg,
10659 &ett_camel_SendChargingInformationGPRSArg,
10660 &ett_camel_ConnectSMSArg,
10661 &ett_camel_EventReportSMSArg,
10662 &ett_camel_InitialDPSMSArg,
10663 &ett_camel_RequestReportSMSEventArg,
10664 &ett_camel_SEQUENCE_SIZE_1_bound__numOfSMSEvents_OF_SMSEvent,
10665 &ett_camel_ResetTimerSMSArg,
10666 &ett_camel_EstablishTemporaryConnectionArgV2,
10667 &ett_camel_SEQUENCE_SIZE_1_numOfExtensions_OF_ExtensionField,
10668 &ett_camel_InitialDPArgExtensionV2,
10669 &ett_camel_NACarrierInformation,
10670 &ett_camel_NA_Info,
10671 &ett_camel_CAMEL_AChBillingChargingCharacteristicsV2,
10672 &ett_camel_T_timeDurationCharging_01,
10673 &ett_camel_ReleaseIfDurationExceeded,
10674 &ett_camel_Code,
10675 &ett_camel_ROS,
10676 &ett_camel_Invoke,
10677 &ett_camel_T_linkedId,
10678 &ett_camel_ReturnResult,
10679 &ett_camel_T_result,
10680 &ett_camel_ReturnError,
10681 &ett_camel_Reject,
10682 &ett_camel_T_problem,
10683 &ett_camel_InvokeId,
10686 static ei_register_info ei[] = {
10687 { &ei_camel_unknown_invokeData, { "camel.unknown.invokeData", PI_MALFORMED, PI_WARN, "Unknown invokeData", EXPFILL }},
10688 { &ei_camel_unknown_returnResultData, { "camel.unknown.returnResultData", PI_MALFORMED, PI_WARN, "Unknown returnResultData", EXPFILL }},
10689 { &ei_camel_unknown_returnErrorData, { "camel.unknown.returnErrorData", PI_MALFORMED, PI_WARN, "Unknown returnErrorData", EXPFILL }},
10690 { &ei_camel_par_wrong_length, { "camel.par_wrong_length", PI_PROTOCOL, PI_ERROR, "Wrong length of parameter", EXPFILL }},
10691 { &ei_camel_bcd_not_digit, { "camel.bcd_not_digit", PI_MALFORMED, PI_WARN, "BCD number contains a value that is not a digit", EXPFILL }},
10694 expert_module_t* expert_camel;
10696 static tap_param camel_stat_params[] = {
10697 { PARAM_FILTER, "filter", "Filter", NULL, true }
10700 static stat_tap_table_ui camel_stat_table = {
10701 REGISTER_TELEPHONY_GROUP_GSM,
10702 "CAMEL Messages and Response Status",
10703 PSNAME,
10704 "camel,counter",
10705 camel_stat_init,
10706 camel_stat_packet,
10707 camel_stat_reset,
10708 camel_stat_free_table_item,
10709 NULL,
10710 array_length(camel_stat_fields), camel_stat_fields,
10711 array_length(camel_stat_params), camel_stat_params,
10712 NULL,
10716 /* Register protocol */
10717 proto_camel = proto_register_protocol(PNAME, PSNAME, PFNAME);
10719 camel_handle = register_dissector("camel", dissect_camel, proto_camel);
10720 camel_v1_handle = register_dissector("camel-v1", dissect_camel_v1, proto_camel);
10721 camel_v2_handle = register_dissector("camel-v2", dissect_camel_v2, proto_camel);
10722 camel_v3_handle = register_dissector("camel-v3", dissect_camel_v3, proto_camel);
10723 camel_v4_handle = register_dissector("camel-v4", dissect_camel_v4, proto_camel);
10725 proto_register_field_array(proto_camel, hf, array_length(hf));
10726 proto_register_subtree_array(ett, array_length(ett));
10727 expert_camel = expert_register_protocol(proto_camel);
10728 expert_register_field_array(expert_camel, ei, array_length(ei));
10730 rose_ctx_init(&camel_rose_ctx);
10732 /* Register dissector tables */
10733 camel_rose_ctx.arg_local_dissector_table = register_dissector_table("camel.ros.local.arg",
10734 "CAMEL Operation Argument (local opcode)", proto_camel,
10735 FT_UINT32, BASE_HEX);
10736 camel_rose_ctx.res_local_dissector_table = register_dissector_table("camel.ros.local.res",
10737 "CAMEL Operation Result (local opcode)", proto_camel,
10738 FT_UINT32, BASE_HEX);
10739 camel_rose_ctx.err_local_dissector_table = register_dissector_table("camel.ros.local.err",
10740 "CAMEL Error (local opcode)", proto_camel,
10741 FT_UINT32, BASE_HEX);
10743 /* Register our configuration options, particularly our SSNs */
10744 /* Set default SSNs */
10745 range_convert_str(wmem_epan_scope(), &global_ssn_range, "146", MAX_SSN);
10747 camel_module = prefs_register_protocol(proto_camel, proto_reg_handoff_camel);
10749 prefs_register_enum_preference(camel_module, "date.format", "Date Format",
10750 "The date format: (DD/MM) or (MM/DD)",
10751 &date_format, date_options, false);
10754 prefs_register_range_preference(camel_module, "tcap.ssn",
10755 "TCAP SSNs",
10756 "TCAP Subsystem numbers used for Camel",
10757 &global_ssn_range, MAX_SSN);
10759 prefs_register_obsolete_preference(camel_module, "srt");
10761 prefs_register_bool_preference(camel_module, "persistentsrt",
10762 "Persistent stats for SRT",
10763 "Statistics for Response Time",
10764 &gcamel_PersistentSRT);
10766 /* Routine for statistic */
10767 register_init_routine(&camelsrt_init_routine);
10769 /* create new hash-table for SRT */
10770 srt_calls = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), camelsrt_call_hash, camelsrt_call_equal);
10772 camel_tap=register_tap(PSNAME);
10774 register_srt_table(proto_camel, PSNAME, 1, camelstat_packet, camelstat_init, NULL);
10775 register_stat_tap_table_ui(&camel_stat_table);
10779 * Editor modelines
10781 * Local Variables:
10782 * c-basic-offset: 2
10783 * tab-width: 8
10784 * indent-tabs-mode: nil
10785 * End:
10787 * ex: set shiftwidth=2 tabstop=8 expandtab:
10788 * :indentSize=2:tabSize=8:noTabs=true: